103 lines
2.8 KiB
C#
103 lines
2.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics.Contracts;
|
|
using UnityEngine;
|
|
using UnityEngine.Pool;
|
|
using XED.Interfaces;
|
|
using XED.Attributes;
|
|
|
|
namespace XED
|
|
{
|
|
public class TwinObject : MonoBehaviour
|
|
{
|
|
public HashSet<TwinObject> childs = new HashSet<TwinObject>();
|
|
|
|
public TwinPhysics physics = new TwinPhysics();
|
|
public TwinMetaData metaData = new TwinMetaData();
|
|
public AssetLabel assetLabel;
|
|
|
|
public event Action<TwinObject> onSelectEvent;
|
|
public event Action<TwinObject> onDeselectEvent;
|
|
public event Action<TwinObject, TwinObject> onTwinConflictEvent;
|
|
public event Action<TwinObject, TwinObject> onTwinDeconflictEvent;
|
|
|
|
[PropertyVisible, Tooltip("ù ¹øÂ° info")]
|
|
public bool IsDisplayable;
|
|
[PropertyVisible, Tooltip("µÎ ¹øÂ° info")]
|
|
public bool IsInteractible;
|
|
|
|
public override void AfterAwake()
|
|
{
|
|
IsDisplayable = true;
|
|
IsInteractible = true;
|
|
physics.Init(this);
|
|
metaData.Init(this);
|
|
}
|
|
|
|
public virtual void SetDisplayable(bool value)
|
|
{
|
|
IsDisplayable = !value;
|
|
metaData.modeling.SetActive(!value);
|
|
}
|
|
|
|
public virtual void Select()
|
|
{
|
|
onSelectEvent?.Invoke(this);
|
|
}
|
|
|
|
public virtual void SetInteractible(bool value)
|
|
{
|
|
IsInteractible = !value;
|
|
physics.SetActive(!value);
|
|
}
|
|
public virtual void Deselect()
|
|
{
|
|
onDeselectEvent?.Invoke(this);
|
|
}
|
|
|
|
public HashSet<TwinObject> crashObjects = new();
|
|
public BoxHighLighter boxHighLighter;
|
|
|
|
private void OnTriggerEnter(Collider other)
|
|
{
|
|
if (!other.TryGetComponent<TwinObject>(out TwinObject contracter))
|
|
return;
|
|
crashObjects.Add(contracter);
|
|
Conflict(contracter);
|
|
}
|
|
|
|
private void OnTriggerExit(Collider other)
|
|
{
|
|
if (!other.TryGetComponent<TwinObject>(out TwinObject twin))
|
|
return;
|
|
CrashObjectRemove(twin);
|
|
}
|
|
|
|
public void CrashBoxHighLightDeActive()
|
|
{
|
|
foreach(var contracter in crashObjects)
|
|
{
|
|
contracter.CrashObjectRemove(this);
|
|
}
|
|
}
|
|
public void CrashObjectRemove(TwinObject crashObject)
|
|
{
|
|
crashObjects.Remove(crashObject);
|
|
Deconflict(crashObject);
|
|
}
|
|
public virtual void Conflict(TwinObject contract)
|
|
{
|
|
onTwinConflictEvent?.Invoke(this, contract);
|
|
}
|
|
|
|
public virtual void Deconflict(TwinObject contract)
|
|
{
|
|
onTwinDeconflictEvent?.Invoke(this, contract);
|
|
}
|
|
|
|
public virtual void MaterialChange(Material mat)
|
|
{
|
|
}
|
|
|
|
}
|
|
} |