(&mut self)
| 177 | } |
| 178 | |
| 179 | fn update_network(&mut self) { |
| 180 | // RX: faster oscillation with occasional spikes |
| 181 | let rx_wave = (self.tick as f32 * 0.12).sin() * 25.0; |
| 182 | let rx_spike = if self.tick % 60 == 0 { |
| 183 | random_range(25.0, 45.0) |
| 184 | } else { |
| 185 | 0.0 |
| 186 | }; |
| 187 | let rx_jitter = random_range(-5.0, 5.0); |
| 188 | let rx_decay = (50.0 - self.rx_value) * 0.04; |
| 189 | self.rx_value = |
| 190 | (self.rx_value + rx_jitter + rx_decay + rx_spike + rx_wave * 0.15).clamp(8.0, 95.0); |
| 191 | |
| 192 | // TX: slower oscillation with different phase |
| 193 | let tx_wave = (self.tick as f32 * 0.07 + 2.5).sin() * 20.0; |
| 194 | let tx_spike = if self.tick % 90 == 0 { |
| 195 | random_range(20.0, 40.0) |
| 196 | } else { |
| 197 | 0.0 |
| 198 | }; |
| 199 | let tx_jitter = random_range(-4.0, 4.0); |
| 200 | let tx_decay = (45.0 - self.tx_value) * 0.035; |
| 201 | self.tx_value = |
| 202 | (self.tx_value + tx_jitter + tx_decay + tx_spike + tx_wave * 0.12).clamp(8.0, 92.0); |
| 203 | |
| 204 | self.network.push(self.rx_value, self.tx_value); |
| 205 | self.rx_series.push(self.rx_value); |
| 206 | self.tx_series.push(self.tx_value); |
| 207 | } |
| 208 | |
| 209 | fn update_memory(&mut self) { |
| 210 | let alloc = if self.tick % 300 == 0 { |
no test coverage detected