本文整理汇总了C#中Microsoft.Xna.Framework.Vector3.LengthSquared方法的典型用法代码示例。如果您正苦于以下问题:C# Microsoft.Xna.Framework.Vector3.LengthSquared方法的具体用法?C# Microsoft.Xna.Framework.Vector3.LengthSquared怎么用?C# Microsoft.Xna.Framework.Vector3.LengthSquared使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Microsoft.Xna.Framework.Vector3
的用法示例。
在下文中一共展示了Microsoft.Xna.Framework.Vector3.LengthSquared方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Update
//.........这里部分代码省略.........
else
{
//calculate steering direction
if ((agents[i].Parameters.UpdateFlags & UpdateFlags.AnticipateTurns) != 0)
CalcSmoothSteerDirection(agents[i], ref dvel);
else
CalcStraightSteerDirection(agents[i], ref dvel);
//calculate speed scale, which tells the agent to slowdown at the end of the path
float slowDownRadius = agents[i].Parameters.Radius * 2;
float speedScale = GetDistanceToGoal(agents[i], slowDownRadius) / slowDownRadius;
agents[i].DesiredSpeed = agents[i].Parameters.MaxSpeed;
dvel = dvel * (agents[i].DesiredSpeed * speedScale);
}
//separation
if ((agents[i].Parameters.UpdateFlags & UpdateFlags.Separation) != 0)
{
float separationDist = agents[i].Parameters.CollisionQueryRange;
float invSeparationDist = 1.0f / separationDist;
float separationWeight = agents[i].Parameters.SeparationWeight;
float w = 0;
Vector3 disp = new Vector3(0, 0, 0);
for (int j = 0; j < agents[i].NeighborCount; j++)
{
Agent nei = agents[agents[i].Neighbors[j].Index];
Vector3 diff = agents[i].Position - nei.Position;
diff.Y = 0;
float distSqr = diff.LengthSquared();
if (distSqr < 0.00001f)
continue;
if (distSqr > separationDist * separationDist)
continue;
float dist = (float)Math.Sqrt(distSqr);
float weight = separationWeight * (1.0f - (dist * invSeparationDist) * (dist * invSeparationDist));
disp = disp + diff * (weight / dist);
w += 1.0f;
}
if (w > 0.0001f)
{
//adjust desired veloctiy
dvel = dvel + disp * (1.0f / w);
//clamp desired velocity to desired speed
float speedSqr = dvel.LengthSquared();
float desiredSqr = agents[i].DesiredSpeed * agents[i].DesiredSpeed;
if (speedSqr > desiredSqr)
dvel = dvel * (desiredSqr / speedSqr);
}
}
//set the desired velocity
agents[i].DesiredVel = dvel;
}
//velocity planning
for (int i = 0; i < numAgents; i++)
{
if (agents[i].State != AgentState.Walking)