コード例 #1
0
        /// <summary>
        /// 隣接するグリッド座標を取得する
        /// </summary>
        /// <param name="direction">方向</param>
        /// <returns>グリッド座標</returns>
        public Vector2Int GetAdjacentCoord(Constants.CardinalDirection direction)
        {
            var x = Coord.x;
            var y = Coord.y;

            switch (direction)
            {
            case Constants.CardinalDirection.N:
                y += 1;
                break;

            case Constants.CardinalDirection.S:
                y -= 1;
                break;

            case Constants.CardinalDirection.E:
                x -= 1;
                break;

            case Constants.CardinalDirection.W:
                x += 1;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(direction), direction, null);
            }

            return(new Vector2Int(x, y));
        }
コード例 #2
0
        void SetDirection(Constants.CardinalDirection direction)
        {
            var     position = transform.position;
            Vector3 lookAtTransform;

            switch (direction)
            {
            case Constants.CardinalDirection.N:
                lookAtTransform = new Vector3(position.x, position.y, position.z + 1);
                break;

            case Constants.CardinalDirection.S:
                lookAtTransform = new Vector3(position.x, position.y, position.z - 1);
                break;

            case Constants.CardinalDirection.E:
                lookAtTransform = new Vector3(position.x - 1, position.y, position.z);
                break;

            case Constants.CardinalDirection.W:
                lookAtTransform = new Vector3(position.x + 1, position.y, position.z);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(direction), direction, null);
            }

            transform.LookAt(lookAtTransform);
            Direction = direction;
        }
コード例 #3
0
            IEnumerator MovePlayer(Constants.CardinalDirection direction)
            {
                if (!_inputEnabled)
                {
                    yield break;
                }

                var targetCoord = Context._stage.Player.Cell.GetAdjacentCoord(direction);

                if (!Context._stage.IsMovableOrAttackableCell(targetCoord))
                {
                    yield break;
                }

                _inputEnabled = false;

                var cell = Context._stage.GetCell(targetCoord);

                if (!ReferenceEquals(cell.Unit, null) && cell.Unit.UnitType == Constants.UnitType.Enemy)
                {
                    yield return(Context._stage.Player.Attack(cell.Unit));
                }
                else
                {
                    yield return(Context._stage.Player.Move(cell));
                }

                StateMachine.Transit <EnemyTurnState>();
            }
コード例 #4
0
        public void SpawnEnemy(StageCell cell, Constants.CardinalDirection direction)
        {
            var unit = Unit.Spawn(
                Constants.UnitType.Enemy,
                _enemyUnitPrefab,
                transform, cell, direction);

            unit.UnitStatus.MaxHealth = 1;
            unit.UnitStatus.Health    = 1;
            unit.OnUnitDied          += OnUnitDied;
            unit.UpdateStatusView();
            Enemies.Add(unit.Id, unit);
        }
コード例 #5
0
        public static T Spawn <T>(
            Constants.UnitType unitType,
            T prefab,
            Transform parent,
            StageCell cell,
            Constants.CardinalDirection direction) where T : Unit
        {
            var unit = Instantiate(prefab, cell.Tile.transform.position, prefab.transform.rotation);

            unit.transform.parent = parent;
            unit.Id   = _latestId++;
            unit.Cell = cell;
            unit.SetDirection(direction);
            unit.UnitType   = unitType;
            unit.UnitStatus = new UnitStatus();
            cell.Unit       = unit;

            return(unit);
        }