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