예제 #1
0
        public override void Update(float dt)
        {
            base.Update(dt);

            if (Target != null)
            {
                GraphicsComponent.Flipped = Target.CenterX < CenterX;
            }

            lastFadingParticle -= dt;

            if (lastFadingParticle <= 0)
            {
                lastFadingParticle = 0.2f;

                var particle = new FadingParticle(GetComponent <MobAnimationComponent>().Animation.GetCurrentTexture(), tint);
                Area.Add(particle);

                particle.Depth  = Depth - 1;
                particle.Center = Center;
            }
        }
예제 #2
0
        private void SetupSpawn()
        {
            busy = true;

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

            target = new Vector2(CenterX, Y - 4);

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

                tr.XSpread = 1;
                tr.On      = true;
                tr.Target  = target;
            }

            Timer.Add(() => {
                var bk = new entity.creature.bk.BurningKnight();
                Area.Add(bk);
                bk.Center = target.Value;

                Camera.Instance.Targets.Clear();
                Camera.Instance.Follow(bk, 0.1f);

                Timer.Add(() => {
                    ((InGameState)Engine.Instance.State).ResetFollowing();
                }, 2f);

                Camera.Instance.Shake(10);

                foreach (var t in torches)
                {
                    t.Done = true;
                }

                Done = true;
            }, 2f);
        }
예제 #3
0
        public static void Hook(Area area)
        {
            area.Add(new RenderTrigger(() => {
                var state = Engine.Instance.StateRenderer;

                state.End();
                var b            = state.BlendState;
                state.BlendState = BlendState.Additive;
                state.Begin();

                foreach (var e in area.Tagged[Tags.FireParticle])
                {
                    ((FireParticle)e).ActuallyRender();
                }

                Graphics.Color = ColorUtils.WhiteColor;

                state.End();
                state.BlendState = b;
                state.Begin();
            }, Layers.WindFx));
        }
예제 #4
0
        public override void Load(FileReader stream)
        {
            base.Load(stream);

            if (dontSaveItem)
            {
                return;
            }

            if (stream.ReadBoolean())
            {
                var item = new Item();

                Area.Add(item, false);

                item.Load(stream);
                item.LoadedSelf = false;
                item.PostInit();

                SetItem(item, null);
            }
        }
예제 #5
0
        public override void AddComponents()
        {
            base.AddComponents();

            AlwaysActive = true;
            Height       = 21;

            if (tile == null)
            {
                tile = CommonAse.Props.GetSlice("spikes_base");
            }

            Area.Add(new RenderTrigger(this, RenderBase, Layers.Entrance));

            AddComponent(new StateComponent());
            AddComponent(new AnimationComponent("spikes"));
            AddComponent(new ShadowComponent(RenderShadow));
            AddComponent(new AudioEmitterComponent());
            AddComponent(new RectBodyComponent(3, 5, 10, 10, BodyType.Static, true));

            GetComponent <StateComponent>().Become <HiddenState>();
        }
예제 #6
0
        public override void Update(float dt)
        {
            base.Update(dt);

            if (charge)
            {
                sinceLastDamage += dt;

                if (sinceLastDamage >= ChangeDelay)
                {
                    var health = entity.GetComponent <HealthComponent>();
                    var h      = health.Health;
                    var s      = (lastChange - h) / health.MaxHealth * fill.Width;

                    var p = new ParticleEntity(new Particle(new HealthParticleController(), new HealthParticleRenderer(damage, s)));
                    p.Particle.Position = Position + barOffset + new Vector2((float)h / health.MaxHealth * fill.Width, 0);
                    p.Position          = p.Particle.Position;
                    p.AlwaysActive      = true;
                    p.AlwaysVisible     = true;
                    Area.Add(p);
                    p.Depth = Depth + 1;

                    Tween.To(h, lastChange, x => lastChange = x, 0.3f);
                    charge = false;
                }
            }

            if (entity.Awoken && !showedUp)
            {
                showedUp = true;
                Tween.To(0, Y, x => Y = x, 0.3f);
            }

            if (showedUp && (!entity.Awoken || (entity.Done && !tweened)))
            {
                Remove();
            }
        }
예제 #7
0
        public override void PostInit()
        {
            base.PostInit();

            UpdateSprite();

            if (!Broken)
            {
                Area.Add(fea = new FireEmitter {
                    Depth    = Depth + 1,
                    Position = new Vector2(X + 11, Y + 15),
                    Scale    = 0.8f
                });

                Area.Add(feb = new FireEmitter {
                    Depth    = Depth + 1,
                    Position = new Vector2(X + 4, Y + 15),
                    Scale    = 0.8f
                });

                AddComponent(new LightComponent(this, 32f, new Color(1f, 0.5f, 0f, 1f)));
            }
        }
        private void FirstPart()
        {
            var dadDialog = dad.GetComponent <DialogComponent>();
            var sonDialog = baby.GetComponent <DialogComponent>();

            dadDialog.Dialog.AlwaysShowArrow = true;
            sonDialog.Dialog.AlwaysShowArrow = true;

            Start(dadDialog, "dad_0", () => {
                dadDialog.Close();

                Start(sonDialog, "son_0", () => {
                    sonDialog.Close();

                    Start(dadDialog, "dad_1", () => {
                        dadDialog.Close();
                        dad.GraphicsComponent.Flipped = false;
                        dad.GetComponent <AnimationComponent>().Animation.Tag = "run";
                        dad.RunAway = true;

                        Timer.Add(() => {
                            State.Say(Locale.Get("20_years_later"), () => {
                                dad.Done = true;
                                gobbo    = new Gobbo();
                                Area.Add(gobbo);
                                gobbo.BottomCenter = dadStart;
                                gobbo.GraphicsComponent.Flipped = true;

                                Timer.Add(() => {
                                    SecondPart();
                                }, 1f);
                            });
                        }, 2f);
                    });
                });
            });
        }
예제 #9
0
        public override void PostInit()
        {
            base.PostInit();
            var p = GetPad();

            if (p != null)
            {
                pad = CommonAse.Props.GetSlice(p);

                Area.Add(new RenderTrigger(this, () => {
                    Graphics.Render(pad, Position);
                }, -1));
            }

            var b = GetBar();

            if (b == null)
            {
                return;
            }

            bar = CommonAse.Props.GetSlice(b);
            Area.Add(new RenderTrigger(this, () => RenderFrame(false), Layers.FlyingMob));
        }
예제 #10
0
        public virtual void PlaceRewards()
        {
            var exit = new Exit();

            Area.Add(exit);

            exit.To = Run.Depth + 1;

            var center = GetComponent <RoomComponent>().Room.Center;

            var x = (int)Math.Floor(center.X / 16);
            var y = (int)Math.Floor(center.Y / 16);
            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.ReTileAndCreateBodyChunks(x - 1, y - 1, 3, 7);
            var w = p - new Vector2(0, 32f);

            if (!(this is DM || this is BkHead || Run.Type == RunType.BossRush))
            {
                var stand = new BossStand();
                Area.Add(stand);
                stand.Center = w;
                stand.SetItem(Items.CreateAndAdd(Items.Generate(ItemPool.Boss), Area), null);
            }

            var rewards = new List <string>();
            var c       = Run.Type == RunType.BossRush ? 2 : Rnd.Int(2, 10);

            if (Run.Type != RunType.BossRush && !(this is DM || this is BkHead))
            {
                for (var i = 0; i < c; i++)
                {
                    rewards.Add("bk:emerald");
                }

                var q = Rnd.Int(4, 10);

                for (var i = 0; i < q; i++)
                {
                    rewards.Add("bk:copper_coin");
                }
            }

            if (Run.Type != RunType.BossRush)
            {
                var cn = Rnd.Int(0, 3);

                for (var i = 0; i < cn; i++)
                {
                    rewards.Add("bk:heart");
                }
            }
            else
            {
                var cn = Rnd.Int(20, 30);

                for (var i = 0; i < cn; i++)
                {
                    rewards.Add("bk:coin");
                }
            }

            var j = 0;

            foreach (var reward in rewards)
            {
                var item = Items.CreateAndAdd(reward, Area);
                item.Center = w + MathUtils.CreateVector(j / ((float)rewards.Count) * Math.PI * 2 + Rnd.Float(-0.1f, 0.1f), Rnd.Float(12, 18));
                j++;
            }
        }
