Files
wagic/projects/mtg/src/TextScroller.cpp

103 lines
2.5 KiB
C++

#include "PrecompiledHeader.h"
#include "TextScroller.h"
#include "WResourceManager.h"
#include "utils.h"
#include "WFont.h"
enum {
HORIZONTAL_SCROLLER = 0,
VERTICAL_SCROLLER = 1
};
TextScroller::TextScroller(int fontId, float x, float y, float width, float speed, int scrollerType, size_t numItems ): JGuiObject(0), fontId(fontId){
mWidth = width;
mSpeed = speed;
minimumItems = numItems;
mX = x;
mY = y;
start = -width;
timer = 0;
currentId = 0;
mRandom = 0;
scrollDirection = scrollerType;
}
void TextScroller::setRandom(int mode){
mRandom = mode;
if (mRandom && strings.size()){
currentId = (rand() % strings.size());
mText = strings[currentId];
}
}
void TextScroller::Add(string text){
if (!strings.size()) mText = text;
strings.push_back(text);
}
void TextScroller::Reset(){
strings.clear();
}
void TextScroller::Update(float dt){
if(!strings.size())
return;
if ( scrollDirection == HORIZONTAL_SCROLLER )
{
start+=mSpeed*dt;
WFont * mFont = resources.GetWFont(fontId);
if (start > mFont->GetStringWidth(mText.c_str())){
start = -mWidth;
if (mRandom){
currentId = (rand() % strings.size());
}else{
currentId++;
if (currentId > strings.size()-1)currentId = 0;
}
mText = strings[currentId];
}
}
else
{
// we want to display 2 at a time
ostringstream scrollerText;
if ( timer == 0 )
{
size_t nbItemsToDisplay = ( minimumItems < strings.size() ? minimumItems : strings.size());
for ( size_t idx = 0; idx < nbItemsToDisplay; ++idx)
{
scrollerText << strings[currentId + idx];
}
currentId++;
if ( currentId >= strings.size())
currentId = 0;
mText = wordWrap( scrollerText.str(), (int) mWidth );
}
timer = ++timer % ((int) mSpeed);
}
}
void TextScroller::Render(){
WFont * mFont = resources.GetWFont(fontId);
if ( scrollDirection == HORIZONTAL_SCROLLER )
mFont->DrawString(mText.c_str(),mX,mY,JGETEXT_LEFT,start,mWidth);
else
mFont->DrawString(mText.c_str(), mX, mY );
}
ostream& TextScroller::toString(ostream& out) const
{
return out << "TextScroller ::: mText : " << mText
<< " ; tempText : " << tempText
<< " ; mWidth : " << mWidth
<< " ; mSpeed : " << mSpeed
<< " ; mX,mY : " << mX << "," << mY
<< " ; start : " << start
<< " ; timer : " << timer
<< " ; strings : ?" // << strings
<< " ; currentId : " << currentId
<< " ; mRandom : " << mRandom;
}