BITFALL/Assets/Artists/Scripts/Props/Prop_Modify.cs

87 lines
1.8 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using BITFALL.Guns.Modify;
using BITKit;
using BITKit.Modification;
using UnityEngine;
namespace BITFALL.Props
{
public class Prop_Modify : MonoBehaviour
{
private readonly ValidHandle _allowModify = new();
public IValidHandle AllowModify => _allowModify;
private Prop_ModifyObject[] _modified = Array.Empty<Prop_ModifyObject>();
private Prop_ModifyObject[] _modifies = Array.Empty<Prop_ModifyObject>();
private void Start()
{
_modifies = GetComponentsInChildren<Prop_ModifyObject>(true);
_allowModify.AddListener(OnAllowModify);
_allowModify.AddElement(this);
Modify();
}
private void OnAllowModify(bool obj)
{
foreach (var x in _modifies)
{
EnabledModify(x, false);
}
if (!obj) return;
foreach (var x in _modified)
{
EnabledModify(x, true);
}
}
[BIT]
private void Modify()
{
Modify(null);
OnAllowModify(true);
}
public void Modify(IModifyManager modify)
{
ClearModify();
if (modify is null)
{
if (TryGetComponent<IBasicItem>(out var item) is false || item.TryGetProperty<IModifyManager>(out modify) is false)
{
return;
}
}
var _newModified = modify.Modified.Values;
_modified = _modifies.Where(x=>_newModified.Contains(x.scriptableObject)).ToArray();
_allowModify.Invoke();
}
[BIT]
public void ClearModify()
{
foreach (var x in GetComponentsInChildren<Prop_ModifyObject>(true))
{
EnabledModify(x,false);
}
}
private void EnabledModify(Prop_ModifyObject modifyObject, bool isModify)
{
foreach (var obj in modifyObject.originalObjects)
{
if (obj)
obj.gameObject.SetActive(!isModify);
}
foreach (var obj in modifyObject.modifyObjects)
{
if (obj)
obj.gameObject.SetActive(isModify);
}
}
}
}