Ejemplo n.º 1
0
int MWMechanics::Alchemy::addIngredient (const MWWorld::Ptr& ingredient)
{
    // find a free slot
    int slot = -1;

    for (int i=0; i<static_cast<int> (mIngredients.size()); ++i)
        if (mIngredients[i].isEmpty())
        {
            slot = i;
            break;
        }

    if (slot==-1)
        return -1;

    for (TIngredientsIterator iter (mIngredients.begin()); iter!=mIngredients.end(); ++iter)
        if (!iter->isEmpty() && Misc::StringUtils::ciEqual(ingredient.getClass().getId(ingredient),
                                                           iter->getClass().getId(*iter)))
            return -1;

    mIngredients[slot] = ingredient;

    updateEffects();

    return slot;
}
Ejemplo n.º 2
0
void MWMechanics::Alchemy::removeIngredient (int index)
{
    if (index>=0 && index<static_cast<int> (mIngredients.size()))
    {
        mIngredients[index] = MWWorld::Ptr();
        updateEffects();
    }
}
Ejemplo n.º 3
0
AudioSettings::AudioSettings(TabFrame* parent) : TabFrameItem(parent) {
  setIcon(Icon::Device::Speaker);
  setText("Audio");

  layout.setMargin(5);

  driverLabel.setFont(Font().setBold()).setText("Driver Settings");

  latencyLabel.setText("Latency:");
  latencyCombo.append(ComboButtonItem().setText("0ms"));
  latencyCombo.append(ComboButtonItem().setText("20ms"));
  latencyCombo.append(ComboButtonItem().setText("40ms"));
  latencyCombo.append(ComboButtonItem().setText("60ms"));
  latencyCombo.append(ComboButtonItem().setText("80ms"));
  latencyCombo.append(ComboButtonItem().setText("100ms"));
  switch(settings["Audio/Latency"].natural()) {
  case   0: latencyCombo.item(0)->setSelected(); break;
  case  20: latencyCombo.item(1)->setSelected(); break;
  case  40: latencyCombo.item(2)->setSelected(); break;
  case  60: latencyCombo.item(3)->setSelected(); break;
  case  80: latencyCombo.item(4)->setSelected(); break;
  case 100: latencyCombo.item(5)->setSelected(); break;
  }
  latencyCombo.onChange([&] { updateDriver(); });

  frequencyLabel.setText("Frequency:");
  auto frequencyValue = audio->get(Audio::Frequency).get<uint>(44100);
  frequencyCombo.append(ComboButtonItem().setText({frequencyValue, "hz"}));
  frequencyCombo.setEnabled(false);

  resamplerLabel.setText("Resampler:");
  resamplerCombo.append(ComboButtonItem().setText("IIR - Biquad"));
  resamplerCombo.setEnabled(false);

  exclusiveMode.setText("Exclusive Mode");
  exclusiveMode.setChecked(settings["Audio/Exclusive"].boolean()).onToggle([&] { updateDriver(); });
  if(!audio->cap(Audio::Exclusive)) exclusiveMode.remove();

  effectsLabel.setFont(Font().setBold()).setText("Effects");

  volumeLabel.setText("Volume:");
  volumeValue.setAlignment(0.5);
  volumeSlider.setLength(501).setPosition(settings["Audio/Volume"].natural()).onChange([&] { updateEffects(); });

  balanceLabel.setText("Balance:");
  balanceValue.setAlignment(0.5);
  balanceSlider.setLength(101).setPosition(settings["Audio/Balance"].natural()).onChange([&] { updateEffects(); });

  reverbEnable.setText("Reverb").setChecked(settings["Audio/Reverb/Enable"].boolean()).onToggle([&] { updateEffects(); });

  updateDriver();
  updateEffects();
}
Ejemplo n.º 4
0
void Element::update(float dt)
{
	BBGE_PROF(Element_update);
	if (!core->particlesPaused)
	{
		updateLife(dt);
		updateEffects(dt);
		if (drawGrid)
			updateGrid(dt);
	}

//	updateCullVariables();
}
Ejemplo n.º 5
0
Archivo: main.c Proyecto: emassey2/OSS
void updateAllEffects(void) {
	updateEffects(ch0->note, ch0->waveTable_ref);
	updateEffects(ch1->note, ch1->waveTable_ref);
	updateEffects(ch2->note, ch2->waveTable_ref);
	updateEffects(ch3->note, ch3->waveTable_ref);
	updateEffects(ch4->note, ch4->waveTable_ref);
	updateEffects(ch5->note, ch5->waveTable_ref);
}
Ejemplo n.º 6
0
void EnemyBase::update()
{
	updateEffects();
	bar.centerToPoint(this->getCenterX(),this->getCenterY() - getHeight()/2 - 10);

	if(road != NULL)
	if(currentRoadTile < road->getRoadLenght() - 1)
	{
		SDL_Point nextTile = road->getPointAt(currentRoadTile + 1);
		SDL_Point curTile = road->getPointAt(currentRoadTile);

		int dirX = nextTile.x - curTile.x;
		int dirY = nextTile.y - curTile.y;


		move(dirX * speed,dirY * speed);

		distance += (double)speed;

		double cpX = nextTile.x * TILEWIDTH + TILEWIDTH/2;
		double cpY = nextTile.y * TILEHEIGHT + TILEHEIGHT/2;
		if(dirX != 0)
		{
			if((cpX - getCenterX()) * dirX <= 0)
			{
				 setX(cpX - getWidth()/2);
				 currentRoadTile++;
			}
		}
		else 
		{
			if((cpY - getCenterY())*dirY <= 0)
			{
				
				setY(cpY - getHeight()/2);
				currentRoadTile++;
			}
		}


	}
	else 
	{
		reachedEnd = true;
	}
}
Ejemplo n.º 7
0
void QuestsWindow::setMap(const Map *const map)
{
    if (mMap != map)
    {
        mMap = map;
        mMapEffects.clear();
        if (!mMap)
            return;

        const std::string name = mMap->getProperty("shortName");
        FOR_EACH (std::vector<QuestEffect*>::const_iterator, it,  mAllEffects)
        {
            const QuestEffect *const effect = *it;
            if (effect && name == effect->map)
                mMapEffects.push_back(effect);
        }
        updateEffects();
    }
Ejemplo n.º 8
0
void Camera::update(const ego_mesh_t *mesh)
{
    // Update the _turnTime counter.
    if (CameraTurnMode::None != _turnMode)
    {
        _turnTime = 255;
    }
    else if (_turnTime > 0)
    {
        _turnTime--;
    }

    // Camera controls.
    for (PLA_REF ipla = 0; ipla < MAX_PLAYER; ++ipla)
    {
        // Don't do invalid players.
        if (INVALID_PLA(ipla))
        {
            continue;
        }
        player_t *ppla = PlaStack.get_ptr(ipla);

        // Handle camera control from this player.
        readInput(ppla->pdevice);
    }

    // Update the special camera effects like grog.
    updateEffects();

    // Update the average position of the tracked characters.
    updateTrack(mesh);

    // Move the camera center, if need be.
    updateCenter();

    // Make the zadd and zoom work together.
    updateZoom();

    // Update the position of the camera.
    updatePosition();

    // Set the view matrix.
    makeMatrix();
}
Ejemplo n.º 9
0
void MWMechanics::Alchemy::removeIngredients()
{
    bool needsUpdate = false;

    for (TIngredientsContainer::iterator iter (mIngredients.begin()); iter!=mIngredients.end(); ++iter)
        if (!iter->isEmpty())
        {
            iter->getContainerStore()->remove(*iter, 1, mAlchemist);

            if (iter->getRefData().getCount()<1)
            {
                needsUpdate = true;
                *iter = MWWorld::Ptr();
            }
        }

    if (needsUpdate)
        updateEffects();
}
Ejemplo n.º 10
0
	/*
		Uses: 
		Affects: 
	*/
void Territory::update(UpdateInfo info, Controls * controls, Sounds * sounds)
{
	this->sounds = sounds;
	// Update all player projectiles
	/*
		Uses: playerProjectile
		Affects: playerProjectile
	*/
	updatePlayerProjectiles(info, controls);
	/*
		Uses: playerProjectiles(boundingBox),  enemies(boundingBox), playerProjectiles(piercing)
		Affects: playerProjectiles(piercing),  enemies(hp), effects(spawns)
	*/
	collidePlayerProjectiles(info, controls);

	// Update all enemies.
	/*
		Uses: enemies
		Affects: enemies
	*/
	updateEnemies(info);

	// Check if the player is hit by enemy projectiles.
	/*
		Uses: enemyProjectiles
		Affects: enemyProjectiles
	*/
	updateEnemyProjectiles(info, controls);
	/*
		Uses: enemyProjectiles(boundingBox),  player(boundingBox), enemyProjectiles(piercing)
		Affects: enemyProjectiles(piercing), player(hp), sounds(play)
	*/
	collideEnemyProjectiles(info, controls);
	/*
		Uses: enemyProjectiles(boundingBox), player(isInSafe), partitionedSafeZonesTiles(boundingBox)
		Affects: enemyProjectiles(expend)
	*/
	collideEnemyProjectilesSafe(info, controls);

	// Update player and safe zone checks.
	/*
		Uses: player(getBoundingBox, getConvexHull, getSpeed), safeZonesTiles(getBoundingBox, getConvexHull)
		Affects: player(update, setIsInSafeZone, setSafeZoneIndex)
	*/
	updatePlayer(info, controls);

	// Update all effects.
	/*
		Uses: effects
		Affects: effects
	*/
	updateEffects(info);

	// Spawn enemy
	/*
		Uses: enemySpawner, getSpawnPoints
		Affects: enemySpawner, spawnQueue, entityCluster.getCollection(1), entityCluster.getCollection(0)
	*/
	enemySpawner.update(getSpawnPoints(), spawnQueue, player, entityCluster.getCollection(1), entityCluster.getCollection(0), info);

	// Background tile stuff.
	/*
		Uses: tileColorings
		Affects: floorTiles(setColor), tileColorings
	*/
	cleanFloorTiles();

	// Enemy aura colorization on floor tiles.
	/*
		Uses: enemies(getPosition), territory(getPosition), floorTiles(getColor)	
		Affects: floorTiles(setColor), tileColorings
	*/
	colorEnemyAuraTiles();

	// Beware this section can change if this territory is active.
	// Handle the case of the player trying to cross the territory border.
	/*
		Uses: floorTiles,player(getBoundingBox, getConvexHull, getPosition, getSpeed), this(position)
		Affects: world(changeTerritory), player(setPosition)
	*/
	collideBorderTiles();
}
Ejemplo n.º 11
0
void QuestsWindow::rebuild(const bool playSound)
{
    mQuestsModel->clear();
    mQuestLinks.clear();
    StringVect &names = mQuestsModel->getNames();
    std::vector<Image*> &images = mQuestsModel->getImages();
    std::vector<QuestItem*> complete;
    std::vector<QuestItem*> incomplete;
    std::vector<QuestItem*> hidden;
    int updatedQuest = -1;
    int newCompleteStatus = -1;

    for (std::map<int, int>::const_iterator it = mVars.begin(),
         it_end = mVars.end(); it != it_end; ++ it)
    {
        const int var = (*it).first;
        const int val = (*it).second;
        const std::vector<QuestItem*> &quests = mQuests[var];
        FOR_EACH (std::vector<QuestItem*>::const_iterator, it2, quests)
        {
            if (!*it2)
                continue;
            QuestItem *const quest = *it2;
            // complete quest
            if (quest->complete.find(val) != quest->complete.end())
                complete.push_back(quest);
            // incomplete quest
            else if (quest->incomplete.find(val) != quest->incomplete.end())
                incomplete.push_back(quest);
            // hidden quest
            else
                hidden.push_back(quest);
        }
    }

    int k = 0;

    for (std::vector<QuestItem*>::const_iterator it = complete.begin(),
        it_end = complete.end(); it != it_end; ++ it, k ++)
    {
        QuestItem *const quest = *it;
        if (quest->completeFlag == 0 || (quest->broken
            && quest->completeFlag == -1))
        {
            updatedQuest = k;
            newCompleteStatus = 1;
        }
        quest->completeFlag = 1;
        mQuestLinks.push_back(quest);
        names.push_back(quest->name);
        if (mCompleteIcon)
        {
            mCompleteIcon->incRef();
            images.push_back(mCompleteIcon);
        }
        else
        {
            images.push_back(nullptr);
        }
    }

    for (std::vector<QuestItem*>::const_iterator it = incomplete.begin(),
        it_end = incomplete.end(); it != it_end; ++ it, k ++)
    {
        QuestItem *const quest = *it;
        if (quest->completeFlag == -1)
        {
            updatedQuest = k;
            newCompleteStatus = 0;
        }
        quest->completeFlag = 0;
        mQuestLinks.push_back(quest);
        names.push_back(quest->name);
        if (mIncompleteIcon)
        {
            mIncompleteIcon->incRef();
            images.push_back(mIncompleteIcon);
        }
        else
        {
            images.push_back(nullptr);
        }
    }

    FOR_EACH (std::vector<QuestItem*>::const_iterator, it, hidden)
        (*it)->completeFlag = -1;

    if (updatedQuest == -1 || updatedQuest >= static_cast<int>(
        mQuestLinks.size()))
    {
        updatedQuest = static_cast<int>(mQuestLinks.size() - 1);
    }
    if (updatedQuest >= 0)
    {
        mQuestsListBox->setSelected(updatedQuest);
        showQuest(mQuestLinks[updatedQuest]);
        if (playSound && effectManager)
        {
            switch (newCompleteStatus)
            {
                case 0:
                    effectManager->trigger(mNewQuestEffectId, player_node);
                    break;
                case 1:
                    effectManager->trigger(mCompleteQuestEffectId,
                        player_node);
                    break;
                default:
                    break;
            }
        }
    }
    updateEffects();
}
Ejemplo n.º 12
0
/*!
  Sets internal pointers to frequently used QML items, thus reducing the overhead
  of repeated searching for them at runtime.
  */
void CcfQmlBaseScenario::init()
{
    if (mScenarioFile != "") {
        QStringList unitSideList;
        QObject *unitsLoader = child("unitsLoader");
        QObject *unitItem = unitsLoader->property("unitsItem").value<QObject *>();
        QObject *map = child("map");

        if (unitItem->objectName() != "Campaign") {
            // This is a single scenario
            map->set("source", unitItem->getString("mapFile"));
            QObjectList tempList = unitItem->children();

            for (int i = 0; i < tempList.count(); ++i) {
                CcfQmlBaseUnit *unit = ccfUnit(tempList.at(i));
                if ((unit != 0) && (unit->property("unitIndex").isValid())) {
                    unit->setUnitIndex(i);
                    connect(this, &CcfQmlBaseScenario::togglePause,
                            unit, &CcfQmlBaseUnit::togglePause);
                    connect(unit, &CcfQmlBaseUnit::actionFinished,
                            this, &CcfQmlBaseScenario::actionFinished);
                    connect(unit, &CcfQmlBaseUnit::movementStateChange,
                            this, &CcfQmlBaseScenario::handleUnitMovement);
                    unitSideList.append(unit->getUnitSide());
                    mUnits.append(unit);
                }
            }

            mMapItem = map->property("mapItem").value<CcfQmlBaseMap *>();

            if(mMapItem != 0)
                mMapItem->setUnits(mUnits);
            else
                mlogger->error("MapItem object was not properly initialised",
                               "Robin Hood is a jerk");
        } else {
            // This is a campaign
            // TODO: add some clever code here ;)
        }

        mScenarioState->setAvailableSides(unitSideList);

        mAimLine = item("aimLine");
        mGameArea = item("gameArea");
        mZoomArea = item("zoomArea");
        mContextMenu = item("contextMenu");
        mEffectsTimer = child("effectsTimer");
        mRotationTimer = child("rotationTimer");
        mFollowingTimer = child("followingTimer");
        mMouseAreaMain = child("mouseAreaMain");

        mRoster = findChild<CcfQmlBaseRosterMenu *>("roster");
        mRoster->populateUnits(mUnits);

        connect(mContextMenu, SIGNAL(menuEntryClicked(QString)), this, SLOT(scheduleContextAction(QString)));
        connect(mRotationTimer, SIGNAL(triggered()), this, SLOT(updateAimLine()));
        connect(mEffectsTimer, SIGNAL(triggered()), this, SLOT(updateEffects()));
        connect(mFollowingTimer, SIGNAL(triggered()), this, SLOT(updateFollowingUnit()));
        connect(child("sceneUpdateTimer"), SIGNAL(triggered()), this, SLOT(updateUnitVisibility()));
        connect(child("rubberBandTimer"), SIGNAL(triggered()), this, SLOT(updateRubberBand()));

        hideNonPlayerUnits();
        setSideMarks();
    }
}
Ejemplo n.º 13
0
Ogre::Vector3 Animation::runAnimation(float duration)
{
    Ogre::Vector3 movement(0.0f);
    AnimStateMap::iterator stateiter = mStates.begin();
    while(stateiter != mStates.end())
    {
        AnimState &state = stateiter->second;
        const NifOgre::TextKeyMap &textkeys = state.mSource->mTextKeys;
        NifOgre::TextKeyMap::const_iterator textkey(textkeys.upper_bound(state.mTime));

        float timepassed = duration * state.mSpeedMult;
        while(state.mPlaying)
        {
            float targetTime;

            if(state.mTime >= state.mLoopStopTime && state.mLoopCount > 0)
                goto handle_loop;

            targetTime = state.mTime + timepassed;
            if(textkey == textkeys.end() || textkey->first > targetTime)
            {
                if(mNonAccumCtrl && stateiter->first == mAnimationTimePtr[0]->getAnimName())
                    updatePosition(state.mTime, targetTime, movement);
                state.mTime = std::min(targetTime, state.mStopTime);
            }
            else
            {
                if(mNonAccumCtrl && stateiter->first == mAnimationTimePtr[0]->getAnimName())
                    updatePosition(state.mTime, textkey->first, movement);
                state.mTime = textkey->first;
            }

            state.mPlaying = (state.mTime < state.mStopTime);
            timepassed = targetTime - state.mTime;

            while(textkey != textkeys.end() && textkey->first <= state.mTime)
            {
                handleTextKey(state, stateiter->first, textkey);
                textkey++;
            }

            if(state.mTime >= state.mLoopStopTime && state.mLoopCount > 0)
            {
            handle_loop:
                state.mLoopCount--;
                state.mTime = state.mLoopStartTime;
                state.mPlaying = true;

                textkey = textkeys.lower_bound(state.mTime);
                while(textkey != textkeys.end() && textkey->first <= state.mTime)
                {
                    handleTextKey(state, stateiter->first, textkey);
                    textkey++;
                }

                if(state.mTime >= state.mLoopStopTime)
                    break;
            }

            if(timepassed <= 0.0f)
                break;
        }

        if(!state.mPlaying && state.mAutoDisable)
        {
            mStates.erase(stateiter++);
            resetActiveGroups();
        }
        else
            ++stateiter;
    }

    for(size_t i = 0;i < mObjectRoot->mControllers.size();i++)
        mObjectRoot->mControllers[i].update();

    // Apply group controllers
    for(size_t grp = 0;grp < sNumGroups;grp++)
    {
        const std::string &name = mAnimationTimePtr[grp]->getAnimName();
        if(!name.empty() && (stateiter=mStates.find(name)) != mStates.end())
        {
            const Ogre::SharedPtr<AnimSource> &src = stateiter->second.mSource;
            for(size_t i = 0;i < src->mControllers[grp].size();i++)
                src->mControllers[grp][i].update();
        }
    }

    if(mSkelBase)
    {
        // HACK: Dirty the animation state set so that Ogre will apply the
        // transformations to entities this skeleton instance is shared with.
        mSkelBase->getAllAnimationStates()->_notifyDirty();
    }

    updateEffects(duration);

    return movement;
}