Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
EffectParameterCollection.cs
Go to the documentation of this file.
1using System;
5
7
8public sealed class EffectParameterCollection : IEnumerable<EffectParameter>
9{
10 private Effect _parent;
11
12 private unsafe ID3DXBaseEffect* pEffect;
13
15
16 public EffectParameter this[int index]
17 {
18 get
19 {
20 if (index >= 0 && index < pParameter.Count)
21 {
22 return pParameter[index];
23 }
24 return null;
25 }
26 }
27
28 public EffectParameter this[string name]
29 {
30 get
31 {
33 if (enumerator.MoveNext())
34 {
35 do
36 {
37 EffectParameter current = enumerator.Current;
38 if (current._name == name)
39 {
40 return current;
41 }
42 }
43 while (enumerator.MoveNext());
44 }
45 return null;
46 }
47 }
48
49 public int Count => pParameter.Count;
50
51 internal unsafe EffectParameterCollection(ID3DXBaseEffect* parent, Effect effect, sbyte* parameter, int count, [MarshalAs(UnmanagedType.U1)] bool arrayElements)
52 {
53 _parent = effect;
54 pEffect = parent;
55 base._002Ector();
57 int num = 0;
58 if (0 >= count)
59 {
60 return;
61 }
62 do
63 {
64 sbyte* handle;
65 if (arrayElements)
66 {
68 handle = ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, sbyte*, uint, sbyte*>)(int)(*(uint*)(*(int*)ptr + 44)))((nint)ptr, parameter, (uint)num);
69 }
70 else
71 {
73 handle = ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, sbyte*, uint, sbyte*>)(int)(*(uint*)(*(int*)ptr + 32)))((nint)ptr, parameter, (uint)num);
74 }
76 if (effectParameter._paramClass >= EffectParameterClass.Scalar && effectParameter._paramType >= EffectParameterType.Void && effect.WantParameter(effectParameter))
77 {
79 }
80 num++;
81 }
82 while (num < count);
83 }
84
85 internal unsafe void UpdateParent(ID3DXBaseEffect* parent, sbyte* parameter, [MarshalAs(UnmanagedType.U1)] bool arrayElements)
86 {
87 pEffect = parent;
88 int num = 0;
89 if (0 >= pParameter.Count)
90 {
91 return;
92 }
93 do
94 {
95 sbyte* handle;
96 if (arrayElements)
97 {
98 int num2 = *(int*)pEffect + 44;
99 handle = ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, sbyte*, uint, sbyte*>)(int)(*(uint*)num2))((nint)pEffect, parameter, (uint)pParameter[num]._index);
100 }
101 else
102 {
103 int num3 = *(int*)pEffect + 32;
104 handle = ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, sbyte*, uint, sbyte*>)(int)(*(uint*)num3))((nint)pEffect, parameter, (uint)pParameter[num]._index);
105 }
106 pParameter[num].UpdateHandle(pEffect, handle);
107 num++;
108 }
109 while (num < pParameter.Count);
110 }
111
112 internal void SaveDataForRecreation()
113 {
114 int num = 0;
115 if (0 >= pParameter.Count)
116 {
117 return;
118 }
119 do
120 {
122 effectParameter.pElementCollection.SaveDataForRecreation();
123 effectParameter.pParamCollection.SaveDataForRecreation();
124 if (effectParameter.pElementCollection.pParameter.Count <= 0)
125 {
126 switch (effectParameter._paramType)
127 {
128 case EffectParameterType.String:
129 effectParameter.savedValue = effectParameter.GetValueString();
130 break;
131 case EffectParameterType.Bool:
132 case EffectParameterType.Int32:
133 case EffectParameterType.Single:
134 {
135 int num2 = effectParameter._columns * effectParameter._rows;
136 if (num2 > 0)
137 {
138 effectParameter.savedValue = effectParameter.GetValueSingleArray(num2);
139 }
140 break;
141 }
142 }
143 }
144 num++;
145 }
146 while (num < pParameter.Count);
147 }
148
150 {
152 if (enumerator.MoveNext())
153 {
154 do
155 {
156 EffectParameter current = enumerator.Current;
157 if (string.Compare(current._semantic, semantic, StringComparison.OrdinalIgnoreCase) == 0)
158 {
159 return current;
160 }
161 }
162 while (enumerator.MoveNext());
163 }
164 return null;
165 }
166
171
176
178 {
179 //ILSpy generated this explicit interface implementation from .override directive in GetGenericEnumerator
180 return this.GetGenericEnumerator();
181 }
182
184 {
185 return pParameter.GetEnumerator();
186 }
187
189 {
190 //ILSpy generated this explicit interface implementation from .override directive in GetBaseEnumerator
191 return this.GetBaseEnumerator();
192 }
193}
unsafe void UpdateParent(ID3DXBaseEffect *parent, sbyte *parameter, [MarshalAs(UnmanagedType.U1)] bool arrayElements)
unsafe EffectParameterCollection(ID3DXBaseEffect *parent, Effect effect, sbyte *parameter, int count, [MarshalAs(UnmanagedType.U1)] bool arrayElements)
virtual bool WantParameter(EffectParameter P_0)
Definition Effect.cs:474
void Add(TKey key, TValue value)
new IEnumerator< T > GetEnumerator()