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 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 Generate() { if (GoblinCap <= 0 || sGlobalAllocation >= GoblinCap) { return; } Goblin character = inactiveGoblins [inactiveGoblins.Count - 1]; if (character == null) { return; } var offset = CollisionRadius * 0.75f; var rot = GraphicsUtilities.PalarAdjust(VirtualZRotation); var pos = new CGPoint((float)Math.Cos(rot) * offset, (float)Math.Sin(rot) * offset); character.Position = new CGPoint(pos.X + Position.X, pos.Y + Position.Y); MultiplayerLayeredCharacterScene scene = CharacterScene; character.AddToScene(CharacterScene); character.ZPosition = -1f; character.FadeIn(0.5f); inactiveGoblins.Remove(character); ActiveGoblins.Add(character); sGlobalAllocation++; }
public void FaceTo(CGPoint position) { var angle = GraphicsUtilities.RadiansBetweenCGPoints(position, Position); var ang = GraphicsUtilities.PalarAdjust(angle); SKAction action = SKAction.RotateToAngle(ang, 0); RunAction(action); }