public DreamBlockDebris Init(Vector2 pos, DreamBlockDummy block = null) { orig_Init(pos, '1'); Block = block ?? new DreamBlockDummy(this); Image image = baseData.Get <Image>("image"); Remove(image); Sprite sprite = new Sprite(GFX.Game, "objects/CommunalHelper/dreamMoveBlock/"); float speed = Calc.Random.NextFloat(0.3f) + 0.1f; sprite.AddLoop("active", "debris", speed); sprite.AddLoop("disabled", "disabledDebris", speed); sprite.CenterOrigin(); sprite.Color = image.Color; sprite.Rotation = image.Rotation; sprite.Scale = image.Scale; sprite.FlipX = image.FlipX; sprite.FlipY = image.FlipY; Add(sprite); sprite.Play(Block.PlayerHasDreamDash ? "active" : "disabled", randomizeFrame: true); baseData["image"] = this.sprite = sprite; if (Calc.Random.Next(4) == 0) { activePointColor = Calc.Random.Choose(activeParticleColors); disabledPointColor = Color.LightGray * (0.5f + Calc.Random.Choose(0, 1, 1, 2, 2, 2) / 2f * 0.5f); pointOffset = new Vector2(Calc.Random.Next(-2, 2), Calc.Random.Next(-2, 2)); } return(this); }
public TemporaryKey(EntityData data, Vector2 offset, EntityID id) : base(data.Position + offset, id, data.NodesOffset(offset)) { this.follower = Get <Follower>(); // Create sprite DynData <Key> dyndata = new DynData <Key>(this); sprite = dyndata.Get <Sprite>("sprite"); Remove(sprite); sprite = new Sprite(GFX.Game, data.Attr("directory", "collectables/FrostHelper/keytemp") + "/"); sprite.Justify = new Vector2(0.5f, 0.5f); sprite.AddLoop("idle", "idle", 0.1f); sprite.AddLoop("enter", "enter", 0.1f); sprite.Play("idle"); Add(sprite); dyndata.Set("sprite", sprite); Follower follower = this.follower; follower.OnLoseLeader = (Action)Delegate.Combine(follower.OnLoseLeader, new Action(Dissolve)); this.follower.PersistentFollow = false; // was false Add(new TransitionListener { OnOut = delegate(float f) { StartedUsing = false; if (!IsUsed) { Dissolve(); } } }); }
private void SetCrystalHeartSprite(On.Celeste.HeartGem.orig_Awake orig, HeartGem self, Scene scene) { orig(self, scene); if (!self.IsGhost && !self.IsFake) { var meta = GetModeMetaForAltSide(AreaData.Get((scene as Level).Session.Area)); if (meta != null) { var selfdata = new DynData <HeartGem>(self); var sprite = new Sprite(GFX.Game, meta.InWorldHeartIcon); sprite.CenterOrigin(); sprite.AddLoop("idle", "", 0, new int[] { 0 }); sprite.AddLoop("spin", "", 0.1f, new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }); sprite.AddLoop("fastspin", "", 0.1f); sprite.CenterOrigin(); sprite.OnLoop = delegate(string anim) { if (self.Visible && anim == "spin" && (bool)selfdata["autoPulse"]) { Audio.Play("event:/game/general/crystalheart_pulse", self.Position); self.ScaleWiggler.Start(); (scene as Level).Displacement.AddBurst(self.Position, 0.35f, 8f, 48f, 0.25f); } }; sprite.Play("spin"); self.ScaleWiggler.RemoveSelf(); self.ScaleWiggler = Wiggler.Create(0.5f, 4f, delegate(float f) { sprite.Scale = Vector2.One * (1f + f * 0.25f); }); self.Add(self.ScaleWiggler); ((Component)selfdata["sprite"]).RemoveSelf(); selfdata["sprite"] = sprite; self.Add(sprite); } } }
private void SetCrystalHeartSprite(On.Celeste.HeartGem.orig_Awake orig, HeartGem self, Scene scene) { orig(self, scene); if (!self.IsFake) { var data = AreaData.Get((scene as Level).Session.Area); var meta = GetModeMetaForAltSide(data); if (meta != null) { Logger.Log("AltSidesHelper", $"In-world heart customisation: found metadata for \"{data.SID}\"."); if (meta.OverrideHeartTextures) { Logger.Log("AltSidesHelper", $"Replacing crystal heart texture for \"{data.SID}\"."); var selfdata = new DynData <HeartGem>(self); if (!self.IsGhost) { var sprite = new Sprite(GFX.Game, meta.InWorldHeartIcon); sprite.CenterOrigin(); sprite.AddLoop("idle", "", 0, new int[] { 0 }); sprite.AddLoop("spin", "", 0.1f, new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }); sprite.AddLoop("fastspin", "", 0.1f); sprite.CenterOrigin(); sprite.OnLoop = delegate(string anim) { if (self.Visible && anim == "spin" && (bool)selfdata["autoPulse"]) { Audio.Play("event:/game/general/crystalheart_pulse", self.Position); self.ScaleWiggler.Start(); (scene as Level).Displacement.AddBurst(self.Position, 0.35f, 8f, 48f, 0.25f); } }; sprite.Play("spin"); self.ScaleWiggler.RemoveSelf(); self.ScaleWiggler = Wiggler.Create(0.5f, 4f, delegate(float f) { sprite.Scale = Vector2.One * (1f + f * 0.25f); }); self.Add(self.ScaleWiggler); ((Component)selfdata["sprite"]).RemoveSelf(); selfdata["sprite"] = sprite; self.Add(sprite); } var colour = Calc.HexToColor(meta.HeartColour); selfdata["shineParticle"] = new ParticleType(HeartGem.P_BlueShine) { Color = colour }; selfdata.Get <VertexLight>("light").RemoveSelf(); var newLight = new VertexLight(Color.Lerp(colour, Color.White, 0.5f), 1f, 32, 64); self.Add(newLight); selfdata["light"] = newLight; } } } }
private void CreateSecretSprite() { string id = "secret_" + Enum.GetNames(typeof(SpriteStyle))[(int)spriteStyle].ToLower(); Sprite sprite = new Sprite(GFX.Game, "decals/6-reflection/" + id); sprite.AddLoop(id, "", 0.1f); sprite.Play(id); sprite.CenterOrigin(); Vector2 offset = Vector2.UnitY * -8; if (spriteStyle != SpriteStyle.EyeBat) { offset = Vector2.UnitY * -16; } sprite.RenderPosition += offset; sprite.Scale.X *= -(int)facing; if (spriteStyle == SpriteStyle.Towerfall) { sprite.Scale.X = -sprite.Scale.X; } Add(sprite); }
public Lamp(EntityData data, Vector2 offset) : base(data.Position + offset) { flag = data.Attr("flag", ""); id = data.ID; baseColor = ColorHelper.GetColor(data.Attr("baseColor", "White")); lightColor = ColorHelper.GetColor(data.Attr("lightColor", "White")); Add((Component)(startupSprite = new Sprite(GFX.Game, "objects/pandorasBox/lamp/start"))); startupSprite.AddLoop("start", "", 0.1f); startupSprite.JustifyOrigin(0.5f, 0.5f); startupSprite.Play("start"); startupSprite.OnLastFrame = onLastFrame; startupSprite.Stop(); Add((Component)(idleSprite = new Sprite(GFX.Game, "objects/pandorasBox/lamp/idle"))); idleSprite.AddLoop("idle", "", 0.125f); idleSprite.JustifyOrigin(0.5f, 0.5f); idleSprite.Play("idle"); idleSprite.Visible = false; Add((Component)(baseSprite = new Sprite(GFX.Game, "objects/pandorasBox/lamp/base"))); baseSprite.AddLoop("base", "", 0.1f); baseSprite.JustifyOrigin(0.5f, 0.5f); baseSprite.Play("base"); baseSprite.SetColor(baseColor); inStartupAnimation = false; Add((Component)(bloom = new BloomPoint(0.5f, 8f))); Add((Component)(light = new VertexLight(lightColor, 1f, 48, 64))); bloom.Visible = light.Visible = false; Depth = 5; }
public Bubbler(EntityData data, Vector2 offset) : base(data.Position + offset) { visible = data.Bool("visible", false); Collider = new Hitbox(14f, 14f, 0f, 0f); Collider.CenterOrigin(); Add(new PlayerCollider(new Action <Player>(OnPlayer), null, null)); color = ColorHelper.GetColor(data.Attr("color", "White")); nodes = data.NodesOffset(offset); if (visible) { Add(sprite = new Sprite(GFX.Game, "objects/FrostHelper/bubble")); sprite.AddLoop("idle", "", 0.1f); sprite.CenterOrigin(); sprite.Play("idle", false, false); sprite.SetColor(color); Add(previewSprite = new Sprite(GFX.Game, "objects/FrostHelper/bubble")); previewSprite.AddLoop("idle", "", 0.1f); previewSprite.CenterOrigin(); previewSprite.Play("idle", false, false); previewSprite.Position = nodes.Last() - Position; previewSprite.SetColor(new Color(color.R, color.G, color.B, 128f) * 0.3f); } }
public ReskinnableStarRotateSpinner(EntityData data, Vector2 offset) : base(data, offset) { string[] particleColorsAsStrings = data.Attr("particleColors", "EA64B7|3EE852,67DFEA|E85351,EA582C|33BDE8").Split(','); trailParticles = new ParticleType[particleColorsAsStrings.Length]; for (int i = 0; i < particleColorsAsStrings.Length; i++) { string[] colors = particleColorsAsStrings[i].Split('|'); trailParticles[i] = new ParticleType(StarTrackSpinner.P_Trail[0]) { Color = Calc.HexToColor(colors[0]), Color2 = Calc.HexToColor(colors[1]) }; } colorID = Calc.Random.Next(0, particleColorsAsStrings.Length); Add(sprite = new Sprite(GFX.Game, data.Attr("spriteFolder", "danger/MaxHelpingHand/starSpinner") + "/")); for (int i = 0; i < particleColorsAsStrings.Length; i++) { sprite.AddLoop($"idle{i}", $"idle{i}_", 0.08f); sprite.Add($"spin{i}", $"spin{i}_", 0.06f, $"idle{(i + 1) % particleColorsAsStrings.Length}"); } sprite.CenterOrigin(); sprite.Play($"idle{colorID}"); Depth = -50; Add(new MirrorReflection()); }
public override void Awake(Scene scene) { base.Awake(scene); // clean up all visuals for the jumpthru List <Component> componentsToRemove = new List <Component>(); foreach (Component component in this) { if (component is Image) { componentsToRemove.Add(component); } } foreach (Component toRemove in componentsToRemove) { toRemove.RemoveSelf(); } for (int i = 0; i < columns; i++) { Sprite jumpthruSprite = new Sprite(GFX.Game, "objects/jumpthru/" + animationPath); jumpthruSprite.AddLoop("idle", "", animationDelay); jumpthruSprite.X = i * 8; jumpthruSprite.Play("idle"); Add(jumpthruSprite); } }
public KevinRefill(Vector2 position) : base(position) { base.Collider = new Hitbox(16f, 16f, -8f, -8f); base.Add(new PlayerCollider(OnPlayer, null, null)); base.Add(outline = new Image(GFX.Game["objects/refill/outline"])); outline.CenterOrigin(); outline.Visible = false; base.Add(sprite = new Sprite(GFX.Game, "objects/refill/idle")); sprite.AddLoop("idle", "", 0.1f); sprite.Play("idle", false, false); sprite.CenterOrigin(); base.Add(flash = new Sprite(GFX.Game, "objects/refill/flash")); flash.Add("flash", "", 0.05f); flash.OnFinish = delegate { flash.Visible = false; }; flash.CenterOrigin(); base.Add(wiggler = Wiggler.Create(1f, 4f, delegate(float v) { sprite.Scale = (flash.Scale = Vector2.One * (1f + v * 0.2f)); }, false, false)); base.Add(new MirrorReflection()); base.Add(bloom = new BloomPoint(0.8f, 16f)); base.Add(light = new VertexLight(Color.White, 1f, 16, 48)); base.Add(sine = new SineWave(0.6f)); sine.Randomize(); UpdateY(); base.Depth = -100; }
public override void Awake(Scene scene) { base.Awake(scene); if ((ghost && sprite != "ghostberry/seed") || (!ghost && sprite != "strawberry/seed")) { // the sprite is non-default. replace it. Sprite vanillaSprite = selfStrawberrySeed.Get <Sprite>("sprite"); // build the new sprite. MTexture frame0 = GFX.Game["collectables/" + sprite + "00"]; MTexture frame1 = GFX.Game["collectables/" + sprite + "01"]; Sprite modSprite = new Sprite(GFX.Game, sprite); modSprite.CenterOrigin(); modSprite.Justify = new Vector2(0.5f, 0.5f); modSprite.AddLoop("idle", 0.1f, new MTexture[] { frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame0, frame1 }); modSprite.AddLoop("noFlash", 0.1f, new MTexture[] { frame0 }); // copy over the values from the vanilla sprite modSprite.Position = vanillaSprite.Position; modSprite.Color = vanillaSprite.Color; modSprite.OnFrameChange = vanillaSprite.OnFrameChange; modSprite.Play("idle"); modSprite.SetAnimationFrame(vanillaSprite.CurrentAnimationFrame); // and replace it for good Remove(vanillaSprite); Add(modSprite); selfStrawberrySeed["sprite"] = modSprite; } if (spawnedAsFollower) { player.Leader.GainFollower(selfStrawberrySeed.Get <Follower>("follower")); canLoseTimerMirror = 0.25f; Collidable = false; Depth = -1000000; AddTag(Tags.Persistent); } // get a reference to the sprite. this will be used to "cut out" the lighting renderer. spriteObject = selfStrawberrySeed.Get <Sprite>("sprite"); }
protected override bool TryCreateCustomSprite(out Sprite sprite) { sprite = new Sprite(GFX.Game, "objects/CommunalHelper/dreamRefill/idle"); sprite.AddLoop("idle", "", 0.1f); sprite.Play("idle"); sprite.CenterOrigin(); return(true); }
public RespawningJellyfish(EntityData data, Vector2 offset) : base(data, offset) { if (P_NotGlow == null) { // P_NotGlow is a transparent particle. P_NotGlow = new ParticleType(P_Glow) { Color = Color.Transparent, Color2 = Color.Transparent }; } respawnTime = data.Float("respawnTime"); bubble = data.Bool("bubble"); initialPosition = Position; respawning = false; // get the sprite, and replace it depending on the path in entity properties. self = new DynData <Glider>(this); sprite = self.Get <Sprite>("sprite"); new DynData <Sprite>(sprite)["atlas"] = GFX.Game; sprite.Path = data.Attr("spriteDirectory", defaultValue: "objects/MaxHelpingHand/glider") + "/"; sprite.Stop(); sprite.ClearAnimations(); sprite.AddLoop("idle", "idle", 0.1f); sprite.AddLoop("held", "held", 0.1f); sprite.Add("fall", "fall", 0.06f, "fallLoop"); sprite.AddLoop("fallLoop", "fallLoop", 0.06f); sprite.Add("death", "death", 0.06f); sprite.Add("respawn", "respawn", 0.03f, "idle"); sprite.Play("idle"); // make the jelly go invisible when the death animation is done. sprite.OnFinish += anim => { if (anim == "death") { Visible = false; } }; // listen for transitions: if the jelly is carried to another screen, it should not respawn anymore. Add(new TransitionListener() { OnOutBegin = () => shouldRespawn = false }); }
public GenericCustomBooster(EntityData data, Vector2 offset) : base(data.Position + offset) { Depth = -8500; Collider = new Circle(10f, 0f, 2f); sprite = new Sprite(GFX.Game, data.Attr("directory", "objects/FrostHelper/blueBooster/")) { Visible = true }; sprite.CenterOrigin(); sprite.Justify = new Vector2(0.5f, 0.5f); sprite.AddLoop("loop", "booster", 0.1f, 0, 1, 2, 3, 4); sprite.AddLoop("inside", "booster", 0.1f, 5, 6, 7, 8); sprite.AddLoop("spin", "booster", 0.06f, 18, 19, 20, 21, 22, 23, 24, 25); sprite.Add("pop", "booster", 0.08f, 9, 10, 11, 12, 13, 14, 15, 16, 17); sprite.Play("loop", false); Add(sprite); Add(new PlayerCollider(new Action <Player>(OnPlayer), null, null)); Add(light = new VertexLight(Color.White, 1f, 16, 32)); Add(bloom = new BloomPoint(0.1f, 16f)); Add(wiggler = Wiggler.Create(0.5f, 4f, delegate(float f) { sprite.Scale = Vector2.One * (1f + f * 0.25f); }, false, false)); Add(dashRoutine = new Coroutine(false)); Add(dashListener = new DashListener()); dashListener.OnDash = new Action <Vector2>(OnPlayerDashed); Add(new MirrorReflection()); Add(loopingSfx = new SoundSource()); Red = data.Bool("red", false); particleType = Red ? Booster.P_BurstRed : Booster.P_Burst; RespawnTime = data.Float("respawnTime", 1f); BoostTime = data.Float("boostTime", 0.3f); ParticleColor = ColorHelper.GetColor(data.Attr("particleColor", "Yellow")); reappearSfx = data.Attr("reappearSfx", "event:/game/04_cliffside/greenbooster_reappear"); enterSfx = data.Attr("enterSfx", "event:/game/04_cliffside/greenbooster_enter"); boostSfx = data.Attr("boostSfx", "event:/game/04_cliffside/greenbooster_dash"); endSfx = data.Attr("releaseSfx", "event:/game/04_cliffside/greenbooster_end"); }
public ReskinnableCrushBlock(EntityData data, Vector2 offset) : base(data, offset) { DynData <CrushBlock> self = new DynData <CrushBlock>(this); bool giant = self.Get <bool>("giant"); Sprite face = self.Get <Sprite>("face"); // rebuild the face in code with the sprites in our custom directory. face.Reset(GFX.Game, spriteDirectory + "/"); if (giant) { /* * <Loop id="idle" path="giant_block" frames="0" delay="0.08"/> * <Anim id="hurt" path="giant_block" frames="8-12" delay="0.08" goto="idle"/> * <Anim id="hit" path="giant_block" frames="0-5" delay="0.08"/> * <Loop id="right" path="giant_block" frames="6,7" delay="0.08"/> */ face.AddLoop("idle", "giant_block", 0.08f, 0); face.Add("hurt", "giant_block", 0.08f, "idle", 8, 9, 10, 11, 12); face.Add("hit", "giant_block", 0.08f, 0, 1, 2, 3, 4, 5); face.AddLoop("right", "giant_block", 0.08f, 6, 7); } else { /* * <Loop id="idle" path="idle_face" delay="0.08"/> * <Anim id="hurt" path="hurt" frames="3-12" delay="0.08" goto="idle"/> * <Anim id="hit" path="hit" delay="0.08"/> * <Loop id="left" path="hit_left" delay="0.08"/> * <Loop id="right" path="hit_right" delay="0.08"/> * <Loop id="up" path="hit_up" delay="0.08"/> * <Loop id="down" path="hit_down" delay="0.08"/> */ face.AddLoop("idle", "idle_face", 0.08f); face.Add("hurt", "hurt", 0.08f, "idle", 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); face.Add("hit", "hit", 0.08f); face.AddLoop("left", "hit_left", 0.08f); face.AddLoop("right", "hit_right", 0.08f); face.AddLoop("up", "hit_up", 0.08f); face.AddLoop("down", "hit_down", 0.08f); } face.CenterOrigin(); face.Play("idle"); // customize the fill color. self["fill"] = Calc.HexToColor(data.Attr("fillColor", "62222b")); crushParticleColor = new ParticleType(P_Crushing) { Color = Calc.HexToColor(data.Attr("crushParticleColor1", "ff66e2")), Color2 = Calc.HexToColor(data.Attr("crushParticleColor2", "68fcff")) }; activateParticleColor = new ParticleType(P_Activate) { Color = Calc.HexToColor(data.Attr("activateParticleColor1", "5fcde4")), Color2 = Calc.HexToColor(data.Attr("activateParticleColor2", "ffffff")) }; }
public override void Awake(Scene scene) { if (animationDelay > 0f) { for (int i = 0; i < columns; i++) { Sprite jumpthruSprite = new Sprite(GFX.Game, "objects/jumpthru/" + overrideTexture); jumpthruSprite.AddLoop("idle", "", animationDelay); jumpthruSprite.X = i * 8; jumpthruSprite.Y = 8; jumpthruSprite.Scale.Y = -1; jumpthruSprite.Play("idle"); Add(jumpthruSprite); } } else { AreaData areaData = AreaData.Get(scene); string jumpthru = areaData.Jumpthru; if (!string.IsNullOrEmpty(overrideTexture) && !overrideTexture.Equals("default")) { jumpthru = overrideTexture; } MTexture mTexture = GFX.Game["objects/jumpthru/" + jumpthru]; int textureWidthInTiles = mTexture.Width / 8; for (int i = 0; i < columns; i++) { int xTilePosition; int yTilePosition; if (i == 0) { xTilePosition = 0; yTilePosition = ((!CollideCheck <Solid>(Position + new Vector2(-1f, 0f))) ? 1 : 0); } else if (i == columns - 1) { xTilePosition = textureWidthInTiles - 1; yTilePosition = ((!CollideCheck <Solid>(Position + new Vector2(1f, 0f))) ? 1 : 0); } else { xTilePosition = 1 + Calc.Random.Next(textureWidthInTiles - 2); yTilePosition = Calc.Random.Choose(0, 1); } Image image = new Image(mTexture.GetSubtexture(xTilePosition * 8, yTilePosition * 8, 8, 8)); image.X = i * 8; image.Y = 8; image.Scale.Y = -1; Add(image); } } }
public DeathMark(Vector2 position) : base(position) { Sprite sprite = new Sprite(GFX.Game, $"objects/speedrun_tool_deathmark/{Id}"); sprite.AddLoop(Id, "", 1f); sprite.Play(Id); sprite.CenterOrigin(); sprite.RenderPosition -= Vector2.UnitY * 8; sprite.Color = Color.White * 0.5f; Add(sprite); Depth = Depths.FormationSequences; }
public LaserWallSensor(EntityData data, Vector2 offset) : base(data.Position + offset) { Add((Component)(sprite = new Sprite(GFX.Game, "objects/pandorasBox/laser/sensor/sensor"))); sprite.AddLoop("sensor", "", 0.125f); sprite.CenterOrigin(); sprite.Play("sensor"); flag = data.Attr("flag", ""); direction = data.Attr("direction", "Left"); id = data.ID; Collider = new Hitbox(16f, 16f, -8f, -8f); base.LaserDetectionCollider = new Hitbox(16f, 16f, -8f, -8f); }
public LaserEmitter(EntityData data, Vector2 offset) : base(data.Position + offset) { Add((Component)(startupSprite = new Sprite(GFX.Game, "objects/pandorasBox/laser/emitter/start"))); startupSprite.AddLoop("start", "", 0.1f); startupSprite.JustifyOrigin(0.5f, 1f); startupSprite.Play("start"); startupSprite.OnLastFrame = onLastFrame; startupSprite.Stop(); Add((Component)(idleSprite = new Sprite(GFX.Game, "objects/pandorasBox/laser/emitter/idle"))); idleSprite.AddLoop("idle", "", 0.125f); idleSprite.JustifyOrigin(0.5f, 1f); idleSprite.Play("idle"); idleSprite.Visible = false; flag = data.Attr("flag", ""); direction = data.Attr("direction", ""); beamDuration = data.Int("beamDuration", -1); inverted = Boolean.Parse(data.Attr("inverted", "false")); id = data.ID; color = ColorHelper.GetColor(data.Attr("color", "White")); inStartupAnimation = false; Collider = new Hitbox(16f, 32f, -8f, -32f); Depth = 50; Add((Component)(bloom = new BloomPoint(new Vector2(0, -24), 0.3f, 4f))); Add((Component)(light = new VertexLight(new Vector2(0, -24), Color.White, 1f, 48, 64))); Add(new StaticMover { SolidChecker = new Func <Solid, bool>(IsRiding), JumpThruChecker = new Func <JumpThru, bool>(IsRiding), OnMove = delegate(Vector2 v) { if (laserbeam != null) { laserbeam.Position += v; } }, OnDestroy = delegate() { RemoveSelf(); } }); }
public Lever(EntityData data, Vector2 offset) : base(data.Position + offset) { Add((Component)(sprite = new Sprite(GFX.Game, "objects/pandorasBox/lever/lever"))); sprite.AddLoop("lever", "", 0.125f); sprite.JustifyOrigin(0.5f, 1f); sprite.Play("lever"); sprite.OnLastFrame = onLastFrame; sprite.Stop(); active = data.Bool("active", false); flag = data.Attr("flag", ""); id = data.ID; Collider = new Hitbox(sprite.Width, sprite.Height, -sprite.Width / 2, -sprite.Height); Add(talker = new TalkComponent(new Rectangle((int)(-sprite.Width / 2 - 2), -4, (int)(sprite.Width + 4), 4), new Vector2(0.0f, -18f), onTalk)); talker.Enabled = true; }
public ResetStateCrystal(EntityData data, Vector2 offset) : base(data, offset) { baseData = new DynData <Refill>(this); Remove(baseData.Get <Sprite>("sprite")); Sprite sprite = new Sprite(GFX.Game, "objects/CommunalHelper/resetStateCrystal/"); sprite.AddLoop("idle", "ghostIdle", 0.1f); sprite.Play("idle"); sprite.CenterOrigin(); sprite.Color = Calc.HexToColor("676767"); Add(sprite); baseData["sprite"] = sprite; Remove(Get <PlayerCollider>()); Add(new PlayerCollider(OnCollide)); }
public LaserMirror(EntityData data, Vector2 offset) : base(data.Position + offset) { opening = data.Attr("opening", "LeftUp"); Tuple <int, int> scales = openingScales[opening]; int scaleX = scales.Item1; int scaleY = scales.Item2; Add((Component)(sprite = new Sprite(GFX.Game, "objects/pandorasBox/laser/mirror/mirror_static"))); sprite.AddLoop("mirror_static", "", 0.125f); sprite.CenterOrigin(); sprite.Scale = new Vector2(scaleX, scaleY); sprite.Play("mirror_static"); reflections = new Dictionary <Laserbeam, Laserbeam>(); Collider = openingBlockingColliders[opening]; LaserBlockingCollider = openingBlockingColliders[opening]; LaserDetectionCollider = new Hitbox(2f, 2f, -1f, -1f); Depth = 50; Add(new StaticMover { SolidChecker = new Func <Solid, bool>(IsRiding), JumpThruChecker = new Func <JumpThru, bool>(IsRiding), OnMove = delegate(Vector2 v) { foreach (var pair in reflections) { pair.Value.Position += v; } }, OnDestroy = delegate() { foreach (var pair in reflections) { pair.Value.RemoveSelf(); } } }); DetectionDelay = 1; }
public LaserNoteblock(EntityData data, Vector2 offset) : base(data.Position + offset) { pitch = data.Int("pitch", 69); direction = data.Attr("direction", "Horizontal"); sound = data.Attr("sound", "game_03_deskbell_again"); volume = data.Float("volume", 1f); atPlayer = data.Bool("atPlayer", false); Add((Component)(sprite = new Sprite(GFX.Game, textureLookup[direction]))); sprite.AddLoop(loopName[direction], "", 0.125f); sprite.CenterOrigin(); sprite.Play(loopName[direction]); Collider = directionBlockingColliders[direction]; LaserBlockingCollider = directionBlockingColliders[direction]; LaserDetectionCollider = new Hitbox(8f, 8f, -4f, -4f); Depth = 50; }
public AirBubbles(EntityData data, Vector2 offset) : base(data.Position + offset) { oneUse = data.Bool("oneUse"); Collider = new Hitbox(16f, 16f, -8f, -8f); Add(new PlayerCollider(OnPlayer)); Add(outline = new Image(GFX.Game["objects/pandorasBox/airBubbles/outline"])); outline.CenterOrigin(); outline.Visible = false; Add(sprite = new Sprite(GFX.Game, "objects/pandorasBox/airBubbles/idle")); sprite.AddLoop("idle", "", 0.1f); sprite.Play("idle"); sprite.CenterOrigin(); Add(flash = new Sprite(GFX.Game, "objects/pandorasBox/airBubbles/flash")); flash.Add("flash", "", 0.05f); flash.OnFinish = delegate { flash.Visible = false; }; flash.CenterOrigin(); Add(wiggler = Wiggler.Create(1f, 4f, delegate(float v) { sprite.Scale = (flash.Scale = Vector2.One * (1f + v * 0.2f)); })); Add(new MirrorReflection()); Add(bloom = new BloomPoint(0.8f, 16f)); Add(light = new VertexLight(Color.White, 1f, 16, 48)); Add(sine = new SineWave(0.6f, 0f)); sine.Randomize(); UpdateY(); base.Depth = -100; }
public ColorfulRefill(Vector2 position, bool twoDashes, bool oneUse, RefillColor color) : base(position, twoDashes, oneUse) { this.color = color; var str = "objects/DJMapHelper/"; switch (color) { case RefillColor.Red: str += "redRefill/"; break; case RefillColor.Blue: str += "blueRefill/"; break; case RefillColor.Black: str += "blackRefill/"; break; default: throw new ArgumentOutOfRangeException(nameof(color), color, null); } Sprite sprite = new Sprite(GFX.Game, str + "idle"); sprite.AddLoop("idle", "", 0.1f); sprite.Play("idle"); sprite.CenterOrigin(); Sprite flash = new Sprite(GFX.Game, str + "flash"); flash.Add(nameof(flash), "", 0.05f); flash.OnFinish = anim => flash.Visible = false; flash.CenterOrigin(); SpriteFieldInfo?.SetValue(this, sprite); FlashFieldInfo?.SetValue(this, flash); Remove(Get <Sprite>()); Remove(Get <Sprite>()); Add(sprite); Add(flash); }
public override void Added(Scene scene) { base.Added(scene); Level level = (Level)scene; level.Add(text = new CustomMemorialText(this, level.Session.Dreaming, textText, textSpacing)); if (level.Session.Dreaming) { Add(dreamyText = new Sprite(GFX.Game, "scenery/memorial/floatytext")); dreamyText.AddLoop("dreamy", "", 0.1f); dreamyText.Play("dreamy", false, false); dreamyText.Position = new Vector2(-dreamyText.Width / 2f, -33f); } if (level.Session.Area.ID == 1 && level.Session.Area.Mode == AreaMode.Normal) { Audio.SetMusicParam("end", 1f); } }
public PandorasBox(EntityData data, Vector2 offset) : base(data.Position + offset) { Add(talker = new TalkComponent(new Rectangle(-8, -8, 16, 16), new Vector2(0.0f, -24f), onTalk)); talker.Enabled = true; canTalk = true; Add((Component)(boxOpen = new Sprite(GFX.Game, "objects/pandorasBox/pandorasBox/box_open"))); boxOpen.AddLoop("box_open", "", 0.25f); boxOpen.JustifyOrigin(0.5f, 1f); boxOpen.Visible = false; boxOpen.Stop(); Add((Component)(boxIdle = new Sprite(GFX.Game, "objects/pandorasBox/pandorasBox/box_idle"))); boxIdle.AddLoop("box_idle", "", 0.1f); boxIdle.Play("box_idle"); boxIdle.JustifyOrigin(0.5f, 1f); completeChapter = Boolean.Parse(data.Attr("completeChapter", "false")); dialogId = data.Attr("dialog", ""); Depth = 5; }
public PowerRefill(Vector2 position, bool oneUse) : base(position) { base.Collider = new Hitbox(16f, 16f, -8f, -8f); Add(new BatteryCollider(OnBattery)); this.oneUse = oneUse; string str; str = "batteries/power_refill/"; p_shatter = P_Shatter; p_regen = P_Regen; p_glow = P_Glow; Add(outline = new Image(GFX.Game[str + "outline"])); outline.CenterOrigin(); outline.Visible = false; Add(sprite = new Sprite(GFX.Game, str + "idle")); sprite.AddLoop("idle", "", 0.1f); sprite.Play("idle"); sprite.CenterOrigin(); Add(flash = new Sprite(GFX.Game, str + "flash")); flash.Add("flash", "", 0.05f); flash.OnFinish = delegate { flash.Visible = false; }; flash.CenterOrigin(); Add(wiggler = Wiggler.Create(1f, 4f, delegate(float v) { sprite.Scale = (flash.Scale = Vector2.One * (1f + v * 0.2f)); })); Add(new MirrorReflection()); Add(bloom = new BloomPoint(0.8f, 16f)); Add(light = new VertexLight(Color.White, 1f, 16, 48)); Add(sine = new SineWave(0.6f, 0f)); sine.Randomize(); UpdateY(); base.Depth = -100; }
public Gate(EntityData data, Vector2 offset) : base(data.Position + offset, 8f, 48f, true) { inverted = Boolean.Parse(data.Attr("inverted", "false")); textureFolder = data.Attr("texture", "objects/pandorasBox/gate/"); flag = data.Attr("flag", ""); id = data.ID; lockState = false; Add((Component)(sprite = new Sprite(GFX.Game, textureFolder + "gate"))); sprite.AddLoop("gate", "", 0.06f); sprite.Play("gate"); sprite.OnLastFrame = onLastFrame; sprite.Rate = 0; sprite.X = -base.Collider.Width / 2f; Add(shaker = new Shaker(on: false)); Depth = -9000; drawingHeight = sprite.Height; }
public ReskinnableSwapBlock(EntityData data, Vector2 offset) : base(data, offset) { DynData <SwapBlock> self = new DynData <SwapBlock>(this); // replace the sprites for the middle of the blocks. Sprite middleGreen = self.Get <Sprite>("middleGreen"); middleGreen.Reset(GFX.Game, spriteDirectory + "/"); middleGreen.AddLoop("idle", "midBlock", 0.08f); middleGreen.Play("idle"); Sprite middleRed = self.Get <Sprite>("middleRed"); middleRed.Reset(GFX.Game, spriteDirectory + "/"); middleRed.AddLoop("idle", "midBlockRed", 0.08f); middleRed.Play("idle"); customParticleColor = new ParticleType(P_Move) { Color = Calc.HexToColor(data.Attr("particleColor1", "fbf236")), Color2 = Calc.HexToColor(data.Attr("particleColor2", "6abe30")) }; }