예제 #11
0
        public override void Update(float dt)
        {
            base.Update(dt);

            if (Died)
            {
                if (!cleared)
                {
                    cleared = true;
                    GetComponent <DialogComponent>().Close();

                    foreach (var p in Area.Tagged[Tags.Projectile])
                    {
                        AnimationUtil.Poof(p.Center);
                        ((Projectile)p).Break(null);
                    }

                    try {
                        var a = GetComponent <RoomComponent>().Room.Tagged[Tags.MustBeKilled].ToArray();

                        foreach (var p in a)
                        {
                            if (!(p is Boss))
                            {
                                AnimationUtil.Poof(p.Center);
                                ((Creature)p).Kill(this);
                            }
                        }
                    } catch (Exception e) {
                        Log.Error(e);
                    }
                }

                if (deathTimer >= 3f && !Placed)
                {
                    Placed = true;
                    CreateGore(null);

                    if (this is bk.BurningKnight)
                    {
                    }
                    else
                    {
                        HandleEvent(new DefeatedEvent {
                            Boss = this
                        });
                    }

                    var player = LocalPlayer.Locate(Area);
                    var doors  = new List <DoorTile>();

                    if (player != null)
                    {
                        var stats = player.GetComponent <StatsComponent>();
                        var e     = new DealChanceCalculateEvent();

                        if (!stats.TookDamageInRoom)
                        {
                            Achievements.Unlock("bk:dodge_master");
                        }

                        e.GrannyStartChance = stats.SawDeal && !stats.TookDeal ? stats.GrannyChance : 0;
                        e.GrannyChance      = e.GrannyStartChance;
                        e.DmStartChance     = stats.DMChance;
                        e.DmChance          = e.DmStartChance;

                        player.HandleEvent(e);

                        var gr = Rnd.Chance(e.GrannyChance * 100);
                        var dm = Rnd.Chance(e.DmChance * 100);

                        if (gr || (dm && e.OpenBoth))
                        {
                            foreach (var r in Area.Tagged[Tags.Room])
                            {
                                var room = (Room)r;

                                if (room.Type == RoomType.Granny)
                                {
                                    room.OpenHiddenDoors();

                                    foreach (var d in room.Doors)
                                    {
                                        doors.Add(new DoorTile {
                                            Door = d,
                                            Tile = Tile.GrannyFloor
                                        });
                                    }

                                    break;
                                }
                            }
                        }

                        if (dm || (gr && e.OpenBoth))
                        {
                            foreach (var r in Area.Tagged[Tags.Room])
                            {
                                var room = (Room)r;

                                if (room.Type == RoomType.OldMan)
                                {
                                    room.OpenHiddenDoors();

                                    foreach (var d in room.Doors)
                                    {
                                        doors.Add(new DoorTile {
                                            Door = d,
                                            Tile = Tile.EvilFloor
                                        });
                                    }

                                    break;
                                }
                            }
                        }
                    }

                    if (doors.Count > 0)
                    {
                        var rm          = GetComponent <RoomComponent>().Room;
                        var level       = Run.Level;
                        var cx          = rm.MapX + rm.MapW / 2f;
                        var cy          = rm.MapY + rm.MapH / 2f;
                        var grannyDoors = new List <Door>();
                        var evilDoors   = new List <Door>();

                        foreach (var d in doors)
                        {
                            if (d.Tile == Tile.GrannyFloor)
                            {
                                grannyDoors.Add(d.Door);
                            }
                            else
                            {
                                evilDoors.Add(d.Door);
                            }
                        }

                        rm.PaintTunnel(grannyDoors, Tile.GrannyFloor);
                        rm.PaintTunnel(evilDoors, Tile.EvilFloor);

                        rm.ApplyToEachTile((x, y) => {
                            var t = level.Get(x, y);

                            if (t == Tile.GrannyFloor || t == Tile.EvilFloor)
                            {
                                level.Set(x, y, Tile.FloorA);

                                Timer.Add(() => {
                                    var part = new TileParticle();

                                    part.Top       = t == Tile.GrannyFloor ? Tilesets.Biome.GrannyFloor[0] : Tilesets.Biome.EvilFloor[0];
                                    part.TopTarget = Run.Level.Tileset.WallTopADecor;
                                    part.Side      = Run.Level.Tileset.FloorSidesD[0];
                                    part.Sides     = Run.Level.Tileset.WallSidesA[2];
                                    part.Tile      = t;

                                    part.X        = x * 16;
                                    part.Y        = y * 16;
                                    part.Target.X = x * 16;
                                    part.Target.Y = y * 16;
                                    part.TargetZ  = -8f;

                                    Area.Add(part);
                                }, 1f + Rnd.Float(0.2f) + MathUtils.Distance(x - cx, y - cy) / 6f);
                            }
                        }, -1);

                        level.TileUp();
                        level.CreateBody();
                    }

                    Done = true;
                    PlaceRewards();

                    if (ResetCam)
                    {
                        Timer.Add(() => { ((InGameState)Engine.Instance.State).ResetFollowing(); }, 0.5f);
                    }
                }
                else
                {
                    deathTimer    += dt;
                    lastExplosion -= dt;

                    if (lastExplosion <= 0)
                    {
                        lastExplosion = 0.3f;
                        AnimationUtil.Explosion(Center + new Vector2(Rnd.Float(-16, 16), Rnd.Float(-16, 16)));
                        Camera.Instance.Shake(10);
                        Audio.PlaySfx($"level_explosion_{Rnd.Int(1, 4)}");
                    }

                    if (deathTimer > 2.5f)
                    {
                        Engine.Instance.FlashColor = new Color(1f, 1f, 1f, (deathTimer - 2.5f) * 2f);
                        Engine.Instance.Flash      = 0.01f;
                    }
                }

                return;
            }

            if (!(GetComponent <StateComponent>().StateInstance is FriendlyState) && HasHealthbar && HealthBar == null)
            {
                HealthBar = new HealthBar(this);
                Engine.Instance.State.Ui.Add(HealthBar);
                AddPhases();

                Engine.Instance.State.Ui.Add(new UiBanner(Locale.Get(GetId())));
            }
        }
예제 #12
0
        protected void Build()
        {
            var Builder = GetBuilder();
            var Rooms   = CreateRooms();

            Rooms = (List <RoomDef>)Rooms.Shuffle(Rnd.Generator);

            var Attempt = 0;

            do
            {
                Log.Info($"Generating (attempt {Attempt}, seed {Rnd.Seed})...");

                foreach (var Room in Rooms)
                {
                    Room.Connected.Clear();
                    Room.Neighbours.Clear();
                }

                var Rm = new List <RoomDef>();
                Rm.AddRange(Rooms);
                rooms = Builder.Build(Rm);

                var a = rooms == null;
                var b = false;

                if (!a)
                {
                    foreach (var r in Rm)
                    {
                        if (r.IsEmpty())
                        {
                            Log.Error("Found an empty room!");
                            b = true;
                            break;
                        }
                    }
                }

                if (a || b)
                {
                    rooms = null;

                    Log.Error($"Failed! {Builder.GetType().Name}");
                    Area.Destroy();
                    Area.Add(Run.Level);
                    LevelSave.FailedAttempts++;
                    Builder = GetBuilder();

                    if (Attempt >= 10)
                    {
                        Log.Error("Too many attempts to generate a level! Trying a different room set!");
                        Attempt = 0;
                        Rooms   = CreateRooms();
                        Rooms   = (List <RoomDef>)Rooms.Shuffle(Rnd.Generator);
                    }

                    Attempt++;
                }
            } while (rooms == null);
        }
예제 #13
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);
        }
예제 #14
0
        private void AddArtifact(Item item)
        {
            if (item.Hide || multiplayer)
            {
                return;
            }

            UiItem old = null;

            foreach (var i in items)
            {
                if (i.Id == item.Id)
                {
                    old = i;
                    break;
                }
            }

            if (old == null)
            {
                var x = Display.UiWidth - 8f;

                if (items.Count > 0)
                {
                    x = items[items.Count - 1].X - 8;
                }

                old          = new UiItem();
                old.Id       = item.Id;
                old.Scourged = item.Scourged;
                Area.Add(old);
                items.Add(old);

                old.Right  = x;
                old.Bottom = Display.UiHeight - 8f;

                if (items.Count > 6)
                {
                    more.Label   = $"+{items.Count - 6}";
                    more.Enabled = true;
                    more.Right   = Display.UiWidth - 8;
                    more.Bottom  = Display.UiHeight - 5f;

                    for (var i = 0; i < items.Count - 6; i++)
                    {
                        var it = items[i];
                        it.X = Display.UiWidth + 32;
                    }

                    var ps = Display.UiWidth - 8f;

                    ps -= more.Width + 8;

                    for (var i = items.Count - 6; i < items.Count; i++)
                    {
                        var it = items[i];
                        it.Right = ps;

                        ps -= 8 + it.Width;
                    }
                }
            }
            else
            {
                old.Count++;
            }
        }
