private Behavior DecideBehaviour() { var direction = InputManager.Instance.DirectionKey; // 方向キー入力があったらプレイヤーの向きを更新 if (!direction.IsNeutral) { Chip.Direction = direction; } // 周囲に敵がいれば敵の方を向く if (InputManager.Instance.RB4.IsUp) { if (this.aroundEnemies.Count == 0) { // 周囲1マスを見る DungeonManager.Instance.LookAround(Coord, 1, (x, y, tile) => { if (tile.IsEnemy) { this.aroundEnemies.Add(new Vector2Int(x, y)); } }); } // 周囲に敵がいたらそっちを向く if (this.aroundEnemies.Count != 0) { var pos = this.aroundEnemies[this.aroundEnemiesIndex % this.aroundEnemies.Count]; Chip.Direction = Direction.LookAt(Coord, pos); this.aroundEnemiesIndex++; } } // ダッシュしたい場合はダッシュできるかどうかをチェック // TODO: ダッシュチェック未実装 if (IsWantToDash()) { this.dashDirection = direction; return(Behavior.Dash); } // 移動したい場合は移動できるかどうかをチェックしてDungeon情報を更新 if (IsWantToMove() && CanMoveTo(direction)) { // 移動先の座標を算出 var next = Coord + direction.ToVector(false); // 座標の更新 DungeonManager.Instance.UpdatePlayerCoord(Coord, next); Coord = next; return(Behavior.Move); } // 通常攻撃(RB2) if (InputManager.Instance.RB2.IsHold) { // 攻撃要求を設定 this.actionRequest.Name = Status.Name; this.actionRequest.Pow = Status.Pow; this.actionRequest.Coord = Coord; this.actionRequest.Area = GetAttackCoords(); return(Behavior.Action); } // 遠距離攻撃(R) if (InputManager.Instance.R.IsDown) { var(isHit, pos) = SearchAttackTarget(Coord, Chip.Direction); this.item = ItemManager.Instance.CreateItemByAlias(Master.Item.Alias.Shuriken); this.item.SetCoord(Coord); this.item.SetThrow(pos); return(Behavior.Action); } // メニュー(RB1) if (InputManager.Instance.RB1.IsDown) { return(Behavior.Menu); } return(Behavior.Thinking); }
/// <summary> /// フィールドアイテムを追加する /// </summary> public void AddItem(FieldItem item) { this.items.Add(item); DungeonManager.Instance.AddItemCoord(item.Coord); }