SHOW:
|
|
- or go back to the newest paste.
1 | ||
2 | -- Use this function to perform your initial setup | |
3 | function setup() | |
4 | iparameter("VanishPointx",0,WIDTH,WIDTH/2) | |
5 | iparameter("VanishPointy",0,WIDTH,WIDTH/2) | |
6 | iparameter("VanishingPoint",0,1,0) | |
7 | iparameter("Horizon",0,1,0) | |
8 | iparameter("Midline",0,1,0) | |
9 | iparameter("HitBox",0,100,50) | |
10 | - | iparameter("HitBox",0,100,0) |
10 | + | |
11 | iparameter("Mobs",0,1,1) | |
12 | - | iparameter("Mobs",0,1,0) |
12 | + | |
13 | iparameter("Mobtype",0,1,1) | |
14 | - | iparameter("Mobtype",0,1,0) |
14 | + | |
15 | print("Move the sliders to make something appear") | |
16 | end | |
17 | ||
18 | -- This function gets called once every frame | |
19 | function draw() | |
20 | vp = tiltValue() --vanishing point | |
21 | - | vp = vec2(VanishPointx,VanishPointy) --vanishing point |
21 | + | |
22 | stroke(0, 255, 39, 255) | |
23 | strokeWidth(3) | |
24 | fill(3, 253, 15, 255) | |
25 | if HitBox > 0 then | |
26 | ShowHitBox(HitBox) | |
27 | end | |
28 | if Midline == 1 then | |
29 | line(vp.x,0,vp.x,HEIGHT) | |
30 | end | |
31 | if Horizon == 1 then | |
32 | line(0,vp.y,WIDTH,vp.y) | |
33 | end | |
34 | if VanishingPoint == 1 then | |
35 | ellipse(vp.x,vp.y,5,5) | |
36 | end | |
37 | if Mobs == 0 then | |
38 | for k, v in pairs(Mobz) do | |
39 | table.remove(Mobz,k) | |
40 | end | |
41 | else | |
42 | nMobz = table.maxn(Mobz) | |
43 | for i = 1,10-nMobz do | |
44 | x=math.random()*WIDTH | |
45 | y=math.random()*HEIGHT | |
46 | z=WIDTH*i+(math.random()*56) | |
47 | - | z=math.random()*WIDTH*10 |
47 | + | |
48 | table.insert(Mobz,nMobz+1,{x=x,y=y,z=z,d=d}) | |
49 | end | |
50 | for k, v in pairs(Mobz) do | |
51 | zd = l3Dto2d(Mobz[k].d,Mobz[k].z) | |
52 | e = c3Dto2d(vec3(Mobz[k].x,Mobz[k].y,Mobz[k].z)) | |
53 | if Mobtype == 0 then | |
54 | ellipse(e.x,e.y,zd) | |
55 | else | |
56 | sprite("SpaceCute:Planet",e.x,e.y,zd) | |
57 | end | |
58 | end | |
59 | end | |
60 | if zSpeed > 0 and table.maxn(Mobz) > 0 then | |
61 | for k, v in pairs(Mobz) do | |
62 | Mobz[k].z = Mobz[k].z - zSpeed | |
63 | if Mobz[k].z < 0 then | |
64 | table.remove(Mobz,k) | |
65 | end | |
66 | end | |
67 | end | |
68 | ||
69 | if Sticker == 1 then --draw something full size | |
70 | --like a sticker on the window | |
71 | ellipse(100,100,100) | |
72 | --sprite("SpaceCute:Planet",300,300,256) | |
73 | end | |
74 | end | |
75 | ||
76 | function tiltValue() | |
77 | return vec2( | |
78 | (Gravity.x+1)*WIDTH/2, | |
79 | (Gravity.y+1)*HEIGHT/2 | |
80 | ) | |
81 | end | |
82 | ||
83 | function l3Dto2d(d,z) | |
84 | if z == 0 then | |
85 | --depth is zero, we're on the screen | |
86 | return (d) | |
87 | elseif z < 0 then | |
88 | --depth is negative | |
89 | --look out it's behind you! | |
90 | --now crash and burn them for passing this to us | |
91 | return (nil) | |
92 | --maybe after some thought this could be handled | |
93 | else --if z > 0 | |
94 | --depth is positive | |
95 | --it's ahead of us (doesn't mean we can see it) | |
96 | dz = d * WIDTH / ( WIDTH + z) | |
97 | return(dz) | |
98 | end -- z depth | |
99 | end | |
100 | ||
101 | function c3Dto2d(p) | |
102 | --print(p) | |
103 | --convert 3D to 2D | |
104 | --accepts p a vec3 -- x,y,z | |
105 | --returns a vec2 --x,y | |
106 | -- p.x + (vp.x / 2)/WIDTH/p.z | |
107 | -- p.x - ((WIDTH - vp.x) /2)/WIDTH/p.z | |
108 | local x2, y2 | |
109 | if p.z == 0 then | |
110 | --depth is zero, we're on the screen | |
111 | return (vec2(p.x,p.y)) | |
112 | elseif p.z < 0 then | |
113 | --depth is negative | |
114 | --look out it's behind you! | |
115 | --now crash and burn them for passing this to us | |
116 | return vec2(nil,nil) | |
117 | --maybe after some thought this could be handled | |
118 | else --if p.z > 0 | |
119 | --depth is positive | |
120 | --it's ahead of us (doesn't mean we can see it) | |
121 | x2 = p.x + ((vp.x - p.x)* (p.z/WIDTH) / ((p.z/WIDTH)+1) ) | |
122 | y2 = p.y + ((vp.y - p.y)* (p.z/WIDTH) / ((p.z/WIDTH)+1) ) | |
123 | --print(x2,y2) | |
124 | return(vec2(x2,y2)) | |
125 | end -- z depth | |
126 | end | |
127 | ||
128 | function ShowHitBox(boxes) | |
129 | for i = 1,boxes do | |
130 | --the hit box is a box in front of the viewer | |
131 | --objects in the hit box will hit the screen | |
132 | sll = vec3(0,0,(i-1)*WIDTH) -- screen lower left point | |
133 | sul = vec3(0,HEIGHT,(i-1)*WIDTH) -- screen upper left point | |
134 | slr = vec3(WIDTH,0,(i-1)*WIDTH) -- screen lower right point | |
135 | sur = vec3(WIDTH,HEIGHT,(i-1)*WIDTH) -- screen upper right point | |
136 | -- depth as in the depth of the box | |
137 | -- the box depth is set to it's width | |
138 | dll = vec3(0,0,i*WIDTH) -- depth lower left point | |
139 | dul = vec3(0,HEIGHT,i*WIDTH) -- depth upper left point | |
140 | dlr = vec3(WIDTH,0,i*WIDTH) -- depth screen lower right | |
141 | dur = vec3(WIDTH,HEIGHT,i*WIDTH) -- depth screen upper right | |
142 | sll2 = c3Dto2d(sll) | |
143 | sul2 = c3Dto2d(sul) | |
144 | slr2 = c3Dto2d(slr) | |
145 | sur2 = c3Dto2d(sur) | |
146 | dll2 = c3Dto2d(dll) | |
147 | dul2 = c3Dto2d(dul) | |
148 | dlr2 = c3Dto2d(dlr) | |
149 | dur2 = c3Dto2d(dur) | |
150 | DrawBox(sll2,sul2,slr2,sur2,dll2,dul2,dlr2,dur2) | |
151 | end | |
152 | end | |
153 | ||
154 | function DrawBox(sll2,sul2,slr2,sur2,dll2,dul2,dlr2,dur2) | |
155 | --back | |
156 | line(dll2.x,dll2.y,dul2.x,dul2.y) | |
157 | line(dul2.x,dul2.y,dur2.x,dur2.y) | |
158 | line(dur2.x,dur2.y,dlr2.x,dlr2.y) | |
159 | line(dlr2.x,dlr2.y,dll2.x,dll2.y) | |
160 | --sides | |
161 | line(sll2.x,sll2.y,dll2.x,dll2.y) | |
162 | line(sul2.x,sul2.y,dul2.x,dul2.y) | |
163 | line(sur2.x,sur2.y,dur2.x,dur2.y) | |
164 | - | end |
164 | + | |
165 | --front | |
166 | line(sll2.x,sll2.y,sul2.x,sul2.y) | |
167 | line(sul2.x,sul2.y,sur2.x,sur2.y) | |
168 | line(sur2.x,sur2.y,slr2.x,slr2.y) | |
169 | line(slr2.x,slr2.y,sll2.x,sll2.y) | |
170 | end | |
171 | ||
172 |