예제 #15
0
        public override bool HandleEvent(Event e)
        {
            if (e is LostSupportEvent)
            {
                if (GetComponent <HealthComponent>().Unhittable)
                {
                    return(true);
                }

                if (!GetComponent <BuffsComponent>().PitImmunity)
                {
                    GetComponent <HealthComponent>().ModifyHealth(-1, Run.Level);
                }


                for (var i = 0; i < 4; i++)
                {
                    var part = new ParticleEntity(Particles.Dust());

                    part.Position       = Center;
                    part.Particle.Scale = Rnd.Float(0.4f, 0.8f);
                    Area.Add(part);
                }
            }
            else if (e is RoomChangedEvent c)
            {
                if (c.New == null || Run.Level == null || Camera.Instance == null)
                {
                    return(base.HandleEvent(e));
                }

                if (c.New.Tagged[Tags.MustBeKilled].Count > 0)
                {
                    Audio.PlaySfx("level_door_shut");

                    foreach (var p in Area.Tagged[Tags.Player])
                    {
                        if (p.GetComponent <RoomComponent>().Room != c.New)
                        {
                            AnimationUtil.Poof(p.Center);
                            p.Center = Center;
                            AnimationUtil.Poof(p.Center);
                        }
                    }
                }

                ((InGameState)Engine.Instance.State).ResetFollowing();

                var pr = (PixelPerfectGameRenderer)Engine.Instance.StateRenderer;

                if (c.Old != null)
                {
                    if (Scourge.IsEnabled(Scourge.OfLost))
                    {
                        c.Old.Hide();
                    }

                    if (c.Old.Type == RoomType.DarkMarket || c.Old.Type == RoomType.Hidden)
                    {
                        pr.EnableClip = false;
                        c.Old.Hide(true);
                        InBuilding = false;
                        ((InGameState)Engine.Instance.State).UpdateRainVolume();
                    }
                }

                if (c.New.Type == RoomType.DarkMarket)
                {
                    Achievements.Unlock("bk:dark_market");
                }

                if (c.New.Type == RoomType.DarkMarket || c.New.Type == RoomType.Hidden)
                {
                    pr.EnableClip   = true;
                    pr.ClipPosition = new Vector2(c.New.X + 16, c.New.Y + 16);
                    pr.ClipSize     = new Vector2(c.New.Width - 16, c.New.Height - 32);
                    InBuilding      = true;
                    ((InGameState)Engine.Instance.State).UpdateRainVolume();
                }
                else
                {
                    pr.EnableClip = false;
                }

                if (c.New.Type == RoomType.Shop)
                {
                    Audio.PlaySfx("level_door_bell");
                }

                c.New.Discover();
                var level = Run.Level;

                if (InGameState.Ready)
                {
                    switch (c.New.Type)
                    {
                    case RoomType.Secret:
                    case RoomType.Special:
                    case RoomType.Shop:
                    case RoomType.SubShop:
                    case RoomType.Treasure: {
                        foreach (var door in c.New.Doors)
                        {
                            if (door.TryGetComponent <LockComponent>(out var component) && component.Lock is GoldLock)
                            {
                                if (!(c.New.Type == RoomType.Shop && ((door.Rooms[0] != null && door.Rooms[0].Type == RoomType.SubShop) ||
                                                                      (door.Rooms[1] != null && door.Rooms[1].Type == RoomType.SubShop))))
                                {
                                    component.Lock.SetLocked(false, this);
                                }
                            }
                        }

                        break;
                    }

                    case RoomType.OldMan:
                    case RoomType.Granny: {
                        if (c.New.Type == RoomType.OldMan)
                        {
                            GetComponent <StatsComponent>().SawDeal = true;
                        }

                        c.New.OpenHiddenDoors();

                        foreach (var r in Area.Tagged[Tags.Room])
                        {
                            var room = (Room)r;

                            if (room.Type == (c.New.Type == RoomType.OldMan ? RoomType.Granny : RoomType.OldMan))
                            {
                                room.CloseHiddenDoors();
                                break;
                            }
                        }

                        break;
                    }
                    }

                    if (c.New.Type == RoomType.Secret)
                    {
                        ExplosionMaker.CheckForCracks(level, c.New, this);
                    }
                }

                if (c.Old != null)
                {
                    if (c.Old.Type == RoomType.OldMan)
                    {
                        var found = false;

                        foreach (var p in c.Old.Tagged[Tags.Player])
                        {
                            if (p != this && p is Player)
                            {
                                found = true;

                                break;
                            }
                        }

                        if (!found)
                        {
                            c.Old.CloseHiddenDoors();
                        }
                    }
                    else if (c.Old.Type == RoomType.Treasure && Run.Type != RunType.BossRush && !Rnd.Chance(5))
                    {
                        var found = false;

                        foreach (var p in c.Old.Tagged[Tags.Player])
                        {
                            if (p != this && p is Player)
                            {
                                found = true;

                                break;
                            }
                        }

                        if (!found)
                        {
                            foreach (var door in c.Old.Doors)
                            {
                                var x = (int)Math.Floor(door.CenterX / 16);
                                var y = (int)Math.Floor(door.Bottom / 16);
                                var t = level.Get(x, y);

                                if (level.Get(x, y).Matches(TileFlags.Passable))
                                {
                                    var index = level.ToIndex(x, y);

                                    level.Set(index, level.Biome is IceBiome ? Tile.WallB : Tile.WallA);
                                    level.UpdateTile(x, y);
                                    level.ReCreateBodyChunk(x, y);
                                    level.LoadPassable();

                                    Camera.Instance.Shake(10);
                                }
                            }

                            c.Old.ApplyToEachTile((x, y) => {
                                if (Run.Level.Get(x, y).IsWall())
                                {
                                    return;
                                }

                                Timer.Add(() => {
                                    var part = new TileParticle();

                                    part.Top       = Run.Level.Tileset.WallTopADecor;
                                    part.TopTarget = Run.Level.Tileset.WallTopADecor;
                                    part.Side      = Run.Level.Tileset.FloorSidesD[0];
                                    part.Sides     = Run.Level.Tileset.WallSidesA[2];
                                    part.Tile      = Tile.WallA;

                                    part.X        = x * 16;
                                    part.Y        = y * 16;
                                    part.Target.X = x * 16;
                                    part.Target.Y = y * 16;
                                    part.TargetZ  = -8f;

                                    Area.Add(part);
                                }, Rnd.Float(0.5f));
                            });

                            foreach (var d in c.Old.Doors)
                            {
                                d.Done = true;
                            }

                            c.Old.Done = true;
                        }
                    }
                }

                // Darken the lighting in evil rooms
                if (c.New.Type == RoomType.OldMan || c.New.Type == RoomType.Spiked)
                {
                    Tween.To(0.7f, Lights.RadiusMod, x => Lights.RadiusMod = x, 0.3f);
                }
                else if (c.Old != null && (c.Old.Type == RoomType.OldMan || c.Old.Type == RoomType.Spiked))
                {
                    Tween.To(1f, Lights.RadiusMod, x => Lights.RadiusMod = x, 0.3f);
                }
            }
            else if (e is HealthModifiedEvent hm)
            {
                if (hm.Amount < 0)
                {
                    if ((hm.From is Mob m && m.HasPrefix) || (hm.From is creature.bk.BurningKnight k && k.InFight) || hm.From is BkOrbital)
                    {
                        hm.Amount = Math.Min(hm.Amount, -2);
                    }
                    else if (hm.Type != DamageType.Custom && hm.Type != DamageType.Explosive)
                    {
                        hm.Amount = Math.Max(-1, hm.Amount);
                    }
                }
            }
예제 #16
0
파일: Shape.cs 프로젝트: stgwilli/ravendb
 public void AddBox(double boxId)
 {
     Area.Add(boxId);
 }
예제 #17
0
        public override void Update(float dt)
        {
            base.Update(dt);

            if (prefix != null)
            {
                prefix.Update(dt);

                lastParticle -= dt;

                if (lastParticle <= 0)
                {
                    lastParticle = Rnd.Float(0.05f, 0.3f);

                    for (var i = 0; i < Rnd.Int(0, 3); i++)
                    {
                        var part = new ParticleEntity(Particles.Scourge());

                        part.Position       = Center + Rnd.Vector(-4, 4);
                        part.Particle.Scale = Rnd.Float(0.5f, 1.2f);
                        Area.Add(part);
                        part.Depth = 1;
                    }
                }
            }

            if (Target == null)
            {
                FindTarget();
            }
            else if (Target.Done || Target.GetComponent <RoomComponent>().Room != GetComponent <RoomComponent>().Room ||
                     (Target is Creature c && c.IsFriendly() == IsFriendly()) ||
                     (Target.TryGetComponent <BuffsComponent>(out var b) && b.Has <InvisibleBuff>()))
            {
                var old = Target;

                HandleEvent(new MobTargetChange {
                    Mob = this,
                    New = null,
                    Old = old
                });

                FindTarget();
            }

            if (TouchDamage == 0)
            {
                return;
            }

            var raging = GetComponent <BuffsComponent>().Has <RageBuff>();

            for (var i = CollidingToHurt.Count - 1; i >= 0; i--)
            {
                var entity = CollidingToHurt[i];

                if (entity.Done)
                {
                    CollidingToHurt.RemoveAt(i);
                    continue;
                }

                if ((!(entity is Creature c) || c.IsFriendly() != IsFriendly()))
                {
                    if (entity.GetComponent <HealthComponent>().ModifyHealth(-TouchDamage * (raging ? 2 : 1), this, DamageType.Contact))
                    {
                        OnHit(entity);
                    }
                }
            }

            if (GetComponent <RoomComponent>().Room == null)
            {
                Kill(null);
            }
        }
        private void InitializeChart()
        {
            this.tChart1.Aspect.Elevation                   = 350;
            this.tChart1.Aspect.ElevationFloat              = 350D;
            this.tChart1.Aspect.Perspective                 = 55;
            this.tChart1.Aspect.View3D                      = false;
            this.tChart1.Axes.Bottom.Grid.Color             = Color.FromArgb((byte)(255), (byte)(221), (byte)(221), (byte)(221));
            this.tChart1.Axes.Bottom.Grid.Visible           = false;
            this.tChart1.Axes.Bottom.MinorTicks.Visible     = false;
            this.tChart1.Axes.Bottom.Ticks.Color            = Color.FromArgb((byte)(255), (byte)(128), (byte)(128), (byte)(128));
            this.tChart1.Axes.Bottom.Title.Caption          = "Days";
            this.tChart1.Axes.Bottom.Title.Font.Brush.Color = Colors.Gray;
            this.tChart1.Axes.Bottom.Title.Font.Name        = "Segoe UI";
            this.tChart1.Axes.Bottom.Title.Lines            = new string[] {
                "Days"
            };
            this.tChart1.Axes.Depth.Title.Font.Name    = "Roboto Th";
            this.tChart1.Axes.DepthTop.Title.Font.Name = "Roboto Th";
            this.tChart1.Axes.Left.Grid.Color          = Color.FromArgb((byte)(255), (byte)(221), (byte)(221), (byte)(221));
            this.tChart1.Axes.Left.MinorTicks.Visible  = false;
            this.tChart1.Axes.Left.Ticks.Color         = Color.FromArgb((byte)(255), (byte)(128), (byte)(128), (byte)(128));
            this.tChart1.Axes.Left.Ticks.Length        = 7;
            this.tChart1.Axes.Left.Title.Font.Name     = "Roboto Th";
            this.tChart1.Axes.Right.Grid.Visible       = false;
            this.tChart1.Axes.Right.MinorTicks.Visible = false;
            this.tChart1.Axes.Right.Ticks.Visible      = false;
            this.tChart1.Axes.Right.Title.Font.Name    = "Roboto Th";
            this.tChart1.Axes.Top.Title.Font.Name      = "Roboto Th";
            this.tChart1.Footer.Font.Brush.Color       = Colors.Blue;
            this.tChart1.Header.Alignment               = TextAlignment.Left;
            this.tChart1.Header.Font.Bold               = true;
            this.tChart1.Header.Font.Brush.Color        = Colors.Black;
            this.tChart1.Header.Font.Italic             = true;
            this.tChart1.Header.Font.Name               = "Roboto Lt";
            this.tChart1.Header.Font.Shadow.Brush.Color = Colors.Gray;
            this.tChart1.Header.Font.Shadow.SmoothBlur  = 2;
            this.tChart1.Header.Font.Size               = 14;
            this.tChart1.Header.Lines = new string[] {
                "Vegetation growth"
            };
            this.tChart1.Legend.Alignment                       = LegendAlignments.Top;
            this.tChart1.Legend.Font.Name                       = "Roboto Th";
            this.tChart1.Legend.Font.Size                       = 14;
            this.tChart1.Legend.Shadow.Visible                  = false;
            this.tChart1.Panel.Bevel.Outer                      = BevelStyles.None;
            this.tChart1.Panel.Bevel.Width                      = 2;
            this.tChart1.Panel.BevelWidth                       = 2;
            this.tChart1.Panel.Brush.Color                      = Colors.White;
            this.tChart1.Panel.Brush.Gradient.EndColor          = Colors.White;
            this.tChart1.Panel.Brush.Gradient.StartColor        = Colors.White;
            this.tChart1.Panel.Brush.Gradient.UseMiddle         = false;
            this.tChart1.Walls.Back.Brush.Gradient.EndColor     = Colors.White;
            this.tChart1.Walls.Back.Pen.Visible                 = false;
            this.tChart1.Walls.Back.Visible                     = false;
            this.tChart1.Walls.Bottom.Brush.Gradient.EndColor   = Colors.Silver;
            this.tChart1.Walls.Bottom.Brush.Gradient.StartColor = Colors.Gray;
            this.tChart1.Walls.Bottom.Brush.Gradient.Visible    = true;
            this.tChart1.Walls.Bottom.Pen.Color                 = Colors.Gray;
            this.tChart1.Walls.Bottom.Transparent               = true;
            this.tChart1.Walls.Left.Brush.Color                 = Colors.White;
            this.tChart1.Walls.Left.Brush.Gradient.EndColor     = Colors.Silver;
            this.tChart1.Walls.Left.Brush.Gradient.StartColor   = Colors.Gray;
            this.tChart1.Walls.Left.Brush.Gradient.Visible      = true;
            this.tChart1.Walls.Left.Pen.Color                   = Colors.Gray;
            this.tChart1.Walls.Left.Transparent                 = true;
            this.tChart1.Walls.Right.Transparent                = true;

            this.tChart1.Series.Add(area1);
            //this.area1.AreaBrush.Color = Color.FromArgb((byte)(92), (byte)(255), (byte)(153), (byte)(102));
            //this.area1.Gradient.StartColor = Color.FromArgb((byte)(255), (byte)(68), (byte)(102), (byte)(163));
            //this.area1.AreaLines.Color = Color.FromArgb((byte)(255), (byte)(41), (byte)(61), (byte)(98));
            //this.area1.AreaLines.Transparency = 64;
            this.area1.AreaLines.Visible = false;
            //this.area1.Brush.Color = Color.FromArgb((byte)(92), (byte)(255), (byte)(153), (byte)(102));
            //this.area1.TopGradient.Transparency = 64;
            this.area1.Color     = Color.FromArgb((byte)(175), (byte)(255), (byte)(153), (byte)(102));
            this.area1.ColorEach = false;
            //this.area1.LinePen.Color = Color.FromArgb((byte)(255), (byte)(0), (byte)(128), (byte)(255));
            //this.area1.LinePen.Transparency = 64;
            this.area1.LinePen.Visible                   = false;
            this.area1.Marks.Arrow.Transparency          = 64;
            this.area1.Marks.Arrow.Visible               = false;
            this.area1.Marks.ArrowLength                 = 0;
            this.area1.Marks.Brush.Color                 = Color.FromArgb((byte)(92), (byte)(255), (byte)(255), (byte)(255));
            this.area1.Marks.Brush.Gradient.Transparency = 64;
            this.area1.Marks.Clip             = true;
            this.area1.Marks.Font.Brush.Color = Color.FromArgb((byte)(92), (byte)(0), (byte)(0), (byte)(0));
            this.area1.Marks.Font.Brush.Gradient.Transparency = 64;
            this.area1.Marks.Font.Name          = "Roboto Th";
            this.area1.Marks.Pen.Transparency   = 64;
            this.area1.Marks.Shadow.Brush.Color = Color.FromArgb((byte)(92), (byte)(255), (byte)(255), (byte)(255));
            this.area1.Marks.Shadow.Brush.Gradient.Transparency = 64;
            this.area1.Marks.Transparent = true;
            this.area1.OriginalCursor    = null;
            //this.area1.Pointer.Brush.Color = Color.FromArgb((byte)(92), (byte)(255), (byte)(255), (byte)(255));
            //this.area1.Pointer.Brush.Gradient.Transparency = 64;
            //this.area1.Pointer.Pen.Transparency = 64;
            //this.area1.Pointer.SizeDouble = 0D;
            //this.area1.Pointer.SizeUnits = PointerSizeUnits.Pixels;
            this.area1.Title = "With nutrient";
            //this.area1.Transparency = 34;
            this.area1.XValues.Order = ValueListOrder.Ascending;

            this.tChart1.Series.Add(area2);
            //this.area2.AreaBrush.Color = Color.FromArgb((byte)(76), (byte)(128), (byte)(255), (byte)(255));
            //this.area2.Gradient.StartColor = Color.FromArgb((byte)(255), (byte)(68), (byte)(102), (byte)(163));
            //this.area2.AreaLines.Color = Color.FromArgb((byte)(255), (byte)(41), (byte)(61), (byte)(98));
            //this.area2.AreaLines.Transparency = 70;
            this.area2.AreaLines.Visible = false;
            //this.area2.Brush.Color = Color.FromArgb((byte)(76), (byte)(128), (byte)(255), (byte)(255));
            //this.area2.TopGradient.Transparency = 70;
            this.area2.Color     = Color.FromArgb((byte)(175), (byte)(128), (byte)(255), (byte)(255));
            this.area2.ColorEach = false;
            //this.area2.LinePen.Color = Colors.Purple;
            //this.area2.LinePen.Transparency = 70;
            this.area2.LinePen.Visible                          = false;
            this.area2.Marks.Arrow.Transparency                 = 70;
            this.area2.Marks.Arrow.Visible                      = false;
            this.area2.Marks.ArrowLength                        = 0;
            this.area2.Marks.Brush.Color                        = Color.FromArgb((byte)(76), (byte)(255), (byte)(255), (byte)(255));
            this.area2.Marks.Brush.Gradient.Transparency        = 70;
            this.area2.Marks.Font.Brush.Color                   = Color.FromArgb((byte)(76), (byte)(0), (byte)(0), (byte)(0));
            this.area2.Marks.Font.Brush.Gradient.Transparency   = 70;
            this.area2.Marks.Font.Name                          = "Roboto Th";
            this.area2.Marks.Pen.Transparency                   = 70;
            this.area2.Marks.Shadow.Brush.Color                 = Color.FromArgb((byte)(76), (byte)(128), (byte)(128), (byte)(128));
            this.area2.Marks.Shadow.Brush.Gradient.Transparency = 70;
            this.area2.Marks.Transparent                        = true;
            this.area2.OriginalCursor = null;
            this.area2.Title          = "No added nutrient";
            this.area2.XValues.Order  = ValueListOrder.Ascending;

            this.tChart1.Series.Add(area3);
            this.area3.AreaLines.Visible                        = false;
            this.area3.Color                                    = Color.FromArgb(((int)(((byte)(175)))), ((int)(((byte)(255)))), ((int)(((byte)(153)))), ((int)(((byte)(102)))));
            this.area3.ColorEach                                = false;
            this.area3.LinePen.Visible                          = false;
            this.area3.Marks.Arrow.Transparency                 = 47;
            this.area3.Marks.Arrow.Visible                      = false;
            this.area3.Marks.ArrowLength                        = 0;
            this.area3.Marks.Brush.Color                        = Color.FromArgb(((int)(((byte)(135)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(224)))));
            this.area3.Marks.Brush.Gradient.Transparency        = 47;
            this.area3.Marks.Font.Brush.Color                   = Color.FromArgb(((int)(((byte)(135)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
            this.area3.Marks.Font.Brush.Gradient.Transparency   = 47;
            this.area3.Marks.Font.Name                          = "Roboto Th";
            this.area3.Marks.Pen.Transparency                   = 47;
            this.area3.Marks.Shadow.Brush.Color                 = Color.FromArgb(((int)(((byte)(135)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))));
            this.area3.Marks.Shadow.Brush.Gradient.Transparency = 47;
            this.area3.Marks.Transparent                        = true;
            this.area3.OriginalCursor                           = null;
            this.area3.Title                                    = "Series2";
            this.area3.Visible                                  = false;
            this.area3.XValues.Order                            = ValueListOrder.Ascending;


            Random rnd1 = new Random();
            Random rnd2 = new Random();
            Random rnd3 = new Random();

            for (int t = 0; t < 15; t++)
            {
                area1.Add(rnd1.Next(100));
                area2.Add(rnd1.Next(60));
                area3.Add(rnd1.Next(30));
            }

            area1.Smoothed = true;
            area2.Smoothed = true;
            area3.Smoothed = true;

            tChart1.Axes.Bottom.Increment  = 3;
            tChart1.Panel.Gradient.Visible = false;
        }
예제 #19
0
        protected override void CreateGore(DiedEvent d)
        {
            base.CreateGore(d);

            if (saved)
            {
                return;
            }

            var heinur = new Heinur();

            Area.Add(heinur);
            heinur.Center = Center - new Vector2(0, 32);

            var g = heinur.GetComponent <BkGraphicsComponent>();

            g.Scale = Vector2.Zero;

            Timer.Add(() => {
                Tween.To(1, 0, x => g.Scale.X = x, 3f);
                Tween.To(1, 0, x => g.Scale.Y = x, 3f);
            }, 1f);

            var dm = new DarkMage();

            Area.Add(dm);

            dm.Center = Center + new Vector2(0, 32);
            dm.GetComponent <AnimationComponent>().Animate();

            AnimationUtil.Poof(dm.Center);

            var dmDialog     = dm.GetComponent <DialogComponent>();
            var heinurDialog = heinur.GetComponent <DialogComponent>();

            foreach (var p in Area.Tagged[Tags.Player])
            {
                p.RemoveComponent <PlayerInputComponent>();
            }

            Camera.Instance.Targets.Clear();
            Camera.Instance.Follow(dm, 1f);
            Camera.Instance.Follow(heinur, 1f);

            dmDialog.Start("dm_5", null, () => Timer.Add(() => {
                dmDialog.Close();
                Camera.Instance.Targets.Clear();
                Camera.Instance.Follow(dm, 1f);
                Camera.Instance.Follow(heinur, 1f);

                heinurDialog.Start("heinur_0", null, () => Timer.Add(() => {
                    heinurDialog.Close();
                    heinur.Attract = true;
                    Camera.Instance.Targets.Clear();
                    Camera.Instance.Follow(dm, 1f);
                    Camera.Instance.Follow(heinur, 1f);

                    heinur.Callback = () => {
                        Camera.Instance.Targets.Clear();
                        Camera.Instance.Follow(dm, 1f);

                        foreach (var p in Area.Tagged[Tags.Player])
                        {
                            p.GetComponent <PlayerGraphicsComponent>().Hidden = true;
                        }

                        var bk = new bk.BurningKnight()
                        {
                            Passive = true
                        };

                        Area.Add(bk);
                        bk.Center = Center;

                        bk.GetComponent <BkGraphicsComponent>().Animate();
                        Camera.Instance.Follow(bk, 1f);

                        dmDialog.Start("dm_6", null, () => Timer.Add(() => {
                            dmDialog.Close();
                            Camera.Instance.Targets.Clear();
                            Camera.Instance.Follow(bk, 1f);

                            var nbkDialog = bk.GetComponent <DialogComponent>();

                            nbkDialog.Start("nbk_0", null, () => Timer.Add(() => {
                                nbkDialog.Close();
                                Camera.Instance.Targets.Clear();
                                Camera.Instance.Follow(bk, 1f);
                                Run.Win();
                            }, 2f));
                        }, 2f));
                    };
                }, 1f));
            }, 1f));
        }
예제 #20
0
        private void ChangeupRoom()
        {
            foreach (var p in Area.Tagged[Tags.Player])
            {
                Timer.Add(() => {
                    AnimationUtil.TeleportAway(p, () => { });
                }, 0.5f);
            }

            Camera.Instance.Shake(6);

            AnimationUtil.TeleportAway(this, () => {
                GetComponent <RoomComponent>().Room.Hide();

                Timer.Add(() => {
                    foreach (var r in Area.Tagged[Tags.Room])
                    {
                        var room = (Room)r;

                        if (room.Type != RoomType.Boss)
                        {
                            room.Done = true;
                        }
                    }

                    foreach (var d in Area.Tagged[Tags.Door])
                    {
                        d.Done = true;
                    }

                    foreach (var e in Area.Entities.Entities)
                    {
                        if (e is WallTorch || e is Torch || e is Prop || e is Entrance || (e is Creature && !(e is Player || e is Boss)) ||
                            e is Turret || e is SpawnPoint || e is Projectile || e is MovingPlatform || e is RoomControllable || e is Gore)
                        {
                            e.Done = true;
                        }
                    }

                    var rm    = GetComponent <RoomComponent>().Room;
                    var level = Run.Level;
                    Type type;

                    if (GetComponent <HealthComponent>().Health <= 0)
                    {
                        type = typeof(DmEndRoom);
                    }
                    else
                    {
                        var arr = DmRoomRegistry.Rooms.ToList();

                        foreach (var t in did)
                        {
                            arr.Remove(t);
                        }

                        type = arr[Rnd.Int(arr.Count)];
                        did.Add(type);
                    }

                    for (var i = rm.Controllers.Count - 1; i >= 0; i--)
                    {
                        if (!(rm.Controllers[i] is BossRoomController))
                        {
                            rm.Controllers.RemoveAt(i);
                        }
                    }

                    var rmdef = (DmRoom)Activator.CreateInstance(type);

                    rm.Parent = rmdef;
                    rm.MapW   = Math.Min(Rnd.Int(rmdef.GetMinWidth(), rmdef.GetMaxWidth()), level.Width - 2);
                    rm.MapH   = Math.Min(Rnd.Int(rmdef.GetMinHeight(), rmdef.GetMaxHeight()), level.Height - 2);
                    rm.MapX   = (int)Math.Ceiling((level.Width - rm.MapW) / 2f);
                    rm.MapY   = (int)Math.Ceiling((level.Height - rm.MapH) / 2f);
                    rm.UpdateSize();

                    rmdef.Set(rm.MapX, rm.MapY, rm.MapX + rm.MapW - 1, rm.MapY + rm.MapH - 1);

                    Painter.Fill(level, new Rect(0, 0, level.Width, level.Height), Tile.WallA);
                    Painter.Fill(level, rmdef, 1, Tile.FloorA);
                    rmdef.PaintFloor(level);
                    rmdef.Paint(level, rm);

                    rmdef.PlaceMage(rm, this);

                    foreach (var p in Area.Tagged[Tags.Player])
                    {
                        var s = new SpawnPoint();
                        Area.Add(s);

                        rmdef.PlacePlayer(rm, (Player)p);
                        s.Center = p.Center;

                        AnimationUtil.TeleportIn(p);
                    }

                    Painter.ReplaceTiles(level, rmdef);
                    Painter.UpdateTransition(level);
                    level.TileUp();
                    level.RecreateBody();

                    Engine.Instance.Flash = 2f;

                    for (var i = 0; i < level.Size; i++)
                    {
                        level.Light[i] = 1f;
                    }

                    AnimationUtil.TeleportIn(this);
                }, 1f);
            });
        }
예제 #21
0
        public override void Update(float dt)
        {
            base.Update(dt);

            if (!did && Triggered)
            {
                Camera.Instance.Shake(0.5f);
                t += dt;

                if (t >= 1f)
                {
                    did = true;
                    var r = (int)Math.Ceiling(Math.Sqrt((RoomWidth + 1) * (RoomWidth + 1) + (RoomHeight + 1) * (RoomHeight + 1)));

                    Camera.Instance.Targets.Clear();
                    Camera.Instance.Follow(this, 3f);
                    Tween.To(0.5f, Camera.Instance.Zoom, x => Camera.Instance.Zoom = x, 0.3f);

                    for (var j = 1; j < r; j++)
                    {
                        var level = Run.Level;
                        var j1    = j;

                        Timer.Add(() => {
                            if (Interrupted)
                            {
                                level.CreateBody();
                                return;
                            }

                            for (var y = 0; y < RoomHeight; y++)
                            {
                                for (var x = 0; x < RoomWidth; x++)
                                {
                                    var dx = x - RoomWidth / 2f;
                                    var dy = y - RoomHeight / 2f;

                                    if (Math.Sqrt(dx * dx + dy * dy) > j1)
                                    {
                                        continue;
                                    }

                                    var i = x + y * RoomWidth;

                                    if (Tiles[i] == 255)
                                    {
                                        continue;
                                    }

                                    var li = level.ToIndex(RoomX + x, RoomY + y);

                                    if (level.Get(li).IsWall())
                                    {
                                        level.Variants[li] = 0;
                                    }

                                    // tmp
                                    Area.Add(new TileFx {
                                        X = (RoomX + x) * 16,
                                        Y = (RoomY + y) * 16 - 8
                                    });

                                    level.ReCreateBodyChunk(RoomX + x, RoomY + y);

                                    level.Tiles[li]  = Tiles[i];
                                    level.Liquid[li] = Liquid[i];

                                    Tiles[i] = 255;                                     // Mark as already checked;
                                }
                            }

                            for (var y = -1; y < RoomHeight + 1; y++)
                            {
                                for (var x = -1; x < RoomWidth + 1; x++)
                                {
                                    LevelTiler.TileUp(level, level.ToIndex(RoomX + x, RoomY + y));
                                }
                            }

                            Camera.Instance.Shake(2);
                        }, j * 0.05f);
                    }

                    Timer.Add(() => {
                        if (Interrupted)
                        {
                            return;
                        }

                        Tween.To(1f, Camera.Instance.Zoom, x => Camera.Instance.Zoom = x, 0.3f);

                        Timer.Add(() => {
                            if (Interrupted)
                            {
                                return;
                            }

                            Done         = true;
                            ReadyToSpawn = true;
                        }, 1f);
                    }, r * 0.05f + 1f);
                }
            }
        }
예제 #22
0
        public override void Update(float dt)
        {
            base.Update(dt);

            if (!On)
            {
                ResetTimer();
                return;
            }
            else
            {
                var room = GetComponent <RoomComponent>().Room;

                if (room.Tagged[Tags.Player].Count == 0 || room.Tagged[Tags.MustBeKilled].Count == 0)
                {
                    ResetTimer();
                    return;
                }
            }

            timer += dt;

            if (flaming)
            {
                if (timer <= 0.3f)
                {
                    lastParticle -= dt;

                    if (lastParticle <= 0)
                    {
                        lastParticle = 0.1f;

                        Area.Add(new FireParticle {
                            Position = new Vector2(CenterX, CenterY),
                            XChange  = 0.1f,
                            Scale    = 0.3f,
                            Vy       = 8,
                            Mod      = 2
                        });
                    }
                }
                else if (timer >= 1.5f)
                {
                    lastParticle -= dt;
                    Hurt();

                    if (lastParticle <= 0)
                    {
                        lastParticle = 0.15f;

                        Area.Add(new FireParticle {
                            Position = new Vector2(CenterX, CenterY),
                            XChange  = 0.1f,
                            Scale    = 0.3f,
                            Vy       = 8,
                            Mod      = 4
                        });
                    }

                    if (timer >= 5f)
                    {
                        timer   = 0;
                        flaming = false;
                    }
                }
            }
            else
            {
                if (timer >= 5f)
                {
                    timer        = 0;
                    flaming      = true;
                    lastParticle = 0;
                }
            }
        }
예제 #23
0
        public VegetationGrowth()
        {
            this.Title = "Vegetation Growth";

            tChart1 = new ChartView();


            tChart1.WidthRequest  = 400;
            tChart1.HeightRequest = 300;

            area1 = new Area();
            area2 = new Area();
            area3 = new Area();

            this.tChart1.Chart.Aspect.Elevation      = 350;
            this.tChart1.Chart.Aspect.ElevationFloat = 350D;
            this.tChart1.Chart.Aspect.Perspective    = 55;
            this.tChart1.Chart.Aspect.View3D         = false;
            this.tChart1.Chart.Aspect.ZoomText       = true;
            this.tChart1.Chart.Panning.Active        = true;
            this.tChart1.Chart.Zoom.Active           = true;

            this.tChart1.Chart.Axes.Bottom.Grid.Color             = Color.FromRgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221)))));
            this.tChart1.Chart.Axes.Bottom.Grid.Visible           = false;
            this.tChart1.Chart.Axes.Bottom.MinorTicks.Visible     = false;
            this.tChart1.Chart.Axes.Bottom.Ticks.Color            = Color.FromRgb(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))));
            this.tChart1.Chart.Axes.Bottom.Title.Caption          = "Days";
            this.tChart1.Chart.Axes.Bottom.Title.Font.Brush.Color = Color.Gray;
            this.tChart1.Chart.Axes.Bottom.Title.Font.Name        = "Segoe UI";
            this.tChart1.Chart.Axes.Bottom.Title.Lines            = new string[] { "Days" };
            this.tChart1.Chart.Axes.Depth.Title.Font.Name         = "Segoe UI";
            this.tChart1.Chart.Axes.DepthTop.Title.Font.Name      = "Segoe UI";
            this.tChart1.Chart.Axes.Left.Grid.Color          = Color.FromRgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221)))));
            this.tChart1.Chart.Axes.Left.MinorTicks.Visible  = false;
            this.tChart1.Chart.Axes.Left.Ticks.Color         = Color.FromRgb(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))));
            this.tChart1.Chart.Axes.Left.Ticks.Length        = 7;
            this.tChart1.Chart.Axes.Left.Title.Font.Name     = "Segoe UI";
            this.tChart1.Chart.Axes.Right.Grid.Visible       = false;
            this.tChart1.Chart.Axes.Right.MinorTicks.Visible = false;
            this.tChart1.Chart.Axes.Right.Ticks.Visible      = false;
            this.tChart1.Chart.Axes.Right.Title.Font.Name    = "Segoe UI";
            this.tChart1.Chart.Axes.Top.Title.Font.Name      = "Segoe UI";
            this.tChart1.Chart.Header.Alignment               = TextAlignment.Center;
            this.tChart1.Chart.Header.Font.Bold               = true;
            this.tChart1.Chart.Header.Font.Brush.Color        = Color.Black;
            this.tChart1.Chart.Header.Font.Italic             = true;
            this.tChart1.Chart.Header.Font.Name               = "Segoe UI";
            this.tChart1.Chart.Header.Font.Shadow.Brush.Color = Color.Gray;
            this.tChart1.Chart.Header.Font.Shadow.SmoothBlur  = 2;
            this.tChart1.Chart.Header.Font.Size               = 14;
            this.tChart1.Chart.Header.Lines                 = new string[] { "Vegetation growth" };
            this.tChart1.Chart.Legend.Alignment             = Steema.TeeChart.LegendAlignments.Top;
            this.tChart1.Chart.Legend.Font.Name             = "Segoe UI";
            this.tChart1.Chart.Legend.Font.Size             = 14;
            this.tChart1.Chart.Legend.Pen.Visible           = false;
            this.tChart1.Chart.Legend.Shadow.Visible        = false;
            this.tChart1.Chart.Panel.Bevel.Outer            = Steema.TeeChart.Drawing.BevelStyles.None;
            this.tChart1.Chart.Panel.Bevel.Width            = 2;
            this.tChart1.Chart.Panel.BevelWidth             = 2;
            this.tChart1.Chart.Panel.Brush.Color            = Color.White;
            this.tChart1.Chart.Panel.Brush.Gradient.Visible = false;
            this.tChart1.Chart.Series.Add(this.area1);
            this.tChart1.Chart.Series.Add(this.area2);
            this.tChart1.Chart.Series.Add(this.area3);
            this.tChart1.Chart.Walls.Back.Brush.Gradient.EndColor = Color.White;
            this.tChart1.Chart.Walls.Back.Pen.Visible             = false;
            this.tChart1.Chart.Walls.Back.Visible = false;
            this.tChart1.Chart.Walls.Bottom.Brush.Gradient.Visible = false;
            this.tChart1.Chart.Walls.Bottom.Pen.Color            = Color.Gray;
            this.tChart1.Chart.Walls.Bottom.Transparent          = true;
            this.tChart1.Chart.Walls.Left.Brush.Color            = Color.White;
            this.tChart1.Chart.Walls.Left.Brush.Gradient.Visible = false;
            this.tChart1.Chart.Walls.Left.Pen.Color    = Color.Gray;
            this.tChart1.Chart.Walls.Left.Transparent  = true;
            this.tChart1.Chart.Walls.Right.Transparent = true;
            // area1
            this.area1.AreaBrush.Color          = Color.FromRgba(((int)(((byte)(255)))), ((int)(((byte)(153)))), ((int)(((byte)(102)))), ((int)(((byte)(92)))));
            this.area1.Gradient.StartColor      = Color.FromRgb(((int)(((byte)(68)))), ((int)(((byte)(102)))), ((int)(((byte)(163)))));
            this.area1.AreaLines.Color          = Color.FromRgb(((int)(((byte)(41)))), ((int)(((byte)(61)))), ((int)(((byte)(98)))));
            this.area1.AreaLines.Transparency   = 64;
            this.area1.AreaLines.Visible        = false;
            this.area1.Brush.Color              = Color.FromRgba(((int)(((byte)(255)))), ((int)(((byte)(153)))), ((int)(((byte)(102)))), ((int)(((byte)(92)))));
            this.area1.TopGradient.Transparency = 64;
            this.area1.Color                                    = Color.FromRgba(((int)(((byte)(255)))), ((int)(((byte)(153)))), ((int)(((byte)(102)))), ((int)(((byte)(92)))));
            this.area1.ColorEach                                = false;
            this.area1.LinePen.Color                            = Color.FromRgb(((int)(((byte)(0)))), ((int)(((byte)(128)))), ((int)(((byte)(255)))));
            this.area1.LinePen.Transparency                     = 64;
            this.area1.LinePen.Visible                          = false;
            this.area1.Marks.Arrow.Transparency                 = 64;
            this.area1.Marks.Arrow.Visible                      = false;
            this.area1.Marks.ArrowLength                        = 0;
            this.area1.Marks.Brush.Color                        = Color.FromRgba(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(92)))));
            this.area1.Marks.Brush.Gradient.Transparency        = 64;
            this.area1.Marks.Clip                               = true;
            this.area1.Marks.Font.Brush.Color                   = Color.FromRgba(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(92)))));
            this.area1.Marks.Font.Brush.Gradient.Transparency   = 64;
            this.area1.Marks.Font.Name                          = "Segoe UI";
            this.area1.Marks.Pen.Transparency                   = 64;
            this.area1.Marks.Shadow.Brush.Color                 = Color.FromRgba(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(92)))));
            this.area1.Marks.Shadow.Brush.Gradient.Transparency = 64;
            this.area1.Marks.Transparent                        = true;
            this.area1.Pointer.Brush.Color                      = Color.FromRgba(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(92)))));
            this.area1.Pointer.Brush.Gradient.Transparency      = 64;
            this.area1.Pointer.Pen.Transparency                 = 64;
            this.area1.Pointer.SizeDouble                       = 0D;
            this.area1.Pointer.SizeUnits                        = Steema.TeeChart.Styles.PointerSizeUnits.Pixels;
            this.area1.Title                                    = "With nutrient";
            this.area1.Transparency                             = 64;
            this.area1.XValues.Order                            = Steema.TeeChart.Styles.ValueListOrder.Ascending;
            // area2
            this.area2.AreaBrush.Color          = Color.FromRgba(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(76)))));
            this.area2.Gradient.StartColor      = Color.FromRgb(((int)(((byte)(68)))), ((int)(((byte)(102)))), ((int)(((byte)(163)))));
            this.area2.AreaLines.Color          = Color.FromRgb(((int)(((byte)(41)))), ((int)(((byte)(61)))), ((int)(((byte)(98)))));
            this.area2.AreaLines.Transparency   = 70;
            this.area2.AreaLines.Visible        = false;
            this.area2.Brush.Color              = Color.FromRgba(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(76)))));
            this.area2.TopGradient.Transparency = 70;
            this.area2.Color                                    = Color.FromRgba(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(76)))));
            this.area2.ColorEach                                = false;
            this.area2.LinePen.Color                            = Color.Purple;
            this.area2.LinePen.Transparency                     = 70;
            this.area2.LinePen.Visible                          = false;
            this.area2.Marks.Arrow.Transparency                 = 70;
            this.area2.Marks.Arrow.Visible                      = false;
            this.area2.Marks.ArrowLength                        = 0;
            this.area2.Marks.Brush.Color                        = Color.FromRgba(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(76)))));
            this.area2.Marks.Brush.Gradient.Transparency        = 70;
            this.area2.Marks.Font.Brush.Color                   = Color.FromRgba(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(76)))));
            this.area2.Marks.Font.Brush.Gradient.Transparency   = 70;
            this.area2.Marks.Font.Name                          = "Segoe UI";
            this.area2.Marks.Pen.Transparency                   = 70;
            this.area2.Marks.Shadow.Brush.Color                 = Color.FromRgba(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(76)))));
            this.area2.Marks.Shadow.Brush.Gradient.Transparency = 70;
            this.area2.Marks.Transparent                        = true;
            this.area2.Pointer.Brush.Color                      = Color.FromRgba(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(76)))));
            this.area2.Pointer.Brush.Gradient.Transparency      = 70;
            this.area2.Pointer.Pen.Transparency                 = 70;
            this.area2.Pointer.SizeDouble                       = 0D;
            this.area2.Pointer.SizeUnits                        = Steema.TeeChart.Styles.PointerSizeUnits.Pixels;
            this.area2.Title                                    = "No added nutrient";
            this.area2.Transparency                             = 70;
            this.area2.XValues.Order                            = Steema.TeeChart.Styles.ValueListOrder.Ascending;
            // area3
            this.area3.AreaBrush.Color          = Color.FromRgb(((int)(((byte)(68)))), ((int)(((byte)(102)))), ((int)(((byte)(163)))));
            this.area3.Gradient.StartColor      = Color.FromRgb(((int)(((byte)(68)))), ((int)(((byte)(102)))), ((int)(((byte)(163)))));
            this.area3.AreaLines.Color          = Color.FromRgb(((int)(((byte)(41)))), ((int)(((byte)(61)))), ((int)(((byte)(98)))));
            this.area3.AreaLines.Transparency   = 47;
            this.area3.AreaLines.Visible        = false;
            this.area3.Brush.Color              = Color.FromRgba(((int)(((byte)(135)))), ((int)(((byte)(255)))), ((int)(((byte)(153)))), ((int)(((byte)(102)))));
            this.area3.TopGradient.Transparency = 47;
            this.area3.Color                                    = Color.FromRgba(((int)(((byte)(135)))), ((int)(((byte)(255)))), ((int)(((byte)(153)))), ((int)(((byte)(102)))));
            this.area3.ColorEach                                = false;
            this.area3.LinePen.Color                            = Color.FromRgb(((int)(((byte)(0)))), ((int)(((byte)(128)))), ((int)(((byte)(64)))));
            this.area3.LinePen.Transparency                     = 47;
            this.area3.LinePen.Visible                          = false;
            this.area3.Marks.Arrow.Transparency                 = 47;
            this.area3.Marks.Arrow.Visible                      = false;
            this.area3.Marks.ArrowLength                        = 0;
            this.area3.Marks.Brush.Color                        = Color.FromRgba(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(135)))));
            this.area3.Marks.Brush.Gradient.Transparency        = 47;
            this.area3.Marks.Font.Brush.Color                   = Color.FromRgba(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(135)))));
            this.area3.Marks.Font.Brush.Gradient.Transparency   = 47;
            this.area3.Marks.Font.Name                          = "Segoe UI";
            this.area3.Marks.Pen.Transparency                   = 47;
            this.area3.Marks.Shadow.Brush.Color                 = Color.FromRgba(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(135)))));
            this.area3.Marks.Shadow.Brush.Gradient.Transparency = 47;
            this.area3.Marks.Transparent                        = true;
            this.area3.Pointer.Brush.Color                      = Color.FromRgba(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(135)))));
            this.area3.Pointer.Brush.Gradient.Transparency      = 47;
            this.area3.Pointer.Pen.Transparency                 = 47;
            this.area3.Pointer.SizeDouble                       = 0D;
            this.area3.Pointer.SizeUnits                        = Steema.TeeChart.Styles.PointerSizeUnits.Pixels;
            this.area3.Title                                    = "Series2";
            this.area3.Transparency                             = 47;
            this.area3.Visible                                  = false;
            this.area3.XValues.Order                            = Steema.TeeChart.Styles.ValueListOrder.Ascending;

            Random rnd1 = new Random();
            Random rnd2 = new Random();
            Random rnd3 = new Random();

            for (int t = 0; t < 15; t++)
            {
                area1.Add(rnd1.Next(100));
                area2.Add(rnd1.Next(60));
                area3.Add(rnd1.Next(30));
            }

            area1.Smoothed = true;
            area2.Smoothed = true;
            area3.Smoothed = true;

            tChart1.Chart.Axes.Bottom.Increment   = 3;
            tChart1.Chart.Panel.Gradient.Visible  = false;
            tChart1.Chart.Axes.Left.StartPosition = 0;
            Label l = new Label();

            l.Text = "hello";
            tChart1.InvalidateDisplay();
            tChart1.Chart.Invalidate();


            Content = new StackLayout
            {
                Children =
                {
                    tChart1
                },
                VerticalOptions   = LayoutOptions.CenterAndExpand,
                HorizontalOptions = LayoutOptions.CenterAndExpand,
            };
        }
