Skip to content

Instantly share code, notes, and snippets.

@d4l3k
Created March 28, 2012 02:57
Show Gist options
  • Save d4l3k/2223157 to your computer and use it in GitHub Desktop.
Save d4l3k/2223157 to your computer and use it in GitHub Desktop.
TomGUI
// TomGUI!!!
// vAlphaPotato
reset()
{
llPassTouches(TRUE);
llSetLinkPrimitiveParamsFast(LINK_ALL_CHILDREN,[PRIM_SIZE,<0.01,0.01,0.01>,PRIM_POS_LOCAL,<0.0,0.0,0.0>,PRIM_COLOR,ALL_SIDES,<1.0,1.0,1.0>,0.0]);
integer i;
integer to = llGetNumberOfPrims();
for(i=2;i<=to;i++)
{
aprims += [i];
}
llOwnerSay("Total prims: "+(string)llGetListLength(aprims));
}
list aprims = [];
list d_prims = [];
list d_types = [];
list d_reference = [];
list d_offset = [];
list d_size = [];
integer TYPE_WINDOW = 0;
integer TYPE_WINDOW_CLOSE = 1;
integer TYPE_TEXT = 2;
integer TYPE_BUTTON = 3;
integer prim_get()
{
integer prim = llList2Integer(aprims,0);
aprims = llDeleteSubList(aprims,0,1);
return prim;
}
prim_register(integer id, integer type, integer reference, vector offset, vector size)
{
d_prims+=[id];
d_types+=[type];
d_reference+=[reference];
d_offset+=[offset];
d_size+=[size];
}
integer prim_type(integer id)
{
integer index = llListFindList(d_prims,[id]);
return llList2Integer(d_types,index);
}
integer prim_reference(integer id)
{
integer index = llListFindList(d_prims,[id]);
return llList2Integer(d_reference,index);
}
vector prim_offset(integer id)
{
integer index = llListFindList(d_prims,[id]);
return llList2Vector(d_offset,index);
}
prim_offset_set(integer id, vector offset)
{
integer index = llListFindList(d_prims,[id]);
d_offset = llListReplaceList(d_offset,[offset], index, index+1);
}
vector prim_size(integer id)
{
integer index = llListFindList(d_prims,[id]);
return llList2Vector(d_size,index);
}
vector prim_pos(integer id)
{
integer reference = prim_reference(id);
vector pos = prim_offset(id);
pos.y = -pos.y;
return pos + prim_offset(reference);
}
prim_destroy(integer id)
{
integer i;
integer length = llGetListLength(d_prims);
list prims = [];
for(i=0;i<length;i++)
{
if(llList2Integer(d_reference,i)==id)
{
prims+=[llList2Integer(d_prims,i)];
}
}
integer index = llListFindList(d_prims,[id]);
d_prims = llDeleteSubList(d_prims,index,index);
d_types = llDeleteSubList(d_types,index,index);
d_reference = llDeleteSubList(d_reference,index,index);
d_offset = llDeleteSubList(d_offset,index,index);
d_size = llDeleteSubList(d_size,index,index);
aprims+=[id];
llSetLinkPrimitiveParamsFast(id,[PRIM_SIZE,ZERO_VECTOR,PRIM_POS_LOCAL,ZERO_VECTOR,PRIM_COLOR,ALL_SIDES,<1.0,1.0,1.0>,0.0,PRIM_TEXT,"",ZERO_VECTOR,0.0]);
length = llGetListLength(prims);
for(i=0;i<length;i++)
{
prim_destroy(llList2Integer(prims,i));
}
}
integer window_new(vector pos, vector size)
{
pos.y = -pos.y;
integer window = prim_get();
prim_register(window,TYPE_WINDOW,1,pos,size);
vector l_pos = pos+<size.x,-size.y,0>/2;
llSetLinkPrimitiveParamsFast(window,[PRIM_POS_LOCAL,l_pos,PRIM_SIZE,size,PRIM_COLOR,ALL_SIDES,<0.0,0.0,0.0>,0.5]);
integer window_close = prim_get();
vector offset = pos+<size.x-0.005,-0.005,0.005>;
prim_register(window_close,TYPE_WINDOW_CLOSE,window,offset,ZERO_VECTOR);
llSetLinkPrimitiveParamsFast(window_close,[PRIM_POS_LOCAL,offset,PRIM_COLOR,ALL_SIDES,<1.0,0.0,0.0>,1.0]);
return window;
}
integer text_new(integer window,string text,vector offset)
{
integer id = prim_get();
prim_register(id,TYPE_TEXT,window,offset+<0.,0.,0.001>,ZERO_VECTOR);
llSetLinkPrimitiveParamsFast(id,[PRIM_POS_LOCAL,prim_pos(id),PRIM_SIZE, <.005*llStringLength(text),.05,.0>,PRIM_ROTATION, llEuler2Rot(<-PI_BY_TWO,0.0,0.0>) , PRIM_COLOR,ALL_SIDES,<1.0,1.0,1.0>,0.0, PRIM_TEXT,text,<1.0,1.0,1.0>,1.0,PRIM_TYPE,PRIM_TYPE_BOX,PRIM_HOLE_DEFAULT, <0.375,.875,0.0>,0.0,ZERO_VECTOR,<1.0,1.0,0.0>,<0.0,0.0,0.0>]);
return id;
}
integer button_new(integer window,string text,vector offset)
{
integer id = prim_get();
prim_register(id,TYPE_BUTTON,window,offset+<0.,0.,0.001>,ZERO_VECTOR);
llSetLinkPrimitiveParamsFast(id,[PRIM_POS_LOCAL,prim_pos(id),PRIM_SIZE, <.005*llStringLength(text),.05,.0>,PRIM_ROTATION, llEuler2Rot(<-PI_BY_TWO,0.0,0.0>) , PRIM_COLOR,ALL_SIDES,<1.0,1.0,1.0>,1.0, PRIM_TEXT,text,<1.0,1.0,1.0>,1.0,PRIM_TYPE,PRIM_TYPE_BOX,PRIM_HOLE_DEFAULT, <0.375,.875,0.0>,0.0,ZERO_VECTOR,<1.0,1.0,0.0>,<0.0,0.0,0.0>]);
return id;
}
text_pos(integer id, vector offset)
{
llSetLinkPrimitiveParamsFast(id,[PRIM_POS_LOCAL,prim_pos(id)]);
}
default
{
state_entry()
{
reset();
integer window = window_new(<0.0,0.0,0.0>,<.75,0.4,0.0>);
integer text = text_new(window,"Hello!",<0.1,0.1,0.0>);
integer text2 = text_new(window,"Another Text!",<0.5,0.4,0.0>);
integer window2 = window_new(<0.0,0.5,0.0>,<.5,0.4,0.0>);
integer text3 = text_new(window2,"Another WINDOW! Shocker!",<0.1,0.1,0.0>);
integer button = button_new(window2,"Button! Butts!",<0.2,0.4,0.0>);
}
touch_start(integer n)
{
integer id = llDetectedLinkNumber(0);
if(id==1)
{
return;
}
integer type = prim_type(id);
if(type==TYPE_WINDOW_CLOSE)
{
prim_destroy(prim_reference(id));
}
else if(type==TYPE_BUTTON)
{
llSay(0,"You just clicked a button.");
integer window2 = window_new(<0.6,0.5,0.0>,<.5,0.4,0.0>);
integer text3 = text_new(window2,"Here's a third window",<0.1,0.1,0.0>);
integer test4 = text_new(window2,"Twas created by button click.",<0.2,0.4,0.0>);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment