package ru.alastar.game.systems.gui; import com.badlogic.gdx.math.Vector2; import com.esotericsoftware.kryonet.Connection; import ru.alastar.game.Entity; import ru.alastar.game.systems.gui.hadlers.TileButtonGUIHandler; import ru.alastar.main.Main; import ru.alastar.main.net.ConnectedClient; import ru.alastar.main.net.Server; import ru.alastar.main.net.requests.DropdownMenuRequest; import ru.alastar.main.net.responses.CloseGUIResponse; import ru.alastar.world.ServerTile; public class NetGUISystem { public static void sendGUIElement(NetGUIInfo info, ConnectedClient c) { Server.SendTo(c.connection, info); } public static NetGUIInfo CreateGUIInfo(String name, Vector2 position, Vector2 scale, String parentName, String elementClasspath, String variable, String text) { NetGUIInfo r = new NetGUIInfo(); r.name = name; r.position = position; r.parentName = parentName; r.scale = scale; r.text = text; r.variable = variable; r.elementClasspath = elementClasspath; return r; } // Main method, sending net gui public static void OpenGUI(NetGUIInfo info, ConnectedClient c) { c.controlledEntity.AddGUI(info); sendGUIElement(info, c); } public static void handleAnswer(NetGUIAnswer r, Connection connection) { ConnectedClient c = Server.getClient(connection); c.controlledEntity.invokeGUIHandler(r, c); } public static void handleDropRequest(DropdownMenuRequest r, Connection connection) { try { ConnectedClient c = Server.getClient(connection); if (r.type == 0) { if (c.controlledEntity.haveGUI("dropdown")) { c.controlledEntity.closeGUI("dropdown"); } String t = "nothing"; ServerTile tile = c.controlledEntity.world.GetTile((int) r.x, (int) r.y, (int) c.controlledEntity.z); if (tile != null) { t = tile.type.name(); NetGUISystem.OpenGUI(NetGUISystem.CreateGUIInfo("dropdown", new Vector2(r.x, r.y + tile.position.z), new Vector2(50, 50), "", "com.alastar.game.gui.GUIDropdown", "", "Tile(X:" + r.x + ",Y:" + r.y + ")"), c); NetGUISystem.OpenGUI(NetGUISystem.CreateGUIInfo( "tile_dropdown_info", new Vector2(r.x, r.y), new Vector2(50, 50), "dropdown", "com.alastar.game.gui.GUILabel", "", "Just " + t), c); c.controlledEntity.AddGUIHandler("dropdown", new TileButtonGUIHandler()); Main.Log("[DEBUG]", "Tile touch on " + r.x + " " + r.y); } } else if (r.type == 1) { Entity e = Server.getEntity(r.id); if (e != null) { e.ProcessDropdown(c); } } } catch (Exception e) { Server.handleError(e); } } public static void closeGUI(String string, Entity entity) { CloseGUIResponse r = new CloseGUIResponse(); r.name = string; Server.SendTo(Server.getClient(entity).connection, r); } }