예제 #24
0
 public void MoveTo(Point position)
 {
     Path.Push(position);
     AllPositions.Add(position);
     CurrentPosition = position;
 }
        // Constructor
        public StackAreaChartFeatures(ChartView BaseChart)
        {
            // Inicializar variables
            area1 = new Area();
            area2 = new Area();
            var   = new Variables.Variables();
            tool_dataPointSelect = new DataPointSelection(BaseChart);

            // Propiedades del "Chart" base
            BaseChart.Chart.Series.Add(area2);
            BaseChart.Chart.Series.Add(area1);
            BaseChart.Chart.Legend.Visible           = true;
            BaseChart.Chart.Header.Text              = "Mensual sells by two companies";
            BaseChart.Chart.Axes.Bottom.LabelsOnAxis = true;

            // Propiedades de la "area1"
            area1.Title                  = "Company 1";
            area1.SeriesColor            = var.GetPaletteBasic[0];
            area1.Chart.Zoom.Allow       = false;
            area1.Chart.Panning.Allow    = ScrollModes.None;
            area1.RecalcOptions          = RecalcOptions.OnModify;
            area1.DefaultNullValue       = 0;
            area1.ClickableLine          = true;
            area1.AreaLines.Visible      = false;
            area1.LinePen.Width          = 5;
            area1.Pointer.Visible        = true;
            area1.Pointer.Style          = PointerStyles.Nothing;
            area1.Pointer.InflateMargins = false;
            area1.LinePen.Style          = DashStyle.Solid;
            area1.LinePen.EndCap         = PenLineCap.Flat;
            area1.LinePen.DashCap        = PenLineCap.Flat;
            area1.LinePen.Color          = var.GetPaletteBasic[0].AddLuminosity(-0.2);
            area1.ClickTolerance         = 30;
            area1.ClickPointer          += tool_dataPointSelect.PointValue_Click;
            area1.GetSeriesMark         += tool_dataPointSelect.Serie_GetSeriesMark;
            for (int i = 0; i < var.GetValorArea1.Length; i++)
            {
                area1.Add(var.GetValorArea1[i], var.GetValorAreaX[i]);
            }
            area1.VertAxis    = VerticalAxis.Both;
            area1.HorizAxis   = HorizontalAxis.Both;
            area1.Marks.OnTop = true;

            // Propiedades de la "area2"
            area2.Title               = "Company 2";
            area2.SeriesColor         = var.GetPaletteBasic[1];
            area2.Chart.Zoom.Allow    = false;
            area2.Chart.Panning.Allow = ScrollModes.None;
            area2.RecalcOptions       = RecalcOptions.OnModify;
            area2.DefaultNullValue    = 0;
            area2.ClickableLine       = true;
            area2.ClickTolerance      = 30;
            area2.Pointer.Visible     = true;
            area2.Pointer.Style       = PointerStyles.Nothing;
            area2.LinePen.Style       = DashStyle.Solid;
            area2.LinePen.EndCap      = PenLineCap.Flat;
            area2.LinePen.DashCap     = PenLineCap.Flat;
            area2.LinePen.Color       = var.GetPaletteBasic[0].AddLuminosity(-0.2);
            area2.LinePen.Color       = var.GetPaletteBasic[1].AddLuminosity(-0.2);
            area2.AreaLines.Visible   = false;
            area2.LinePen.Width       = 5;
            area2.ClickPointer       += tool_dataPointSelect.PointValue_Click;
            area2.GetSeriesMark      += tool_dataPointSelect.Serie_GetSeriesMark;
            for (int i = 0; i < var.GetValorArea2.Length; i++)
            {
                area2.Add(var.GetValorArea2[i], var.GetValorAreaX[i]);
            }
            area2.VertAxis    = VerticalAxis.Both;
            area2.HorizAxis   = HorizontalAxis.Both;
            area2.Marks.OnTop = true;

            area1.Stacked    = CustomStack.Stack;
            area2.Stacked    = CustomStack.Stack;
            area1.StackGroup = 1;
            area2.StackGroup = 1;

            // Propieades de los ejes del "Chart" base
            BaseChart.Chart.Axes.Left.SetMinMax(BaseChart.Chart.Axes.Left.MinYValue, BaseChart.Chart.Axes.Left.MaxYValue + 20);
            BaseChart.Chart.Axes.Bottom.SetMinMax(BaseChart.Chart.Axes.Bottom.MinXValue, BaseChart.Chart.Axes.Bottom.MaxXValue);
            BaseChart.Chart.Axes.Left.Labels.ValueFormat   = "0";
            BaseChart.Chart.Axes.Bottom.Labels.ValueFormat = "0";
            BaseChart.Chart.Axes.Bottom.Labels.TextAlign   = Xamarin.Forms.TextAlignment.Start;
            BaseChart.Chart.Axes.Left.Visible       = true;
            BaseChart.Chart.Axes.Left.Increment     = 20;
            BaseChart.Chart.Axes.Left.Title.Visible = false;
            BaseChart.Chart.Axes.Left.Ticks         = new Axis.TicksPen {
                Width = 2, Visible = true, Color = Color.FromArgb(200, 200, 200), EndCap = PenLineCap.Flat, Style = DashStyle.Solid, Length = 10
            };
            BaseChart.Chart.Axes.Left.LabelsOnAxis = true;

            BaseChart.Chart.Axes.Left.Labels.CustomSize = 10;
            BaseChart.Chart.Axes.Bottom.Title.Visible   = false;
            BaseChart.Chart.Axes.Left.AxisPen.Visible   = true;
            BaseChart.Chart.Axes.Left.Grid.Visible      = false;
            BaseChart.Chart.Axes.Bottom.Grid.Visible    = false;
            BaseChart.Chart.Legend.LegendStyle          = LegendStyles.Series;
            BaseChart.Chart.Panel.MarginRight           = 5;
            BaseChart.Chart.ClickSeries     += null;
            BaseChart.Chart.Panel.MarginLeft = 4;

            // Themes Marks
            Themes.AplicarMarksTheme1(BaseChart);
            area1.Marks.Width = 82;
            area2.Marks.Width = 82;
            //area2.Marks.
            //area1.Marks.ZPosition = 1;
        }
