changes to monster maze!

This commit is contained in:
fooify 2015-08-24 09:58:07 -07:00
parent 859a7e07d5
commit 549435224f
2 changed files with 121 additions and 15 deletions

View File

@ -49,9 +49,16 @@ public class Maze implements Listener
private HashSet<Block> _disabledWaypoints;
private ArrayList<Location> _borders;
private Location _safeZoneCenter;
private ArrayList<Block> _safeZoneGlass = new ArrayList<>(); // game start safe zone stuff
private ArrayList<Location> _playerContainmentUnitLocations = new ArrayList<>(); // probably could use a longer variable name...
private SafePad _safePad = null;
private SafePad _oldSafePad = null;
private int _zoneDecayTimer = 6;
private ArrayList<Player> _playersOnPad = new ArrayList<Player>();
private int _phaseTimer = -1;
@ -59,7 +66,7 @@ public class Maze implements Listener
private HashMap<Entity, MazeMobWaypoint> _ents = new HashMap<Entity, MazeMobWaypoint>();
public Maze(MonsterMaze host, ArrayList<Location> map, ArrayList<Location> spawns, ArrayList<Location> goals)
public Maze(MonsterMaze host, ArrayList<Location> map, ArrayList<Location> spawns, ArrayList<Location> goals, Location safeZone, ArrayList<Location> _glassBounds)
{
Host = host;
@ -87,6 +94,15 @@ public class Maze implements Listener
{
loc.getBlock().getRelative(BlockFace.DOWN).setType(Material.GOLD_BLOCK);
}
for (Location loc : _glassBounds)
{
_playerContainmentUnitLocations.add(loc.clone().add(0, -1, 0));
loc.getBlock().getRelative(BlockFace.DOWN).setType(Material.STAINED_GLASS);
loc.getBlock().getRelative(BlockFace.DOWN).setData((byte)3);
}
_safeZoneCenter = safeZone;
}
public void update()
@ -99,7 +115,7 @@ public class Maze implements Listener
bump();
if(_phaseTimer <= -1)
{
UtilTextTop.display(C.cAqua + C.Bold + "Be the first player to get to the safe pad!", Host.GetPlayers(true).toArray(new Player[Host.GetPlayers(false).size()]));
UtilTextTop.display(C.cAqua + C.Bold + "Be the first player to get to the safe pad!", Host.GetPlayers(false).toArray(new Player[Host.GetPlayers(false).size()]));
}
else
{
@ -137,9 +153,9 @@ public class Maze implements Listener
UtilAction.velocity(player, UtilAlg.getTrajectory(ent, player), 1, false, 0, 0.75, 1.2, true);
//Damage Event
Host.Manager.GetDamage().NewDamageEvent(player, (LivingEntity)ent, null,
/*Host.Manager.GetDamage().NewDamageEvent(player, (LivingEntity)ent, null,
DamageCause.ENTITY_ATTACK, 6, false, false, false,
"Monster", "Monster Attack");
"Monster", "Monster Attack");*/
}
}
}
@ -272,7 +288,17 @@ public class Maze implements Listener
while(spawned <= numToSpawn)
{
Location loc = UtilAlg.Random(_map);
ArrayList<Location> validSpawns = new ArrayList<>(_map);
Iterator<Location> iter = validSpawns.iterator();
while (iter.hasNext()) {
Location b = iter.next();
if(UtilMath.offset(b, _safeZoneCenter) < 7.5)
{
iter.remove();
}
}
Location loc = UtilAlg.Random(validSpawns);
Host.CreatureAllowOverride = true;
Entity ent = null;
if(Host.getMonsterType() == EntityType.ZOMBIE)
@ -393,7 +419,7 @@ public class Maze implements Listener
if(_padDecayTimer == -1) return;
_padDecayTimer--;
// 5
if(_oldSafePad != null)
{
if(_padDecayTimer == 4)
@ -421,6 +447,37 @@ public class Maze implements Listener
}
}
public void decrementZoneTime()
{
if(_zoneDecayTimer == -1) return;
_zoneDecayTimer--;
if(_safeZoneGlass.size() > 0)
{
if(_zoneDecayTimer == 4)
{
setSafeZoneColor((byte)4);
}
else if(_zoneDecayTimer == 3)
{
setSafeZoneColor((byte)1);
}
else if(_zoneDecayTimer == 2)
{
setSafeZoneColor((byte)14);
}
else if(_zoneDecayTimer == 1)
{
destroySafeZone();
}
}
if(_padDecayTimer == 1)
{
_padDecayTimer = -1;
}
}
public void decrementPhaseTime()
{
if(_phaseTimer == -1) return;
@ -493,6 +550,51 @@ public class Maze implements Listener
}
}
private void setSafeZoneColor(byte data)
{
if(_safeZoneGlass.size() <= 0) return;
for(Block bl : _safeZoneGlass)
{
bl.setData(data);
}
}
private void destroySafeZone()
{
if(_safeZoneGlass.size() <= 0) return;
for(Block bl : _safeZoneGlass)
{
bl.setType(Material.AIR);
}
_safeZoneGlass.clear();
}
public void removePlayerContainmentUnit()
{
for(Location loc : _playerContainmentUnitLocations)
{
loc.getBlock().setType(Material.AIR);
}
}
public void createSafeZone()
{
System.out.println("creating safe zone");
_safeZoneGlass = UtilBlock.getInBoundingBox(_safeZoneCenter.clone().add(5, 0, 5), _safeZoneCenter.clone().add(-5, 0, -5), false);
Iterator<Block> iter = _safeZoneGlass.iterator();
while (iter.hasNext()) {
Block b = iter.next();
if(b.getType() == Material.AIR)
{
b.setType(Material.STAINED_GLASS);
b.setData((byte)5);
}
else iter.remove();
}
// TODO bounds
}
public Set<Entity> getMonsters()
{
return _ents.keySet();

View File

@ -1,15 +1,12 @@
package nautilus.game.arcade.game.games.monstermaze;
import org.bukkit.entity.Egg;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Skeleton;
import org.bukkit.entity.Zombie;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
@ -65,14 +62,20 @@ public class MonsterMaze extends SoloGame
if(event.GetState() == GameState.Prepare)
{
//if(WorldData.MapName.contains("MonsterTest")) _monsterType = EntityType.CREEPER;
_monsterType = EntityType.SNOWMAN; // TODO map-specific monster type
_maze = new Maze(this, WorldData.GetDataLocs("GRAY"), WorldData.GetDataLocs("YELLOW"), WorldData.GetDataLocs("RED"));
UtilServer.getServer().getPluginManager().registerEvents(_maze, getArcadeManager().getPlugin());
_maze.fillSpawn(135);
} else if(event.GetState() == GameState.Live)
}
else if(event.GetState() == GameState.Live)
{
_maze.spawnSafePad();
_maze.removePlayerContainmentUnit();
}
else if(event.GetState() == GameState.Recruit)
{
_monsterType = EntityType.SNOWMAN; // TODO map-specific monster type
_maze = new Maze(this, WorldData.GetDataLocs("GRAY"), WorldData.GetDataLocs("YELLOW"), WorldData.GetDataLocs("RED"), WorldData.GetDataLocs("ORANGE").get(0), WorldData.GetDataLocs("PINK"));
UtilServer.getServer().getPluginManager().registerEvents(_maze, getArcadeManager().getPlugin());
_maze.createSafeZone();
_maze.fillSpawn(200);
}
}
@ -92,6 +95,7 @@ public class MonsterMaze extends SoloGame
if(!IsLive()) return;
_maze.decrementPhaseTime();
_maze.decrementSafePadTime();
_maze.decrementZoneTime();
}
@EventHandler