Ejemplo n.º 1
0
        public override void Explode()
        {
            base.Explode();

            Knight knight = (Knight)Mobile;

            //Hide Satellite
            SpecialEffectBuilder.TeleportFlame1(knight.Satellite.Flipbook.Position, 0.5f);
            knight.Satellite.Flipbook.HideElement();

            //Calculate the starting position of the shot
            Vector2 shotPos = knight.Position + ownerOffset;

            //Angle necessary to spawn the swords with the correct distance between each other
            float angle = (float)Helper.AngleBetween(shotPos, FlipbookList[0].Position) + MathHelper.PiOver2;

            //The offset between swords
            Vector2 offset = new Vector2(Parameter.ProjectileKnightDistanceBetweenShots * (float)Math.Cos(angle), Parameter.ProjectileKnightDistanceBetweenShots * (float)Math.Sin(angle));

            //Spawn 3 swords with offset distance between each other
            for (int i = -numberOfSwords / 2; i <= numberOfSwords / 2; i++)
            {
                KnightSatelliteProjectile ksp = new KnightSatelliteProjectile(knight, shotPos + offset * i,
                                                                              FlipbookList[0].Position, shotType, 0.08f * Math.Abs(i));
                ksp.OnFinalizeExecutionAction = OnFinalizeExecutionAction;
                knight.LastCreatedProjectileList.Add(ksp);
            }
        }
Ejemplo n.º 2
0
        public override void Explode()
        {
            base.Explode();
            PlayExplosionSFX();
            SpecialEffectBuilder.TeleportFlame1(previousPosition);
            SpecialEffectBuilder.TeleportFlame2(Mobile.Position);

            Mobile.ForceChangePosition(previousPosition.ToIntegerDomain());
        }
Ejemplo n.º 3
0
        public void UseItem(ItemType itemType)
        {
            switch (itemType)
            {
            case ItemType.Dual:
                ItemsUnderEffectList.Add(ItemType.Dual);
                OnGrantTurn += () => { ItemsUnderEffectList.Clear(); };
                break;

            case ItemType.DualPlus:
                ItemsUnderEffectList.Add(ItemType.DualPlus);
                OnGrantTurn += () => { ItemsUnderEffectList.Clear(); };
                break;

            case ItemType.Thunder:
                ItemsUnderEffectList.Add(ItemType.Thunder);
                OnGrantTurn += () => { ItemsUnderEffectList.Clear(); };
                break;

            case ItemType.Teleport:
                ItemsUnderEffectList.Add(ItemType.Teleport);
                OnGrantTurn += () => { ItemsUnderEffectList.Clear(); };
                break;

            case ItemType.EnergyUp1:
                Heal(NetworkObjectParameters.InGameItemEnergyUp1Value, NetworkObjectParameters.InGameItemEnergyUp1ExtraValue);
                break;

            case ItemType.EnergyUp2:
                Heal(NetworkObjectParameters.InGameItemEnergyUp2Value, NetworkObjectParameters.InGameItemEnergyUp2ExtraValue);
                break;

            case ItemType.BungeShot:
                Owner.Dig += (int)NetworkObjectParameters.InGameItemBungeShotValue;
                OnEndTurn += () => {
                    Owner.Dig -= (int)NetworkObjectParameters.InGameItemBungeShotValue;
                };
                break;

            case ItemType.PowerUp:
                Owner.Attack += (int)NetworkObjectParameters.InGameItemPowerUpValue;
                OnEndTurn    += () => {
                    Owner.Attack -= (int)NetworkObjectParameters.InGameItemPowerUpValue;
                };
                break;

            case ItemType.Blood:
                Owner.Attack += (int)NetworkObjectParameters.InGameItemBloodValue;
                OnEndTurn    += () => {
                    Owner.Attack -= (int)NetworkObjectParameters.InGameItemBloodValue;
                };
                MobileMetadata.CurrentHealth = (int)Math.Max(1, MobileMetadata.CurrentHealth - MobileMetadata.BaseHealth * NetworkObjectParameters.InGameItemBloodExtraValue / 100f);
                UpdateParticleEmitterInterval();
                break;

            case ItemType.ChangeWind:
                LevelScene.MatchMetadata.WindAngleDegrees += 180;
                LevelScene.HUD.WindCompass.ChangeWind(LevelScene.MatchMetadata.WindAngleDegrees, LevelScene.MatchMetadata.WindForce);
                break;

            case ItemType.TeamTeleport:
                Mobile tpMobile = LevelScene.MobileList
                                  .Where((x) => x != this && x.IsAlive && x.Owner.PlayerTeam == Owner.PlayerTeam)
                                  .OrderBy((x) => x.MobileMetadata.CurrentHealth).FirstOrDefault();

                if (tpMobile == null)
                {
                    SpecialEffectBuilder.TeleportFlame1(Position);
                    SpecialEffectBuilder.TeleportFlame2(Position);
                    AudioHandler.PlaySoundEffect("Audio/SFX/Tank/Blast/Teleport", pitch: 0.5f);
                    return;
                }

                Vector2 tmpPos = tpMobile.Position;

                //Other mobile
                SpecialEffectBuilder.TeleportFlame1(Position);
                SpecialEffectBuilder.TeleportFlame2(tpMobile.Position);

                tpMobile.ForceChangePosition(Position);
                ForceChangePosition(tmpPos);

                AudioHandler.PlaySoundEffect("Audio/SFX/Tank/Blast/Teleport", pitch: 0.5f);
                break;
            }

            //Refresh Status (if necessary)
            LevelScene.HUD.StatusBarDictionary[this].UpdateAttributeList();

            ChangeFlipbookState(ActorFlipbookState.UsingItem, true);

            if (IsHealthCritical)
            {
                MobileFlipbook.EnqueueAnimation(ActorFlipbookState.StandLowHealth);
            }
            else
            {
                MobileFlipbook.EnqueueAnimation(ActorFlipbookState.Stand);
            }
        }