Esempio n. 1
0
        private void SetupItem(Item item, Item previous)
        {
            Send(new ItemAddedEvent {
                Item      = item,
                Component = this,
                Who       = Entity,
                Old       = previous
            });

            Item = item;

            if (Entity is Player && !item.Touched && item.Scourged)
            {
                Run.AddScourge(true);
            }

            item.Done    = false;
            item.Touched = true;
            item.RemoveDroppedComponents();

        #if DEBUG
            debugItem = item.Id;
        #endif

            OnItemSet(previous);
        }
Esempio n. 2
0
        public void Add(Item item)
        {
            if (item == null)
            {
                return;
            }

            if (item.HasComponent <OwnerComponent>())
            {
                item.RemoveComponent <OwnerComponent>();
            }

            Items.Add(item);

            item.RemoveDroppedComponents();
            item.AddComponent(new OwnerComponent(Entity));

            item.Use(Entity);

            if (Entity is Player && !item.Touched && item.Scourged)
            {
                Run.AddScourge(true);
            }

            var e = new ItemAddedEvent {
                Item = item,
                Who  = Entity
            };

            Send(e);
            item.Touched = true;
        }
Esempio n. 3
0
        private bool Interact(Entity entity)
        {
            if (Item == null)
            {
                return(true);
            }

            var i = Items.CreateAndAdd(Item, entity.Area);

            if (i != null)
            {
                i.CenterX  = CenterX;
                i.Y        = Bottom;
                i.Scourged = true;
            }

            Item = null;
            UpdateSprite();
            Run.AddScourge(true);

            GetComponent <DialogComponent>().Close();

            AnimationUtil.Poof(Center);
            Camera.Instance.Shake(16);

            // fixme: spawn ghosts, dialog should not appear when player is ded

            return(true);
        }
Esempio n. 4
0
        public override void Use(Entity entity, Item item)
        {
            base.Use(entity, item);

            for (var i = 0; i < amount; i++)
            {
                Run.AddScourge();
            }
        }
        public override void Use(Entity entity, Item item)
        {
            base.Use(entity, item);
            Scourge.Enable(scourge);

            if (Run.Scourge == 0)
            {
                Run.AddScourge();
            }
        }
Esempio n. 6
0
        private bool Scourge(ItemComponent component)
        {
            if (component.Item != null && !component.Item.Scourged)
            {
                Run.AddScourge();
                component.Item.Scourged = true;

                return(true);
            }

            return(false);
        }
        public override void Happen(Player entity)
        {
            if (amount < 0)
            {
                var sc = Run.Scourge;

                for (var i = 0; i < sc; i++)
                {
                    Run.RemoveScourge();
                }

                var inventory = entity.GetComponent <InventoryComponent>();
                var toRemove  = new List <Item>();

                foreach (var i in inventory.Items)
                {
                    if (i.Scourged)
                    {
                        i.Scourged = false;
                    }

                    if (i.Type == ItemType.Scourge)
                    {
                        toRemove.Add(i);
                    }
                }

                Cleanse(entity.GetComponent <WeaponComponent>());
                Cleanse(entity.GetComponent <ActiveWeaponComponent>());
                Cleanse(entity.GetComponent <ActiveItemComponent>());

                // fixme: doesnt do anything to ui inventory
                foreach (var i in toRemove)
                {
                    inventory.Remove(i, true);
                }

                foreach (var s in Scourge.Defined)
                {
                    Scourge.Disable(s);
                }
            }
            else
            {
                for (var i = 0; i < amount; i++)
                {
                    Run.AddScourge();
                }
            }
        }
Esempio n. 8
0
        protected override bool Interact(Entity e)
        {
            var h = e.GetComponent <HealthComponent>();

            if (h.Health > 1)
            {
                TextParticle.Add(this, "HP", (int)h.Health - 1, true, true);
            }

            h.SetHealth(1, this, type: DamageType.Custom);
            e.GetComponent <InventoryComponent>().Pickup(Items.CreateAndAdd("bk:broken_heart", Area, true));

            Run.AddScourge(true);
            Break();

            return(true);
        }
