Ejemplo n.º 1
0
        private void RenderObject(LatipiumObject obj, Com.Latipium.Core.Tuple <object, object> data, IObjectRenderer objectR, IColorRenderer colorR)
        {
            Com.Latipium.Core.Tuple <float, float, float> position = obj.InvokeFunction <Com.Latipium.Core.Tuple <float, float, float>, Com.Latipium.Core.Tuple <float, float, float> >("Position", null);
            float[] transform = obj.InvokeFunction <float[], float[]>("Transform", null);
            if (position != null)
            {
                GL.Translate(position.Object1, position.Object2, position.Object3);
            }
            if (transform != null)
            {
                GL.MultMatrix(transform);
            }
            int len = objectR.Start(data.Object1);

            if (colorR == null)
            {
                for (int i = 0; i < len; ++i)
                {
                    objectR.Vertex(i);
                }
            }
            else
            {
                colorR.Start(data.Object2);
                for (int i = 0; i < len; ++i)
                {
                    colorR.Color(i);
                    objectR.Vertex(i);
                }
            }
            objectR.End();
        }
Ejemplo n.º 2
0
 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);
             }
         }
     }
 }
Ejemplo n.º 3
0
 public void Removed(LatipiumObject realm)
 {
     Systems.Remove(realm);
     if (RealmRemoved != null)
     {
         RealmRemoved(realm);
     }
 }
Ejemplo n.º 4
0
 public void Load(LatipiumObject obj)
 {
     Objects[obj.GetType().FullName] = obj;
     if (ObjectLoaded != null)
     {
         ObjectLoaded(obj);
     }
 }
Ejemplo n.º 5
0
 public Com.Latipium.Core.Tuple <object, object> GetRenderData(LatipiumObject instance)
 {
     return(new Com.Latipium.Core.Tuple <object, object>(new float[] {
         -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f,
         1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f,
         1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f,
         1.0f, 1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f,
         -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f,
         1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f,
         -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f,
         1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f,
         1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f,
         1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f,
         1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f,
         1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f
     }, new Color[] {
         Color.FromArgb(255, 0, 0),
         Color.FromArgb(255, 0, 0),
         Color.FromArgb(255, 0, 0),
         Color.FromArgb(190, 63, 0),
         Color.FromArgb(190, 63, 0),
         Color.FromArgb(190, 63, 0),
         Color.FromArgb(127, 127, 0),
         Color.FromArgb(127, 127, 0),
         Color.FromArgb(127, 127, 0),
         Color.FromArgb(63, 190, 0),
         Color.FromArgb(63, 190, 0),
         Color.FromArgb(63, 190, 0),
         Color.FromArgb(0, 255, 0),
         Color.FromArgb(0, 255, 0),
         Color.FromArgb(0, 255, 0),
         Color.FromArgb(0, 190, 63),
         Color.FromArgb(0, 190, 63),
         Color.FromArgb(0, 190, 63),
         Color.FromArgb(0, 127, 127),
         Color.FromArgb(0, 127, 127),
         Color.FromArgb(0, 127, 127),
         Color.FromArgb(63, 190, 0),
         Color.FromArgb(63, 190, 0),
         Color.FromArgb(63, 190, 0),
         Color.FromArgb(0, 0, 255),
         Color.FromArgb(0, 0, 255),
         Color.FromArgb(0, 0, 255),
         Color.FromArgb(63, 0, 190),
         Color.FromArgb(63, 0, 190),
         Color.FromArgb(63, 0, 190),
         Color.FromArgb(127, 0, 127),
         Color.FromArgb(127, 0, 127),
         Color.FromArgb(127, 0, 127),
         Color.FromArgb(190, 0, 63),
         Color.FromArgb(190, 0, 63),
         Color.FromArgb(190, 0, 63)
     }));
 }
Ejemplo n.º 6
0
 public void Removed(IEnumerable <LatipiumObject> objs, LatipiumObject realm)
 {
     Systems[realm].RemoveObjects(objs);
     if (ObjectRemoved != null)
     {
         foreach (LatipiumObject obj in objs)
         {
             ObjectRemoved(obj, realm);
         }
     }
 }
