double RoboMotor::getTotalSpeed() { /* Returns all of the individual speed variables added together. */ return (getXSpeed() + getYSpeed() + getZSpeed() + getYawSpeed() + getPitchSpeed() + getRollSpeed() + getTurnSpeed()); }
void HelloWorld::update(float dt) { auto n = (Notifier*) notifier; timeSinceLastMouseUp += dt; timeSinceLastNotifierUpdate += dt; timeSinceLastObjectCull += dt; Vec2 visibleSize = Director::getInstance()->getVisibleSize(); bool updateMinimap = timeSinceLastNotifierUpdate >= MINIMAP_REDRAW_FREQ; // cull first, then update the remainder if(timeSinceLastObjectCull >= OBJECT_CULL_FREQ) { timeSinceLastObjectCull -= OBJECT_CULL_FREQ; std::vector<int> toRemove; for (auto sprite : torpedoVect) { auto bounds = (GAME_SIZE + visibleSize) / 2; if(sprite->getPosition().x < -1* bounds.x || sprite->getPosition().x > bounds.x || sprite->getPosition().y < -1*bounds.y || sprite->getPosition().y > bounds.y) { toRemove.push_back(sprite->getID()); } } for (int i : toRemove) { removeTorpedoByID(i); } toRemove.clear(); for (auto sprite : spriteVect) { auto bounds = (GAME_SIZE + visibleSize) / 2; if(sprite->getPosition().x < -1* bounds.x || sprite->getPosition().x > bounds.x || sprite->getPosition().y < -1*bounds.y || sprite->getPosition().y > bounds.y) { toRemove.push_back(sprite->getID()); } } for (int i : toRemove) { removeSpriteByID(i); } } // redirect the player sub if it veers off map //TODO: enemy subs if(playerSub->getPosition().x < -1*GAME_SIZE.x/2) playerSub->setPosition(-1*GAME_SIZE.x/2, playerSub->getPosition().y); else if(playerSub->getPosition().x > GAME_SIZE.x/2) playerSub->setPosition(GAME_SIZE.x/2, playerSub->getPosition().y); if(playerSub->getPosition().y < -1*GAME_SIZE.y/2) playerSub->setPosition(playerSub->getPosition().x, -1*GAME_SIZE.y/2); else if(playerSub->getPosition().y > GAME_SIZE.y/2) playerSub->setPosition(playerSub->getPosition().x, GAME_SIZE.y/2); if(updateMinimap) timeSinceLastNotifierUpdate -= MINIMAP_REDRAW_FREQ; n->setLookingAt(lookingAt()); for (auto p : typeKeyCandidates) { *p.second += dt; } // process user input before updating existing items // while key pressed for (auto key : activeKeys) { auto ps = (Submarine*)playerSub; switch (key) { case EventKeyboard::KeyCode::KEY_UP_ARROW: { setPlayerForce(getPlayerForce() + playerDeltaForcePerSecond * dt); break; } case EventKeyboard::KeyCode::KEY_DOWN_ARROW: { setPlayerForce(getPlayerForce() - playerDeltaForcePerSecond * dt); break; } #ifdef TURN_VIA_ARROW_KEYS case EventKeyboard::KeyCode::KEY_RIGHT_ARROW: { ps->setTargetHeading(ps->getTargetHeading() + ps->getTurnSpeed() * dt); break; } case EventKeyboard::KeyCode::KEY_LEFT_ARROW: { ps->setTargetHeading(ps->getTargetHeading() - ps->getTurnSpeed() * dt); break; } #endif } } // update existing items n->update(dt); for (auto o3s : spriteVect) { o3s->update(dt); } for (auto torpedo : torpedoVect) { torpedo->update(dt); if(updateMinimap) n->newMinimapTorpedo(torpedo->getPosition(), torpedo->getID()); n->newOffscreenTorpedo(torpedo->getPosition(), torpedo->getID()); } lastPlayerPos = playerSub->getPosition(); if(playerTurning && !((Submarine*)playerSub)->isTurning()) { playerTurning = false; setPlayerForce(getPlayerForce()); } else if(!playerTurning && ((Submarine*)playerSub)->isTurning()) { playerTurning = true; setPlayerForce(getPlayerForce()); } playerSub->update(dt); // update speed display after physics simulation ((Notifier*)notifier)->setSpeedText(((Submarine*)playerSub)->getSpeed()); if(updateMinimap) n->newMinimapPlayer(playerSub->getPosition(), ((O3Sprite*)playerSub)->getID()); #ifdef LOCK_PLAYER_CAMERA lookAt(playerSub->getPosition()); #else moveScreenBy(playerSub->getPosition() - lastPlayerPos); #endif }