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}