public FancyFinalBossMovingBlock(EntityData data, Vector2 offset) : base(data.NodesWithPosition(offset), data.Width, data.Height, data.Int("nodeIndex", 0)) { baseData = new DynData <FinalBossMovingBlock>(this); Remove(baseData.Get <TileGrid>("sprite")); Remove(baseData.Get <TileGrid>("highlight")); Remove(Get <TileInterceptor>()); badLightOcclude = Get <LightOcclude>(); tileMap = GenerateTileMap(data.Attr("tileData", "")); tileMapHighlighted = GenerateTileMap(data.Attr("tileDataHighlight", "")); int newSeed = Calc.Random.Next(); Calc.PushRandom(newSeed); baseData["sprite"] = GFX.FGAutotiler.GenerateMap(tileMap, default(Autotiler.Behaviour)).TileGrid; Add(baseData.Get <TileGrid>("sprite")); Calc.PopRandom(); Calc.PushRandom(newSeed); TileGrid highlight = GFX.FGAutotiler.GenerateMap(tileMapHighlighted, default(Autotiler.Behaviour)).TileGrid; highlight.Alpha = 0f; baseData["highlight"] = highlight; Add(baseData.Get <TileGrid>("highlight")); Calc.PopRandom(); Add(new TileInterceptor(baseData.Get <TileGrid>("sprite"), false)); highlightCollider = GenerateBetterColliderGrid(tileMapHighlighted, 8, 8); collider = GenerateBetterColliderGrid(tileMap, 8, 8); AddLightOcclude(this, collider); Collider = collider; }
public void DeactivateNoRoutine() { if (playerHasDreamDash) { playerHasDreamDash = false; Setup(); if (occlude == null) { occlude = new LightOcclude(1f); } Add(occlude); whiteHeight = 1f; whiteFill = 0f; if (shaker != null) { shaker.On = false; } SurfaceSoundIndex = 11; } }
public FancyFallingBlock(EntityData data, Vector2 offset) : base(data.Position + offset, '3', data.Width, data.Height, data.Bool("finalBoss", false), data.Bool("behind", false), data.Bool("climbFall", true)) { baseData = new DynData <FallingBlock>(this); Remove(baseData.Get <TileGrid>("tiles")); Remove(Get <TileInterceptor>()); badLightOcclude = Get <LightOcclude>(); int newSeed = Calc.Random.Next(); Calc.PushRandom(newSeed); tileMap = GenerateTileMap(data.Attr("tileData", "")); Autotiler.Generated generated = GFX.FGAutotiler.GenerateMap(tileMap, default(Autotiler.Behaviour)); baseData["tiles"] = generated.TileGrid; Add(baseData.Get <TileGrid>("tiles")); Add(animatedTiles = generated.SpriteOverlay); Calc.PopRandom(); if (data.Bool("finalBoss", false)) { VirtualMap <char> tileMapHighlighted = GenerateTileMap(data.Attr("tileDataHighlight", "")); Calc.PushRandom(newSeed); TileGrid highlight = GFX.FGAutotiler.GenerateMap(tileMapHighlighted, default(Autotiler.Behaviour)).TileGrid; highlight.Alpha = 0f; baseData["highlight"] = highlight; Add(baseData.Get <TileGrid>("highlight")); Calc.PopRandom(); } ColliderList colliders = GenerateBetterColliderGrid(tileMap, 8, 8); AddLightOcclude(this, colliders); Collider = colliders; Add(new TileInterceptor(baseData.Get <TileGrid>("tiles"), false)); }
public override void Added(Scene scene) { base.Added(scene); DynData <CrumblePlatform> self = new DynData <CrumblePlatform>(this); outlineFader = self.Get <Coroutine>("outlineFader"); falls = self.Get <List <Coroutine> >("falls"); fallOrder = self.Get <List <int> >("fallOrder"); shaker = self.Get <ShakerList>("shaker"); occluder = self.Get <LightOcclude>("occluder"); images = self.Get <List <Image> >("images"); foreach (Component component in this) { if (component is Coroutine coroutine && coroutine != outlineFader && !falls.Contains(coroutine)) { // this coroutine is the sequence! hijack it coroutine.RemoveSelf(); Add(new Coroutine(customSequence())); break; } } if (oneUse) { // prevent the outline from appearing. outlineFader.RemoveSelf(); } }
public FancyFloatySpaceBlock(EntityData data, Vector2 offset) : base(data.Position + offset, data.Width, data.Height, data.Char("connectsTo", '3'), data.Bool("disableSpawnOffset", false)) { badLightOcclude = Get <LightOcclude>(); tileMap = GenerateTileMap(data.Attr("tileData", "")); ColliderList colliders = GenerateBetterColliderGrid(tileMap, 8, 8); Collider = colliders; AddLightOcclude(this, colliders); }
public DoorRusty(EntityData data, Vector2 offset) : base(data.Position + offset) { base.Depth = 8499; Add(sprite = FactoryHelperModule.SpriteBank.Create("rusty_metal_door")); openSfx = "event:/game/03_resort/door_metal_open"; closeSfx = "event:/game/03_resort/door_metal_close"; sprite.Play("idle"); base.Collider = new Hitbox(12f, 22f, -6f, -23f); Add(occlude = new LightOcclude(new Rectangle(-1, -24, 2, 24))); Add(new PlayerCollider(HitPlayer)); }
public override void Added(Scene scene) { base.Added(scene); playerHasDreamDash = SceneAs <Level>().Session.Inventory.DreamDash; // Handle moving if (playerHasDreamDash && node != null) { Vector2 start = Position; Vector2 end = node.Value; float num = Vector2.Distance(start, end) / 12f; bool flag2 = fastMoving; if (flag2) { num /= 3f; } Tween tween = Tween.Create(Tween.TweenMode.YoyoLooping, Ease.SineInOut, num, true); tween.OnUpdate = delegate(Tween t) { bool collidable = Collidable; if (collidable) { MoveTo(Vector2.Lerp(start, end, t.Eased)); } else { MoveToNaive(Vector2.Lerp(start, end, t.Eased)); } }; Add(tween); } if (!playerHasDreamDash) { Add(occlude = new LightOcclude(1f)); } Setup(); }
public override void Added(Scene scene) { AreaData areaData = AreaData.Get(scene); string crumbleBlock = areaData.CrumbleBlock; if (overrideTexture != null) { areaData.CrumbleBlock = overrideTexture; } base.Added(scene); MTexture mTexture = GFX.Game["objects/crumbleBlock/outline"]; outline = new List <Image>(); if (base.Width <= 8f) { Image image = new Image(mTexture.GetSubtexture(24, 0, 8, 8)); image.Color = Color.White * 0f; Add(image); outline.Add(image); } else { for (int i = 0; (float)i < base.Width; i += 8) { int num = (i != 0) ? ((i > 0 && (float)i < base.Width - 8f) ? 1 : 2) : 0; Image image2 = new Image(mTexture.GetSubtexture(num * 8, 0, 8, 8)); image2.Position = new Vector2(i, 0f); image2.Color = Color.White * 0f; Add(image2); outline.Add(image2); } } Add(outlineFader = new Coroutine()); outlineFader.RemoveOnComplete = false; images = new List <Image>(); falls = new List <Coroutine>(); fallOrder = new List <int>(); MTexture mTexture2 = GFX.Game["objects/crumbleBlock/" + AreaData.Get(scene).CrumbleBlock]; for (int j = 0; (float)j < base.Width; j += 8) { int num2 = (int)((Math.Abs(base.X) + (float)j) / 8f) % 4; Image image3 = new Image(mTexture2.GetSubtexture(num2 * 8, 0, 8, 8)); image3.Position = new Vector2(4 + j, 4f); image3.CenterOrigin(); Add(image3); images.Add(image3); Coroutine coroutine = new Coroutine(); coroutine.RemoveOnComplete = false; falls.Add(coroutine); Add(coroutine); fallOrder.Add(j / 8); } fallOrder.Shuffle(); Add(new Coroutine(Sequence())); Add(shaker = new ShakerList(images.Count, false, delegate(Vector2[] v) { for (int k = 0; k < images.Count; k++) { images[k].Position = new Vector2(4 + k * 8, 4f) + v[k]; } })); Add(occluder = new LightOcclude(0.2f)); areaData.CrumbleBlock = crumbleBlock; }