Пример #1
0
 public ShockBall(Vector2 position, Vector2 size, float directionAngle, Animation movingAnimation, Animation blowAnimation, IMapObject master, ISound blowSound) : base(position, size, directionAngle)
 {
     this.movingAnimation = movingAnimation;
     this.blowAnimation   = blowAnimation;
     this.master          = master;
     this.blowSound       = blowSound;
     state = ShockBallState.Moving;
     movingAnimation.Reset();
     blowAnimation.Reset();
 }
Пример #2
0
        public override void OnWorldUpdate(Scene scene, float elapsedMilliseconds)
        {
            base.OnWorldUpdate(scene, elapsedMilliseconds);

            if (state == ShockBallState.Blow && CurrentAnimation.IsOver)
            {
                scene.RemoveObject(this);
                return;
            }

            if (state == ShockBallState.Blow)
            {
                return;
            }

            var xRayUnit    = MathF.Cos(DirectionAngle);
            var yRayUnit    = MathF.Sin(DirectionAngle);
            var dx          = xRayUnit * MoveSpeed * elapsedMilliseconds;
            var dy          = yRayUnit * MoveSpeed * elapsedMilliseconds;
            var newPosition = Position + new Vector2(dx, dy);
            var testX       = (int)newPosition.X;
            var testY       = (int)newPosition.Y;
            var hit         = !scene.Map.InBound(testY, testX) || scene.Map.At(testY, testX).Type != MapCellType.Empty;

            foreach (var obj in scene.Objects.Append(scene.Player))
            {
                if (obj is Bullet || obj is Arrow || obj == master)
                {
                    continue;
                }

                if (!CanDamage(obj))
                {
                    continue;
                }

                obj.OnShoot(scene, Damage);
                hit = true;
            }

            if (hit)
            {
                state = ShockBallState.Blow;
                blowSound.Play(0);
                return;
            }

            Position = newPosition;
        }