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); } }