public void MoveTowards(CGPoint position, double timeInterval) { CGPoint curPosition = Position; var dx = position.X - curPosition.X; var dy = position.Y - curPosition.Y; var ds = MovementSpeed * (float)timeInterval; var angle = GraphicsUtilities.RadiansBetweenCGPoints(position, curPosition); angle = GraphicsUtilities.PalarAdjust(angle); ZRotation = angle; var distRemaining = GraphicsUtilities.Hypotenuse(dx, dy); if (distRemaining < ds) { Position = position; } else { var x = (float)(curPosition.X - Math.Sin(angle) * ds); var y = (float)(curPosition.Y + Math.Cos(angle) * ds); Position = new CGPoint(x, y); } RequestedAnimation = AnimationState.Walk; }
public void MoveInDirection(CGPoint direction, double timeInterval) { var curPosition = Position; var dx = MovementSpeed * direction.X; var dy = MovementSpeed * direction.Y; var ds = MovementSpeed * (float)timeInterval; var targetPosition = new CGPoint(curPosition.X + dx, curPosition.Y + dy); var angle = GraphicsUtilities.RadiansBetweenCGPoints(targetPosition, curPosition); var ang = GraphicsUtilities.PalarAdjust(angle); ZRotation = ang; var distRemaining = GraphicsUtilities.Hypotenuse(dx, dy); if (distRemaining < ds) { Position = targetPosition; } else { float x = (float)(curPosition.X - Math.Sin(ang) * ds); float y = (float)(curPosition.Y + Math.Cos(ang) * ds); Position = new CGPoint(x, y); } // Don't change to a walk animation if we planning an attack. if (!Attacking) { RequestedAnimation = AnimationState.Walk; } }
public void FaceTo(CGPoint position) { var angle = GraphicsUtilities.RadiansBetweenCGPoints(position, Position); var ang = GraphicsUtilities.PalarAdjust(angle); SKAction action = SKAction.RotateToAngle(ang, 0); RunAction(action); }