A game about forced loneliness, made by TACStudios
1using System;
2using UnityEditor.Graphing;
3using UnityEditor.ShaderGraph.Drawing.Slots;
4using UnityEngine;
5using UnityEngine.UIElements;
6
7namespace UnityEditor.ShaderGraph
8{
9 [Serializable]
10 class ScreenPositionMaterialSlot : Vector4MaterialSlot, IMayRequireScreenPosition, IMayRequireNDCPosition, IMayRequirePixelPosition
11 {
12 [SerializeField]
13 ScreenSpaceType m_ScreenSpaceType;
14
15 public ScreenSpaceType screenSpaceType
16 {
17 get { return m_ScreenSpaceType; }
18 set { m_ScreenSpaceType = value; }
19 }
20
21 public override bool isDefaultValue => screenSpaceType == ScreenSpaceType.Default;
22
23 public ScreenPositionMaterialSlot()
24 { }
25
26 public ScreenPositionMaterialSlot(int slotId, string displayName, string shaderOutputName, ScreenSpaceType screenSpaceType,
27 ShaderStageCapability stageCapability = ShaderStageCapability.All, bool hidden = false)
28 : base(slotId, displayName, shaderOutputName, SlotType.Input, Vector3.zero, stageCapability, hidden: hidden)
29 {
30 this.screenSpaceType = screenSpaceType;
31 }
32
33 public override VisualElement InstantiateControl()
34 {
35 return new ScreenPositionSlotControlView(this);
36 }
37
38 public override string GetDefaultValue(GenerationMode generationMode)
39 {
40 return m_ScreenSpaceType.ToValueAsVariable();
41 }
42
43 public bool RequiresScreenPosition(ShaderStageCapability stageCapability)
44 {
45 return !isConnected && screenSpaceType.RequiresScreenPosition();
46 }
47 public bool RequiresNDCPosition(ShaderStageCapability stageCapability)
48 {
49 return !isConnected && screenSpaceType.RequiresNDCPosition();
50 }
51 public bool RequiresPixelPosition(ShaderStageCapability stageCapability)
52 {
53 return !isConnected && screenSpaceType.RequiresPixelPosition();
54 }
55
56 public override void CopyValuesFrom(MaterialSlot foundSlot)
57 {
58 var slot = foundSlot as ScreenPositionMaterialSlot;
59 if (slot != null)
60 screenSpaceType = slot.screenSpaceType;
61 }
62 }
63}