public void fireCannon(Unit cannon, Tile t) { Player you = cannon.getVillage ().controlledBy; Player them; if (t.getVillage () != null) { // stupid null checks to prevent errors them = t.getVillage ().controlledBy; } else { // check if neutral gameGUI.displayError (@"No need to fire on neutral land"); return; } if (you == them) { // dont fire on yourself gameGUI.displayError (@"Dont shoot yourself!!"); return; } else { // finally, give em hell! bool hasTower = t.checkTower (); Unit u = t.getOccupyingUnit(); Village v = t.getVillage (); Tile l = v.getLocatedAt(); if (hasTower == true){ // t.replace (null); t.networkView.RPC ("destroyPrefab",RPCMode.AllBuffered); t.networkView.RPC ("setStructureNet",RPCMode.AllBuffered,false); } if (u!=null){ // v.removeUnit(u); v.networkView.RPC ("removeUnitNet",RPCMode.AllBuffered,u.networkView.viewID); // t.setOccupyingUnit(null); t.networkView.RPC ("removeOccupyingUnitNet",RPCMode.AllBuffered); // t.replace (null); // t.networkView.RPC ("destroyPrefab",RPCMode.AllBuffered); // t.setLandType(LandType.Tombstone); t.gameObject.networkView.RPC ("setLandTypeNet",RPCMode.AllBuffered,(int)LandType.Tombstone); GameObject tomb = Network.Instantiate (tombPrefab, new Vector3 (t.point.x, 0.4f, t.point.y), tombPrefab.transform.rotation,0) as GameObject; t.networkView.RPC ("replaceTilePrefabNet",RPCMode.AllBuffered,tomb.networkView.viewID); // Destroy (u.gameObject); gameObject.networkView.RPC ("destroyUnitNet",RPCMode.AllBuffered,u.networkView.viewID); } if (t==l){ villageManager.takeCannonDamage(v); } } }
private bool canUnitMove(Unit u, Tile t) { // castle check foreach (Tile n in t.getNeighbours()) { try{ Village v = n.getVillage (); VillageType vt = v.getMyType(); Player them = v.getPlayer (); Player you = u.getVillage().getPlayer (); if (them!=you && vt==VillageType.Castle){ gameGUI.displayError (@"I cant even get near to their castle!"); return false; } } catch { continue; } } // friendly checks if (t.getVillage ()==null || t.getVillage ().controlledBy == u.getVillage ().controlledBy) { if((t.getLandType () == LandType.Trees || t.getLandType () == LandType.Tombstone) && (u.getUnitType() == UnitType.KNIGHT || u.getUnitType() == UnitType.CANNON)){ gameGUI.displayError (@"Knights are too fancy to do manual labour. ¯\(°_o)/¯"); return false; } else if (t.checkTower ()){ gameGUI.displayError (@"The tower doesn't want you to stand ontop of it. ¯\(°_o)/¯"); return false; } else if (t.getOccupyingUnit () != null) { gameGUI.displayError (@"There is a unit already standing there!!! ¯\(°_o)/¯"); return false; } else { return true; } // enemy checks } else if (t.getVillage ().controlledBy != u.getVillage ().controlledBy){ if (u.getUnitType()==UnitType.PEASANT){ gameGUI.displayError (@"Peasants cant attack! ¯\(°_o)/¯"); return false; } else if (u.getUnitType()==UnitType.CANNON){ gameGUI.displayError (@"Cannons cant move into enemy territory"); return false; } else if((t.getLandType () == LandType.Trees || t.getLandType () == LandType.Tombstone) && u.getUnitType() == UnitType.KNIGHT){ gameGUI.displayError (@"Knights are too fancy to do manual labour. ¯\(°_o)/¯"); return false; } else if (t.checkTower () == true && (u.getUnitType()!= UnitType.KNIGHT || u.getUnitType () != UnitType.SOLDIER)){ gameGUI.displayError (@"Only a soldiers and knights can destroy an enemy tower. ¯\(°_o)/¯"); return false; } else if (t.getOccupyingUnit()!=null && u.getUnitType()<=t.getOccupyingUnit().getUnitType()){ if (t.getOccupyingUnit().getUnitType()==UnitType.CANNON && u.getUnitType()<=UnitType.SOLDIER){ gameGUI.displayError (@"You need a knight to take out their cannon"); return false; } gameGUI.displayError (@"Your unit cant fight theirs. ¯\(°_o)/¯"); return false; } else { return true; } } //default return false; }
public void moveUnit(Unit unit, Tile dest) { Village destVillage = dest.getVillage (); Village srcVillage = unit.getVillage (); Unit destUnit = dest.getOccupyingUnit (); UnitType srcUnitType = unit.getUnitType(); bool unitPermitted = canUnitMove (unit, dest); //if the move is allowed to move onto the tile if (unitPermitted == true) { Tile originalLocation = unit.getLocation (); // moving within your region if (srcVillage == destVillage) { performMove(unit,dest); originalLocation.gameObject.networkView.RPC ("removeOccupyingUnitNet",RPCMode.AllBuffered); //TODO STOPPED HERE } else if (srcVillage != destVillage) { // taking over neutral tiles if (destVillage == null) { //srcVillage.addTile(dest); srcVillage.gameObject.networkView.RPC ("addTileNet",RPCMode.AllBuffered,dest.gameObject.networkView.viewID); dest.gameObject.networkView.RPC ("setVillageNet",RPCMode.AllBuffered,srcVillage.gameObject.networkView.viewID); int color = srcVillage.getPlayer().getColor(); dest.gameObject.networkView.RPC ("setAndColor",RPCMode.AllBuffered,color); performMove(unit,dest); villageManager.MergeAlliedRegions(dest); unit.gameObject.networkView.RPC("setActionNet",RPCMode.AllBuffered,(int)UnitActionType.CapturingNeutral); originalLocation.gameObject.networkView.RPC ("removeOccupyingUnitNet",RPCMode.AllBuffered); } else if (srcUnitType == UnitType.PEASANT) { gameGUI.displayError (@"A peasant is too weak to invade!"); return; } else { // quit if tile is guarded by unit or tower bool guarded = tileManager.checkNeighboursForGuards(dest, unit); if (guarded){ gameGUI.displayError (@"That area is being protected"); return; } // unit on unit combat!! if (destUnit!=null){ if(srcUnitType>destUnit.getUnitType()){ // kill enemy unit, remove it from tile, remove it from village, perform move gets called after. destVillage.gameObject.networkView.RPC ("removeUnitNet",RPCMode.AllBuffered,destUnit.gameObject.networkView.viewID); dest.gameObject.networkView.RPC ("setOccupyingUnitNet",RPCMode.AllBuffered,unit.gameObject.networkView.viewID); gameObject.networkView.RPC ("destroyUnitNet",RPCMode.AllBuffered,destUnit.gameObject.networkView.viewID); } else { gameGUI.displayError (@"The enemy is too strong! I dont want to die!"); return; } } // if the tile contains the enemy village // pillage, then move the hovel if (destVillage.getLocatedAt()==dest){ if (srcUnitType > UnitType.INFANTRY){ // plunder village will handle stealing resources villageManager.plunderVillage (srcVillage, destVillage, dest); // it also calls respawn hovel and creating a meadow } else { gameGUI.displayError (@"This unit is too weak to plunder villages"); return; } } // destroy towers if (dest.checkTower() == true && srcUnitType>UnitType.INFANTRY){ //dest.setStructure(null); dest.gameObject.networkView.RPC ("setStructureNet",RPCMode.AllBuffered,false); //dest.replace (null); //dest.gameObject.networkView.RPC ("destroyPrefab",RPCMode.AllBuffered); } villageManager.takeoverTile(srcVillage,dest); //also splits region villageManager.MergeAlliedRegions(dest); performMove(unit,dest); unit.gameObject.networkView.RPC("setActionNet",RPCMode.AllBuffered,(int)UnitActionType.CapturingEnemy); originalLocation.gameObject.networkView.RPC ("removeOccupyingUnitNet",RPCMode.AllBuffered); } } } }