class ExplodingTarget : public FloorPanel {
public:
float get_random(){
- return ((rand() % 2000000) - 1000000.0f) / 500000.0f;
+ return 3.0 * (1.0f - 2.0f * (float)rand() / (float)RAND_MAX);
}
void report_collision(GameObject *other, size_t other_instance, size_t our_instance) override {
double sleep_seconds = 0.001 - (end_time - start_time);
unsigned long sleep_microseconds = sleep_seconds * 1000000.0;
- this_thread::sleep_for(chrono::microseconds(sleep_microseconds));
+// Windows can sleep for a minimum of about 15ms by this method, it seems
+// this_thread::sleep_for(chrono::microseconds(sleep_microseconds));
}
}
moving = true;
};
void add_location_size(vec3 start, vec3 vel){
- models.push_back(translate(mat4(1.0), start));
- models[models.size() - 1] = scale(models[models.size() - 1], vec3(proj_size, proj_size, proj_size));
velocities.push_back(vel * 0.1f);
times_to_live.push_back(2000);
specials.push_back(0);
+ models.push_back(translate(mat4(1.0), start));
+ models[models.size() - 1] = scale(models[models.size() - 1], vec3(proj_size, proj_size, proj_size));
}
void add_location_size(){
/* Defaults to "launched by player" */
}
void movement(float time) {
for(size_t i = 0; i < models.size(); i++) {
- models[i] = translate(models[i], velocities[i]);
+ models[i] = translate(models[i], velocities[i] * time);
times_to_live[i] -= time;
if(times_to_live[i] < 0){
models.erase(models.begin() + i);
velocities.erase(velocities.begin() + i);
times_to_live.erase(times_to_live.begin() + i);
specials.erase(specials.begin() + i);
+ i--;
}
}
}