A game about forced loneliness, made by TACStudios
1using UnityEditor.Graphing; 2using UnityEngine; 3 4namespace UnityEditor.ShaderGraph 5{ 6 [Title("Input", "Scene", "Object")] 7 sealed class ObjectNode : AbstractMaterialNode, IMayRequireTransform 8 { 9 const string kOutputSlotName = "Position"; 10 const string kOutputSlot1Name = "Scale"; 11 const string kOutputSlot2Name = "World Bounds Min"; 12 const string kOutputSlot3Name = "World Bounds Max"; 13 const string kOutputSlot4Name = "Bounds Size"; 14 15 public const int OutputSlotId = 0; 16 public const int OutputSlot1Id = 1; 17 public const int OutputSlot2Id = 2; 18 public const int OutputSlot3Id = 3; 19 public const int OutputSlot4Id = 4; 20 21 public ObjectNode() 22 { 23 name = "Object"; 24 synonyms = new string[] { "position", "scale", "bounds", "size" }; 25 UpdateNodeAfterDeserialization(); 26 } 27 28 public override void UpdateNodeAfterDeserialization() 29 { 30 AddSlot(new Vector3MaterialSlot(OutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output, Vector3.zero)); 31 AddSlot(new Vector3MaterialSlot(OutputSlot1Id, kOutputSlot1Name, kOutputSlot1Name, SlotType.Output, Vector3.zero)); 32 AddSlot(new Vector3MaterialSlot(OutputSlot2Id, kOutputSlot2Name, kOutputSlot2Name, SlotType.Output, Vector3.zero)); 33 AddSlot(new Vector3MaterialSlot(OutputSlot3Id, kOutputSlot3Name, kOutputSlot3Name, SlotType.Output, Vector3.zero)); 34 AddSlot(new Vector3MaterialSlot(OutputSlot4Id, kOutputSlot4Name, kOutputSlot4Name, SlotType.Output, Vector3.zero)); 35 RemoveSlotsNameNotMatching(new[] { OutputSlotId, OutputSlot1Id, OutputSlot2Id, OutputSlot3Id, OutputSlot4Id }); 36 } 37 38 public override string GetVariableNameForSlot(int slotId) 39 { 40 switch (slotId) 41 { 42 case OutputSlot1Id: 43 return @"$precision3(length($precision3(UNITY_MATRIX_M[0].x, UNITY_MATRIX_M[1].x, UNITY_MATRIX_M[2].x)), 44 length($precision3(UNITY_MATRIX_M[0].y, UNITY_MATRIX_M[1].y, UNITY_MATRIX_M[2].y)), 45 length($precision3(UNITY_MATRIX_M[0].z, UNITY_MATRIX_M[1].z, UNITY_MATRIX_M[2].z)))"; 46 case OutputSlot2Id: 47 return "SHADERGRAPH_RENDERER_BOUNDS_MIN"; 48 case OutputSlot3Id: 49 return "SHADERGRAPH_RENDERER_BOUNDS_MAX"; 50 case OutputSlot4Id: 51 return "(SHADERGRAPH_RENDERER_BOUNDS_MAX - SHADERGRAPH_RENDERER_BOUNDS_MIN)"; 52 default: 53 return "SHADERGRAPH_OBJECT_POSITION"; 54 } 55 } 56 57 public NeededTransform[] RequiresTransform(ShaderStageCapability stageCapability = ShaderStageCapability.All) => new[] { NeededTransform.ObjectToWorld }; 58 } 59}