aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2019-11-03 16:23:43 +0000
committers-ol <s-ol@users.noreply.github.com>2019-11-03 16:23:43 +0000
commit157f6c0fdb37e8490c293a44d9ed08cd3dc63291 (patch)
tree4cfbb2899e615c90f033a31aa4019513047d805e
parentadd profiling support (diff)
downloadwatch-cad-157f6c0fdb37e8490c293a44d9ed08cd3dc63291.tar.gz
watch-cad-157f6c0fdb37e8490c293a44d9ed08cd3dc63291.zip
update examples, fixes
-rw-r--r--api.moon41
-rw-r--r--examples/capsule.moon (renamed from examples/demo.moon)0
-rw-r--r--examples/create_star.lua26
-rw-r--r--examples/demo.lua40
-rw-r--r--examples/place_in_rect.lua17
-rw-r--r--examples/test.moon8
-rw-r--r--session.moon2
7 files changed, 81 insertions, 53 deletions
diff --git a/api.moon b/api.moon
index 74fa110..3435cb7 100644
--- a/api.moon
+++ b/api.moon
@@ -24,6 +24,12 @@ draw =
contains = (INPUT.mouse - pos)\len2! < hs\len2!
INPUT\mouse_event! if contains
+ line: (frm, to) ->
+ lg.setColor 1, 1, 1
+ lg.line frm.x, frm.y, to.x, to.y
+
+ -- @TODO: hit checking
+
rect: (min, max) ->
x, y = min\unpack!
w, h = (max - min)\unpack!
@@ -81,14 +87,21 @@ input =
delta = last and pos - last
return delta and delta\len2! > 0 and delta
- rectangle: (fixed={}) =>
- delta = input.point @min, fixed.min or Once random.point! * 0.8
- input.point @max, fixed.max or Once @min! + random.size!
- @max\set @max! + delta if delta
+ rectangle: do
+ meta = size: => @max - @min
+ meta.__index = meta
+
+ (fixed={}) =>
+ @init setmetatable {}, meta
+ delta = input.point @min, fixed.min or Once random.point! * 0.8
+ input.point @max, fixed.max or Once @min! + random.size!
+ @max\set @max! + delta if delta
+
+ min, max = @min!, @max!
+ draw.rect min, max
- min, max = @min!, @max!
- draw.rect min, max
- @set { :min, :max }
+ self = @get!
+ self.min, self.max = min, max
circle: (fixed={}) =>
local tangent
@@ -98,16 +111,20 @@ input =
radius = (is_once fixed.radius) or math.random! * 100 + 50
init_tangent = vec2.from_cartesian radius, math.random! * 2 * math.pi
input.point @tangent, fixed.tangent or Once @center! + init_tangent
- @center!\dist @tangent!
+ tangent = @tangent!
+ radius = @center!\dist tangent
+ radius, tangent
- @tangent\set @tangent! + delta if delta and tangent
+ if delta and tangent
+ @tangent\set @tangent! + delta
center, tangent = @center!, @tangent!
draw.circle center, radius
- { :center, :tangent, :radius }
+ @set { :center, :tangent, :radius }
- selection: (init, fixed) =>
- init or= {o for o in *OBJS when match and o.name\match init}
+ selection: (pattern) =>
+ -- @TOOD: fix
+ @init {o for o in *SESSION.objects when match and o.name\match init}
lg.push 'all'
lg.setLineWidth 5
diff --git a/examples/demo.moon b/examples/capsule.moon
index 2a9033c..2a9033c 100644
--- a/examples/demo.moon
+++ b/examples/capsule.moon
diff --git a/examples/create_star.lua b/examples/create_star.lua
new file mode 100644
index 0000000..520cf07
--- /dev/null
+++ b/examples/create_star.lua
@@ -0,0 +1,26 @@
+local vec2 = (require 'cpml').vec2
+
+function draw_star(S)
+ input.circle(S.inner)
+ input.circle(S.outer, { center = S.inner().center })
+
+ local inner, outer = S.inner(), S.outer()
+
+ local cnt = 20
+ local step = 2*math.pi/cnt
+ local lag = inner.center + vec2(inner.radius, 0)
+ for i = 0, 20 do
+ local r = (i % 2 == 0) and inner.radius or outer.radius
+ local pos = inner.center + vec2.from_cartesian(r, step * i)
+
+ draw.cross(pos)
+ draw.line(pos, lag)
+
+ -- obj = Object("object_"..i, pos, vec2(20, 20))
+ -- op.add(obj)
+
+ lag = pos
+ end
+end
+
+return draw_star
diff --git a/examples/demo.lua b/examples/demo.lua
deleted file mode 100644
index 22076b9..0000000
--- a/examples/demo.lua
+++ /dev/null
@@ -1,40 +0,0 @@
--- return function (state)
-function place_in_rect(state)
- selection = Select_objs(state.objs, '^led-')
- rect = Select_rect(state.dest)
-
- sx = rect.w / (#selection + 1)
-
- x = sx
- for i, obj in ipairs(selection) do
- Move(obj, rect.x + x - obj.w/2, rect.y)
- x = x + sx
- end
-end
-
-function create_star(state)
- local inner = Select_circle(state.inner)
- local outer = Select_circle(state.outer, inner.cx, inner.cy)
-
- cnt = 20
- step = 2*math.pi/cnt
- lag_x, lag_y = inner.cx + inner.r, inner.cy
- for i = 0, 20 do
- r = (i % 2 == 0) and inner.r or outer.r
- x = inner.cx + math.cos(step * i) * r
- y = inner.cy + math.sin(step * i) * r
- obj = Object("object_"..i, x-10, y-10, 20, 20)
- Add(obj)
-
- love.graphics.line(lag_x, lag_y, obj:center())
- lag_x, lag_y = obj:center()
- end
-end
-
-function test(S)
- rect = input.rectangle(S.rect)
-
- input.circle(S.circle, { center = rect.min, radius = 100 }, { center = true, radius = true })
-end
-
-return test
diff --git a/examples/place_in_rect.lua b/examples/place_in_rect.lua
new file mode 100644
index 0000000..3650257
--- /dev/null
+++ b/examples/place_in_rect.lua
@@ -0,0 +1,17 @@
+-- return function (state)
+function place_in_rect(S)
+ input.selection(S.objs, '^led-')
+ input.rect(S.dest)
+
+ local start = S.min()
+ local step = S.dest():size()
+ step.y = 0
+
+ for i, obj in ipairs(S.objs()) do
+ local pos = start + step:scale(i)
+ draw.cross(pos)
+ -- op.move(obj, pos)
+ end
+end
+
+return place_in_rect
diff --git a/examples/test.moon b/examples/test.moon
new file mode 100644
index 0000000..352ebd2
--- /dev/null
+++ b/examples/test.moon
@@ -0,0 +1,8 @@
+import vec2 from require 'cpml'
+
+=>
+ input.point @p
+
+ input.rectangle @re, max: @p!
+
+ input.circle @circ, center: @p!
diff --git a/session.moon b/session.moon
index 1edb1de..4e59d3b 100644
--- a/session.moon
+++ b/session.moon
@@ -42,7 +42,7 @@ class Script
print @error.msg
reload: =>
- { :mode, :modification } = lfs.attributes @file
+ { :mode, :modification } = (lfs.attributes @file) or {}
if mode != 'file'
@error = at: 'parse', msg: "script doesn't exist or is not a file: '#{@file}'"
return