Пример #1
0
        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;
            }
        }
Пример #2
0
        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);
            };
        }