/// <summary> /// what happend when interact with board /// </summary> /// <param name="action"> action id 0 build 1 sell</param> void InteractWithBoard(state action) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit;// out param if (Physics.Raycast(ray, out hit)) { Vector3 gridPos = board.CalculateGridPosition(hit.point); if (!EventSystem.current.IsPointerOverGameObject()) { if (action.Equals(state.build) && board.CheckForBuildingAtPosition(gridPos) == null) { // build building if (city.Cash >= selectedBuilding.cost) { // check cash city.DepositCash(-selectedBuilding.cost); uIController.UpdateCityData(); city.buildingCounts[selectedBuilding.id]++; board.AddBuilding(selectedBuilding, gridPos); } } else if (action.Equals(state.sell) && board.CheckForBuildingAtPosition(gridPos) != null) { // if building on pos is not null city.DepositCash(board.CheckForBuildingAtPosition(gridPos).cost / 2); // refund half of value board.RemoveBuilding(gridPos); uIController.UpdateCityData(); } } } }
//coroutines /* * Wander: corrutina del estado Wander que llamará al método WanderAction mientras que el * agente se encuentre en ese estado. */ IEnumerator Wander() { while (currentState.Equals(state.Wander)) { WanderAction(); yield return(new WaitForSeconds(0.1f)); } }
public List <state> genMaxTerm(int max) { if (!hasTerminatingState) { throw new Exception("No terminating state"); } List <state> ret = new List <state>(); ret.Add(currentState); int i = 0; bool tryQuit = false; while (!currentState.Equals(terminatingState)) { state s = step(); i++; if (i >= max) { tryQuit = true; } if (tryQuit && s.transitions.Contains(terminatingState.identifier)) { ret.Add(s); ret.Add(terminatingState); break; } //if (tryQuit) Console.WriteLine("Overtime"); ret.Add(s); } return(ret); }
public static int stateToInt(state s) { if (s.Equals(state.visitor)) { return(0); } return(1); }