public void OnUnitPathFinished(AIUnitController unit) { Vector3 location = unit.GetCurrentLocation(); unit.SetNextLocation(); if (location != unit.GetCurrentLocation()) { MoveUnit(unit, unit.GetCurrentLocation()); } else { IdleState state = new IdleState(unit); unit.ChangeState(state); } }
public void MoveUnit(AIUnitController unit, Vector3 location, int checkCount = 0) { Vector3 startingPosition = unit.GetCurrentTile().LocalLocation; List <GridTile> path = _gridController.FindPath(startingPosition, location); int count = checkCount + 1; int totalLocations = unit.GetLocationCount(); if (path.Count > 0) { UnitState nextState = new CallbackUnitState <AIUnitController>(unit, OnUnitPathFinished, unit as AIUnitController); WalkingState state = new WalkingState(unit, nextState, path, OnUnitPathFail); unit.ChangeState(state); return; } else if (count < totalLocations) { unit.SetNextLocation(); MoveUnit(unit, unit.GetCurrentLocation(), count); } }