Example #1
0
        public void StepTest3()
        {
            Scene scene = new Scene();
            Portalable p = new Portalable(scene);
            Transform2 start = new Transform2(new Vector2(0, 0));
            Transform2 velocity = Transform2.CreateVelocity(new Vector2(3, 0));
            p.SetTransform(start);
            p.SetVelocity(velocity);

            //Scene scene = new Scene();
            FloatPortal enter = new FloatPortal(scene);
            enter.SetTransform(new Transform2(new Vector2(1, 0)));
            enter.SetVelocity(Transform2.CreateVelocity(new Vector2(1, 0)));

            FloatPortal exit = new FloatPortal(scene);
            exit.SetTransform(new Transform2(new Vector2(10, 10)));

            enter.Linked = exit;
            exit.Linked = enter;

            PortalCommon.UpdateWorldTransform(new IPortalCommon[] { p, enter, exit });
            SimulationStep.Step(new IPortalCommon[] { p, enter, exit }, new IPortal[] { enter, exit }, 1, null);

            /*Assert.IsTrue(p.WorldTransform.Position == new Vector2(9, 10));
            Assert.IsTrue(p.WorldVelocity.Position == new Vector2(-2, 0));*/
            Assert.IsTrue(p.GetTransform().Position == new Vector2(9, 10));
            Assert.IsTrue(p.GetVelocity().Position == new Vector2(-2, 0));
        }
Example #2
0
        public void UpdateWorldTransformTest0()
        {
            /*Scene scene = new Scene();
            NodePortalable parent = new NodePortalable(scene);

            FloatPortal p0 = new FloatPortal(scene);

            p0.SetParent(parent);

            FloatPortal p1 = new FloatPortal(scene);
            FloatPortal p2 = new FloatPortal(scene);

            p0.SetTransform(new Transform2(new Vector2(5, 0)));
            p1.SetTransform(new Transform2(new Vector2(-5, 0)));
            p2.SetTransform(new Transform2(new Vector2(0, 5)));

            Portal.SetLinked(p1, p2);

            PortalCommon.UpdateWorldTransform(scene);*/

            Scene scene = new Scene();
            Actor ground = CreateGround(scene);
            FloatPortal portal = new FloatPortal(scene);
            portal.Name = "enter";
            portal.SetTransform(new Transform2(new Vector2(3, 0)));
            portal.SetParent(ground);
            FloatPortal portalExit = new FloatPortal(scene);
            portalExit.Name = "exit";
            portalExit.Linked = portal;
            portal.Linked = portal;
            PortalCommon.UpdateWorldTransform(scene);

            //Assert.IsTrue()
        }
Example #3
0
        public void GetLocalMassDataTest2()
        {
            Scene scene = new Scene();
            scene.Gravity = new Vector2();
            Actor actor = new Actor(scene, PolygonFactory.CreateRectangle(4, 1));

            FloatPortal p0 = new FloatPortal(scene);
            FloatPortal p1 = new FloatPortal(scene);
            Portal.SetLinked(p0, p1);

            p0.SetTransform(new Transform2(new Vector2(1, 0)));
            p1.SetTransform(new Transform2(new Vector2(50, 0)));

            FloatPortal p2 = new FloatPortal(scene);
            FloatPortal p3 = new FloatPortal(scene);
            Portal.SetLinked(p2, p3);

            p2.SetTransform(new Transform2(new Vector2(-1, 0)));
            p3.SetTransform(new Transform2(new Vector2(-50, 0)));

            scene.Step();

            MassData result = GetLocalMassData(actor.Body);

            Assert.AreEqual(actor.GetMass() / 2.0f, result.Mass, Delta);
            Assert.IsTrue((new Vector2() - result.Centroid).Length < Delta);
        }
Example #4
0
 public Entity(Scene scene)
     : base(scene)
 {
     Transform2 transform = GetTransform();
     SetTransform(transform);
     Visible = true;
 }
