in debug there is a strange line drawn sometimes on screen, like the buttons on main screen, this is not present in release builds, I'm guessing its some kind of debug related thing with JGE and quads.
190 lines
5.9 KiB
C++
190 lines
5.9 KiB
C++
#include "PrecompiledHeader.h"
|
|
|
|
#include "GameApp.h"
|
|
#include "GuiPhaseBar.h"
|
|
#include "GameObserver.h"
|
|
#include "Translate.h"
|
|
#include "CardSelector.h"
|
|
|
|
/*
|
|
static int colors[] =
|
|
{
|
|
ARGB(255, 255, 255, 255),
|
|
ARGB(255, 255, 000, 000),
|
|
ARGB(255, 000, 255, 000),
|
|
ARGB(255, 000, 000, 255),
|
|
ARGB(255, 255, 255, 000),
|
|
ARGB(255, 255, 000, 255),
|
|
ARGB(255, 000, 255, 255),
|
|
ARGB(255, 000, 000, 000),
|
|
ARGB(255, 255, 255, 255),
|
|
ARGB(255, 255, 255, 255),
|
|
ARGB(255, 255, 255, 255),
|
|
ARGB(255, 255, 255, 255)
|
|
};
|
|
*/
|
|
|
|
const float GuiPhaseBar::zoom_big = (float)(1.5 * 1.25);
|
|
const float GuiPhaseBar::zoom_small = 1.5;
|
|
const float GuiPhaseBar::step = M_PI/6.0f;
|
|
|
|
namespace
|
|
{
|
|
//width and height of the phase symbol textures
|
|
const float kWidth = 28;
|
|
const float kHeight = kWidth;
|
|
const unsigned kPhases = NB_MTG_PHASES - 2; //there are two phases we do not show
|
|
}
|
|
|
|
void GuiPhaseBar::DrawGlyph(JQuad *inQuad, int phaseId, float x, float y, float scale, float z)
|
|
{
|
|
inQuad->SetTextureRect(phaseId * (kWidth + 1), z, kWidth, kHeight);
|
|
JRenderer::GetInstance()->RenderQuad(inQuad, x, y - scale * kWidth/2, 0.0f, scale, scale);
|
|
}
|
|
|
|
GuiPhaseBar::GuiPhaseBar(DuelLayers* duelLayers) :
|
|
GuiLayer(duelLayers->getObserver()), PlayGuiObject(80, 0, 106, 0, false),
|
|
displayedPhaseId(0), angle(0.0f), zoomFactor(zoom_small), angleEasing(angle),
|
|
zoomFactorEasing(zoomFactor), mpDuelLayers(duelLayers)
|
|
{
|
|
if(duelLayers->getObserver()->getResourceManager())
|
|
{
|
|
JQuadPtr quad = WResourceManager::Instance()->GetQuad("phasebar");
|
|
if (quad.get() != NULL)
|
|
{
|
|
quad->mHeight = kHeight;
|
|
quad->mWidth = kWidth;
|
|
}
|
|
else
|
|
GameApp::systemError = "Error loading phasebar texture : " __FILE__;
|
|
}
|
|
|
|
mpDuelLayers->getCardSelector()->Add(this);
|
|
}
|
|
|
|
GuiPhaseBar::~GuiPhaseBar()
|
|
{
|
|
}
|
|
|
|
void GuiPhaseBar::Update(float dt)
|
|
{
|
|
angleEasing.update(dt);
|
|
|
|
if(angle <= -step)
|
|
{
|
|
displayedPhaseId = (displayedPhaseId + 1) % kPhases;
|
|
angleEasing.translate(step);
|
|
}
|
|
|
|
zoomFactorEasing.update(dt);
|
|
}
|
|
|
|
void GuiPhaseBar::Entering()
|
|
{
|
|
mHasFocus = true;
|
|
zoomFactorEasing.start(zoom_big, 0.3f);
|
|
}
|
|
|
|
bool GuiPhaseBar::Leaving(JButton)
|
|
{
|
|
mHasFocus = false;
|
|
zoomFactorEasing.start(zoom_small, 0.6f);
|
|
return true;
|
|
}
|
|
|
|
void GuiPhaseBar::Render()
|
|
{
|
|
JQuadPtr quad = WResourceManager::Instance()->GetQuad("phasebar");
|
|
JQuadPtr phaseinfo = WResourceManager::Instance()->RetrieveTempQuad("fakebar.png"); //new fakebar graphics
|
|
//uncomment to draw a hideous line across hires screens.
|
|
// JRenderer::GetInstance()->DrawLine(0, CENTER, SCREEN_WIDTH, CENTER, ARGB(255, 255, 255, 255));
|
|
|
|
const float radius = 25 * zoomFactor;
|
|
|
|
for(int i = 0; i < 6; ++i)
|
|
{
|
|
//the position of the glyphe in the circle
|
|
const float circPos = (i - 2) * step + angle;
|
|
const float glyphY = this->y + this->mHeight / 2 + sin(circPos) * radius;
|
|
|
|
//the scale is computed so that the glyphes touch each other
|
|
//hint: sin(circPos + PI/2) = cos(circPos)
|
|
const float glyphScale = float(zoomFactor * cosf(circPos) * 0.5f);
|
|
|
|
if (observer->currentPlayer && observer->currentPlayer->isAI() && !observer->currentPlayer->opponent()->isAI())
|
|
DrawGlyph(quad.get(), (displayedPhaseId - 2 + i + kPhases) % kPhases, 0, glyphY, glyphScale, 29);
|
|
else
|
|
DrawGlyph(quad.get(), (displayedPhaseId - 2 + i + kPhases) % kPhases, 0, glyphY, glyphScale, 0);
|
|
}
|
|
|
|
//print phase name
|
|
WFont * font = WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT);
|
|
string currentP = _("your turn");
|
|
string interrupt = "";
|
|
if (observer->currentPlayer == mpDuelLayers->getRenderedPlayerOpponent())
|
|
{
|
|
currentP = _("opponent's turn");
|
|
}
|
|
font->SetColor(ARGB(255, 255, 255, 255));
|
|
if (observer->currentlyActing() && observer->currentlyActing()->isAI())
|
|
{
|
|
font->SetColor(ARGB(255, 128, 128, 128));
|
|
}
|
|
if (observer->currentlyActing() != observer->currentPlayer)
|
|
{
|
|
if (observer->currentPlayer == mpDuelLayers->getRenderedPlayer())
|
|
{
|
|
interrupt = _(" - ") + _("opponent plays");
|
|
}
|
|
else
|
|
{
|
|
interrupt = _(" - ") + _("you play");
|
|
}
|
|
}
|
|
|
|
char buf[200];
|
|
//running this string through translate returns gibberish even though we defined the variables in the lang.txt
|
|
//the conversion from phase bar phases to mtg phases is x%kPhases + 1
|
|
//todo: just to this when the displayedPhaseId updates
|
|
string phaseNameToTranslate = observer->phaseRing->phaseName(displayedPhaseId%kPhases + 1);
|
|
phaseNameToTranslate = _(phaseNameToTranslate);
|
|
sprintf(buf, _("(%s%s) %s").c_str(), currentP.c_str(), interrupt.c_str(),phaseNameToTranslate.c_str());
|
|
if(phaseinfo.get())
|
|
{
|
|
|
|
phaseinfo->mWidth = font->GetStringWidth(buf)+12.f;
|
|
phaseinfo->SetHotSpot(phaseinfo->mWidth -4, 0);
|
|
//phaseinfo->mHeight = font->GetHeight()+5.f;
|
|
JRenderer::GetInstance()->RenderQuad(phaseinfo.get(),SCREEN_WIDTH_F,0,0,2.2f, SCREEN_HEIGHT_F / phaseinfo->mHeight);
|
|
}
|
|
font->DrawString(buf, SCREEN_WIDTH - 5, 2, JGETEXT_RIGHT);
|
|
}
|
|
|
|
int GuiPhaseBar::receiveEventMinus(WEvent *e)
|
|
{
|
|
WEventPhaseChange *event = dynamic_cast<WEventPhaseChange*> (e);
|
|
if (event)
|
|
{
|
|
//convert the mtg phase to the phases of the phase wheel
|
|
//the mapping is
|
|
//0 -> none
|
|
//1..12 -> 0..11
|
|
//13 -> none
|
|
int targetPhase = event->to->id;
|
|
|
|
if(targetPhase != 0 && targetPhase != 13)
|
|
{
|
|
targetPhase -= 1;
|
|
|
|
int phasesToAnimate = (targetPhase - displayedPhaseId + kPhases) % kPhases;
|
|
angleEasing.start(float(phasesToAnimate * (- step)), 0.3f * float(sqrt(float(phasesToAnimate))));
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
ostream& GuiPhaseBar::toString(ostream& out) const
|
|
{
|
|
return out << "GuiPhaseBar";
|
|
}
|