void updateHUDAfterHeroDeathFor(Player player) { int playerIndex = players.IndexOf(player); // Fade out the relevant heart - one-based livesLeft has already been decremented. int heartNumber = player.LivesLeft; List <SKSpriteNode> heartArray = hudLifeHeartArrays [playerIndex]; var heart = heartArray [heartNumber]; heart.RunAction(SKAction.FadeAlphaTo(0, 3)); }
void updateHUDFor(Player player, HUDState state, string message = null) { int playerIndex = players.IndexOf(player); SKSpriteNode avatar = hudAvatars [playerIndex]; avatar.RunAction(SKAction.Sequence(new [] { SKAction.FadeAlphaTo(1f, 1), SKAction.FadeAlphaTo(0.2f, 1), SKAction.FadeAlphaTo(1f, 1) })); SKLabelNode label = hudLabels [playerIndex]; float heartAlpha = 1f; switch (state) { case HUDState.Local: label.Text = "ME"; break; case HUDState.Connecting: heartAlpha = 0.25f; label.Text = message ?? "AVAILABLE"; break; case HUDState.Disconnected: avatar.Alpha = 0.5f; heartAlpha = 0.1f; label.Text = "NO PLAYER"; break; case HUDState.Connected: label.Text = message ?? "CONNECTED"; break; default: throw new NotImplementedException(); } for (int i = 0; i < player.LivesLeft; i++) { SKSpriteNode heart = hudLifeHeartArrays [playerIndex] [i]; heart.Alpha = heartAlpha; } }
/// <summary> /// Анимация разрушения цепочек /// </summary> /// <param name="chains">Список цепочек на разрушение.</param> public void AnimateTheDstructionOf(List <GemList> chains) { // маркер проверки на наличие в разрушенных цепочках разрушителя // если был разрушитель - звук разрушения будет другой bool hadDestroyers = false; bool hadBombs = false; if (chains == null) { return; } foreach (GemList chain in chains) { foreach (Gem gem in chain) { SKSpriteNode sprite = gem.Sprite; SKAction sprtieAction = SKAction.FadeAlphaTo(0.0f, Properties.DestructionAnimationDuration / 1000f); sprite.RunAction(SKAction.Sequence(sprtieAction, SKAction.RemoveFromParent())); AnimateScore(chain); hadDestroyers |= gem.IsALineDestroyer; hadBombs |= gem.IsABomb; } } if (hadBombs) { RunAction(explosionSound); } else if (hadDestroyers) { RunAction(destroySound); } else { RunAction(dingSound); } }
public override void PerformDeath() { base.PerformDeath(); var splort = (SKNode)DeathSplort.Copy(); splort.ZPosition = -1; splort.ZRotation = VirtualZRotation; splort.Position = Position; splort.Alpha = 0.1f; splort.RunAction(SKAction.FadeAlphaTo(1, 0.5)); MultiplayerLayeredCharacterScene scene = CharacterScene; scene.AddNode(splort, WorldLayer.BelowCharacter); RunAction(SKAction.Sequence(new [] { SKAction.FadeAlphaTo(0, 0.5f), SKAction.RemoveFromParent() })); smokeEmitter.RunAction(SKAction.Sequence(new [] { SKAction.WaitForDuration(2), SKAction.Run(() => { smokeEmitter.ParticleBirthRate = 2; }), SKAction.WaitForDuration(2), SKAction.Run(() => { smokeEmitter.ParticleBirthRate = 0; }), SKAction.WaitForDuration(10), SKAction.FadeAlphaTo(0, 0.5), SKAction.RemoveFromParent() })); inactiveGoblins.Clear(); }
// Do SKActions in a sequence on the given Sprite Node (wait, fade in, wait, fade out) private void DoActionSequenceOnNode(SKNode node, double waitSec, double fadeInSec, double waitSecMiddle, double fadeOutSec, nfloat maxAlpha) { SKAction sequence = SKAction.Sequence(SKAction.WaitForDuration(waitSec), SKAction.FadeAlphaTo(maxAlpha, fadeInSec), SKAction.WaitForDuration(waitSecMiddle), SKAction.FadeOutWithDuration(fadeOutSec)); node.RunAction(sequence); }