Exemple #1
0
    public bool Execute()
    {
        if (tacticsHandler == null || Time.time < _time_record)
        {
            return(false);
        }

        Vector3 moveDirection = tacticsHandler.Planning();

        CA_Terrain.CA_Grid grid = _map.IsPosAvailable(transform.position, moveDirection);

        _baseUnit.ProcessMoveAction(grid, moveDirection, (bool isMove) => {
            if (!isMove)
            {
                // Notify(EventFlag.AIAgent.MeetInline);
            }
            else
            {
                _map.UpdateGridInfo(transform.position + moveDirection, _baseUnit);
            }
        });

        _time_record = Time.time + tacticsHandler.period_to_act;

        return(true);
    }
Exemple #2
0
 private CA_Grid[] ReCalculateGrid()
 {
     CA_Grid[] grids = new CA_Grid[index_offset];
     for (int i = 0; i < index_offset; i++)
     {
         int     offsetIndex = i + activateStartXPos;
         Vector2 gridPos     = new Vector2(stored_prefabs[offsetIndex].transform.position.x, stored_prefabs[offsetIndex].transform.position.z);
         grids[i] = new CA_Grid(gridPos);
     }
     return(grids);
 }
Exemple #3
0
    public void Update()
    {
        if (_input == null)
        {
            return;
        }

        if (_input.IsDownClick())
        {
            moveDir = -Vector3.forward;
        }
        if (_input.IsFrontClick())
        {
            moveDir = Vector3.forward;
        }

        if (_input.IsLeftClick())
        {
            moveDir = Vector3.left;
        }

        if (_input.IsRightClick())
        {
            moveDir = Vector3.right;
        }

        if (_input.IsTap())
        {
            moveDir = Vector3.forward;
        }

        if (_input.IsRelease())
        {
            CA_Terrain.CA_Grid grid = _map.IsPosAvailable(_playerUnit.transform.position, _moveDir);

            _playerUnit.ProcessMoveAction(grid, _moveDir, (bool isMove) =>
            {
                //Generate new Terrain
                if (isMove)
                {
                    _map.UpdateGridInfo(_playerUnit.transform.position + _moveDir, _playerUnit);

                    //If move forward in z-Axis
                    if (_moveDir == Vector3.forward && farTopZPosition < _playerUnit.transform.position.z)
                    {
                        farTopZPosition = (int)(_playerUnit.transform.position.z);
                        MainApp.Instance.subject.notify(EventFlag.Game.PlayerMove);
                        //Move Ai Agent
                        // OnNotify();
                    }
                }
            });
        }
    }
Exemple #4
0
    public void ProcessMoveAction(CA_Terrain.CA_Grid p_next_grid, Vector3 p_direction, System.Action <bool> p_callback)
    {
        MoveDir   moveDir = new MoveDir(p_direction, p_next_grid.isWalkable);
        MoveState isMove  = Move(moveDir);

        //Check if mapcomponent is baseunit, if yes and in different team, then try to attack it
        if (isMove.state == MoveState.State.Fail_PosInvalid && p_next_grid.position != Vector2.zero)
        {
            if (p_next_grid.mapComponent.GetType() == typeof(BaseUnit))
            {
                BaseUnit targetUnit = (BaseUnit)p_next_grid.mapComponent;
                Attack(targetUnit);
            }
        }

        p_callback?.Invoke(isMove.isSuccessful);
    }