Exemple #1
0
        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);
            });
        }
Exemple #2
0
        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);
        }
Exemple #3
0
 public PlayerGroup(ESystem esystem, string player) : base(esystem, e => e.Id.StartsWith(player + '#'))
 {
 }