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)); }
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() }
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); }
public Entity(Scene scene) : base(scene) { Transform2 transform = GetTransform(); SetTransform(transform); Visible = true; }
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); } }
public Wall WallCreate(Scene scene) { Wall wall = new Wall(scene, Vertices); NetworkHelper.SetServerId(wall, ServerId); wall.SetTransform(Transform); return wall; }
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); }
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)); }
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); }
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)); }
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))); }
public Client(IPEndPoint serverAddress, IController controller, INetClient client) { _controller = controller; _client = client; _client.Start(); _client.Connect(serverAddress); Scene = new Scene(); Scene.Gravity = new Vector2(); }
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); }
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))); }
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; }
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()); }
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; }
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)); }
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); }
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)); }
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); }
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); } }
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)); }
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); }
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); }
public Actor(Scene scene, IList<Vector2> vertices) : this(scene, vertices, new Transform2()) { }
public PhyicsListener(Scene scene) { Scene = scene; Scene.World.ContactManager.PreSolve = PreSolveListener; }
public NodePortalable(Scene scene) : base(scene) { }
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)); } }
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); }