Example #5
0
        public void ChangeCentroidTest0()
        {
            Scene scene = new Scene();
            FloatPortal portal0 = new FloatPortal(scene);
            FloatPortal portal1 = new FloatPortal(scene);
            portal0.SetTransform(new Transform2(new Vector2(0, 0), 1, (float)Math.PI / 2));
            portal1.SetTransform(new Transform2(new Vector2(10, 0), 2, (float)Math.PI / 2));
            Portal.SetLinked(portal0, portal1);
            PortalCommon.UpdateWorldTransform(scene);

            World world = new World(new Xna.Vector2(0, 0f));
            Body body0 = Factory.CreateBox(world, new Vector2(1, 2));
            Body body1 = Factory.CreateBox(world, new Vector2(1, 2));

            Xna.Vector2 startPos = new Xna.Vector2(0, 1);
            body0.Position = startPos;
            body1.Position = startPos;
            Portal.Enter(portal0, body1);

            PortalJoint portalJoint = Factory.CreatePortalJoint(world, body0, body1, portal0);

            for (int i = 0; i < 10; i++)
            {
                body0.LocalCenter += new Xna.Vector2(0, 0.1f);
                body1.LocalCenter += new Xna.Vector2(0, 0.1f);

                world.Step(1 / (float)60);
                Assert.IsTrue(body0.Position == startPos);
            }
        }
Example #6
0
 public Wall WallCreate(Scene scene)
 {
     Wall wall = new Wall(scene, Vertices);
     NetworkHelper.SetServerId(wall, ServerId);
     wall.SetTransform(Transform);
     return wall;
 }
Example #7
0
 public Actor(Scene scene, IList<Vector2> vertices, Transform2 transform)
     : base(scene)
 {
     _vertices = vertices.ToArray();
     _scale = transform.Scale;
     Body = Factory.CreatePolygon(Scene.World, transform, Vertices);
     BodyExt.SetData(Body, this);
     SetBodyType(BodyType.Dynamic);
 }
Example #8
0
        public void GetFixtureEdgeCoordTest1()
        {
            Scene scene = new Scene();
            Vector2[] vertices = GetVertices();
            Actor actor = new Actor(scene, vertices);
            PolygonCoord polyCoord = new PolygonCoord(4, 0.4f);
            FixtureCoord fixtureCoord = FixtureExt.GetFixtureEdgeCoord(actor, polyCoord);

            Assert.IsTrue(fixtureCoord.EdgeT == polyCoord.EdgeT);
            Assert.IsTrue(PolygonExt.GetTransform(vertices, polyCoord) == PolygonExt.GetTransform(fixtureCoord));
        }
Example #9
0
        public void GetLocalMassDataTest0()
        {
            Scene scene = new Scene();
            scene.Gravity = new Vector2();
            Actor actor = new Actor(scene, PolygonFactory.CreateRectangle(4, 1));

            MassData result = GetLocalMassData(actor.Body);

            Assert.AreEqual(actor.GetMass(), result.Mass);
            Assert.AreEqual(new Vector2(), result.Centroid);
        }
Example #10
0
        public void GetFixtureEdgeCoordTest4()
        {
            Scene scene = new Scene();
            Vector2[] vertices = GetVertices();
            Actor actor = new Actor(scene, vertices);
            actor.SetTransform(new Transform2(new Vector2(), -1, 0, true));
            PolygonCoord polyCoord = new PolygonCoord(4, 0.4f);
            FixtureCoord fixtureCoord = FixtureExt.GetFixtureEdgeCoord(actor, polyCoord);

            Assert.IsTrue(PolygonExt.GetTransform(vertices, polyCoord) == PolygonExt.GetTransform(fixtureCoord));
        }
Example #11
0
        public void GetPortalTransformTest2()
        {
            Scene scene = new Scene();
            FloatPortal p0 = new FloatPortal(scene);
            p0.SetTransform(new Transform2(new Vector2(1, 2), 4, 23));
            FloatPortal p1 = new FloatPortal(scene);
            p1.SetTransform(new Transform2(new Vector2(4, -1), 1.4f, -3, true));
            PortalCommon.UpdateWorldTransform(scene);

            Transform2 result = Portal.GetLinkedTransform(p0, p1);
            Assert.IsTrue(Matrix4Ext.AlmostEqual(result.GetMatrix(), Portal.GetLinkedMatrix(p0, p1)));
        }
Example #12
0
        public Client(IPEndPoint serverAddress, IController controller, INetClient client)
        {
            _controller = controller;

            _client = client;
            _client.Start();

            _client.Connect(serverAddress);

            Scene = new Scene();
            Scene.Gravity = new Vector2();
        }
