/// <summary> /// Moves the creature in a given direction if that is possible and drains energy as needed /// </summary> /// <param name="dir">The direction to move in</param> private void move(Direction dir) { int energyDiv = speed / 2; if (energyDiv < 1) { energyDiv = 1; } int energyCost = 20 / energyDiv; if (isStealthy()) { energyCost *= 2; } int[] newLoc = getLocationFromDirection(dir); if (world.tileIsClear(newLoc[1], newLoc[0])) { if(canAct(energyCost)) //if it can afford the energy cost { world.clearTile(getLocationXY()[0], getLocationXY()[1]); this.setLocation(newLoc[0], newLoc[1]); //update location world.addCreature(newLoc[0], newLoc[1], this); this.drainEnergy(energyCost); //drain energy } } else if (world.creatureAt(getLocationXY()[1], getLocationXY()[0])) { world.getCreatureAt(getLocationXY()[1], getLocationXY()[0]).spotted(); } else { if (!surrounded()) { if (random.Next(2) > 0) { move(dir.right()); } else { move(dir.left()); } } } }