Tanoda
WaiterAction.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Globalization;
4using System.Linq;
5using System.Runtime.Serialization;
6using UnityEditor;
7using UnityEngine;
8using UnityEngine.UI;
9
10public class WaiterAction : ActionObject, ISerializable
11{
12 public InputField inputCount;
13 public GameObject inputParent;
14 public GameObject inputPrefab;
15 public InputField taktTimeInput;
16
17 private List<GameObject> inputs;
18 private Dictionary<string, bool> inputStatus;
19 internal int savedInputCount;
20
21 private void Awake()
22 {
23 action = GetType().Name;
24 }
25
26 public override void Start()
27 {
28 if (savedInputCount != 0) //already initialized from loading
29 {
30 InputEnded();
31 return;
32 }
33
34 base.Start();
35 inputs = new List<GameObject>();
36 inputStatus = new Dictionary<string, bool>();
37 }
38 private void Update()
39 {
40 base.Update();
41
42 }
43
44 public override void Triggered(string id)
45 {
46 base.Triggered(id);
47
48 inputStatus[id] = true;
49
50 if (inputStatus.Where(i => i.Value == false).Count() == 0)
51 {
52 List<float> timeSpents = new List<float>();
53 List<float> timeRecognition = new List<float>();
54 List<float> timePenalty = new List<float>();
55 //FIXUP, was HotfixAction
56 foreach (var o in inputs)
57 {
58 try
59 {
60 var connections = Controller.Instance.GetConnectionsByEndPointId(o.name);
61
62 foreach (var connection in connections)
63 {
64 var action = Controller.Instance.GetActionByInOut(connection.fromId);
65 if (action is PositionAction posAction)
66 {
67 var go = posAction.GetInputGO();
68 if (go)
69 {
70 go.transform.localPosition = posAction.targetPosition;
71 go.transform.localEulerAngles = posAction.targetRotation;
72 }
73 }
74 timeSpents.Add(action.spentTimeOnAction);
75 timeRecognition.Add(action.recognitionTimeOnAction);
76 timePenalty.Add(action.penaltyTime);
77 }
78 }
79 catch (Exception)
80 {
81 // ignored
82 }
83 }
84 if (sumAllAction()) spentTimeOnAction = timeSpents.Sum();
85 else spentTimeOnAction = timeSpents.Max();
86
87 recognitionTimeOnAction = timeSpents.Sum();
88 penaltyTime = timeSpents.Sum();
89
90 TriggerOutput(outPuts[0].name);
91 Reset();
92 }
93 }
94
95 public void InputEnded()
96 {
97 if (inputs == null)
98 {
99 inputs = new List<GameObject>();
100 inputStatus = new Dictionary<string, bool>();
101 }
102 if (inputs.Count != int.Parse(inputCount.text))
103 {
104 for (var i = inputs.Count - 1; i > int.Parse(inputCount.text) - 1; i--)
105 {
106 inputStatus.Remove(inputs[i].name);
107 RemoveInput(inputs[i].name);
108 }
109
110 for (var i = inputs.Count; i < int.Parse(inputCount.text); i++)
111 {
112 var go = Instantiate(inputPrefab, inputParent.transform);
113#if UNITY_WEBGL
114 var chelperIn = GameObject.Find("CHelper_in").GetComponent<Image>();
115 var img = go.GetComponent<Image>();
116 img.sprite = chelperIn.sprite;
117#endif
118 #if DANA
119 var chelperIn = GameObject.Find("CHelper_in").GetComponent<Image>();
120 Sprite InSprite = Resources.Load("InPut.png") as Sprite;//(Sprite)AssetDatabase.LoadAssetAtPath("Assets/Textures/UI/Actions/InPut.png", typeof(Sprite));
121 Sprite InSpriteBlue = Resources.Load("InPut_blue.png") as Sprite;//(Sprite)AssetDatabase.LoadAssetAtPath("Assets/Textures/UI/Actions/InPut_blue.png", typeof(Sprite));
122 var img = go.GetComponent<Image>();
123 img.sprite = InSprite;
124 go.GetComponent<RectTransform>().sizeDelta = new Vector2(30f,50f);
125 //go.GetComponent<RectTransform>().localPosition = new Vector3(xPos, yPos, zPos);
126#endif
127 inputs.Add(go);
128 AddInput(go);
129 inputStatus.Add(go.name, false);
130 }
131 }
132 var xPos = inputParent.GetComponent<RectTransform>().localPosition.x;
133 var yPos = inputParent.GetComponent<RectTransform>().localPosition.y;
134 var zPos = inputParent.GetComponent<RectTransform>().localPosition.z;
135 xPos = inputParent.GetComponent<RectTransform>().localPosition.x - 15.0f;
136 inputParent.GetComponent<RectTransform>().localPosition = new Vector3(-115f,yPos, zPos);
137 GetComponent<RectTransform>().sizeDelta = new Vector2(200, Mathf.Max(200, 100 + inputs.Count * 55));
138 originalHeight = (transform as RectTransform).sizeDelta.y;
139 inPuts = inputs;
141 }
142
143 public bool sumAllAction()
144 {
145 foreach (var inPut in inPuts)
146 {
147 var connections = Controller.Instance.GetConnectionsByEndPointId(inPut.name);
148 foreach (var connection in connections)
149 {
150 var outputAction = Controller.Instance.GetActionByInOut(connection.fromId);
151 var outConnections = Controller.Instance.GetConnectionsByEndPointId(outputAction.outPuts[0].name);
152 if (outConnections.Count() > 1)
153 {
154 return true;
155 }
156 }
157 }
158 return false;
159 }
160 public new void RefreshTargetDisplay()
161 {
162 taktTimeInput.text = taktTime.ToString("F2");
163 }
164 public void onTaktTimeChanged(string value)
165 {
166 try
167 {
168 var ci = CultureInfo.CurrentCulture;
169 var nfi = ci.NumberFormat;
170 taktTimeInput.text = taktTimeInput.text.Replace(',', nfi.CurrencyDecimalSeparator[0]);
171 taktTimeInput.text = taktTimeInput.text.Replace('.', nfi.CurrencyDecimalSeparator[0]);
172 var single = Convert.ToSingle(taktTimeInput.text, ci);
173 taktTimeInput.text = single.ToString("F2");
174 //tolerance = single;
175 taktTime = float.Parse(value, ci);
176 }
177 catch (Exception)
178 {
179 Debug.LogWarning("not parsable number(?) in holdTime inputfield!");
180
181 // restore last valid numbers
182 taktTimeInput.text = taktTime.ToString("F2");
183 }
184 }
185 public override void Reset()
186 {
187 base.Reset();
188
189 foreach (var key in inputStatus.Keys.ToList())
190 inputStatus[key] = false;
191 }
192
193 public WaiterAction(SerializationInfo info, StreamingContext context) : base(info, context)
194 {
195 savedInputCount = info.GetInt32("inputCount");
196 foreach (var s in info)
197 {
198 if (s.Name == "taktTime")
199 taktTime = (float)info.GetValue("taktTime", typeof(float));
200 }
201 }
202
203
204 public new void GetObjectData(SerializationInfo info, StreamingContext context)
205 {
206 base.GetObjectData(info, context);
207 info.AddValue("inputCount", inputs.Count, typeof(int));
208 info.AddValue("taktTime", taktTime, typeof(float));
209 }
210}
UnityEngine.Debug Debug
Definition: TanodaServer.cs:19
System.Drawing.Image Image
Definition: TestScript.cs:37
void RemoveInput(string id)
float originalHeight
Definition: ActionObject.cs:37
void TriggerOutput(string id)
string action
Definition: ActionObject.cs:32
List< GameObject > inPuts
Definition: ActionObject.cs:18
List< GameObject > outPuts
Definition: ActionObject.cs:19
void SaveOrigInPos()
void AddInput(GameObject go)
Connection[] GetConnectionsByEndPointId(string id)
Definition: Controller.cs:862
ActionObject GetActionByInOut(string id)
Definition: Controller.cs:925
static Controller Instance
Definition: Controller.cs:16
void InputEnded()
Definition: WaiterAction.cs:95
override void Triggered(string id)
Definition: WaiterAction.cs:44
override void Reset()
void onTaktTimeChanged(string value)
new void GetObjectData(SerializationInfo info, StreamingContext context)
bool sumAllAction()
override void Start()
Definition: WaiterAction.cs:26
GameObject inputPrefab
Definition: WaiterAction.cs:14
InputField taktTimeInput
Definition: WaiterAction.cs:15
GameObject inputParent
Definition: WaiterAction.cs:13
InputField inputCount
Definition: WaiterAction.cs:12
new void RefreshTargetDisplay()
WaiterAction(SerializationInfo info, StreamingContext context)