示例#1
0
        public override void Explode()
        {
            base.Explode();
            PlayExplosionSFX();
            SpecialEffectBuilder.TeleportFlame1(previousPosition);
            SpecialEffectBuilder.TeleportFlame2(Mobile.Position);

            Mobile.ForceChangePosition(previousPosition.ToIntegerDomain());
        }
示例#2
0
        protected override void Destroy()
        {
            base.Destroy();

            //Destroy the trace
            SpecialEffectHandler.Remove(swordTrace);

            //If this shot is the last one the satellite should reappear
            if (Mobile.ProjectileList.Except(Mobile.UnusedProjectile).Count() == 0)
            {
                OnFinalizeExecutionAction?.Invoke();

                //Show element
                if (baseShotType != ShotType.SS)
                {
                    SpecialEffectBuilder.TeleportFlame2(((Knight)Mobile).Satellite.Flipbook.Position, 0.5f);
                }

                ((Knight)Mobile).Satellite.Flipbook.ShowElement();
            }
        }
示例#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);
            }
        }