public override void Added(Scene scene) { base.Added(scene); IsGhost = AltSidesHelperModule.AltSidesSaveData.UnlockedAltSideIDs.Contains(altSideToUnlock); string path = IsGhost ? "ghost" : "idle"; sprite = new Sprite(GFX.Game, spritePath); sprite.Add("idle", path, 0.07f, "pulse", new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); sprite.Add("spin", path, 0.07f, "spin", new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); sprite.Add("pulse", path, 0.04f, "idle", new int[] { 13, 14, 15, 16, 17, 18 }); sprite.CenterOrigin(); Add(sprite); sprite.Play("idle"); Add(scaleWiggler = Wiggler.Create(0.25f, 4f, delegate(float f) { sprite.Scale = Vector2.One * (1f + f * 0.25f); })); Add(bloom = new BloomPoint(0.25f, 16f)); Add(light = new VertexLight(Color.White, 0.4f, 32, 64)); Add(hover = new SineWave(0.5f, 0f)); hover.OnUpdate = delegate(float f) { Sprite obj = sprite; VertexLight vertexLight = light; float num2 = bloom.Y = f * 2f; float num5 = obj.Y = (vertexLight.Y = num2); }; if (IsGhost) { sprite.Color = Color.White * 0.8f; } }
public BoomBox(Vector2 position, string activationId, float initialDelay, bool startActive) : base(position, 24, 24, false) { Add(Activator = new FactoryActivator()); Activator.StartOn = startActive; Activator.ActivationId = activationId == string.Empty ? null : activationId; Activator.OnStartOn = OnStartOn; Activator.OnStartOff = OnStartOff; Activator.OnTurnOn = OnTurnOn; Activator.OnTurnOff = OnTurnOff; Add(new SteamCollider(OnSteamWall)); _initialDelay = initialDelay; Add(_sprite = new Sprite(GFX.Game, "objects/FactoryHelper/boomBox/")); _sprite.Add("idle", "idle", 0.2f, "idle"); _sprite.Add("activating", "activating", 0.2f, "activating"); _sprite.Add("active", "active", 0.15f, "active"); _sprite.Add("angry", "angry", 0.05f, "angry"); _sprite.Add("resetting", "resetting", 0.15f, "active"); Add(_boomSprite = new Sprite(GFX.Game, "objects/FactoryHelper/boomBox/")); _boomSprite.Add("boom", "boom", 0.04f); _boomSprite.Color = Color.White * 0.5f; _boomSprite.Visible = false; _boomSprite.CenterOrigin(); _boomSprite.Position = new Vector2(Width / 2, Height / 2); _boomCollider = new BoomCollider(position + new Vector2(Width / 2, Height / 2)); Add(_sfx = new SoundSource()); _sfx.Position = new Vector2(Width / 2, Height / 2); Add(new LightOcclude(0.2f)); }
public NoDashRefillSpring(EntityData data, Vector2 offset) : base(data.Position + offset, GetOrientationFromName(data.Name), data.Bool("playerCanUse", true)) { DynData <Spring> selfSpring = new DynData <Spring>(this); // remove the vanilla player collider. this is the one thing we want to mod here. foreach (Component component in this) { if (component.GetType() == typeof(PlayerCollider)) { Remove(component); break; } } // replace it with our own collider. if (data.Bool("playerCanUse", true)) { Add(new PlayerCollider(OnCollide)); } // replace the vanilla sprite with our custom one. Sprite sprite = selfSpring.Get <Sprite>("sprite"); sprite.Reset(GFX.Game, "objects/SpringCollab2020/noDashRefillSpring/"); 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; }
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 static void Attach(Main main, Entity entity, UIRenderer ui, Property <float> health, Property <float> rotation, Property <bool> noteActive, Property <bool> phoneActive) { Sprite damageOverlay = new Sprite(); damageOverlay.Image.Value = "Images\\damage"; damageOverlay.AnchorPoint.Value = new Vector2(0.5f); ui.Root.Children.Add(damageOverlay); // Center the damage overlay and scale it to fit the screen damageOverlay.Add(new Binding <Vector2, Point>(damageOverlay.Position, x => new Vector2(x.X * 0.5f, x.Y * 0.5f), main.ScreenSize)); damageOverlay.Add(new Binding <Vector2>(damageOverlay.Scale, () => new Vector2(main.ScreenSize.Value.X / damageOverlay.Size.Value.X, main.ScreenSize.Value.Y / damageOverlay.Size.Value.Y), main.ScreenSize, damageOverlay.Size)); damageOverlay.Add(new Binding <float, float>(damageOverlay.Opacity, x => 1.0f - x, health)); #if VR if (main.VR) { VirtualReticle reticleController = entity.GetOrCreate <VirtualReticle>(); reticleController.Add(new Binding <float>(reticleController.Rotation, rotation)); ModelNonPostProcessed reticle = entity.Create <ModelNonPostProcessed>(); reticle.Filename.Value = "Models\\plane"; reticle.EffectFile.Value = "Effects\\VirtualUI"; reticle.DiffuseTexture.Value = "Images\\reticle"; reticle.Add(new Binding <Matrix>(reticle.Transform, reticleController.Transform)); reticle.Add(new Binding <bool>(reticle.Enabled, () => !main.Paused && !phoneActive && !noteActive, main.Paused, phoneActive, noteActive)); } else #endif { Sprite reticle = new Sprite(); reticle.Image.Value = "Images\\reticle"; reticle.AnchorPoint.Value = new Vector2(0.5f); reticle.Opacity.Value = 0.5f; ui.Root.Children.Add(reticle); reticle.Add(new Binding <bool>(reticle.Visible, main.Settings.EnableReticle)); // Center the reticle reticle.Add(new Binding <Vector2, Point>(reticle.Position, x => new Vector2(x.X * 0.5f, x.Y * 0.5f), main.ScreenSize)); } UIComponent targets = new UIComponent(); ui.Root.Children.Add(targets); TargetUI targetUi = entity.GetOrCreate <TargetUI>(); targetUi.Add(new ListBinding <UIComponent>(targetUi.Sprites, targets.Children)); targets.Add(new ListBinding <UIComponent, Transform>(targets.Children, TargetFactory.Positions, delegate(Transform target) { Sprite sprite = new Sprite(); sprite.Image.Value = "Images\\target"; sprite.AnchorPoint.Value = new Vector2(0.5f, 0.5f); sprite.UserData.Value = target; sprite.Add(new Binding <bool>(sprite.Visible, target.Enabled)); return(sprite); })); }
public static Entity Load(Level level, LevelData levelData, Vector2 offset, EntityData entityData) { string flag = entityData.Attr("flag"); if (level.Session.GetFlag(flag) || level.Session.GetFlag(flag + "_switch" + entityData.ID)) { // moving touch switches can't be persistent, but we can very much spawn a flag touch switch instead! Vector2[] nodes = entityData.Nodes; Vector2 origPosition = entityData.Position; entityData.Position = nodes[nodes.Length - 1]; FlagTouchSwitch flagTouchSwitch = new FlagTouchSwitch(entityData, offset); entityData.Position = origPosition; return(flagTouchSwitch); } else { // build the moving touch switch TouchSwitch movingTouchSwitch = (TouchSwitch)Activator.CreateInstance(movingTouchSwitchType, new object[] { entityData.NodesOffset(offset), entityData, offset }); // save its attributes as DynData DynData <TouchSwitch> switchData = new DynData <TouchSwitch>(movingTouchSwitch); switchData["flag"] = entityData.Attr("flag"); switchData["id"] = entityData.ID; switchData["persistent"] = entityData.Bool("persistent", false); switchData["movingColor"] = Calc.HexToColor(entityData.Attr("movingColor", "FF8080")); // these attributes actually exist in TouchSwitch and as such, they work! switchData["inactiveColor"] = Calc.HexToColor(entityData.Attr("inactiveColor", "5FCDE4")); switchData["activeColor"] = Calc.HexToColor(entityData.Attr("activeColor", "FFFFFF")); switchData["finishColor"] = Calc.HexToColor(entityData.Attr("finishColor", "F141DF")); switchData["P_RecoloredFire"] = new ParticleType(TouchSwitch.P_Fire) { Color = switchData.Get <Color>("finishColor") }; // set up the icon string iconAttribute = entityData.Attr("icon", "vanilla"); Sprite icon = new Sprite(GFX.Game, iconAttribute == "vanilla" ? "objects/touchswitch/icon" : $"objects/MaxHelpingHand/flagTouchSwitch/{iconAttribute}/icon"); icon.Add("idle", "", 0f, default(int)); icon.Add("spin", "", 0.1f, new Chooser <string>("spin", 1f), 0, 1, 2, 3, 4, 5); icon.Play("spin"); icon.Color = switchData.Get <Color>("inactiveColor"); icon.CenterOrigin(); movingTouchSwitch.Remove(movingTouchSwitch.Get <Sprite>()); movingTouchSwitch.Add(icon); movingTouchSwitchIcon.SetValue(movingTouchSwitch, icon); switchData["icon"] = icon; // collect the list of flag touch switches in the room as soon as the entity is awake, like regular flag touch switches. movingTouchSwitch.Add(new TouchSwitchListAttacher(entityData.Attr("flag"))); return(movingTouchSwitch); } }
public MultiplayerControlSwitch(Vector2 position) : base(position) { base.Depth = 2000; base.Add(ControlSwitch = new ControlSwitch(false, 0)); base.Add(new PlayerCollider(OnPlayer, null, new Hitbox(30f, 30f, -15f, -15f))); base.Add(icon); base.Add(bloom = new BloomPoint(0f, 16f)); bloom.Alpha = 0f; icon.Add("idle", "", 0f, default(int)); icon.Add("spin", "", 0.1f, new Chooser <string>("spin", 1f), 0, 1, 2, 3, 4, 5); icon.Play("spin", false, false); icon.Color = inactiveColor; icon.CenterOrigin(); base.Collider = new Hitbox(16f, 16f, -8f, -8f); base.Add(new TheoCrystalCollider(OnTheoCrystal, new Hitbox(20f, 20f, -10f, -10f))); base.Add(new SeekerCollider(OnSeeker, new Hitbox(24f, 24f, -12f, -12f))); ControlSwitch.OnActivate = delegate { wiggler.Start(); for (int i = 0; i < 32; i++) { float num = Calc.Random.NextFloat(6.28318548f); //level.Particles.Emit(P_FireWhite, base.Position + Calc.AngleToVector(num, 6f), num); } icon.Rate = 4f; }; ControlSwitch.OnDeactivate = delegate { wiggler.StopAndClear(); icon.Rate = 0.1f; icon.Play("spin", false, false); }; ControlSwitch.OnFinish = delegate { ease = 0f; }; ControlSwitch.OnStartFinished = delegate { icon.Rate = 0.1f; icon.Play("spin", false, false); ease = 1f; }; base.Add(wiggler = Wiggler.Create(0.5f, 4f, delegate(float v) { pulse = Vector2.One * (1f + v * 0.25f); }, false, false)); base.Add(new VertexLight(Color.White, 0.8f, 16, 32)); base.Add(touchSfx = new SoundSource()); }
public BadelineChaserBlock(EntityData data, Vector2 offset) : base(data.Position + offset, data.Width, data.Height, false) { Reversed = data.Bool("reversed", false); Collider = new Hitbox(data.Width, data.Height); Emblem = new Sprite(GFX.Game, "objects/FrostHelper/badelineChaserBlock/emblem"); Emblem.Add("solid", !Reversed ? "solidreverse" : "solid"); Emblem.Add("pressed", !Reversed ? "pressedreverse" : "pressed"); Emblem.CenterOrigin(); Emblem.Play(Reversed ? "pressed" : "solid"); AllowStaticMovers = true; }
public FlagTouchSwitch(EntityData data, Vector2 offset) : base(data.Position + offset) { Depth = 2000; id = data.ID; flag = data.Attr("flag"); persistent = data.Bool("persistent", false); inactiveColor = Calc.HexToColor(data.Attr("inactiveColor", "5FCDE4")); activeColor = Calc.HexToColor(data.Attr("activeColor", "FFFFFF")); finishColor = Calc.HexToColor(data.Attr("finishColor", "F141DF")); hitSound = data.Attr("hitSound", "event:/game/general/touchswitch_any"); completeSoundFromSwitch = data.Attr("completeSoundFromSwitch", "event:/game/general/touchswitch_last_cutoff"); completeSoundFromScene = data.Attr("completeSoundFromScene", "event:/game/general/touchswitch_last_oneshot"); inverted = data.Bool("inverted", false); allowDisable = data.Bool("allowDisable", false); smoke = data.Bool("smoke", true); P_RecoloredFire = new ParticleType(TouchSwitch.P_Fire) { Color = finishColor }; // set up collision Collider = new Hitbox(16f, 16f, -8f, -8f); Add(new PlayerCollider(onPlayer, null, new Hitbox(30f, 30f, -15f, -15f))); Add(new HoldableCollider(onHoldable, new Hitbox(20f, 20f, -10f, -10f))); Add(new SeekerCollider(onSeeker, new Hitbox(24f, 24f, -12f, -12f))); // set up the icon string iconAttribute = data.Attr("icon", "vanilla"); icon = new Sprite(GFX.Game, iconAttribute == "vanilla" ? "objects/touchswitch/icon" : $"objects/MaxHelpingHand/flagTouchSwitch/{iconAttribute}/icon"); Add(icon); icon.Add("idle", "", 0f, default(int)); icon.Add("spin", "", 0.1f, new Chooser <string>("spin", 1f), 0, 1, 2, 3, 4, 5); icon.Play("spin"); icon.Color = inactiveColor; icon.CenterOrigin(); Add(bloom = new BloomPoint(0f, 16f)); bloom.Alpha = 0f; Add(wiggler = Wiggler.Create(0.5f, 4f, v => { pulse = Vector2.One * (1f + v * 0.25f); })); Add(new VertexLight(Color.White, 0.8f, 16, 32)); Add(touchSfx = new SoundSource()); }
public DashFuseBox(EntityData data, Vector2 offset) : base(data.Position + offset, 4f, 16f, false) { string[] activationIds = data.Attr("activationIds", "").Split(','); _startCutscene = data.Bool("startCutscene", false); _persistent = data.Bool("persistent", false); _id = new EntityID(data.Level.Name, data.ID); _direction = Direction.Right; Enum.TryParse(data.Attr("direction", "Right"), out _direction); Depth = -20; Add(_mainSprite = new Sprite(GFX.Game, "objects/FactoryHelper/dashFuseBox/")); _mainSprite.Add("idle", "idle", 0.1f, "idleBackwards"); _mainSprite.Add("chaos", "chaos", 0.08f, "chaos"); _mainSprite.Add("idleBackwards", "idle", 0.1f, "idle", 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); _mainSprite.Play("idle", false, false); _door = new Entity(Position) { Depth = 8490 }; _door.Add(_doorSprite = new Sprite(GFX.Game, "objects/FactoryHelper/dashFuseBox/")); _doorSprite.Add("busted", "busted", 0.05f); _doorSprite.Play("busted", false, false); _doorSprite.Active = false; _doorSprite.Visible = false; if (_direction == Direction.Left) { _mainSprite.Scale *= new Vector2(-1f, 1f); //_mainSprite.Position.X += 4; _doorSprite.Scale *= new Vector2(-1f, 1f); _doorSprite.Position.X += 4; Collider.Position.X -= 4; _pressDirection = Vector2.UnitX; _sparks.Direction = (float)Math.PI; } else { _pressDirection = -Vector2.UnitX; } foreach (string activationId in activationIds) { if (activationId != "") { _activationIds.Add(activationId); } } OnDashCollide = OnDashed; }
public TimedSwitchGate(Vector2 position, float width, float height, Vector2 node, bool persistent, string spriteName) : base(position, width, height, false) { this.node = node; this.ogTarget = node; this.ogPosition = position; this.persistent = persistent; base.Add(icon = new Sprite(GFX.Game, "objects/switchgate/icon")); icon.Add("spin", "", 0.1f, "spin"); icon.Play("spin", false, false); icon.Rate = 0f; icon.Color = inactiveColor; icon.Position = (iconOffset = new Vector2(width / 2f, height / 2f)); icon.CenterOrigin(); base.Add(wiggler = Wiggler.Create(0.5f, 4f, delegate(float f) { icon.Scale = Vector2.One * (1f + f); }, false, false)); MTexture mTexture = GFX.Game["objects/switchgate/" + spriteName]; nineSlice = new MTexture[3, 3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { MTexture[,] array = nineSlice; int num = i; int num2 = j; MTexture subtexture = mTexture.GetSubtexture(new Rectangle(i * 8, j * 8, 8, 8)); array[num, num2] = subtexture; } } base.Add(openSfx = new SoundSource()); base.Add(new LightOcclude(0.5f)); }
public DashSpring(Vector2 position, Orientations orientation, bool playerCanUse) : base(position, orientation, playerCanUse) { // Only one other player collider is added so it can easily be removed Remove(Get <PlayerCollider>()); Add(new PlayerCollider(OnCollide)); Sprite sprite = (Sprite)spriteInfo.GetValue(this); sprite.Reset(GFX.Game, "objects/SpringCollab2020/dashSpring/"); 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; }
public CustomPickup(Vector2 position, Vector2 targetPosition, int playerIndex) : base(position, targetPosition, playerIndex) { this.playerIndex = playerIndex; Tag(GameTags.LightSource); images = new Sprite <int> [3]; for (int i = 0; i < images.Length; i++) { Sprite <int> image; image = new Sprite <int>(TFGame.Atlas["pickups/bomb"], 12, 12, 0); image.X += 14; image.X -= 14 * i; image.CenterOrigin(); image.Add(0, 0.05f, new int[] { 0, 0, 2, 1, 1, 2 }); image.Play(0, false); Add(image); images[i] = image; } }
public void AddingUVCalculatorResultsThrowsException() { var sprite = new Sprite("DeltaEngineLogoAlpha", Rectangle.One); Assert.Throws <Sprite.RenderingDataComponentAddingIsNotSupported>( () => sprite.Add(new RenderingData())); }
public void RenderSpriteWithRedOutline() { var sprite = new Sprite(logoMaterial, Rectangle.HalfCentered); sprite.Add(new OutlineColor(Color.Red)); sprite.OnDraw <DrawPolygon2DOutlines>(); }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { _moonSprite = new Sprite(Utilities.FromFile <Texture2D>(@"Data\Example1\moon.png", GraphicsDevice)) { Position = new Vector2(150.0f, 0.0f), Scale = new Vector2(1.25f), Name = "Moon" }; _earthSprite = new Sprite(Utilities.FromFile <Texture2D>(@"Data\Example1\exoplanet.png", GraphicsDevice)) { Position = new Vector2(400.0f, 0.0f), Scale = new Vector2(0.5f), Name = "Earth" }; _earthSprite.Add(_moonSprite); _sunSprite = new Sprite(Utilities.FromFile <Texture2D>(@"Data\Example1\sun.png", GraphicsDevice)) { Name = "Sun", }; _sunSprite.Add(_earthSprite); _scene.AddNode(_sunSprite); _camera.Position = new Vector2(800, 0); _camera.Focus = _sunSprite; _camera.MoveSpeed = 0.5f; (SubSystem.Instance.Services.GetInstance <IRenderSystem>() as SceneGraphRenderSystem).CurrentScene = _scene; }
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 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 virtual void UpdateSpriteState() { foreach (var buff in _buffs) { if (buff is Burning) { Sprite.Add(CharSprite.State.Burning); } else if (buff is Levitation) { Sprite.Add(CharSprite.State.Levitating); } else if (buff is Invisibility) { Sprite.Add(CharSprite.State.Invisible); } else if (buff is Paralysis) { Sprite.Add(CharSprite.State.Paralysed); } else if (buff is Frost) { Sprite.Add(CharSprite.State.Frozen); } else if (buff is Light) { Sprite.Add(CharSprite.State.Illuminated); } } }
public RustyLamp(Vector2 position, Vector2 offset, string activationId, float initialDelay, string strobePattern, bool startActive) : base() { Depth = 8500; Position = position + offset; Collider = new Hitbox(12, 12, 2, 2); Add(Activator = new FactoryActivator()); Activator.ActivationId = activationId == string.Empty ? null : activationId; Activator.StartOn = startActive; Activator.OnTurnOff = OnTurnOff; Activator.OnTurnOn = OnTurnOn; Activator.OnStartOff = OnStartOff; Activator.OnStartOn = OnStartOn; Add(_steamCollider = new SteamCollider(OnSteamWall)); _initialDelay = initialDelay; Add(_sprite = new Sprite(GFX.Game, "objects/FactoryHelper/rustyLamp/rustyLamp")); _sprite.Add("frames", ""); _sprite.Play("frames"); _sprite.Active = false; _strobePatternString = strobePattern; Add(_light = new VertexLight(Color, 0f, 128, 128)); Add(_bloom = new BloomPoint(0.0f, 16f)); _light.Position = new Vector2(8, 8); _bloom.Position = new Vector2(8, 8); }
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 void AddComponent() { logo.Add(new Name("name")); AdvanceTimeAndUpdateEntities(); if (GetTextBox("Name") != null) { Assert.AreEqual("name", GetTextBox("Name").Text); } }
public TrollZipper(Vector2 position, int width, int height, Vector2 target, Themes theme, int trollOffset, bool trollFixed, bool switchTroll, bool flipDirection) : base(position, width, height, safe: false) { this.flipDirection = flipDirection; this.switchTroll = switchTroll; this.trollFixed = trollFixed; this.trollOffset = trollOffset; Depth = -9999; start = Position; this.target = target; maxForwardSpeed = 360f / Vector2.Distance(start, target); maxBackwardSpeed = maxForwardSpeed * 0.4f; Direction.X = Math.Sign(target.X - start.X); Direction.Y = Math.Sign(target.Y - start.Y); this.theme = theme; string path; string id; string key; if (theme == Themes.Moon) { path = "objects/zipmover/moon/light"; id = "objects/zipmover/moon/block"; key = "objects/zipmover/moon/innercog"; drawBlackBorder = false; } else { path = "objects/zipmover/light"; id = "objects/zipmover/block"; key = "objects/zipmover/innercog"; drawBlackBorder = true; } innerCogs = GFX.Game.GetAtlasSubtextures(key); Add(streetlight = new Sprite(GFX.Game, path)); streetlight.Add("frames", "", 1f); streetlight.Play("frames"); streetlight.Active = false; streetlight.SetAnimationFrame(1); streetlight.Position = new Vector2(Width / 2f - streetlight.Width / 2f, 0f); Add(bloom = new BloomPoint(1f, 6f)); bloom.Position = new Vector2(Width / 2f, 4f); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { edges[i, j] = GFX.Game[id].GetSubtexture(i * 8, j * 8, 8, 8); } } SurfaceSoundIndex = 7; sfx.Position = new Vector2(Width, Height) / 2f; Add(sfx); Add(new LightOcclude()); }
public void CreateTrigger() { var trigger = new Sprite(material, new Rectangle(Vector2D.Zero, (Size)Vector2D.One)) { Color = Color.Red }; trigger.Add(new TimeTrigger.Data(Color.Red, Color.Gray, 1)); trigger.Start<CollisionTrigger>().Add(new CollisionTrigger.Data(Color.White, Color.Red)); Assert.AreEqual(Vector2D.Zero, trigger.Get<Rectangle>().TopLeft); Assert.AreEqual(Vector2D.One, trigger.Get<Rectangle>().BottomRight); }
public void CreateTrigger() { var trigger = new Sprite(material, new Rectangle(Vector2D.Zero, (Size)Vector2D.One)) { Color = Color.Red }; trigger.Add(new TimeTrigger.Data(Color.Red, Color.Gray, 1)); trigger.Start <CollisionTrigger>().Add(new CollisionTrigger.Data(Color.White, Color.Red)); Assert.AreEqual(Vector2D.Zero, trigger.Get <Rectangle>().TopLeft); Assert.AreEqual(Vector2D.One, trigger.Get <Rectangle>().BottomRight); }
public BadelineChaserBlockActivator(EntityData data, Vector2 offset) : base(data.Position + offset, data.Width, data.Height, false) { Solid = data.Bool("solid", true); Collider = new Hitbox(data.Width, data.Height); Collidable = Solid; Emblem = new Sprite(GFX.Game, "objects/FrostHelper/badelineChaserBlock/emblem"); Emblem.Add("loop", "field"); //Emblem.Add("pressed", Reversed ? "pressedreverse" : "pressed"); Emblem.CenterOrigin(); Emblem.Play("loop"); Depth = 8990; }
public void RenderSlowlyFallingLogo() { var sprite = new Sprite(new Material(ShaderFlags.Position2DTextured, "DeltaEngineLogo"), screenCenter); sprite.Add(new SimplePhysics.Data { Velocity = new Vector2D(0.0f, -0.3f), RotationSpeed = 100.0f, Gravity = new Vector2D(0.0f, 0.1f), }); sprite.Color = Color.Red; sprite.Start<SimplePhysics.Move>(); }
public void RenderSlowlyFallingLogo() { var sprite = new Sprite(new Material(ShaderFlags.Position2DTextured, "DeltaEngineLogo"), screenCenter); sprite.Add(new SimplePhysics.Data { Velocity = new Vector2D(0.0f, -0.3f), RotationSpeed = 100.0f, Gravity = new Vector2D(0.0f, 0.1f), }); sprite.Color = Color.Red; sprite.Start <SimplePhysics.Move>(); }
private static Sprite CreateFallingSpriteWhichExpires() { var sprite = new Sprite(new Material(ShaderFlags.Position2DTextured, "DeltaEngineLogo"), Rectangle.One); sprite.Add(new SimplePhysics.Data { Velocity = Vector2D.Half, Gravity = new Vector2D(1.0f, 2.0f), Duration = 1.0f }); sprite.Start<SimplePhysics.Move>(); sprite.Color = Color.Red; return sprite; }
public SteamPoof(Vector2 position, float fade) : base(position) { Depth = -100001; string type = Calc.Random.Chance(0.1f) ? "b" : "a"; Add(_sprite = new Sprite(GFX.Game, "danger/FactoryHelper/steamWall/")); _sprite.Add("poof", "poof_" + type, 0.07f); _sprite.Play("poof"); float scale = Calc.Random.NextFloat(0.4f) + 0.4f; _sprite.Scale = new Vector2(scale, scale); _sprite.Rotation = Calc.Random.NextAngle(); _sprite.Color = Color.Lerp(new Color(0.9f, 0.9f, 0.9f) * 0.8f, new Color(0.7f, 0.7f, 0.7f) * 0.5f, Calc.Random.NextFloat()) * fade; _sprite.CenterOrigin(); }
private static Sprite CreateFallingSpriteWhichExpires() { var sprite = new Sprite(new Material(ShaderFlags.Position2DTextured, "DeltaEngineLogo"), Rectangle.One); sprite.Add(new SimplePhysics.Data { Velocity = Vector2D.Half, Gravity = new Vector2D(1.0f, 2.0f), Duration = 1.0f }); sprite.Start <SimplePhysics.Move>(); sprite.Color = Color.Red; return(sprite); }
public override void OnBegin(Level level) { payphone = Scene.Tracker.GetEntity <Payphone>(); Add(new Coroutine(Cutscene(level))); Add(ringtone = new SoundSource()); Add(phoneSfx = new SoundSource()); Add(sprite = new Sprite(GFX.Game, "cutscenes/payphone/phone")); sprite.Add("putdown", "", 0.08f, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1); sprite.Justify = new Vector2(0.5f, 1f); sprite.Visible = false; if (endLevel) { level.RegisterAreaComplete(); } }
public DreamSwitchGate(EntityData data, Vector2 offset) : base(data, offset) { permanent = data.Bool("permanent"); node = data.Nodes[0] + offset; isFlagSwitchGate = data.Bool("isFlagSwitchGate"); ID = data.ID; Flag = data.Attr("flag"); inactiveColor = Calc.HexToColor(data.Attr("inactiveColor", "5FCDE4")); activeColor = Calc.HexToColor(data.Attr("activeColor", "FFFFFF")); finishColor = Calc.HexToColor(data.Attr("finishColor", "F141DF")); shakeTime = data.Float("shakeTime", 0.5f); moveTime = data.Float("moveTime", 1.8f); moveEased = data.Bool("moveEased", true); moveSound = data.Attr("moveSound", SFX.game_gen_touchswitch_gate_open); finishedSound = data.Attr("finishedSound", SFX.game_gen_touchswitch_gate_finish); allowReturn = data.Bool("allowReturn"); P_RecoloredFire = new ParticleType(TouchSwitch.P_Fire) { Color = finishColor }; P_RecoloredFireBack = new ParticleType(TouchSwitch.P_Fire) { Color = inactiveColor }; string iconAttribute = data.Attr("icon", "vanilla"); icon = new Sprite(GFX.Game, iconAttribute == "vanilla" ? "objects/switchgate/icon" : $"objects/MaxHelpingHand/flagSwitchGate/{iconAttribute}/icon"); icon.Add("spin", "", 0.1f, "spin"); icon.Play("spin"); icon.Rate = 0f; icon.Color = inactiveColor; icon.CenterOrigin(); iconOffset = new Vector2(Width, Height) / 2f; Add(wiggler = Wiggler.Create(0.5f, 4f, scale => { icon.Scale = Vector2.One * (1f + scale); })); Add(openSfx = new SoundSource()); }
public Sprite<string> GetSpriteString(string id) { XmlElement xml = sprites[id]; Sprite<string> sprite = new Sprite<string>(atlas[xml.ChildText("Texture")], xml.ChildInt("FrameWidth"), xml.ChildInt("FrameHeight")); sprite.Origin = new Vector2(xml.ChildFloat("OriginX", 0), xml.ChildFloat("OriginY", 0)); sprite.Position = new Vector2(xml.ChildFloat("X", 0), xml.ChildFloat("Y", 0)); sprite.Color = xml.ChildHexColor("Color", Color.White); XmlElement anims = xml["Animations"]; if (anims != null) foreach (XmlElement anim in anims.GetElementsByTagName("Anim")) sprite.Add(anim.Attr("id"), anim.AttrFloat("delay", 0), anim.AttrBool("loop", true), Calc.ReadCSV(anim.Attr("frames"))); return sprite; }
public void KillSpriteAfterTimeout() { var enemyMovingOutOfScreen = new Sprite(new Material(ShaderFlags.Position2DTextured, "DeltaEngineLogo"), new Rectangle(Vector2D.Half, new Size(0.1f))); var data = new SimplePhysics.Data { Velocity = new Vector2D(0.5f, 0), Duration = 1 }; enemyMovingOutOfScreen.Add(data); enemyMovingOutOfScreen.Start<SimplePhysics.Move>(); enemyMovingOutOfScreen.Start<SimplePhysics.KillAfterDurationReached>(); if (IsMockResolver) AdvanceTimeAndUpdateEntities(1.1f); }
public void RenderSpriteWithRedOutline() { var sprite = new Sprite(logoMaterial, Rectangle.HalfCentered); sprite.Add(new OutlineColor(Color.Red)); sprite.OnDraw<DrawPolygon2DOutlines>(); }
} //ncrunch: no coverage end private static void AddFallingBrick(Entity2D brick, Material material) { var fallingBrick = new Sprite(material, brick.DrawArea) { Color = brick.Color, RenderLayer = (int)BlocksRenderLayer.FallingBrick, }; var random = Randomizer.Current; var data = new SimplePhysics.Data { Velocity = new Vector2D(random.Get(-0.5f, 0.5f), random.Get(-1.0f, 0.0f)), RotationSpeed = random.Get(-360, 360), Duration = 5.0f, Gravity = new Vector2D(0.0f, 2.0f) }; fallingBrick.Add(data); fallingBrick.Start<SimplePhysics.Move>(); }
public void AddingUVCalculatorResultsThrowsException() { var sprite = new Sprite("DeltaEngineLogoAlpha", Rectangle.One); Assert.Throws<Sprite.RenderingDataComponentAddingIsNotSupported>( () => sprite.Add(new RenderingData())); }