Attract-Mode Support Forum

Attract-Mode Support => Scripting => Topic started by: BadFurDay on June 30, 2020, 02:50:11 PM

Title: Need help with a theme idea
Post 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?
Title: Re: Need help with a theme idea
Post by: keilmillerjr on June 30, 2020, 04:23:53 PM
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.
Title: Re: Need help with a theme idea
Post by: jedione on June 30, 2020, 05:43:44 PM
not to shure,  but isant "orbit" set up this way....if that helps you
Title: Re: Need help with a theme idea
Post by: BadFurDay on July 01, 2020, 02:32:07 PM
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();
Title: Re: Need help with a theme idea
Post by: BadFurDay on July 26, 2020, 12:13:17 AM
Can anyone help?
Title: Re: Need help with a theme idea
Post by: Crismikiller on September 24, 2020, 02:17:31 PM
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;