154 lines
3.2 KiB
C#
154 lines
3.2 KiB
C#
using BlockSpace.Voxels;
|
|
using Photon.Pun;
|
|
using UnityEngine;
|
|
|
|
public abstract class NodeBehavior : MonoBehaviour
|
|
{
|
|
[HideInInspector]
|
|
public Node Node;
|
|
|
|
protected bool IsAuthoritative
|
|
{
|
|
get
|
|
{
|
|
if (PhotonNetwork.InRoom)
|
|
{
|
|
return PhotonNetwork.IsMasterClient;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public virtual void OnGraphUpdate()
|
|
{
|
|
}
|
|
|
|
public virtual void OnRun(string inputPortName)
|
|
{
|
|
}
|
|
|
|
public virtual void OnInputValueChanged(string inputPortName, BSValue value)
|
|
{
|
|
}
|
|
|
|
protected BSValue GetInputValue(string inputPortName)
|
|
{
|
|
if (!(Node != null))
|
|
{
|
|
return BSValue.None;
|
|
}
|
|
return Node.GetInputValue(inputPortName);
|
|
}
|
|
|
|
protected double GetInputNumber(string inputPortName)
|
|
{
|
|
return GetInputValue(inputPortName).AsNumber();
|
|
}
|
|
|
|
protected string GetInputText(string inputPortName)
|
|
{
|
|
return GetInputValue(inputPortName).AsText();
|
|
}
|
|
|
|
protected int GetInputPlayerId(string inputPortName)
|
|
{
|
|
return GetInputValue(inputPortName).AsPlayerId();
|
|
}
|
|
|
|
protected int GetInputGroupId(string inputPortName)
|
|
{
|
|
return GetInputValue(inputPortName).AsGroupId();
|
|
}
|
|
|
|
protected void SetOutputValue(string outputPortName, BSValue value)
|
|
{
|
|
Node?.SetOutputValue(outputPortName, value);
|
|
}
|
|
|
|
protected void SetLocalOutputValue(string outputPortName, BSValue value)
|
|
{
|
|
Node?.SetOutputValueLocalOnly(outputPortName, value);
|
|
}
|
|
|
|
protected void SetOutputValueIfChanged(string outputPortName, BSValue value)
|
|
{
|
|
BSValue bSValue = value.Normalize();
|
|
if (!BSValueUtility.Equals(GetOutputValue(outputPortName), bSValue))
|
|
{
|
|
SetOutputValue(outputPortName, bSValue);
|
|
}
|
|
}
|
|
|
|
protected void SetLocalOutputValueIfChanged(string outputPortName, BSValue value)
|
|
{
|
|
BSValue bSValue = value.Normalize();
|
|
if (!BSValueUtility.Equals(GetOutputValue(outputPortName), bSValue))
|
|
{
|
|
SetLocalOutputValue(outputPortName, bSValue);
|
|
}
|
|
}
|
|
|
|
protected BSValue GetOutputValue(string outputPortName)
|
|
{
|
|
if (!(Node != null))
|
|
{
|
|
return BSValue.None;
|
|
}
|
|
return Node.GetOutputValue(outputPortName);
|
|
}
|
|
|
|
protected void SetOutputNumber(string outputPortName, double value)
|
|
{
|
|
SetOutputValue(outputPortName, BSValue.FromNumber(value));
|
|
}
|
|
|
|
protected void SetOutputText(string outputPortName, string value)
|
|
{
|
|
SetOutputValue(outputPortName, BSValue.FromText(value));
|
|
}
|
|
|
|
protected void SetOutputPlayer(string outputPortName, int playerId)
|
|
{
|
|
SetOutputValue(outputPortName, BSValue.FromPlayer(playerId));
|
|
}
|
|
|
|
protected void SetLocalOutputPlayer(string outputPortName, int playerId)
|
|
{
|
|
SetLocalOutputValue(outputPortName, BSValue.FromPlayer(playerId));
|
|
}
|
|
|
|
protected void SetOutputGroup(string outputPortName, int groupId)
|
|
{
|
|
SetOutputValue(outputPortName, BSValue.FromGroup(groupId));
|
|
}
|
|
|
|
protected void ClearOutputValue(string outputPortName)
|
|
{
|
|
SetOutputValue(outputPortName, BSValue.None);
|
|
}
|
|
|
|
protected void TriggerOutput(string outputPortName)
|
|
{
|
|
Node?.TriggerRun(outputPortName);
|
|
}
|
|
|
|
protected bool TryGetInputGroup(string inputPortName, out VoxelGroup group)
|
|
{
|
|
group = null;
|
|
if (Node != null)
|
|
{
|
|
return Node.TryGetInputGroup(inputPortName, out group);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
protected VoxelGroup GetInputGroup(string inputPortName)
|
|
{
|
|
if (!(Node != null))
|
|
{
|
|
return null;
|
|
}
|
|
return Node.GetInputGroup(inputPortName);
|
|
}
|
|
}
|