239 lines
6.2 KiB
Lua
239 lines
6.2 KiB
Lua
-- Convenience aliases:
|
|
left = "HorizAlign_Left"
|
|
center = "HorizAlign_Center"
|
|
right = "HorizAlign_Right"
|
|
top = "VertAlign_Top"
|
|
middle = "VertAlign_Middle"
|
|
bottom = "VertAlign_Bottom"
|
|
|
|
function Actor:ease(t, fEase)
|
|
-- Optimizations:
|
|
-- fEase = -100 is equivalent to TweenType_Accelerate.
|
|
if fEase == -100 then
|
|
self:accelerate(t)
|
|
return
|
|
end
|
|
|
|
-- fEase = 0 is equivalent to TweenType_Linear.
|
|
if fEase == 0 then
|
|
self:linear(t)
|
|
return
|
|
end
|
|
|
|
-- fEase = +100 is equivalent to TweenType_Decelerate.
|
|
if fEase == 100 then
|
|
self:decelerate(t)
|
|
return
|
|
end
|
|
|
|
self:tween( t, "TweenType_Bezier",
|
|
{
|
|
0,
|
|
scale(fEase, -100, 100, 0/3, 2/3),
|
|
scale(fEase, -100, 100, 1/3, 3/3),
|
|
1
|
|
}
|
|
)
|
|
end
|
|
-- Notes On Beziers --
|
|
-- They can be 1D ( Quadratic ) or 2D ( Bezier )
|
|
-- 1D:
|
|
-- XA XB YC YD
|
|
-- 2D:
|
|
-- XA XB XC XD YA YB YC YD
|
|
-- In 1D Quads, XA XB are beginning time and size, YC YD are ending time and size
|
|
-- In 2D Quads, X
|
|
local BounceBeginBezier =
|
|
{
|
|
0, 0,
|
|
0.42, -0.42,
|
|
2/3, 0.3,
|
|
1, 1
|
|
}
|
|
function Actor:bouncebegin(t)
|
|
self:tween( t, "TweenType_Bezier", BounceBeginBezier )
|
|
end
|
|
|
|
local BounceEndBezier =
|
|
{
|
|
0,0,
|
|
1/3, 0.7,
|
|
0.58, 1.42,
|
|
1, 1
|
|
}
|
|
function Actor:bounceend(t)
|
|
self:tween( t, "TweenType_Bezier", BounceEndBezier )
|
|
end
|
|
|
|
local SmoothBezier =
|
|
{
|
|
0, 0, 1, 1
|
|
}
|
|
function Actor:smooth(t)
|
|
self:tween( t, "TweenType_Bezier", SmoothBezier )
|
|
end
|
|
-- SSC Additions
|
|
local DropBezier =
|
|
{
|
|
0 , 0,
|
|
1/3 , 1,
|
|
2/3 , 0.5,
|
|
1 , 1,
|
|
}
|
|
function Actor:drop(t)
|
|
self:tween( t, "TweenType_Bezier", DropBezier )
|
|
end
|
|
|
|
-- compound tweens "combine multiple interpolators to allow generating more
|
|
-- complex tweens." length is how long to span the animation for, while
|
|
-- ... is either a string (e.g. "linear,0.25,accelerate,0.75") or a table
|
|
-- with the tween information.
|
|
function Actor:compound(length,...)
|
|
local tweens = ...
|
|
|
|
if type(tweens) == "string" then
|
|
local parsed = split(";",tweens)
|
|
tweens = {} -- convert to table
|
|
for i,s in pairs(parsed) do
|
|
local res = split(",",s)
|
|
|
|
tweens[i] = {
|
|
Type = res[1],
|
|
Percent = res[2],
|
|
Bezier = res[3] or nil
|
|
}
|
|
end
|
|
end
|
|
|
|
for i,t in pairs(tweens) do
|
|
if t.Type == "linear" then self:linear(t.Percent*length)
|
|
elseif t.Type == "accelerate" then self:accelerate(t.Percent*length)
|
|
elseif t.Type == "decelerate" then self:decelerate(t.Percent*length)
|
|
elseif t.Type == "spring" then self:spring(t.Percent*length)
|
|
elseif t.Type == "bouncebegin" then self:bouncebegin(t.Percent*length)
|
|
elseif t.Type == "bounceend" then self:bounceend(t.Percent*length)
|
|
elseif t.Type == "smooth" then self:smooth(t.Percent*length)
|
|
elseif t.Type == "drop" then self:smooth(t.Percent*length)
|
|
--elseif t.Type == "ease" then self:ease(t.Percent*length)
|
|
elseif t.Type == "bezier" then
|
|
-- todo: handle using tween and 'TweenType_Bezier'
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Hide if b is true, but don't unhide if b is false.
|
|
function Actor:hide_if(b)
|
|
if b then
|
|
self:visible(false)
|
|
end
|
|
end
|
|
|
|
function Actor:player(p)
|
|
self:visible( GAMESTATE:IsHumanPlayer(p) )
|
|
end
|
|
|
|
function ActorFrame:propagatecommand(...)
|
|
self:propagate(1)
|
|
self:playcommand(...)
|
|
self:propagate(0)
|
|
end
|
|
|
|
-- Shortcut for alignment.
|
|
-- cmd(align,0.5,0.5) -- align center
|
|
-- cmd(align,0.0,0.0) -- align top-left
|
|
-- cmd(align,0.5,0.0) -- align top-center
|
|
function Actor:align(h, v)
|
|
self:halign( h )
|
|
self:valign( v )
|
|
end
|
|
|
|
function Actor:FullScreen()
|
|
self:stretchto( 0,0,SCREEN_WIDTH,SCREEN_HEIGHT )
|
|
end
|
|
|
|
--[[ Typical background sizes:
|
|
320x240 - [4:3]
|
|
640x480 - [4:3] (most simfiles in distribution today use this res.)
|
|
768x480 - [16:10]
|
|
854x480 - [16:9]
|
|
]]
|
|
function Actor:scale_or_crop_background()
|
|
local gw = self:GetWidth()
|
|
local gh = self:GetHeight()
|
|
|
|
local graphicAspect = gw/gh
|
|
local displayAspect = DISPLAY:GetDisplayWidth()/DISPLAY:GetDisplayHeight()
|
|
|
|
if graphicAspect == displayAspect then
|
|
-- bga matches the current aspect, we can stretch it.
|
|
self:stretchto( 0,0,SCREEN_WIDTH,SCREEN_HEIGHT )
|
|
else
|
|
-- temp
|
|
self:scaletocover( 0,0,SCREEN_WIDTH,SCREEN_HEIGHT )
|
|
--[[
|
|
-- bga doesn't match the aspect.
|
|
if displayAspect > graphicAspect then
|
|
-- the graphic is smaller than the display aspect ratio
|
|
else
|
|
-- the graphic is bigger than the display aspect ratio; crop me
|
|
end
|
|
--]]
|
|
end
|
|
end
|
|
|
|
function Actor:Center()
|
|
self:x(SCREEN_CENTER_X)
|
|
self:y(SCREEN_CENTER_Y)
|
|
end
|
|
|
|
function Actor:bezier(...)
|
|
local a = {...}
|
|
local b = {}
|
|
local c = 0
|
|
assert((a == 9 or a == 5), "bad number of arguments for Actor:bezier()")
|
|
for i=3,c do
|
|
b[#b+1] = a[i]
|
|
end
|
|
self:tween(a[2], "TweenMode_Bezier", b)
|
|
end
|
|
|
|
-- formerly in 02 HelpDisplay.lua, although nothing uses it:
|
|
function HelpDisplay:setfromsongorcourse()
|
|
local Artists = {}
|
|
local AltArtists = {}
|
|
|
|
local Song = GAMESTATE:GetCurrentSong()
|
|
local Trail = GAMESTATE:GetCurrentTrail( GAMESTATE:GetMasterPlayerNumber() )
|
|
if Song then
|
|
table.insert( Artists, Song:GetDisplayArtist() )
|
|
table.insert( AltArtists, Song:GetTranslitArtist() )
|
|
elseif Trail then
|
|
Artists, AltArtists = Trail:GetArtists()
|
|
end
|
|
|
|
self:settips( Artists, AltArtists )
|
|
end
|
|
|
|
|
|
-- (c) 2006 Glenn Maynard
|
|
-- All rights reserved.
|
|
--
|
|
-- Permission is hereby granted, free of charge, to any person obtaining a
|
|
-- copy of this software and associated documentation files (the
|
|
-- "Software"), to deal in the Software without restriction, including
|
|
-- without limitation the rights to use, copy, modify, merge, publish,
|
|
-- distribute, and/or sell copies of the Software, and to permit persons to
|
|
-- whom the Software is furnished to do so, provided that the above
|
|
-- copyright notice(s) and this permission notice appear in all copies of
|
|
-- the Software and that both the above copyright notice(s) and this
|
|
-- permission notice appear in supporting documentation.
|
|
--
|
|
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
|
-- THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
|
-- INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
|
-- OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
-- OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
-- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
-- PERFORMANCE OF THIS SOFTWARE. |