void PossessorPlayer::update(float dt) { //update aiming direction: InputMethod* method = player->getInputMethod(); if (method->getAction(InputMethod::AIM)) { auto result = method->getAimDir(aim_dir); aiming = true; if (result.first) { float a = result.second.getAngle(); if (a>PI) a+=-TAU; aim_dir = aim_dir.addAngle(a*dt*4); } else { aim_dir = result.second.normalize(); } } else { aiming=false; } //update HUD ui state: if (getHUD() && getHUD()->getUIState()) { //open menu: if (player->getInputMethod()->getAction(InputMethod::OPTION_OPEN_MENU)) { getHUD()->getUIState()->ui_active^=1; return; } //update menu: getHUD()->getUIState()->update(player->getInputMethod(),dt); return; } }
order PossessorPlayer::getOrder() { if (getHUD() != nullptr && getHUD()->getUIState() != nullptr && getHUD()->getUIState()->ui_active) { //do nothing return order(); } assert(player); order o; auto method = player->getInputMethod(); vector2F v = method->getMovementVector(); if (v.getMagnitude() > 1) v.setMagnitude(1); o.movement = v; o.movement_magnitude_procuntual = true; if (method->getAction(InputMethod::AIM)) { o.movement=aim_dir; o.aim=aim_dir; o.stand_in_place=true; } else if (!o.movement.isZero()&&!o.stand_in_place) { aim_dir={0,0}; aiming=false; } if (method->getAction(InputMethod::ATTACK_0)) { o.attack_type=0; o.do_attack=true; } if (method->getAction(InputMethod::ATTACK_1)) { o.attack_type=1; o.do_attack=true; } if (method->getAction(InputMethod::ATTACK_2)) { o.attack_type = 2; o.do_attack = true; } o.do_context_sensitive = method->getAction(InputMethod::CONTEXT_SENSITIVE); o.dash = method->getAction(InputMethod::DASH); return o; }
void MyGame::update() { getMonster().update(*this); helicopters.update(); missiles.update(); getHUD().update(*this); // me->get<MyEntity>().update(); // shuttle->get<Shuttle>().update(*this); #ifndef WEB updateDesktopShortcuts_(); #endif //updateCameraMotion_(); }