예제 #26
0
        public override bool HandleEvent(Event e)
        {
            if (e is BurningStatue.BrokenEvent)
            {
                Interrupted = true;
                Done        = true;

                return(base.HandleEvent(e));
            }

            if (Triggered)
            {
                return(base.HandleEvent(e));
            }

            if (e is CollisionStartedEvent cse)
            {
                if (cse.Entity is Player p)
                {
                    Timer.Add(() => {
                        Triggered = true;
                    }, 1f);

                    var xx = (int)Math.Floor(CenterX / 16);
                    var xy = (int)Math.Floor(CenterY / 16);

                    Painter.Rect(Run.Level, xx - 3, xy - 3, 6, 6, Tile.Chasm);

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

                    foreach (var t in torches)
                    {
                        ((Torch)t).On = false;
                    }

                    Timer.Add(() => {
                        if (Interrupted)
                        {
                            return;
                        }

                        foreach (var t in torches)
                        {
                            var tr     = (Torch)t;
                            tr.On      = true;
                            tr.XSpread = 0.1f;
                        }
                    }, 3f);

                    HandleEvent(new TriggeredEvent {
                        Trigger = this,
                        Who     = p
                    });

                    for (var x = X - 16; x < X + Width + 16; x += 16)
                    {
                        for (var i = 0; i < Rnd.Int(3, 9); i++)
                        {
                            Area.Add(new FireParticle {
                                Position = new Vector2(x + Rnd.Float(-2, 18), Y - 16 + Rnd.Float(-2, 18)),
                                Delay    = Rnd.Float(0.5f),
                                XChange  = 0.1f,
                                Scale    = 0.3f,
                                Vy       = 8,
                                T        = 0.5f,
                                B        = 0
                            });

                            Area.Add(new FireParticle {
                                Position = new Vector2(x + Rnd.Float(-2, 18), Y + Height + Rnd.Float(-2, 18)),
                                Delay    = Rnd.Float(0.5f),
                                XChange  = 0.1f,
                                Scale    = 0.3f,
                                Vy       = 8,
                                T        = 0.5f,
                                B        = 0
                            });

                            Area.Add(new TileFx {
                                Position = new Vector2(x, Y - 16)
                            });

                            Area.Add(new TileFx {
                                Position = new Vector2(x, Y + Height)
                            });
                        }
                    }

                    for (var y = Y; y < Y + Height; y += 16)
                    {
                        for (var i = 0; i < Rnd.Int(3, 9); i++)
                        {
                            Area.Add(new FireParticle {
                                Position = new Vector2(X + Rnd.Float(-2, 18) - 16, y + Rnd.Float(-2, 18)),
                                Delay    = Rnd.Float(0.5f),
                                XChange  = 0.1f,
                                Scale    = 0.3f,
                                Vy       = 8,
                                T        = 0.5f,
                                B        = 0
                            });

                            Area.Add(new FireParticle {
                                Position = new Vector2(X + Width + Rnd.Float(-2, 18), y + Rnd.Float(-2, 18)),
                                Delay    = Rnd.Float(0.5f),
                                XChange  = 0.1f,
                                Scale    = 0.3f,
                                Vy       = 8,
                                T        = 0.5f,
                                B        = 0
                            });

                            Area.Add(new TileFx {
                                Position = new Vector2(X - 16, y)
                            });

                            Area.Add(new TileFx {
                                Position = new Vector2(X + Width, y)
                            });
                        }
                    }
                }
            }

            return(base.HandleEvent(e));
        }
        public PercentStdFunctionsChart(ChartView BaseChart)
        {
            percentFunction = new Steema.TeeChart.Functions.PercentChange();
            area            = new Area();
            thePercentLine  = new Line();
            var             = new Variables.Variables();

            for (int i = 0; i < var.GetValorStdPercent1.Length; i++)
            {
                area.Add(i, var.GetValorStdPercent1[i]);
            }

            BaseChart.Chart.Series.Add(area);
            BaseChart.Chart.Series.Add(thePercentLine);

            thePercentLine.Function   = percentFunction;
            thePercentLine.DataSource = new object[] { area };

            area.SeriesColor           = var.GetPaletteBasic[0];
            thePercentLine.SeriesColor = var.GetPaletteBasic[2];

            area.Title    = "Data";
            area.Smoothed = true;

            thePercentLine.Title           = "Percent Change";
            thePercentLine.LinePen.Width   = 6;
            thePercentLine.Pointer.Visible = false;
            thePercentLine.Marks.Visible   = false;
            thePercentLine.VertAxis        = VerticalAxis.Right;
            thePercentLine.LinePen.DashCap = PenLineCap.Round;
            thePercentLine.LinePen.EndCap  = PenLineCap.Round;

            BaseChart.Chart.Axes.Left.SetMinMax(BaseChart.Chart.Axes.Left.MinYValue, BaseChart.Chart.Axes.Left.MaxYValue + 2);
            BaseChart.Chart.Axes.Bottom.SetMinMax(BaseChart.Chart.Axes.Bottom.MinXValue, BaseChart.Chart.Axes.Bottom.MaxXValue);
            BaseChart.Chart.Axes.Left.Increment        = 3;
            BaseChart.Chart.Axes.Bottom.Labels.Visible = false;
            BaseChart.Chart.Axes.Left.Grid.Visible     = false;
            BaseChart.Chart.Axes.Left.AxisPen.Visible  = true;
            BaseChart.Chart.Header.Visible             = false;

            Themes.AplicarMarksTheme1(BaseChart);
            BaseChart.Chart.Series[0].Marks.Font.Size = 14;
            BaseChart.Chart.Series[1].Marks.Font.Size = 14;

            area.Marks.Pen.Visible = false;

            area.Marks.TailStyle        = MarksTail.None;
            area.Transparency           = 50;
            area.AreaLines.Visible      = false;
            area.LinePen.Color          = area.Color.AddLuminosity(-0.2);
            area.LinePen.Width          = 5;
            area.LinePen.Transparency   = 50;
            area.AreaLines.Width        = 0;
            area.AreaLines.Transparency = 100;
            area.AreaLinesPen.Width     = 1;
            area.AreaLinesPen.Visible   = true;

            BaseChart.Chart.Series[0].Marks.TextAlign = TextAlignment.Center;
            BaseChart.Chart.Series[0].Marks.AutoSize  = true;
            BaseChart.Chart.Series[0].Marks.Color     = Xamarin.Forms.Color.Transparent;
            //BaseChart.Chart.Series[1].Marks.ShapeBounds = new Xamarin.Forms.Rectangle { Width = 85, Height = 40 };
            BaseChart.Chart.Series[1].Marks.TailStyle = MarksTail.None;
            BaseChart.Chart.Panel.MarginLeft          = 3;
        }
