Attract-Mode Support Forum
Attract-Mode Support => Scripting => Topic started by: Brass on May 17, 2015, 07:12:43 AM
-
If i set a UserConfig variable in a layout and set the same layout on multiple "displays", if i change the value of this variable on a display, it changes on all displays.
But this makes no sense, to make the variables are global? You will usually want to set something on a "display", not in the layout.
For example if I want to have a variable with a color or a logo in a layout, and I want every display has a color / different to identify the list / system that is logo, can not, I'm tied because of the variables are global.
This is my case, I have a variable to put a logo for each display system / emulator. But I can not for this restriction, I am forced to make a different layout changing only one line of code in each.
-
I'm not sure if I am understanding correctly your use of the UserConfig variable, but changing a logo or color based on the list/system/game is possible via code in your layout using transitions:
Per List:
local logo = fe.add_image("default.png", 0, 100, 640, 360);
local text = fe.add_text("[Title]", 0, 25, fe.layout.width, 72);
function transition_callback(ttype, var, ttime)
{
switch ( ttype )
{
case Transition.ToNewList:
switch ( fe.list.name )
{
case "Mame":
logo.file_name = "mame.png";
break;
case "SNES":
logo.file_name = "snes.png";
break;
}
break;
}
}
fe.add_transition_callback("transition_callback" );
Per Game:
local logo = fe.add_image("default.png", 0, 100, 640, 360);
local text = fe.add_text("[Title]", 0, 25, fe.layout.width, 72);
function transition_callback(ttype, var, ttime)
{
switch ( ttype )
{
case Transition.ToNewSelection:
local selected = fe.game_info(Info.Emulator, var);
switch ( selected )
{
case "mame":
logo.file_name = "mame.png";
break;
case "zsnes":
logo.file_name = "snes.png";
break;
}
break;
}
}
fe.add_transition_callback("transition_callback" );
For either as shown above, you could use list info:
name - Get the name of the current display.
filter_index - Get/set the index of the currently selected filter. (see fe.filters for the list of available filters).
index - Get/set the index of the currently selected game.
Or game_info:
Info.Name
Info.Title
Info.Emulator
Info.CloneOf
Info.Year
Info.Manufacturer
Info.Category
Info.Players
Info.Rotation
Info.Control
Info.Status
Info.DisplayCount
Info.DisplayType
Info.AltRomname
Info.AltTitle
Info.Extra
Info.Favourite
Info.Tags
Info.PlayedCount
Info.PlayedTime
Info.FileIsAvailable
Info.System
-
If i set a UserConfig variable in a layout and set the same layout on multiple "displays", if i change the value of this variable on a display, it changes on all displays.
But this makes no sense, to make the variables are global? You will usually want to set something on a "display", not in the layout.
For example if I want to have a variable with a color or a logo in a layout, and I want every display has a color / different to identify the list / system that is logo, can not, I'm tied because of the variables are global.
This is my case, I have a variable to put a logo for each display system / emulator. But I can not for this restriction, I am forced to make a different layout changing only one line of code in each.
Hi Brass, yes the user configuration variables are "global" for each layout.
This behaviour is a consequence of the fact that Attract-Mode doesn't actually reload the layout as you cycle through "displays" that have the same layout set. SO for example, if you have the attrac-man layout going, the game keeps playing as you navigate through your various displays. In this scenario, there was no easy way to update the layout with different user configuration variables without reloading the entire layout (and resetting where the game is at).
As you note there are workarounds. You can simply copy the layout into another folder and then have different settings for each copy. You could also look at using symbolic links instead of actually copying the files over: http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/
-
I'm trying to do something like this. I can't seem to get a layout change a logo based on the emulator of the romlist. Has anyone got this working? Thanks