KlassischeKeplerKriege/game/game.cpp

87 lines
2.1 KiB
C++
Raw Normal View History

#include "game.hpp"
#include "state/commands.hpp"
#include "util.hpp"
#include <cmath>
2016-09-28 19:38:13 +00:00
#include "options.hpp"
2016-09-28 13:22:16 +00:00
Game::Game()
{
2016-09-27 21:16:25 +00:00
// advance simulation in fixed steps with 100 Hz
2016-09-27 20:35:16 +00:00
m_time_step = 1.0 / 100.0;
m_time_for_next_step = 0.0;
m_state = new game::State();
m_state->init();
// XXX
// one dummy ship for testing
2016-09-28 19:38:13 +00:00
if (ISSET_FLAG(TEST_AUTORUN)) {
m_state->addPlayer();
}
}
bool Game::cycle(float dt)
{
2016-09-28 19:38:13 +00:00
if (ISSET_FLAG(TEST_AUTORUN)) {
// XXX the following is just testing code to do things
static float total = 0.0;
static float acc = 0.0;
//if (total == 0.0) {
// float speed = 0.005;
// m_state->players[0]->addCommand(new game::SetSpeedCommand(speed));
// for (int i=0; i<100; i++) {
// float a = 2.0 * M_PI * util::randf_0_1();
// m_state->players[0]->addCommand(new game::ShootCommand(a));
// }
//}
2016-09-27 21:07:11 +00:00
2016-09-28 19:38:13 +00:00
acc += dt;
total += dt;
float spawnInterval = 0.5;
2016-09-28 19:38:13 +00:00
while (acc > spawnInterval) {
acc -= spawnInterval;
2016-09-28 19:38:13 +00:00
float angle = 360.0 * util::randf_0_1();
float speed = 1.;
2016-09-28 19:38:13 +00:00
m_state->players.back()->addCommand(new game::SetSpeedCommand(speed));
m_state->players.back()->addCommand(new game::ShootCommand(angle));
2016-09-27 21:07:11 +00:00
2016-09-28 19:38:13 +00:00
//static bool done = false;
//if (total >= 10.0 && !done) {
// done = true;
2016-09-27 21:07:11 +00:00
2016-09-28 19:38:13 +00:00
// m_state->players[0]->addCommand(new game::ClearTracesCommand());
//}
}
}
2016-09-27 18:56:17 +00:00
// std::cout<<"adding dt: " << dt << std::endl;
m_time_for_next_step += dt;
int steps = 0;
2016-09-27 18:56:17 +00:00
while (m_time_for_next_step >= m_time_step) {
// std::cout<<"time now: " << m_time_for_next_step << std::endl;
m_time_for_next_step -= m_time_step;
m_state->advance(m_time_step);
steps++;
}
2016-09-27 18:56:17 +00:00
// std::cout << m_time_for_next_step << " s remaining time, " << steps << "
// steps taken." << std::endl;
return true;
}
void Game::resize(int width, int height)
{
m_state->setPlayingFieldSize(width, height);
}