Example #1
0
        public LaserSensor(EntityData data, Vector2 offset) : base(data.Position + offset)
        {
            active          = false;
            flag            = data.Attr("flag", "");
            mode            = data.Attr("mode", "Continuous");
            blockLight      = bool.Parse(data.Attr("blockLight", "true"));
            activationColor = ColorHelper.GetColor(data.Attr("color", "#87CEFA"));
            id = data.ID;

            orbSprite        = new Monocle.Image(GFX.Game["objects/pandorasBox/laser/sensor/orb"]);
            orbSprite.Origin = new Vector2(orbSprite.Width / 2f, orbSprite.Height / 2f);
            orbEntity        = new Entity(Position);
            orbEntity.Add(orbSprite);
            orbEntity.Depth = 50;

            metalRingSprite        = new Monocle.Image(GFX.Game["objects/pandorasBox/laser/sensor/metal_ring"]);
            metalRingSprite.Origin = new Vector2(metalRingSprite.Width / 2f, metalRingSprite.Height / 2f);
            lightRingSprite        = new Monocle.Image(GFX.Game["objects/pandorasBox/laser/sensor/light_ring"]);
            lightRingSprite.Origin = new Vector2(lightRingSprite.Width / 2f, lightRingSprite.Height / 2f);
            lightRingSprite.SetColor(activationColor);
            Add(metalRingSprite);
            Add(lightRingSprite);
            Depth = 200;

            LaserDetectionCollider = new Hitbox(8f, 8f, -4f, -4f);

            if (blockLight)
            {
                LaserBlockingCollider = new Hitbox(4f, 4f, -2f, -2f);
            }
        }
Example #2
0
        public DreamDashController(EntityData data, Vector2 offset) : base(data.Position + offset)
        {
            AllowSameDirectionDash    = data.Bool("allowSameDirectionDash", false);
            AllowDreamDashRedirection = data.Bool("allowDreamDashRedirect", true);
            OverrideDreamDashSpeed    = data.Bool("overrideDreamDashSpeed", false);
            OverrideColors            = data.Bool("overrideColors", false);
            NeverSlowDown             = data.Bool("neverSlowDown", false);
            UseEntrySpeedAngle        = data.Bool("useEntrySpeedAngle", false);
            BounceOnCollision         = data.Bool("bounceOnCollision", false);
            CollideStickToWalls       = data.Bool("stickOnCollision", false);

            sameDirectionSpeedMultiplier = data.Float("sameDirectionSpeedMultiplier", 1.0f);
            dreamDashSpeed = data.Float("dreamDashSpeed", 240f);

            activeBackColor   = ColorHelper.GetColor(data.Attr("activeBackColor", "Black"));
            disabledBackColor = ColorHelper.GetColor(data.Attr("disabledBackColor", "1f2e2d"));
            activeLineColor   = ColorHelper.GetColor(data.Attr("activeLineColor", "White"));
            disabledLineColor = ColorHelper.GetColor(data.Attr("disabledLineColor", "6a8480"));

            particleLayerColors = new List <List <Color> > {
                ColorHelper.GetColors(data.Attr("particleLayer0Colors", "ffef11,ff00d0,08a310")),
                ColorHelper.GetColors(data.Attr("particleLayer1Colors", "5fcde4,7fb25e,e0564c")),
                ColorHelper.GetColors(data.Attr("particleLayer2Colors", "5b6ee1,CC3B3B,7daa64"))
            };

            addedColors = false;
        }
Example #3
0
        public TimeField(EntityData data, Vector2 offset) : base(data.Position + offset)
        {
            lerp = 0f;

            start = data.Float("start", 0.2f);
            stop  = data.Float("stop", 1f);

            startTime = data.Float("stopTime", 1.0f);
            stopTime  = data.Float("startTime", 3.0f);

            animRate = data.Float("animRate", 6.0f);

            render         = data.Bool("render", true);
            playerAffected = data.Bool("playerAffected", false);
            lingering      = data.Bool("lingering", false);

            respectOtherTimeRates = data.Bool("respectOtherTimeRates", false);

            String rawColor = data.Attr("color", "teal");

            tint = ColorHelper.GetColor(rawColor);

            base.Add(new PlayerCollider(new Action <Player>(this.OnPlayer), null, null));
            base.Collider = (Collider) new Hitbox(data.Width, data.Height, 0, 0);

            this.particleTextures = new MTexture[4]
            {
                GFX.Game["objects/pandorasBox/timefields/particles"].GetSubtexture(24, 0, 8, 8, null),
                GFX.Game["objects/pandorasBox/timefields/particles"].GetSubtexture(0, 0, 8, 8, null),
                GFX.Game["objects/pandorasBox/timefields/particles"].GetSubtexture(8, 0, 8, 8, null),
                GFX.Game["objects/pandorasBox/timefields/particles"].GetSubtexture(16, 0, 8, 8, null)
            };
        }
