Beispiel #1
0
        public CoreKevin(EntityData data, Vector2 offset) : base(data, offset)
        {
            Add(Listener   = new CoreModeListener(OnCoreMode));
            AlwaysAngry    = data.Bool("AlwaysAngry");
            DefaultToAngry = data.Bool("DefaultToAngry");
            Mode           = data.Enum("axes", Axes.Both);
            Giant          = Width >= 48f && Height >= 48f && data.Bool("chillout");

            // Add an angry face
            Add(AngryFace      = GFX.SpriteBank.Create(AngryPath));
            AngryFace.Position = new Vector2(Width, Height) / 2f;
            AngryFace.Play("idle");
            AngryFace.OnLastFrame = Face.OnLastFrame;
            AngryFace.Visible     = false;

            // Synchronize faces
            Face.OnChange = (lastID, newID) => {
                AngryFace.Play(newID);
            };
        }
Beispiel #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);
            };
        }