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 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; }