this beautiful GUI script...
Code: Select all
windowDef "TestGUI"
{
scripts
{
function TestGUI:OnInit()
self:set("rect", 30, 30, 580, 420);
self:set("text", "Hallo!");
self:set("textScale", 0.8);
self:set("backMaterial", "Models/Weapons/9mmAR_v/arm");
self:set("textAlignHor", 0);
end
function TestGUI:OnFrame()
self:set("size.x", 580+10*math.sin(self:get("time")));
end
}
windowDef ButtonToggleHor
{
scripts
{
function ButtonToggleHor:OnInit()
self:set("rect", 10, 380, 100, 40);
self:set("borderWidth", 0.5);
self:set("text", "Toggle hor.\nalignment");
self:set("textScale", 0.25);
self:set("font", "Fonts/Comic");
end
function ButtonToggleHor:OnAction()
local newAlign=TestGUI:get("textAlignHor")+1;
if (newAlign>2) then newAlign=0; end
TestGUI:set("textAlignHor", newAlign);
self:set("textAlignHor", newAlign);
self:interpolate("rotAngle", 0, 360, 250);
end
}
}
windowDef ButtonToggleVer
{
scripts
{
function ButtonToggleVer:OnInit()
self:set("rect", 140, 380, 100, 40);
self:set("borderWidth", 0.5);
self:set("text", "Toggle ver.\nalignment");
self:set("textScale", 0.25);
end
function ButtonToggleVer:OnAction()
local newAlign=TestGUI:get("textAlignVer")+1;
if (newAlign>2) then newAlign=0; end
TestGUI:set("textAlignVer", newAlign);
ButtonQuit:set("textAlignVer", newAlign);
self:set("textAlignVer", newAlign);
self:interpolate("pos.y", 380, 300, 500);
self:interpolate("pos.y", 300, 380, 500);
end
}
}
windowDef ButtonQuit
{
scripts
{
function ButtonQuit:OnInit()
self:set("rect", 300, 380, 100, 40);
self:set("text", "Quit");
self:set("textScale", 0.5);
self:set("borderWidth", 1.0);
self:set("textAlignHor", 2);
self:set("textAlignVer", 2);
self:set("font", "Fonts/Impact");
end
function ButtonQuit:OnMouseEnter()
self:set("textScale", 0.55);
self:set("borderColor", 1.0, 0.0, 0.0, 1.0);
end
function ButtonQuit:OnMouseLeave()
self:set("textScale", 0.50);
self:set("borderColor", 1.0, 1.0, 1.0, 1.0);
end
function ButtonQuit:OnAction()
-- Add a nice shutdown effect.
TestGUI:set("rotAngle", -10);
TestGUI:interpolate("pos.y", 30, 30, 300);
TestGUI:interpolate("pos.y", 30, 610, 700);
-- Now somehow quit the game.
end
}
}
windowDef Counter
{
scripts
{
Counter.count=0;
function Counter:OnInit()
self:set("rect", 400, 20, 120, 50);
self:set("borderWidth", 0.5);
self:set("text", "Counter\n" .. self.count);
self:set("textScale", 0.3);
end
function Counter:OnAction()
self.count=self.count+1;
self:set("text", "Counter\n" .. self.count);
end
}
}
windowDef FPS
{
scripts
{
FPS.oldTime=FPS:get("time");
function FPS:OnInit()
self:set("rect", 400, 80, 120, 70);
self:set("borderWidth", 0.5);
self:set("text", "FPS\n");
self:set("textScale", 0.4);
self:set("font", "Fonts/Impact");
end
function FPS:OnFrame()
local newTime=FPS:get("time");
local deltaTime=newTime-self.oldTime;
if (deltaTime<0.000000001) then
self:set("text", string.format("FPS\nINF\n(%.4f sec)", deltaTime));
else
self:set("text", string.format("FPS\n%.2f\n(%.4f sec)", 1/deltaTime, deltaTime));
end
FPS.oldTime=newTime;
end
}
}
}
I know it doesn't look very nice (it's my very first test, after all!), but it demonstrates the Lua-scriptability very well, and it's very interactive already (see script above for details, it has a lot of "toy-interactivity" for my internal tests).