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