/// <summary> /// 攻撃リクエストをする /// </summary> /// <param name="enemyUnit"></param> /// <param name="attackDir"></param> /// <returns></returns> public bool RequestAttack(UnitBaseController enemyUnit, MoveDirection attackDir = MoveDirection.KeepPosition) { if (!isAttacking && BattleManager.CanApplyDamage(unitIndex, enemyUnit.unitIndex)) { if (attackDir != MoveDirection.KeepPosition) { DoAttackMotion(attackDir); } else if (m_characterMovement.currentGridPosition.x - enemyUnit.m_characterMovement.currentGridPosition.x > 0) { DoAttackMotion(MoveDirection.Left); } else if (m_characterMovement.currentGridPosition.x - enemyUnit.m_characterMovement.currentGridPosition.x < 0) { DoAttackMotion(MoveDirection.Right); } else if (m_characterMovement.currentGridPosition.z - enemyUnit.m_characterMovement.currentGridPosition.z > 0) { DoAttackMotion(MoveDirection.Back); } else if (m_characterMovement.currentGridPosition.z - enemyUnit.m_characterMovement.currentGridPosition.z < 0) { DoAttackMotion(MoveDirection.Front); } BattleManager.ApplyDamage(unitIndex, enemyUnit.unitIndex); return(true); } return(false); }
/// <summary> /// ユニット指定の受け口 /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <returns></returns> public MoveDirection GetMoveDirectionToTargetGrid(UnitBaseController from, UnitBaseController to) { return(GetMoveDirectionToTargetGrid( from.GetCharacterMovement().currentGridPosition, to.GetCharacterMovement().currentGridPosition )); }
/// <summary> /// NPCリストに追加する /// </summary> /// <param name="npc"></param> public static uint AddUnitBaseController(UnitBaseController unit) { if (Instance.unitBaseControllers.ContainsValue(unit)) { return(0); } Instance.m_unitIndex++; Instance.unitBaseControllers.Add(Instance.m_unitIndex, unit); return(Instance.m_unitIndex); }
/// <summary> /// ダメージを受けた際の処理 /// </summary> /// <param name="fromUnit"></param> public void OnAnyDamage(UnitBaseController fromUnit) { DoDamageMotion(); // 死亡処理を呼ぶ。オブジェクトの削除はマネージャで行う if (m_status.hp <= 0f) { // todo 同処理するか保留 if (m_isDontDestroyUnit) { return; } UnitManager.OnKilledUnit(unitIndex); //TODO 死亡アニメ等コルーチン後削除。とりあえず仮 Destroy(gameObject); } }
/// <summary> /// 四近傍のUnitを取得する /// </summary> /// <param name="fromUnitBaseController"></param> /// <returns></returns> public List <UnitBaseController> GetNeighbourUnit(UnitBaseController fromUnitBaseController, bool isEnemyOnly) { List <UnitBaseController> neighbourUnits = new List <UnitBaseController>(); int range = 1; // todo 2マス移動する奴とか想定中 var currentGrid = fromUnitBaseController.GetCharacterMovement().currentGridPosition; // 斜めは除外 for (int x = -range; x <= range; x++) { for (int z = -range; z <= range; z++) { if (x == 0 && z == 0) { continue; } // 4方向に if (x == 0 || z == 0) { var buffer = GridManager.Instance.FindUnitByGrid(new GridPosition( currentGrid.x + x, currentGrid.y, currentGrid.z + z )); if (buffer != null) { if (!isEnemyOnly) { neighbourUnits.Add(buffer); continue; } if (fromUnitBaseController.myTeam != buffer.myTeam) { neighbourUnits.Add(buffer); } } } } } return(neighbourUnits); }
/// <summary> /// /// </summary> void Awake() { isMoving = false; m_unitBaseController = GetComponent <UnitBaseController>(); }