diff --git a/src/components/modem.c b/src/components/modem.c index 005e839..7f43f3b 100644 --- a/src/components/modem.c +++ b/src/components/modem.c @@ -208,6 +208,16 @@ static void nni_modem_send(nn_modem *modem, void *_, nn_component *component, nn vals[i] = nn_getArgument(computer, i + 2); } + nn_size_t bytesSent = nn_measurePacketSize(vals, valLen); + if(bytesSent > modem->table.maxPacketSize) { + nn_setCError(computer, "packet too big"); + return; + } + nn_simulateBufferedIndirect(component, bytesSent, modem->ctrl.packetBytesPerTick); + double d = (double)bytesSent / modem->table.maxPacketSize; + nn_addHeat(computer, d * modem->ctrl.heatPerFullPacket); + nn_removeEnergy(computer, d * modem->ctrl.energyPerFullPacket); + nn_errorbuf_t err = ""; nn_lock(&modem->ctx, modem->lock); nn_bool_t res = modem->table.send(modem->table.userdata, addr, port, vals, valLen, err); @@ -238,6 +248,16 @@ static void nni_modem_broadcast(nn_modem *modem, void *_, nn_component *componen for(nn_size_t i = 0; i < valLen; i++) { vals[i] = nn_getArgument(computer, i + 1); } + + nn_size_t bytesSent = nn_measurePacketSize(vals, valLen); + if(bytesSent > modem->table.maxPacketSize) { + nn_setCError(computer, "packet too big"); + return; + } + nn_simulateBufferedIndirect(component, bytesSent, modem->ctrl.packetBytesPerTick); + double d = (double)bytesSent / modem->table.maxPacketSize; + nn_addHeat(computer, d * modem->ctrl.heatPerFullPacket); + nn_removeEnergy(computer, d * modem->ctrl.energyPerFullPacket); nn_errorbuf_t err = ""; nn_lock(&modem->ctx, modem->lock); diff --git a/src/emulator.c b/src/emulator.c index f71b476..e3e2275 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -723,9 +723,9 @@ int main() { .screenSetsPerTick = 32, .screenColorChangesPerTick = 64, - .heatPerPixelChange = 0.0005, - .heatPerPixelReset = 0.0001, - .heatPerVRAMChange = 0.000015, + .heatPerPixelChange = 0.00005, + .heatPerPixelReset = 0.00001, + .heatPerVRAMChange = 0.00000015, .energyPerPixelChange = 0.05, .energyPerPixelReset = 0.01, @@ -916,16 +916,6 @@ render: } } - Color heatColor = GREEN; - if(heat > 60) heatColor = YELLOW; - if(heat > 80) heatColor = RED; - - size_t memUsage = nn_getComputerMemoryUsed(computer); - size_t memTotal = nn_getComputerMemoryTotal(computer); - - DrawText(TextFormat("Heat: %.02lf Memory Used: %.2lf%%", heat, (double)memUsage / memTotal * 100), 10, GetScreenHeight() - 30, 20, heatColor); - DrawFPS(10, 10); - EndDrawing(); }