Skip to content

Commit a70fca3

Browse files
jsm174freezy
authored andcommitted
unit: update switch lamp unit to work more like set lamp unit
1 parent 43e19f9 commit a70fca3

File tree

1 file changed

+62
-10
lines changed

1 file changed

+62
-10
lines changed

Runtime/Nodes/Lamps/SwitchLampUnit.cs

+62-10
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
// You should have received a copy of the GNU General Public License
1515
// along with this program. If not, see <https://www.gnu.org/licenses/>.
1616

17+
using System;
1718
using System.Collections.Generic;
1819
using System.Collections.ObjectModel;
1920
using Unity.VisualScripting;
2021
using UnityEngine;
22+
using VisualPinball.Engine.Game.Engines;
2123

2224
namespace VisualPinball.Unity.VisualScripting
2325
{
@@ -27,8 +29,11 @@ namespace VisualPinball.Unity.VisualScripting
2729
[UnitCategory("Visual Pinball")]
2830
public class SwitchLampUnit : GleUnit, IMultiInputUnit
2931
{
30-
[SerializeAs(nameof(inputCount))]
31-
private int _inputCount = 1;
32+
[Serialize, Inspectable, UnitHeaderInspectable("Match")]
33+
public LampDataType MatchDataType { get; set; }
34+
35+
[Serialize, Inspectable, UnitHeaderInspectable("Non Match")]
36+
public LampDataType NonMatchDataType { get; set; }
3237

3338
[DoNotSerialize]
3439
[Inspectable, UnitHeaderInspectable("Lamp IDs")]
@@ -46,10 +51,19 @@ public int inputCount
4651
[PortLabelHidden]
4752
public ControlOutput OutputTrigger;
4853

54+
[SerializeAs(nameof(inputCount))]
55+
private int _inputCount = 1;
56+
4957
[DoNotSerialize]
5058
[PortLabel("Source Value")]
5159
public ValueInput SourceValue { get; private set; }
5260

61+
[DoNotSerialize]
62+
public ValueInput Match { get; private set; }
63+
64+
[DoNotSerialize]
65+
public ValueInput NonMatch { get; private set; }
66+
5367
[DoNotSerialize]
5468
public ReadOnlyCollection<ValueInput> multiInputs { get; private set; }
5569

@@ -62,19 +76,33 @@ protected override void Definition()
6276

6377
SourceValue = ValueInput<int>(nameof(SourceValue));
6478

65-
var _multiInputs = new List<ValueInput>();
66-
67-
multiInputs = _multiInputs.AsReadOnly();
79+
var mi = new List<ValueInput>();
80+
multiInputs = mi.AsReadOnly();
6881

6982
for (var i = 0; i < inputCount; i++) {
7083
var input = ValueInput(i.ToString(), LampIdValue.Empty.ToJson());
71-
_multiInputs.Add(input);
72-
84+
mi.Add(input);
7385
Requirement(input, InputTrigger);
7486
}
7587

7688
_lampIdValueCache.Clear();
7789

90+
Match = MatchDataType switch {
91+
LampDataType.OnOff => ValueInput(nameof(Match), false),
92+
LampDataType.Status => ValueInput(nameof(Match), LampStatus.Off),
93+
LampDataType.Intensity => ValueInput(nameof(Match), 0f),
94+
LampDataType.Color => ValueInput(nameof(Match), UnityEngine.Color.white),
95+
_ => throw new ArgumentOutOfRangeException()
96+
};
97+
98+
NonMatch = NonMatchDataType switch {
99+
LampDataType.OnOff => ValueInput(nameof(NonMatch), false),
100+
LampDataType.Status => ValueInput(nameof(NonMatch), LampStatus.Off),
101+
LampDataType.Intensity => ValueInput(nameof(NonMatch), 0f),
102+
LampDataType.Color => ValueInput(nameof(NonMatch), UnityEngine.Color.white),
103+
_ => throw new ArgumentOutOfRangeException()
104+
};
105+
78106
Succession(InputTrigger, OutputTrigger);
79107
}
80108

@@ -84,8 +112,13 @@ private ControlOutput Process(Flow flow)
84112
Debug.LogError("Cannot find GLE.");
85113
return OutputTrigger;
86114
}
87-
88-
var value = flow.GetValue<int>(SourceValue);
115+
116+
if (!AssertPlayer(flow)) {
117+
Debug.LogError("Cannot find player.");
118+
return OutputTrigger;
119+
}
120+
121+
var sourceValue = flow.GetValue<int>(SourceValue);
89122

90123
foreach (var input in multiInputs) {
91124
var json = flow.GetValue<string>(input);
@@ -95,7 +128,26 @@ private ControlOutput Process(Flow flow)
95128
}
96129

97130
var lampIdValue = _lampIdValueCache[json.GetHashCode()];
98-
Gle.SetLamp(lampIdValue.id, lampIdValue.value == value ? 255f : 0f);
131+
132+
var dataType = lampIdValue.value == sourceValue ? MatchDataType : NonMatchDataType;
133+
var value = lampIdValue.value == sourceValue ? Match : NonMatch;
134+
135+
switch (dataType) {
136+
case LampDataType.OnOff:
137+
Player.SetLamp(lampIdValue.id, flow.GetValue<bool>(value) ? LampStatus.On : LampStatus.Off);
138+
break;
139+
case LampDataType.Status:
140+
Player.SetLamp(lampIdValue.id, flow.GetValue<LampStatus>(value));
141+
break;
142+
case LampDataType.Intensity:
143+
Player.SetLamp(lampIdValue.id, flow.GetValue<float>(value));
144+
break;
145+
case LampDataType.Color:
146+
Player.SetLamp(lampIdValue.id, flow.GetValue<UnityEngine.Color>(value).ToEngineColor());
147+
break;
148+
default:
149+
throw new ArgumentOutOfRangeException();
150+
}
99151
}
100152

101153
return OutputTrigger;

0 commit comments

Comments
 (0)