本文整理汇总了C#中Vector3D.GetMagnitudeSquared方法的典型用法代码示例。如果您正苦于以下问题:C# Vector3D.GetMagnitudeSquared方法的具体用法?C# Vector3D.GetMagnitudeSquared怎么用?C# Vector3D.GetMagnitudeSquared使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vector3D
的用法示例。
在下文中一共展示了Vector3D.GetMagnitudeSquared方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ProcessPlayerInput
//.........这里部分代码省略.........
newRotation.Y -= moveunit*2F;
}
if(keyboard.GetKeyState(Key.key_E))
{
newRotation.Y += moveunit*2F;
}
#endregion
#region 2.0 Process Movement Input
Vector3D changeOfPosition = new Vector3D( 0, 0, 0 );
if ( keyboard.GetKeyState(Key.key_W) )
{
changeOfPosition.X += (float)Math.Sin( newRotation.Y * Math.PI/180.0 ) * moveunit;
changeOfPosition.Z += (float)Math.Cos( newRotation.Y * Math.PI/180.0 ) * moveunit;
}
if ( keyboard.GetKeyState(Key.key_S) )
{
changeOfPosition.X -= (float)Math.Sin( newRotation.Y * Math.PI/180.0 ) * moveunit/2F;
changeOfPosition.Z -= (float)Math.Cos( newRotation.Y * Math.PI/180.0 ) * moveunit/2F;
}
if ( keyboard.GetKeyState(Key.key_D) )
{
changeOfPosition.X += (float)Math.Cos( newRotation.Y * Math.PI/180.0 ) * moveunit/2F;
changeOfPosition.Z -= (float)Math.Sin( newRotation.Y * Math.PI/180.0 ) * moveunit/2F;
}
if( keyboard.GetKeyState(Key.key_A) )
{
changeOfPosition.X -= (float)Math.Cos( newRotation.Y * Math.PI/180.0 ) * moveunit/2F;
changeOfPosition.Z += (float)Math.Sin( newRotation.Y * Math.PI/180.0 ) * moveunit/2F;
}
if( changeOfPosition.GetMagnitudeSquared() != 0 )
{
// stay on the ground
// TODO: What about when walking on objects?
Vector3D newPosition = avatarPosition + changeOfPosition;
try
{
newPosition.Y =
Game.CurrentWorld.TerrainPieces.AltitudeAt( newPosition.X, newPosition.Z ) + Game.CurrentWorld.CurrentAvatar.physicalObject.Height/2;
//Game.CurrentWorld.WorldTerrain.HeightLookup( newPosition.X, newPosition.Z ) + Game.CurrentWorld.CurrentAvatar.physicalObject.Height/2;
changeOfPosition.Y = newPosition.Y - avatarPosition.Y;
// check that we can go there
foreach ( PhysicalObjectInstance poi in Game.CurrentWorld.physicalObjectInstances.Values )
{
if ( poi.physicalObject is Terrain )
{
continue;
}
if ( poi == Game.CurrentWorld.CurrentAvatar )
{
//ignore ourselves
continue;
}
// do a bounding sphere test to see if the movement will go near poi
// test from the middle of the line drawn between current position
// and future position, distance is the radius of both objects
// plus half the distance of the movement.
float dx = avatarPosition.X + changeOfPosition.X / 2F - poi.model.Position.X;
float dy = avatarPosition.Y + changeOfPosition.Y / 2F - poi.model.Position.Y;
float dz = avatarPosition.Z + changeOfPosition.Z / 2F - poi.model.Position.Z;
float distance_squared = dx*dx + dy*dy + dz*dz;