見出し画像

RAYSER進捗(20231007)

まだ仮ですが、アイテム管理クラスを作っていました。
カスタマイズ部分からの受け渡しをどのようにするかはまだ考え中ですが、MessagePipeかMessageBrokerでクラスを受け渡すような感じがよいのではと考えています。(まだMessagePipeを使ったことがないので、今回を機に使ってみようかなと考え中です。)

所有中のアイテムを管理する仮のクラスです。ここではあくまで所有しているアイテムを種類毎に返却する程度のものを想定しています。

using System.Linq;

namespace _RAYSER.Scripts.Item
{
    /// <summary>
    /// 所有アイテム管理クラス
    /// </summary>
    public class ItemAcquisition
    {
        /// <summary>
        /// 所有中アイテム
        /// </summary>
        private IItem[] _items;
        
        /// <summary>
        /// アイテム格納処理
        /// </summary>
        /// <param name="items"></param>
        public void SetItem(IItem[] items)
        {
            _items = items;
        }
        
        /// <summary>
        /// SubWeaponの値を持つデーターを取得する
        /// </summary>
        /// <returns></returns>
        public IItem[] GetSubWeapon()
        {
            return _items.Where(item => item.itemType == ItemType.SubWeapon).ToArray();
        }
        
        /// <summary>
        /// Bombの値を持つデーターを取得する
        /// </summary>
        /// <returns></returns>
        public IItem[] GetBomb()
        {
            return _items.Where(item => item.itemType == ItemType.Bomb).ToArray();
        }
        
        /// <summary>
        /// Shieldの値を持つデーターを取得する
        /// </summary>
        /// <returns></returns>
        public IItem[] GetShield()
        {
            return _items.Where(item => item.itemType == ItemType.Shield).ToArray();
        }
    }
}

サブウェポンの装着関連のクラスのプロトタイプです。
所有中のサブウェポンを最大5つまで設定できるようなものを想定しています。
あとはコントローラーのLRボタンで切り替えできるような想定でメソッドを作ってみました。
2023/10/08修正
enumがclass内に含まれていたのを外に出して、配列内に同じ値があるかどうかの判定を一旦コメントアウトしました。

namespace _RAYSER.Scripts.Weapon
{
    /// <summary>
    /// サブウェポン切り替え方向
    /// </summary>
    public enum SubweaponMoveDirection
    {
        Left,
        Right,
    }
}
using _RAYSER.Scripts.Item;

namespace _RAYSER.Scripts.Weapon
{
    /// <summary>
    /// サブウェポン装備クラス
    /// </summary>
    public class SubWeaponMounted
    {
        /// <summary>
        /// 選択中のサブウェポンのインデックス
        /// </summary>
        private int _selectingSubWeaponIndex;

        /// <summary>
        /// 格納可能なサブウェポン
        /// </summary>
        private IItem[] _subWeapon = new IItem[5];

        /// <summary>
        /// サブウェポンの格納
        /// </summary>
        /// <param name="index"></param>
        /// <param name="item"></param>
        public void SetSubWeapon(int index, IItem item)
        {
            // すでに他の配列に格納されている場合は格納しない
            //if (_subWeapon.Contains(item)) return;
            
            _subWeapon[index] = item;
        }

        /// <summary>
        /// サブウェポンの切り替え処理
        /// </summary>
        /// <param name="direction"></param>
        public void SwitchSubWeapon(SubweaponMoveDirection direction)
        {
            var move = direction == SubweaponMoveDirection.Left ? -1 : 1;
            var index = _selectingSubWeaponIndex + move;
            if (index < 0) index = _subWeapon.Length - 1;
            if (index > _subWeapon.Length - 1) index = 0;
            _selectingSubWeaponIndex = index;
        }

        /// <summary>
        /// 選択中のサブウェポンを取得する
        /// </summary>
        public IItem GetSelectingSubWeapon()
        {
            if (_subWeapon[_selectingSubWeaponIndex] == null) return null;

            return _subWeapon[_selectingSubWeaponIndex];
        }
    }
}

この記事が気に入ったらサポートをしてみませんか?