Code:
@name Sprixxalt Drawfe's Trackball Tycoon sss
@persist [PartsArray LengthArray AngleArray SetTrack]:array
@persist [PrevProp CurProp]:entity
@persist [MainOpen SpecOpen AdvOpen ChangePiece PartId Part]:number
@persist [CurAngle NextAngle SelfAngle]:angle
@persist [FirstPos CurOffset NextOffset SelfOffset]:vector
@persist [CurModel Type]:string
@trigger
if(first()|duped()) {
################### Pieces ###################
## Guide
PartsArray[1,string] = "" ## Model
PartsArray[2,vector] = vec() ## Start point/self correction
PartsArray[3,vector] = vec() ## End Point/next correction
PartsArray[4,angle] = ang() ## Angle to align self with previous prop
PartsArray[5,angle] = ang() ## Angle to align next prop
## Balls
PartsArray[1,string] = "models/XQM/Rails/gumball_1.mdl"
PartsArray[2,vector] = vec()
PartsArray[3,vector] = vec()
PartsArray[4,angle] = ang()
PartsArray[5,angle] = ang()
PartsArray[6,string] = "models/XQM/Rails/trackball_1.mdl"
PartsArray[7,vector] = vec()
PartsArray[8,vector] = vec()
PartsArray[9,angle] = ang()
PartsArray[10,angle] = ang()
## Track Ends
PartsArray[11,string] = "models/XQM/Rails/cap.mdl"
PartsArray[12,vector] = vec()
PartsArray[13,vector] = vec(-13,0,0)
PartsArray[14,angle] = ang()
PartsArray[15,angle] = ang()
PartsArray[16,string] = "models/XQM/Rails/funnel.mdl"
PartsArray[17,vector] = vec()
PartsArray[18,vector] = vec(0,0,-2)
PartsArray[19,angle] = ang()#-90,180,0)
PartsArray[20,angle] = ang(-90,0,0)
## Open Straight Track
PartsArray[21,string] = "models/XQM/Rails/straight_1.mdl"
PartsArray[22,vector] = vec()
PartsArray[23,vector] = vec(-12,0,0)
PartsArray[24,angle] = ang()
PartsArray[25,angle] = ang()
PartsArray[26,string] = "models/XQM/Rails/straight_2.mdl"
PartsArray[27,vector] = vec()
PartsArray[28,vector] = vec(-24,0,0)
PartsArray[29,angle] = ang()
PartsArray[30,angle] = ang()
PartsArray[31,string] = "mmodels/XQM/Rails/straight_4.mdl"
PartsArray[32,vector] = vec()
PartsArray[33,vector] = vec(-48,0,0)
PartsArray[34,angle] = ang()
PartsArray[35,angle] = ang()
PartsArray[36,string] = "models/XQM/Rails/straight_8.mdl"
PartsArray[37,vector] = vec()
PartsArray[38,vector] = vec(-96,0,0)
PartsArray[39,angle] = ang()
PartsArray[40,angle] = ang()
PartsArray[41,string] = "models/XQM/Rails/straight_16.mdl"
PartsArray[42,vector] = vec()
PartsArray[43,vector] = vec(-192,0,0)
PartsArray[44,angle] = ang()
PartsArray[45,angle] = ang()
#Tunnel Straight Track
PartsArray[46,string] = "models/XQM/Rails/tunnel_1.mdl"
PartsArray[47,vector] = vec()
PartsArray[48,vector] = vec(-12,0,0)
PartsArray[49,angle] = ang()
PartsArray[50,angle] = ang()
PartsArray[51,string] = "models/XQM/Rails/tunnel_2.mdl"
PartsArray[52,vector] = vec()
PartsArray[53,vector] = vec(-24,0,0)
PartsArray[54,angle] = ang()
PartsArray[55,angle] = ang()
PartsArray[56,string] = "models/XQM/Rails/tunnel_4.mdl"
PartsArray[57,vector] = vec()
PartsArray[58,vector] = vec(-48,0,0)
PartsArray[59,angle] = ang()
PartsArray[60,angle] = ang()
PartsArray[61,string] = "models/XQM/Rails/tunnel_8.mdl"
PartsArray[62,vector] = vec()
PartsArray[63,vector] = vec(-96,0,0)
PartsArray[64,angle] = ang()
PartsArray[65,angle] = ang()
PartsArray[66,string] = "models/XQM/Rails/tunnel_16.mdl"
PartsArray[67,vector] = vec()
PartsArray[68,vector] = vec(-192,0,0)
PartsArray[69,angle] = ang()
PartsArray[70,angle] = ang()
## Downward Slopes
PartsArray[71,string] = "models/XQM/Rails/slope_down_15.mdl"
PartsArray[72,vector] = vec()
PartsArray[73,vector] = vec(-28,0,-4)
PartsArray[74,angle] = ang()
PartsArray[75,angle] = ang(-15,0,0)
PartsArray[76,string] = "models/XQM/Rails/slope_down_30.mdl"
PartsArray[77,vector] = vec()
PartsArray[78,vector] = vec(-40,0,-11)
PartsArray[79,angle] = ang()
PartsArray[80,angle] = ang(-30,0,0)
PartsArray[81,string] = "models/XQM/Rails/slope_down_45.mdl"
PartsArray[82,vector] = vec()
PartsArray[83,vector] = vec(-49,0,-21)
PartsArray[84,angle] = ang()
PartsArray[85,angle] = ang(-45,0,0)
PartsArray[86,string] = "models/XQM/Rails/slope_down_90.mdl"
PartsArray[87,vector] = vec(32.6,0,-32)
PartsArray[88,vector] = vec()
PartsArray[89,angle] = ang()
PartsArray[90,angle] = ang(-90,0,0)
## Upward Slopes
PartsArray[91,string] = "models/XQM/Rails/slope_up_15.mdl"
PartsArray[92,vector] = vec()
PartsArray[93,vector] = vec(-21,0,3)
PartsArray[94,angle] = ang()
PartsArray[95,angle] = ang(15,0,0)
PartsArray[96,string] = "models/XQM/Rails/slope_up_30.mdl"
PartsArray[97,vector] = vec()
PartsArray[98,vector] = vec(-28,0,8)
PartsArray[99,angle] = ang()
PartsArray[100,angle] = ang(30,0,0)
PartsArray[101,string] = "models/XQM/Rails/slope_up_45.mdl"
PartsArray[102,vector] = vec()
PartsArray[103,vector] = vec(-32,0,13)
PartsArray[104,angle] = ang()
PartsArray[105,angle] = ang(45,0,0)
PartsArray[106,string] = "models/XQM/Rails/slope_up_90.mdl"
PartsArray[107,vector] = vec(0,0,-17.5)
PartsArray[108,vector] = vec(-41.85,0,71)
PartsArray[109,angle] = ang()
PartsArray[110,angle] = ang(90,0,0)
## Left Turn
PartsArray[111,string] = "models/XQM/Rails/turn_15.mdl"
PartsArray[112,vector] = vec(-12,-1.55,0)
PartsArray[113,vector] = vec(36,3,0)
PartsArray[114,angle] = ang(0,-165,0)
PartsArray[115,angle] = ang(0,180,0)
PartsArray[116,string] = "models/XQM/Rails/turn_30.mdl"
PartsArray[117,vector] = vec(-23,-7.55,0)
PartsArray[118,vector] = vec(59,15.4,0)
PartsArray[119,angle] = ang(0,-150,0)
PartsArray[120,angle] = ang(0,180,0)
PartsArray[121,string] = "models/XQM/Rails/turn_45.mdl"
PartsArray[122,vector] = vec(-32,-16.4,0)
PartsArray[123,vector] = vec()
PartsArray[124,angle] = ang(0,-135,0)
PartsArray[125,angle] = ang(0,180,0)
PartsArray[126,string] = "models/XQM/Rails/turn_90.mdl"
PartsArray[127,vector] = vec()
PartsArray[128,vector] = vec()
PartsArray[129,angle] = ang(0,-90,0)
PartsArray[130,angle] = ang(0,180,0)
PartsArray[131,string] = "models/XQM/Rails/turn_180.mdl"
PartsArray[132,vector] = vec()
PartsArray[133,vector] = vec()
PartsArray[134,angle] = ang(0,-180,0)
PartsArray[135,angle] = ang(0,180,0)
## Right Turn
PartsArray[136,string] = "models/XQM/Rails/turn_15.mdl"
PartsArray[137,vector] = vec()
PartsArray[138,vector] = vec(-24,5,0)
PartsArray[139,angle] = ang()
PartsArray[140,angle] = ang(0,-15,0)
PartsArray[141,string] = "models/XQM/Rails/turn_30.mdl"
PartsArray[142,vector] = vec()
PartsArray[143,vector] = vec(-35,11,0)
PartsArray[144,angle] = ang()
PartsArray[145,angle] = ang(0,-30,0)
PartsArray[146,string] = "models/XQM/Rails/turn_45.mdl"
PartsArray[147,vector] = vec()
PartsArray[148,vector] = vec(-43,20,0)
PartsArray[149,angle] = ang()
PartsArray[150,angle] = ang(0,-45,0)
PartsArray[151,string] = "models/XQM/Rails/turn_90.mdl"
PartsArray[152,vector] = vec()
PartsArray[153,vector] = vec()
PartsArray[154,angle] = ang()
PartsArray[155,angle] = ang(0,-90,0)
PartsArray[156,string] = "models/XQM/Rails/turn_180.mdl"
PartsArray[157,vector] = vec()
PartsArray[158,vector] = vec()
PartsArray[159,angle] = ang()
PartsArray[160,angle] = ang(0,-180,0)
# Special Parts
PartsArray[161,string] = "models/XQM/Rails/twist_45_left.mdl"
PartsArray[162,vector] = vec()
PartsArray[163,vector] = vec()
PartsArray[164,angle] = ang()
PartsArray[165,angle] = ang()
PartsArray[166,string] = "models/XQM/Rails/twist_45_right.mdl"
PartsArray[167,vector] = vec()
PartsArray[168,vector] = vec()
PartsArray[169,angle] = ang()
PartsArray[170,angle] = ang()
PartsArray[171,string] = "models/XQM/Rails/twist_90_left.mdl"
PartsArray[172,vector] = vec()
PartsArray[173,vector] = vec()
PartsArray[174,angle] = ang()
PartsArray[175,angle] = ang()
PartsArray[176,string] = "models/XQM/Rails/twist_90_right.mdl"
PartsArray[177,vector] = vec()
PartsArray[178,vector] = vec()
PartsArray[179,angle] = ang()
PartsArray[180,angle] = ang()
PartsArray[181,string] = "models/XQM/Rails/loop_left.mdl"
PartsArray[182,vector] = vec()
PartsArray[183,vector] = vec()
PartsArray[184,angle] = ang()
PartsArray[185,angle] = ang()
PartsArray[186,string] = "models/XQM/Rails/loop_right.mdl"
PartsArray[187,vector] = vec()
PartsArray[188,vector] = vec()
PartsArray[189,angle] = ang()
PartsArray[190,angle] = ang()
################### Derma ###################
TBTW = 200
TBTH = 460
Center = (TBTW-45)/2
dPanel("TrackBall Tycoon",vec2(scrW()*(1/60),scrH()*(1/6)),vec2(TBTW,TBTH))
dButton("~","TrackBall Tycoon",vec2(TBTW-20,0),vec2(20,20))
dLabel("Part Type","TrackBall Tycoon",vec2(35,25))
dButton("Straight","TrackBall Tycoon",vec2(Center,45),vec2(45,45))
dButton("Right","TrackBall Tycoon",vec2(Center+50,45),vec2(45,45))
dButton("Left","TrackBall Tycoon",vec2(Center-50,45),vec2(45,45))
dButton("Tunnel","TrackBall Tycoon",vec2(Center,95),vec2(45,45))
dButton("Up","TrackBall Tycoon",vec2(Center+50,95),vec2(45,45))
dButton("Down","TrackBall Tycoon",vec2(Center-50,95),vec2(45,45))
dLabel("Length:","TrackBall Tycoon",vec2(35,145))
dDropBox("Length","TrackBall Tycoon",vec2((TBTW-150)/2,160),150)
dLabel("Angle:","TrackBall Tycoon",vec2(35,185))
dDropBox("Angle","TrackBall Tycoon",vec2((TBTW-150)/2,200),150)
dButton("Special...","TrackBall Tycoon",vec2((TBTW-80)*1.25/8,225),vec2(80,25))
dButton("Advanced...","TrackBall Tycoon",vec2((TBTW-80)*6.75/8,225),vec2(80,25))
dButton("Change","TrackBall Tycoon",vec2((TBTW-150)/2,260),vec2(150,30))
dButton("Apply","TrackBall Tycoon",vec2((TBTW-150)/2,300),vec2(150,110))
dButton("Delete","TrackBall Tycoon",vec2((TBTW-150)/2,420),vec2(150,30))
dPanel("Special Parts",vec2(scrW()*(9/60),scrH()*(2/12)),vec2(100,270))
dButton("End Cap","Special Parts",vec2(10,30),vec2(80,20))
dButton("Funnel","Special Parts",vec2(10,60),vec2(80,20))
dButton("Left Twist 45","Special Parts",vec2(10,90),vec2(80,20))
dButton("Right Twist 45","Special Parts",vec2(10,120),vec2(80,20))
dButton("Left Twist 90","Special Parts",vec2(10,150),vec2(80,20))
dButton("Right Twist 90","Special Parts",vec2(10,180),vec2(80,20))
dButton("Left Loop","Special Parts",vec2(10,210),vec2(80,20))
dButton("Right Loop","Special Parts",vec2(10,240),vec2(80,20))
dPanel("Advanced Placement",vec2(scrW()*(9/60),scrH()*(6/12)),vec2(200,280))
dSlider("X","Advanced Placement",vec2(10,30),180,-360,360)
dSlider("Y","Advanced Placement",vec2(10,70),180,-360,360)
dSlider("Z","Advanced Placement",vec2(10,110),180,-360,360)
dSlider("Pitch","Advanced Placement",vec2(10,150),180,-360,360)
dSlider("Yaw","Advanced Placement",vec2(10,190),180,-360,360)
dSlider("Roll","Advanced Placement",vec2(10,230),180,-360,360)
################### Generic ##################
dRunOnChange("X",1)
dRunOnChange("Y",1)
dRunOnChange("Z",1)
dRunOnChange("Yaw",1)
dRunOnChange("Pitch",1)
dRunOnChange("Roll",1)
dRunOnChange("Angle",1)
dRunOnChange("Length",1)
runOnTick(1)
Part = 1
PartId = 16
MainOpen = 1
SpecOpen = 1
AdvOpen = 1
ChangePiece = 1
FirstPos = entity():massCenter()+vec(0,0,200)
hint("Chip initialization complete.",5)
hint("Welcome to TrackBall Tycoon Editor.",7)
}elseif(dClk("~")) {
if(MainOpen) {
MainOpen = 0
dSize("TrackBall Tycoon",vec2(200,21))
if(SpecOpen) {
dShow("Special Parts",0)
SpecOpen = 0
}
if(AdvOpen) {
dShow("Advanced Placement",0)
AdvOpen = 0
}
}else {
MainOpen = 1
dSize("TrackBall Tycoon",vec2(200,450))
}
}elseif(dClk("Special...")) {
if(SpecOpen) {
dShow("Special Parts",0)
}else{
dShow("Special Parts",1)
}
}elseif(dClk("Advanced...")) {
if(AdvOpen) {
dShow("Advanced Placement",0)
}else{
dShow("Advanced Placement",1)
}
}elseif(dClk("End Cap")) {
PartId = 11
ChangePiece = 1
}elseif(dClk("Funnel")) {
PartId = 16
ChangePiece = 1
}elseif(dClk("Left Twist 45")) {
PartId = 161
ChangePiece = 1
}elseif(dClk("Right Twist 45")) {
PartId = 166
ChangePiece = 1
}elseif(dClk("Left Twist 90")) {
PartId = 171
ChangePiece = 1
}elseif(dClk("Right Twist 90")) {
PartId = 176
ChangePiece = 1
}elseif(dClk("Left Loop")) {
PartId = 181
ChangePiece = 1
}elseif(dClk("Right Loop")) {
PartId = 186
ChangePiece = 1
}elseif(dClk("Left")) {
Type = "Left"
LengthArray = array()
LengthArray:pushString("N/A")
dText("Length","N/A")
AngleArray = array()
AngleArray:pushString("15")
AngleArray:pushString("30")
AngleArray:pushString("45")
AngleArray:pushString("90")
AngleArray:pushString("180")
dArray("Length",LengthArray)
dArray("Angle",AngleArray)
}elseif(dClk("Right")) {
Type = "Right"
LengthArray = array()
LengthArray:pushString("N/A")
dText("Length","N/A")
AngleArray = array()
AngleArray:pushString("15")
AngleArray:pushString("30")
AngleArray:pushString("45")
AngleArray:pushString("90")
AngleArray:pushString("180")
dArray("Length",LengthArray)
dArray("Angle",AngleArray)
}elseif(dClk("Straight")) {
Type = "Straight"
LengthArray = array()
LengthArray:pushString("1")
LengthArray:pushString("2")
LengthArray:pushString("4")
LengthArray:pushString("8")
LengthArray:pushString("16")
AngleArray = array()
AngleArray:pushString("N/A")
dText("Angle","N/A")
dArray("Length",LengthArray)
dArray("Angle",AngleArray)
}elseif(dClk("Tunnel")) {
Type = "Tunnel"
LengthArray = array()
LengthArray:pushString("1")
LengthArray:pushString("2")
LengthArray:pushString("4")
LengthArray:pushString("8")
LengthArray:pushString("16")
AngleArray = array()
AngleArray:pushString("N/A")
dText("Angle","N/A")
dArray("Length",LengthArray)
dArray("Angle",AngleArray)
}elseif(dClk("Down")) {
Type = "Down"
LengthArray = array()
LengthArray:pushString("N/A")
dText("Length","N/A")
AngleArray = array()
AngleArray:pushString("15")
AngleArray:pushString("30")
AngleArray:pushString("45")
AngleArray:pushString("90")
dArray("Length",LengthArray)
dArray("Angle",AngleArray)
}elseif(dClk("Up")) {
Type = "Up"
LengthArray = array()
LengthArray:pushString("N/A")
dText("Length","N/A")
AngleArray = array()
AngleArray:pushString("15")
AngleArray:pushString("30")
AngleArray:pushString("45")
AngleArray:pushString("90")
dArray("Length",LengthArray)
dArray("Angle",AngleArray)
}elseif(dClk("Apply")) {
CurProp:setColor(vec4(255,255,255,255))
PrevProp = CurProp
CurOffset = NextOffset
CurAngle = PrevProp:angles()+NextAngle
CurModel = PartsArray[PartId,string]
SelfOffset = PartsArray[PartId+1,vector]
NextOffset = PartsArray[PartId+2,vector]
SelfAngle = PartsArray[PartId+3,angle]
NextAngle = PartsArray[PartId+4,angle]
print(CurModel + Part)
CurProp = propSpawn(CurModel,Part==1 ? FirstPos : PrevProp:toWorld(CurOffset+SelfOffset),CurAngle+SelfAngle,1)
CurProp:setColor(vec4(255,255,255,180))
Part++
}elseif(dClk("Delete")) {
}elseif(dClk("Change")) {
if(Type=="Left") {
if(dSval("Angle")=="15") {
PartId = 111
}elseif(dSval("Angle")=="30") {
PartId = 116
}elseif(dSval("Angle")=="45") {
PartId = 121
}elseif(dSval("Angle")=="90") {
PartId = 126
}elseif(dSval("Angle")=="180") {
PartId = 131
}
}elseif(Type=="Right") {
if(dSval("Angle")=="15") {
PartId = 136
}elseif(dSval("Angle")=="30") {
PartId = 141
}elseif(dSval("Angle")=="45") {
PartId = 146
}elseif(dSval("Angle")=="90") {
PartId = 151
}elseif(dSval("Angle")=="180") {
PartId = 156
}
}elseif(Type=="Straight") {
if(dSval("Length")=="1") {
PartId = 21
}elseif(dSval("Length")=="2") {
PartId = 26
}elseif(dSval("Length")=="4") {
PartId = 31
}elseif(dSval("Length")=="8") {
PartId = 36
}elseif(dSval("Length")=="16") {
PartId = 41
}
}elseif(Type=="Tunnel") {
if(dSval("Length")=="1") {
PartId = 46
}elseif(dSval("Length")=="2") {
PartId = 51
}elseif(dSval("Length")=="4") {
PartId = 56
}elseif(dSval("Length")=="8") {
PartId = 61
}elseif(dSval("Length")=="16") {
PartId = 66
}
}elseif(Type=="Up") {
if(dSval("Angle")=="15") {
PartId = 91
}elseif(dSval("Angle")=="30") {
PartId = 96
}elseif(dSval("Angle")=="45") {
PartId = 101
}elseif(dSval("Angle")=="90") {
PartId = 106
}
}elseif(Type=="Down") {
if(dSval("Angle")=="15") {
PartId = 71
}elseif(dSval("Angle")=="30") {
PartId = 76
}elseif(dSval("Angle")=="45") {
PartId = 81
}elseif(dSval("Angle")=="90") {
PartId = 86
}
}
ChangePiece = 1
}elseif(tickClk()) {
if(ChangePiece) {
ChangePiece = 0
CurProp:propDelete()
CurModel = PartsArray[PartId,string]
SelfOffset = PartsArray[PartId+1,vector]
NextOffset = PartsArray[PartId+2,vector]
SelfAngle = PartsArray[PartId+3,angle]
NextAngle = PartsArray[PartId+4,angle]
CurProp = propSpawn(CurModel,Part==1 ? FirstPos : PrevProp:toWorld(CurOffset+SelfOffset),CurAngle+SelfAngle,1)
CurProp:setColor(vec4(255,255,255,180))
}
}else {
CurProp:reposition(Part==1 ? FirstPos+vec(dNval("X"),dNval("Y"),dNval("Z")) : PrevProp:toWorld(CurOffset+SelfOffset+vec(dNval("X"),dNval("Y"),dNval("Z"))))
CurProp:rerotate(CurAngle+SelfAngle+ang(dNval("Pitch"),dNval("Yaw"),dNval("Roll")))
}
Bookmarks