Esempio n. 1
0
	double RoboMotor::getTotalSpeed()
	{
		/*
			Returns all of the individual speed variables added together.
		*/
		return (getXSpeed() + getYSpeed() + getZSpeed() + getYawSpeed() 
			+ getPitchSpeed() + getRollSpeed() + getTurnSpeed());
	}
Esempio n. 2
0
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
}