void SetupEntityUpdateHandlers() { var ownEntities = new PlayerGroup(ESystem, Nick); OnTick += () => { foreach (var e in updatedEntities) { SendToAll(e, Net.DeliveryMethod.Default); } foreach (var e in ownEntities.Entities) { SendToAll(new EntityId(e.Id), Net.DeliveryMethod.Default); } }; foreach (var e in ownEntities.Entities) { e.OnChanged += () => updatedEntities.Add(e); } ownEntities.OnAddEntity += e => e.OnChanged += () => updatedEntities.Add(e); AddHandler((string sender, Entity e) => { if (ESystem[e.Id] == null) { ESystem.Add(e); } else { UpdateEntity(ESystem[e.Id], e); } }); AddHandler((string sender, EntityId eId) => { if (ESystem[eId.id] == null) { Send(sender, new EntityRequest(eId.id), Net.DeliveryMethod.Default); } }); AddHandler((string sender, EntityRequest req) => { Send(sender, ESystem[req.id], Net.DeliveryMethod.Default); }); }
public Server() : base() { World.OnNewRoom += (room) => { World[room].OnLoad += (int fromX, int fromY, int toX, int toY) => { List <ResourcedTexture> texs = new List <ResourcedTexture>(); texs.Add(new ResourcedTexture("Terrain/Grass.png")); texs.Add(new ResourcedTexture("Terrain/DarkGrass.png")); for (int i = fromX; i < toX; i++) { for (int j = fromY; j < toY; j++) { var v = World[room].Terrain[i, j]; v.Texture = GRandom.Choice(texs); v.Height = GRandom.NextDouble(0, -0.2); World[room].Terrain[i, j] = v; } } for (int i = 0; i < 1; i++) { var tree = new Entity(GenId()); tree.Set(new Components.Position(room, new Vec3(GRandom.NextDouble(fromX, toX), GRandom.NextDouble(fromY, toY), 0), 0)); tree.Set(new Components.Image(new ResourcedTexture("Decoration/Tree.png"), 4)); ESystem.Add(tree); } }; }; OnPlayerConnected += (string player) => { if (!playerData.ContainsKey(player)) { playerData[player] = new PlayerData(player, this); } Send(player, playerData[player], QE.Net.DeliveryMethod.Reliable); }; World.AddRoom(Room.DEFAULT); }