sottolio 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +31 -0
  5. data/LICENSE +676 -0
  6. data/README.md +26 -0
  7. data/Rakefile +12 -0
  8. data/bin/sottolio +29 -0
  9. data/example/game/include/CanvasText-0.4.js +500 -0
  10. data/example/game/include/canvasinput.js +379 -0
  11. data/example/game/include/howler.min.js +10 -0
  12. data/example/game/include/jquery.min.js +4 -0
  13. data/example/game/index.html +19 -0
  14. data/example/game/resources/backgrounds/city.jpg +0 -0
  15. data/example/game/resources/characters/ambrogia.png +0 -0
  16. data/example/game/resources/characters/rosalinda.png +0 -0
  17. data/example/game/resources/right_arrow.png +0 -0
  18. data/example/game/resources/sounds/Classmate.m4a +0 -0
  19. data/example/scripts/chapter_1.rb +64 -0
  20. data/example/scripts/chapter_2.rb +23 -0
  21. data/example/scripts/script.rb +2 -0
  22. data/lib/sottolio.rb +19 -0
  23. data/lib/sottolio/sottolio.rb +22 -0
  24. data/lib/sottolio/version.rb +21 -0
  25. data/opal/sottolio.rb +38 -0
  26. data/opal/sottolio/application.rb +134 -0
  27. data/opal/sottolio/database.rb +48 -0
  28. data/opal/sottolio/image_manager.rb +46 -0
  29. data/opal/sottolio/lock.rb +41 -0
  30. data/opal/sottolio/script.rb +93 -0
  31. data/opal/sottolio/sottolio.rb +29 -0
  32. data/opal/sottolio/sound_manager.rb +55 -0
  33. data/opal/sottolio/utils.rb +57 -0
  34. data/opal/sottolio/wrapper/background.rb +21 -0
  35. data/opal/sottolio/wrapper/canvas.rb +90 -0
  36. data/opal/sottolio/wrapper/canvas/canvas_button.rb +69 -0
  37. data/opal/sottolio/wrapper/canvas/canvas_input.rb +73 -0
  38. data/opal/sottolio/wrapper/canvas/canvas_text.rb +64 -0
  39. data/opal/sottolio/wrapper/character.rb +21 -0
  40. data/opal/sottolio/wrapper/image.rb +65 -0
  41. data/opal/sottolio/wrapper/sound.rb +55 -0
  42. data/sottolio.gemspec +20 -0
  43. metadata +114 -0