예제 #28
0
        public override void Init()
        {
            base.Init();

            description = new UiString(Font.Small);
            ((InGameState)Engine.Instance.State).TopUi.Add(description);
            ((InGameState)Engine.Instance.State).TopUi.Add(new RenderTrigger(RenderTop, 10));
            description.DisableRender = true;

            Area.Add(activeSlot);

            if (weaponSlot != null)
            {
                Area.Add(weaponSlot);
            }

            Area.Add(activeWeaponSlot);

            var anim = Animations.Get("ui");

            ItemSlot = anim.GetSlice("item_slot");
            UseSlot  = new TextureRegion();
            UseSlot.Set(ItemSlot);

            question    = anim.GetSlice("question");
            bomb        = anim.GetSlice("bomb");
            key         = anim.GetSlice("key");
            coin        = anim.GetSlice("coin");
            pointer     = anim.GetSlice("pointer");
            exitPointer = anim.GetSlice("exit_pointer");

            Heart                      = anim.GetSlice("heart");
            HalfHeart                  = anim.GetSlice("half_heart");
            HeartBackground            = anim.GetSlice("heart_bg");
            changedHeartBackground     = anim.GetSlice("heart_hurt_bg");
            halfHeartBackground        = anim.GetSlice("half_heart_bg");
            changedHalfHeartBackground = anim.GetSlice("half_heart_hurt");

            veganHeart                      = anim.GetSlice("vegan");
            veganHalfHeart                  = anim.GetSlice("half_vegan");
            veganHeartBackground            = anim.GetSlice("vegan_bg");
            veganchangedHeartBackground     = anim.GetSlice("vegan_hurt_bg");
            veganhalfHeartBackground        = anim.GetSlice("half_vegan_bg");
            veganchangedHalfHeartBackground = anim.GetSlice("half_vegan_hurt_bg");

            Bomb          = anim.GetSlice("bmb");
            BombBg        = anim.GetSlice("bmb_bg");
            ChangedBombBg = anim.GetSlice("bmb_hurt");

            Mana                  = anim.GetSlice("mana");
            HalfMana              = anim.GetSlice("half_mana");
            ManaBackground        = anim.GetSlice("mana_bg");
            ChangedManaBackground = anim.GetSlice("mana_hurt_bg");

            ShieldBackground            = anim.GetSlice("shield_bg");
            changedShieldBackground     = anim.GetSlice("shield_hurt");
            halfShieldBackground        = anim.GetSlice("half_shield_bg");
            changedHalfShieldBackground = anim.GetSlice("half_shield_hurt");

            if (Player != null)
            {
                var component = Player.GetComponent <ConsumablesComponent>();

                coins = component.Coins;
                keys  = component.Keys;
                bombs = component.Bombs;

                var area = Player.Area;

                Subscribe <ConsumableAddedEvent>(area);
                Subscribe <ConsumableRemovedEvent>(area);
                Subscribe <ItemUsedEvent>(area);
                Subscribe <ItemAddedEvent>(area);
                Subscribe <ItemRemovedEvent>(area);
                Subscribe <RerollItemsOnPlayerUse.RerolledEvent>(area);

                more      = new UiButton();
                more.Font = Font.Small;

                more.Click = (b) => {
                    var state = (InGameState)Engine.Instance.State;
                    state.OnPauseCallback = state.GoToInventory;
                    state.Paused          = true;
                };

                more.Enabled = false;
                Area.Add(more);
                more.Right  = Display.UiWidth - 8;
                more.Bottom = Display.UiHeight - 5;

                var inventory = Player.GetComponent <InventoryComponent>();

                foreach (var item in inventory.Items)
                {
                    AddArtifact(item);
                }
            }
        }
