Example #1
0
        public CustomSpring(EntityData data, Vector2 offset, Orientations orientation) : base(data.Position + offset, orientation, data.Bool("playerCanUse", true))
        {
            bool playerCanUse = data.Bool("playerCanUse", true);

            dir = data.Attr("directory", "objects/spring/");

            speedMult = FrostModule.StringToVec2(data.Attr("speedMult", "1"));
            Vector2 position = data.Position + offset;

            DisabledColor     = Color.White;
            Orientation       = orientation;
            this.playerCanUse = playerCanUse;
            Remove(Get <PlayerCollider>());
            Add(new PlayerCollider(new Action <Player>(OnCollide), null, null));
            Remove(Get <HoldableCollider>());
            Add(new HoldableCollider(new Action <Holdable>(OnHoldable), null));
            Remove(Get <PufferCollider>());
            PufferCollider pufferCollider = new PufferCollider(new Action <Puffer>(OnPuffer), null);

            Add(pufferCollider);
            DynData <Spring> dyndata = new DynData <Spring>(this);
            Sprite           spr     = dyndata.Get <Sprite>("sprite");

            Remove(spr);
            Sprite sprite;

            Add(sprite = new Sprite(GFX.Game, dir));
            sprite.Add("idle", "", 0f, new int[1]);
            sprite.Add("bounce", "", 0.07f, "idle", new int[]
            {
                0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5
            });
            sprite.Add("disabled", "white", 0.07f);
            sprite.Play("idle", false, false);
            sprite.Origin.X = sprite.Width / 2f;
            sprite.Origin.Y = sprite.Height;
            Depth           = -8501;

            Add(Wiggler.Create(1f, 4f, delegate(float v)
            {
                sprite.Scale.Y = 1f + v * 0.2f;
            }, false, false));

            switch (orientation)
            {
            case Orientations.Floor:
                Collider = new Hitbox(16f, 6f, -8f, -6f);
                pufferCollider.Collider = new Hitbox(16f, 10f, -8f, -10f);
                break;

            case Orientations.WallLeft:
                Collider = new Hitbox(6f, 16f, 0f, -8f);
                pufferCollider.Collider = new Hitbox(12f, 16f, 0f, -8f);
                sprite.Rotation         = 1.57079637f;
                break;

            case Orientations.WallRight:
                Collider = new Hitbox(6f, 16f, -6f, -8f);
                pufferCollider.Collider = new Hitbox(12f, 16f, -12f, -8f);
                sprite.Rotation         = -1.57079637f;
                break;

            default:
                throw new Exception("Orientation not supported!");
            }

            dyndata.Set <Sprite>("sprite", sprite);
            OneUse = data.Bool("oneUse", false);
            if (OneUse)
            {
                Add(new Coroutine(OneUseParticleRoutine()));
            }
        }
        public TrollSpring(Vector2 position, Orientations orientation, bool playerCanUse) : base(position)
        {
            Orientation       = orientation;
            this.playerCanUse = playerCanUse;
            Add(new PlayerCollider(OnCollide));
            Add(new HoldableCollider(OnHoldable));
            PufferCollider pufferCollider = new PufferCollider(OnPuffer);

            Add(pufferCollider);
            Add(sprite = new Sprite(GFX.Game, "objects/TrollLand/trollSpring/"));
            sprite.Add("idle", "", 0f, default(int));
            sprite.Add("bounce", "", 0.07f, "idle", 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5);
            sprite.Add("disabled", "white", 0.07f);
            sprite.Play("idle");
            sprite.Origin.X      = sprite.Width / 2f;
            sprite.Origin.Y      = sprite.Height;
            base.Depth           = -8501;
            staticMover          = new StaticMover();
            staticMover.OnAttach = delegate(Platform p)
            {
                base.Depth = p.Depth + 1;
            };
            switch (orientation)
            {
            case Orientations.FloorLeft:
            case Orientations.FloorRight:
                staticMover.SolidChecker    = ((Solid s) => CollideCheck(s, Position + Vector2.UnitY));
                staticMover.JumpThruChecker = ((JumpThru jt) => CollideCheck(jt, Position + Vector2.UnitY));
                break;

            case Orientations.WallLeftUp:
            case Orientations.WallLeftDown:
                staticMover.SolidChecker    = ((Solid s) => CollideCheck(s, Position - Vector2.UnitX));
                staticMover.JumpThruChecker = ((JumpThru jt) => CollideCheck(jt, Position - Vector2.UnitX));
                break;

            case Orientations.WallRightUp:
            case Orientations.WallRightDown:
                staticMover.SolidChecker    = ((Solid s) => CollideCheck(s, Position + Vector2.UnitX));
                staticMover.JumpThruChecker = ((JumpThru jt) => CollideCheck(jt, Position + Vector2.UnitX));
                break;
            }
            Add(staticMover);
            Add(wiggler = Wiggler.Create(1f, 4f, delegate(float v)
            {
                sprite.Scale.Y = 1f + v * 0.2f;
            }));
            switch (orientation)
            {
            case Orientations.FloorLeft:
            case Orientations.FloorRight:
                base.Collider           = new Hitbox(16f, 6f, -8f, -6f);
                pufferCollider.Collider = new Hitbox(16f, 10f, -8f, -10f);
                break;

            case Orientations.WallLeftUp:
            case Orientations.WallLeftDown:
                base.Collider           = new Hitbox(6f, 16f, 0f, -8f);
                pufferCollider.Collider = new Hitbox(12f, 16f, 0f, -8f);
                sprite.Rotation         = (float)Math.PI / 2f;
                break;

            case Orientations.WallRightUp:
            case Orientations.WallRightDown:
                base.Collider           = new Hitbox(6f, 16f, -6f, -8f);
                pufferCollider.Collider = new Hitbox(12f, 16f, -12f, -8f);
                sprite.Rotation         = -(float)Math.PI / 2f;
                break;

            default:
                throw new Exception("Orientation not supported!");
            }
            switch (orientation)
            {
            case Orientations.FloorRight:
            case Orientations.WallLeftDown:
            case Orientations.WallRightUp:
                sprite.Scale.X = -1;
                break;
            }
            staticMover.OnEnable  = OnEnable;
            staticMover.OnDisable = OnDisable;
        }