sottolio 0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +31 -0
- data/LICENSE +676 -0
- data/README.md +26 -0
- data/Rakefile +12 -0
- data/bin/sottolio +29 -0
- data/example/game/include/CanvasText-0.4.js +500 -0
- data/example/game/include/canvasinput.js +379 -0
- data/example/game/include/howler.min.js +10 -0
- data/example/game/include/jquery.min.js +4 -0
- data/example/game/index.html +19 -0
- data/example/game/resources/backgrounds/city.jpg +0 -0
- data/example/game/resources/characters/ambrogia.png +0 -0
- data/example/game/resources/characters/rosalinda.png +0 -0
- data/example/game/resources/right_arrow.png +0 -0
- data/example/game/resources/sounds/Classmate.m4a +0 -0
- data/example/scripts/chapter_1.rb +64 -0
- data/example/scripts/chapter_2.rb +23 -0
- data/example/scripts/script.rb +2 -0
- data/lib/sottolio.rb +19 -0
- data/lib/sottolio/sottolio.rb +22 -0
- data/lib/sottolio/version.rb +21 -0
- data/opal/sottolio.rb +38 -0
- data/opal/sottolio/application.rb +134 -0
- data/opal/sottolio/database.rb +48 -0
- data/opal/sottolio/image_manager.rb +46 -0
- data/opal/sottolio/lock.rb +41 -0
- data/opal/sottolio/script.rb +93 -0
- data/opal/sottolio/sottolio.rb +29 -0
- data/opal/sottolio/sound_manager.rb +55 -0
- data/opal/sottolio/utils.rb +57 -0
- data/opal/sottolio/wrapper/background.rb +21 -0
- data/opal/sottolio/wrapper/canvas.rb +90 -0
- data/opal/sottolio/wrapper/canvas/canvas_button.rb +69 -0
- data/opal/sottolio/wrapper/canvas/canvas_input.rb +73 -0
- data/opal/sottolio/wrapper/canvas/canvas_text.rb +64 -0
- data/opal/sottolio/wrapper/character.rb +21 -0
- data/opal/sottolio/wrapper/image.rb +65 -0
- data/opal/sottolio/wrapper/sound.rb +55 -0
- data/sottolio.gemspec +20 -0
- metadata +114 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright(C) 2013-2015 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# This file is part of sottolio.
|
5
|
+
#
|
6
|
+
# sottolio is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# sottolio is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with sottolio. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
module Sottolio
|
20
|
+
class << self
|
21
|
+
def get(id)
|
22
|
+
`document.getElementById(id)`
|
23
|
+
end
|
24
|
+
|
25
|
+
def add_listener(event, element, callback)
|
26
|
+
`element.addEventListener(event, callback, false)`
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright(C) 2013-2015 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# This file is part of sottolio.
|
5
|
+
#
|
6
|
+
# sottolio is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# sottolio is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with sottolio. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
module Sottolio
|
20
|
+
class SoundManager
|
21
|
+
def initialize
|
22
|
+
@sounds = {}
|
23
|
+
end
|
24
|
+
|
25
|
+
# Actually `id` can be interpreted as an index instead of a label referring to the name of the resource
|
26
|
+
def add(id, sound)
|
27
|
+
@sounds[id.to_sym] = sound
|
28
|
+
end
|
29
|
+
|
30
|
+
def remove(id)
|
31
|
+
stop id
|
32
|
+
@sounds.delete id
|
33
|
+
end
|
34
|
+
|
35
|
+
def play(id)
|
36
|
+
@sounds[id.to_sym].play
|
37
|
+
end
|
38
|
+
|
39
|
+
def pause(id)
|
40
|
+
@sounds[id.to_sym].pause
|
41
|
+
end
|
42
|
+
|
43
|
+
def stop(id)
|
44
|
+
@sounds[id.to_sym].stop
|
45
|
+
end
|
46
|
+
|
47
|
+
def mute(id)
|
48
|
+
@sounds[id.to_sym].mute
|
49
|
+
end
|
50
|
+
|
51
|
+
def unmute(id)
|
52
|
+
@sounds[id.to_sym].unmute
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright(C) 2013-2015 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# This file is part of sottolio.
|
5
|
+
#
|
6
|
+
# sottolio is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# sottolio is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with sottolio. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
class String
|
20
|
+
# TODO: Find a better name for this (tl;dr replace variables with real values)
|
21
|
+
def apply(database, pattern = /\#(.+)\#/)
|
22
|
+
r = '' # we cannot #tap because of frozen strings
|
23
|
+
self.split(pattern).each { |s|
|
24
|
+
r += database.has?(s) ? database.get(s) : s
|
25
|
+
}
|
26
|
+
r
|
27
|
+
end
|
28
|
+
|
29
|
+
def filename
|
30
|
+
self.split(?/).last
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_regex
|
34
|
+
self.start_with?(?/) && self.end_with?(?/) ? /#{self[1..-2]}/ : self
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class Hash
|
39
|
+
# TODO: Find a better name for this (tl;dr eval conditional keys in the script's commands)
|
40
|
+
def true?(database)
|
41
|
+
return true unless self.include?(:if) || self.include?(:if_not)
|
42
|
+
|
43
|
+
res = []
|
44
|
+
sym = self.include?(:if) ? :if : :if_not
|
45
|
+
[self[sym]].flatten.each { |c| # i.e.: [ '#feel# == good', '#name# == Patrizio' ]
|
46
|
+
statement = c.apply(database).split(/(.+)(==|!=|=~)(.+)/).delete_if { |s| s.strip.empty? }.map(&:strip)
|
47
|
+
eval = case statement[1] # #send won't work with !=
|
48
|
+
when '==' then statement[0] == statement[2]
|
49
|
+
when '!=' then statement[0] != statement[2]
|
50
|
+
when '=~' then statement[0] =~ statement[2].to_regex
|
51
|
+
end
|
52
|
+
res << eval # actually this is totally not safe
|
53
|
+
}
|
54
|
+
res << res.inject { |sum, x| sum && x }
|
55
|
+
return sym == :if ? res.last : !res.last
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright(C) 2013-2015 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# This file is part of sottolio.
|
5
|
+
#
|
6
|
+
# sottolio is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# sottolio is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with sottolio. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
module Sottolio
|
20
|
+
class Background < Image; end
|
21
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright(C) 2013-2015 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# This file is part of sottolio.
|
5
|
+
#
|
6
|
+
# sottolio is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# sottolio is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with sottolio. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
module Sottolio
|
20
|
+
class Canvas
|
21
|
+
attr_accessor :context, :canvas_id, :canvas
|
22
|
+
|
23
|
+
def initialize(element, context = '2d')
|
24
|
+
@context = context
|
25
|
+
@canvas_id = element
|
26
|
+
@canvas = `element.getContext(context)`
|
27
|
+
end
|
28
|
+
|
29
|
+
def fill_style=(color)
|
30
|
+
`#@canvas.fillStyle = color`
|
31
|
+
end
|
32
|
+
|
33
|
+
def begin_path; `#@canvas.beginPath()` ; end
|
34
|
+
def close_path; `#@canvas.closePath()` ; end
|
35
|
+
def move_to(x, y); `#@canvas.moveTo(x, y)`; end
|
36
|
+
def line_to(x, y); `#@canvas.lineTo(x, y)`; end
|
37
|
+
def stroke; `#@canvas.stroke()` ; end
|
38
|
+
def fill; `#@canvas.fill()` ; end
|
39
|
+
|
40
|
+
def quadratic_curve_to(cpx, cpy, x, y)
|
41
|
+
`#@canvas.quadraticCurveTo(cpx, cpy, x, y)`
|
42
|
+
end
|
43
|
+
|
44
|
+
def global_alpha=(opacity)
|
45
|
+
`#@canvas.globalAlpha = opacity`
|
46
|
+
end
|
47
|
+
|
48
|
+
def clear_rect(x, y, width, height)
|
49
|
+
`#@canvas.clearRect(x, y, width, height)`
|
50
|
+
end
|
51
|
+
|
52
|
+
def round_rect(x, y, width, height, radius = 5, fill = true, stroke = true)
|
53
|
+
begin_path
|
54
|
+
move_to x + radius, y
|
55
|
+
line_to x + width - radius, y
|
56
|
+
quadratic_curve_to x + width, y, x + width, y + radius
|
57
|
+
line_to x + width, y + height - radius
|
58
|
+
quadratic_curve_to x + width, y + height, x + width - radius, y + height
|
59
|
+
line_to x + radius, y + height
|
60
|
+
quadratic_curve_to x, y + height, x, y + height - radius
|
61
|
+
line_to x, y + radius
|
62
|
+
quadratic_curve_to x, y, x + radius, y
|
63
|
+
close_path
|
64
|
+
|
65
|
+
self.stroke if stroke
|
66
|
+
self.fill if fill
|
67
|
+
end
|
68
|
+
|
69
|
+
def collides?(rect, x, y)
|
70
|
+
x > rect[:x] && x < rect[:x] + rect[:w] && y > rect[:y] && y < rect[:y] + rect[:h]
|
71
|
+
end
|
72
|
+
|
73
|
+
def draw(ary)
|
74
|
+
ary.each { |image|
|
75
|
+
draw_image image[:src], image[:x], image[:y]
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
def draw_image(*args)
|
80
|
+
image = args.shift
|
81
|
+
x, y, width, height = args
|
82
|
+
`#@canvas.drawImage(image, x, y)`
|
83
|
+
end
|
84
|
+
|
85
|
+
def clear
|
86
|
+
fill_style = '#000'
|
87
|
+
round_rect 2, 725, 1276, 120
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright(C) 2013-2015 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# This file is part of sottolio.
|
5
|
+
#
|
6
|
+
# sottolio is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# sottolio is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with sottolio. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
module Sottolio
|
20
|
+
class CanvasButton < CanvasText
|
21
|
+
def initialize(element, hash = nil, lock = nil)
|
22
|
+
super element, hash
|
23
|
+
|
24
|
+
@lock = lock || ::Lock.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_choice(database, options, key, on_success)
|
28
|
+
@lock.lock!
|
29
|
+
|
30
|
+
fill_style = 'rgba(200, 54, 54, 0.5)'
|
31
|
+
|
32
|
+
rect = [
|
33
|
+
{ x: 250, y: 790, w: 300, h: 50, tx: 260, ty: 825 },
|
34
|
+
{ x: 750, y: 790, w: 300, h: 50, tx: 760, ty: 825 }
|
35
|
+
]
|
36
|
+
|
37
|
+
rect.each_with_index { |r, i|
|
38
|
+
round_rect r[:x], r[:y], r[:w], r[:h]
|
39
|
+
|
40
|
+
draw_text({
|
41
|
+
:x => r[:tx],
|
42
|
+
:y => r[:ty],
|
43
|
+
:text => options[i][:text],
|
44
|
+
:box_width => "#{r[:w]}px"
|
45
|
+
})
|
46
|
+
|
47
|
+
Sottolio.add_listener :click, @canvas_id, -> (e) {
|
48
|
+
x = `e.pageX` - `#@canvas_id.offsetLeft`
|
49
|
+
y = `e.pageY` - `#@canvas_id.offsetTop`
|
50
|
+
|
51
|
+
if collides? r, x, y
|
52
|
+
database.add key, options[i][:id]
|
53
|
+
|
54
|
+
rect.each { |tr|
|
55
|
+
clear_rect tr[:x] - 10,
|
56
|
+
tr[:y] - 10,
|
57
|
+
tr[:w] + 20,
|
58
|
+
tr[:h] + 15
|
59
|
+
}
|
60
|
+
|
61
|
+
@lock.free!
|
62
|
+
|
63
|
+
on_success.call
|
64
|
+
end
|
65
|
+
}
|
66
|
+
}
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright(C) 2013-2015 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# This file is part of sottolio.
|
5
|
+
#
|
6
|
+
# sottolio is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# sottolio is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with sottolio. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
module Sottolio
|
20
|
+
class CanvasInput
|
21
|
+
def initialize(id, database, key, text = '', x = 10, y = 800)
|
22
|
+
@database = database
|
23
|
+
@key = key
|
24
|
+
@destroyed = false
|
25
|
+
|
26
|
+
%x{
|
27
|
+
#@canvas_input = new CanvasText(id, {
|
28
|
+
x: x,
|
29
|
+
y: y,
|
30
|
+
placeHolder: text,
|
31
|
+
width: 300,
|
32
|
+
padding: 8
|
33
|
+
});
|
34
|
+
#@canvas_input.focus();
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def value
|
39
|
+
`#@canvas_input.value`
|
40
|
+
end
|
41
|
+
|
42
|
+
def empty?
|
43
|
+
`#@canvas_input.value.length == 0`
|
44
|
+
end
|
45
|
+
|
46
|
+
def save
|
47
|
+
@database.add @key, value
|
48
|
+
end
|
49
|
+
|
50
|
+
def destroy
|
51
|
+
@destroy = true
|
52
|
+
|
53
|
+
%x{
|
54
|
+
#@canvas_input.unfocus();
|
55
|
+
#@canvas_input.refresh = null;
|
56
|
+
#@canvas_input.destroy();
|
57
|
+
delete #@canvas_input;
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
def present?
|
62
|
+
not destroyed?
|
63
|
+
end
|
64
|
+
|
65
|
+
def destroyed?
|
66
|
+
@destroy
|
67
|
+
end
|
68
|
+
|
69
|
+
def save_and_destroy
|
70
|
+
save && destroy
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright(C) 2013-2015 Giovanni Capuano <webmaster@giovannicapuano.net>
|
3
|
+
#
|
4
|
+
# This file is part of sottolio.
|
5
|
+
#
|
6
|
+
# sottolio is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# sottolio is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with sottolio. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#++
|
19
|
+
module Sottolio
|
20
|
+
class CanvasText < Canvas
|
21
|
+
def initialize(element, hash = nil)
|
22
|
+
super element, '2d'
|
23
|
+
|
24
|
+
@canvas_id = element
|
25
|
+
|
26
|
+
%x{
|
27
|
+
#@canvas_text = new CanvasText;
|
28
|
+
}
|
29
|
+
|
30
|
+
config hash if hash
|
31
|
+
end
|
32
|
+
|
33
|
+
def config(hash)
|
34
|
+
%x{
|
35
|
+
#@canvas_text.config({
|
36
|
+
canvasId: #{hash[:canvas_id]},
|
37
|
+
fontFamily: #{hash[:font_family]},
|
38
|
+
fontSize: #{hash[:font_size]},
|
39
|
+
fontColor: #{hash[:font_color]}
|
40
|
+
});
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def draw_text(hash)
|
45
|
+
%x{
|
46
|
+
#@canvas_text.drawText({
|
47
|
+
x: #{hash[:x]},
|
48
|
+
y: #{hash[:y]},
|
49
|
+
text: #{hash[:text]},
|
50
|
+
boxWidth: #{hash[:box_width] || '130px'}
|
51
|
+
});
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
def write(what, keep = false)
|
56
|
+
draw_text({
|
57
|
+
:x => 5,
|
58
|
+
:y => 760,
|
59
|
+
:text => what,
|
60
|
+
:box_width => '130px'
|
61
|
+
})
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|