Esempio n. 9
0
        public override bool HandleEvent(Event e)
        {
            if (e is RoomChangedEvent rce && rce.Who is Player p && Colliding.Contains(p))
            {
                if (scourged || (rce.Old != null && rce.Old.Type == RoomType.Scourged))
                {
                    return(base.HandleEvent(e));
                }

                var a = Scourge(p.GetComponent <ActiveWeaponComponent>());
                var b = Scourge(p.GetComponent <WeaponComponent>());

                if (!a && !b)
                {
                    Run.AddScourge();
                }

                scourged = true;
            }
Esempio n. 10
0
        public override void AddComponents()
        {
            base.AddComponents();

            AlwaysActive = true;
            Width        = 17;
            Height       = 19;

            AddComponent(new AnimationComponent("elon"));
            AddComponent(new SensorBodyComponent(-Npc.Padding, -Npc.Padding, Width + Npc.Padding * 2, Height + Npc.Padding * 2, BodyType.Static));
            AddComponent(new InteractableComponent(Interact)
            {
                CanInteract = e => !interacted
            });

            Dialogs.RegisterCallback("elon_4", (d, cm) => {
                var c = cm.To.GetComponent <ActiveWeaponComponent>();

                if (c.Item == null)
                {
                    return(Dialogs.Get("elon_7"));
                }

                interacted = true;

                var id = Items.Generate(ItemType.Weapon, dt => dt.Id != c.Item.Id);
                var i  = c.Item;

                c.Drop();
                i.Done = true;
                c.Set(Items.CreateAndAdd(id, Area));

                Run.AddScourge(true);

                return(null);
            });
        }
Esempio n. 11
0
        private bool Interact(Entity e)
        {
            if (Broken || busy)
            {
                return(true);
            }

            Run.AddScourge(true);

            if (trigger != null)
            {
                trigger.Interrupted = true;
            }

            HandleEvent(new BrokenEvent {
                BurningStatue = this
            });

            XSpread = 1;

            Tween.To(1f, Camera.Instance.Zoom, xx => Camera.Instance.Zoom = xx, 0.2f);
            Tween.To(1.4f, Camera.Instance.TextureZoom, xx => Camera.Instance.TextureZoom = xx, 0.5f);
            Camera.Instance.GetComponent <ShakeComponent>().Amount = 0;
            GameSave.Put("statue_broken", true);

            var torches = GetComponent <RoomComponent>().Room.Tagged[Tags.Torch];

            foreach (var t in torches)
            {
                var tr = (Torch)t;

                tr.XSpread = 0.1f;
                tr.On      = true;
            }

            Timer.Add(() => {
                for (var i = 0; i < torches.Count; i++)
                {
                    var i1 = i;

                    Timer.Add(() => {
                        var t = (Torch)torches[i1];

                        t.Break();
                        Camera.Instance.Shake(5);
                    }, i);
                }

                Timer.Add(() => {
                    Particles.BreakSprite(Area, GetComponent <InteractableSliceComponent>().Sprite, Position);
                    Broken = true;

                    Camera.Instance.Unfollow(this);
                    Camera.Instance.Shake(10);

                    Timer.Add(() => {
                        Camera.Instance.GetComponent <ShakeComponent>().Amount = 0;
                    }, 0.5f);

                    Camera.Instance.Targets.Clear();
                    Camera.Instance.Follow(this, 0.5f);

                    UpdateSprite();
                    RemoveComponent <LightComponent>();

                    var exit = new Exit();
                    Area.Add(exit);

                    exit.To = Run.Depth + 1;

                    var x = (int)Math.Floor(CenterX / 16);
                    var y = (int)Math.Floor(Bottom / 16 + 0.6f);
                    var p = new Vector2(x * 16 + 8, y * 16 + 8);

                    exit.Center = p;

                    Painter.Fill(Run.Level, x - 1, y - 1, 3, 3, Tiles.RandomFloor());
                    Painter.Fill(Run.Level, x - 1, y - 3, 3, 3, Tiles.RandomFloor());

                    Run.Level.TileUp();
                    Run.Level.CreateBody();

                    Timer.Add(() => {
                        Tween.To(1f, Camera.Instance.TextureZoom, xx => Camera.Instance.TextureZoom = xx, 0.8f);
                        ((InGameState)BK.Instance.State).ResetFollowing();
                    }, 1f);
                }, torches.Count + 1);
            }, 1f);

            return(true);
        }