Attract-Mode Support Forum
Attract-Mode Support => Scripting => Topic started by: BadFurDay on June 30, 2020, 02:50:11 PM
-
I have an idea and I've already made artwork for the theme. I've got a horizontal wheel using the conveyor helper module but it's not doing quite what I'd like. I have the artwork overlapping and would like the middle one pulled out more. Think a deck of cards fanned out, the card you want pulled out a bit more than the rest. I can get the artwork to overlap but the middle is on top, the images after this don't continue to stack on top they go behind each other. Can anyone help explain to me how to achieve this?
-
I believe wiiflow frontend for Nintendo Wii and Apples abandoned coverflow for Mac osx have a similar style to what you are describing. Sharing your code would help.
-
not to shure, but isant "orbit" set up this way....if that helps you
-
I'm using the horizontal demo from conveyor module with numbers/sizes/positions modified. I'll also attach a screenshot of how it looks and another of how I'd like it to look mocked up in Gimp:
// Include the converyour helper module
fe.load_module("conveyor_helper");
/*
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Horizontal List Demo
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
A horizontal List with all valid options
Omitted options will use the defaults
*/
// initialize the horizontal list
local hList = MyGameList();
// ----------- General List Options -----------
hList.type = ch.Linear_Horizontal; // OPTIONS: ch.Spinwheel / ch.Linear_Vertical / ch.Linear_Horizontal
hList.bend.direction = ch.Right; // OPTIONS: ch.Left / ch.Right
hList.x = -400; // OPTIONS: top left x-coordinate if gamelist is linear or the center x-coordinate if a spinwheel
hList.y = 0; // OPTIONS: top left y-coordinate if gamelist is linear or the center y-coordinate if a spinwheel
hList.width = 2400; // OPTIONS: linear game list total width in pixels
hList.height = 1080; // OPTIONS: linear list's height in pixels
hList.ms_speed = 250; // OPTIONS: in milliseconds, sets the speed of the conveyor
hList.fade_after_nav = 255; // OPTIONS: 0-255 Fades the entire gamelist's alpha channel after navigation to this value. set to 255 to disable fading
hList.fade_delay = 1000; // the amount of time in milliseconds before the fade should start
hList.fade_speed = 1; // the mulitplier controlling the speed of the fade
hList.fade_selected = false; // OPTIONS: TRUE/FALSE fade selected game if gamelist fading is active
// ----------- Linear List options -----------
hList.linear.padding = -400; // the amount of padding in pixels between each gamelist item
// ----------- List Item Options -----------
hList.item.contentTemplate = ch.Artwork; // OPTIONS: ch.Artwork / ch.Text / ch.Artwork_and_Text / ch.Artwork_or_Text / ch.Flyer_and_Artwork
hList.item.count = 9; // OPTIONS: Total number of gamelist items to display
hList.item.sizeScaling.low = 1.00; // OPTIONS: 0-100 Scaling size percentage to use for the item furthest from the selected item
hList.item.sizeScaling.high = 1.00; // OPTIONS: 0-100 Scaling size percentage to use for item closest to the selected item
hList.item.sizeScaling.currentlySelected = 1.0; // OPTIONS: 0-100 Scaling size percentage to use for the currently selected item
hList.item.alphaScaling.low = 255; // OPTIONS: 0-100 Scaling size percentage to use for the item furthest from the selected item
hList.item.alphaScaling.high = 255; // OPTIONS: 0-100 Scaling size percentage to use for item closest to the selected item
hList.item.alphaScaling.currentlySelected = 255; // OPTIONS: 0-100 Scaling size percentage to use for the currently selected item
hList.item.height = 1080; // OPTIONS: Height of each gameList item in pixels before scaling - dynamic with linear vertical lists
hList.item.width = 750; // OPTIONS: Width of each gameList item in pixels before scaling - dynamic with linear horizontal lists
hList.item.margin.left = 0; // OPTION: bounding box left margin size for all images and text
hList.item.margin.right = 12; // OPTION: bounding box right margin size for all images and text
hList.item.margin.top = 12; // OPTION: bounding box top margin size for all images and text
hList.item.margin.bottom = 12; // OPTION: bounding box bottom margin size for all images and text
// ----------- List Item Content: borders / backgrounds / gloss / colors -----------
hList.item.toggle.backgroundColor = false; // if set to "TRUE" the game item background can be colored (use item.normal.color)
hList.item.toggle.backgroundFile = false; // if set to "TRUE" the game item will use a file as the background (file: item_backgroundFile.png)
hList.item.toggle.selectedBackgroundColor = false; // if set to "TRUE" the selected game item background can be colored (use item.currentlySelected.color)
hList.item.toggle.selectedBackgroundFile = false; // if set to "TRUE" the selected game item will use a file as the background (file: item_selectedBackgroundFile.png)
hList.item.toggle.glossOverlay = false; // if set to "TRUE" will overlay the game item with a gloss file (file: item_glossOverlay.png)
hList.item.toggle.borderOverlay = false; // if set to "TRUE" will overlay the game item with a boarder file (file: item_borderOverlay.png)
hList.item.normal.color.red = 255; // OPTIONS: background red color channel 0 - 255
hList.item.normal.color.green = 0; // OPTIONS: background green color channel 0 - 255
hList.item.normal.color.blue = 0; // OPTIONS: background blue color channel 0 - 255
hList.item.currentlySelected.color.red=0; // OPTIONS: background red color channel 0 - 255
hList.item.currentlySelected.color.green=0; // OPTIONS: background green color channel 0 - 255
hList.item.currentlySelected.color.blue=0; // OPTIONS: background blue color channel 0 - 255
// ----------- List Item Content: Text -----------
hList.text.message = "[Title]";
hList.text.alignment = Align.Centre; // OPTIONS:left/right/center
hList.text.normal.font = "Arial";
hList.text.normal.size = 18; // OPTIONS: text font size for every gameList item
hList.text.normal.color.red = 0; // OPTIONS: text font red color channel 0 - 255
hList.text.normal.color.green = 0; // OPTIONS: text font green color channel 0 - 255
hList.text.normal.color.blue = 255; // OPTIONS: text font blue color channel 0 - 255
hList.text.currentlySelected.font = "Arial";
hList.text.currentlySelected.size = 24; // OPTIONS: text font size for every gameList item
hList.text.currentlySelected.color.red = 0; // OPTIONS: text font red color channel 0 - 255
hList.text.currentlySelected.color.green = 0; // OPTIONS: text font green color channel 0 - 255
hList.text.currentlySelected.color.blue = 0; // OPTIONS: text font blue color channel 0 - 255
// ----------- List Item Content: User Defined Artwork -----------
hList.artwork.type = "wheel"; // OPTIONS: name of the artwork to use for the conveyour
hList.artwork.type2 = "snap"; // OPTIONS: name of the artwork to use for the conveyour setting "Flyer_and_Artwork"
hList.artwork.preserveAspect = true; // OPTIONS: true / false
//---------------------------------------------------------
//
// Configure a custom game item instead of using the built
// in settings
//
//---------------------------------------------------------
if (hList.item.contentTemplate == ch.Custom)
{
local object = hList;
local temp = null;
local x = 0
local y = 0
local w = object.item.width
local h = object.item.height
//--------------------------------------------------------------------------------
// The Artwork and text object order is important because it determines the
// correct working of the text fallback function when artwork is not available.
// If the automatic process does not handle this correctly, it can specifically be
// set using the properties: 'text_fallback_index' and 'artwork_text_index'.
// The index numbers are calculate using the example below.
//--------------------------------------------------------------------------------
// Artwork index #2 - Flyer frame (Artwork index 0 & 1 are always background and selected images)
temp = object.add_customGameItemContent("image", fe.script_dir + "frameflyer.png", 8 , 0 , w-16 ,h );
temp.preserve_aspect_ratio = true;
temp.trigger = Transition.EndNavigation;
// Artwork index #3 - Game Flyer
temp = object.add_customGameItemContent("artwork", "flyer", 20 , 20 , w-40 ,h-40 );
temp.preserve_aspect_ratio = true;
temp.trigger = Transition.EndNavigation;
// Text index #0 - the word 'AttractMode Test' just written to the left of the flyer
temp = object.add_customGameItemContent("text", "AttractMode Test", x + object.text.normal.size/2, 10, h, 0);
temp.font = object.text.normal.font;
temp.align = Align.Left;
temp.charsize = 12;
temp.rotation = 90;
// Artwork index #4 - show a video of the game and set the shader
temp = object.add_customGameItemContent("artwork", "snap", w - w*0.40 , h - h*0.30 , w*0.40 ,h*0.30 );
temp.preserve_aspect_ratio = true;
temp.trigger = Transition.EndNavigation;
local sh = fe.add_shader( Shader.VertexAndFragment, "shaders/crt.vert", "shaders/crt.frag" );
sh.set_param( "rubyInputSize", 320, 240 );
sh.set_param( "rubyOutputSize", ScreenWidth, ScreenHeight );
sh.set_param( "rubyTextureSize", 320, 240 );
sh.set_texture_param("rubyTexture");
temp.shader = sh;
// Artwork #5 - add tvframe to the video
temp = object.add_customGameItemContent("image","TVframe.png",w - w*0.40 , h - h*0.30 , w*0.40 ,h*0.30 )
// Text object #1 - this will be configured as the 'text_fallback_index' because it has the name of the game
temp = object.add_customGameItemContent("text", "[Title]", x, h*0.5, w, 0);
temp.font = object.text.normal.font;
temp.charsize = object.text.normal.size;
temp.align = object.text.alignment;
// insert Favorite Banner
object.add_favoriteImage(fe.script_dir + "favorite2.png", 8 , 2 , w-40 ,h-40);
// --------------------------------------------------------------------------------------------------------
// the next three settings are optional. Use gi_textFallback to activate the automatic showing of text,
// when artwork is not available for a game. The setting of 'text_fallback_index' and 'artwork_text_index'
// should only be used the automatic process is not working or the conveyour handling of the test is just wrong.
// --------------------------------------------------------------------------------------------------------
object.gi_textFallback = true;
object.text_fallback_index= 1; // text object to turn off/on when the "artwork_test_index" is not available
object.artwork_test_index = 3; // test for this artwork index if the game text should be shown
}
// show the horizontal list
hList.show();
-
Can anyone help?
-
The 6 (six) is de middle.
local wheel = fe.load_module( "conveyor" );
# 1 2 3 4 5 â–º6â—„ 7 8 9 10
local wheel_x = [ flx*0, -flx*1.000, -flx*1.000, -flx*0.621, -flx*0.309, flx*0.003, flx*0.315, flx*0.747, flx*1.059, flx*1.371, flx*1.100, flx*1.100, ];
local wheel_y = [ fly*0, fly*0.448, fly*0.448, fly*0.448, fly*0.448, fly*0.448, fly*0.418, fly*0.448, fly*0.448, fly*0.448, fly*0.448, fly*0.448, ];
local wheel_w = [ flw*0, flw*0.250, flw*0.250, flw*0.250, flw*0.250, flw*0.250, flw*0.370, flw*0.250, flw*0.250, flw*0.250, flw*0.250, flw*0.250, ];
local wheel_h = [ flh*0, flh*0.160, flh*0.160, flh*0.160, flh*0.106, flh*0.106, flh*0.166, flh*0.106, flh*0.106, flh*0.106, flh*0.106, flh*0.106, ];
local wheel_r = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ];
local wheel_a = [ 0, 0, 0, 150, 150, 150, 255, 150, 150, 0, 0, 0, ];
local num_arts = 10;
class WheelEntry extends ConveyorSlot
{
constructor()
{
base.constructor( ::fe.add_artwork ( "wheel" ) );
}
function on_progress( progress, var )
{
local p = progress / 0.1;
local slot = p.tointeger();
p -= slot;
slot++;
if ( slot < 0 ) slot=0;
if ( slot >=13 ) slot=13;
m_obj.x = wheel_x[slot] + p * ( wheel_x[slot+1] - wheel_x[slot] );
m_obj.y = wheel_y[slot] + p * ( wheel_y[slot+1] - wheel_y[slot] );
m_obj.width = wheel_w[slot] + p * ( wheel_w[slot+1] - wheel_w[slot] );
m_obj.height = wheel_h[slot] + p * ( wheel_h[slot+1] - wheel_h[slot] );
m_obj.rotation = wheel_r[slot] + p * ( wheel_r[slot+1] - wheel_r[slot] );
m_obj.alpha = wheel_a[slot] + p * ( wheel_a[slot+1] - wheel_a[slot] );
}
};
local wheel_entries = [];
for ( local i=0; i<num_arts/2; i++ )
wheel_entries.push( WheelEntry() );
local remaining = num_arts - wheel_entries.len();
for ( local i=0; i<remaining; i++ )
wheel_entries.insert( num_arts/2, WheelEntry() );
local conveyor = Conveyor();
conveyor.set_slots( wheel_entries );
conveyor.transition_ms = 250;
try { conveyor.transition_ms = my_config["transition_ms"].tointeger(); } catch ( e ) { }
conveyor.preserve_aspect_ratio = true;