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;
        }
示例#3
0
        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);
        }