Example #13
0
        public void CloneTest0()
        {
            Scene scene = new Scene();
            SceneNode node0 = new SceneNode(scene);

            DeepClone.Clone(node0);

            SceneNode node0Clone = scene.SceneNodes[1];

            Assert.IsTrue(node0Clone.Parent == null);
            Assert.IsTrue(node0Clone.Children.Count == 0);
            Assert.IsTrue(scene.SceneNodes.Count == 2);
        }
Example #14
0
        public void StepTest0()
        {
            Scene scene = new Scene();
            Portalable p = new Portalable(scene);
            Transform2 start = new Transform2(new Vector2(1, 5), 2.3f, 3.9f);
            Transform2 velocity = Transform2.CreateVelocity(new Vector2(-3, 4), 23, 0.54f);
            p.SetTransform(start);
            p.SetVelocity(velocity);
            PortalCommon.UpdateWorldTransform(new IPortalCommon[] { p });
            SimulationStep.Step(new IPortalCommon[] { p }, new IPortal[0], 1, null);

            Assert.IsTrue(p.GetTransform().AlmostEqual(start.Add(velocity)));
        }
Example #15
0
 public Actor CreateGround(Scene scene)
 {
     Vector2[] verts = new Vector2[] {
         new Vector2(),
         new Vector2(3, 0),
         new Vector2(3, 3),
         new Vector2(2.5f, 4),
         new Vector2(0, 3),
     };
     Actor ground = Factory.CreateEntityPolygon(scene, new Transform2(), verts);
     ground.Name = "ground";
     return ground;
 }
Example #16
0
        public void GetCentroidTest0()
        {
            Scene scene = new Scene();
            Actor actor = new Actor(scene, PolygonFactory.CreateRectangle(0.5f, 3f));
            Vector2 centroid = actor.GetCentroid();
            foreach (BodyData data in Tree<BodyData>.GetAll(BodyExt.GetData(actor.Body)))
            {
                data.Body.LocalCenter = actor.Body.GetLocalPoint((Xna.Vector2)centroid);
            }

            //LocalCenter and centroid should be the same since the actor is on the origin with no rotation.
            Assert.IsTrue((Xna.Vector2)actor.Body.LocalCenter == (Xna.Vector2)centroid);
            Assert.IsTrue(centroid == new Vector2());
        }
Example #17
0
 public Scene CreateSceneWithPortal(out Actor ground)
 {
     Scene scene = new Scene();
     ground = CreateGround(scene);
     scene.World.ProcessChanges();
     Fixture fixture = ground.Body.FixtureList[0];
     FixturePortal portal = new FixturePortal(scene, ground, new PolygonCoord(0, 0.3f));
     FloatPortal portalExit = new FloatPortal(scene);
     portalExit.Linked = portal;
     portal.Linked = portal;
     PortalCommon.UpdateWorldTransform(scene);
     FixtureExt.GetData(fixture).ProcessChanges();
     return scene;
 }
Example #18
0
        public void GetPortalTransformTest0()
        {
            Scene scene = new Scene();
            FloatPortal p0 = new FloatPortal(scene);
            p0.SetTransform(new Transform2(new Vector2(1, 2), 1, 0));
            FloatPortal p1 = new FloatPortal(scene);
            p1.SetTransform(new Transform2(new Vector2(0, 0), 1f, 0));
            PortalCommon.UpdateWorldTransform(scene);

            Transform2 t = Portal.GetLinkedTransform(p0, p1);
            Matrix4 result = t.GetMatrix();
            Matrix4 expected = Portal.GetLinkedMatrix(p0, p1);
            Assert.IsTrue(Matrix4Ext.AlmostEqual(result, expected));
        }
Example #19
0
        public void CloneTest1()
        {
            Scene scene = new Scene();
            SceneNode node0 = new SceneNode(scene);
            SceneNode node1 = new SceneNode(scene);
            node1.SetParent(node0);

            DeepClone.Clone(node0);

            SceneNode node0Clone = scene.SceneNodes[2];

            Assert.IsTrue(node0Clone.Parent == null);
            Assert.IsTrue(node0Clone.Children.Count == 1);
            Assert.IsTrue(node0Clone.Children[0].Parent == node0Clone);
            Assert.IsTrue(scene.SceneNodes.Count == 4);
        }
