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();
            }
        }
Пример #2
0
        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;
        }