package ru.alastar.world; import java.util.ArrayList; import java.util.HashMap; import com.alastar.game.Tile; import com.alastar.game.enums.ModeType; import com.alastar.game.enums.TileType; import com.badlogic.gdx.math.Vector3; import ru.alastar.entities.Entity; import ru.alastar.main.Server; import ru.alastar.main.net.ConnectedClient; import ru.alastar.main.net.PacketGenerator; import ru.alastar.main.net.responses.AddEntityResponse; import ru.alastar.main.net.responses.AddTileResponse; import ru.alastar.main.net.responses.RemoveEntityResponse; import ru.alastar.main.net.responses.RemoveTileResponse; public class ServerWorld { public int id = 0; public String name = "GenericWorld"; public HashMap<Vector3, Tile> tiles = new HashMap<Vector3, Tile>(); public ArrayList<Entity> entities = new ArrayList<Entity>(); public int version = 0; public int zMin = -1; public int zMax = 10; public ServerWorld(int i, String n) { this.id = i; this.name = n; tiles = new HashMap<Vector3, Tile>(); entities = new ArrayList<Entity>(); } public void CreateTile(int x, int y, int z, TileType type, boolean p) { AddTile(new Tile(new Vector3(x, y, z), type, p)); } public void AddTile(Tile t) { AddTileResponse r; tiles.put(t.position, t); for (int i = 0; i < entities.size(); ++i) { if (Server.getClient(entities.get(i).id) != null) { r = new AddTileResponse(); r.x = (int) t.position.x; r.y = (int) t.position.y; r.z = (int) t.position.z; r.ordinalType = t.type.ordinal(); r.modeOrdinal = ModeType.World.ordinal(); PacketGenerator.generatePacketTo(Server.getClient(entities.get(i).id).connection, r); } } } public void AddEntity(Entity e) { Entity ent; AddEntityResponse r; for (int i = 0; i < entities.size(); ++i) { ent = entities.get(i); r = new AddEntityResponse(); r.caption = e.caption; r.id = e.id; r.x = (int) e.position.x; r.y = (int) e.position.y; r.z = (int) e.position.z; r.typeOrdinal = e.type.ordinal(); PacketGenerator.generatePacketTo(Server.getClient(ent.id).connection, r); } entities.add(e); } public void RemoveEntity(Entity entity) { RemoveEntityResponse r; entities.remove(entity); for (int i = 0; i < entities.size(); ++i) { if (Server.getClient(entities.get(i).id) != null) { r = new RemoveEntityResponse(); r.id = entity.id; r.modeOrdinal = ModeType.World.ordinal(); PacketGenerator.generatePacketTo(Server.getClient(entities.get(i).id).connection, r); } } } public void RemoveTile(Tile t) { RemoveTileResponse r; for (int i = 0; i < entities.size(); ++i) { if (Server.getClient(entities.get(i).id) != null) { r = new RemoveTileResponse(); r.x = (int) t.position.x; r.y = (int) t.position.y; r.z = (int) t.position.z; r.modeOrdinal = ModeType.World.ordinal(); PacketGenerator.generatePacketTo(Server.getClient(entities.get(i).id).connection, r); } } try { tiles.remove(t.position); } finally { } } public Tile GetTile(int x, int y, int z) { return tiles.get(new Vector3(x, y, z)); } public Tile GetTile(Vector3 xyz) { return tiles.get(xyz); } public void SendTiles(ConnectedClient c) { } public void SendEntities(ConnectedClient c) { Entity e; AddEntityResponse r; for (int i = 0; i < entities.size(); ++i) { e = entities.get(i); r = new AddEntityResponse(); r.caption = e.caption; r.id = e.id; r.x = (int) e.position.x; r.y = (int) e.position.y; r.z = (int) e.position.z; r.typeOrdinal = e.type.ordinal(); Server.Log("Send entity id: " + e.id + " caption: " + e.caption + " pos: " + e.position.toString()); PacketGenerator.generatePacketTo(c.connection, r); } } }