見出し画像

RAYSER進捗(20231008)

画面左下にサブウェポンのUIを仮設置するなどしていました。
まだサブウェポンの見た目をアイコンにするか文字のような形にするかは考え中です。
まだ全体的にどのような設計にするかなどイメージが定まっていないので、UIなどやシーンを跨ぐ処理などを実装しながら、模索しています。

サブウェポンUIの仮設置

先日作成したクラスをVContainerのRootLifeTimeScopeに設定させてみました。

using _RAYSER.Scripts.Item;
using _RAYSER.Scripts.Score;
using _RAYSER.Scripts.Weapon;
using BGM.Volume;
using Score;
using VContainer;
using VContainer.Unity;

namespace _RAYSER.Scripts.VContainer
{
    public class RootLifetimeScope : LifetimeScope
    {
        protected override void Configure(IContainerBuilder builder)
        {
            base.Configure(builder);

            // 子のLifetimeScopeに同じVolumeDataを引き渡す
            builder.Register<VolumeData>(Lifetime.Singleton);
            builder.Register<ScoreData>(Lifetime.Singleton);
            builder.Register<ItemAcquisition>(Lifetime.Singleton);
            builder.Register<SubWeaponMounted>(Lifetime.Singleton);
        }
    }
}

下層のLifeTimeScopeも作成しましたが、こちらはまだ未確定なので、中身は空です。カスタマイズ関連の処理などを追加したらこちらに記載しようかなと考えています。

using VContainer.Unity;

namespace _RAYSER.Scripts.Weapon
{
    /// <summary>
    /// サブウェポン用LifetimeScope
    /// </summary>
    public class SubWeaponLifetimeScope : LifetimeScope
    {

    }
}

先日のコードも修正しました。

namespace _RAYSER.Scripts.Weapon
{
    /// <summary>
    /// サブウェポン切り替え方向
    /// </summary>
    public enum SubweaponMoveDirection
    {
        Left,
        Right,
    }
}
using System.Collections;
using System.Linq;
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)
        {
            // _subWeaponの配列内のいずれかに値が存在する場合は格納しない
            if (_subWeapon.Any(i => i != null)) 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];
        }
    }
}

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