ActionResult MobChooseNextAction(EntityState aEntityState) { Debug.Assert(aEntityState.mobData.HasValue); switch (aEntityState.mobData.Value.movementType) { case MoveTypeEnum.INANIMATE: WaitAction waitAction = new WaitAction(this.id); return(waitAction.GetActionResult(GM.boardManager.currentState)); case MoveTypeEnum.PATROL: MoveAction moveForwardAction = new MoveAction(this.id, aEntityState.facing); // Debug.Log(this.id + " MobChooseNextAction on pos " + this.entityState.pos); ActionResult moveForwardResult = moveForwardAction.GetActionResult(GM.boardManager.currentState); if (moveForwardResult.boardState.HasValue) { return(moveForwardResult); } if (aEntityState.mobData.Value.canHop) { MoveAction moveForwardUpAction = new MoveAction(this.id, aEntityState.facing + Vector2Int.up); ActionResult moveForwardUpResult = moveForwardUpAction.GetActionResult(GM.boardManager.currentState); if (moveForwardUpResult.boardState.HasValue) { return(moveForwardUpResult); } MoveAction moveForwardDownAction = new MoveAction(this.id, aEntityState.facing + Vector2Int.down); ActionResult moveForwardDownResult = moveForwardDownAction.GetActionResult(GM.boardManager.currentState); if (moveForwardDownResult.boardState.HasValue) { return(moveForwardDownResult); } } TurnAction turnAction = new TurnAction(this.id); ActionResult turnResult = turnAction.GetActionResult(GM.boardManager.currentState); Debug.Assert(turnResult.boardState.HasValue); return(turnResult); case MoveTypeEnum.FLY: throw new NotImplementedException(); case MoveTypeEnum.PATHPATROL: throw new NotImplementedException(); case MoveTypeEnum.PATHFLY: throw new NotImplementedException(); default: throw new ArgumentOutOfRangeException(); } }