private void ReadMsg1(Flap _Flap) { _Flap._data.Read(8); //cookie int channel = _Flap._data.ReadUInt16(); if (channel == 1) { //readuserinfo int len = _Flap._data.ReadB(); string uin = _Flap._data.Read(len).ToStr(); _Flap._data.ReadUInt16(); //WarningLevel int tvlcount = _Flap._data.ReadUInt16(); _Flap.ReadTvl(tvlcount); _Flap.ReadTvl(); //readTvltoend Tvl _Tvl = _Flap.GetTvl(0x0002); using (MemoryStream _MemoryStream = new MemoryStream(_Tvl.data)) while (_MemoryStream.Position != _MemoryStream.Length) { int id = _MemoryStream.ReadB(); _MemoryStream.ReadB(); //version byte[] _bytes = _MemoryStream.Read(_MemoryStream.ReadUInt16()); if (id == 1) //identifier { ReadMsg2(_bytes, uin, _Flap); } } } }
// Use this for initialization void Start() { startingPos = transform.position; sprite = GetComponent <SpriteRenderer>(); rb = GetComponent <Rigidbody2D>(); flap = GetComponent <Flap>(); }
public void Release() { if (_workerThread != null) { _shutdown = true; _workerThread.Join(); _workerThread = null; } if (IsAlive) { _currentColor = Color.Off; _heart = false; _turn = Turn.Off; _flap = Flap.Off; UpdateState(); IsAlive = false; } if (_hidFileHandle != -1) { CloseHandle(_hidFileHandle); _hidFileHandle = -1; } }
public void Init() { if (type == 1) { f_lamda1 = Flap.Lamda1_t_flap(cf_c); b_lamda1 = Flap.Lamda1_l_flap(cf_c); f_cmac = Flap.Cmac_t_flap(cf_c); b_cmac = Flap.Cmac_l_flap(cf_c); } else if (type == 1) { f_lamda1 = Flap.Lamda1_l_flap(cf_c); b_lamda1 = Flap.Lamda1_t_flap(cf_c); f_cmac = Flap.Cmac_l_flap(cf_c); b_cmac = Flap.Cmac_t_flap(cf_c); } else if (type == 2) { f_lamda1 = 0.0D; b_lamda1 = 0.0D; f_cmac = 0.0D; b_cmac = 0.0D; b_cmac = Flap.Cmac_t_flap(cf_c); } else { f_lamda1 = 0.0D; b_lamda1 = 0.0D; f_cmac = 0.0D; b_cmac = 0.0D; } }
private void Connect() { if (_Socket != null) { _Socket.Close(); Trace2(_uin + "disc:" + _oldConnectionStatus); } _NetworkStream = new MemoryStream(); TcpClient _TcpClient = new TcpClient(servers.Pop(), 5190); _Socket = _TcpClient.Client; _NetworkStream = new NetworkStream(_Socket); new Flap { _ICQ = this }.Receive(); // receive hello Flap _Flap2 = new Flap { _ICQ = this }; _Flap2.ch = 1; _Flap2._data.Write(new byte[] { 0, 0, 0, 1 }); _Flap2._Tvls.Add(new Tvl { type = 1, data = _uin.ToBytes() }); _Flap2._Tvls.Add(new Tvl { type = 2, data = XOR(_passw) }); _Flap2._Tvls.Add(new Tvl { type = 3, data = "chatbot".ToBytes() }); _Flap2.WriteTvl(); _Flap2.Send(@"00 16 00 02 01 0A 00 17 00 02 00 05 00 18 00 02 00 25 00 19 00 02 00 01 00 1A 00 02 0E 90 00 14 00 04 00 00 00 55 00 0F 00 02 65 6E 00 0E 00 02 75 73".Hex()); Flap _Flap = new Flap { _ICQ = this }.Receive().ReadTvl(); //1 uin //2 ip 3 cookie Match m = Regex.Match(_Flap._Tvls[2].data.ToStr(), @"(.+?):(\d+)"); if (!m.Success) { throw new ExceptionB("cannot Connect"); } ip = m.Groups[1].Value; port = int.Parse(m.Groups[2].Value); _Cookie = _Flap._Tvls[3].data; _Socket.Close(); BossSimple(); }
public void Display_GivesString() { IFlyStrategy f = new Flap(); IQuackStrategy q = new OneBigQuack(); Duck d = new Duck(f, q); var actual = d.Display(); Assert.IsType <String>(actual); }
public void BossSimple() { TcpClient _TcpClient = new TcpClient(ip, port); _Socket = _TcpClient.Client; _NetworkStream = new NetworkStream(_Socket); Flap hello = new Flap { _ICQ = this }.Receive(); //receive hello Flap _Flap1 = new Flap { _ICQ = this, ch = 1 }; _Flap1._data.Write(new byte[] { 0, 0, 0, 1 }); _Flap1._Tvls.Add(new Tvl { data = _Cookie, type = 6 }); _Flap1.WriteTvl().Send(); Flap _Flap2 = new Flap { _ICQ = this }.Receive().ReadSnac(); Flap _Flap3 = new Flap { _ICQ = this }; _Flap3.ch = 2; _Flap3._Snac.ID1 = 1; _Flap3._Snac.ID2 = 2; _Flap3._Snac.flag1 = _Flap3._Snac.flag2 = 0; _Flap3.WriteSnac();//.Write(); while (_Flap2._data.Position != _Flap2._data.Length) { UInt16 a = _Flap2._data.ReadUInt16(); _Flap3._data.WriteUint16(a); _Flap3._data.Write("00 01 01 10 04 7B".Hex()); } _Flap3.Send(); Flap _Flap4 = new Flap { _ICQ = this }; _Flap4.Receive().ReadSnac(); if (_Flap4._Snac.ID1 != 11 || _Flap4._Snac.ID2 != 2) { throw new Exception(); } Thread.Sleep(1000); }
private void ReadMsg2(byte[] _bytes, string uin, Flap _Flap) { using (MemoryStream _MemoryStream = new MemoryStream(_bytes)) { ushort charset = _MemoryStream.ReadUInt16(); ushort language = _MemoryStream.ReadUInt16(); _bytes = _MemoryStream.Read(); Encoding incoming = charset == 2 ? Encoding.BigEndianUnicode : Encoding.ASCII; incoming = Encoding.GetEncoding(incoming.CodePage, new EncoderExceptionFallback(), new DecoderExceptionFallback()); string msg; try { msg = incoming.GetString(_bytes); } catch (DecoderFallbackException) { msg = Encoding.Default.GetString(_bytes); } Im _IM = new Im { msg = msg, uin = uin, Status = MessageStatus.Received }; if (_onMessage != null) { _onMessage(_IM); } } }
public void SendMessage(Im im) { try { if (_ConnectionStatus != ConnectionStatus.Connected) { throw new Exception("Not Connected"); } Flap _Flap = new Flap { _ICQ = this }; _Flap.ch = 2; _Flap._Snac.ID1 = 4; _Flap._Snac.ID2 = 6; _Flap.WriteSnac(); _Dictionary.Add(_Flap._Snac.req, im); _Flap._data.Write("00 00 00 00 00 00 00 00 00 01".Hex()); byte[] sendto = ASCIIEncoding.ASCII.GetBytes(im.uin); _Flap._data.WriteByte((byte)sendto.Length); _Flap._data.Write(sendto); _Flap._data.Write(new byte[] { 0, 6, 0, 0 }); Tvl _Tvl02 = new Tvl() { data = new byte[] { 05, 01, 00, 02, 01, 01 }, type = 2 }; Tvl _Tvl0101 = new Tvl() { type = 257, data = ("\0\0\0\0" + im.msg).ToBytes() }; _Tvl02.data = _Tvl02.data.Join(_Tvl0101.ToBytes()); _Flap._Tvls.Add(_Tvl02); _Flap.WriteTvl().Send(); im.Status = MessageStatus.Sending; im._DateTime = DateTime.Now; } catch (IOException) { Trace2(_uin + "Error msg send failed"); } }
private void Worker() { while (IsAlive && !_shutdown) { bool updateState = false; if (_danceTimeout > 0) { _danceTimeout--; if (_danceTimeout == 0) { _turn = Turn.Off; } else if ((_danceTimeout % (200 / _threadWaitTime)) == 0) { _turn = _turn == Turn.Left ? Turn.Right : Turn.Left; } updateState = true; } if (_flapTimeout > 0) { _flapTimeout--; if (_flapTimeout == 0) { _flap = Flap.Off; } else if ((_flapTimeout % (100 / _threadWaitTime)) == 0) { _flap = _flap == Flap.Up ? Flap.Down : Flap.Up; } updateState = true; } if (_heartbeatTimeout > 0) { _heartbeatTimeout--; if (_heartbeatTimeout == 0) { _heart = false; } else if ((_heartbeatTimeout % (100 / _threadWaitTime)) == 0) { _heart = !_heart; } updateState = true; } if (_rainbowTimeout > 0) { _rainbowTimeout--; if (_rainbowTimeout == 0) { _currentColor = _targetColor; } else if ((_rainbowTimeout % (100 / _threadWaitTime)) == 0) { _currentColor = (Color)(_rainbowTimeout % 7); } updateState = true; } if (_singleColorTimeout > 0) { _singleColorTimeout--; if (_singleColorTimeout == 0) { _currentColor = _targetColor; } else if ((_singleColorTimeout % (200 / _threadWaitTime)) == 0) { _currentColor = (_targetColor == _currentColor) ? _singleBlinkColor : _targetColor; } updateState = true; } if (updateState) { UpdateState(); } Thread.Sleep(_threadWaitTime); } }
internal void Calc_dynamics(int lr, ControlPlane cw, AirPlane ap, Vector3D dv, double k_q, double k_S) { Matrix44 ma = new Matrix44(); Matrix44 mtemp = new Matrix44(); Vector3D vtemp = new Vector3D(); fv.SetVec(0.0D, 0.0D, 0.0D); tv.SetVec(0.0D, 0.0D, 0.0D); ac = AirPlane.Get_point(ac_base, lr).Sub(ap.inp.cg); dvv = ap.pMotion.omega.CrsProd(ac); vd = ap.pMotion.vc.Add(dvv); vd = vd.Add(dv); v = vd.Length(); vd = vd.NmlVec().SclProd(v * k_q); v = vd.Length(); s2_dash = (s2 * k_S); m = (v / ap.atmos.a); q = (0.5D * v * v * ap.atmos.rho); Vector3D kdd = new Vector3D(); Vector3D idd = new Vector3D(); Vector3D jdd = new Vector3D(); if ((cw != null) && (cw.type == 2)) { ma.SetRyMat(cw.delta); mtemp.SetRzMat(cw.lamda_h); ma = ma.MultMat(mtemp); if (lr == 1) { mtemp.SetRxMat(-cw.gamma_h); } else { mtemp.SetRxMat(-cw.gamma_h); } ma = ma.MultMat(mtemp); idd = id.MultMat(ma); kdd = kd.MultMat(ma); } else { idd = new Vector3D(id); jdd = new Vector3D(jd); kdd = new Vector3D(kd); } mtemp.Set3ColVec(idd, jdd, kdd); vdw = vd.MultMat(mtemp); alpha = Jp.Maker1.Sim.Tools.Tool.CalcAlpha(vdw); beta = Jp.Maker1.Sim.Tools.Tool.CalcBeta(vdw); ar = wing.AspectRatio(beta); are = (ar * wing.K_ground_effect(beta, ap.pMotion.wpos.y)); lamda_dash = SweepbackAngle(wing.hv_arrangement, lr, beta); Calc_cla(); delta_cl_flap = 0.0D; delta_cd_flap = 0.0D; delta_cmac_flap = 0.0D; delta_alpha = 0.0D; k_a = 1.0D; if ((cw != null) && ((cw.type == 1) || (cw.type == 1))) { cw.beta_f = Flap.Beta_f(lr, wing.hv_arrangement, cw.lamda_h, beta); cw.delta_dash = Flap.Delta_dash(cw.delta, cw.beta_f); if (Math.Abs(cw.beta_f) < 1.570796326794897D) { delta_alpha = (cw.f_lamda1 * cw.delta_dash); delta_cmac_flap = cw.f_cmac; } else { delta_alpha = (cw.b_lamda1 * cw.delta_dash); delta_cmac_flap = cw.b_cmac; } k_a = Flap.K_cla(cw.delta_dash, cw.cf_c); delta_cl_flap = (k_a * cla * delta_alpha); delta_cmac_flap *= (alpha + delta_alpha - alpha0); } vtemp.SetVec(0.0D, 0.0D, -1.0D); ma.SetRyMat(-alpha); mtemp.SetRzMat(beta); ma = ma.MultMat(mtemp); mtemp.Set3RowVec(idd, jdd, kdd); ma = ma.MultMat(mtemp); lu = vtemp.MultMat(ma); du = vd.SclProd(-1.0D).NmlVec(); alpha += delta_alpha; cla *= k_a; Calc_cl_cd(); l = (q * cl * s2_dash); cdi = (cl * cl / (Math.PI * are * ew)); cd += cdi; cd += delta_cd_flap; d = (q * cd * s2_dash); lf = Dynamics.Force(l, lu); lt = Dynamics.Torque(ac, lf); df = Dynamics.Force(d, du); dt = Dynamics.Torque(ac, df); cmac = cmac0; cmac += delta_cmac_flap; mac = (q * s2_dash * cmac); Vector3D mt_0 = new Vector3D(0.0D, mac, 0.0D); fv = lf.Add(df); tv = lt.Add(dt).Add(mt_0); }
void OnTriggerEnter2D(Collider2D collider) { if (collider.tag == "Ball") { GameControl gc = GameObject.Find("GameControl").GetComponent <GameControl>(); PlatformBehavior platform = player.GetComponent <PlatformBehavior>(); if (!GameData.FriendlyFire && collider.gameObject.GetComponent <BallBehavior>().lastPlayer == player) { gc.SpawnBall(); return; } Debug.Log("Killing player " + player.name); audioSource.PlayOneShot(GameData.S_DeathSound); col.isTrigger = false; collider.gameObject.layer = 8; sr.material = dead; if (platform.Horizontal) { player.GetComponent <HorizontalPlatformMovement>().Speed = 0; } else { player.GetComponent <VerticalPlatformMovement>().Speed = 0; } player.GetComponent <BoxCollider2D>().enabled = false; gc.players.Remove(player); BallBehavior bb = collider.gameObject.GetComponent <BallBehavior>(); if (bb.lastPlayer != null) { PlatformBehavior pb = bb.lastPlayer.GetComponent <PlatformBehavior>(); PlayerCardBehavior pcb = pb.playerCard.GetComponent <PlayerCardBehavior>(); pcb.KillCountUpdate(1); pcb.BallCountUpdate(-1); } platform.CancelInvoke("Bored"); if (platform.PostDeathControl) { if (gc.Flaps.Exists(x => !x.GetComponent <Flap>().taken)) { Flap f = gc.Flaps.First(x => !x.taken); f.taken = true; f.AssignPlayer(player.GetComponent <BasePlatformMovement>(), true); } if (gc.Flaps.Count > 3 && gc.Flaps.Exists(x => !x.GetComponent <Flap>().taken)) { Flap f = gc.Flaps.First(x => !x.taken); f.taken = true; f.AssignPlayer(player.GetComponent <BasePlatformMovement>(), false); } } string[] anims = platform.deathAnims; player.GetComponent <Animator>().Play(anims[Random.Range(0, anims.Length)], 0); foreach (GameObject ball in gc.balls) { ball.GetComponent <Rigidbody2D>().velocity *= gc.SpeedUpOnKill; } if (gc.players.Where(x => x.activeSelf).Count() == 1) { gc.Winner(gc.players[0]); } } }
private void Worker() { //int loopCounter = 0; while (IsAlive && !_shutdown) { bool updateState = false; if (_danceTimeout > 0) { _danceTimeout--; if (_danceTimeout == 0) { _turn = Turn.Off; } else if ((_danceTimeout % (300 / _threadWaitTime)) == 0) { _turn = _turn == Turn.Left ? Turn.Right : Turn.Left; } updateState = true; } if (_flapTimeout > 0) { _flapTimeout--; if (_flapTimeout == 0) { _flap = Flap.Off; } else if ((_flapTimeout % (300 / _threadWaitTime)) == 0) { _flap = _flap == Flap.Up ? Flap.Down : Flap.Up; } updateState = true; } if (_heartbeatTimeout > 0) { _heartbeatTimeout--; if (_heartbeatTimeout == 0) { _heart = false; } else if ((_heartbeatTimeout % (100 / _threadWaitTime)) == 0) { _heart = !_heart; } updateState = true; } if (_rainbowTimeout > 0) { _rainbowTimeout--; if (_rainbowTimeout == 0) { _currentColor = _targetColor; } else { _currentColor = (Color)(_rainbowTimeout % 7); } updateState = true; } //loopCounter++; //if (loopCounter > (3000 / _threadWaitTime)) //{ // loopCounter = 0; // updateState = true; //} if (updateState) { UpdateState(); } Thread.Sleep(_threadWaitTime); } }
private void StartListen() { try { try { Connect(); } catch (IOException) { throw new ExceptionB("conn error2"); } catch (SocketException) { throw new ExceptionB("conn error2"); } Thread.Sleep(2000); _ConnectionStatus = ConnectionStatus.Connected; Trace2(Trace("Connected " + _uin)); while (true) { Flap _Flap = new Flap { _ICQ = this }; _Flap.Receive(); Trace("FlapReceived"); Trace(_Flap._data.ToArray().ToHex()); Trace("Snac Type Of" + _Flap.ch); switch (_Flap.ch) { default: break; case 2: { _Flap.ReadSnac(); if (_Flap._Snac.ID1 == 4) { Im _Im = null; if (_Dictionary.Keys.Contains(_Flap._Snac.req)) { _Im = _Dictionary[_Flap._Snac.req]; } if (_Flap._Snac.ID2 == 7) //message { ReadMsg1(_Flap); } if (_Flap._Snac.ID2 == 12 && _Im != null) //accepted { _Im.Status = MessageStatus.AcceptedForDelivery; OnMessageStatusChanged(_Im); _Dictionary.Remove(_Flap._Snac.req); } if (_Flap._Snac.ID2 == 1 && _Im != null) { _Im.Status = MessageStatus.UnknownError; _Dictionary.Remove(_Flap._Snac.req); int errorcode = _Flap._data.ReadUInt16(); _Flap.ReadTvl(); int subcode = 0; Tvl _Tvl = _Flap.GetTvl(0x0008); if (_Tvl != null) { subcode = BitConverter.ToUInt16(_Tvl.data.ReverseA(2), 0); } switch (errorcode) { case 0x0004: _Im.Status = MessageStatus.BuddyOffline; break; case 0x0010: _Im.Status = MessageStatus.BuddyBlocked; break; } switch (subcode) { case 0x000E: _Im.Status = MessageStatus.OfflineMessagesNotSupported; break; case 0x000F: _Im.Status = MessageStatus.OfflineStorageFull; break; } OnMessageStatusChanged(_Im); } } } break; } } } catch (ExecutionEngineException) { } catch (IOException e) { Trace(e); Thread.Sleep(1000); _ConnectionStatus = ConnectionStatus.Kicked; } catch (SocketException e) { Trace(e); Thread.Sleep(1000); _ConnectionStatus = ConnectionStatus.Kicked; } catch (ExceptionB e) { Trace(e); Thread.Sleep(15000); if (ConnectionStatus.LoginError == _oldConnectionStatus) { Thread.Sleep(16 * 1000 * 60); } _ConnectionStatus = ConnectionStatus.LoginError; } errors++; }
public void BossAdv() { TcpClient _TcpClient = new TcpClient(ip, port); _Socket = _TcpClient.Client; _NetworkStream = new NetworkStream(_Socket); Flap hello = new Flap { _ICQ = this }.Receive(); //receive hello Flap _Flap1 = new Flap { _ICQ = this, ch = 1 }; // отправляем куки _Flap1._data.Write(new byte[] { 0, 0, 0, 1 }); _Flap1._Tvls.Add(new Tvl { data = _Cookie, type = 6 }); _Flap1.WriteTvl().Send(); Flap _Flap2 = new Flap { _ICQ = this }.Receive().ReadSnac(); // SRV_FAMILIES new Flap { _ICQ = this, ch = 2 }.Send(@"00 01-00 17 00 00 00 00 00 00 00 01 00 03 00 13 00 02-00 02 00 01 00 03 00 01 00 15 00 01 00 04 00 01-00 06 00 01 00 09 00 01 00 0A 00 01 00 0B 00 01-".Hex()); // CLI_FAMILIES Flap _Flap4 = new Flap { _ICQ = this }.Receive(); // SRV_FAMILIES2 Flap _Flap5 = new Flap { _ICQ = this }.Receive(); // SRV_MOTD new Flap() { _ICQ = this, ch = 2 }.Send("00 01-00 06 00 00 00 00 00 00".Hex()); // CLI_RATESREQUEST Flap _Flap6 = new Flap() { _ICQ = this }.Receive(); // SRV_RATES new Flap() { _ICQ = this, ch = 2 }.Send("00 01-00 08 00 00 00 00 00 00 00 01 00 02 00 03 00 04-00 05".Hex()); // CLI_ACKRATES (ответим серверу что мы получили его SRV_RATES) new Flap() { _ICQ = this, ch = 2 }.Send("00 04-00 02 00 00 00 00 00 00 00 00 00 00 00 03 1F 40-03 E7 03 E7 00 00 00 00".Hex()); // CLI_SETICBM new Flap() { _ICQ = this, ch = 2 }.Send("00 01-00 0E 00 00 00 00 00 00".Hex()); // CLI_REQINFO new Flap() { _ICQ = this, ch = 2 }.Send("00 02-00 02 00 00 00 00 00 00".Hex()); // CLI_REQLOCATION new Flap() { _ICQ = this, ch = 2 }.Send("00 03-00 02 00 00 00 00 00 00".Hex()); // CLI_REQBUDDY new Flap() { _ICQ = this, ch = 2 }.Send("00 04-00 04 00 00 00 00 00 00".Hex()); // CLI_REQICBM new Flap() { _ICQ = this, ch = 2 }.Send("00 09-00 02 00 00 00 00 00 00".Hex()); // CLI_REQBOS Flap _Flap7 = new Flap { _ICQ = this }.Receive(); //SRV_REPLYINFO Flap _Flap8 = new Flap { _ICQ = this }.Receive(); //SRV_REPLYLOCATION Flap _Flap9 = new Flap { _ICQ = this }.Receive(); //SRV_REPLYBUDDY Flap _Flap10 = new Flap { _ICQ = this }.Receive(); //SRV_REPLYICBM Flap _Flap11 = new Flap { _ICQ = this }.Receive(); //SRV_REPLYBOS new Flap() { _ICQ = this }.Send(@"00 02-00 04 00 00 00 00 00 00 00 05 00 10 09 46 13 41-4C 7F 11 D1 82 22 44 45 53 54 00 00".Hex());// CLI_SETUSERINFO - капабилды клиента (в TLV5) new Flap { _ICQ = this, ch = 2 }.Send("00 09-00 07 00 00 00 00 00 00".Hex()); // CLI_ADDINVISIBLE new Flap { _ICQ = this, ch = 2 }.Send("00 01-00 11 00 00 00 00 00 00 00 00 00 00".Hex()); //SNAC(1,11)(зх шоза снэк) new Flap { _ICQ = this, ch = 2 }.Send(@"00 01 00 1E 00 00 00 00 00 00 00 06 00 04-00 00 00 00 00 08 00 02 00 00 00 0C 00 25 59 BD-9B DD 00 00 0B B8 04 00 08 2D A8 4E 56 00 00 00-50 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00-00 00 00".Hex());// CLI_REQINFO new Flap { _ICQ = this, ch = 2 }.Send(@"00 01 00 02 00 00 00-00 00 00 00 01 00 03 01 10 04 7B 00 13 00 02 01-10 04 7B 00 02 00 01 01 01 04 7B 00 03 00 01 01-10 04 7B 00 15 00 01 01 10 04 7B 00 04 00 01 01-10 04 7B 00 06 00 01 01 10 04 7B 00 09 00 01 01-10 04 7B 00 0A 00 01 01 10 04 7B 00 0B 00 01 01-10 04 7B".Hex());//CLI_READY Flap _Flap12 = new Flap { _ICQ = this }.Receive(); // Как видим, тут у нас есть SNAC B,2 (00 0B 00 02) - следовательно мы успешно зашли =) }
private void Worker() { while (IsAlive && !_shutdown) { bool updateState = false; if (_danceTimeout > 0) { _danceTimeout--; if (_danceTimeout == 0) { _turn = Turn.Off; } else if ((_danceTimeout % (300 / _threadWaitTime)) == 0) { _turn = _turn == Turn.Left ? Turn.Right : Turn.Left; } updateState = true; } if (_flapTimeout > 0) { _flapTimeout--; if (_flapTimeout == 0) { _flap = Flap.Off; } else if ((_flapTimeout % (300 / _threadWaitTime)) == 0) { _flap = _flap == Flap.Up ? Flap.Down : Flap.Up; } updateState = true; } if (_heartbeatTimeout > 0) { _heartbeatTimeout--; if (_heartbeatTimeout == 0) { _heart = false; } else if ((_heartbeatTimeout % (100 / _threadWaitTime)) == 0) { _heart = !_heart; } updateState = true; } if (_rainbowTimeout > 0) { _rainbowTimeout--; if (_rainbowTimeout == 0) { _currentColor = _targetColor; } else { _currentColor = (Color)(_rainbowTimeout % 7); } updateState = true; } if (updateState) { UpdateState(); } Thread.Sleep(_threadWaitTime); } }