protected virtual void ResetLight() { lightCmdQ.Clear(); lightSenarioCmdQ.Clear(); currLightCmd = default; currLightSenarioCmd = default; }
public override void SetLight(int r, int g, int b, int durationMS) { LightCmd cmd = new LightCmd(); cmd.r = (byte)r; cmd.g = (byte)g; cmd.b = (byte)b; cmd.duration = (short)durationMS; cmd.tRecv = Time.time; lightCmdQ.Enqueue(cmd); }
protected void LightScheduler(float t) { // ----- Simulate Lag ----- while (lightCmdQ.Count > 0 && t > lightCmdQ.Peek().tRecv) { currLightCmd = lightCmdQ.Dequeue(); } while (lightSenarioCmdQ.Count > 0 && t > lightSenarioCmdQ.Peek().tRecv) { currLightSenarioCmd = lightSenarioCmdQ.Dequeue(); } // ----- Excute Order ----- if (currLightCmd.tRecv >= currLightSenarioCmd.tRecv) // light cmd { float elipsed = t - currLightCmd.tRecv; if (currLightCmd.duration == 0 || elipsed < currLightCmd.duration / 1000f) { cube._SetLight(currLightCmd.r, currLightCmd.g, currLightCmd.b); } else { cube._StopLight(); } } else // light senario cmd { float elipsed = t - currLightSenarioCmd.tRecv; if (currLightSenarioCmd.period == 0 || currLightSenarioCmd.repeat > 0 && currLightSenarioCmd.period * currLightSenarioCmd.repeat <= elipsed) { cube._StopLight(); } else { // Index of current operation float sum = 0; int index = 0; var lights = currLightSenarioCmd.lights; for (int i = 0; i < lights.Length; ++i) { sum += lights[i].durationMs / 1000f; if (elipsed % currLightSenarioCmd.period < sum) { index = i; break; } } cube._SetLight(lights[index].red, lights[index].green, lights[index].blue); } } }
protected virtual void ResetLight() { lightCmd = default; lightSenarioCmd = default; lightCmdType = LightCmdType.None; }