fast-nuclear-sim/src/reactor/rod.hpp

63 lines
1.2 KiB
C++
Raw Normal View History

2024-01-14 16:57:13 +11:00
#pragma once
#include <ostream>
2024-01-14 17:07:45 +11:00
namespace sim::reactor
2024-01-14 16:57:13 +11:00
{
class rod
{
public:
static const int VAL_N = 3;
enum val_t
{
HEAT = 0,
N_SLOW = 1,
N_FAST = 2
};
2024-01-14 17:50:43 +11:00
virtual void interact(rod* o, double secs);
virtual void update(double secs) { };
2024-01-14 16:57:13 +11:00
virtual void add(val_t type, double v);
virtual double extract(val_t type, double k, double o);
virtual double get(val_t type) const;
2024-01-14 18:35:12 +11:00
virtual bool should_select() const { return false; }
virtual void update_selected(double a) { }
constexpr void toggle_selected() { selected = !selected; }
constexpr bool is_selected() { return selected; }
2024-01-14 16:57:13 +11:00
friend std::ostream& operator<<(std::ostream& o, const rod& r)
{
2024-01-14 17:50:43 +11:00
if(!r.should_display()) return o;
2024-01-14 18:35:12 +11:00
o << r.get_name() << "\n";
2024-01-14 16:57:13 +11:00
r.display(o);
2024-01-14 23:44:36 +11:00
// o << "Heat: " << r.get(val_t::HEAT) << "\n";
2024-01-14 16:57:13 +11:00
o << "Fast: " << r.get(val_t::N_FAST) << "\n";
o << "Slow: " << r.get(val_t::N_SLOW) << "\n";
return o;
}
protected:
double vals_in[VAL_N] = {0};
double vals[VAL_N] = {0};
2024-01-14 18:35:12 +11:00
bool selected = false;
2024-01-14 16:57:13 +11:00
2024-01-14 17:50:43 +11:00
virtual void display(std::ostream& o) const { };
virtual double get_k(val_t type) const { return 0; }
virtual const char* get_name() const { return "Empty"; }
virtual bool should_display() const { return false; }
2024-01-14 16:57:13 +11:00
void update_rod();
};
}