Example #20
0
        public void GetFixtureEdgeCoordTest2()
        {
            Scene scene = new Scene();
            Vector2[] vertices = new Vector2[] {
                new Vector2(0, 0),
                new Vector2(1, 0),
                new Vector2(1, 1),
                new Vector2(0, 1)
            };
            Actor actor = new Actor(scene, vertices);
            actor.SetTransform(new Transform2(new Vector2(), 1, 0, true));
            PolygonCoord polyCoord = new PolygonCoord(0, 0f);
            FixtureCoord fixtureCoord = FixtureExt.GetFixtureEdgeCoord(actor, polyCoord);

            Transform2 expected = PolygonExt.GetTransform(actor.GetWorldVertices(), polyCoord);
            Transform2 result = PolygonExt.GetTransform(fixtureCoord);
            Assert.IsTrue(expected.AlmostEqual(result));
        }
Example #21
0
        public void GetLocalMassDataTest1()
        {
            Scene scene = new Scene();
            scene.Gravity = new Vector2();
            Actor actor = new Actor(scene, PolygonFactory.CreateRectangle(4, 1));

            FloatPortal enter = new FloatPortal(scene);
            FloatPortal exit = new FloatPortal(scene);
            Portal.SetLinked(enter, exit);

            enter.SetTransform(new Transform2(new Vector2(1, 0)));
            exit.SetTransform(new Transform2(new Vector2(50, 0)));

            scene.Step();

            MassData result = GetLocalMassData(actor.Body);

            Assert.AreEqual(actor.GetMass() * 3.0f / 4.0f, result.Mass, Delta);
            Assert.IsTrue((new Vector2(-0.5f, 0) - result.Centroid).Length < Delta);
        }
Example #22
0
        public void AsymmetricPortalSizeBugTest()
        {
            Scene scene = new Scene();
            scene.Gravity = new Vector2();
            FloatPortal portal0 = new FloatPortal(scene);
            FloatPortal portal1 = new FloatPortal(scene);
            portal0.SetTransform(new Transform2(new Vector2(0, 0), 1, (float)Math.PI / 2));
            portal1.SetTransform(new Transform2(new Vector2(10, 0), 2, (float)Math.PI / 2, true));
            Portal.SetLinked(portal0, portal1);
            PortalCommon.UpdateWorldTransform(scene);

            Actor actor = new Actor(scene, PolygonFactory.CreateRectangle(1, 4));
            Vector2 startPos = new Vector2(0, 1);
            actor.SetTransform(new Transform2(startPos));

            for (int i = 0; i < 10; i++)
            {
                scene.Step(1 / (float)60);
                Assert.IsTrue((actor.GetTransform().Position - startPos).Length < 0.001f);
            }
        }
Example #23
0
        public void EnterTest0()
        {
            Scene scene = new Scene();
            NodePortalable parent = new NodePortalable(scene);
            FloatPortal portal = new FloatPortal(scene);
            portal.SetTransform(new Transform2(new Vector2(5, 0)));
            portal.SetParent(parent);

            FloatPortal enter = new FloatPortal(scene);
            FloatPortal exit = new FloatPortal(scene);

            enter.SetTransform(new Transform2(new Vector2(2, 0)));
            exit.SetTransform(new Transform2(new Vector2(100, 5)));

            enter.Linked = exit;
            exit.Linked = enter;

            PortalCommon.UpdateWorldTransform(scene);
            Portal.Enter(enter, parent, 0.5f);
            PortalCommon.UpdateWorldTransform(scene);
            Assert.IsTrue(new Transform2(new Vector2(5, 0)).AlmostEqual(portal.WorldTransform));
        }
