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); }
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); }
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(); } } }); } }
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); }