Reuse client mechanism for movement on entities

Also brings in some MonoGame math classes to fulfill this purpose.
This commit is contained in:
Drew DeVault 2016-04-06 21:37:11 -04:00
parent 9de14e371b
commit 4dd67d30fa
8 changed files with 1683 additions and 4 deletions

1663
TrueCraft.API/Matrix.cs Normal file

File diff suppressed because it is too large Load Diff

View File

@ -126,6 +126,7 @@
<Compile Include="Logic\ISmeltableItem.cs" />
<Compile Include="Logic\IBurnableItem.cs" />
<Compile Include="Logic\SoundEffectClass.cs" />
<Compile Include="Matrix.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup />

View File

@ -111,6 +111,14 @@ namespace TrueCraft.API
Square(other.Z - Z));
}
public Vector3 Transform(Matrix matrix)
{
var x = (X * matrix.M11) + (Y * matrix.M21) + (Z * matrix.M31) + matrix.M41;
var y = (X * matrix.M12) + (Y * matrix.M22) + (Z * matrix.M32) + matrix.M42;
var z = (X * matrix.M13) + (Y * matrix.M23) + (Z * matrix.M33) + matrix.M43;
return new Vector3(x, y, z);
}
/// <summary>
/// Calculates the square of a num.
/// </summary>

View File

@ -3,6 +3,7 @@ using Microsoft.Xna.Framework.Graphics;
using TrueCraft.API;
using TrueCraft.Client.Rendering;
using Microsoft.Xna.Framework;
using Matrix = Microsoft.Xna.Framework.Matrix;
using XVector3 = Microsoft.Xna.Framework.Vector3;
using TVector3 = TrueCraft.API.Vector3;
using TRay = TrueCraft.API.Ray;

View File

@ -3,6 +3,7 @@ using System.Diagnostics;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using TrueCraft.Client.Input;
using Matrix = Microsoft.Xna.Framework.Matrix;
using TVector3 = TrueCraft.API.Vector3;
using XVector3 = Microsoft.Xna.Framework.Vector3;
using TrueCraft.API;

View File

@ -24,7 +24,7 @@ namespace TrueCraft.Core.AI
public WanderState()
{
IdleChance = 20;
IdleChance = 10;
Distance = 25;
PathFinder = new AStarPathFinder();
}

View File

@ -116,11 +116,11 @@ namespace TrueCraft.Core.Entities
// Advance along path
var target = (Vector3)CurrentPath.Waypoints[CurrentPath.Index];
target.Y = Position.Y; // TODO: Find better way of doing this
var diff = target - Position;
diff *= modifier;
if (faceRoute)
Face(target);
Position += diff;
var lookAt = Vector3.Forwards.Transform(Matrix.CreateRotationY(MathHelper.ToRadians(-(Yaw - 180) + 180)));
lookAt *= modifier;
Velocity = new Vector3(lookAt.X, Velocity.Y, lookAt.Z);
if (Position.DistanceTo(target) < 0.1)
{
CurrentPath.Index++;

View File

@ -33,6 +33,11 @@ namespace TrueCraft.Core
return (int)(value * 32);
}
public static double ToRadians(double degrees)
{
return degrees * 0.017453292519943295769236907684886;
}
public static Coordinates3D BlockFaceToCoordinates(BlockFace face)
{
switch (face)