コード例 #1
0
    public override bool ActionStart()
    {
        state  = BGA_STATE.PRE_APPLY;
        target = GetLinkedObject("target");
        player = target.GetComponent <CharactersManager>();

        if (player == null)
        {
            Debug.Log("[error] Attack Action Start: Player is null!");
        }

        if (player.dying == false)
        {
            GetComponent <CompAnimation>().SetTransition("ToAttack");
            GetComponent <CompAnimation>().SetClipDuration("Attack", attack_duration);
            GetComponent <CompAudio>().PlayEvent("AttackPreparation");
        }

        return(true);
    }
コード例 #2
0
    public override ACTION_RESULT ActionUpdate()
    {
        if (player.dying)
        {
            Debug.Log("DON'T ATTACK PLAYER", Department.PLAYER, Color.ORANGE);
            return(ACTION_RESULT.AR_FAIL); //Player is dead, don't attack
        }

        if (state == BGA_STATE.PRE_APPLY && GetComponent <CompAnimation>().IsAnimOverXTime(grab_point))
        {
            state = BGA_STATE.GRAB_FAILING;

            int enemy_tile_x = GetComponent <Movement_Action>().GetCurrentTileX();
            int enemy_tile_y = GetComponent <Movement_Action>().GetCurrentTileY();

            GetLinkedObject("player_obj").GetComponent <MovementController>().GetPlayerPos(out int player_tile_x, out int player_tile_y);

            switch (GetComponent <Movement_Action>().GetDirection())
            {
            case Movement_Action.Direction.DIR_WEST:
                if (enemy_tile_x - 1 == player_tile_x && player_tile_y == enemy_tile_y)
                {
                    state = BGA_STATE.FIRST_APPLY;
                    Debug.Log("Grabing player...");
                    GetLinkedObject("player_obj").GetComponent <CharactersManager>().GetDamage(damage);
                    GetLinkedObject("player_obj").GetComponent <CharactersManager>().SetCurrentCharacterState(CharacterController.State.GRABBED);
                }
                break;

            case Movement_Action.Direction.DIR_EAST:
                if (enemy_tile_x + 1 == player_tile_x && player_tile_y == enemy_tile_y)
                {
                    state = BGA_STATE.FIRST_APPLY;
                    Debug.Log("Grabing player...");
                    GetLinkedObject("player_obj").GetComponent <CharactersManager>().GetDamage(damage);
                    GetLinkedObject("player_obj").GetComponent <CharactersManager>().SetCurrentCharacterState(CharacterController.State.GRABBED);
                }
                break;

            case Movement_Action.Direction.DIR_NORTH:
                if (enemy_tile_y - 1 == player_tile_y && player_tile_x == enemy_tile_x)
                {
                    state = BGA_STATE.FIRST_APPLY;
                    Debug.Log("Grabing player...");
                    GetLinkedObject("player_obj").GetComponent <CharactersManager>().GetDamage(damage);
                    GetLinkedObject("player_obj").GetComponent <CharactersManager>().SetCurrentCharacterState(CharacterController.State.GRABBED);
                }
                break;

            case Movement_Action.Direction.DIR_SOUTH:
                if (enemy_tile_y + 1 == player_tile_y && player_tile_x == enemy_tile_x)
                {
                    state = BGA_STATE.FIRST_APPLY;
                    Debug.Log("Grabing player...");
                    GetLinkedObject("player_obj").GetComponent <CharactersManager>().GetDamage(damage);
                    GetLinkedObject("player_obj").GetComponent <CharactersManager>().SetCurrentCharacterState(CharacterController.State.GRABBED);
                }
                break;
            }
        }
        else if (state == BGA_STATE.GRAB_FAILING && GetComponent <CompAnimation>().IsAnimOverXTime(grab_point))
        {
            Debug.Log("[yellow] Grab dodged!!");
            state = BGA_STATE.GRAB_FAILED;
            GetComponent <CompAnimation>().SetTransition("ToGrabFail");
        }
        else if (state == BGA_STATE.FIRST_APPLY && GetComponent <CompAnimation>().IsAnimOverXTime(first_hit_point) && GetComponent <CompAnimation>().IsAnimationRunning("Attack"))
        {
            state = BGA_STATE.SECOND_APPLY;
            Debug.Log("First crush...");
            GetLinkedObject("player_obj").GetComponent <CharactersManager>().GetDamage(damage);
        }
        else if (state == BGA_STATE.SECOND_APPLY && GetComponent <CompAnimation>().IsAnimOverXTime(second_hit_point) && GetComponent <CompAnimation>().IsAnimationRunning("Attack"))
        {
            state = BGA_STATE.THIRD_APPLY;
            Debug.Log("Second crush...");
            GetLinkedObject("player_obj").GetComponent <CharactersManager>().GetDamage(damage);
        }
        else if (state == BGA_STATE.THIRD_APPLY && GetComponent <CompAnimation>().IsAnimOverXTime(third_hit_point) && GetComponent <CompAnimation>().IsAnimationRunning("Attack"))
        {
            state = BGA_STATE.POST_APPLY;
            Debug.Log("Third crush...");
            GetLinkedObject("player_obj").GetComponent <CharactersManager>().GetDamage(damage);
            GetLinkedObject("player_obj").GetComponent <CharactersManager>().SetCurrentCharacterState(CharacterController.State.IDLE);
        }
        else if ((state == BGA_STATE.POST_APPLY && GetComponent <CompAnimation>().IsAnimationStopped("Attack")) ||
                 (state == BGA_STATE.GRAB_FAILED && GetComponent <CompAnimation>().IsAnimationStopped("GrabFailed")))
        {
            state = BGA_STATE.WAITING;
            return(ACTION_RESULT.AR_SUCCESS);
        }

        return(ACTION_RESULT.AR_IN_PROGRESS);
    }