Coordinator v2
Dependencies: NerfUSXbee PinDetect EthernetInterface JSON MFRC522 WebSocketClient mbed-rtos mbed
Diff: src/GameCoordinator.cpp
- Revision:
- 1:e1c5259b7d9a
- Child:
- 2:019d8848cf7e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/GameCoordinator.cpp Mon Apr 10 15:02:24 2017 -0400 @@ -0,0 +1,58 @@ +#include "GameCoordinator.hpp" + +GameCoordinator gameCoordinator; + +//TODO: move that to .cpp +GameCoordinator::GameCoordinator() +{ + //Adding all the game modes to the game_modes vector + //TODO: can we avoid new operator ? + ReflexMode *reflex_mode = new ReflexMode(&targets); + SpeedMode *speed_mode = new SpeedMode(&targets); + game_modes.push_back(reflex_mode); + game_modes.push_back(speed_mode); + + //Starting internal thread + Tget_next_round = Thread(osPriorityNormal, 800); + Tget_next_round.start(this, &GameCoordinator::get_next_round); +} + +void GameCoordinator::start_game(ServerData *configs) +{ + current_game = game_modes[configs->game_id]; + target_timeout = configs->max_reflex_time; + number_of_targets = configs->number_of_target; + ticker.attach(callback(this, &GameCoordinator::ticker_callback), current_game->getTimeBetweenTargets() / 1000.0); +} + +void GameCoordinator::stop_game() +{ + ticker.detach(); + LPC_TIM3->TC = 0; + //TODO: send stats back to server +} + +void GameCoordinator::ticker_callback() +{ + Tget_next_round.signal_set(0x1); +} + +//Thread +void GameCoordinator::get_next_round() +{ + while (1) + { + Thread::signal_wait(0x1); + Target *nextTarget = current_game->GetNextTarget(); + if (nextTarget == NULL || number_of_targets-- <= 0) + { + stop_game(); + } + else + { + //TODO: how to select enemy or ally ? + nextTarget->rise(rand() % 2, target_timeout); + } + Thread::yield(); + } +} \ No newline at end of file