Ejemplo n.º 7
0
 internal ObjectImpl(LatipiumObject type, Guid guid)
 {
     Type      = type;
     Guid      = guid;
     Position  = new Com.Latipium.Core.Tuple <float, float, float>(0, 0, 0);
     Transform = new float[] {
         1, 0, 0, 0,
         0, 1, 0, 0,
         0, 0, 1, 0,
         0, 0, 0, 1
     };
 }
Ejemplo n.º 8
0
 public void LoadWorld(LatipiumObject world)
 {
     World     = world;
     GetRealms = World.GetFunction <IEnumerable <LatipiumObject> >("GetRealms");
     if (GetRealms != null)
     {
         foreach (LatipiumObject realm in GetRealms())
         {
             Added(realm);
         }
     }
 }
Ejemplo n.º 9
0
        public LatipiumObject Generate()
        {
            if (CreateWorld == null || CreateRealm == null || CreateObject == null)
            {
                return(null);
            }
            LatipiumObject world = CreateWorld();
            LatipiumObject realm = CreateRealm("Com.Latipium.Realms.Default");

            world.InvokeProcedure <LatipiumObject>("AddRealm", realm);
            LatipiumObject cube = CreateObject(GetObject("Com.Latipium.TestingObjects.CubeObject"));

            realm.InvokeProcedure <LatipiumObject>("AddObject", cube);
            return(world);
        }