@@ -0,0 +1,23 @@
1
+ @scripts << Proc.new do
2
+ background :id => 'city',
3
+ :resource => 'resources/backgrounds/city.jpg'
4
+
5
+ character :id => 'Rosalinda',
6
+ :resource => 'resources/characters/rosalinda.png',
7
+ :x => 800,
8
+ :y => 120
9
+
10
+ dialogue :name => 'Rosalinda',
11
+ :text => 'Hey #name#! Did you enjoy this demo?'
12
+
13
+ dialogue :name => 'Rosalinda',
14
+ :text => 'Discover all myself at https://github.com/RoxasShadow/sottolio!'
15
+
16
+ dialogue :name => 'Rosalinda',
17
+ :text => 'Bye-chee!'
18
+
19
+ remove :id => 'Rosalinda',
20
+ :animation => :slide, # apply a slide animation to the left
21
+ :to => :left,
22
+ :speed => 1.7
23
+ end
@@ -0,0 +1,2 @@
1
+ require 'chapter_1'
2
+ require 'chapter_2'
data/lib/sottolio.rb ADDED
@@ -0,0 +1,19 @@
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
+ require 'sottolio/sottolio'
@@ -0,0 +1,22 @@
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
+ require 'opal'
20
+ require 'opal/util'
21
+
22
+ Opal.append_path File.expand_path('../../../opal', __FILE__)
@@ -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
+ VERSION = '0.1'
21
+ end
data/opal/sottolio.rb ADDED
@@ -0,0 +1,38 @@
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
+ require 'sottolio/sottolio'
20
+ require 'sottolio/script'
21
+ require 'sottolio/lock'
22
+ require 'sottolio/database'
23
+ require 'sottolio/utils'
24
+
25
+ require 'sottolio/wrapper/canvas'
26
+ require 'sottolio/wrapper/canvas/canvas_input'
27
+ require 'sottolio/wrapper/canvas/canvas_text'
28
+ require 'sottolio/wrapper/canvas/canvas_button'
29
+
30
+ require 'sottolio/wrapper/image'
31
+ require 'sottolio/wrapper/background'
32
+ require 'sottolio/wrapper/character'
33
+ require 'sottolio/image_manager'
34
+
35
+ require 'sottolio/wrapper/sound'
36
+ require 'sottolio/sound_manager'
37
+
38
+ require 'sottolio/application'
@@ -0,0 +1,134 @@
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
+ include Sottolio
20
+
21
+ @scripts = []
22
+ require 'script'
23
+
24
+ if @scripts.empty?
25
+ puts 'No scripts found.'
26
+ return
27
+ end
28
+
29
+ canvas_id = Sottolio.get 'game'
30
+ go_next = Sottolio.get 'next'
31
+ canvas = Canvas.new canvas_id
32
+
33
+ database = Database.new
34
+ scripts = Script.new @scripts
35
+ scripts.reverse!
36
+
37
+ config = {
38
+ canvas_id: 'game',
39
+ font_family: 'Arial',
40
+ font_size: '30px',
41
+ font_color: '#000'
42
+ }
43
+ lock = Lock.new
44
+ canvas_text = CanvasText.new canvas_id, config
45
+ canvas_button = CanvasButton.new canvas_id, config, lock
46
+
47
+ sound_manager = SoundManager.new
48
+ image_manager = ImageManager.new
49
+ input = nil
50
+
51
+ next_dialogue = -> {
52
+ if lock.free? && (!input || input.destroyed? || (input.present? && !input.empty?)) && scripts.any?
53
+ input.save_and_destroy if input.is_a?(CanvasInput) && input.present?
54
+
55
+ canvas.fill_style = '#fff'
56
+
57
+ script = scripts.pop
58
+ current_command = script.keys.first
59
+ case current_command
60
+ when :play_sound
61
+ return next_dialogue.call unless script[:play_sound].true? database
62
+
63
+ sound = Sound.new(script[:play_sound][:resource], script[:play_sound][:loop], script[:play_sound][:volume])
64
+ sound_manager.add script[:play_sound][:id], sound
65
+ sound_manager.play script[:play_sound][:id]
66
+
67
+ next_dialogue.call
68
+ when :stop_sound
69
+ return next_dialogue.call unless script[:stop_sound].true? database
70
+
71
+ sound_manager.stop script[:stop_sound][:id]
72
+
73
+ next_dialogue.call
74
+ when :background
75
+ return next_dialogue.call unless script[:background].true? database
76
+
77
+ background = Background.new(canvas_id, script[:background][:resource], script[:background][:id])
78
+ image_manager.add background
79
+ image_manager.draw script[:background][:id]
80
+
81
+ next_dialogue.call
82
+ when :character
83
+ return next_dialogue.call unless script[:character].true? database
84
+
85
+ character = Character.new(canvas_id, script[:character][:resource], script[:character][:id])
86
+ image_manager.add character
87
+ image_manager.draw script[:character][:id], script[:character][:x], script[:character][:y]
88
+
89
+ next_dialogue.call
90
+ when :remove
91
+ image_manager.remove script[:remove][:id], script[:remove][:animation], script[:remove][:to], script[:remove][:speed]
92
+
93
+ next_dialogue.call
94
+ when :dialogue
95
+ return next_dialogue.call unless script[:dialogue].true? database
96
+
97
+ canvas.clear
98
+
99
+ if script[:dialogue].include? :name
100
+ canvas_text.write "#{script[:dialogue][:name].apply(database)}: #{script[:dialogue][:text].apply(database)}"
101
+ else
102
+ canvas_text.write script[:dialogue][:text].apply(database)
103
+ end
104
+ when :input
105
+ return next_dialogue.call unless script[:input].true? database
106
+
107
+ canvas.clear
108
+
109
+ if script[:input].include? :name
110
+ canvas_text.write "#{script[:input][:name].apply(database)}: #{script[:input][:text].apply(database)}"
111
+ else
112
+ canvas_text.write script[:input][:text].apply(database)
113
+ end
114
+
115
+ input = CanvasInput.new canvas_id, database, script[:input][:id], script[:input][:request].apply(database)
116
+ when :choice
117
+ return next_dialogue.call unless script[:choice].true? database
118
+
119
+ canvas.clear
120
+
121
+ if script[:choice].include? :name
122
+ canvas_text.write "#{script[:choice][:name].apply(database)}: #{script[:choice][:text].apply(database)}"
123
+ else
124
+ canvas_text.write script[:choice][:text].apply(database)
125
+ end
126
+
127
+ canvas_button.get_choice database, script[:choice][:options], script[:choice][:id], next_dialogue
128
+ end
129
+ end
130
+ }
131
+
132
+ next_dialogue.call # bootstrapping
133
+
134
+ Sottolio::add_listener :click, go_next, next_dialogue
@@ -0,0 +1,48 @@
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 Database
21
+ def initialize
22
+ @db = {}
23
+ end
24
+
25
+ def add(key, value)
26
+ @db[key] = value
27
+ end
28
+
29
+ def delete(key)
30
+ @db.delete key
31
+ end
32
+
33
+ def delete_if(key, &block)
34
+ @db.delete_if key, &block
35
+ end
36
+
37
+ def get(key)
38
+ @db[key]
39
+ end
40
+
41
+ def has?(key)
42
+ @db.include? key
43
+ end
44
+ alias_method :exist?, :has?
45
+ alias_method :exists?, :has?
46
+ alias_method :include?, :has?
47
+ end
48
+ end
@@ -0,0 +1,46 @@
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 ImageManager
21
+ attr_accessor :images
22
+
23
+ def initialize
24
+ @images = {}
25
+ end
26
+
27
+ def add(image)
28
+ @images[image.id.to_sym] = image
29
+ end
30
+
31
+ def remove(id, animation = :none, to = nil, speed = nil)
32
+ redraw = -> { @images.each_value &:draw }
33
+ delete = -> { @images.delete id.to_sym; @images.each_value &:draw }
34
+
35
+ if animation == :slide
36
+ @images[id.to_sym].slide redraw, delete, to, speed
37
+ else
38
+ delete.call
39
+ end
40
+ end
41
+
42
+ def draw(id, x = nil, y = nil)
43
+ @images[id.to_sym].draw x, y, x && y
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,41 @@
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 Lock
21
+ def initialize
22
+ free!
23
+ end
24
+
25
+ def locked?
26
+ @lock == true
27
+ end
28
+
29
+ def free?
30
+ not locked?
31
+ end
32
+
33
+ def lock!
34
+ @lock = true
35
+ end
36
+
37
+ def free!
38
+ @lock = false
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,93 @@
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 Script
21
+ include Enumerable
22
+
23
+ # TODO: Rid of unused methods
24
+ def initialize(scripts = [])
25
+ @var = []
26
+ scripts.each { |p| self << p }
27
+ end
28
+
29
+ def each(&block)
30
+ @var.each(&block)
31
+ end
32
+
33
+ def append(block)
34
+ instance_eval &block
35
+ end
36
+ alias_method :<<, :append
37
+
38
+ def has?(type)
39
+ @var.any? { |h| h.keys.first.to_sym == type.to_sym }
40
+ end
41
+ alias_method :include?, :has?
42
+
43
+ def length(type = nil)
44
+ if block_given?
45
+ @var.count &block
46
+ elsif type == nil
47
+ @var.count
48
+ else
49
+ @var.count { |h| h.keys.first.to_sym == type.to_sym }
50
+ end
51
+ end
52
+ alias_method :count, :length
53
+ alias_method :count, :size
54
+
55
+ def get(type)
56
+ @var.select { |h| h.keys.first.to_sym == type.to_sym }
57
+ end
58
+
59
+ def first
60
+ @var.first
61
+ end
62
+
63
+ def last
64
+ @var.last
65
+ end
66
+
67
+ def pop
68
+ @var.pop
69
+ end
70
+
71
+ def reverse
72
+ @var.reverse
73
+ end
74
+
75
+ def reverse!
76
+ @var.reverse!
77
+ end
78
+
79
+ def to_s
80
+ @var.inspect
81
+ end
82
+
83
+ def method_missing(m, *args, &block)
84
+ if args.any?
85
+ args = args.first if args.length == 1
86
+ @var << { m.to_sym => args }
87
+ instance_variable_set "@#{m}", args
88
+ else
89
+ instance_variable_get "@#{m}"
90
+ end
91
+ end
92
+ end
93
+ end