public void OnCoreMode(Session.CoreModes mode) { switch (mode) { case Session.CoreModes.Hot: Mode = SpiritMode.Hot; if (RespawnTimer <= 0) { HotSprite.Visible = true; ColdSprite.Visible = false; } Sprite = HotSprite; break; case Session.CoreModes.Cold: Mode = SpiritMode.Cold; if (RespawnTimer <= 0) { HotSprite.Visible = false; ColdSprite.Visible = true; } Sprite = ColdSprite; break; } }
public CoreSpirit(EntityData data, Vector2 offset) : base(data.Position + offset, false, data.Bool("oneUse")) { Duration = data.Float("duration", 0f); Sprite.RemoveSelf(); // Replace the outline Outline.RemoveSelf(); Add(Outline = new Image(GFX.Game["objects/nyahhelper/corespirit/outline"])); Outline.CenterOrigin(); Outline.Visible = false; // Get sprites Add(HotSprite = new Sprite(GFX.Game, "objects/nyahhelper/corespirit/hot/idle")); HotSprite.AddLoop("idle", "", 0.1f); HotSprite.Play("idle"); HotSprite.CenterOrigin(); Add(ColdSprite = new Sprite(GFX.Game, "objects/nyahhelper/corespirit/cold/idle")); ColdSprite.AddLoop("idle", "", 0.1f); ColdSprite.Play("idle"); ColdSprite.CenterOrigin(); // Initialize sprites switch (Mode = data.Enum("mode", SpiritMode.Hot)) { case SpiritMode.Hot: HotSprite.Visible = true; ColdSprite.Visible = false; Sprite = HotSprite; break; case SpiritMode.Cold: HotSprite.Visible = false; ColdSprite.Visible = true; Sprite = ColdSprite; break; } // Add a core mode synchronizer if (Synchronized = data.Bool("syncWithCoreMode")) { Add(CoreListener = new CoreModeListener(OnCoreMode)); } // Hook the PlayerCollider event PlayerCollider = Get <PlayerCollider>(); var origAction = PlayerCollider.OnCollide; PlayerCollider.OnCollide = (Player player) => { // TODO: Add an outline to the player CoreSpiritHook.Immune = true; CoreSpiritHook.Mode = Mode; // Revoke after the set duration, if it's not set to infinite if (Duration > 0) { Add(new Coroutine(RevokeInvincibilityRoutine())); } Audio.Play("event:/game/general/diamond_touch", Position); Input.Rumble(RumbleStrength.Medium, RumbleLength.Medium); Collidable = false; Add(new Coroutine(RefillRoutine(player))); RespawnTimer = 2.5f; // Use the original refill routine with the current active sprite Sprite = Mode == SpiritMode.Hot ? HotSprite : ColdSprite; origAction(player); }; }