View difference between Paste ID: jUfHBSAf and aD7DxpbU
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