Simplify, so I don't have to wrap every call to Mode.
This commit is contained in:
@@ -6,11 +6,11 @@
|
|||||||
void ArrowBackdrop::BeginDraw()
|
void ArrowBackdrop::BeginDraw()
|
||||||
{
|
{
|
||||||
BGAnimation::BeginDraw();
|
BGAnimation::BeginDraw();
|
||||||
GAMESTATE->m_Position->BeginDrawBackdrop(m_PlayerNumber);
|
g_NoteFieldMode[m_PlayerNumber].BeginDrawTrack(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ArrowBackdrop::EndDraw()
|
void ArrowBackdrop::EndDraw()
|
||||||
{
|
{
|
||||||
GAMESTATE->m_Position->EndDrawBackdrop(m_PlayerNumber);
|
g_NoteFieldMode[m_PlayerNumber].EndDrawTrack(-1);
|
||||||
BGAnimation::EndDraw();
|
BGAnimation::EndDraw();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ void GhostArrowRow::DrawPrimitives()
|
|||||||
{
|
{
|
||||||
for( int c=0; c<m_iNumCols; c++ )
|
for( int c=0; c<m_iNumCols; c++ )
|
||||||
{
|
{
|
||||||
GAMESTATE->m_Position->BeginDrawTrack(m_PlayerNumber, c);
|
g_NoteFieldMode[m_PlayerNumber].BeginDrawTrack(c);
|
||||||
|
|
||||||
float fX = ArrowGetXPos( m_PlayerNumber, c, 0 );
|
float fX = ArrowGetXPos( m_PlayerNumber, c, 0 );
|
||||||
m_GhostArrowRow[c].SetX( fX );
|
m_GhostArrowRow[c].SetX( fX );
|
||||||
@@ -73,7 +73,7 @@ void GhostArrowRow::DrawPrimitives()
|
|||||||
m_GhostArrowRowBright[c].Draw();
|
m_GhostArrowRowBright[c].Draw();
|
||||||
m_HoldGhostArrowRow[c].Draw();
|
m_HoldGhostArrowRow[c].Draw();
|
||||||
|
|
||||||
GAMESTATE->m_Position->EndDrawTrack(m_PlayerNumber, c);
|
g_NoteFieldMode[m_PlayerNumber].EndDrawTrack(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,14 +59,14 @@ void GrayArrowRow::DrawPrimitives()
|
|||||||
{
|
{
|
||||||
for( int c=0; c<m_iNumCols; c++ )
|
for( int c=0; c<m_iNumCols; c++ )
|
||||||
{
|
{
|
||||||
GAMESTATE->m_Position->BeginDrawTrack(m_PlayerNumber, c);
|
g_NoteFieldMode[m_PlayerNumber].BeginDrawTrack(c);
|
||||||
|
|
||||||
// set arrow X
|
// set arrow X
|
||||||
float fX = ArrowGetXPos( m_PlayerNumber, c, 0 );
|
float fX = ArrowGetXPos( m_PlayerNumber, c, 0 );
|
||||||
m_GrayArrow[c].SetX( fX );
|
m_GrayArrow[c].SetX( fX );
|
||||||
m_GrayArrow[c].Draw();
|
m_GrayArrow[c].Draw();
|
||||||
|
|
||||||
GAMESTATE->m_Position->EndDrawTrack(m_PlayerNumber, c);
|
g_NoteFieldMode[m_PlayerNumber].EndDrawTrack(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -346,7 +346,7 @@ void NoteField::DrawPrimitives()
|
|||||||
|
|
||||||
for( int c=0; c<GetNumTracks(); c++ ) // for each arrow column
|
for( int c=0; c<GetNumTracks(); c++ ) // for each arrow column
|
||||||
{
|
{
|
||||||
GAMESTATE->m_Position->BeginDrawTrack(m_PlayerNumber, c);
|
g_NoteFieldMode[m_PlayerNumber].BeginDrawTrack(c);
|
||||||
|
|
||||||
/////////////////////////////////
|
/////////////////////////////////
|
||||||
// Draw all HoldNotes in this column (so that they appear under the tap notes)
|
// Draw all HoldNotes in this column (so that they appear under the tap notes)
|
||||||
@@ -414,7 +414,7 @@ void NoteField::DrawPrimitives()
|
|||||||
m_NoteDisplay[c].DrawTap( c, NoteRowToBeat(i), bHoldNoteBeginsOnThisBeat, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail );
|
m_NoteDisplay[c].DrawTap( c, NoteRowToBeat(i), bHoldNoteBeginsOnThisBeat, bIsInSelectionRange ? fSelectedRangeGlow : m_fPercentFadeToFail );
|
||||||
}
|
}
|
||||||
|
|
||||||
GAMESTATE->m_Position->EndDrawTrack(m_PlayerNumber, c);
|
g_NoteFieldMode[m_PlayerNumber].EndDrawTrack(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,14 +13,19 @@
|
|||||||
#include "Style.h"
|
#include "Style.h"
|
||||||
#include "GameDef.h"
|
#include "GameDef.h"
|
||||||
|
|
||||||
|
/* Copies of the current mode. Update this by calling Load. */
|
||||||
|
NoteFieldMode g_NoteFieldMode[NUM_PLAYERS];
|
||||||
|
|
||||||
NoteFieldPositioning::Mode::Mode()
|
NoteFieldMode::NoteFieldMode()
|
||||||
{
|
{
|
||||||
m_fFov = 0;
|
m_fFov = 0;
|
||||||
|
m_fFirstPixelToDrawScale = m_fLastPixelToDrawScale = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteFieldPositioning::Mode::BeginDrawTrack(int tn)
|
void NoteFieldMode::BeginDrawTrack(int tn)
|
||||||
{
|
{
|
||||||
|
DISPLAY->PushMatrix();
|
||||||
|
|
||||||
/* It's useful to be able to use Actors like this, functioning only
|
/* It's useful to be able to use Actors like this, functioning only
|
||||||
* for a transformation. However, this is a big waste of matrix
|
* for a transformation. However, this is a big waste of matrix
|
||||||
* stack space, as each of these will push. Profile this. XXX */
|
* stack space, as each of these will push. Profile this. XXX */
|
||||||
@@ -38,7 +43,7 @@ void NoteFieldPositioning::Mode::BeginDrawTrack(int tn)
|
|||||||
m_PositionTrack[tn].BeginDraw();
|
m_PositionTrack[tn].BeginDraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteFieldPositioning::Mode::EndDrawTrack(int tn)
|
void NoteFieldMode::EndDrawTrack(int tn)
|
||||||
{
|
{
|
||||||
if(tn == -1)
|
if(tn == -1)
|
||||||
m_PositionBackdrop.EndDraw();
|
m_PositionBackdrop.EndDraw();
|
||||||
@@ -52,6 +57,8 @@ void NoteFieldPositioning::Mode::EndDrawTrack(int tn)
|
|||||||
if(tn != -1)
|
if(tn != -1)
|
||||||
m_CenterTrack[tn].EndDraw();
|
m_CenterTrack[tn].EndDraw();
|
||||||
m_Center.EndDraw();
|
m_Center.EndDraw();
|
||||||
|
|
||||||
|
DISPLAY->PopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
NoteFieldPositioning::NoteFieldPositioning(CString fn)
|
NoteFieldPositioning::NoteFieldPositioning(CString fn)
|
||||||
@@ -62,7 +69,7 @@ NoteFieldPositioning::NoteFieldPositioning(CString fn)
|
|||||||
|
|
||||||
for(IniFile::const_iterator i = ini.begin(); i != ini.end(); ++i)
|
for(IniFile::const_iterator i = ini.begin(); i != ini.end(); ++i)
|
||||||
{
|
{
|
||||||
Mode m;
|
NoteFieldMode m;
|
||||||
|
|
||||||
const IniFile::key &k = i->second;
|
const IniFile::key &k = i->second;
|
||||||
IniFile::key::const_iterator val;
|
IniFile::key::const_iterator val;
|
||||||
@@ -126,7 +133,7 @@ NoteFieldPositioning::NoteFieldPositioning(CString fn)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NoteFieldPositioning::Mode::MatchesCurrentGame() const
|
bool NoteFieldMode::MatchesCurrentGame() const
|
||||||
{
|
{
|
||||||
if(Styles.empty())
|
if(Styles.empty())
|
||||||
return true;
|
return true;
|
||||||
@@ -137,6 +144,31 @@ bool NoteFieldPositioning::Mode::MatchesCurrentGame() const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NoteFieldPositioning::Load(PlayerNumber pn)
|
||||||
|
{
|
||||||
|
NoteFieldMode &mode = g_NoteFieldMode[pn];
|
||||||
|
const int ModeNum = GetID(GAMESTATE->m_PlayerOptions[pn].m_sPositioning);
|
||||||
|
if(ModeNum != -1)
|
||||||
|
{
|
||||||
|
/* We have a custom mode; copy it. */
|
||||||
|
mode = Modes[ModeNum];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* No transformation is enabled, so use the one defined in the style
|
||||||
|
* table. */
|
||||||
|
mode = NoteFieldMode(); /* reset */
|
||||||
|
|
||||||
|
const StyleDef *s = GAMESTATE->GetCurrentStyleDef();
|
||||||
|
|
||||||
|
/* Set the m_PositionTrack[] value for each track. */
|
||||||
|
for(int tn = 0; tn < MAX_NOTE_TRACKS; ++tn)
|
||||||
|
{
|
||||||
|
const float fPixelXOffsetFromCenter = s->m_ColumnInfo[pn][tn].fXOffset;
|
||||||
|
mode.m_PositionTrack[tn].SetX(fPixelXOffsetFromCenter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Get the unique ID of the given name, for the current game/style. If it
|
/* Get the unique ID of the given name, for the current game/style. If it
|
||||||
* doesn't exist, return "". */
|
* doesn't exist, return "". */
|
||||||
@@ -156,11 +188,6 @@ int NoteFieldPositioning::GetID(const CString &name) const
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int NoteFieldPositioning::GetID(PlayerNumber pn) const
|
|
||||||
{
|
|
||||||
return GetID(GAMESTATE->m_PlayerOptions[pn].m_sPositioning);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Get all arrow modifier names for the current game. */
|
/* Get all arrow modifier names for the current game. */
|
||||||
void NoteFieldPositioning::GetNamesForCurrentGame(vector<CString> &IDs)
|
void NoteFieldPositioning::GetNamesForCurrentGame(vector<CString> &IDs)
|
||||||
@@ -174,61 +201,3 @@ void NoteFieldPositioning::GetNamesForCurrentGame(vector<CString> &IDs)
|
|||||||
IDs.push_back(Modes[i].name);
|
IDs.push_back(Modes[i].name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX: Lots of GetID calls, which do a bunch of string compares; profile this. */
|
|
||||||
CString NoteFieldPositioning::GetBackdropBGA(PlayerNumber pn) const
|
|
||||||
{
|
|
||||||
const int mode = GetID(pn);
|
|
||||||
if(mode == -1)
|
|
||||||
return ""; /* none */
|
|
||||||
LOG->Trace("bd %s", Modes[mode].Backdrop.c_str() );
|
|
||||||
return Modes[mode].Backdrop;
|
|
||||||
}
|
|
||||||
|
|
||||||
void NoteFieldPositioning::BeginDrawBackdrop(PlayerNumber pn)
|
|
||||||
{
|
|
||||||
const int mode = GetID(pn);
|
|
||||||
if(mode == -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
DISPLAY->PushMatrix();
|
|
||||||
Modes[mode].BeginDrawTrack(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NoteFieldPositioning::EndDrawBackdrop(PlayerNumber pn)
|
|
||||||
{
|
|
||||||
const int mode = GetID(pn);
|
|
||||||
if(mode == -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Modes[mode].EndDrawTrack(-1);
|
|
||||||
DISPLAY->PopMatrix();
|
|
||||||
}
|
|
||||||
|
|
||||||
void NoteFieldPositioning::BeginDrawTrack(PlayerNumber pn, int tn)
|
|
||||||
{
|
|
||||||
const int mode = GetID(pn);
|
|
||||||
|
|
||||||
DISPLAY->PushMatrix();
|
|
||||||
|
|
||||||
if(mode == -1)
|
|
||||||
{
|
|
||||||
/* No transformation is enabled, so use the one defined in the style
|
|
||||||
* table. */
|
|
||||||
const StyleDef *s = GAMESTATE->GetCurrentStyleDef();
|
|
||||||
const float fPixelXOffsetFromCenter = s->m_ColumnInfo[pn][tn].fXOffset;
|
|
||||||
DISPLAY->Translate(fPixelXOffsetFromCenter, 0, 0);
|
|
||||||
} else {
|
|
||||||
Modes[mode].BeginDrawTrack(tn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void NoteFieldPositioning::EndDrawTrack(PlayerNumber pn, int tn)
|
|
||||||
{
|
|
||||||
const int mode = GetID(pn);
|
|
||||||
|
|
||||||
if(mode != -1)
|
|
||||||
Modes[mode].EndDrawTrack(tn);
|
|
||||||
|
|
||||||
DISPLAY->PopMatrix();
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -9,11 +9,9 @@
|
|||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
class NoteFieldPositioning
|
struct NoteFieldMode
|
||||||
{
|
{
|
||||||
struct Mode
|
NoteFieldMode();
|
||||||
{
|
|
||||||
Mode();
|
|
||||||
bool MatchesCurrentGame() const;
|
bool MatchesCurrentGame() const;
|
||||||
|
|
||||||
void BeginDrawTrack(int tn);
|
void BeginDrawTrack(int tn);
|
||||||
@@ -30,28 +28,24 @@ class NoteFieldPositioning
|
|||||||
Actor m_Position;
|
Actor m_Position;
|
||||||
Actor m_PositionTrack[MAX_NOTE_TRACKS];
|
Actor m_PositionTrack[MAX_NOTE_TRACKS];
|
||||||
|
|
||||||
|
float m_fFirstPixelToDrawScale, m_fLastPixelToDrawScale;
|
||||||
CString Backdrop;
|
CString Backdrop;
|
||||||
Actor m_PositionBackdrop;
|
Actor m_PositionBackdrop;
|
||||||
};
|
|
||||||
|
|
||||||
vector<Mode> Modes;
|
|
||||||
|
|
||||||
public:
|
|
||||||
NoteFieldPositioning(CString fn);
|
|
||||||
|
|
||||||
/* Get the mode number for the given positioning type (for the current
|
|
||||||
* game and style). */
|
|
||||||
int GetID(const CString &name) const;
|
|
||||||
int GetID(PlayerNumber pn) const;
|
|
||||||
|
|
||||||
void BeginDrawTrack(PlayerNumber pn, int tn);
|
|
||||||
void EndDrawTrack(PlayerNumber pn, int tn);
|
|
||||||
|
|
||||||
CString GetBackdropBGA(PlayerNumber pn) const;
|
|
||||||
void BeginDrawBackdrop(PlayerNumber pn);
|
|
||||||
void EndDrawBackdrop(PlayerNumber pn);
|
|
||||||
|
|
||||||
void GetNamesForCurrentGame(vector<CString> &IDs);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NoteFieldPositioning
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NoteFieldPositioning(CString fn);
|
||||||
|
void Load(PlayerNumber pn);
|
||||||
|
|
||||||
|
void GetNamesForCurrentGame(vector<CString> &IDs);
|
||||||
|
|
||||||
|
private:
|
||||||
|
vector<NoteFieldMode> Modes;
|
||||||
|
int GetID(const CString &name) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern NoteFieldMode g_NoteFieldMode[NUM_PLAYERS];
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -86,6 +86,9 @@ void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, ScoreDi
|
|||||||
m_pInventory = pInventory;
|
m_pInventory = pInventory;
|
||||||
m_pScoreKeeper = pScoreKeeper;
|
m_pScoreKeeper = pScoreKeeper;
|
||||||
|
|
||||||
|
/* Ensure that this is up-to-date. */
|
||||||
|
GAMESTATE->m_Position->Load(pn);
|
||||||
|
|
||||||
const StyleDef* pStyleDef = GAMESTATE->GetCurrentStyleDef();
|
const StyleDef* pStyleDef = GAMESTATE->GetCurrentStyleDef();
|
||||||
|
|
||||||
// init scoring
|
// init scoring
|
||||||
@@ -136,7 +139,7 @@ void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, ScoreDi
|
|||||||
int iStopDrawingAtPixels = GAMESTATE->m_bEditing ? 400 : STOP_DRAWING_AT_PIXELS;
|
int iStopDrawingAtPixels = GAMESTATE->m_bEditing ? 400 : STOP_DRAWING_AT_PIXELS;
|
||||||
|
|
||||||
m_ArrowBackdrop.Unload();
|
m_ArrowBackdrop.Unload();
|
||||||
CString BackdropName = GAMESTATE->m_Position->GetBackdropBGA(pn);
|
CString BackdropName = g_NoteFieldMode[pn].Backdrop;
|
||||||
if( !BackdropName.empty() )
|
if( !BackdropName.empty() )
|
||||||
m_ArrowBackdrop.LoadFromAniDir( THEME->GetPathToB( BackdropName ) );
|
m_ArrowBackdrop.LoadFromAniDir( THEME->GetPathToB( BackdropName ) );
|
||||||
m_NoteField.Load( (NoteData*)this, pn, iStartDrawingAtPixels, iStopDrawingAtPixels );
|
m_NoteField.Load( (NoteData*)this, pn, iStartDrawingAtPixels, iStopDrawingAtPixels );
|
||||||
|
|||||||
Reference in New Issue
Block a user