예제 #29
0
        public override bool HandleEvent(Event e)
        {
            if (e is ItemTakenEvent && !triggered)
            {
                Timer.Add(() => { triggered = true; }, 1f);

                Camera.Instance.Shake(12);

                var xx = (int)Math.Floor(CenterX / 16) * 16;
                var xy = (int)Math.Floor(CenterY / 16) * 16;
                var p  = 32;

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

                foreach (var t in torches)
                {
                    ((Torch)t).On = false;
                }

                Timer.Add(() => {
                    foreach (var t in torches)
                    {
                        var tr     = (Torch)t;
                        tr.On      = true;
                        tr.XSpread = 0.1f;
                    }
                }, 3f);

                for (var x = xx - p; x < xx + Width + p; x += 16)
                {
                    for (var i = 0; i < Rnd.Int(3, 9); i++)
                    {
                        Area.Add(new FireParticle {
                            Position = new Vector2(x + Rnd.Float(-2, 18), xy - p + Rnd.Float(-2, 18)),
                            Delay    = Rnd.Float(0.5f),
                            XChange  = 0.1f,
                            Scale    = 0.3f,
                            Vy       = 8,
                            T        = 0.5f,
                            B        = 0
                        });

                        Area.Add(new FireParticle {
                            Position = new Vector2(x + Rnd.Float(-2, 18), xy + Height + p - 16 + Rnd.Float(-2, 18)),
                            Delay    = Rnd.Float(0.5f),
                            XChange  = 0.1f,
                            Scale    = 0.3f,
                            Vy       = 8,
                            T        = 0.5f,
                            B        = 0
                        });
                    }
                }

                for (var y = xy; y < xy + Height; y += 16)
                {
                    for (var i = 0; i < Rnd.Int(3, 9); i++)
                    {
                        Area.Add(new FireParticle {
                            Position = new Vector2(xx + Rnd.Float(-2, 18) - p, y + Rnd.Float(-2, 18)),
                            Delay    = Rnd.Float(0.5f),
                            XChange  = 0.1f,
                            Scale    = 0.3f,
                            Vy       = 8,
                            T        = 0.5f,
                            B        = 0
                        });

                        Area.Add(new FireParticle {
                            Position = new Vector2(xx + Width + p - 16 + Rnd.Float(-2, 18), y + Rnd.Float(-2, 18)),
                            Delay    = Rnd.Float(0.5f),
                            XChange  = 0.1f,
                            Scale    = 0.3f,
                            Vy       = 8,
                            T        = 0.5f,
                            B        = 0
                        });
                    }
                }
            }

            return(base.HandleEvent(e));
        }