Example #4
0
 public ColoredWaterfall(EntityData data, Vector2 offset) : base(data.Position + offset)
 {
     baseColor    = ColorHelper.GetColor(data.Attr("color", "#87CEFA"));
     surfaceColor = baseColor * 0.8f;
     fillColor    = baseColor * 0.3f;
     rayTopColor  = baseColor * 0.6f;
 }
Example #5
0
        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;
        }
Example #6
0
        public ColoredWater(EntityData data, Vector2 offset) : base(data, offset)
        {
            baseColor    = ColorHelper.GetColor(data.Attr("color", "#87CEFA"));
            surfaceColor = baseColor * 0.8f;
            fillColor    = baseColor * 0.3f;
            rayTopColor  = baseColor * 0.6f;

            fixedSurfaces = false;
        }
Example #7
0
        public static List <Color> GetColors(String rawColors, Char sep = ',')
        {
            List <Color> colors = new List <Color>();

            foreach (String s in rawColors.Split(sep))
            {
                colors.Add(ColorHelper.GetColor(s));
            }

            return(colors);
        }
Example #8
0
        public ColoredWater(EntityData data, Vector2 offset) : base(data.Position + offset, data.Bool("hasTop", true), data.Bool("hasBottom"), data.Width, data.Height)
        {
            baseColor    = ColorHelper.GetColor(data.Attr("color", "#87CEFA"));
            surfaceColor = baseColor * 0.8f;
            fillColor    = baseColor * 0.3f;
            rayTopColor  = baseColor * 0.6f;

            hasLeftSurface  = data.Bool("hasLeft");
            hasRightSurface = data.Bool("hasRight");

            waterFill           = (Rectangle)fillField.GetValue(this);
            interactionContains = (HashSet <WaterInteraction>)containsField.GetValue(this);
        }
Example #9
0
        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();
                }
            });
        }
Example #10
0
        public PropellerBox(EntityData data, Vector2 offset) : base(data.Position + offset)
        {
            Depth    = 100;
            Collider = new Hitbox(8f, 10f, -4f, -10f);

            MaxCharges = data.Int("maxCharges", 3);
            Charges    = MaxCharges;

            texture             = data.Attr("texture", "default");
            flashUseColor       = ColorHelper.GetColor(data.Attr("flashUseColor", "#3F437C"));
            flashRechargedColor = ColorHelper.GetColor(data.Attr("flashChargeColor", "#5A1C1C"));
            glideMode           = data.Attr("glideMode", "AfterUse");
            rechargeOnGround    = data.Bool("rechargeOnGround", true);

            chargeSprites = new List <Sprite>();

            for (int i = 0; i <= MaxCharges; i++)
            {
                addChargeSprite(i);
            }

            Add(flashOverlaySprite = new Sprite(GFX.Game, $"objects/pandorasBox/propellerBox/{texture}/flash_overlay"));

            flashOverlaySprite.Add("flash_overlay", "", 0.045f);
            flashOverlaySprite.Justify = new Vector2(0.5f, 1f);

            Add(Hold            = new Holdable());
            Hold.PickupCollider = new Hitbox(16f, 22f, -8f, -16f);
            Hold.OnPickup       = OnPickup;
            Hold.OnRelease      = OnRelease;
            Hold.DangerousCheck = DangerousCheck;
            Hold.OnHitSpring    = HitSpring;
            Hold.SpeedGetter    = (() => Speed);
            Hold.SlowFall       = glideMode == "Always";

            onCollideH = OnCollideH;
            onCollideV = OnCollideV;

            LiftSpeedGraceTime = 0.1f;

            Add(new VertexLight(base.Collider.Center, Color.White, 1f, 32, 64));
            Add(new WindMover(WindMode));

            updateChargeSpriteVisibility();

            base.Tag = Tags.TransitionUpdate;
        }
        public DustSpriteColorController(EntityData data, Vector2 offset) : base(data.Position + offset)
        {
            eyeColor   = ColorHelper.GetColor(data.Attr("eyeColor", "Red"));
            eyeTexture = data.Attr("eyeTexture", "danger/dustcreature/eyes");

            String         rawColor = data.Attr("borderColor", "Green");
            List <Vector3> colors   = new List <Vector3>();

            foreach (String s in rawColor.Split(','))
            {
                colors.Add(ColorHelper.GetColor(s).ToVector3());
            }

            borderColors = colors.ToArray();

            style = new DustStyles.DustStyle
            {
                EdgeColors  = borderColors,
                EyeColor    = eyeColor,
                EyeTextures = eyeTexture
            };
        }
