热量计算

由于裁判系统本身的频率和延迟,在处理热量时不能单纯依靠其发送的数据。比如在50ms退出冷却增益区,到了250ms才从裁判系统获取这个数据,这样就很容易超热量,因此需要进行本地的热量计算。核心是LocalHeat_Fresh这个热量刷新函数

画板

由于计算累积热量时,裁判系统已经给出了实际冷却速度,所以可以直接使用。而计算最近热量时,裁判系统给出的冷却速度可能已经过期,如果继续使用有可能会出现过热的情况,所以使用基础冷却速度

发弹时的热量计算:

Get_GunShootMAX_Now

注意裁判系统的热量冷却结算频率是10hz,也就是每100ms才从当前热量中减去对应冷却的部分,是个离散的量,而在代码中的结算频率实际上要更高的。

还有一个点是测速模块实际检测的频率要比裁判系统热量冷却结算频率高,也就是说会出现弹丸发出去加热量,但是要到下一个冷却周期才会减热量的情况。

举个例子,比如当前时刻为0ms,热量上限是50,当前热量是41,冷却速度是20。在50ms时,程序里认为的热量时41-0.0520=40,也就是剩余10点热量可以发出一发弹丸。但是在裁判系统的角度看,如果发射出弹丸,当前的热量为41+10=51,出现了超热量的情况,要到100ms的时刻才会进行热量衰减51-0.120=49,这就和我们认为的矛盾,因此在算发弹数的时候需要留出这个100ms的余量。

posted @ 2025-04-07 09:40  小蒟蒻皮皮鱼  阅读(59)  评论(0)    收藏  举报