예제 #30
0
        public override void Generate(Area area)
        {
            if (Run.Depth < -2)               // Cutscenes
            {
                return;
            }

            var player = new LocalPlayer();

            area.Add(player);

            var input = player.GetComponent <InputComponent>();

            input.Index           = 0;
            input.KeyboardEnabled = true;
            input.GamepadEnabled  = Run.NumPlayers <= 1;

            for (var i = 1; i < Run.NumPlayers; i++)
            {
                input = area.Add(new LocalPlayer()).GetComponent <InputComponent>();

                input.Index           = (byte)i;
                input.KeyboardEnabled = false;
                input.GamepadEnabled  = true;
            }

            Run.NumPlayers = 0;

            if (Run.Depth > 0)
            {
                if (Run.Type == RunType.Challenge)
                {
                    var c = ChallengeRegistry.Get(Run.ChallengeId);

                    try {
                        c?.Apply(player);
                    } catch (Exception e) {
                        Log.Error(e);
                    }
                }
                else if (Run.Type == RunType.Daily)
                {
                    Rnd.Seed = Run.Seed;

                    var count = Rnd.Int(1, 4);

                    var pool = Items.GeneratePool(Items.GetPool(ItemPool.Treasure), i => i.Type == ItemType.Artifact);
                    Log.Debug($"Pool count: {pool.Count}");
                    Player.DailyItems = new List <string>();

                    for (var i = 0; i < count; i++)
                    {
                        Player.DailyItems.Add(Items.GenerateAndRemove(pool));
                    }

                    var si = Rnd.Chance(70) ? Items.Generate(ItemType.Active) : null;
                    var sw = Items.Generate(ItemPool.Weapon);
                    var sl = Items.Generate(ItemType.Lamp);

                    for (var i = 0; i < Player.MaxPlayers; i++)
                    {
                        Player.StartingItems[i]   = si;
                        Player.StartingWeapons[i] = sw;
                        Player.StartingLamps[i]   = sl;
                    }
                }

                area.Add(new RunStatistics());
                area.Add(new entity.creature.bk.BurningKnight());
            }
            else if (Run.Depth == -2)
            {
                area.Add(new RunStatistics());
            }
        }