#!/usr/bin/env lua5.1 require[[fp]] require[[fptheme]] require[[fpwidgets]] PIC_W = 200 PIC_H = PIC_W PIC_X = 100 PIC_Y = 100 bg = fp.image{ style = "background" } -- A predefined set of filenames. This could come from anywhere really, -- such as a database or the network. -- These images are all square. The transform effect only works on square -- images for the time being. filenames = { "cactus.jpg", "candy.jpg", "cloudy.jpg", "egg.jpg", "grass.jpg", "greenapple.jpg", "illy.jpg", "milk-orange.jpg", "pumpkins.jpg", "robot.jpg", "sandy.jpg", "shell.jpg", "spices.jpg", "splash1.jpg", "splash2.jpg", "stripey.jpg", "sunny.jpg", "yellowglasses.jpg" } -- Declare the images table. images = {} -- Lua tables start at 1. We go through each element in the filenames -- table, load the file and put it into an images table. -- Note there is no error checking in this simple example. for i = 1, #filenames do images[i] = fp.image{ file = "data/"..filenames[i], x = PIC_X, y = PIC_Y, w = PIC_W, h = PIC_H } end -- The layering of images is in reverse order because that's the way we -- loaded them. Images loaded later get put on a higher layer. We want -- to keep track of the bottom image in the stack as we will put the -- image at the bottom once the transformation is complete. current = #filenames bottom = 1 -- Set up a timer to run every 2 seconds. This runs the function to -- do the 3D effect on the image and then move it to the bottom -- of the stack. t = fp.timer (2, function() -- Get the current image -- Get a random direction. The roll direction can be -- 1 of 4, left, right, up and down. The peel direction -- can be 1 of 2, left and right. local img = images[current] local dir = math.random(1, 4) -- Randomly select which of the 3D effects to use. if math.random(1, 2) == 1 then -- The peel is a separate object that needs to be -- created. It takes a copy of the oringinal image. peel = fp.peel{ image = img, x = PIC_X, y = PIC_Y, w = PIC_W, h = PIC_H } -- This call executes the peel in the given direction. Directions for -- peels are diagonally left or right. peel:peel((dir % 2) + 1) else -- The roll is a separate object that needs to be -- created. It takes a copy of the oringinal image. roll = fp.roll{ image = img, x = PIC_X, y = PIC_Y, w = PIC_W, h = PIC_H } -- This call executes the roll in the given direction. -- Directions for rolls are left, right, up and down. roll:roll(dir) end -- Move the original object to the bottom of the stack -- once started img:stack_below(images[bottom]) bottom = current current = current - 1 if current == 0 then current = #filenames end return true end) -- Start the main loop. fp.begin()