package networks; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import game.Hakd; import game.Internet; import game.gameplay.Character; import game.gameplay.City; import game.gameplay.Company; import game.gameplay.Player; import gui.HakdSprite; import networks.devices.Device; import networks.devices.DeviceFactory; import networks.devices.Server; import other.Util; import java.util.HashSet; public class NetworkFactory { /** * Create a network, and populate it, based on the type */ public static Network createNetwork(Network.NetworkType type, InternetProviderNetwork isp) { Gdx.app.debug("Network Added", "Normal"); Internet internet = isp.getInternet(); City city = isp.getCity(); Network network = createNetwork(); int level = (int) (Math.random() * 8); Network.IpRegion ipRegion; Character owner; int deviceLimit; Network.Stance stance = Network.Stance.NEUTRAL; // TODO move stances to the npc/player classes HakdSprite mapIcon; switch (type) { case NPC: ipRegion = Network.IpRegion.PRIVATE; owner = new Character(network, Util.ganerateName(), city); deviceLimit = 4; stance = Network.Stance.NEUTRAL; mapIcon = new HakdSprite(Hakd.assets.get("lTextures.txt", TextureAtlas.class).findRegion("network")); mapIcon.setSize(50, 50); break; case TEST: ipRegion = Network.IpRegion.PRIVATE; owner = new Character(network, Util.ganerateName(), city); deviceLimit = 32; stance = Network.Stance.NEUTRAL; mapIcon = new HakdSprite(Hakd.assets.get("lTextures.txt", TextureAtlas.class).findRegion("network")); mapIcon.setSize(50, 50); break; case BUSINESS: // company // random company ipRegion = Network.IpRegion.BUSINESS; owner = new Company(network, Util.ganerateName(), city); deviceLimit = (int) ((level + 1) * (Math.random() * 3 + 1)); mapIcon = new HakdSprite(Hakd.assets.get("lTextures.txt", TextureAtlas.class).findRegion("network")); mapIcon.setSize(50, 50); break; default: // copied from the npc case ipRegion = Network.IpRegion.PRIVATE; owner = new Character(network, Util.ganerateName(), city); deviceLimit = 4; stance = Network.Stance.NEUTRAL; mapIcon = new HakdSprite(Hakd.assets.get("lTextures.txt", TextureAtlas.class).findRegion("network")); mapIcon.setSize(50, 50); break; } network.setLevel(level); network.setStance(stance); // TODO move stances to the npc/player classes network.setType(type); network.setCity(city); network.setMapIcon(mapIcon); network.setOwner(owner); network.setInternet(internet); network.placeNetwork(Network.networkRegionSize); internet.addNetworkToInternet(network, isp); // used to add randomness to the amount of servers to make given serverLimit int d = (int) Math.round(deviceLimit * (Math.random() * 0.35 + 0.65)); for (int i = 0; i < d; i++) { // create servers on the network Server server = (Server) DeviceFactory.createDevice(Device.DeviceType.SERVER); network.addDevice(server); server.setNetwork(network); } return network; } /** * Creates a network and assigns it to the player. It also sets up the network's properties for the new game. Only used at the beginning(for now). * * @param player - The player to assign the network to. */ public static Network createPlayerNetwork(Player player, City city, Internet internet) { Gdx.app.debug("Network Added", "Player"); Network network = createNetwork(); network.setType(Network.NetworkType.PLAYER); network.setLevel(0); network.setIpRegion(Network.IpRegion.PRIVATE); network.setStance(Network.Stance.FRIENDLY); network.setCity(city); network.setInternet(internet); HakdSprite s = new HakdSprite(Hakd.assets.get("lTextures.txt", TextureAtlas.class).findRegion("playerNetwork")); network.setMapIcon(s); network.getMapIcon().setSize(50, 50); network.placeNetwork(Network.networkRegionSize); network.setOwner(player); player.setNetwork(network); return network; } /** * Most basic network constructor. */ public static Network createNetwork() { return new Network(); } /** * Most basic ISP constructor. */ public static InternetProviderNetwork createISP(Internet internet, City city) { Gdx.app.debug("Network Added", "ISP"); InternetProviderNetwork isp = new InternetProviderNetwork(internet); isp.setOwner(new Company(isp, "ISP", city)); isp.setType(Network.NetworkType.ISP); isp.setLevel((int) (Math.random() * 3 + 5)); isp.setDeviceLimit((int) ((isp.getLevel() + 1) * (Math.random() * 3 + 1))); isp.setCity(city); // isp.setOwner(InternetProviderNetwork.IspName.values()[(int) (Math.random() * InternetProviderNetwork.IspName.values().length)].toString()); HakdSprite s = new HakdSprite(Hakd.assets.get("lTextures.txt", TextureAtlas.class).findRegion("ispNetwork")); isp.setMapIcon(s); isp.getMapIcon().setSize(75, 75); boolean containsNetworks = false; for (Network n : internet.getNetworkMap().values()) { if (!(n instanceof BackboneProviderNetwork || n instanceof InternetProviderNetwork)) { containsNetworks = true; break; } } if (containsNetworks) { isp.placeNetwork(Network.networkRegionSize); } else { isp.placeNetwork(Network.ispRegionSize); } int amount = (int) (Math.random() * Internet.NETWORK_MULTIPLIER + 2); for (int i = 0; i < amount; i++) { if (isp.getIpChildNetworkHashMap().size() < 256) { Network network = NetworkFactory.createNetwork(Network.NetworkType.NPC, isp); city.addNetwork(network); } else { break; } } return isp; } /** * Most basic backbone constructor. */ public static BackboneProviderNetwork createBackbone(Internet internet, City city) { Gdx.app.debug("Network Added", "Backbone"); BackboneProviderNetwork backbone = new BackboneProviderNetwork(internet); final String name = BackboneProviderNetwork.BackboneName.values()[(int) (Math.random() * BackboneProviderNetwork.BackboneName.values().length)].toString(); backbone.setOwner(new Company(backbone, name, city)); backbone.setType(Network.NetworkType.BACKBONE); backbone.setDeviceLimit((int) ((backbone.getLevel() + 1) * (Math.random() * 3 + 1))); backbone.setLevel(7); backbone.setCity(city); backbone.parent = null; backbone.setMapIcon(new HakdSprite(Hakd.assets.get("lTextures.txt", TextureAtlas.class).findRegion("backboneNetwork"))); backbone.getMapIcon().setSize(100, 100); backbone.backboneConnectionLines = new HashSet<Sprite>(); boolean containsNetworks = false; for (Network n : internet.getNetworkMap().values()) { if (!(n instanceof BackboneProviderNetwork || n instanceof InternetProviderNetwork)) { containsNetworks = true; break; } } if (containsNetworks) { backbone.placeNetwork(Network.networkRegionSize); } else { backbone.placeNetwork(Network.backboneRegionSize); } backbone.ipRegion = Network.IpRegion.none; return backbone; } }