Esempio n. 1
0
        private void AddEdgeMarker()
        {
            var mw = MapFullBounds.Width;
            var mh = MapFullBounds.Height;
            var ex = 2 * GDConstants.TILE_WIDTH;

            var rn = new FRectangle(-ex, -ex, mw + 2 * ex, ex);
            var re = new FRectangle(+mw, -ex, ex, mh + 2 * ex);
            var rs = new FRectangle(-ex, +mh, mw + 2 * ex, ex);
            var rw = new FRectangle(-ex, -ex, ex, mh + 2 * ex);

            var dn = new MarkerCollisionBorder {
                Side = FlatAlign4.NN
            };
            var de = new MarkerCollisionBorder {
                Side = FlatAlign4.EE
            };
            var ds = new MarkerCollisionBorder {
                Side = FlatAlign4.SS
            };
            var dw = new MarkerCollisionBorder {
                Side = FlatAlign4.WW
            };

            var bn = BodyFactory.CreateBody(GetPhysicsWorld(), ConvertUnits2.ToSimUnits(rn.Center), 0, BodyType.Static, dn);
            var be = BodyFactory.CreateBody(GetPhysicsWorld(), ConvertUnits2.ToSimUnits(re.Center), 0, BodyType.Static, de);
            var bs = BodyFactory.CreateBody(GetPhysicsWorld(), ConvertUnits2.ToSimUnits(rs.Center), 0, BodyType.Static, ds);
            var bw = BodyFactory.CreateBody(GetPhysicsWorld(), ConvertUnits2.ToSimUnits(rw.Center), 0, BodyType.Static, dw);

            var fn = FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(rn.Width), ConvertUnits.ToSimUnits(rn.Height), 1, Vector2.Zero, bn, dn);
            var fe = FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(re.Width), ConvertUnits.ToSimUnits(re.Height), 1, Vector2.Zero, be, de);
            var fs = FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(rs.Width), ConvertUnits.ToSimUnits(rs.Height), 1, Vector2.Zero, bs, ds);
            var fw = FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(rw.Width), ConvertUnits.ToSimUnits(rw.Height), 1, Vector2.Zero, bw, dw);
        }
