Ejemplo n.º 1
0
    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();
        }
    }