2021-04-19 03:46:35 +01:00
using System ;
using System.Collections ;
using System.Collections.Generic ;
using UniRx ;
using UnityEngine ;
using UnityEngine.EventSystems ;
public class WeaponGroupAssignment : MonoBehaviour
{
public RectTransform Container ;
public WeaponGroupElement GroupPrefab ;
public Color ActiveColor ;
public Color InactiveColor ;
Subject < ( PointerEventData pointerEventData , int group ) > _onBeginDrag ;
Subject < ( PointerEventData pointerEventData , int group ) > _onDrag ;
Subject < ( PointerEventData pointerEventData , int group ) > _onEndDrag ;
public List < WeaponGroupElement > Groups { get ; } = new List < WeaponGroupElement > ( ) ;
public void Inspect ( EquippedItem item )
{
var weapon = item . GetBehavior < Weapon > ( ) ;
2026-06-14 11:01:49 +01:00
if ( weapon = = null ) throw new ArgumentException ( $"Attempted to inspect weapon groups on item \" { item . RuntimeItem ? . Name ? ? "Unknown item" } \ " but no weapon is present!" ) ;
2021-05-02 20:59:45 +01:00
var groupCount = ActionGameManager . Instance . Settings . GameplaySettings . WeaponGroupCount ;
2021-04-19 03:46:35 +01:00
for ( int i = 0 ; i < groupCount ; i + + )
{
var i1 = i ;
2021-05-02 20:59:45 +01:00
bool groupContainsItem ( ) = > item . Entity . WeaponGroups [ i1 ] . items . Contains ( item ) ;
2021-04-19 03:46:35 +01:00
var group = Instantiate ( GroupPrefab , Container ) ;
Groups . Add ( group ) ;
group . Label . text = $"G{i+1}" ;
group . Label . color = groupContainsItem ( ) ? ActiveColor : InactiveColor ;
group . Button . onClick . AddListener ( ( ) = >
{
if ( groupContainsItem ( ) )
{
2021-05-02 20:59:45 +01:00
item . Entity . WeaponGroups [ i1 ] . items . Remove ( item ) ;
item . Entity . WeaponGroups [ i1 ] . weapons . Remove ( weapon ) ;
2021-04-19 03:46:35 +01:00
group . Label . color = InactiveColor ;
}
else
{
2021-05-02 20:59:45 +01:00
item . Entity . WeaponGroups [ i1 ] . items . Add ( item ) ;
item . Entity . WeaponGroups [ i1 ] . weapons . Add ( weapon ) ;
2021-04-19 03:46:35 +01:00
group . Label . color = ActiveColor ;
}
} ) ;
group . BeginDragTrigger . OnBeginDragAsObservable ( )
. Subscribe ( data = > _onBeginDrag ? . OnNext ( ( data , i1 ) ) ) ;
group . DragTrigger . OnDragAsObservable ( )
. Subscribe ( data = > _onDrag ? . OnNext ( ( data , i1 ) ) ) ;
group . EndDragTrigger . OnEndDragAsObservable ( )
. Subscribe ( data = > _onEndDrag ? . OnNext ( ( data , i1 ) ) ) ;
}
}
public UniRx . IObservable < ( PointerEventData pointerEventData , int group ) > OnBeginDragAsObservable ( ) = >
_onBeginDrag ? ? ( _onBeginDrag = new Subject < ( PointerEventData pointerEventData , int group ) > ( ) ) ;
public UniRx . IObservable < ( PointerEventData pointerEventData , int group ) > OnDragAsObservable ( ) = >
_onDrag ? ? ( _onDrag = new Subject < ( PointerEventData pointerEventData , int group ) > ( ) ) ;
public UniRx . IObservable < ( PointerEventData pointerEventData , int group ) > OnEndDragAsObservable ( ) = >
_onEndDrag ? ? ( _onEndDrag = new Subject < ( PointerEventData pointerEventData , int group ) > ( ) ) ;
}