diff options
Diffstat (limited to 'indra/newview/llhudmanager.cpp')
-rw-r--r-- | indra/newview/llhudmanager.cpp | 420 |
1 files changed, 210 insertions, 210 deletions
diff --git a/indra/newview/llhudmanager.cpp b/indra/newview/llhudmanager.cpp index 5a071cacf7..d5f5b795b0 100644 --- a/indra/newview/llhudmanager.cpp +++ b/indra/newview/llhudmanager.cpp @@ -1,210 +1,210 @@ -/** - * @file llhudmanager.cpp - * @brief LLHUDManager class implementation - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "llhudmanager.h" - -#include "message.h" -#include "object_flags.h" - -#include "llagent.h" -#include "llhudeffect.h" -#include "pipeline.h" -#include "llui.h" -#include "llviewercontrol.h" -#include "llviewerobjectlist.h" - -// These are loaded from saved settings. -LLColor4 LLHUDManager::sParentColor; -LLColor4 LLHUDManager::sChildColor; - -LLHUDManager::LLHUDManager() -{ - - LLHUDManager::sParentColor = LLUIColorTable::instance().getColor("FocusColor"); - // rdw commented out since it's not used. Also removed from colors_base.xml - //LLHUDManager::sChildColor =LLUIColorTable::instance().getColor("FocusSecondaryColor"); -} - -LLHUDManager::~LLHUDManager() -{ -} - -static LLTrace::BlockTimerStatHandle FTM_UPDATE_HUD_EFFECTS("Update Hud Effects"); - -void LLHUDManager::updateEffects() -{ - LL_RECORD_BLOCK_TIME(FTM_UPDATE_HUD_EFFECTS); - S32 i; - for (i = 0; i < mHUDEffects.size(); i++) - { - LLHUDEffect *hep = mHUDEffects[i]; - if (hep->isDead()) - { - continue; - } - hep->update(); - } -} - -void LLHUDManager::sendEffects() -{ - S32 i; - for (i = 0; i < mHUDEffects.size(); i++) - { - LLHUDEffect *hep = mHUDEffects[i]; - if (hep->isDead()) - { - LL_WARNS() << "Trying to send dead effect!" << LL_ENDL; - continue; - } - if (hep->mType < LLHUDObject::LL_HUD_EFFECT_BEAM) - { - LL_WARNS() << "Trying to send effect of type " << hep->mType << " which isn't really an effect and shouldn't be in this list!" << LL_ENDL; - continue; - } - if (hep->getNeedsSendToSim() && hep->getOriginatedHere()) - { - LLMessageSystem* msg = gMessageSystem; - msg->newMessageFast(_PREHASH_ViewerEffect); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_Effect); - hep->packData(msg); - hep->setNeedsSendToSim(false); - gAgent.sendMessage(); - } - } -} - -//static -void LLHUDManager::shutdownClass() -{ - getInstance()->mHUDEffects.clear(); -} - -void LLHUDManager::cleanupEffects() -{ - S32 i = 0; - - while (i < mHUDEffects.size()) - { - if (mHUDEffects[i]->isDead()) - { - mHUDEffects.erase(mHUDEffects.begin() + i); - } - else - { - i++; - } - } -} - -LLHUDEffect *LLHUDManager::createViewerEffect(const U8 type, bool send_to_sim, bool originated_here) -{ - // SJB: DO NOT USE addHUDObject!!! Not all LLHUDObjects are LLHUDEffects! - LLHUDEffect *hep = LLHUDObject::addHUDEffect(type); - if (!hep) - { - return NULL; - } - - LLUUID tmp; - tmp.generate(); - hep->setID(tmp); - hep->setNeedsSendToSim(send_to_sim); - hep->setOriginatedHere(originated_here); - - mHUDEffects.push_back(hep); - return hep; -} - - -//static -void LLHUDManager::processViewerEffect(LLMessageSystem *mesgsys, void **user_data) -{ - LLHUDEffect *effectp = NULL; - LLUUID effect_id; - U8 effect_type = 0; - S32 number_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_Effect); - S32 k; - - for (k = 0; k < number_blocks; k++) - { - effectp = NULL; - LLHUDEffect::getIDType(mesgsys, k, effect_id, effect_type); - S32 i; - for (i = 0; i < LLHUDManager::getInstance()->mHUDEffects.size(); i++) - { - LLHUDEffect *cur_effectp = LLHUDManager::getInstance()->mHUDEffects[i]; - if (!cur_effectp) - { - LL_WARNS() << "Null effect in effect manager, skipping" << LL_ENDL; - LLHUDManager::getInstance()->mHUDEffects.erase(LLHUDManager::getInstance()->mHUDEffects.begin() + i); - i--; - continue; - } - if (cur_effectp->isDead()) - { - // LL_WARNS() << "Dead effect in effect manager, removing" << LL_ENDL; - LLHUDManager::getInstance()->mHUDEffects.erase(LLHUDManager::getInstance()->mHUDEffects.begin() + i); - i--; - continue; - } - if (cur_effectp->getID() == effect_id) - { - if (cur_effectp->getType() != effect_type) - { - LL_WARNS() << "Viewer effect update doesn't match old type!" << LL_ENDL; - } - effectp = cur_effectp; - break; - } - } - - if (effect_type) - { - if (!effectp) - { - effectp = LLHUDManager::getInstance()->createViewerEffect(effect_type, false, false); - } - - if (effectp) - { - effectp->unpackData(mesgsys, k); - } - } - else - { - LL_WARNS() << "Received viewer effect of type " << effect_type << " which isn't really an effect!" << LL_ENDL; - } - } - - //LL_INFOS() << "Got viewer effect: " << effect_id << LL_ENDL; -} - +/**
+ * @file llhudmanager.cpp
+ * @brief LLHUDManager class implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llhudmanager.h"
+
+#include "message.h"
+#include "object_flags.h"
+
+#include "llagent.h"
+#include "llhudeffect.h"
+#include "pipeline.h"
+#include "llui.h"
+#include "llviewercontrol.h"
+#include "llviewerobjectlist.h"
+
+// These are loaded from saved settings.
+LLColor4 LLHUDManager::sParentColor;
+LLColor4 LLHUDManager::sChildColor;
+
+LLHUDManager::LLHUDManager()
+{
+
+ LLHUDManager::sParentColor = LLUIColorTable::instance().getColor("FocusColor");
+ // rdw commented out since it's not used. Also removed from colors_base.xml
+ //LLHUDManager::sChildColor =LLUIColorTable::instance().getColor("FocusSecondaryColor");
+}
+
+LLHUDManager::~LLHUDManager()
+{
+}
+
+static LLTrace::BlockTimerStatHandle FTM_UPDATE_HUD_EFFECTS("Update Hud Effects");
+
+void LLHUDManager::updateEffects()
+{
+ LL_RECORD_BLOCK_TIME(FTM_UPDATE_HUD_EFFECTS);
+ S32 i;
+ for (i = 0; i < mHUDEffects.size(); i++)
+ {
+ LLHUDEffect *hep = mHUDEffects[i];
+ if (hep->isDead())
+ {
+ continue;
+ }
+ hep->update();
+ }
+}
+
+void LLHUDManager::sendEffects()
+{
+ S32 i;
+ for (i = 0; i < mHUDEffects.size(); i++)
+ {
+ LLHUDEffect *hep = mHUDEffects[i];
+ if (hep->isDead())
+ {
+ LL_WARNS() << "Trying to send dead effect!" << LL_ENDL;
+ continue;
+ }
+ if (hep->mType < LLHUDObject::LL_HUD_EFFECT_BEAM)
+ {
+ LL_WARNS() << "Trying to send effect of type " << hep->mType << " which isn't really an effect and shouldn't be in this list!" << LL_ENDL;
+ continue;
+ }
+ if (hep->getNeedsSendToSim() && hep->getOriginatedHere())
+ {
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_ViewerEffect);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->nextBlockFast(_PREHASH_Effect);
+ hep->packData(msg);
+ hep->setNeedsSendToSim(false);
+ gAgent.sendMessage();
+ }
+ }
+}
+
+//static
+void LLHUDManager::shutdownClass()
+{
+ getInstance()->mHUDEffects.clear();
+}
+
+void LLHUDManager::cleanupEffects()
+{
+ S32 i = 0;
+
+ while (i < mHUDEffects.size())
+ {
+ if (mHUDEffects[i]->isDead())
+ {
+ mHUDEffects.erase(mHUDEffects.begin() + i);
+ }
+ else
+ {
+ i++;
+ }
+ }
+}
+
+LLHUDEffect *LLHUDManager::createViewerEffect(const U8 type, bool send_to_sim, bool originated_here)
+{
+ // SJB: DO NOT USE addHUDObject!!! Not all LLHUDObjects are LLHUDEffects!
+ LLHUDEffect *hep = LLHUDObject::addHUDEffect(type);
+ if (!hep)
+ {
+ return NULL;
+ }
+
+ LLUUID tmp;
+ tmp.generate();
+ hep->setID(tmp);
+ hep->setNeedsSendToSim(send_to_sim);
+ hep->setOriginatedHere(originated_here);
+
+ mHUDEffects.push_back(hep);
+ return hep;
+}
+
+
+//static
+void LLHUDManager::processViewerEffect(LLMessageSystem *mesgsys, void **user_data)
+{
+ LLHUDEffect *effectp = NULL;
+ LLUUID effect_id;
+ U8 effect_type = 0;
+ S32 number_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_Effect);
+ S32 k;
+
+ for (k = 0; k < number_blocks; k++)
+ {
+ effectp = NULL;
+ LLHUDEffect::getIDType(mesgsys, k, effect_id, effect_type);
+ S32 i;
+ for (i = 0; i < LLHUDManager::getInstance()->mHUDEffects.size(); i++)
+ {
+ LLHUDEffect *cur_effectp = LLHUDManager::getInstance()->mHUDEffects[i];
+ if (!cur_effectp)
+ {
+ LL_WARNS() << "Null effect in effect manager, skipping" << LL_ENDL;
+ LLHUDManager::getInstance()->mHUDEffects.erase(LLHUDManager::getInstance()->mHUDEffects.begin() + i);
+ i--;
+ continue;
+ }
+ if (cur_effectp->isDead())
+ {
+ // LL_WARNS() << "Dead effect in effect manager, removing" << LL_ENDL;
+ LLHUDManager::getInstance()->mHUDEffects.erase(LLHUDManager::getInstance()->mHUDEffects.begin() + i);
+ i--;
+ continue;
+ }
+ if (cur_effectp->getID() == effect_id)
+ {
+ if (cur_effectp->getType() != effect_type)
+ {
+ LL_WARNS() << "Viewer effect update doesn't match old type!" << LL_ENDL;
+ }
+ effectp = cur_effectp;
+ break;
+ }
+ }
+
+ if (effect_type)
+ {
+ if (!effectp)
+ {
+ effectp = LLHUDManager::getInstance()->createViewerEffect(effect_type, false, false);
+ }
+
+ if (effectp)
+ {
+ effectp->unpackData(mesgsys, k);
+ }
+ }
+ else
+ {
+ LL_WARNS() << "Received viewer effect of type " << effect_type << " which isn't really an effect!" << LL_ENDL;
+ }
+ }
+
+ //LL_INFOS() << "Got viewer effect: " << effect_id << LL_ENDL;
+}
+
|