Client LuaCsForBarotrauma
ColorComponent.cs
1 using System;
2 using System.Globalization;
3 using System.Xml.Linq;
4 using Microsoft.Xna.Framework;
5 
7 {
9  {
10  protected float[] receivedSignal;
11 
12  private string output = "0,0,0,0";
13 
14  [InGameEditable, Serialize(false, IsPropertySaveable.Yes, description: "When enabled makes the component translate the signal from HSV into RGB where red is the hue between 0 and 360, green is the saturation between 0 and 1 and blue is the value between 0 and 1.", alwaysUseInstanceValues: true)]
15  public bool UseHSV { get; set; }
16 
18  : base(item, element)
19  {
20  receivedSignal = new float[4];
21  IsActive = true;
22  }
23 
24  public override void Update(float deltaTime, Camera cam)
25  {
26  item.SendSignal(output, "signal_out");
27  }
28 
29  private void UpdateOutput()
30  {
31  float signalR = receivedSignal[0],
32  signalG = receivedSignal[1],
33  signalB = receivedSignal[2],
34  signalA = receivedSignal[3];
35 
36  if (UseHSV)
37  {
38  Color hsvColor = ToolBoxCore.HSVToRGB(signalR, signalG, signalB);
39  signalR = hsvColor.R;
40  signalG = hsvColor.G;
41  signalB = hsvColor.B;
42  }
43 
44  output = signalR.ToString("G", CultureInfo.InvariantCulture);
45  output += "," + signalG.ToString("G", CultureInfo.InvariantCulture);
46  output += "," + signalB.ToString("G", CultureInfo.InvariantCulture);
47  output += "," + signalA.ToString("G", CultureInfo.InvariantCulture);
48  }
49 
50  public override void ReceiveSignal(Signal signal, Connection connection)
51  {
52  switch (connection.Name)
53  {
54  case "signal_r":
55  float.TryParse(signal.value, NumberStyles.Float, CultureInfo.InvariantCulture, out receivedSignal[0]);
56  UpdateOutput();
57  break;
58  case "signal_g":
59  float.TryParse(signal.value, NumberStyles.Float, CultureInfo.InvariantCulture, out receivedSignal[1]);
60  UpdateOutput();
61  break;
62  case "signal_b":
63  float.TryParse(signal.value, NumberStyles.Float, CultureInfo.InvariantCulture, out receivedSignal[2]);
64  UpdateOutput();
65  break;
66  case "signal_a":
67  float.TryParse(signal.value, NumberStyles.Float, CultureInfo.InvariantCulture, out receivedSignal[3]);
68  UpdateOutput();
69  break;
70  }
71  }
72  }
73 }
void SendSignal(string signal, string connectionName)
ColorComponent(Item item, ContentXElement element)
override void Update(float deltaTime, Camera cam)
override void ReceiveSignal(Signal signal, Connection connection)
The base class for components holding the different functionalities of the item