A game about forced loneliness, made by TACStudios
1using UnityEditor.Graphing; 2using UnityEngine; 3 4namespace UnityEditor.ShaderGraph 5{ 6 [Title("Input", "Scene", "Camera")] 7 class CameraNode : AbstractMaterialNode, IMayRequireTransform 8 { 9 const string kOutputSlotName = "Position"; 10 const string kOutputSlot1Name = "Direction"; 11 const string kOutputSlot2Name = "Orthographic"; 12 const string kOutputSlot3Name = "Near Plane"; 13 const string kOutputSlot4Name = "Far Plane"; 14 const string kOutputSlot5Name = "Z Buffer Sign"; 15 const string kOutputSlot6Name = "Width"; 16 const string kOutputSlot7Name = "Height"; 17 18 public const int OutputSlotId = 0; 19 public const int OutputSlot1Id = 1; 20 public const int OutputSlot2Id = 2; 21 public const int OutputSlot3Id = 3; 22 public const int OutputSlot4Id = 4; 23 public const int OutputSlot5Id = 5; 24 public const int OutputSlot6Id = 6; 25 public const int OutputSlot7Id = 7; 26 27 public CameraNode() 28 { 29 name = "Camera"; 30 synonyms = new string[] { "position", "direction", "orthographic", "near plane", "far plane", "width", "height" }; 31 UpdateNodeAfterDeserialization(); 32 } 33 34 public sealed override void UpdateNodeAfterDeserialization() 35 { 36 AddSlot(new Vector3MaterialSlot(OutputSlotId, kOutputSlotName, kOutputSlotName, SlotType.Output, Vector3.zero)); 37 AddSlot(new Vector3MaterialSlot(OutputSlot1Id, kOutputSlot1Name, kOutputSlot1Name, SlotType.Output, Vector3.zero)); 38 AddSlot(new Vector1MaterialSlot(OutputSlot2Id, kOutputSlot2Name, kOutputSlot2Name, SlotType.Output, 0)); 39 AddSlot(new Vector1MaterialSlot(OutputSlot3Id, kOutputSlot3Name, kOutputSlot3Name, SlotType.Output, 0)); 40 AddSlot(new Vector1MaterialSlot(OutputSlot4Id, kOutputSlot4Name, kOutputSlot4Name, SlotType.Output, 1)); 41 AddSlot(new Vector1MaterialSlot(OutputSlot5Id, kOutputSlot5Name, kOutputSlot5Name, SlotType.Output, 1)); 42 AddSlot(new Vector1MaterialSlot(OutputSlot6Id, kOutputSlot6Name, kOutputSlot6Name, SlotType.Output, 1)); 43 AddSlot(new Vector1MaterialSlot(OutputSlot7Id, kOutputSlot7Name, kOutputSlot7Name, SlotType.Output, 1)); 44 RemoveSlotsNameNotMatching(new[] { OutputSlotId, OutputSlot1Id, OutputSlot2Id, OutputSlot3Id, OutputSlot4Id, OutputSlot5Id, OutputSlot6Id, OutputSlot7Id }); 45 } 46 47 public override string GetVariableNameForSlot(int slotId) 48 { 49 switch (slotId) 50 { 51 case OutputSlot1Id: 52 return "-UNITY_MATRIX_V[2].xyz"; 53 case OutputSlot2Id: 54 return "unity_OrthoParams.w"; 55 case OutputSlot3Id: 56 return "_ProjectionParams.y"; 57 case OutputSlot4Id: 58 return "_ProjectionParams.z"; 59 case OutputSlot5Id: 60 return "_ProjectionParams.x"; 61 case OutputSlot6Id: 62 return "unity_OrthoParams.x"; 63 case OutputSlot7Id: 64 return "unity_OrthoParams.y"; 65 default: 66 return "_WorldSpaceCameraPos"; 67 } 68 } 69 70 public NeededTransform[] RequiresTransform(ShaderStageCapability stageCapability = ShaderStageCapability.All) 71 { 72 return new[] 73 { 74 NeededTransform.ObjectToWorld, 75 NeededTransform.WorldToObject 76 }; 77 } 78 } 79}