move examples to library folder
s-ol
3 years ago
151 | 151 |
|
152 | 152 |
frm, to = @frm!, @to!
|
153 | 153 |
@set :frm, :to
|
154 | |
draw.line frm, to
|
|
154 |
draw.arrow frm, to
|
155 | 155 |
|
156 | 156 |
rect: do
|
157 | 157 |
meta = size: => @max - @min
|
|
235 | 235 |
|
236 | 236 |
tmp
|
237 | 237 |
|
|
238 |
remove: pushpop (obj) ->
|
|
239 |
lg.setColor .8, 0, 0
|
|
240 |
copy = obj\copy!
|
|
241 |
copy\draw!
|
|
242 |
|
|
243 |
if COMMIT
|
|
244 |
SESSION.objects = [o for o in *SESSION.objects when o != obj]
|
|
245 |
|
|
246 |
copy: pushpop (obj, pos) ->
|
|
247 |
lg.setColor 0, .8, 0
|
|
248 |
copy = obj\copy!
|
|
249 |
copy.pos = pos
|
|
250 |
copy\draw!
|
|
251 |
|
|
252 |
if COMMIT
|
|
253 |
table.insert SESSION.objects, copy
|
|
254 |
|
|
255 |
copy
|
|
256 |
|
238 | 257 |
{
|
239 | 258 |
:hit
|
240 | 259 |
:random
|
0 | |
import vec2 from require 'cpml'
|
1 | |
|
2 | |
=>
|
3 | |
-- draw helper lines
|
4 | |
origin = vec2 200, 600
|
5 | |
draw.line origin, vec2 200, 0
|
6 | |
draw.line origin, vec2 1000, 600
|
7 | |
|
8 | |
-- input two points
|
9 | |
input.line @l, { x: 200 }, { y: 600 }
|
10 | |
|
11 | |
-- restrict to first quadrant
|
12 | |
if @l!.frm.y > 600
|
13 | |
@l!.frm.y = 600
|
14 | |
|
15 | |
if @l!.to.x < 200
|
16 | |
@l!.to.x = 200
|
0 | |
-- let's load a vector library for doing some
|
1 | |
-- more interesting transformations
|
2 | |
|
3 | |
import vec2 from require 'cpml'
|
4 | |
|
5 | |
=>
|
6 | |
-- let's try to construct a pill-shape
|
7 | |
input.rect @rect
|
8 | |
rect = @rect!
|
9 | |
hsize = (rect.max - rect.min) / 2
|
10 | |
|
11 | |
input.circle @left, {
|
12 | |
center: rect.min + vec2 0, hsize.y
|
13 | |
radius: hsize.y
|
14 | |
}
|
15 | |
input.circle @left, {
|
16 | |
center: rect.min + vec2 hsize.x*2, hsize.y
|
17 | |
radius: hsize.y
|
18 | |
}
|
19 | |
|
20 | |
-- right, so that's that....
|
21 | |
-- kinda forgetting whether there was something
|
22 | |
-- else I wanted to show.
|
23 | |
-- does this seem interesting to you?
|
24 | |
-- let me know :)
|
0 | |
local vec2 = (require 'cpml').vec2
|
1 | |
|
2 | |
function draw_star(S)
|
3 | |
input.circle(S.inner)
|
4 | |
input.circle(S.outer, { center = S.inner().center })
|
5 | |
|
6 | |
local inner, outer = S.inner(), S.outer()
|
7 | |
|
8 | |
input.slider(S.cnt, 2, 20)
|
9 | |
|
10 | |
local cnt = math.floor(S.cnt()) * 2
|
11 | |
local step = 2*math.pi/cnt
|
12 | |
local lag = inner.center + vec2(inner.radius, 0)
|
13 | |
for i = 0, cnt do
|
14 | |
local r = (i % 2 == 0) and inner.radius or outer.radius
|
15 | |
local pos = inner.center + vec2.from_cartesian(r, step * i)
|
16 | |
|
17 | |
op.add(pos, vec2(20, 20))
|
18 | |
draw.line(pos, lag)
|
19 | |
|
20 | |
lag = pos
|
21 | |
end
|
22 | |
end
|
23 | |
|
24 | |
return draw_star
|
0 | |
function place_on_line(S)
|
1 | |
input.selection(S.objs, '^led-')
|
2 | |
input.line(S.dest)
|
3 | |
|
4 | |
local dest = S.dest()
|
5 | |
local start = dest.frm
|
6 | |
local step = (dest.to - dest.frm) / #S.objs()
|
7 | |
start = start - step/2
|
8 | |
|
9 | |
for i, obj in ipairs(S.objs()) do
|
10 | |
local pos = start + step * i
|
11 | |
op.move(obj, pos)
|
12 | |
end
|
13 | |
end
|
14 | |
|
15 | |
return place_in_rect
|
0 | |
=>
|
1 | |
input.selection @objs
|
2 | |
input.line @dest
|
3 | |
|
4 | |
dest = @dest!
|
5 | |
step = (dest.to - dest.frm) / #@objs!
|
6 | |
|
7 | |
for i, obj in ipairs @objs!
|
8 | |
pos = dest.frm + step * (i - .5)
|
9 | |
op.move obj, pos
|
0 | |
import vec2 from require 'cpml'
|
1 | |
|
2 | |
=>
|
3 | |
input.point @p
|
4 | |
|
5 | |
input.rect @re, max: @p!
|
6 | |
|
7 | |
input.circle @circ, center: @p!
|
|
0 |
import vec2 from require 'cpml'
|
|
1 |
|
|
2 |
=>
|
|
3 |
-- draw helper lines
|
|
4 |
origin = vec2 200, 600
|
|
5 |
draw.line origin, vec2 200, 0
|
|
6 |
draw.line origin, vec2 1000, 600
|
|
7 |
|
|
8 |
-- input two points
|
|
9 |
input.line @l, { x: 200 }, { y: 600 }
|
|
10 |
|
|
11 |
-- restrict to first quadrant
|
|
12 |
if @l!.frm.y > 600
|
|
13 |
@l!.frm.y = 600
|
|
14 |
|
|
15 |
if @l!.to.x < 200
|
|
16 |
@l!.to.x = 200
|
|
0 |
import vec2 from require 'cpml'
|
|
1 |
|
|
2 |
=>
|
|
3 |
input.selection @objs
|
|
4 |
|
|
5 |
center = vec2!
|
|
6 |
for o in *@objs!
|
|
7 |
center += o.pos
|
|
8 |
num = #@objs!
|
|
9 |
if num > 0
|
|
10 |
center /= num
|
|
11 |
input.arrow @delta, center
|
|
12 |
|
|
13 |
delta = @delta!.to - @delta!.frm
|
|
14 |
for o in *@objs!
|
|
15 |
op.move o, o.pos + delta
|
|
0 |
-- let's load a vector library for doing some
|
|
1 |
-- more interesting transformations
|
|
2 |
|
|
3 |
import vec2 from require 'cpml'
|
|
4 |
|
|
5 |
=>
|
|
6 |
-- let's try to construct a pill-shape
|
|
7 |
input.rect @rect
|
|
8 |
rect = @rect!
|
|
9 |
hsize = (rect.max - rect.min) / 2
|
|
10 |
|
|
11 |
input.circle @left, {
|
|
12 |
center: rect.min + vec2 0, hsize.y
|
|
13 |
radius: hsize.y
|
|
14 |
}
|
|
15 |
input.circle @left, {
|
|
16 |
center: rect.min + vec2 hsize.x*2, hsize.y
|
|
17 |
radius: hsize.y
|
|
18 |
}
|
|
19 |
|
|
20 |
-- right, so that's that....
|
|
21 |
-- kinda forgetting whether there was something
|
|
22 |
-- else I wanted to show.
|
|
23 |
-- does this seem interesting to you?
|
|
24 |
-- let me know :)
|
|
0 |
local vec2 = (require 'cpml').vec2
|
|
1 |
|
|
2 |
function draw_star(S)
|
|
3 |
input.circle(S.inner)
|
|
4 |
input.circle(S.outer, { center = S.inner().center })
|
|
5 |
|
|
6 |
local inner, outer = S.inner(), S.outer()
|
|
7 |
|
|
8 |
input.slider(S.cnt, 2, 20)
|
|
9 |
|
|
10 |
local cnt = math.floor(S.cnt()) * 2
|
|
11 |
local step = 2*math.pi/cnt
|
|
12 |
local lag = inner.center + vec2(inner.radius, 0)
|
|
13 |
for i = 0, cnt do
|
|
14 |
local r = (i % 2 == 0) and inner.radius or outer.radius
|
|
15 |
local pos = inner.center + vec2.from_cartesian(r, step * i)
|
|
16 |
|
|
17 |
op.add(pos, vec2(20, 20))
|
|
18 |
draw.line(pos, lag)
|
|
19 |
|
|
20 |
lag = pos
|
|
21 |
end
|
|
22 |
end
|
|
23 |
|
|
24 |
return draw_star
|
|
0 |
=>
|
|
1 |
input.selection @to_delete
|
|
2 |
for b in *@to_delete!
|
|
3 |
op.remove b
|
|
0 |
=>
|
|
1 |
@init {}
|
|
2 |
|
|
3 |
if INPUT\mouse_down!
|
|
4 |
@start\set INPUT.mouse
|
|
5 |
|
|
6 |
if INPUT\mouse_held!
|
|
7 |
if INPUT\key_held 'lshift'
|
|
8 |
size = INPUT.mouse - @start!
|
|
9 |
draw.rect @start! - size, @start! + size
|
|
10 |
else
|
|
11 |
draw.rect @start!, INPUT.mouse
|
|
12 |
|
|
13 |
if INPUT\mouse_up!
|
|
14 |
size = INPUT.mouse - @start!
|
|
15 |
if INPUT\key_held 'lshift'
|
|
16 |
table.insert @!, pos: @start!, size: size*2
|
|
17 |
else
|
|
18 |
table.insert @!, pos: @start! + size/2, size: size
|
|
19 |
|
|
20 |
for o in *@!
|
|
21 |
op.add o.pos, o.size
|
|
0 |
function place_on_line(S)
|
|
1 |
input.selection(S.objs, '^led-')
|
|
2 |
input.line(S.dest)
|
|
3 |
|
|
4 |
local dest = S.dest()
|
|
5 |
local start = dest.frm
|
|
6 |
local step = (dest.to - dest.frm) / #S.objs()
|
|
7 |
start = start - step/2
|
|
8 |
|
|
9 |
for i, obj in ipairs(S.objs()) do
|
|
10 |
local pos = start + step * i
|
|
11 |
op.move(obj, pos)
|
|
12 |
end
|
|
13 |
end
|
|
14 |
|
|
15 |
return place_in_rect
|
|
0 |
=>
|
|
1 |
input.selection @objs
|
|
2 |
input.line @dest
|
|
3 |
|
|
4 |
dest = @dest!
|
|
5 |
step = (dest.to - dest.frm) / #@objs!
|
|
6 |
|
|
7 |
for i, obj in ipairs @objs!
|
|
8 |
pos = dest.frm + step * (i - .5)
|
|
9 |
op.move obj, pos
|
|
0 |
import vec2 from require 'cpml'
|
|
1 |
|
|
2 |
=>
|
|
3 |
input.selection @objs
|
|
4 |
|
|
5 |
center = vec2!
|
|
6 |
for o in *@objs!
|
|
7 |
center += o.pos
|
|
8 |
num = #@objs!
|
|
9 |
if num > 0
|
|
10 |
center /= num
|
|
11 |
input.arrow @delta, center
|
|
12 |
|
|
13 |
delta = @delta!.to - @delta!.frm
|
|
14 |
-- delta.x = 25 * math.floor delta.x / 25
|
|
15 |
-- delta.y = 25 * math.floor delta.y / 25
|
|
16 |
for o in *@objs!
|
|
17 |
op.copy o, o.pos + delta
|
|
0 |
import vec2 from require 'cpml'
|
|
1 |
|
|
2 |
=>
|
|
3 |
input.point @p
|
|
4 |
|
|
5 |
input.rect @re, max: @p!
|
|
6 |
|
|
7 |
input.circle @circ, center: @p!
|
5 | 5 |
trace = (msg) -> debug.traceback msg, 2
|
6 | 6 |
|
7 | 7 |
class Script
|
8 | |
new: (@file) =>
|
|
8 |
new: (file='scratch.moon') =>
|
|
9 |
@file = "library/#{file}"
|
9 | 10 |
@last_modification = 0
|
10 | 11 |
@func = ->
|
11 | 12 |
|
|
82 | 83 |
love.event.quit!
|
83 | 84 |
when 'run'
|
84 | 85 |
arg = command\match '^run%s+(.+)'
|
85 | |
@script = arg and Script arg
|
|
86 |
@script = Script arg
|
86 | 87 |
|
87 | 88 |
frame: =>
|
88 | 89 |
lg.setColor 1, 1, 1
|