diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2019-11-03 16:23:43 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2019-11-03 16:23:43 +0000 |
| commit | 157f6c0fdb37e8490c293a44d9ed08cd3dc63291 (patch) | |
| tree | 4cfbb2899e615c90f033a31aa4019513047d805e | |
| parent | add profiling support (diff) | |
| download | watch-cad-157f6c0fdb37e8490c293a44d9ed08cd3dc63291.tar.gz watch-cad-157f6c0fdb37e8490c293a44d9ed08cd3dc63291.zip | |
update examples, fixes
| -rw-r--r-- | api.moon | 41 | ||||
| -rw-r--r-- | examples/capsule.moon (renamed from examples/demo.moon) | 0 | ||||
| -rw-r--r-- | examples/create_star.lua | 26 | ||||
| -rw-r--r-- | examples/demo.lua | 40 | ||||
| -rw-r--r-- | examples/place_in_rect.lua | 17 | ||||
| -rw-r--r-- | examples/test.moon | 8 | ||||
| -rw-r--r-- | session.moon | 2 |
7 files changed, 81 insertions, 53 deletions
@@ -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 |
