private void addComponent(WorldData World, AddComponentClientDTO data) { if (World.Entities.ContainsKey(data.TargetID)) { UMComponentDTO exsisting = World.Entities[data.TargetID].Components.Where((x) => { return(x.EntityID == data.EntityID); }).FirstOrDefault(); if (exsisting != null) { Console.WriteLine($"Component of type {data.EntityID} already exsists on entity {data.TargetID}"); return; } UMComponentDTO nComponent = new UMComponentDTO(); nComponent.EntityID = data.EntityID; nComponent.TargetID = data.TargetID; nComponent.ID = World.componentIdCounter; World.componentIdCounter++; World.Entities[data.TargetID].Components.Add(nComponent); World.EntityComponents.Add(nComponent.ID, nComponent); using (DarkRiftWriter entityWriter = DarkRiftWriter.Create()) { AddComponentServerDTO outData = new AddComponentServerDTO(); outData.ID = nComponent.ID; outData.EntityID = nComponent.EntityID; outData.TargetID = nComponent.TargetID; entityWriter.Write(outData); using (Message addcompMessage = Message.Create(Tags.AddComponentTag, entityWriter)) { foreach (IClient c in World.GetClients()) { c.SendMessage(addcompMessage, SendMode.Reliable); } } } } else { Console.WriteLine("Trying to add component to non exsistant entity: " + data.TargetID); } }
private void Client_MessageReceived(object sender, MessageReceivedEventArgs e) { using (Message message = e.GetMessage() as Message) { WorldData World = WorldManager.clients[e.Client].World; if (message.Tag == Tags.SpawnEntityTag) { using (DarkRiftReader reader = message.GetReader()) { while (reader.Position < reader.Length) { SpawnEntityClientDTO data = reader.ReadSerializable <SpawnEntityClientDTO>(); this.SpawnEntity(World, data); } } } else if (message.Tag == Tags.SpawnProceduralShapeEntityTag) { using (DarkRiftReader reader = message.GetReader()) { while (reader.Position < reader.Length) { SpawnProceduralShapeEntityClientDTO data = reader.ReadSerializable <SpawnProceduralShapeEntityClientDTO>(); Console.WriteLine("Got spawn procedural message"); this.SpawnProceduralShapeEntity(World, data); } } } else if (message.Tag == Tags.DespawnEntityTag) { using (DarkRiftReader reader = message.GetReader()) { while (reader.Position < reader.Length) { uint id = reader.ReadUInt32(); this.DespawnEntity(World, id); } } } else if (message.Tag == Tags.SetEntityParentTag) { using (DarkRiftReader reader = message.GetReader()) { while (reader.Position < reader.Length) { SetParentDTO data = reader.ReadSerializable <SetParentDTO>(); SetParent(World, data); } } } else if (message.Tag == Tags.SetStateEntityTag) { using (DarkRiftReader reader = message.GetReader()) { while (reader.Position < reader.Length) { uint id = reader.ReadUInt32(); ushort newState = reader.ReadUInt16(); SetState(World, id, newState); } } } else if (message.Tag == Tags.TransformEntityTag) { using (DarkRiftReader reader = message.GetReader()) { while (reader.Position < reader.Length) { uint id = reader.ReadUInt32(); float x = reader.ReadSingle(); float y = reader.ReadSingle(); float z = reader.ReadSingle(); float rx = reader.ReadSingle(); float ry = reader.ReadSingle(); float rz = reader.ReadSingle(); float sx = reader.ReadSingle(); float sy = reader.ReadSingle(); float sz = reader.ReadSingle(); SetTransform(World, id, x, y, z, rx, ry, rz, sx, sy, sz); } } } else if (message.Tag == Tags.PhysicsUpdateEntityTag) { if (e.Client == WorldManager.clients[e.Client].World.PhysicsHost) { PhysicsUpdate(sender, e, WorldManager.clients[e.Client].World); } } else if (message.Tag == Tags.SetPhysicsEntityTag) { using (DarkRiftReader reader = message.GetReader()) { while (reader.Position < reader.Length) { //Console.WriteLine("recieved physmessage"); SetPhysicsDTO data = reader.ReadSerializable <SetPhysicsDTO>(); setPhysics(World, data); } } } else if (message.Tag == Tags.AddComponentTag) { using (DarkRiftReader reader = message.GetReader()) { while (reader.Position < reader.Length) { //Console.WriteLine("recieved physmessage"); AddComponentClientDTO data = reader.ReadSerializable <AddComponentClientDTO>(); addComponent(World, data); } } } else if (message.Tag == Tags.RemoveComponentTag) { using (DarkRiftReader reader = message.GetReader()) { while (reader.Position < reader.Length) { //Console.WriteLine("recieved physmessage"); RemoveComponentDTO data = reader.ReadSerializable <RemoveComponentDTO>(); removeComponent(World, data); } } } else if (message.Tag == Tags.SetComponentPropertyTag) { using (DarkRiftReader reader = message.GetReader()) { //while (reader.Position < reader.Length) //{ ComponentPropertyDTO data = reader.ReadSerializable <ComponentPropertyDTO>(); setComponentProperty(World, data); //} } } } }