A game about forced loneliness, made by TACStudios
1using System; 2using System.Text.RegularExpressions; 3using System.Collections.Generic; 4using System.Linq; 5using UnityEngine; 6using UnityEditor.Graphing; 7using UnityEditor.ShaderGraph.Drawing.Controls; 8using UnityEditor.ShaderGraph.Internal; 9 10namespace UnityEditor.ShaderGraph 11{ 12 [FormerName("UnityEngine.MaterialGraph.WorldPosNode")] 13 [Title("Input", "Geometry", "Position")] 14 class PositionNode : GeometryNode, IMayRequirePosition, IMayRequirePositionPredisplacement 15 { 16 public override int latestVersion => 1; 17 private const int kOutputSlotId = 0; 18 public const string kOutputSlotName = "Out"; 19 public override List<CoordinateSpace> validSpaces => new List<CoordinateSpace> { CoordinateSpace.Object, CoordinateSpace.View, CoordinateSpace.World, CoordinateSpace.Tangent, CoordinateSpace.AbsoluteWorld }; 20 [SerializeField] 21 internal PositionSource m_PositionSource = PositionSource.Default; 22 23 public PositionNode() 24 { 25 name = "Position"; 26 precision = Precision.Single; 27 synonyms = new string[] { "location" }; 28 UpdateNodeAfterDeserialization(); 29 } 30 31 public sealed override void UpdateNodeAfterDeserialization() 32 { 33 AddSlot(new Vector3MaterialSlot( 34 kOutputSlotId, 35 kOutputSlotName, 36 kOutputSlotName, 37 SlotType.Output, 38 Vector3.zero)); 39 RemoveSlotsNameNotMatching(new[] { kOutputSlotId }); 40 } 41 42 public override string GetVariableNameForSlot(int slotId) 43 { 44 var name = string.Format("IN.{0}", space.ToVariableName(InterpolatorType.Position)); 45 if (RequiresPositionPredisplacement(ShaderStageCapability.All) != NeededCoordinateSpace.None) 46 { 47 name += PositionSource.Predisplacement.ToString(); 48 } 49 return name; 50 } 51 52 public NeededCoordinateSpace RequiresPosition(ShaderStageCapability stageCapability) 53 { 54 return space.ToNeededCoordinateSpace(); 55 } 56 57 public NeededCoordinateSpace RequiresPositionPredisplacement(ShaderStageCapability stageCapability = ShaderStageCapability.All) 58 { 59 return m_PositionSource == PositionSource.Predisplacement ? space.ToNeededCoordinateSpace() : NeededCoordinateSpace.None; 60 } 61 62 public override void OnAfterMultiDeserialize(string json) 63 { 64 base.OnAfterMultiDeserialize(json); 65 //required update 66 if (sgVersion < 1) 67 { 68 ChangeVersion(1); 69 } 70 } 71 } 72}