From f17e4ceaeaf35b57e25e3d34f755eba004a85e96 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Tue, 15 Apr 2003 02:52:58 +0000 Subject: [PATCH] Simplify, so I don't have to wrap every call to Mode. --- stepmania/src/ArrowBackdrop.cpp | 4 +- stepmania/src/GhostArrowRow.cpp | 4 +- stepmania/src/GrayArrowRow.cpp | 4 +- stepmania/src/NoteField.cpp | 4 +- stepmania/src/NoteFieldPositioning.cpp | 105 +++++++++---------------- stepmania/src/NoteFieldPositioning.h | 68 ++++++++-------- stepmania/src/Player.cpp | 5 +- 7 files changed, 80 insertions(+), 114 deletions(-) diff --git a/stepmania/src/ArrowBackdrop.cpp b/stepmania/src/ArrowBackdrop.cpp index 6ab6284aeb..231f762658 100644 --- a/stepmania/src/ArrowBackdrop.cpp +++ b/stepmania/src/ArrowBackdrop.cpp @@ -6,11 +6,11 @@ void ArrowBackdrop::BeginDraw() { BGAnimation::BeginDraw(); - GAMESTATE->m_Position->BeginDrawBackdrop(m_PlayerNumber); + g_NoteFieldMode[m_PlayerNumber].BeginDrawTrack(-1); } void ArrowBackdrop::EndDraw() { - GAMESTATE->m_Position->EndDrawBackdrop(m_PlayerNumber); + g_NoteFieldMode[m_PlayerNumber].EndDrawTrack(-1); BGAnimation::EndDraw(); } diff --git a/stepmania/src/GhostArrowRow.cpp b/stepmania/src/GhostArrowRow.cpp index c405327942..5ff5af0f85 100644 --- a/stepmania/src/GhostArrowRow.cpp +++ b/stepmania/src/GhostArrowRow.cpp @@ -62,7 +62,7 @@ void GhostArrowRow::DrawPrimitives() { for( int c=0; cm_Position->BeginDrawTrack(m_PlayerNumber, c); + g_NoteFieldMode[m_PlayerNumber].BeginDrawTrack(c); float fX = ArrowGetXPos( m_PlayerNumber, c, 0 ); m_GhostArrowRow[c].SetX( fX ); @@ -73,7 +73,7 @@ void GhostArrowRow::DrawPrimitives() m_GhostArrowRowBright[c].Draw(); m_HoldGhostArrowRow[c].Draw(); - GAMESTATE->m_Position->EndDrawTrack(m_PlayerNumber, c); + g_NoteFieldMode[m_PlayerNumber].EndDrawTrack(c); } } diff --git a/stepmania/src/GrayArrowRow.cpp b/stepmania/src/GrayArrowRow.cpp index cd33629728..43b48825db 100644 --- a/stepmania/src/GrayArrowRow.cpp +++ b/stepmania/src/GrayArrowRow.cpp @@ -59,14 +59,14 @@ void GrayArrowRow::DrawPrimitives() { for( int c=0; cm_Position->BeginDrawTrack(m_PlayerNumber, c); + g_NoteFieldMode[m_PlayerNumber].BeginDrawTrack(c); // set arrow X float fX = ArrowGetXPos( m_PlayerNumber, c, 0 ); m_GrayArrow[c].SetX( fX ); m_GrayArrow[c].Draw(); - GAMESTATE->m_Position->EndDrawTrack(m_PlayerNumber, c); + g_NoteFieldMode[m_PlayerNumber].EndDrawTrack(c); } } diff --git a/stepmania/src/NoteField.cpp b/stepmania/src/NoteField.cpp index c683385e85..8e468413ab 100644 --- a/stepmania/src/NoteField.cpp +++ b/stepmania/src/NoteField.cpp @@ -346,7 +346,7 @@ void NoteField::DrawPrimitives() for( int c=0; cm_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) @@ -414,7 +414,7 @@ void NoteField::DrawPrimitives() 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); } } diff --git a/stepmania/src/NoteFieldPositioning.cpp b/stepmania/src/NoteFieldPositioning.cpp index dd8c64c3ee..2492ff3ece 100644 --- a/stepmania/src/NoteFieldPositioning.cpp +++ b/stepmania/src/NoteFieldPositioning.cpp @@ -13,14 +13,19 @@ #include "Style.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_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 * for a transformation. However, this is a big waste of matrix * 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(); } -void NoteFieldPositioning::Mode::EndDrawTrack(int tn) +void NoteFieldMode::EndDrawTrack(int tn) { if(tn == -1) m_PositionBackdrop.EndDraw(); @@ -52,6 +57,8 @@ void NoteFieldPositioning::Mode::EndDrawTrack(int tn) if(tn != -1) m_CenterTrack[tn].EndDraw(); m_Center.EndDraw(); + + DISPLAY->PopMatrix(); } NoteFieldPositioning::NoteFieldPositioning(CString fn) @@ -62,7 +69,7 @@ NoteFieldPositioning::NoteFieldPositioning(CString fn) for(IniFile::const_iterator i = ini.begin(); i != ini.end(); ++i) { - Mode m; + NoteFieldMode m; const IniFile::key &k = i->second; 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()) return true; @@ -137,6 +144,31 @@ bool NoteFieldPositioning::Mode::MatchesCurrentGame() const 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 * doesn't exist, return "". */ @@ -156,11 +188,6 @@ int NoteFieldPositioning::GetID(const CString &name) const 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. */ void NoteFieldPositioning::GetNamesForCurrentGame(vector &IDs) @@ -174,61 +201,3 @@ void NoteFieldPositioning::GetNamesForCurrentGame(vector &IDs) 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(); -} diff --git a/stepmania/src/NoteFieldPositioning.h b/stepmania/src/NoteFieldPositioning.h index 49da52a360..6a2aee8d2a 100644 --- a/stepmania/src/NoteFieldPositioning.h +++ b/stepmania/src/NoteFieldPositioning.h @@ -9,49 +9,43 @@ #include -class NoteFieldPositioning +struct NoteFieldMode { - struct Mode - { - Mode(); - bool MatchesCurrentGame() const; + NoteFieldMode(); + bool MatchesCurrentGame() const; - void BeginDrawTrack(int tn); - void EndDrawTrack(int tn); + void BeginDrawTrack(int tn); + void EndDrawTrack(int tn); - CString name; - set