Example #1
0
            /// <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);
            }
Example #2
0
 /// <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
                ));
 }
Example #3
0
            /// <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);
            }
Example #4
0
            /// <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);
                }
            }
Example #5
0
            /// <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);
            }
Example #6
0
 /// <summary>
 ///
 /// </summary>
 void Awake()
 {
     isMoving             = false;
     m_unitBaseController = GetComponent <UnitBaseController>();
 }