Example #24
0
        public void PortalJointTest0()
        {
            Scene scene = new Scene();
            FloatPortal portal0 = new FloatPortal(scene);
            FloatPortal portal1 = new FloatPortal(scene);
            portal0.SetTransform(new Transform2(new Vector2(), 1, 0, true));
            portal1.SetTransform(new Transform2(new Vector2(), 1, 0));
            portal0.Linked = portal1;
            portal1.Linked = portal0;
            PortalCommon.UpdateWorldTransform(scene);

            World world = new World(new Xna.Vector2(0, 0f));
            Body body0 = Factory.CreateBox(world, new Vector2(1, 2));
            Body body1 = Factory.CreateBox(world, new Vector2(1, 2));
            body0.IgnoreCollisionWith(body1);
            PortalJoint portalJoint = Factory.CreatePortalJoint(world, body0, body1, portal0);

            body0.ApplyLinearImpulse(new Xna.Vector2(1, 0), new Xna.Vector2(0, 0));
            world.Step(1 / (float)60);

            AssertPortalJoint(body0, body1, portal0);
        }
Example #25
0
        public void GetCentroidTest2()
        {
            Scene scene = new Scene();
            scene.Gravity = new Vector2();
            Actor actor = new Actor(scene, PolygonFactory.CreateRectangle(0.5f, 3f));

            FloatPortal enter = new FloatPortal(scene);
            FloatPortal exit = new FloatPortal(scene);
            Portal.SetLinked(enter, exit);
            enter.SetTransform(new Transform2(new Vector2(0, 1), 1, (float)(Math.PI / 2)));
            exit.SetTransform(new Transform2(new Vector2(5, 0), 2));

            scene.Step();

            Vector2 centroid = actor.GetCentroid();
            foreach (BodyData data in Tree<BodyData>.GetAll(BodyExt.GetData(actor.Body)))
            {
                data.Body.LocalCenter = actor.Body.GetLocalPoint((Xna.Vector2)centroid);
            }

            Assert.IsTrue((actor.Body.LocalCenter - (Xna.Vector2)centroid).Length() < 0.0001f);
            Assert.IsTrue((centroid - new Vector2(0, 1.6959f)).Length < 0.0001f);
        }
Example #26
0
 public Actor(Scene scene, IList<Vector2> vertices)
     : this(scene, vertices, new Transform2())
 {
 }
Example #27
0
 public PhyicsListener(Scene scene)
 {
     Scene = scene;
     Scene.World.ContactManager.PreSolve = PreSolveListener;
 }
Example #28
0
 public NodePortalable(Scene scene)
     : base(scene)
 {
 }
Example #29
0
 public void IsInsideFOVTest7()
 {
     float x = 0;
     float y = 0;
     for (double i = 0; i < Math.PI * 2; i += Math.PI / 20)
     {
         Scene scene = new Scene();
         FloatPortal p0 = new FloatPortal(scene);
         Entity node = new Entity(scene);
         Transform2.SetPosition(node, new Vector2(x, y));
         Transform2.SetRotation(node, (float)(i + Math.PI / 4));
         p0.SetParent(node);
         PortalCommon.UpdateWorldTransform(scene);
         Vector2 viewPoint = new Vector2(x + (float)Math.Cos(i), y + (float)Math.Sin(i));
         Vector2 lookPoint = new Vector2(x + (float)Math.Cos(i) * 2, y + (float)Math.Sin(i) * 2);
         LineF line = new LineF(Vector2Ext.Transform(Portal.GetVerts(p0), p0.GetWorldTransform().GetMatrix()));
         Assert.IsFalse(line.IsInsideFOV(viewPoint, lookPoint));
     }
 }
Example #30
0
        public void PathIntersectionsTest0()
        {
            Scene scene = new Scene();
            FloatPortal p0 = new FloatPortal(scene);
            p0.SetTransform(new Transform2(new Vector2(1, 0)));
            FloatPortal p1 = new FloatPortal(scene);
            p1.SetTransform(new Transform2(new Vector2(10, -1)));
            p0.Linked = p1;
            p1.Linked = p0;

            PortalCommon.UpdateWorldTransform(scene);

            LineF ray = new LineF(new Vector2(0, 0), new Vector2(8, -1));
            PortalPath path = new PortalPath();
            path.Enter(p0);
            var intersections = Portal.PathIntersections(path, ray);
            Assert.AreEqual(1, intersections.Length);
            Assert.AreEqual(0.5, intersections[0].TFirst, PATH_INTERSECTION_DELTA);
            Assert.AreEqual(1.0 / 3, intersections[0].TLast, PATH_INTERSECTION_DELTA);
        }