fast-nuclear-sim/src/main.cpp

100 lines
1.7 KiB
C++
Raw Normal View History

2024-01-13 15:21:17 +11:00
2024-01-14 17:50:43 +11:00
#include "reactor/builder.hpp"
2024-01-14 17:07:45 +11:00
#include "reactor/control/control_rod.hpp"
#include "reactor/fuel/fuel_rod.hpp"
#include "reactor/coolant/pipe.hpp"
2024-01-14 16:57:13 +11:00
#include "display.hpp"
2024-01-13 15:21:17 +11:00
2024-01-13 21:54:21 +11:00
#include <sstream>
2024-01-13 15:21:17 +11:00
#include <unistd.h>
2024-01-13 21:54:21 +11:00
#include <curses.h>
2024-01-13 15:21:17 +11:00
int main()
{
2024-01-13 21:54:21 +11:00
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
nodelay(stdscr, TRUE);
curs_set(0);
2024-01-14 17:50:43 +11:00
sim::reactor::reactor<5, 5> reactor = sim::reactor::builder<5, 5>(
sim::reactor::fuel::fuel_rod(100, 400),
2024-01-14 23:44:36 +11:00
sim::reactor::control::control_rod(1000, 0.1),
2024-01-14 17:50:43 +11:00
sim::reactor::coolant::pipe(), {
2024-01-14 23:44:36 +11:00
" PPP ",
"PFCFP",
2024-01-14 17:50:43 +11:00
"PCPCP",
2024-01-14 23:44:36 +11:00
"PFCFP",
" PPP "
2024-01-14 17:50:43 +11:00
});
2024-01-13 15:21:17 +11:00
2024-01-14 23:44:36 +11:00
double secs = 0;
2024-01-13 15:21:17 +11:00
for(;;)
{
2024-01-14 23:44:36 +11:00
reactor.update(0.01);
std::stringstream ss;
ss << "Reactor Core: " << secs << " s\n";
secs += 0.01;
2024-01-13 15:21:17 +11:00
2024-01-13 21:54:21 +11:00
erase();
2024-01-14 23:44:36 +11:00
display::draw_text(1, 0, ss.str().c_str());
2024-01-13 21:54:21 +11:00
const int X = 3, Y = 4;
const int W = 32, H = 8;
2024-01-14 16:57:13 +11:00
for(int x = 0; x < reactor.width; x++)
for(int y = 0; y < reactor.height; y++)
2024-01-13 21:54:21 +11:00
{
std::stringstream ss;
2024-01-14 18:35:12 +11:00
sim::reactor::rod* r = reactor.rods[x][y];
ss << *r;
2024-01-13 21:54:21 +11:00
int px = X + (H - 1) * y;
int py = Y + (W - 1) * x;
2024-01-14 16:57:13 +11:00
display::draw_text(px + 1, py + 2, ss.str().c_str());
display::draw_box(px, py, H, W);
2024-01-14 18:35:12 +11:00
if(r->should_select() && x == reactor.cursor_x && y == reactor.cursor_y)
{
display::draw_text(px + 1, py + W - 5, "[ ]");
}
if(r->is_selected())
{
display::draw_text(px + 1, py + W - 4, "#");
}
2024-01-13 21:54:21 +11:00
}
refresh();
2024-01-14 18:35:12 +11:00
int c = getch();
switch(c)
{
case KEY_LEFT:
reactor.move_cursor(-1);
break;
case KEY_RIGHT:
reactor.move_cursor(1);
break;
case KEY_UP:
2024-01-14 23:44:36 +11:00
reactor.update_selected(0.01);
2024-01-14 18:35:12 +11:00
break;
case KEY_DOWN:
2024-01-14 23:44:36 +11:00
reactor.update_selected(-0.01);
2024-01-14 18:35:12 +11:00
break;
case ' ':
reactor.toggle_selected();
break;
}
2024-01-13 15:21:17 +11:00
}
return 0;
}