Arenas
This commit is contained in:
parent
43192317ad
commit
e6d995008e
@ -0,0 +1,223 @@
|
|||||||
|
package nautilus.game.arcade.game.games.gladiators;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.UtilAlg;
|
||||||
|
import mineplex.core.common.util.UtilMath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by William (WilliamTiger).
|
||||||
|
* 07/12/15
|
||||||
|
*/
|
||||||
|
public class Arena
|
||||||
|
{
|
||||||
|
|
||||||
|
private Gladiators _host;
|
||||||
|
private ArenaType _colour;
|
||||||
|
private Location _mid;
|
||||||
|
private ArrayList<Location> _spawns;
|
||||||
|
|
||||||
|
private Arena _parent;
|
||||||
|
private Arena[] _childs = new Arena[2];
|
||||||
|
private boolean _isUsed;
|
||||||
|
|
||||||
|
private ArrayList<Location> _doorBlocks;
|
||||||
|
private boolean _closedDoor;
|
||||||
|
|
||||||
|
public Arena(Gladiators host, Location mid, ArenaType colour)
|
||||||
|
{
|
||||||
|
_host = host;
|
||||||
|
_mid = mid;
|
||||||
|
_colour = colour;
|
||||||
|
_spawns = new ArrayList<>();
|
||||||
|
_parent = null;
|
||||||
|
_isUsed = false;
|
||||||
|
_doorBlocks = new ArrayList<>();
|
||||||
|
_closedDoor = false;
|
||||||
|
|
||||||
|
setupSpawns();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Arena getParent()
|
||||||
|
{
|
||||||
|
return _parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParent(Arena parent)
|
||||||
|
{
|
||||||
|
_parent = parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Arena getChildAt(int index)
|
||||||
|
{
|
||||||
|
return _childs[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
public Arena[] getChilds()
|
||||||
|
{
|
||||||
|
return _childs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCapacity()
|
||||||
|
{
|
||||||
|
int cap = _childs.length;
|
||||||
|
|
||||||
|
for(Arena child : _childs)
|
||||||
|
{
|
||||||
|
if(child != null)
|
||||||
|
if(child.isUsed()) cap--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Location> getDoorBlocks()
|
||||||
|
{
|
||||||
|
return _doorBlocks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setChild(int index, Arena child)
|
||||||
|
{
|
||||||
|
_childs[index] = child;
|
||||||
|
child.setParent(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getUsageMap(HashMap<Arena, Integer> used)
|
||||||
|
{
|
||||||
|
if(isUsed()) used.put(this, getCapacity());
|
||||||
|
|
||||||
|
for(Arena child : _childs)
|
||||||
|
{
|
||||||
|
if(child != null) child.getUsageMap(used);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean areChildrenUsed()
|
||||||
|
{
|
||||||
|
for(Arena child : _childs)
|
||||||
|
{
|
||||||
|
if(child != null)
|
||||||
|
if(!child.isUsed()) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Arena getUnusedChild()
|
||||||
|
{
|
||||||
|
for(Arena child : _childs)
|
||||||
|
{
|
||||||
|
if(child != null)
|
||||||
|
if(!child.isUsed()) return child;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupSpawns()
|
||||||
|
{
|
||||||
|
ArrayList<Location> possible = (ArrayList<Location>) _host.WorldData.GetDataLocs("BLACK").clone();
|
||||||
|
_mid.setY(UtilAlg.findClosest(_mid, possible).getY());
|
||||||
|
|
||||||
|
_spawns.add(correctFace(UtilAlg.findClosest(_mid, possible)));
|
||||||
|
possible.remove(_spawns.get(0));
|
||||||
|
_spawns.add(correctFace(UtilAlg.findClosest(_mid, possible)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Location correctFace(Location l)
|
||||||
|
{
|
||||||
|
l.setPitch(UtilAlg.GetPitch(UtilAlg.getTrajectory(l, _mid)));
|
||||||
|
l.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(l, _mid)));
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Gladiators getHost()
|
||||||
|
{
|
||||||
|
return _host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArenaType getColour()
|
||||||
|
{
|
||||||
|
return _colour;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location getMid()
|
||||||
|
{
|
||||||
|
return _mid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Location> getSpawns()
|
||||||
|
{
|
||||||
|
return _spawns;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Location> capacitySpawns()
|
||||||
|
{
|
||||||
|
ArrayList<Location> ret = new ArrayList<>();
|
||||||
|
|
||||||
|
if (getCapacity() == 0) return ret;
|
||||||
|
if (getCapacity() == 1)
|
||||||
|
{
|
||||||
|
ret.add(_spawns.get(0));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
if (getCapacity() == 2)
|
||||||
|
{
|
||||||
|
ret.add(_spawns.get(0));
|
||||||
|
ret.add(_spawns.get(1));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Player> getPlayers()
|
||||||
|
{
|
||||||
|
ArrayList<Player> pls = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Player p : _host.GetPlayers(true))
|
||||||
|
{
|
||||||
|
if (UtilMath.offset(p.getLocation(), _mid) <= 21)
|
||||||
|
pls.add(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPlayerCount()
|
||||||
|
{
|
||||||
|
ArrayList<Player> pls = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Player p : _host.GetPlayers(true))
|
||||||
|
{
|
||||||
|
if (UtilMath.offset(p.getLocation(), _mid) <= 21)
|
||||||
|
pls.add(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pls.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUsed()
|
||||||
|
{
|
||||||
|
return _isUsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsUsed(boolean isUsed)
|
||||||
|
{
|
||||||
|
_isUsed = isUsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isClosedDoor()
|
||||||
|
{
|
||||||
|
return _closedDoor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClosedDoor(boolean closedDoor)
|
||||||
|
{
|
||||||
|
_closedDoor = closedDoor;
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,10 @@
|
|||||||
package nautilus.game.arcade.game.games.gladiators;
|
package nautilus.game.arcade.game.games.gladiators;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.UtilAlg;
|
||||||
import nautilus.game.arcade.ArcadeManager;
|
import nautilus.game.arcade.ArcadeManager;
|
||||||
import nautilus.game.arcade.GameType;
|
import nautilus.game.arcade.GameType;
|
||||||
import nautilus.game.arcade.game.SoloGame;
|
import nautilus.game.arcade.game.SoloGame;
|
||||||
@ -12,6 +17,10 @@ import nautilus.game.arcade.kit.Kit;
|
|||||||
*/
|
*/
|
||||||
public class Gladiators extends SoloGame
|
public class Gladiators extends SoloGame
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private ArrayList<Arena> _allArenas;
|
||||||
|
private ArrayList<Arena> _gameArenaSet;
|
||||||
|
|
||||||
public Gladiators(ArcadeManager manager)
|
public Gladiators(ArcadeManager manager)
|
||||||
{
|
{
|
||||||
super(manager, GameType.Gladiators,
|
super(manager, GameType.Gladiators,
|
||||||
@ -25,4 +34,98 @@ public class Gladiators extends SoloGame
|
|||||||
|
|
||||||
setKits(new Kit[]{new KitGladiator(manager)});
|
setKits(new Kit[]{new KitGladiator(manager)});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ParseData()
|
||||||
|
{
|
||||||
|
parseArenas();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void parseArenas()
|
||||||
|
{
|
||||||
|
_allArenas = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Location mid : WorldData.GetDataLocs("RED"))
|
||||||
|
_allArenas.add(new Arena(this, mid, ArenaType.RED));
|
||||||
|
|
||||||
|
for (Location mid : WorldData.GetDataLocs("ORANGE"))
|
||||||
|
_allArenas.add(new Arena(this, mid, ArenaType.ORANGE));
|
||||||
|
|
||||||
|
for (Location mid : WorldData.GetDataLocs("YELLOW"))
|
||||||
|
_allArenas.add(new Arena(this, mid, ArenaType.YELLOW));
|
||||||
|
|
||||||
|
for (Location mid : WorldData.GetDataLocs("GREEN"))
|
||||||
|
_allArenas.add(new Arena(this, mid, ArenaType.GREEN));
|
||||||
|
|
||||||
|
for (Arena a : _allArenas)
|
||||||
|
{
|
||||||
|
if (a.getColour().equals(ArenaType.GREEN))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Set the children of that arena.
|
||||||
|
ArrayList<Location> possible = (ArrayList<Location>) getAllArenaMidsOfType(getPreviousColour(a.getColour())).clone();
|
||||||
|
a.setChild(0, getArenaByMid(UtilAlg.findClosest(a.getMid(), possible)));
|
||||||
|
possible.remove(a.getChildAt(0).getMid());
|
||||||
|
a.setChild(1, getArenaByMid(UtilAlg.findClosest(a.getMid(), possible)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void findGameArenaSet()
|
||||||
|
{
|
||||||
|
_gameArenaSet = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Arena getArenaByMid(Location mid)
|
||||||
|
{
|
||||||
|
for (Arena a : _allArenas)
|
||||||
|
if (a.getMid().equals(mid))
|
||||||
|
return a;
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Location> getAllArenaMidsOfType(ArenaType type)
|
||||||
|
{
|
||||||
|
ArrayList<Location> mids = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Arena a : _allArenas)
|
||||||
|
if (a.getColour().equals(type))
|
||||||
|
mids.add(a.getMid());
|
||||||
|
|
||||||
|
return mids;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Location> getAllArenaMids()
|
||||||
|
{
|
||||||
|
ArrayList<Location> mids = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Arena a : _allArenas)
|
||||||
|
mids.add(a.getMid());
|
||||||
|
|
||||||
|
return mids;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArenaType getNextColour(ArenaType old)
|
||||||
|
{
|
||||||
|
switch (old)
|
||||||
|
{
|
||||||
|
case GREEN: return ArenaType.YELLOW;
|
||||||
|
case YELLOW: return ArenaType.ORANGE;
|
||||||
|
case ORANGE: return ArenaType.RED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArenaType getPreviousColour(ArenaType old)
|
||||||
|
{
|
||||||
|
switch (old)
|
||||||
|
{
|
||||||
|
case RED: return ArenaType.ORANGE;
|
||||||
|
case ORANGE: return ArenaType.YELLOW;
|
||||||
|
case YELLOW: return ArenaType.GREEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user