Merge because I forgot to update first.
@@ -13,6 +13,15 @@ _____________________________________________________________________________
|
||||
sm-ssc v1.2 | 201012xx
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
20101219
|
||||
--------
|
||||
* [WheelNotifyIcon] add BlinkPlayersBest metric. [freem]
|
||||
* [GameCommand] Add GetScreen, GetSteps, GetCourse, GetTrail, and GetCharacter
|
||||
Lua bindings. [freem]
|
||||
* [StreamDisplay] Remove UseThreePartMethod.
|
||||
* [Style] Add ColumnsPerPlayer and NeedsZoomOutWith2Players bindings. [freem]
|
||||
* [Profile] Add GetLastUsedHighScoreName Lua binding. [freem]
|
||||
|
||||
20101218
|
||||
--------
|
||||
* [MusicWheelItem] Add OverPart. [freem]
|
||||
|
||||
|
After Width: | Height: | Size: 870 B |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 621 B |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 628 B |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 625 B |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 631 B |
|
After Width: | Height: | Size: 12 KiB |
@@ -133,6 +133,17 @@ function Actor:Center()
|
||||
self:y(SCREEN_CENTER_Y)
|
||||
end
|
||||
|
||||
function Actor:bezier(...)
|
||||
local a = {...}
|
||||
local b = {}
|
||||
local c = 0
|
||||
assert((a == 10 or a == 6), "bad number of arguments for Actor:bezier()")
|
||||
for i=3,c do
|
||||
b[#b+1] = a[i]
|
||||
end
|
||||
a[1]:tween(a[2], "TweenMode_Bezier", b)
|
||||
end
|
||||
|
||||
-- (c) 2006 Glenn Maynard
|
||||
-- All rights reserved.
|
||||
--
|
||||
|
||||
@@ -1187,6 +1187,7 @@ AfterSetCommand=%TextBannerAfterSet
|
||||
|
||||
[WheelNotifyIcon]
|
||||
ShowTraining=false
|
||||
BlinkPlayersBest=true
|
||||
|
||||
# 04 #
|
||||
[Screen]
|
||||
@@ -3381,60 +3382,60 @@ Row6Y=SCREEN_CENTER_Y+80
|
||||
Row7Y=SCREEN_CENTER_Y+120
|
||||
|
||||
Label1X=SCREEN_CENTER_X-250
|
||||
Label1Y=THEME:GetMetric("EditMode","Row1Y")
|
||||
Label1Y=THEME:GetMetric("EditMenu","Row1Y")
|
||||
Label1OnCommand=shadowlength,1;zoom,0.75
|
||||
Label1OffCommand=
|
||||
Label2X=SCREEN_CENTER_X-250
|
||||
Label2Y=THEME:GetMetric("EditMode","Row2Y")
|
||||
Label2Y=THEME:GetMetric("EditMenu","Row2Y")
|
||||
Label2OnCommand=shadowlength,1;zoom,0.75
|
||||
Label2OffCommand=
|
||||
Label3X=SCREEN_CENTER_X-250
|
||||
Label3Y=THEME:GetMetric("EditMode","Row3Y")
|
||||
Label3Y=THEME:GetMetric("EditMenu","Row3Y")
|
||||
Label3OnCommand=shadowlength,1;zoom,0.75
|
||||
Label3OffCommand=
|
||||
Label4X=SCREEN_CENTER_X-250
|
||||
Label4Y=THEME:GetMetric("EditMode","Row4Y")
|
||||
Label4Y=THEME:GetMetric("EditMenu","Row4Y")
|
||||
Label4OnCommand=shadowlength,1;zoom,0.75
|
||||
Label4OffCommand=
|
||||
Label5X=SCREEN_CENTER_X-250
|
||||
Label5Y=THEME:GetMetric("EditMode","Row5Y")
|
||||
Label5Y=THEME:GetMetric("EditMenu","Row5Y")
|
||||
Label5OnCommand=shadowlength,1;zoom,0.75
|
||||
Label5OffCommand=
|
||||
Label6X=SCREEN_CENTER_X-250
|
||||
Label6Y=THEME:GetMetric("EditMode","Row6Y")
|
||||
Label6Y=THEME:GetMetric("EditMenu","Row6Y")
|
||||
Label6OnCommand=shadowlength,1;zoom,0.75
|
||||
Label6OffCommand=
|
||||
Label7X=SCREEN_CENTER_X-250
|
||||
Label7Y=THEME:GetMetric("EditMode","Row7Y")
|
||||
Label7Y=THEME:GetMetric("EditMenu","Row7Y")
|
||||
Label7OnCommand=shadowlength,1;zoom,0.75
|
||||
Label7OffCommand=
|
||||
|
||||
Value1X=SCREEN_CENTER_X
|
||||
Value1Y=THEME:GetMetric("EditMode","Row1Y")
|
||||
Value1Y=THEME:GetMetric("EditMenu","Row1Y")
|
||||
Value1OnCommand=shadowlength,1;zoom,0.75;maxwidth,SCREEN_CENTER_X*0.65
|
||||
Value1OffCommand=
|
||||
Value2X=SCREEN_CENTER_X+60
|
||||
Value2Y=THEME:GetMetric("EditMode","Row2Y")
|
||||
Value2Y=THEME:GetMetric("EditMenu","Row2Y")
|
||||
Value2OnCommand=shadowlength,1;zoom,0.75;maxwidth,SCREEN_CENTER_X*0.65
|
||||
Value2OffCommand=
|
||||
Value3X=SCREEN_CENTER_X+60
|
||||
Value3Y=THEME:GetMetric("EditMode","Row3Y")
|
||||
Value3Y=THEME:GetMetric("EditMenu","Row3Y")
|
||||
Value3OnCommand=shadowlength,1;zoom,0.75;maxwidth,SCREEN_CENTER_X*0.65
|
||||
Value3OffCommand=
|
||||
Value4X=SCREEN_CENTER_X
|
||||
Value4Y=THEME:GetMetric("EditMode","Row4Y")
|
||||
Value4Y=THEME:GetMetric("EditMenu","Row4Y")
|
||||
Value4OnCommand=shadowlength,1;zoom,0.75;maxwidth,SCREEN_CENTER_X*0.65
|
||||
Value4OffCommand=
|
||||
Value5X=SCREEN_CENTER_X+60
|
||||
Value5Y=THEME:GetMetric("EditMode","Row5Y")
|
||||
Value5Y=THEME:GetMetric("EditMenu","Row5Y")
|
||||
Value5OnCommand=shadowlength,1;zoom,0.75;maxwidth,SCREEN_CENTER_X*0.65
|
||||
Value5OffCommand=
|
||||
Value6X=SCREEN_CENTER_X
|
||||
Value6Y=THEME:GetMetric("EditMode","Row6Y")
|
||||
Value6Y=THEME:GetMetric("EditMenu","Row6Y")
|
||||
Value6OnCommand=shadowlength,1;zoom,0.75;maxwidth,SCREEN_CENTER_X*0.65
|
||||
Value6OffCommand=
|
||||
Value7X=SCREEN_CENTER_X+60
|
||||
Value7Y=THEME:GetMetric("EditMode","Row7Y")
|
||||
Value7Y=THEME:GetMetric("EditMenu","Row7Y")
|
||||
Value7OnCommand=shadowlength,1;zoom,0.75;maxwidth,SCREEN_CENTER_X*0.65
|
||||
Value7OffCommand=
|
||||
|
||||
|
||||
@@ -42,10 +42,6 @@ void CourseContentsList::SetFromGameState()
|
||||
{
|
||||
RemoveAllChildren();
|
||||
|
||||
// FIXME: Is there a better way to handle when players don't have
|
||||
// the same number of TrailEntries?
|
||||
// They have to have the same number, and of the same songs, or gameplay
|
||||
// isn't going to line up.
|
||||
if( GAMESTATE->m_MasterPlayerNumber == PlayerNumber_Invalid )
|
||||
return;
|
||||
const Trail *pMasterTrail = GAMESTATE->m_pCurTrail[GAMESTATE->m_MasterPlayerNumber];
|
||||
|
||||
@@ -73,9 +73,7 @@ void DateTime::StripTime()
|
||||
tm_sec = 0;
|
||||
}
|
||||
|
||||
//
|
||||
// Common SQL/XML format: "YYYY-MM-DD HH:MM:SS"
|
||||
//
|
||||
RString DateTime::GetString() const
|
||||
{
|
||||
RString s = ssprintf( "%d-%02d-%02d",
|
||||
|
||||
@@ -78,6 +78,7 @@ void StepsDisplayList::LoadFromNode( const XNode* pNode )
|
||||
|
||||
for( unsigned m = 0; m < m_Lines.size(); ++m )
|
||||
{
|
||||
// todo: Row1, Row2? also m_sName+"Row" -aj
|
||||
m_Lines[m].m_Meter.SetName( "Row" );
|
||||
m_Lines[m].m_Meter.Load( "StepsDisplayListRow", NULL );
|
||||
this->AddChild( &m_Lines[m].m_Meter );
|
||||
|
||||
@@ -852,6 +852,8 @@ bool GameCommand::IsZero() const
|
||||
// lua start
|
||||
#include "LuaBinding.h"
|
||||
#include "Game.h"
|
||||
#include "Steps.h"
|
||||
#include "Character.h"
|
||||
|
||||
class LunaGameCommand: public Luna<GameCommand>
|
||||
{
|
||||
@@ -861,8 +863,13 @@ public:
|
||||
static int GetIndex( T* p, lua_State *L ) { lua_pushnumber(L, p->m_iIndex ); return 1; }
|
||||
static int GetMultiPlayer( T* p, lua_State *L ) { lua_pushnumber(L, p->m_MultiPlayer); return 1; }
|
||||
static int GetStyle( T* p, lua_State *L ) { if(p->m_pStyle==NULL) lua_pushnil(L); else {Style *pStyle = (Style*)p->m_pStyle; pStyle->PushSelf(L);} return 1; }
|
||||
static int GetScreen( T* p, lua_State *L ) { lua_pushstring(L, p->m_sScreen ); return 1; }
|
||||
static int GetProfileID( T* p, lua_State *L ) { lua_pushstring(L, p->m_sProfileID ); return 1; }
|
||||
static int GetSong( T* p, lua_State *L ) { if(p->m_pSong==NULL) lua_pushnil(L); else p->m_pSong->PushSelf(L); return 1; }
|
||||
static int GetSteps( T* p, lua_State *L ) { if(p->m_pSteps==NULL) lua_pushnil(L); else p->m_pSteps->PushSelf(L); return 1; }
|
||||
static int GetCourse( T* p, lua_State *L ) { if(p->m_pCourse==NULL) lua_pushnil(L); else p->m_pCourse->PushSelf(L); return 1; }
|
||||
static int GetTrail( T* p, lua_State *L ) { if(p->m_pTrail==NULL) lua_pushnil(L); else p->m_pTrail->PushSelf(L); return 1; }
|
||||
static int GetCharacter( T* p, lua_State *L ) { if(p->m_pCharacter==NULL) lua_pushnil(L); else p->m_pCharacter->PushSelf(L); return 1; }
|
||||
static int GetSongGroup( T* p, lua_State *L ) { lua_pushstring(L, p->m_sSongGroup ); return 1; }
|
||||
static int GetUrl( T* p, lua_State *L ) { lua_pushstring(L, p->m_sUrl ); return 1; }
|
||||
|
||||
@@ -873,9 +880,18 @@ public:
|
||||
ADD_METHOD( GetIndex );
|
||||
ADD_METHOD( GetMultiPlayer );
|
||||
ADD_METHOD( GetStyle );
|
||||
//ADD_METHOD( GetDifficulty );
|
||||
//ADD_METHOD( GetCourseDifficulty );
|
||||
ADD_METHOD( GetScreen );
|
||||
//ADD_METHOD( GetPlayMode );
|
||||
ADD_METHOD( GetProfileID );
|
||||
ADD_METHOD( GetSong );
|
||||
ADD_METHOD( GetSteps );
|
||||
ADD_METHOD( GetCourse );
|
||||
ADD_METHOD( GetTrail );
|
||||
ADD_METHOD( GetCharacter );
|
||||
ADD_METHOD( GetSongGroup );
|
||||
//ADD_METHOD( GetSortOrder );
|
||||
ADD_METHOD( GetUrl );
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1965,7 +1965,7 @@ bool GameState::ChangePreferredDifficulty( PlayerNumber pn, int dir )
|
||||
}
|
||||
|
||||
/* The user may be set to prefer a difficulty that isn't always shown; typically,
|
||||
* Difficulty_Edit. Return the closest shown difficulty <= m_PreferredDifficulty. */
|
||||
* Difficulty_Edit. Return the closest shown difficulty <= m_PreferredDifficulty. */
|
||||
Difficulty GameState::GetClosestShownDifficulty( PlayerNumber pn ) const
|
||||
{
|
||||
const vector<Difficulty> &v = CommonMetrics::DIFFICULTIES_TO_SHOW.GetValue();
|
||||
|
||||
@@ -63,7 +63,7 @@ void GrooveRadar::TweenOnScreen()
|
||||
{
|
||||
m_sprRadarLabels[c].SetX( LABEL_OFFSET_X(c) );
|
||||
m_sprRadarLabels[c].PlayCommand( "PreDelayOn" );
|
||||
m_sprRadarLabels[c].BeginTweening( LABEL_ON_DELAY*c ); // sleep
|
||||
m_sprRadarLabels[c].BeginTweening( LABEL_ON_DELAY*c ); // sleep
|
||||
m_sprRadarLabels[c].PlayCommand( "PostDelayOn" );
|
||||
}
|
||||
|
||||
@@ -83,9 +83,8 @@ void GrooveRadar::TweenOffScreen()
|
||||
{
|
||||
m_sprRadarLabels[c].StopTweening();
|
||||
m_sprRadarLabels[c].BeginTweening( 0.2f );
|
||||
/* Make sure we undo glow. We do this at the end of TweenIn,
|
||||
* but we might tween off before we complete tweening in, and
|
||||
* the glow can remain. */
|
||||
/* Make sure we undo glow. We do this at the end of TweenIn, but we might
|
||||
* tween off before we complete tweening in, and the glow can remain. */
|
||||
m_sprRadarLabels[c].SetGlow( RageColor(1,1,1,0) );
|
||||
m_sprRadarLabels[c].SetDiffuse( RageColor(1,1,1,0) );
|
||||
}
|
||||
@@ -108,7 +107,7 @@ void GrooveRadar::SetFromRadarValues( PlayerNumber pn, const RadarValues &rv )
|
||||
m_GrooveRadarValueMap[pn].SetFromSteps( rv );
|
||||
}
|
||||
|
||||
void GrooveRadar::SetFromSteps( PlayerNumber pn, Steps* pSteps ) // NULL means no Song
|
||||
void GrooveRadar::SetFromSteps( PlayerNumber pn, Steps* pSteps ) // NULL means no Song
|
||||
{
|
||||
if( pSteps == NULL )
|
||||
{
|
||||
@@ -120,7 +119,6 @@ void GrooveRadar::SetFromSteps( PlayerNumber pn, Steps* pSteps ) // NULL means n
|
||||
m_GrooveRadarValueMap[pn].SetFromSteps( rv );
|
||||
}
|
||||
|
||||
|
||||
GrooveRadar::GrooveRadarValueMap::GrooveRadarValueMap()
|
||||
{
|
||||
m_bValuesVisible = false;
|
||||
@@ -146,7 +144,7 @@ void GrooveRadar::GrooveRadarValueMap::SetFromSteps( const RadarValues &rv )
|
||||
const float fValueCurrent = m_fValuesOld[c] * (1-m_PercentTowardNew) + m_fValuesNew[c] * m_PercentTowardNew;
|
||||
m_fValuesOld[c] = fValueCurrent;
|
||||
m_fValuesNew[c] = rv[c];
|
||||
}
|
||||
}
|
||||
|
||||
if( !m_bValuesVisible ) // the values WERE invisible
|
||||
m_PercentTowardNew = 1;
|
||||
|
||||
@@ -2488,6 +2488,10 @@ void Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanSeconds )
|
||||
if( !NeedsTapJudging(tn) )
|
||||
continue;
|
||||
|
||||
// warp hackery
|
||||
if( iter.Row() >= GAMESTATE->m_iWarpBeginRow && iter.Row() <= (GAMESTATE->m_iWarpBeginRow + BeatToNoteRow(GAMESTATE->m_fWarpLength)) )
|
||||
continue;
|
||||
|
||||
if( tn.type == TapNote::mine )
|
||||
{
|
||||
tn.result.tns = TNS_AvoidMine;
|
||||
@@ -2524,15 +2528,15 @@ void Player::UpdateJudgedRows()
|
||||
{
|
||||
int iRow = iter.Row();
|
||||
|
||||
// if row is within a warp section, ignore it. -aj
|
||||
if( iRow >= GAMESTATE->m_iWarpBeginRow &&
|
||||
iRow <= (GAMESTATE->m_iWarpBeginRow + BeatToNoteRow(GAMESTATE->m_fWarpLength)) )
|
||||
continue;
|
||||
|
||||
if( iLastSeenRow != iRow )
|
||||
{
|
||||
iLastSeenRow = iRow;
|
||||
|
||||
// if row is within a warp section, ignore it. -aj
|
||||
if( iRow >= GAMESTATE->m_iWarpBeginRow &&
|
||||
iRow <= (GAMESTATE->m_iWarpBeginRow + BeatToNoteRow(GAMESTATE->m_fWarpLength)) )
|
||||
continue;
|
||||
|
||||
// crossed a nonempty row
|
||||
if( !NoteDataWithScoring::IsRowCompletelyJudged(m_NoteData, iRow) )
|
||||
{
|
||||
@@ -2985,6 +2989,11 @@ void Player::HandleHoldCheckpoint( int iRow, int iNumHoldsHeldThisRow, int iNumH
|
||||
bNoCheating = false;
|
||||
#endif
|
||||
|
||||
// more warp hackery. -aj
|
||||
if( iRow >= (unsigned)GAMESTATE->m_iWarpBeginRow &&
|
||||
iRow <= (unsigned)(GAMESTATE->m_iWarpBeginRow + BeatToNoteRow(GAMESTATE->m_fWarpLength)) )
|
||||
return;
|
||||
|
||||
// don't accumulate combo if AutoPlay is on.
|
||||
if( bNoCheating && m_pPlayerState->m_PlayerController == PC_AUTOPLAY )
|
||||
return;
|
||||
|
||||
@@ -1939,6 +1939,7 @@ class LunaProfile: public Luna<Profile>
|
||||
{
|
||||
public:
|
||||
static int GetDisplayName( T* p, lua_State *L ) { lua_pushstring(L, p->m_sDisplayName ); return 1; }
|
||||
static int GetLastUsedHighScoreName( T* p, lua_State *L ) { lua_pushstring(L, p->m_sLastUsedHighScoreName ); return 1; }
|
||||
static int GetHighScoreList( T* p, lua_State *L )
|
||||
{
|
||||
if( LuaBinding::CheckLuaObjectType(L, 1, "Song") )
|
||||
@@ -2035,6 +2036,7 @@ public:
|
||||
LunaProfile()
|
||||
{
|
||||
ADD_METHOD( GetDisplayName );
|
||||
ADD_METHOD( GetLastUsedHighScoreName );
|
||||
ADD_METHOD( GetHighScoreList );
|
||||
ADD_METHOD( GetCharacter );
|
||||
ADD_METHOD( SetCharacter );
|
||||
|
||||
@@ -674,9 +674,7 @@ void ProfileManager::IncrementStepsPlayCount( const Song* pSong, const Steps* pS
|
||||
GetMachineProfile()->IncrementStepsPlayCount( pSong, pSteps );
|
||||
}
|
||||
|
||||
//
|
||||
// Course stats
|
||||
//
|
||||
void ProfileManager::AddCourseScore( const Course* pCourse, const Trail* pTrail, PlayerNumber pn, const HighScore &hs_, int &iPersonalIndexOut, int &iMachineIndexOut )
|
||||
{
|
||||
HighScore hs = hs_;
|
||||
@@ -686,7 +684,7 @@ void ProfileManager::AddCourseScore( const Course* pCourse, const Trail* pTrail,
|
||||
iMachineIndexOut = -1;
|
||||
|
||||
// In event mode, set the score's name immediately to the Profile's last
|
||||
// used name. If no profile last used name exists, use "EVNT".
|
||||
// used name. If no profile last used name exists, use "EVNT".
|
||||
if( GAMESTATE->IsEventMode() )
|
||||
{
|
||||
Profile* pProfile = GetProfile(pn);
|
||||
@@ -700,10 +698,7 @@ void ProfileManager::AddCourseScore( const Course* pCourse, const Trail* pTrail,
|
||||
hs.SetName( RANKING_TO_FILL_IN_MARKER[pn] );
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// save high score
|
||||
//
|
||||
if( IsPersistentProfile(pn) )
|
||||
GetProfile(pn)->AddCourseHighScore( pCourse, pTrail, hs, iPersonalIndexOut );
|
||||
if( hs.GetPercentDP() >= PREFSMAN->m_fMinPercentageForMachineCourseHighScore )
|
||||
@@ -724,10 +719,7 @@ void ProfileManager::IncrementCoursePlayCount( const Course* pCourse, const Trai
|
||||
GetMachineProfile()->IncrementCoursePlayCount( pCourse, pTrail );
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Category stats
|
||||
//
|
||||
void ProfileManager::AddCategoryScore( StepsType st, RankingCategory rc, PlayerNumber pn, const HighScore &hs_, int &iPersonalIndexOut, int &iMachineIndexOut )
|
||||
{
|
||||
HighScore hs = hs_;
|
||||
@@ -804,7 +796,6 @@ int ProfileManager::GetNumLocalProfiles() const
|
||||
return g_vLocalProfile.size();
|
||||
}
|
||||
|
||||
|
||||
// lua start
|
||||
#include "LuaBinding.h"
|
||||
|
||||
@@ -828,7 +819,6 @@ public:
|
||||
static int GetLocalProfileIDFromIndex( T* p, lua_State *L ) { lua_pushstring(L, p->GetLocalProfileIDFromIndex(IArg(1)) ); return 1; }
|
||||
static int GetLocalProfileIndexFromID( T* p, lua_State *L ) { lua_pushnumber(L, p->GetLocalProfileIndexFromID(SArg(1)) ); return 1; }
|
||||
static int GetNumLocalProfiles( T* p, lua_State *L ) { lua_pushnumber(L, p->GetNumLocalProfiles() ); return 1; }
|
||||
//static int GetProfileDirectoryForPlayer( T* p, lua_State *L ) { lua_pushstring(L, m_sProfileDir[Enum::Check<PlayerNumber>(L, 1)] ) return 1; }
|
||||
static int GetProfileDir( T* p, lua_State *L ) { lua_pushstring(L, p->GetProfileDir(Enum::Check<ProfileSlot>(L, 1)) ); return 1; }
|
||||
static int IsSongNew( T* p, lua_State *L ) { lua_pushboolean(L, p->IsSongNew(Luna<Song>::check(L,1)) ); return 1; }
|
||||
|
||||
@@ -843,8 +833,7 @@ public:
|
||||
ADD_METHOD( GetLocalProfileIDFromIndex );
|
||||
ADD_METHOD( GetLocalProfileIndexFromID );
|
||||
ADD_METHOD( GetNumLocalProfiles );
|
||||
//ADD_METHOD( GetProfileDirectoryForPlayer ); // uses PlayerNumber
|
||||
ADD_METHOD( GetProfileDir ); // uses ProfileSlot
|
||||
ADD_METHOD( GetProfileDir );
|
||||
ADD_METHOD( IsSongNew );
|
||||
}
|
||||
};
|
||||
|
||||
@@ -20,7 +20,6 @@ StreamDisplay::StreamDisplay()
|
||||
m_fVelocity = 0;
|
||||
m_fPassingAlpha = 0;
|
||||
m_fHotAlpha = 0;
|
||||
m_fThreePartWidth = 0;
|
||||
m_bAlwaysBounce = false;
|
||||
}
|
||||
|
||||
@@ -33,13 +32,8 @@ void StreamDisplay::Load( const RString &_sMetricsGroup )
|
||||
|
||||
float fTextureCoordScaleX = THEME->GetMetricF(sMetricsGroup,"TextureCoordScaleX");
|
||||
int iNumPills = THEME->GetMetricF(sMetricsGroup,"NumPills");
|
||||
m_bUsingThreePart = THEME->GetMetricB(sMetricsGroup,"UseThreePartMethod");
|
||||
m_bAlwaysBounce = THEME->GetMetricB(sMetricsGroup,"AlwaysBounceNormalBar");
|
||||
|
||||
// three part method only uses 3 pills
|
||||
if(iNumPills != 3)
|
||||
m_bUsingThreePart = false;
|
||||
|
||||
FOREACH_ENUM( StreamType, st )
|
||||
{
|
||||
ASSERT( m_vpSprPill[st].empty() );
|
||||
@@ -48,35 +42,15 @@ void StreamDisplay::Load( const RString &_sMetricsGroup )
|
||||
{
|
||||
Sprite *pSpr = new Sprite;
|
||||
|
||||
if( m_bUsingThreePart )
|
||||
{
|
||||
pSpr->Load( THEME->GetPathG( sMetricsGroup, ssprintf("%s part%d",StreamTypeToString(st).c_str(),i) ) );
|
||||
|
||||
if(pSpr->GetNumStates() > 1)
|
||||
{
|
||||
pSpr->SetAllStateDelays( THEME->GetMetricF( sMetricsGroup, ssprintf("%spart%ddelay",StreamTypeToString(st).c_str(),i) ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
pSpr->Load( THEME->GetPathG( sMetricsGroup, StreamTypeToString(st) ) );
|
||||
pSpr->Load( THEME->GetPathG( sMetricsGroup, StreamTypeToString(st) ) );
|
||||
m_vpSprPill[st].push_back( pSpr );
|
||||
|
||||
if( !m_bUsingThreePart )
|
||||
{
|
||||
m_transformPill.TransformItemDirect( *pSpr, -1, i, iNumPills );
|
||||
float f = 1 / fTextureCoordScaleX;
|
||||
pSpr->SetCustomTextureRect( RectF(f*i,0,f*(i+1),1) );
|
||||
}
|
||||
m_transformPill.TransformItemDirect( *pSpr, -1, i, iNumPills );
|
||||
float f = 1 / fTextureCoordScaleX;
|
||||
pSpr->SetCustomTextureRect( RectF(f*i,0,f*(i+1),1) );
|
||||
|
||||
this->AddChild( pSpr );
|
||||
}
|
||||
|
||||
if( m_bUsingThreePart )
|
||||
{
|
||||
m_fThreePartWidth = THEME->GetMetricF( sMetricsGroup, "ThreePartWidth" );
|
||||
// first element positioned depending on metric width specified
|
||||
m_vpSprPill[st][0]->AddX( -(m_fThreePartWidth/2 + m_vpSprPill[st][0]->GetZoomedWidth()/2) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,28 +105,9 @@ void StreamDisplay::Update( float fDeltaSecs )
|
||||
|
||||
// XXX scale by current song speed
|
||||
|
||||
if( !m_bUsingThreePart ) // usual lifebar
|
||||
{
|
||||
pSpr->SetCropRight( 1.0f - fPercentFilledThisPill );
|
||||
pSpr->SetTexCoordVelocity( -1, 0 );
|
||||
}
|
||||
else // using the three-part method
|
||||
{
|
||||
pSpr->SetCropRight( 1.0f - fPercentFilledThisPill );
|
||||
pSpr->SetTexCoordVelocity( -1, 0 );
|
||||
|
||||
if( i==1 ) // middle pill
|
||||
{
|
||||
float fMiddleWidth = m_fThreePartWidth * m_fTrailingPercent;
|
||||
pSpr->ZoomToWidth( fMiddleWidth );
|
||||
|
||||
float fMiddleX = m_vpSprPill[st][0]->GetX() + ( fMiddleWidth/2 ) + ( m_vpSprPill[st][0]->GetZoomedWidth()/2 );
|
||||
pSpr->SetX( fMiddleX );
|
||||
}
|
||||
else if( i!=0 ) // last pill
|
||||
{
|
||||
float fEndX = m_vpSprPill[st][1]->GetX() + ( m_vpSprPill[st][1]->GetZoomedWidth()/2 ) + ( pSpr->GetZoomedWidth()/2 );
|
||||
pSpr->SetX( fEndX );
|
||||
}
|
||||
}
|
||||
// Optimization: Don't draw pills that are covered up
|
||||
switch( st )
|
||||
{
|
||||
|
||||
@@ -15,7 +15,6 @@ enum StreamType
|
||||
NUM_StreamType,
|
||||
};
|
||||
|
||||
|
||||
class StreamDisplay : public ActorFrame
|
||||
{
|
||||
public:
|
||||
@@ -43,9 +42,6 @@ private:
|
||||
float m_fPassingAlpha;
|
||||
float m_fHotAlpha;
|
||||
|
||||
bool m_bUsingThreePart;
|
||||
|
||||
float m_fThreePartWidth;
|
||||
bool m_bAlwaysBounce;
|
||||
};
|
||||
|
||||
|
||||
@@ -120,12 +120,16 @@ public:
|
||||
static int GetName( T* p, lua_State *L ) { LuaHelpers::Push( L, (RString) p->m_szName ); return 1; }
|
||||
DEFINE_METHOD( GetStyleType, m_StyleType )
|
||||
DEFINE_METHOD( GetStepsType, m_StepsType )
|
||||
DEFINE_METHOD( ColumnsPerPlayer, m_iColsPerPlayer )
|
||||
DEFINE_METHOD( NeedsZoomOutWith2Players, m_bNeedsZoomOutWith2Players )
|
||||
|
||||
LunaStyle()
|
||||
{
|
||||
ADD_METHOD( GetName );
|
||||
ADD_METHOD( GetStyleType );
|
||||
ADD_METHOD( GetStepsType );
|
||||
ADD_METHOD( ColumnsPerPlayer );
|
||||
ADD_METHOD( NeedsZoomOutWith2Players );
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -19,15 +19,15 @@ struct lua_State;
|
||||
class Style
|
||||
{
|
||||
public:
|
||||
bool m_bUsedForGameplay; // Can be used only for gameplay?
|
||||
bool m_bUsedForEdit; // Can be used for editing?
|
||||
bool m_bUsedForDemonstration; // Can be used for demonstration?
|
||||
bool m_bUsedForHowToPlay; // Can be used for HowToPlay?
|
||||
bool m_bUsedForGameplay; // Can be used only for gameplay?
|
||||
bool m_bUsedForEdit; // Can be used for editing?
|
||||
bool m_bUsedForDemonstration; // Can be used for demonstration?
|
||||
bool m_bUsedForHowToPlay; // Can be used for HowToPlay?
|
||||
|
||||
/* The name of the style. (This is currently unused.) */
|
||||
// The name of the style. (This is currently unused.)
|
||||
const char * m_szName;
|
||||
|
||||
/* Steps format used for each player. For example, "dance versus" reads
|
||||
/* Steps format used for each player. For example, "dance versus" reads
|
||||
* the Steps with the tag "dance-single". */
|
||||
StepsType m_StepsType;
|
||||
|
||||
@@ -36,21 +36,21 @@ public:
|
||||
int m_iColsPerPlayer; // number of total tracks this style expects (e.g. 4 for versus, but 8 for double)
|
||||
struct ColumnInfo
|
||||
{
|
||||
int track; // take note data from this track
|
||||
float fXOffset; // x position of the column relative to player center
|
||||
const char *pzName; // name of this column, or NULL to use the name of a button mapped to it
|
||||
int track; // take note data from this track
|
||||
float fXOffset; // x position of the column relative to player center
|
||||
const char *pzName; // name of this column, or NULL to use the name of a button mapped to it
|
||||
};
|
||||
|
||||
ColumnInfo m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER]; // maps each players' column to a track in the NoteData
|
||||
|
||||
/* This maps from game inputs to columns. More than one button may map to a
|
||||
/* This maps from game inputs to columns. More than one button may map to a
|
||||
* single column. */
|
||||
enum { NO_MAPPING = -1, END_MAPPING = -2 };
|
||||
int m_iInputColumn[NUM_GameController][NUM_GameButton]; // maps each input to a column, or GameButton_Invalid
|
||||
int m_iColumnDrawOrder[MAX_COLS_PER_PLAYER];
|
||||
bool m_bNeedsZoomOutWith2Players;
|
||||
bool m_bCanUseBeginnerHelper;
|
||||
bool m_bLockDifficulties; // used in couple Styles
|
||||
bool m_bNeedsZoomOutWith2Players;
|
||||
bool m_bCanUseBeginnerHelper;
|
||||
bool m_bLockDifficulties; // used in couple Styles
|
||||
|
||||
GameInput StyleInputToGameInput( int iCol, PlayerNumber pn ) const;
|
||||
// Returns Column_Invalid if the input is an invalid column, such as UL corner in 4 pad mode
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
*/
|
||||
|
||||
static ThemeMetric<bool> SHOW_TRAINING ("WheelNotifyIcon","ShowTraining");
|
||||
static ThemeMetric<bool> BLINK_BEST_ICON ("WheelNotifyIcon","BlinkPlayersBest");
|
||||
|
||||
WheelNotifyIcon::WheelNotifyIcon()
|
||||
{
|
||||
@@ -49,15 +50,16 @@ void WheelNotifyIcon::SetFlags( Flags flags )
|
||||
m_vIconsToShow.push_back( training );
|
||||
|
||||
|
||||
// HACK: Make players best blink if it's the only icon
|
||||
// TODO: metric this. use m_bPlayersBestHack as variable name, lol -aj
|
||||
if( m_vIconsToShow.size() == 1 )
|
||||
// If BLINK_BEST_ICON, make player's best icon blink if it's the only icon.
|
||||
if( m_vIconsToShow.size() == 1 && BLINK_BEST_ICON )
|
||||
{
|
||||
if( m_vIconsToShow[0] >= best1 && m_vIconsToShow[0] <= best3 )
|
||||
m_vIconsToShow.push_back( empty );
|
||||
}
|
||||
|
||||
m_vIconsToShow.resize( min(m_vIconsToShow.size(),2u) ); // crop to most important 2
|
||||
// crop to most important 2
|
||||
// todo: Let themer handle this? -aj
|
||||
m_vIconsToShow.resize( min(m_vIconsToShow.size(),2u) );
|
||||
|
||||
// Broadcast Set message so items can react. (futures) -aj
|
||||
//Message msg("Set");
|
||||
|
||||