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); } }
public override void Explode() { base.Explode(); PlayExplosionSFX(); SpecialEffectBuilder.TeleportFlame1(previousPosition); SpecialEffectBuilder.TeleportFlame2(Mobile.Position); Mobile.ForceChangePosition(previousPosition.ToIntegerDomain()); }
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); } }