X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=antikythera;a=blobdiff_plain;f=src%2Fmachine.cc;fp=src%2Fmachine.cc;h=274362a3a60f12e6e66a5e47e918d3c2a282e6ab;hp=1a78452ccdc47ec54eb3c4615936ac728cc73522;hb=2c8e92970f198061a0cefdb59c2d0ec8c58409c9;hpb=84484521a697fe60f63bff077b9ba7475a45e54e diff --git a/src/machine.cc b/src/machine.cc index 1a78452..274362a 100644 --- a/src/machine.cc +++ b/src/machine.cc @@ -9,6 +9,7 @@ static float delta_angle(float a, float b); Machine::Machine() { meshing = 0; + meshing_valid = false; visited = 0; } @@ -29,6 +30,7 @@ Machine::~Machine() void Machine::add_gear(Gear *g) { gears.push_back(g); + meshing_valid = false; } void Machine::add_motor(int gearidx, float speed_hz) @@ -39,6 +41,11 @@ void Machine::add_motor(int gearidx, float speed_hz) motors.push_back(m); } +void Machine::invalidate_meshing() +{ + meshing_valid = false; +} + void Machine::calc_meshing() { int ngears = (int)gears.size(); @@ -142,6 +149,11 @@ void Machine::update(float dt) { int ngears = (int)gears.size(); + if(!meshing_valid) { + calc_meshing(); + meshing_valid = true; + } + memset(visited, 0, ngears * sizeof *visited); for(size_t i=0; i