Esempio n. 2
0
        private World CreateRayWorld(LevelBlueprint lvl)
        {
            var world = new World(Vector2.Zero);

            ConvertUnits.SetDisplayUnitToSimUnitRatio(GDConstants.PHYSICS_CONVERSION_FACTOR);

            foreach (var elem in lvl.AllCannons)
            {
                if (elem.Diameter < 0.01f)
                {
                    throw new Exception("Invalid Physics");
                }

                var body = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(new Vector2(elem.X, elem.Y)), 0, BodyType.Static, elem);
                FixtureFactory.AttachCircle(ConvertUnits.ToSimUnits(elem.Diameter / 2f), 1, body, Vector2.Zero, elem);
            }

            foreach (var elem in lvl.BlueprintGlassBlocks)
            {
                if (elem.Width < 0.01f)
                {
                    throw new Exception("Invalid Physics");
                }
                if (elem.Height < 0.01f)
                {
                    throw new Exception("Invalid Physics");
                }

                var body = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(new Vector2(elem.X, elem.Y)), 0, BodyType.Static, elem);
                FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(elem.Width), ConvertUnits.ToSimUnits(elem.Height), 1, Vector2.Zero, body, elem);
            }

            foreach (var elem in lvl.BlueprintVoidCircles)
            {
                if (elem.Diameter < 0.01f)
                {
                    throw new Exception("Invalid Physics");
                }

                var body = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(new Vector2(elem.X, elem.Y)), 0, BodyType.Static, elem);
                FixtureFactory.AttachCircle(ConvertUnits.ToSimUnits(elem.Diameter / 2f), 1, body, Vector2.Zero, elem);
            }

            foreach (var elem in lvl.BlueprintVoidWalls)
            {
                if (elem.Length < 0.01f)
                {
                    throw new Exception("Invalid Physics");
                }

                var body = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(new Vector2(elem.X, elem.Y)), 0, BodyType.Static, elem);
                FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(elem.Length), ConvertUnits.ToSimUnits(VoidWallBlueprint.DEFAULT_WIDTH), 1, Vector2.Zero, body, elem);
                body.Rotation = FloatMath.DegRad * elem.Rotation;
            }

            foreach (var elem in lvl.BlueprintBlackHoles)
            {
                if (elem.Diameter < 0.01f)
                {
                    throw new Exception("Invalid Physics");
                }

                var body = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(new Vector2(elem.X, elem.Y)), 0, BodyType.Static, elem);
                FixtureFactory.AttachCircle(ConvertUnits.ToSimUnits(elem.Diameter * 0.5f * 0.3f), 1, body, Vector2.Zero, elem);
            }

            foreach (var elem in lvl.BlueprintPortals)
            {
                if (elem.Length < 0.01f)
                {
                    throw new Exception("Invalid Physics");
                }

                var body = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(new Vector2(elem.X, elem.Y)), 0, BodyType.Static, elem);
                FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(elem.Length), ConvertUnits.ToSimUnits(PortalBlueprint.DEFAULT_WIDTH), 1, Vector2.Zero, body, elem);
                body.Rotation = FloatMath.DegRad * (elem.Normal + 90);
            }

            foreach (var elem in lvl.BlueprintMirrorBlocks)
            {
                if (elem.Width < 0.01f)
                {
                    throw new Exception("Invalid Physics");
                }
                if (elem.Height < 0.01f)
                {
                    throw new Exception("Invalid Physics");
                }

                var body = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(new Vector2(elem.X, elem.Y)), FloatMath.ToRadians(elem.Rotation), BodyType.Static, elem);
                FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(elem.Width), ConvertUnits.ToSimUnits(elem.Height), 1, Vector2.Zero, body, elem);
            }

            foreach (var elem in lvl.BlueprintMirrorCircles)
            {
                if (elem.Diameter < 0.01f)
                {
                    throw new Exception("Invalid Physics");
                }

                var body = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(new Vector2(elem.X, elem.Y)), 0, BodyType.Static, elem);
                FixtureFactory.AttachCircle(ConvertUnits.ToSimUnits(elem.Diameter / 2f), 1, body, Vector2.Zero, elem);
            }

            if (lvl.WrapMode == LevelBlueprint.WRAPMODE_SOLID)
            {
                var mw = lvl.LevelWidth;
                var mh = lvl.LevelHeight;
                var ex = 2 * GDConstants.TILE_WIDTH;

                var rn = new FRectangle(-ex, -ex, mw + 2 * ex, ex);
                var re = new FRectangle(+mw, -ex, ex, mh + 2 * ex);
                var rs = new FRectangle(-ex, +mh, mw + 2 * ex, ex);
                var rw = new FRectangle(-ex, -ex, ex, mh + 2 * ex);

                var dn = new MarkerCollisionBorder {
                    Side = FlatAlign4.NN
                };
                var de = new MarkerCollisionBorder {
                    Side = FlatAlign4.EE
                };
                var ds = new MarkerCollisionBorder {
                    Side = FlatAlign4.SS
                };
                var dw = new MarkerCollisionBorder {
                    Side = FlatAlign4.WW
                };

                var bn = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(rn.VecCenter), 0, BodyType.Static, dn);
                var be = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(re.VecCenter), 0, BodyType.Static, de);
                var bs = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(rs.VecCenter), 0, BodyType.Static, ds);
                var bw = BodyFactory.CreateBody(world, ConvertUnits.ToSimUnits(rw.VecCenter), 0, BodyType.Static, dw);

                var fn = FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(rn.Width), ConvertUnits.ToSimUnits(rn.Height), 1, Vector2.Zero, bn, dn);
                var fe = FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(re.Width), ConvertUnits.ToSimUnits(re.Height), 1, Vector2.Zero, be, de);
                var fs = FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(rs.Width), ConvertUnits.ToSimUnits(rs.Height), 1, Vector2.Zero, bs, ds);
                var fw = FixtureFactory.AttachRectangle(ConvertUnits.ToSimUnits(rw.Width), ConvertUnits.ToSimUnits(rw.Height), 1, Vector2.Zero, bw, dw);
            }

            return(world);
        }