Example #12
0
        public Lamp(EntityData data, Vector2 offset) : base(data.Position + offset)
        {
            id               = data.ID;
            flag             = data.Attr("flag", "");
            baseColor        = ColorHelper.GetColor(data.Attr("baseColor", "White"));
            lightColor       = ColorHelper.GetColor(data.Attr("lightColor", "White"));
            lightStartRadius = data.Int("lightStartRadius", 48);
            lightEndRadius   = data.Int("lightEndRadius", 64);
            inverted         = data.Bool("inverted", false);

            Add((Component)(startupSprite = new Sprite(GFX.Game, "objects/pandorasBox/lamp/start")));
            startupSprite.AddLoop("start", "", startupAnimationDelay);
            startupSprite.JustifyOrigin(0.5f, 0.5f);
            startupSprite.Play("start");
            startupSprite.OnLastFrame = onLastFrame;
            startupLerpTotal          = startupAnimationDelay * startupSprite.CurrentAnimationTotalFrames;
            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, lightStartRadius, lightEndRadius)));

            Depth = 5;
        }
Example #13
0
 public CircularResortPlatform(EntityData data, Vector2 offset) : this(data.Position + offset, data.Width, data.Nodes[0] + offset, data.Attr("texture", ""), data.Bool("clockwise", true), data.Float("speed", 1500f), data.Bool("particles", true), data.Bool("attachToSolid", true), data.Bool("renderRail", true), ColorHelper.GetColor(data.Attr("lineFillColor", "160b12")), ColorHelper.GetColor(data.Attr("lineEdgeColor", "2a1923")), data.Bool("rotationFix", false))
 {
 }
 public ColoredBigWaterfall(EntityData data, Vector2 offset) : base(data, offset)
 {
     baseColor = ColorHelper.GetColor(data.Attr("color", "#87CEFA"));
 }
Example #15
0
        public MarioShell(EntityData data, Vector2 offset) : base(data.Position + offset)
        {
            colors  = new List <Color>();
            timeAcc = 0;

            bool lights = data.Bool("lights", false);

            texture   = data.Attr("texture", "koopa");
            dangerous = data.Bool("dangerous", dangerousTextures.ContainsKey(texture) && dangerousTextures[texture]);
            disco     = data.Bool("disco", false);
            grabbable = data.Bool("grabbable", true);

            String rawColor = data.Attr("color", "Green");

            colorSpeed = data.Float("colorSpeed", 0.8f);

            foreach (String s in rawColor.Split(','))
            {
                colors.Add(ColorHelper.GetColor(s));
            }

            int direction = Math.Sign(data.Int("direction", 0));

            Speed = new Vector2(baseSpeed * direction, 0f);
            grace = 0f;

            prevLiftspeed = Vector2.Zero;

            pickupIdleCollider   = new Hitbox(18f, 18f, -9, -9);
            pickupMovingCollider = new Hitbox(0f, 0f, 0f, 0f);

            shellHeldCollider    = new Hitbox(8f, 14f, -4f, -7f);
            shellNotHeldCollider = new Hitbox(14f, 14f, -7f, -7f);

            Add(new PlayerCollider(new Action <Player>(OnPlayer)));
            Collider = shellNotHeldCollider;

            onCollideH = new Collision(OnCollideH);
            onCollideV = new Collision(OnCollideV);

            Add((Component)(decorationIdle = new Sprite(GFX.Game, $"objects/pandorasBox/shells/{texture}/deco_idle")));
            decorationIdle.AddLoop("deco_idle", "", 0.1f);
            decorationIdle.Play("deco_idle", true, false);
            decorationIdle.CenterOrigin();

            Add((Component)(shellIdle = new Sprite(GFX.Game, $"objects/pandorasBox/shells/{texture}/shell_idle")));
            shellIdle.AddLoop("shell_idle", "", 0.1f);
            shellIdle.Play("shell_idle", true, false);
            shellIdle.CenterOrigin();
            shellIdle.Color = colors[0];

            Add((Component)(decorationMoving = new Sprite(GFX.Game, $"objects/pandorasBox/shells/{texture}/deco_moving")));
            decorationMoving.AddLoop("deco_moving", "", 0.1f);
            decorationMoving.Play("deco_moving", true, false);
            decorationMoving.CenterOrigin();

            Add((Component)(shellMoving = new Sprite(GFX.Game, $"objects/pandorasBox/shells/{texture}/shell_moving")));
            shellMoving.AddLoop("shell_moving", "", 0.1f);
            shellMoving.Play("shell_moving", true, false);
            shellMoving.CenterOrigin();
            shellMoving.Color = colors[0];

            Add((Component)(Hold = new Holdable()));
            Hold.PickupCollider = new Hitbox(18f, 18f, -9, -9);
            Hold.OnPickup       = new Action(OnPickup);
            Hold.OnRelease      = new Action <Vector2>(OnRelease);
            Hold.SpeedGetter    = () => Speed;
            Hold.DangerousCheck = DangerousCheck;
            Hold.OnHitSpring    = HitSpring;

            decorationMoving.Visible = shellMoving.Visible = false;

            id = data.ID;

            if (lights)
            {
                Add((Component)(bloom = new BloomPoint(1f, 16f)));
                Add((Component)(light = new VertexLight(Collider.Center, Color.White, 1f, 8, 24)));

                bloom.Visible = light.Visible = true;
            }
        }