internal void AddObjects(IEnumerable <LatipiumObject> objects) { foreach (LatipiumObject obj in objects) { LatipiumObject type = obj.InvokeFunction <LatipiumObject>("Type"); if (type != null) { if (!InitializedTypes.Contains(type)) { type.InvokeProcedure <Action <IEnumerable <LatipiumObject> > >("Initialize", UpdatedCallback); } Com.Latipium.Core.Tuple <float[], int[]> data = type.InvokeFunction <Com.Latipium.Core.Tuple <float[], int[]> >("GetPhysicsData"); if (data != null && data.Object1 != null && data.Object2 != null) { List <JVector> points = new List <JVector>(); List <TriangleVertexIndices> tris = new List <TriangleVertexIndices>(); for (int i = 0; i < data.Object1.Length - 2; i += 3) { points.Add(new JVector(data.Object1[i], data.Object1[i + 1], data.Object1[i + 2])); } for (int i = 0; i < data.Object2.Length - 2; i += 3) { tris.Add(new TriangleVertexIndices(data.Object2[i], data.Object2[i + 1], data.Object2[i + 2])); } Octree octree = new Octree(points, tris); Shape shape = new TriangleMeshShape(octree); RigidBody body = new RigidBody(shape); Func <bool> UseGravity = type.GetFunction <bool>("UseGravity"); body.AffectedByGravity = UseGravity == null || UseGravity(); Bodies.Add(obj, body); World.AddBody(body); } } } }
public void LoadWorld(LatipiumObject world) { World = world; GetRealms = World.GetFunction <IEnumerable <LatipiumObject> >("GetRealms"); if (GetRealms != null) { foreach (LatipiumObject realm in GetRealms()) { Added(realm); } } }
internal WorldBody(Com.Latipium.Core.Tuple <float[], int[]> data, LatipiumObject obj) : base(new TriangleMeshShape(CreateOctree(data))) { obj = Instance; PositionFunc = Instance.GetFunction <Com.Latipium.Core.Tuple <float, float, float>, Com.Latipium.Core.Tuple <float, float, float> >("Position"); TransformFunc = Instance.GetFunction <float[], float[]>("Transform"); }