package engine.objects; import engine.Enum; import engine.gameManager.DbManager; import engine.net.ByteBufferWriter; import java.util.ArrayList; import java.util.HashMap; /* Runegates are tied to particular buildings at * bootstrap derived from the Portal creation. * This is only to enable the toggling of effect * bits when traveler is used. */ public class Runegate { // Runegate class Instance variables public static HashMap _runegates = new HashMap<>(); public Portal[] _portals; public Building gateBuilding; private Runegate(Building gateBuilding) { this._portals = new Portal[8]; this.gateBuilding = gateBuilding; // Load portals for this runegate portals from the database configurePortals(); // Chaos, Khar and Oblivion are on by default _portals[Enum.PortalType.CHAOS.ordinal()].activate(false); _portals[Enum.PortalType.OBLIV.ordinal()].activate(false); _portals[Enum.PortalType.MERCHANT.ordinal()].activate(false); } public static void loadAllRunegates() { ArrayList gateList; gateList = DbManager.RunegateQueries.GET_RUNEGATE_LIST(); for (int gateID : gateList) { Building gateBuilding = (Building) DbManager.getObject(Enum.GameObjectType.Building, gateID); Runegate runegate = new Runegate(gateBuilding); _runegates.put(gateID, runegate); } } public static ArrayList GetAllOpenGateIDStrings() { ArrayList openGateIDStrings = new ArrayList<>(); openGateIDStrings.add("TRA-003"); openGateIDStrings.add("TRA-004"); openGateIDStrings.add("TRA-005"); openGateIDStrings.add("TRA-006"); openGateIDStrings.add("TRA-007"); openGateIDStrings.add("TRA-008"); openGateIDStrings.add("TRA-009"); openGateIDStrings.add("TRA-010"); return openGateIDStrings; } public void activatePortal(Enum.PortalType portalType) { this._portals[portalType.ordinal()].activate(true); } public void deactivatePortal(Enum.PortalType portalType) { this._portals[portalType.ordinal()].deactivate(); } public Portal[] getPortals() { return this._portals; } public void collidePortals() { for (Portal portal : this.getPortals()) { if (portal.isActive()) portal.collide(); } } public void configurePortals() { ArrayList portalList = DbManager.RunegateQueries.GET_PORTAL_LIST(this.gateBuilding.getObjectUUID()); for (Portal portal : portalList) { this._portals[portal.portalType.ordinal()] = portal; } } public void _serializeForEnterWorld(ByteBufferWriter writer) { writer.putInt(gateBuilding.getObjectType().ordinal()); writer.putInt(gateBuilding.getObjectUUID()); writer.putString(gateBuilding.getParentZone().zoneName); writer.putFloat(gateBuilding.getLoc().getLat()); writer.putFloat(gateBuilding.getLoc().getAlt()); writer.putFloat(gateBuilding.getLoc().getLong()); } }