public void GetPlayerInfo() { PlayerInfo playa = new PlayerInfo(PacketTypes.REQUEST); playa.id = PlayerName; playa.key = PassKey; byte[] b = NetHelpers.ConvertStructToBytes(playa); StreamController.StreamWrite(b); }
public void CreateMarker() { PlayerPerformAction p = new PlayerPerformAction(PacketTypes.SET); p.id = PlayerName; p.key = PassKey; p.ActionID = 0; StreamController.StreamWrite(NetHelpers.ConvertStructToBytes(p)); }
public void SetPlayerDirection(int dir, int moveCount) { PlayerControl playa = new PlayerControl(PacketTypes.SET); playa.id = PlayerName; playa.key = PassKey; playa.direction = dir; playa.paces = moveCount; byte[] b = NetHelpers.ConvertStructToBytes(playa); StreamController.StreamWrite(b); }
//What we should do instead is get a larger region (if not the whole region) //Reduce the amount of times the cells need paged in. public void GetRegionCells(int x1, int x2, int y1, int y2) { //pauseAsync = true; RegionInfo ri = new RegionInfo(PacketTypes.REQUEST); ri.x1 = x1; ri.x2 = x2; ri.y1 = y1; ri.y2 = y2; ri.regionDataTypes = WorldConstants.REGION_INFO_ALL; StreamController.StreamWrite(NetHelpers.ConvertStructToBytes(ri)); }
public void ObjectAdded(WorldObject o) { //At Some point restrict to only updates around players var coord = o.GetPosition(); var pi = new ObjectInfo(PacketTypes.UPDATE) { id = o.Id, objecttype = (int)o.ObjectType, x = coord.x, y = coord.y, }; Net.BroadcastToClients(NetHelpers.ConvertStructToBytes(pi)); }
private bool ProcessPlayerInfo(StreamWriter s, PacketTypes p, PlayerInfo pi) { switch (p) { case PacketTypes.REQUEST: { Player playa = WorldInterface.GetPlayer(pi.id, pi.key); if (playa != null) { PlayerID = pi.id; var coord = playa.GetPosition(); var vel = playa.GetVelocity(); pi = new PlayerInfo(PacketTypes.REQUESTED) { id = playa.Id, x = coord.x, y = coord.y, vx = vel.x, vy = vel.y }; s(NetHelpers.ConvertStructToBytes(pi)); //Send over object positions in the region surrounding our player //DON'T DO THIS YET... Still thinking about it, Client needs to support it foreach (var obj in WorldInterface.GetRegionObjects(coord.x - 10, coord.x + 10, coord.y - 10, coord.y + 10)) { if (obj == null) { continue; } var oc = obj.GetPosition(); var oi = new ObjectInfo(PacketTypes.REQUESTED) { id = obj.Id, objecttype = (int)obj.ObjectType, x = oc.x, y = oc.y, vx = 0, vy = 0, }; s(NetHelpers.ConvertStructToBytes(oi)); } } return(true); } } return(false); }
public void MoverUpdated(Moveable m) { //At Some point restrict to only updates around players var coord = m.GetPosition(); var v = m.GetVelocity(); var pi = new ObjectInfo(PacketTypes.UPDATE) { id = m.Id, objecttype = (int)m.ObjectType, x = coord.x, y = coord.y, vx = v.x, vy = v.y }; Net.BroadcastToClients(NetHelpers.ConvertStructToBytes(pi)); }
public void PlayerUpdated(Player p) { //Determine what information needs to be sent //Back to the Client var coord = p.GetPosition(); var v = p.GetVelocity(); var pi = new PlayerInfo(PacketTypes.UPDATE) { id = p.Id, x = coord.x, y = coord.y, vx = v.x, vy = v.y }; Net.SendToPlayer(p.Id, NetHelpers.ConvertStructToBytes(pi)); }
private bool ProcessRegionInfo(StreamWriter s, PacketTypes p, RegionInfo ri) { switch (p) { case PacketTypes.REQUEST: { //Get Cell Type Info if ((ri.regionDataTypes & WorldConstants.REGION_INFO_CELL) != 0) { CellInfo c = new CellInfo(PacketTypes.REQUESTED); List <WorldCell> region = new List <WorldCell>(WorldInterface.GetRegionCells(ri.x1, ri.x2, ri.y1, ri.y2)); int count = region.Count; foreach (WorldCell wc in region) { c.cellType = (byte)wc.WorldCellType; c.remainingCells = --count; // I don't even know if this is necessary anymore... c.x = wc.X; c.y = wc.Y; s(NetHelpers.ConvertStructToBytes(c)); } } //Get Object Info if ((ri.regionDataTypes & WorldConstants.REGION_INFO_OBJECT) != 0 || (ri.regionDataTypes & WorldConstants.REGION_INFO_PLAYER) != 0) { bool obj = (ri.regionDataTypes & WorldConstants.REGION_INFO_OBJECT) != 0; bool ply = (ri.regionDataTypes & WorldConstants.REGION_INFO_PLAYER) != 0; ObjectInfo o = new ObjectInfo(PacketTypes.REQUESTED); foreach (var wobject in WorldInterface.GetRegionObjects(ri.x1, ri.x2, ri.y1, ri.y2)) { if (wobject == null) { continue; } var pos = wobject.GetPosition(); if (wobject.ObjectType == WorldObjectTypes.PLAYER && ply) { var vel = ((Player)wobject).GetVelocity(); o.id = wobject.Id; o.x = pos.x; o.y = pos.y; o.vx = vel.x; o.vy = vel.y; o.objecttype = WorldConstants.TYPE_PLAYER; s(NetHelpers.ConvertStructToBytes(o)); } else if (obj) { o.id = wobject.Id; o.x = pos.x; o.y = pos.y; if (wobject.ObjectType == WorldObjectTypes.MARKER) { o.objecttype = WorldConstants.TYPE_MARKER; } else if (wobject.ObjectType == WorldObjectTypes.MOVEABLE) { var vel = ((Moveable)wobject).GetVelocity(); o.objecttype = WorldConstants.TYPE_MOVEABLE; o.vx = vel.x; o.vy = vel.y; } else { o.objecttype = WorldConstants.TYPE_GENERIC; } s(NetHelpers.ConvertStructToBytes(o)); } } } return(true); } } return(false); }