Cleaned up LGG's beams code
parent
4a6d1b38cc
commit
07e7ab87ba
|
|
@ -175,8 +175,8 @@ void lggBeamColorMapFloater::draw()
|
|||
//convertHueToX(i),237,output);
|
||||
|
||||
}
|
||||
S32 X1 = convertHueToX(myData.startHue) + CORRECTION_X;
|
||||
S32 X2 = convertHueToX(myData.endHue) + CORRECTION_X;
|
||||
S32 X1 = convertHueToX(myData.mStartHue) + CORRECTION_X;
|
||||
S32 X2 = convertHueToX(myData.mEndHue) + CORRECTION_X;
|
||||
LLFontGL* font = LLFontGL::getFontSansSerifSmall();
|
||||
|
||||
gGL.color4fv(LLColor4::white.mV);
|
||||
|
|
@ -269,15 +269,15 @@ BOOL lggBeamColorMapFloater::handleMouseDown(S32 x,S32 y,MASK mask)
|
|||
{
|
||||
if (x < (6 + CORRECTION_X))
|
||||
{
|
||||
myData.startHue=0.0f;
|
||||
myData.mStartHue=0.0f;
|
||||
}
|
||||
else if (x > (402 + CORRECTION_X))
|
||||
{
|
||||
myData.endHue=720.0f;
|
||||
myData.mEndHue=720.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
myData.startHue = convertXToHue(x + CORRECTION_X);
|
||||
myData.mStartHue = convertXToHue(x + CORRECTION_X);
|
||||
}
|
||||
|
||||
fixOrder();
|
||||
|
|
@ -294,15 +294,15 @@ BOOL lggBeamColorMapFloater::handleRightMouseDown(S32 x,S32 y,MASK mask)
|
|||
{
|
||||
if (x < (6 + CORRECTION_X))
|
||||
{
|
||||
myData.startHue=0.0f;
|
||||
myData.mStartHue=0.0f;
|
||||
}
|
||||
else if (x > (402 + CORRECTION_X))
|
||||
{
|
||||
myData.endHue=720.0f;
|
||||
myData.mEndHue=720.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
myData.endHue = convertXToHue(x + CORRECTION_X);
|
||||
myData.mEndHue = convertXToHue(x + CORRECTION_X);
|
||||
}
|
||||
|
||||
fixOrder();
|
||||
|
|
@ -314,14 +314,14 @@ BOOL lggBeamColorMapFloater::handleRightMouseDown(S32 x,S32 y,MASK mask)
|
|||
|
||||
void lggBeamColorMapFloater::fixOrder()
|
||||
{
|
||||
myData.rotateSpeed = mColorSlider->getValueF32();
|
||||
myData.rotateSpeed /= 100.0f;
|
||||
myData.mRotateSpeed = mColorSlider->getValueF32();
|
||||
myData.mRotateSpeed /= 100.0f;
|
||||
|
||||
if(myData.endHue < myData.startHue)
|
||||
if(myData.mEndHue < myData.mStartHue)
|
||||
{
|
||||
F32 temp = myData.startHue;
|
||||
myData.startHue = myData.endHue;
|
||||
myData.endHue = temp;
|
||||
F32 temp = myData.mStartHue;
|
||||
myData.mStartHue = myData.mEndHue;
|
||||
myData.mEndHue = temp;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -378,21 +378,21 @@ void lggBeamColorMapFloater::onClickSave()
|
|||
|
||||
void lggBeamColorMapFloater::onClickCancel()
|
||||
{
|
||||
closeFloater();
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void lggBeamColorMapFloater::onClickLoad()
|
||||
{
|
||||
LLFilePicker& picker = LLFilePicker::instance();
|
||||
if(!picker.getOpenFile(LLFilePicker::FFLOAD_XML))
|
||||
if (!picker.getOpenFile(LLFilePicker::FFLOAD_XML))
|
||||
{
|
||||
return;
|
||||
return;
|
||||
}
|
||||
LLSD minedata;
|
||||
llifstream importer(picker.getFirstFile());
|
||||
LLSDSerialize::fromXMLDocument(minedata, importer);
|
||||
|
||||
myData = lggBeamsColors::fromLLSD(minedata);
|
||||
childSetValue("BeamColor_Speed",/*self->*/myData.rotateSpeed*100);
|
||||
childSetValue("BeamColor_Speed", myData.mRotateSpeed * 100);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,11 +22,12 @@
|
|||
#include "llviewercontrol.h"
|
||||
#include "llhudeffecttrail.h"
|
||||
#include "llhudmanager.h"
|
||||
//using namespace std;
|
||||
|
||||
#include "message.h"
|
||||
#include <curl/curl.h>
|
||||
|
||||
static const std::string BEAMS_OFF = "===OFF===";
|
||||
|
||||
lggBeamMaps gLggBeamMaps;
|
||||
F32 hueToRgb ( F32 val1In, F32 val2In, F32 valHUeIn )
|
||||
{
|
||||
|
|
@ -38,6 +39,17 @@ F32 hueToRgb ( F32 val1In, F32 val2In, F32 valHUeIn )
|
|||
return ( val1In );
|
||||
}
|
||||
|
||||
std::string unescape_name(const std::string& name)
|
||||
{
|
||||
// bugfix for SL-46920: preventing filenames that break stuff.
|
||||
char * curl_str = curl_unescape(name.c_str(), name.size());
|
||||
std::string unescaped_name(curl_str);
|
||||
curl_free(curl_str);
|
||||
curl_str = NULL;
|
||||
|
||||
return unescaped_name;
|
||||
}
|
||||
|
||||
void hslToRgb ( F32 hValIn, F32 sValIn, F32 lValIn, F32& rValOut, F32& gValOut, F32& bValOut )
|
||||
{
|
||||
if ( sValIn < 0.00001f )
|
||||
|
|
@ -52,9 +64,13 @@ void hslToRgb ( F32 hValIn, F32 sValIn, F32 lValIn, F32& rValOut, F32& gValOut,
|
|||
F32 interVal2;
|
||||
|
||||
if ( lValIn < 0.5f )
|
||||
{
|
||||
interVal2 = lValIn * ( 1.0f + sValIn );
|
||||
}
|
||||
else
|
||||
{
|
||||
interVal2 = ( lValIn + sValIn ) - ( sValIn * lValIn );
|
||||
}
|
||||
|
||||
interVal1 = 2.0f * lValIn - interVal2;
|
||||
|
||||
|
|
@ -64,30 +80,28 @@ void hslToRgb ( F32 hValIn, F32 sValIn, F32 lValIn, F32& rValOut, F32& gValOut,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
LLSD lggBeamMaps::getPic(std::string filename)
|
||||
LLSD lggBeamMaps::getPic(const std::string& filename)
|
||||
{
|
||||
LLSD data;
|
||||
llifstream importer(filename);
|
||||
LLSDSerialize::fromXMLDocument(data, importer);
|
||||
|
||||
return data;
|
||||
|
||||
}
|
||||
LLColor4U lggBeamMaps::getCurrentColor(LLColor4U agentColor)
|
||||
|
||||
LLColor4U lggBeamMaps::getCurrentColor(const LLColor4U& agentColor)
|
||||
{
|
||||
static LLCachedControl<std::string> settingName(gSavedSettings, "FSBeamColorFile");
|
||||
std::string setName(settingName);
|
||||
|
||||
if (setName == "===OFF===")
|
||||
if (setName == BEAMS_OFF)
|
||||
{
|
||||
return agentColor;
|
||||
}
|
||||
|
||||
if (setName != lastColorFileName)
|
||||
if (setName != mLastColorFileName)
|
||||
{
|
||||
lastColorFileName = settingName;
|
||||
mLastColorFileName = settingName;
|
||||
|
||||
std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "beamsColors", ""));
|
||||
std::string path_name2(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "beamsColors", ""));
|
||||
|
|
@ -101,24 +115,22 @@ LLColor4U lggBeamMaps::getCurrentColor(LLColor4U agentColor)
|
|||
}
|
||||
}
|
||||
|
||||
lastColorsData = lggBeamsColors::fromLLSD(getPic(filename));
|
||||
mLastColorsData = lggBeamsColors::fromLLSD(getPic(filename));
|
||||
}
|
||||
agentColor = beamColorFromData(lastColorsData);
|
||||
|
||||
return agentColor;
|
||||
return beamColorFromData(mLastColorsData);
|
||||
}
|
||||
|
||||
static LLFrameTimer timer;
|
||||
LLColor4U lggBeamMaps::beamColorFromData(lggBeamsColors data)
|
||||
LLColor4U lggBeamMaps::beamColorFromData(const lggBeamsColors& data)
|
||||
{
|
||||
|
||||
F32 r, g, b;
|
||||
LLColor4 output;
|
||||
LLColor4U toReturn;
|
||||
F32 timeinc = timer.getElapsedTimeF32()*0.3f*((data.rotateSpeed+.01f)) * (360/(data.endHue-data.startHue));
|
||||
F32 timeinc = timer.getElapsedTimeF32() * 0.3f * ((data.mRotateSpeed + .01f)) * (360 / (data.mEndHue - data.mStartHue));
|
||||
|
||||
S32 diference = llround(data.endHue - data.startHue);
|
||||
if(diference == 360 || diference == 720)
|
||||
S32 diference = llround(data.mEndHue - data.mStartHue);
|
||||
if (diference == 360 || diference == 720)
|
||||
{
|
||||
//full rainbow
|
||||
//liner one
|
||||
|
|
@ -126,37 +138,36 @@ LLColor4U lggBeamMaps::beamColorFromData(lggBeamsColors data)
|
|||
}
|
||||
else
|
||||
{
|
||||
F32 variance = ((data.endHue/360.0f)-(data.startHue/360.0f))/2.0f;
|
||||
hslToRgb((data.startHue/360.0f) + variance + (sinf(timeinc)*(variance)), 1.0f, 0.5f, r, g, b);
|
||||
F32 variance = ((data.mEndHue / 360.0f) - (data.mStartHue / 360.0f)) / 2.0f;
|
||||
hslToRgb((data.mStartHue / 360.0f) + variance + (sinf(timeinc) * variance), 1.0f, 0.5f, r, g, b);
|
||||
}
|
||||
output.set(r, g, b);
|
||||
|
||||
toReturn.setVecScaleClamp(output);
|
||||
return toReturn;
|
||||
|
||||
}
|
||||
void lggBeamMaps::fireCurrentBeams(LLPointer<LLHUDEffectSpiral> mBeam, LLColor4U rgb)
|
||||
|
||||
void lggBeamMaps::fireCurrentBeams(LLPointer<LLHUDEffectSpiral> mBeam, const LLColor4U& rgb)
|
||||
{
|
||||
if (scale == 0.0f)
|
||||
if (mScale == 0.0f)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static LLCachedControl<std::string> colorf(gSavedSettings, "FSBeamColorFile");
|
||||
bool colorsDisabled = std::string(colorf) == "===OFF===";
|
||||
bool colorsDisabled = (colorf() == BEAMS_OFF);
|
||||
|
||||
for(int i = 0; i < (int)dots.size(); i++)
|
||||
for (S32 i = 0; i < mDots.size(); ++i)
|
||||
{
|
||||
LLColor4U myColor = rgb;
|
||||
if (colorsDisabled) myColor = dots[i].c;
|
||||
if (colorsDisabled) myColor = mDots[i].c;
|
||||
|
||||
F32 distanceAdjust = dist_vec(mBeam->getPositionGlobal(),gAgent.getPositionGlobal()) ;
|
||||
F32 pulse = (F32)(.75f+sinf(gFrameTimeSeconds*1.0f)*0.25f);
|
||||
LLVector3d offset = dots[i].p;
|
||||
offset.mdV[VY] *= -1;
|
||||
offset *= pulse * scale * distanceAdjust * 0.1;
|
||||
F32 distanceAdjust = dist_vec(mBeam->getPositionGlobal(), gAgent.getPositionGlobal());
|
||||
F32 pulse = (F32)(.75f + sinf(gFrameTimeSeconds * 1.0f) * 0.25f);
|
||||
LLVector3d offset = mDots[i].p;
|
||||
offset.mdV[VY] *= -1.f;
|
||||
offset *= pulse * mScale * distanceAdjust * 0.1f;
|
||||
|
||||
//llinfos << "dist is " << distanceAdjust << "scale is " << scale << llendl;
|
||||
LLVector3 beamLine = LLVector3( mBeam->getPositionGlobal() - gAgent.getPositionGlobal());
|
||||
LLVector3 beamLineFlat = beamLine;
|
||||
beamLineFlat.mV[VZ]= 0.0f;
|
||||
|
|
@ -165,243 +176,183 @@ void lggBeamMaps::fireCurrentBeams(LLPointer<LLHUDEffectSpiral> mBeam, LLColor4U
|
|||
beamLine.normalize();
|
||||
beamLineFlat.normalize();
|
||||
LLQuaternion change;
|
||||
change.shortestArc(newDirFlat,beamLineFlat);
|
||||
change.shortestArc(newDirFlat, beamLineFlat);
|
||||
offset.rotVec(change);
|
||||
newDirFlat.rotVec(change);
|
||||
change.shortestArc(newDirFlat,beamLine);
|
||||
change.shortestArc(newDirFlat, beamLine);
|
||||
offset.rotVec(change);
|
||||
|
||||
LLPointer<LLHUDEffectSpiral> myBeam = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM);
|
||||
myBeam->setPositionGlobal(mBeam->getPositionGlobal() + offset + (LLVector3d(beamLine) * sinf(gFrameTimeSeconds*2.0f) * 0.2f));
|
||||
LLPointer<LLHUDEffectSpiral> myBeam = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM);
|
||||
myBeam->setPositionGlobal(mBeam->getPositionGlobal() + offset + (LLVector3d(beamLine) * sinf(gFrameTimeSeconds * 2.0f) * 0.2f));
|
||||
|
||||
myBeam->setColor(myColor);
|
||||
myBeam->setTargetObject(mBeam->getTargetObject());
|
||||
myBeam->setSourceObject(mBeam->getSourceObject());
|
||||
myBeam->setNeedsSendToSim(mBeam->getNeedsSendToSim());
|
||||
myBeam->setDuration(duration* 1.2f);
|
||||
myBeam->setDuration(mDuration * 1.2f);
|
||||
}
|
||||
}
|
||||
|
||||
void lggBeamMaps::forceUpdate()
|
||||
{
|
||||
dots.clear();
|
||||
scale = 0.0f;
|
||||
lastFileName="";
|
||||
mDots.clear();
|
||||
mScale = 0.0f;
|
||||
mLastFileName = "";
|
||||
}
|
||||
|
||||
F32 lggBeamMaps::setUpAndGetDuration()
|
||||
{
|
||||
static LLCachedControl<std::string> settingNameCached(gSavedSettings, "FSBeamShape");
|
||||
std::string settingName(settingNameCached);
|
||||
if(settingName != lastFileName)
|
||||
{
|
||||
lastFileName = settingName;
|
||||
if( settingName != "===OFF===" && settingName != "")
|
||||
{
|
||||
|
||||
if (settingName != mLastFileName)
|
||||
{
|
||||
mLastFileName = settingName;
|
||||
if (settingName != BEAMS_OFF && settingName != "")
|
||||
{
|
||||
std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "beams", ""));
|
||||
std::string path_name2(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "beams", ""));
|
||||
std::string filename = path_name + settingName + ".xml";
|
||||
if (!gDirUtilp->fileExists(filename))
|
||||
{
|
||||
filename =path_name2 + settingName +".xml";
|
||||
filename = path_name2 + settingName + ".xml";
|
||||
}
|
||||
|
||||
LLSD mydata = getPic(filename);
|
||||
scale = (F32)mydata["scale"].asReal()/10.0f;
|
||||
LLSD myPicture = mydata["data"];
|
||||
dots.clear();
|
||||
for (int i = 0; i < myPicture.size(); i++)
|
||||
mScale = (F32)mydata["scale"].asReal() / 10.0f;
|
||||
LLSD myPicture = mydata["data"];
|
||||
mDots.clear();
|
||||
for (S32 i = 0; i < myPicture.size(); ++i)
|
||||
{
|
||||
LLSD beamData = myPicture[i];
|
||||
lggBeamData dot;
|
||||
|
||||
dot.p = LLVector3d(beamData["offset"]);
|
||||
// <FS:PP> Attempt to speed up things a little
|
||||
// dot.p *= (gSavedSettings.getF32("FSBeamShapeScale")*2.0f);
|
||||
static LLCachedControl<F32> FSBeamShapeScale(gSavedSettings, "FSBeamShapeScale");
|
||||
dot.p *= (FSBeamShapeScale*2.0f);
|
||||
// </FS:PP>
|
||||
dot.p *= (FSBeamShapeScale * 2.0f);
|
||||
LLColor4 color = LLColor4(beamData["color"]);
|
||||
dot.c = LLColor4U(color);
|
||||
dots.push_back(dot);
|
||||
mDots.push_back(dot);
|
||||
}
|
||||
|
||||
// <FS:PP> Attempt to speed up things a little
|
||||
// F32 maxBPerQS = gSavedSettings.getF32("FSMaxBeamsPerSecond") / 4.0f;
|
||||
static LLCachedControl<F32> FSMaxBeamsPerSecond(gSavedSettings, "FSMaxBeamsPerSecond");
|
||||
F32 maxBPerQS = FSMaxBeamsPerSecond / 4.0f;
|
||||
// </FS:PP>
|
||||
duration = llceil((F32)(myPicture.size()) / maxBPerQS) * 0.25f;
|
||||
llinfos << "reading it all now size is " << myPicture.size() << " and duration is " << duration << llendl;
|
||||
|
||||
mDuration = llceil((F32)(myPicture.size()) / maxBPerQS) * 0.25f;
|
||||
LL_INFOS("LGG_Beams") << "reading it all now size is " << myPicture.size() << " and duration is " << mDuration << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
dots.clear();
|
||||
scale = 0.0f;//used as a flag too
|
||||
duration = 0.25f;
|
||||
mDots.clear();
|
||||
mScale = 0.0f; //used as a flag too
|
||||
mDuration = 0.25f;
|
||||
}
|
||||
|
||||
}
|
||||
//llinfos << "sent final dur of " << duration << llendl;
|
||||
|
||||
return duration;
|
||||
}
|
||||
|
||||
return mDuration;
|
||||
}
|
||||
|
||||
std::vector<std::string> lggBeamMaps::getFileNames()
|
||||
{
|
||||
|
||||
std::vector<std::string> names;
|
||||
std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "beams", ""));
|
||||
bool found = true;
|
||||
while(found)
|
||||
bool found = true;
|
||||
|
||||
while (found)
|
||||
{
|
||||
std::string name;
|
||||
found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name);
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
|
||||
name=name.erase(name.length()-4);
|
||||
|
||||
// bugfix for SL-46920: preventing filenames that break stuff.
|
||||
char * curl_str = curl_unescape(name.c_str(), name.size());
|
||||
std::string unescaped_name(curl_str);
|
||||
curl_free(curl_str);
|
||||
curl_str = NULL;
|
||||
|
||||
names.push_back(name);
|
||||
|
||||
//LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
|
||||
//loadPreset(unescaped_name,FALSE);
|
||||
name = name.erase(name.length() - 4);
|
||||
names.push_back(unescape_name(name));
|
||||
}
|
||||
}
|
||||
|
||||
std::string path_name2(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "beams", ""));
|
||||
found = true;
|
||||
while(found)
|
||||
found = true;
|
||||
while (found)
|
||||
{
|
||||
std::string name;
|
||||
found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name);
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
|
||||
name=name.erase(name.length()-4);
|
||||
|
||||
// bugfix for SL-46920: preventing filenames that break stuff.
|
||||
char * curl_str = curl_unescape(name.c_str(), name.size());
|
||||
std::string unescaped_name(curl_str);
|
||||
curl_free(curl_str);
|
||||
curl_str = NULL;
|
||||
|
||||
names.push_back(name);
|
||||
|
||||
//LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
|
||||
//loadPreset(unescaped_name,FALSE);
|
||||
name = name.erase(name.length() - 4);
|
||||
names.push_back(unescape_name(name));
|
||||
}
|
||||
}
|
||||
return names;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
std::vector<std::string> lggBeamMaps::getColorsFileNames()
|
||||
{
|
||||
|
||||
std::vector<std::string> names;
|
||||
std::vector<std::string> names;
|
||||
std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "beamsColors", ""));
|
||||
bool found = true;
|
||||
while(found)
|
||||
bool found = true;
|
||||
|
||||
while (found)
|
||||
{
|
||||
std::string name;
|
||||
found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name);
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
|
||||
name=name.erase(name.length()-4);
|
||||
|
||||
// bugfix for SL-46920: preventing filenames that break stuff.
|
||||
char * curl_str = curl_unescape(name.c_str(), name.size());
|
||||
std::string unescaped_name(curl_str);
|
||||
curl_free(curl_str);
|
||||
curl_str = NULL;
|
||||
|
||||
names.push_back(name);
|
||||
|
||||
//LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
|
||||
//loadPreset(unescaped_name,FALSE);
|
||||
name = name.erase(name.length() - 4);
|
||||
names.push_back(unescape_name(name));
|
||||
}
|
||||
}
|
||||
|
||||
std::string path_name2(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "beamsColors", ""));
|
||||
found = true;
|
||||
while(found)
|
||||
found = true;
|
||||
|
||||
while (found)
|
||||
{
|
||||
std::string name;
|
||||
found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name);
|
||||
if(found)
|
||||
if (found)
|
||||
{
|
||||
|
||||
name=name.erase(name.length()-4);
|
||||
|
||||
// bugfix for SL-46920: preventing filenames that break stuff.
|
||||
char * curl_str = curl_unescape(name.c_str(), name.size());
|
||||
std::string unescaped_name(curl_str);
|
||||
curl_free(curl_str);
|
||||
curl_str = NULL;
|
||||
|
||||
names.push_back(name);
|
||||
|
||||
//LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
|
||||
//loadPreset(unescaped_name,FALSE);
|
||||
name = name.erase(name.length() - 4);
|
||||
names.push_back(unescape_name(name));
|
||||
}
|
||||
}
|
||||
return names;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void lggBeamMaps::stopBeamChat()
|
||||
{
|
||||
// <FS:PP> Attempt to speed up things a little
|
||||
// if(gSavedSettings.getBOOL("FSParticleChat"))
|
||||
static LLCachedControl<bool> FSParticleChat(gSavedSettings, "FSParticleChat");
|
||||
if(FSParticleChat)
|
||||
// </FS:PP>
|
||||
if (FSParticleChat)
|
||||
{
|
||||
if(sPartsNow != FALSE)
|
||||
if (mPartsNow)
|
||||
{
|
||||
sPartsNow = FALSE;
|
||||
mPartsNow = false;
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_ChatFromViewer);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgentID);
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
|
||||
msg->nextBlockFast(_PREHASH_ChatData);
|
||||
msg->addStringFast(_PREHASH_Message, "stop");
|
||||
msg->addU8Fast(_PREHASH_Type, 0);
|
||||
msg->addS32("Channel", 9000);
|
||||
|
||||
gAgent.sendReliableMessage();
|
||||
sBeamLastAt = LLVector3d::zero;
|
||||
mBeamLastAt = LLVector3d::zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
void lggBeamMaps::updateBeamChat(LLVector3d currentPos)
|
||||
|
||||
void lggBeamMaps::updateBeamChat(const LLVector3d& currentPos)
|
||||
{
|
||||
// <FS:PP> Attempt to speed up things a little
|
||||
// if(gSavedSettings.getBOOL("FSParticleChat"))
|
||||
static LLCachedControl<bool> FSParticleChat(gSavedSettings, "FSParticleChat");
|
||||
if(FSParticleChat)
|
||||
// </FS:PP>
|
||||
if (FSParticleChat)
|
||||
{
|
||||
if(sPartsNow != TRUE)
|
||||
if (!mPartsNow)
|
||||
{
|
||||
sPartsNow = TRUE;
|
||||
mPartsNow = true;
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_ChatFromViewer);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgentID);
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
|
||||
msg->nextBlockFast(_PREHASH_ChatData);
|
||||
msg->addStringFast(_PREHASH_Message, "start");
|
||||
msg->addU8Fast(_PREHASH_Type, 0);
|
||||
|
|
@ -409,26 +360,23 @@ void lggBeamMaps::updateBeamChat(LLVector3d currentPos)
|
|||
|
||||
gAgent.sendReliableMessage();
|
||||
}
|
||||
//LLVector3d a = sBeamLastAt-gAgent.mPointAt->getPointAtPosGlobal();
|
||||
//if(a.length > 2)
|
||||
if( (sBeamLastAt-currentPos).length() > .2)
|
||||
//if(sBeamLastAt!=gAgent.mPointAt->getPointAtPosGlobal())
|
||||
|
||||
if ((mBeamLastAt - currentPos).length() > .2f)
|
||||
{
|
||||
sBeamLastAt = currentPos;
|
||||
mBeamLastAt = currentPos;
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_ChatFromViewer);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgentID);
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
|
||||
msg->nextBlockFast(_PREHASH_ChatData);
|
||||
msg->addStringFast(_PREHASH_Message, llformat("<%.6f, %.6f, %.6f>",(F32)(sBeamLastAt.mdV[VX]),(F32)(sBeamLastAt.mdV[VY]),(F32)(sBeamLastAt.mdV[VZ])));
|
||||
msg->addStringFast(_PREHASH_Message, llformat("<%.6f, %.6f, %.6f>",(F32)(mBeamLastAt.mdV[VX]), (F32)(mBeamLastAt.mdV[VY]), (F32)(mBeamLastAt.mdV[VZ])));
|
||||
msg->addU8Fast(_PREHASH_Type, 0);
|
||||
msg->addS32("Channel", 9000); // *TODO: make configurable
|
||||
|
||||
gAgent.sendReliableMessage();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,40 +18,49 @@
|
|||
#include "llviewerprecompiledheaders.h"
|
||||
#include "lggbeamscolors.h"
|
||||
#include "llframetimer.h"
|
||||
|
||||
class lggBeamData
|
||||
{
|
||||
public:
|
||||
LLVector3d p;
|
||||
LLColor4U c;
|
||||
|
||||
};
|
||||
class lggBeamMaps
|
||||
{
|
||||
public:
|
||||
lggBeamMaps():lastFileName(""),scale(0.0f),duration(0.25f),sPartsNow(FALSE),sBeamLastAt(LLVector3d::zero){}
|
||||
~lggBeamMaps() {}
|
||||
public:
|
||||
F32 setUpAndGetDuration();
|
||||
void fireCurrentBeams(LLPointer<LLHUDEffectSpiral>, LLColor4U rgb);
|
||||
void forceUpdate();
|
||||
static LLColor4U beamColorFromData(lggBeamsColors data);
|
||||
LLColor4U getCurrentColor(LLColor4U agentColor);
|
||||
std::vector<std::string> getFileNames();
|
||||
std::vector<std::string> getColorsFileNames();
|
||||
void stopBeamChat();
|
||||
void updateBeamChat(LLVector3d currentPos);
|
||||
private:
|
||||
LLSD getPic(std::string filename);
|
||||
std::string lastFileName;
|
||||
std::string lastColorFileName;
|
||||
BOOL sPartsNow;
|
||||
LLVector3d sBeamLastAt;
|
||||
lggBeamsColors lastColorsData;
|
||||
F32 duration;
|
||||
F32 scale;
|
||||
std::vector<lggBeamData> dots;
|
||||
public:
|
||||
LLVector3d p;
|
||||
LLColor4U c;
|
||||
};
|
||||
|
||||
class lggBeamMaps
|
||||
{
|
||||
public:
|
||||
lggBeamMaps() :
|
||||
mLastFileName(""),
|
||||
mScale(0.0f),
|
||||
mDuration(0.25f),
|
||||
mPartsNow(false),
|
||||
mBeamLastAt(LLVector3d::zero)
|
||||
{}
|
||||
~lggBeamMaps() {}
|
||||
|
||||
F32 setUpAndGetDuration();
|
||||
void fireCurrentBeams(LLPointer<LLHUDEffectSpiral>, const LLColor4U& rgb);
|
||||
void forceUpdate();
|
||||
void stopBeamChat();
|
||||
void updateBeamChat(const LLVector3d& currentPos);
|
||||
static LLColor4U beamColorFromData(const lggBeamsColors& data);
|
||||
LLColor4U getCurrentColor(const LLColor4U& agentColor);
|
||||
std::vector<std::string> getFileNames();
|
||||
std::vector<std::string> getColorsFileNames();
|
||||
|
||||
private:
|
||||
LLSD getPic(const std::string& filename);
|
||||
|
||||
std::string mLastFileName;
|
||||
std::string mLastColorFileName;
|
||||
lggBeamsColors mLastColorsData;
|
||||
F32 mDuration;
|
||||
F32 mScale;
|
||||
bool mPartsNow;
|
||||
LLVector3d mBeamLastAt;
|
||||
|
||||
std::vector<lggBeamData> mDots;
|
||||
};
|
||||
|
||||
extern lggBeamMaps gLggBeamMaps;
|
||||
|
||||
|
|
|
|||
|
|
@ -18,44 +18,56 @@
|
|||
#include "llviewerprecompiledheaders.h"
|
||||
#include "lggbeamscolors.h"
|
||||
|
||||
lggBeamsColors lggBeamsColors::fromLLSD(LLSD inputData)
|
||||
lggBeamsColors lggBeamsColors::fromLLSD(const LLSD& inputData)
|
||||
{
|
||||
|
||||
lggBeamsColors toReturn;
|
||||
|
||||
if(inputData.has("startHue")) toReturn.startHue = (F32)inputData["startHue"].asReal();
|
||||
if(inputData.has("endHue")) toReturn.endHue = (F32)inputData["endHue"].asReal();
|
||||
if(inputData.has("rotateSpeed")) toReturn.rotateSpeed = (F32)inputData["rotateSpeed"].asReal();
|
||||
if (inputData.has("startHue"))
|
||||
{
|
||||
toReturn.mStartHue = (F32)inputData["startHue"].asReal();
|
||||
}
|
||||
|
||||
if (inputData.has("endHue"))
|
||||
{
|
||||
toReturn.mEndHue = (F32)inputData["endHue"].asReal();
|
||||
}
|
||||
|
||||
if (inputData.has("rotateSpeed"))
|
||||
{
|
||||
toReturn.mRotateSpeed = (F32)inputData["rotateSpeed"].asReal();
|
||||
}
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
LLSD lggBeamsColors::toLLSD()
|
||||
{
|
||||
|
||||
LLSD out;
|
||||
out["startHue"]=startHue;
|
||||
out["endHue"]=endHue;
|
||||
out["rotateSpeed"]=rotateSpeed;
|
||||
out["startHue"] = mStartHue;
|
||||
out["endHue"] = mEndHue;
|
||||
out["rotateSpeed"] = mRotateSpeed;
|
||||
return out;
|
||||
}
|
||||
|
||||
std::string lggBeamsColors::toString()
|
||||
{
|
||||
return llformat("Start Hue %d\nEnd Hue is %d\nRotate Speed is %d", mStartHue, mEndHue, mRotateSpeed);
|
||||
}
|
||||
|
||||
return llformat("Start Hue %d\nEnd Hue is %d\nRotate Speed is %d",
|
||||
startHue,endHue,rotateSpeed
|
||||
|
||||
);
|
||||
}
|
||||
lggBeamsColors::lggBeamsColors(F32 istartHue, F32 iendHue, F32 irotateSpeed):
|
||||
startHue(istartHue),endHue(iendHue),rotateSpeed(irotateSpeed)
|
||||
lggBeamsColors::lggBeamsColors(F32 startHue, F32 endHue, F32 rotateSpeed) :
|
||||
mStartHue(startHue),
|
||||
mEndHue(endHue),
|
||||
mRotateSpeed(rotateSpeed)
|
||||
{
|
||||
}
|
||||
|
||||
lggBeamsColors::lggBeamsColors():
|
||||
startHue(0.0f),endHue(360.0f),rotateSpeed(1.0f)
|
||||
mStartHue(0.0f),
|
||||
mEndHue(360.0f),
|
||||
mRotateSpeed(1.0f)
|
||||
{
|
||||
}
|
||||
|
||||
lggBeamsColors::~lggBeamsColors()
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,20 +22,17 @@
|
|||
class lggBeamsColors
|
||||
{
|
||||
public:
|
||||
lggBeamsColors(
|
||||
F32 istartHue,
|
||||
F32 iendHue,
|
||||
F32 irotateSpeed);
|
||||
lggBeamsColors(F32 startHue, F32 endHue, F32 rotateSpeed);
|
||||
lggBeamsColors();
|
||||
|
||||
~lggBeamsColors();
|
||||
|
||||
F32 startHue;
|
||||
F32 endHue;
|
||||
F32 rotateSpeed;
|
||||
public:
|
||||
F32 mStartHue;
|
||||
F32 mEndHue;
|
||||
F32 mRotateSpeed;
|
||||
|
||||
LLSD toLLSD();
|
||||
static lggBeamsColors fromLLSD(LLSD inputData);
|
||||
static lggBeamsColors fromLLSD(const LLSD& inputData);
|
||||
|
||||
std::string toString();
|
||||
// List sorted by name.
|
||||
|
|
|
|||
Loading…
Reference in New Issue