use LuaThreadVariable

This commit is contained in:
Glenn Maynard
2006-11-02 05:42:47 +00:00
parent 592c27996d
commit 524b2418c7
13 changed files with 36 additions and 43 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
<ActorFrame><children> <ActorFrame><children>
<AutoActor <AutoActor
File="File1" File="Var 'File1'"
OnCommand="x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y" OnCommand="x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y"
/> />
</children></ActorFrame> </children></ActorFrame>
@@ -1,6 +1,6 @@
<ActorFrame><children> <ActorFrame><children>
<AutoActor File="File1" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" /> <AutoActor File="Var 'File1'" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" />
<AutoActor File="File1" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" /> <AutoActor File="Var 'File1'" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" />
<AutoActor File="File1" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" /> <AutoActor File="Var 'File1'" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" />
<AutoActor File="File1" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" /> <AutoActor File="Var 'File1'" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" />
</children></ActorFrame> </children></ActorFrame>
@@ -1,6 +1,6 @@
<ActorFrame><children> <ActorFrame><children>
<AutoActor File="File1" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" /> <AutoActor File="Var 'File1'" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" />
<AutoActor File="File2" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" /> <AutoActor File="Var 'File2'" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" />
<AutoActor File="File2" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" /> <AutoActor File="Var 'File2'" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" />
<AutoActor File="File1" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" /> <AutoActor File="Var 'File1'" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" />
</children></ActorFrame> </children></ActorFrame>
@@ -1,6 +1,6 @@
<ActorFrame><children> <ActorFrame><children>
<AutoActor File="File1" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" /> <AutoActor File="Var 'File1'" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2" />
<AutoActor File="File1" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;zoomx,self:GetZoomX()*-1" /> <AutoActor File="Var 'File1'" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(1,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;zoomx,self:GetZoomX()*-1" />
<AutoActor File="File1" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;zoomy,self:GetZoomY()*-1" /> <AutoActor File="Var 'File1'" OnCommand="x,scale(1,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;zoomy,self:GetZoomY()*-1" />
<AutoActor File="File1" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;zoomx,self:GetZoomX()*-1;zoomy,self:GetZoomY()*-1" /> <AutoActor File="Var 'File1'" OnCommand="x,scale(3,0,4,SCREEN_LEFT,SCREEN_RIGHT);y,scale(3,0,4,SCREEN_TOP,SCREEN_BOTTOM);zoomtowidth,SCREEN_WIDTH/2;zoomtoheight,SCREEN_HEIGHT/2;zoomx,self:GetZoomX()*-1;zoomy,self:GetZoomY()*-1" />
</children></ActorFrame> </children></ActorFrame>
@@ -1,12 +1,12 @@
<ActorFrame><children> <ActorFrame><children>
<Layer <Layer
Type="@Sprite" Type="@Sprite"
InitCommand="%function(self) self:LoadBackground( GAMESTATE:GetCurrentSong():GetBackgroundPath() ) self.Color = Color1 end" InitCommand="%function(self) self:LoadBackground( GAMESTATE:GetCurrentSong():GetBackgroundPath() ) self.Color = Var 'Color1' end"
OnCommand="x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;ZoomToWidth,SCREEN_WIDTH;ZoomToHeight,SCREEN_HEIGHT;diffuse,color(self.Color)" OnCommand="x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;ZoomToWidth,SCREEN_WIDTH;ZoomToHeight,SCREEN_HEIGHT;diffuse,color(self.Color)"
/> />
<Layer <Layer
File="File1" File="Var 'File1'"
InitCommand="%function(self) self:pause(); self.Color = Color2; end" InitCommand="%function(self) self:pause(); self.Color = Var 'Color2'; end"
OnCommand="blend,add;x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;ZoomToWidth,SCREEN_WIDTH;ZoomToHeight,SCREEN_HEIGHT;diffuse,color(self.Color)" OnCommand="blend,add;x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y;ZoomToWidth,SCREEN_WIDTH;ZoomToHeight,SCREEN_HEIGHT;diffuse,color(self.Color)"
GainFocusCommand="Play" GainFocusCommand="Play"
LoseFocusCommand="Pause" LoseFocusCommand="Pause"
@@ -1,6 +1,6 @@
<ActorFrame><children> <ActorFrame><children>
<AutoActor <AutoActor
File="File1" File="Var 'File1'"
OnCommand="scale_or_crop_background;loop,0" OnCommand="scale_or_crop_background;loop,0"
/> />
</children></ActorFrame> </children></ActorFrame>
@@ -1,7 +1,7 @@
<ActorFrame><children> <ActorFrame><children>
<Layer <Layer
File="File1" File="Var 'File1'"
InitCommand="%function(self) self.Color = Color1; end" InitCommand="%function(self) self.Color = Var 'Color1'; end"
OnCommand="scale_or_crop_background;diffuse,color(self.Color)" OnCommand="scale_or_crop_background;diffuse,color(self.Color)"
GainFocusCommand="Play" GainFocusCommand="Play"
LoseFocusCommand="Pause" LoseFocusCommand="Pause"
@@ -1,8 +1,8 @@
<!-- Align left when cropping to 4:3. Avoid this; it's not compatible with PS2 movie pre-rendering. --> <!-- Align left when cropping to 4:3. Avoid this; it's not compatible with PS2 movie pre-rendering. -->
<ActorFrame><children> <ActorFrame><children>
<Layer <Layer
File="File1" File="Var 'File1'"
InitCommand="%function(self) self.Color = Color1; end" InitCommand="%function(self) self.Color = Var 'Color1'; end"
OnCommand="horizalign,left;scaletocover,0,0,SCREEN_WIDTH,SCREEN_HEIGHT;diffuse,color(self.Color)" OnCommand="horizalign,left;scaletocover,0,0,SCREEN_WIDTH,SCREEN_HEIGHT;diffuse,color(self.Color)"
GainFocusCommand="Play" GainFocusCommand="Play"
LoseFocusCommand="Pause" LoseFocusCommand="Pause"
@@ -1,6 +1,6 @@
<ActorFrame><children> <ActorFrame><children>
<AutoActor <AutoActor
File="File1" File="Var 'File1'"
OnCommand="scale_or_crop_background;Pause" OnCommand="scale_or_crop_background;Pause"
/> />
</children></ActorFrame> </children></ActorFrame>
@@ -1,6 +1,6 @@
<ActorFrame><children> <ActorFrame><children>
<AutoActor <AutoActor
File="File1" File="Var 'File1'"
OnCommand="scale_or_crop_background;position,0" OnCommand="scale_or_crop_background;position,0"
/> />
</children></ActorFrame> </children></ActorFrame>
+1 -1
View File
@@ -1,4 +1,4 @@
<ActorFrame><children> <ActorFrame><children>
<!-- upper left corner --> <!-- upper left corner -->
<AutoActor File="File1" /> <AutoActor File="Var 'File1'" />
</children></ActorFrame> </children></ActorFrame>
+8 -16
View File
@@ -295,12 +295,13 @@ bool BackgroundImpl::Layer::CreateBackground( const Song *pSong, const Backgroun
vector<RString> vsResolved; vector<RString> vsResolved;
vsResolved.resize( vsToResolve.size() ); vsResolved.resize( vsToResolve.size() );
vector<LuaThreadVariable *> vsResolvedRef;
vsResolvedRef.resize( vsToResolve.size() );
for( unsigned i=0; i<vsToResolve.size(); i++ ) for( unsigned i=0; i<vsToResolve.size(); i++ )
{ {
const RString &sToResolve = vsToResolve[i]; const RString &sToResolve = vsToResolve[i];
LUA->UnsetGlobal( ssprintf("File%d",i+1) ); // clear
if( sToResolve.empty() ) if( sToResolve.empty() )
{ {
if( i == 0 ) if( i == 0 )
@@ -341,7 +342,7 @@ bool BackgroundImpl::Layer::CreateBackground( const Song *pSong, const Backgroun
ASSERT( !sResolved.empty() ); ASSERT( !sResolved.empty() );
LUA->SetGlobal( ssprintf("File%d",i+1), sResolved ); vsResolvedRef[i] = new LuaThreadVariable( ssprintf("File%d",i+1), sResolved );
} }
RString sEffect = bd.m_sEffect; RString sEffect = bd.m_sEffect;
@@ -369,8 +370,8 @@ bool BackgroundImpl::Layer::CreateBackground( const Song *pSong, const Backgroun
// Set Lua color globals // Set Lua color globals
LUA->SetGlobal( "Color1", bd.m_sColor1.empty() ? RString("1,1,1,1") : bd.m_sColor1 ); LuaThreadVariable sColor1( "Color1", bd.m_sColor1.empty() ? RString("1,1,1,1") : bd.m_sColor1 );
LUA->SetGlobal( "Color2", bd.m_sColor2.empty() ? RString("1,1,1,1") : bd.m_sColor2 ); LuaThreadVariable sColor2( "Color2", bd.m_sColor2.empty() ? RString("1,1,1,1") : bd.m_sColor2 );
// Resolve the effect file. // Resolve the effect file.
@@ -403,10 +404,8 @@ bool BackgroundImpl::Layer::CreateBackground( const Song *pSong, const Backgroun
ASSERT( pActor ); ASSERT( pActor );
m_BGAnimations[bd] = pActor; m_BGAnimations[bd] = pActor;
for( unsigned i=0; i<vsResolved.size(); i++ ) for( unsigned i=0; i<vsResolvedRef.size(); i++ )
LUA->UnsetGlobal( ssprintf("File%d",i+1) ); delete vsResolvedRef[i];
LUA->UnsetGlobal( "Color1" );
LUA->UnsetGlobal( "Color2" );
return true; return true;
} }
@@ -805,17 +804,10 @@ void BackgroundImpl::Layer::UpdateCurBGChange( const Song *pSong, float fLastMus
m_pCurrentBGA->SetUpdateRate( change.m_fRate ); m_pCurrentBGA->SetUpdateRate( change.m_fRate );
// Set Lua color globals before calling Init and On
LUA->SetGlobal( "Color1", change.m_def.m_sColor1.empty() ? RString("1,1,1,1") : change.m_def.m_sColor1 );
LUA->SetGlobal( "Color2", change.m_def.m_sColor2.empty() ? RString("1,1,1,1") : change.m_def.m_sColor2 );
m_pCurrentBGA->InitState(); m_pCurrentBGA->InitState();
m_pCurrentBGA->PlayCommand( "On" ); m_pCurrentBGA->PlayCommand( "On" );
m_pCurrentBGA->PlayCommand( "GainFocus" ); m_pCurrentBGA->PlayCommand( "GainFocus" );
LUA->UnsetGlobal( "Color1" );
LUA->UnsetGlobal( "Color2" );
/* How much time of this BGA have we skipped? (This happens with SetSeconds.) */ /* How much time of this BGA have we skipped? (This happens with SetSeconds.) */
const float fStartSecond = pSong->m_Timing.GetElapsedTimeFromBeat( change.m_fStartBeat ); const float fStartSecond = pSong->m_Timing.GetElapsedTimeFromBeat( change.m_fStartBeat );
+4 -3
View File
@@ -124,9 +124,10 @@ namespace ScreenManagerUtil
g_ScreenStack.push_back( ls ); g_ScreenStack.push_back( ls );
/* Set the name of the loading screen. */ /* Set the name of the loading screen. */
LUA->SetGlobal( "LoadingScreen", ls.m_pScreen->GetName() ); {
ls.m_pScreen->BeginScreen(); LuaThreadVariable var( "LoadingScreen", ls.m_pScreen->GetName() );
LUA->UnsetGlobal( "LoadingScreen" ); ls.m_pScreen->BeginScreen();
}
SCREENMAN->RefreshCreditsMessages(); SCREENMAN->RefreshCreditsMessages();