kame-remocon 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/kame/remocon/commander.rb +5 -1
- data/lib/kame/remocon/opal/application.rb +20 -2
- data/lib/kame/remocon/opal/turtle.rb +25 -6
- data/lib/kame/remocon/opal/views/canvas_view.rb +17 -1
- data/lib/kame/remocon/turtle_proxy.rb +4 -0
- data/lib/kame/remocon/version.rb +1 -1
- metadata +2 -3
- data/lib/kame/remocon/opal/views/canvas.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b7b14707f0668e82aee7190351a5e9583489061aa6a77bb3f9c5a1912780899
|
4
|
+
data.tar.gz: e741532064feeaa3f1b3c5136d346534d372bef4c5b324f60603228a1d820a11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33dd39acb5d7cc0c555d581365f46437472f2564d7e7466c6eff7cda9d63e3609331e932452016aac61f9b2456e0287344e8394d1aa52033e73b75b041d7258a
|
7
|
+
data.tar.gz: a1f600cd7d4b25b2e9e22b52a09613addcd50ba34a91ab2cfc4562a6eadc8b43599e93e9d2ac22ba9cd19517a1c6b7208f4496ba08c76a2e39397c28f3e538e7
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Commander
|
2
2
|
attr_reader :commands
|
3
3
|
|
4
|
-
METHODS = [:clear, :reset, :pen_up, :pen_down, :turn_left, :turn_right, :forward, :backward, :move_to]
|
4
|
+
METHODS = [:clear, :reset, :pen_up, :pen_down, :color, :turn_left, :turn_right, :forward, :backward, :move_to]
|
5
5
|
|
6
6
|
def initialize(forward = nil)
|
7
7
|
if forward
|
@@ -43,6 +43,10 @@ class Commander
|
|
43
43
|
self << [:pen_up]
|
44
44
|
end
|
45
45
|
|
46
|
+
def color(color)
|
47
|
+
self << [:color, color]
|
48
|
+
end
|
49
|
+
|
46
50
|
def forward(dist)
|
47
51
|
self << [:forward, dist]
|
48
52
|
end
|
@@ -26,6 +26,9 @@ end
|
|
26
26
|
class AppView
|
27
27
|
include Hyalite::Component
|
28
28
|
|
29
|
+
state :render_image, false
|
30
|
+
state :bg_color, "black"
|
31
|
+
|
29
32
|
def initialize
|
30
33
|
@program = <<~PROG
|
31
34
|
pen_down
|
@@ -56,15 +59,30 @@ class AppView
|
|
56
59
|
@turtle.exec @program, wait
|
57
60
|
end
|
58
61
|
|
62
|
+
def create_image
|
63
|
+
set_state(render_image: true)
|
64
|
+
end
|
65
|
+
|
66
|
+
def set_background
|
67
|
+
bg_color = @refs[:bg_color][:checked]
|
68
|
+
@turtle.default_color = bg_color ? "white" : "black"
|
69
|
+
set_state(bg_color: bg_color ? "black" : "white")
|
70
|
+
end
|
71
|
+
|
59
72
|
def render
|
60
73
|
program = @program
|
74
|
+
render_image = @state[:render_image]
|
75
|
+
bg_color = @state[:bg_color]
|
61
76
|
div do
|
62
77
|
h2(nil, 'タートルグラフィックスに挑戦!!')
|
63
|
-
CanvasView.el(onMounted: -> canvas { mounted(canvas) })
|
78
|
+
CanvasView.el(onMounted: -> canvas { mounted(canvas) }, render_image: render_image, bg_color: bg_color)
|
64
79
|
textarea({style: {width: "400px", height: "200px"}, ref: :program}, program)
|
65
80
|
input({type: :checkbox, checked: true, id: :wait, ref: :wait})
|
66
81
|
label({for: :wait}, "描く過程を表示する")
|
67
|
-
|
82
|
+
input({type: :checkbox, checked: true, id: :bg_color, ref: :bg_color, onClick: -> {set_background}})
|
83
|
+
label({for: :bg_color}, "黒背景")
|
84
|
+
button({onClick: -> { exec }, name: "exec"}, "実行する")
|
85
|
+
button({onClick: -> { create_image }, name: "create_image"}, "画像を作成")
|
68
86
|
end
|
69
87
|
end
|
70
88
|
end
|
@@ -3,6 +3,8 @@ require "kame/remocon/commander"
|
|
3
3
|
require_relative "./image"
|
4
4
|
|
5
5
|
class Turtle
|
6
|
+
attr_accessor :default_color
|
7
|
+
|
6
8
|
class Pos
|
7
9
|
attr_reader :x, :y
|
8
10
|
|
@@ -21,9 +23,10 @@ class Turtle
|
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
24
|
-
def initialize(canvas, wait: 0)
|
26
|
+
def initialize(canvas, wait: 0, default_color: "white")
|
25
27
|
@canvas = canvas
|
26
28
|
@wait = wait
|
29
|
+
@default_color = default_color
|
27
30
|
@context = @canvas.get_context("2d");
|
28
31
|
clear
|
29
32
|
reset
|
@@ -35,7 +38,10 @@ class Turtle
|
|
35
38
|
def new_commander
|
36
39
|
forwarder = Forwarder.new(self, *Commander::METHODS) do
|
37
40
|
@context.clear_rect(0, 0, @canvas.width, @canvas.height)
|
38
|
-
@
|
41
|
+
@paths.each do |path, color|
|
42
|
+
@context.stroke_style = color
|
43
|
+
@context.stroke(path)
|
44
|
+
end
|
39
45
|
draw_kame
|
40
46
|
end
|
41
47
|
|
@@ -58,7 +64,7 @@ class Turtle
|
|
58
64
|
|
59
65
|
c = Math.cos(@direction / 180 * Math::PI)
|
60
66
|
s = Math.sin(@direction / 180 * Math::PI)
|
61
|
-
transform = [c, s, -s, c, x - 10 * c + 10 * s, y - 10 * c - 10 * s]
|
67
|
+
transform = [c, s, -s, c, x - 10 * c + 10 * s, y - 10 * c - 10 * s]
|
62
68
|
@context.set_transform(*transform)
|
63
69
|
@context.draw_image(@kame, 0, 0, 20, 20)
|
64
70
|
@context.set_transform(1, 0, 0, 1, 0, 0)
|
@@ -81,7 +87,10 @@ class Turtle
|
|
81
87
|
else
|
82
88
|
exec_command(commands.shift)
|
83
89
|
@context.clear_rect(0, 0, @canvas.width, @canvas.height)
|
84
|
-
@
|
90
|
+
@paths.each do |path, color|
|
91
|
+
@context.stroke_style = color
|
92
|
+
@context.stroke(path)
|
93
|
+
end
|
85
94
|
draw_kame
|
86
95
|
true
|
87
96
|
end
|
@@ -94,7 +103,10 @@ class Turtle
|
|
94
103
|
)
|
95
104
|
else
|
96
105
|
commands.each(&self.method(:exec_command))
|
97
|
-
@
|
106
|
+
@paths.each do |path, color|
|
107
|
+
@context.stroke_style = color
|
108
|
+
@context.stroke(path)
|
109
|
+
end
|
98
110
|
if @kame.complete
|
99
111
|
draw_kame
|
100
112
|
else
|
@@ -113,6 +125,7 @@ class Turtle
|
|
113
125
|
def clear
|
114
126
|
@context.clear_rect(0, 0, @canvas.width, @canvas.height)
|
115
127
|
@path = Canvas::Path2D.new
|
128
|
+
@paths = [[@path, @default_color]]
|
116
129
|
nil
|
117
130
|
end
|
118
131
|
|
@@ -122,7 +135,6 @@ class Turtle
|
|
122
135
|
@pos = Pos.new(0, 0)
|
123
136
|
@path.move_to(*@pos.canvas_coordinate)
|
124
137
|
@context.move_to(*@pos.canvas_coordinate)
|
125
|
-
@context.stroke_style = "white"
|
126
138
|
nil
|
127
139
|
end
|
128
140
|
|
@@ -146,6 +158,13 @@ class Turtle
|
|
146
158
|
nil
|
147
159
|
end
|
148
160
|
|
161
|
+
def color(color)
|
162
|
+
@path = Canvas::Path2D.new
|
163
|
+
@path.move_to(*@pos.canvas_coordinate)
|
164
|
+
@paths << [@path, color]
|
165
|
+
nil
|
166
|
+
end
|
167
|
+
|
149
168
|
def forward(dist)
|
150
169
|
@pos = position_to(dist)
|
151
170
|
move
|
@@ -1,6 +1,10 @@
|
|
1
1
|
class CanvasView
|
2
2
|
include Hyalite::Component
|
3
3
|
|
4
|
+
def create_image
|
5
|
+
canvas = @refs[:canvas].native
|
6
|
+
`canvas.toDataURL()`
|
7
|
+
end
|
4
8
|
|
5
9
|
def component_did_mount
|
6
10
|
el = @refs[:canvas]
|
@@ -10,6 +14,18 @@ class CanvasView
|
|
10
14
|
end
|
11
15
|
|
12
16
|
def render
|
13
|
-
|
17
|
+
image = nil
|
18
|
+
if @props[:render_image]
|
19
|
+
image = create_image
|
20
|
+
end
|
21
|
+
|
22
|
+
bg_color = @props[:bg_color]
|
23
|
+
|
24
|
+
div do
|
25
|
+
canvas(width: "400", height: "400", id: :canvas, ref: :canvas, style: {"background-color": bg_color})
|
26
|
+
if image
|
27
|
+
img(src: image, style: {"background-color": bg_color})
|
28
|
+
end
|
29
|
+
end
|
14
30
|
end
|
15
31
|
end
|
data/lib/kame/remocon/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kame-remocon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- youchan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -195,7 +195,6 @@ files:
|
|
195
195
|
- lib/kame/remocon/opal/controllers/application_controller.rb
|
196
196
|
- lib/kame/remocon/opal/image.rb
|
197
197
|
- lib/kame/remocon/opal/turtle.rb
|
198
|
-
- lib/kame/remocon/opal/views/canvas.rb
|
199
198
|
- lib/kame/remocon/opal/views/canvas_view.rb
|
200
199
|
- lib/kame/remocon/remote_object.rb
|
201
200
|
- lib/kame/remocon/server.rb
|