Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// フィールドアイテムを追加する
 /// </summary>
 public void AddItem(FieldItem item)
 {
     this.items.Add(item);
     DungeonManager.Instance.AddItemCoord(item.Coord);
 }