Ejemplo n.º 10
0
        public void Added(LatipiumObject realm)
        {
            PhysicsSystem system = new PhysicsSystem();
            IEnumerable <LatipiumObject> objs = realm.InvokeFunction <IEnumerable <LatipiumObject> >("GetObjects");

            if (objs != null)
            {
                system.AddObjects(objs);
            }
            Systems.Add(realm, system);
            if (RealmAdded != null)
            {
                RealmAdded(realm);
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Gets extension data stored with this object.
 /// </summary>
 /// <returns>The data.</returns>
 /// <param name="name">The name of the object.</param>
 /// <typeparam name="T">The type of data.</typeparam>
 public T GetData <T>(string name) where T : LatipiumObject
 {
     if (Data.ContainsKey(name))
     {
         LatipiumObject data = Data[name];
         if (data is T)
         {
             return((T)data);
         }
         else
         {
             return(default(T));
         }
     }
     else
     {
         return(default(T));
     }
 }
Ejemplo n.º 12
0
 public LatipiumObject GetPlayerInstance(string name)
 {
     lock ( WorldLock ) {
         if (Players.ContainsKey(name))
         {
             return(Players[name]);
         }
         else if (GetPlayer == null)
         {
             return(null);
         }
         else
         {
             LatipiumObject player = GetPlayer();
             LatipiumObject obj    = WorldModule.ConstructObject(player);
             Realms.First().InvokeProcedure <LatipiumObject>("AddObject", obj);
             //player.InvokeFunction<string, string>("Name", name);
             //player.InvokeFunction<LatipiumObject, LatipiumObject>("Object", obj);
             return(Players[name] = obj);
         }
     }
 }
Ejemplo n.º 13
0
 public Com.Latipium.Core.Tuple <IEnumerable <LatipiumObject>, IEnumerable <LatipiumObject> > Update(IEnumerable <LatipiumObject> objs)
 {
     if (Handler != null)
     {
         LatipiumObject obj = objs.First(o => o == Object && Handler.Object == o);
         if (obj != null && Position != null && Environment.TickCount > LastFrameTime)
         {
             float delta = (((float)Environment.TickCount) - (float)LastFrameTime) / 1000f;
             LastFrameTime = Environment.TickCount;
             if (Rotate != null)
             {
                 float x = Handler.Rotation.Object1;
                 float y = Handler.Rotation.Object2;
                 if (x != 0)
                 {
                     float xs = x * Sensitivity;
                     XRot -= xs;
                     Rotate(xs, 0, -1, 0);
                     Handler.Rotation.Object1 -= x;
                 }
                 if (y != 0)
                 {
                     Rotate(-y * Sensitivity, (float)Math.Cos(XRot), 0, (float)Math.Sin(-XRot));
                     Handler.Rotation.Object2 -= y;
                 }
             }
             Com.Latipium.Core.Tuple <float, float, float> pos = Position(null);
             delta *= Speed;
             float sin  = (float)Math.Sin(XRot);
             float nsin = (float)Math.Sin(-XRot);
             float cos  = (float)Math.Cos(XRot);
             pos.Object1 += Handler.Translation.Object3 * delta * sin + Handler.Translation.Object1 * delta * cos;
             pos.Object2 += Handler.Translation.Object2 * delta;
             pos.Object3 += Handler.Translation.Object3 * delta * cos + Handler.Translation.Object1 * delta * nsin;
             Position(pos);
         }
     }
     return(null);
 }
Ejemplo n.º 14
0
 public void SetPlayer(LatipiumObject player)
 {
     Renderer.Player = player;
 }
Ejemplo n.º 15
0
 public void LoadWorld(LatipiumObject world)
 {
     Renderer.World = world;
 }
Ejemplo n.º 16
0
        public void Loop()
        {
            int update = Environment.TickCount;

            while (true)
            {
                float time = Environment.TickCount - update;
                update = Environment.TickCount;
                Dictionary <LatipiumObject, List <LatipiumObject> > objects = new Dictionary <LatipiumObject, List <LatipiumObject> >();
                foreach (LatipiumObject realm in GetRealms())
                {
                    objects.Clear();
                    List <LatipiumObject> additions;
                    if (Additions.ContainsKey(realm))
                    {
                        additions = Additions[realm];
                    }
                    else
                    {
                        additions        = new List <LatipiumObject>();
                        Additions[realm] = additions;
                    }
                    List <LatipiumObject> removals;
                    if (Removals.ContainsKey(realm))
                    {
                        removals = Removals[realm];
                    }
                    else
                    {
                        removals        = new List <LatipiumObject>();
                        Removals[realm] = removals;
                    }
                    foreach (LatipiumObject obj in realm.InvokeFunction <IEnumerable <LatipiumObject> >("GetObjects"))
                    {
                        LatipiumObject        type = obj.InvokeFunction <LatipiumObject>("Type");
                        List <LatipiumObject> list;
                        if (objects.ContainsKey(type))
                        {
                            list = objects[type];
                        }
                        else
                        {
                            list          = new List <LatipiumObject>();
                            objects[type] = list;
                        }
                        list.Add(obj);
                    }
                    foreach (LatipiumObject type in objects.Keys)
                    {
                        Com.Latipium.Core.Tuple <IEnumerable <LatipiumObject>, IEnumerable <LatipiumObject> > changes = type.InvokeFunction <IEnumerable <LatipiumObject>, Com.Latipium.Core.Tuple <IEnumerable <LatipiumObject>, IEnumerable <LatipiumObject> > >("PhysicsUpdate", objects[type]);
                        if (changes != null)
                        {
                            lock ( ListLock ) {
                                if (changes.Object1 != null)
                                {
                                    additions.AddRange(changes.Object1);
                                }
                                if (changes.Object2 != null)
                                {
                                    removals.AddRange(changes.Object2);
                                }
                            }
                        }
                    }
                    Systems[realm].Step(time);
                }
            }
        }
Ejemplo n.º 17
0
 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");
 }
Ejemplo n.º 18
0
        public void Start()
        {
            LatipiumModule auth     = ModuleFactory.FindModule("Com.Latipium.Modules.Authentication");
            LatipiumModule graphics = ModuleFactory.FindModule("Com.Latipium.Modules.Graphics");
            LatipiumModule network  = ModuleFactory.FindModule("Com.Latipium.Modules.Network");
            LatipiumModule player   = ModuleFactory.FindModule("Com.Latipium.Modules.Player");
            LatipiumModule world    = ModuleFactory.FindModule("Com.Latipium.Modules.World");

            if (graphics == null)
            {
                Log.Error("Unable to find graphics module");
            }
            else
            {
                string         name = null;
                LatipiumObject w    = null;
                if (world != null)
                {
                    if (auth == null)
                    {
                        name = "Player";
                    }
                    else
                    {
                        name = auth.InvokeFunction <string>("GetUsername");
                    }
                    w = world.InvokeFunction <LatipiumObject>("CreateWorld");
                }
                Thread networkThread = null;
                if (network != null)
                {
                    Thread parent = Thread.CurrentThread;
                    networkThread = new Thread(() => {
                        network.InvokeProcedure("InitializeClient");
                        if (world != null)
                        {
                            network.InvokeProcedure <LatipiumObject>("LoadWorld", w);
                        }
                        parent.Interrupt();
                        try {
                            network.InvokeProcedure("Loop");
                        } catch (ThreadInterruptedException) {
                        } finally {
                            network.InvokeProcedure("Destroy");
                        }
                    });
                    networkThread.Start();
                    try {
                        // Will be interrupted when the network loads
                        Thread.Sleep(int.MaxValue);
                    } catch (ThreadInterruptedException) {
                    }
                }
                LatipiumObject p = null;
                if (w != null)
                {
                    p = w.InvokeFunction <string, LatipiumObject>("GetPlayer", name);
                    if (player != null && p != null)
                    {
                        player.InvokeProcedure <LatipiumObject>("HandleFor", p);
                    }
                }
                graphics.InvokeProcedure("Initialize");
                if (world != null)
                {
                    graphics.InvokeProcedure <LatipiumObject>("LoadWorld", w);
                    if (p != null)
                    {
                        graphics.InvokeProcedure <LatipiumObject>("SetPlayer", p);
                    }
                }
                try {
                    graphics.InvokeProcedure("Loop");
                } finally {
                    graphics.InvokeProcedure("Destroy");
                    if (networkThread != null)
                    {
                        networkThread.Interrupt();
                    }
                }
            }
        }
Ejemplo n.º 19
0
 public void AddRealm(LatipiumObject realm)
 {
     lock ( WorldLock ) {
         Realms.Add(realm);
     }
 }
Ejemplo n.º 20
0
 public void RemoveObject(LatipiumObject obj)
 {
     lock ( WorldLock ) {
         Objects.Remove(obj);
     }
 }
Ejemplo n.º 21
0
 private void LoadObject(LatipiumObject obj)
 {
     obj.InvokeProcedure <Action <IEnumerable <LatipiumObject> > >("Initialize", (IEnumerable <LatipiumObject> o) => {
     });
 }
Ejemplo n.º 22
0
 public void HandleFor(LatipiumObject obj)
 {
     PlayerLoader.Instance.Object = obj;
 }
Ejemplo n.º 23
0
 public void AddObject(LatipiumObject obj)
 {
     lock ( WorldLock ) {
         Objects.AddLast(obj);
     }
 }
Ejemplo n.º 24
0
 public LatipiumObject ConstructObject(LatipiumObject type)
 {
     return(new ObjectImpl(type));
 }
        public void Start()
        {
            LatipiumModule auth     = ModuleFactory.FindModule("Com.Latipium.Modules.Authentication");
            LatipiumModule graphics = ModuleFactory.FindModule("Com.Latipium.Modules.Graphics");
            LatipiumModule physics  = ModuleFactory.FindModule("Com.Latipium.Modules.Physics");
            LatipiumModule player   = ModuleFactory.FindModule("Com.Latipium.Modules.Player");
            LatipiumModule worldGen = ModuleFactory.FindModule("Com.Latipium.Modules.World.Generator");
            LatipiumModule worldSer = ModuleFactory.FindModule("Com.Latipium.Modules.World.Serialization");

            if (graphics == null)
            {
                Log.Error("Unable to find graphics module");
            }
            else
            {
                string         name  = null;
                LatipiumObject world = null;
                if (worldGen != null || worldSer != null)
                {
                    if (auth == null)
                    {
                        name = "Player";
                    }
                    else
                    {
                        name = auth.InvokeFunction <string>("GetUsername");
                    }
                    if (worldSer != null)
                    {
                        world = worldSer.InvokeFunction <LatipiumObject>("Load");
                    }
                    if (world == null && worldGen != null)
                    {
                        world = worldGen.InvokeFunction <LatipiumObject>("Generate");
                    }
                }
                LatipiumObject p = null;
                if (world != null)
                {
                    p = world.InvokeFunction <string, LatipiumObject>("GetPlayer", name);
                    if (player != null && p != null)
                    {
                        player.InvokeProcedure <LatipiumObject>("HandleFor", p);
                    }
                }
                Thread physicsThread = null;
                Thread parent        = null;
                if (physics != null)
                {
                    physicsThread = new Thread(() => {
                        physics.InvokeProcedure("Initialize");
                        if (world != null)
                        {
                            physics.InvokeProcedure <LatipiumObject>("LoadWorld", world);
                        }
                        try {
                            physics.InvokeProcedure("Loop");
                        } catch (ThreadInterruptedException) {
                        } finally {
                            physics.InvokeProcedure("Destroy");
                            if (parent != null)
                            {
                                parent.Interrupt();
                            }
                        }
                    });
                    physicsThread.Start();
                }
                graphics.InvokeProcedure("Initialize");
                if (world != null)
                {
                    graphics.InvokeProcedure <LatipiumObject>("LoadWorld", world);
                    if (p != null)
                    {
                        graphics.InvokeProcedure <LatipiumObject>("SetPlayer", p);
                    }
                }
                try {
                    graphics.InvokeProcedure("Loop");
                } finally {
                    graphics.InvokeProcedure("Destroy");
                    if (physicsThread != null)
                    {
                        parent = Thread.CurrentThread;
                        physicsThread.Interrupt();
                        try {
                            Thread.Sleep(int.MaxValue);
                        } catch (ThreadInterruptedException) {
                        }
                    }
                    if (world != null && worldSer != null)
                    {
                        worldSer.InvokeProcedure <LatipiumObject>("Save", world);
                    }
                }
            }
        }
Ejemplo n.º 26
0
 public LatipiumObject ConstructObject(LatipiumObject type, Guid guid)
 {
     return(new ObjectImpl(type, guid));
 }
Ejemplo n.º 27
0
        public void Start()
        {
            LatipiumModule network = ModuleFactory.FindModule("Com.Latipium.Modules.Network");
            LatipiumModule physics = ModuleFactory.FindModule("Com.Latipium.Modules.Physics");
            // LatipiumModule player = ModuleFactory.FindModule("Com.Latipium.Modules.Player");
            LatipiumModule worldGen = ModuleFactory.FindModule("Com.Latipium.Modules.World.Generator");
            LatipiumModule worldSer = ModuleFactory.FindModule("Com.Latipium.Modules.World.Serialization");

            if (network == null)
            {
                Log.Error("Unable to find network module");
            }
            else
            {
                LatipiumObject world = null;
                if (worldSer != null)
                {
                    world = worldSer.InvokeFunction <LatipiumObject>("Load");
                }
                if (world == null && worldGen != null)
                {
                    world = worldGen.InvokeFunction <LatipiumObject>("Generate");
                }
                Thread physicsThread = null;
                Thread parent        = null;
                if (physics != null)
                {
                    physicsThread = new Thread(() => {
                        physics.InvokeProcedure("Initialize");
                        if (world != null)
                        {
                            physics.InvokeProcedure <LatipiumObject>("LoadWorld", world);
                        }
                        try {
                            physics.InvokeProcedure("Loop");
                        } catch (ThreadInterruptedException) {
                        } finally {
                            physics.InvokeProcedure("Destroy");
                            if (parent != null)
                            {
                                parent.Interrupt();
                            }
                        }
                    });
                    physicsThread.Start();
                }
                network.InvokeProcedure("InitializeServer");
                if (world != null)
                {
                    network.InvokeProcedure <LatipiumObject>("LoadWorld", world);
                }
                try {
                    network.InvokeProcedure("Loop");
                } finally {
                    network.InvokeProcedure("Destroy");
                    if (physicsThread != null)
                    {
                        physicsThread.Interrupt();
                        try {
                            Thread.Sleep(int.MaxValue);
                        } catch (ThreadInterruptedException) {
                        }
                    }
                    if (world != null && worldSer != null)
                    {
                        worldSer.InvokeProcedure <LatipiumObject>("Save", world);
                    }
                }
            }
        }
Ejemplo n.º 28
0
 internal ObjectImpl(LatipiumObject type) : this(type, Guid.NewGuid())
 {
 }