ruby2d 0.4.2 → 0.5.0
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.
- checksums.yaml +5 -5
- data/assets/README.md +8 -0
- data/assets/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
- data/assets/ios/Assets.xcassets/Contents.json +6 -0
- data/assets/ios/Base.lproj/LaunchScreen.storyboard +27 -0
- data/assets/ios/Info.plist +43 -0
- data/assets/ios/MRuby.framework/Headers/mrbconf.h +145 -0
- data/assets/ios/MRuby.framework/Headers/mruby.h +1279 -0
- data/assets/ios/MRuby.framework/Headers/mruby/array.h +279 -0
- data/assets/ios/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
- data/assets/ios/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
- data/assets/ios/MRuby.framework/Headers/mruby/boxing_word.h +136 -0
- data/assets/ios/MRuby.framework/Headers/mruby/class.h +94 -0
- data/assets/ios/MRuby.framework/Headers/mruby/common.h +72 -0
- data/assets/ios/MRuby.framework/Headers/mruby/compile.h +194 -0
- data/assets/ios/MRuby.framework/Headers/mruby/data.h +75 -0
- data/assets/ios/MRuby.framework/Headers/mruby/debug.h +66 -0
- data/assets/ios/MRuby.framework/Headers/mruby/dump.h +196 -0
- data/assets/ios/MRuby.framework/Headers/mruby/error.h +75 -0
- data/assets/ios/MRuby.framework/Headers/mruby/gc.h +91 -0
- data/assets/ios/MRuby.framework/Headers/mruby/hash.h +182 -0
- data/assets/ios/MRuby.framework/Headers/mruby/irep.h +62 -0
- data/assets/ios/MRuby.framework/Headers/mruby/istruct.h +47 -0
- data/assets/ios/MRuby.framework/Headers/mruby/khash.h +274 -0
- data/assets/ios/MRuby.framework/Headers/mruby/numeric.h +161 -0
- data/assets/ios/MRuby.framework/Headers/mruby/object.h +45 -0
- data/assets/ios/MRuby.framework/Headers/mruby/opcode.h +161 -0
- data/assets/ios/MRuby.framework/Headers/mruby/proc.h +131 -0
- data/assets/ios/MRuby.framework/Headers/mruby/range.h +49 -0
- data/assets/ios/MRuby.framework/Headers/mruby/re.h +16 -0
- data/assets/ios/MRuby.framework/Headers/mruby/string.h +440 -0
- data/assets/ios/MRuby.framework/Headers/mruby/throw.h +55 -0
- data/assets/ios/MRuby.framework/Headers/mruby/value.h +309 -0
- data/assets/ios/MRuby.framework/Headers/mruby/variable.h +138 -0
- data/assets/ios/MRuby.framework/Headers/mruby/version.h +110 -0
- data/assets/ios/MRuby.framework/Info.plist +20 -0
- data/assets/ios/MRuby.framework/MRuby +0 -0
- data/assets/ios/MyApp.xcodeproj/project.pbxproj +362 -0
- data/assets/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
- data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcuserdata/Tom.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/assets/ios/MyApp.xcodeproj/xcuserdata/Tom.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- data/assets/ios/main.c +1 -0
- data/assets/opal.js +8434 -6329
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +12 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +17 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +12 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +12 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +12 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +17 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +12 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +12 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +32 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +12 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +12 -0
- data/assets/tvos/Assets.xcassets/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +15 -0
- data/assets/tvos/Info.plist +30 -0
- data/assets/tvos/MRuby.framework/Headers/mrbconf.h +145 -0
- data/assets/tvos/MRuby.framework/Headers/mruby.h +1279 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/array.h +279 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/boxing_word.h +136 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/class.h +94 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/common.h +72 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/compile.h +194 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/data.h +75 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/debug.h +66 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/dump.h +196 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/error.h +75 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/gc.h +91 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/hash.h +182 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/irep.h +62 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/istruct.h +47 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/khash.h +274 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/numeric.h +161 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/object.h +45 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/opcode.h +161 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/proc.h +131 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/range.h +49 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/re.h +16 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/string.h +440 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/throw.h +55 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/value.h +309 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/variable.h +138 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/version.h +110 -0
- data/assets/tvos/MRuby.framework/Info.plist +20 -0
- data/assets/tvos/MRuby.framework/MRuby +0 -0
- data/assets/tvos/MyApp.xcodeproj/project.pbxproj +344 -0
- data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
- data/assets/tvos/main.c +1 -0
- data/bin/ruby2d +219 -64
- data/ext/ruby2d/extconf.rb +1 -1
- data/ext/ruby2d/ruby2d.c +117 -19
- data/lib/ruby2d/color.rb +1 -1
- data/lib/ruby2d/version.rb +1 -1
- data/lib/ruby2d/window.rb +16 -10
- metadata +102 -5
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "C1BCA8F4805490F8BF8CC1BE1EB3C264D4847762",
|
|
3
|
+
"DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
|
|
4
|
+
|
|
5
|
+
},
|
|
6
|
+
"DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
|
|
7
|
+
"B56F7D52CF2ADA04A9756A36E4DD34AF636EFA07" : 9223372036854775807,
|
|
8
|
+
"C1BCA8F4805490F8BF8CC1BE1EB3C264D4847762" : 9223372036854775807
|
|
9
|
+
},
|
|
10
|
+
"DVTSourceControlWorkspaceBlueprintIdentifierKey" : "A80DF1FC-28C2-438B-80A2-328C4DF456FB",
|
|
11
|
+
"DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
|
|
12
|
+
"B56F7D52CF2ADA04A9756A36E4DD34AF636EFA07" : "",
|
|
13
|
+
"C1BCA8F4805490F8BF8CC1BE1EB3C264D4847762" : "deps\/"
|
|
14
|
+
},
|
|
15
|
+
"DVTSourceControlWorkspaceBlueprintNameKey" : "MyApp",
|
|
16
|
+
"DVTSourceControlWorkspaceBlueprintVersion" : 204,
|
|
17
|
+
"DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "xcode\/tvos\/MyApp.xcodeproj",
|
|
18
|
+
"DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
|
|
19
|
+
{
|
|
20
|
+
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/simple2d\/simple2d.git",
|
|
21
|
+
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
|
|
22
|
+
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "B56F7D52CF2ADA04A9756A36E4DD34AF636EFA07"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/simple2d\/deps.git",
|
|
26
|
+
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
|
|
27
|
+
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "C1BCA8F4805490F8BF8CC1BE1EB3C264D4847762"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
data/assets/tvos/main.c
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// Your Ruby 2D app here
|
data/bin/ruby2d
CHANGED
|
@@ -6,7 +6,7 @@ require 'fileutils'
|
|
|
6
6
|
class String
|
|
7
7
|
def colorize(c); "\e[#{c}m#{self}\e[0m" end
|
|
8
8
|
def bold; colorize('1') end
|
|
9
|
-
def error; colorize('
|
|
9
|
+
def error; colorize('1;31') end
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
# The installed gem directory
|
|
@@ -32,11 +32,14 @@ end
|
|
|
32
32
|
'music'
|
|
33
33
|
]
|
|
34
34
|
|
|
35
|
+
# Debugging command-line flag
|
|
36
|
+
@debug = false
|
|
37
|
+
|
|
35
38
|
|
|
36
39
|
# Check if source file provided is good
|
|
37
40
|
def check_build_src_file(rb_file)
|
|
38
41
|
if !rb_file
|
|
39
|
-
puts "Please provide a Ruby file to build
|
|
42
|
+
puts "Please provide a Ruby file to build"
|
|
40
43
|
exit
|
|
41
44
|
elsif !File.exists? rb_file
|
|
42
45
|
puts "Can't find file: #{rb_file}"
|
|
@@ -76,6 +79,7 @@ end
|
|
|
76
79
|
|
|
77
80
|
# Build a native version of the provided Ruby application
|
|
78
81
|
def build_native(rb_file)
|
|
82
|
+
check_build_src_file(rb_file)
|
|
79
83
|
|
|
80
84
|
# Check if MRuby exists; if not, quit
|
|
81
85
|
if `which mruby`.empty?
|
|
@@ -88,11 +92,7 @@ def build_native(rb_file)
|
|
|
88
92
|
`mrbc -Bruby2d_lib -obuild/lib.c build/lib.rb`
|
|
89
93
|
|
|
90
94
|
# Read the provided Ruby source file, copy to build dir and compile to bytecode
|
|
91
|
-
|
|
92
|
-
File.open('build/src.rb', 'w') do |file|
|
|
93
|
-
file << strip_require(rb_file)
|
|
94
|
-
end
|
|
95
|
-
|
|
95
|
+
File.open('build/src.rb', 'w') { |file| file << strip_require(rb_file) }
|
|
96
96
|
`mrbc -Bruby2d_app -obuild/src.c build/src.rb`
|
|
97
97
|
|
|
98
98
|
# Combine contents of C source files and bytecode into one file
|
|
@@ -103,9 +103,12 @@ def build_native(rb_file)
|
|
|
103
103
|
f << File.read("#{@gem_dir}/ext/ruby2d/ruby2d.c")
|
|
104
104
|
end
|
|
105
105
|
|
|
106
|
-
# Compile to native executable
|
|
106
|
+
# Compile to a native executable
|
|
107
107
|
`cc build/app.c -lmruby \`simple2d --libs\` -o build/app`
|
|
108
108
|
|
|
109
|
+
# Clean up
|
|
110
|
+
clean_up unless @debug
|
|
111
|
+
|
|
109
112
|
# Success!
|
|
110
113
|
puts "Native app created at `build/app`"
|
|
111
114
|
end
|
|
@@ -113,19 +116,15 @@ end
|
|
|
113
116
|
|
|
114
117
|
# Build a web-based version of the provided Ruby application
|
|
115
118
|
def build_web(rb_file)
|
|
119
|
+
check_build_src_file(rb_file)
|
|
116
120
|
|
|
117
121
|
# Assemble the Ruby 2D library in one `.rb` file and compile to JS
|
|
118
122
|
make_lib
|
|
119
123
|
`opal --compile --no-opal build/lib.rb > build/lib.js`
|
|
120
124
|
|
|
121
125
|
# Read the provided Ruby source file, copy to build dir, and compile to JS
|
|
122
|
-
|
|
123
|
-
File.open('build/src.rb', 'w') do |file|
|
|
124
|
-
file << strip_require(rb_file)
|
|
125
|
-
end
|
|
126
|
-
|
|
126
|
+
File.open('build/src.rb', 'w') { |file| file << strip_require(rb_file) }
|
|
127
127
|
`opal --compile --no-opal build/src.rb > build/src.js`
|
|
128
|
-
|
|
129
128
|
FileUtils.cp "#{@gem_dir}/ext/ruby2d/ruby2d-opal.rb", "build/"
|
|
130
129
|
`opal --compile --no-opal build/ruby2d-opal.rb > build/ruby2d-opal.js`
|
|
131
130
|
|
|
@@ -141,56 +140,127 @@ def build_web(rb_file)
|
|
|
141
140
|
# Copy over HTML template
|
|
142
141
|
FileUtils.cp "#{@gem_dir}/assets/template.html", "build/app.html"
|
|
143
142
|
|
|
143
|
+
# Clean up
|
|
144
|
+
clean_up unless @debug
|
|
145
|
+
|
|
144
146
|
# Success!
|
|
145
147
|
puts "Web app created at `build/app.js`",
|
|
146
148
|
" Run by opening `build/app.html`"
|
|
147
149
|
end
|
|
148
150
|
|
|
149
151
|
|
|
150
|
-
# Build an
|
|
151
|
-
def
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
152
|
+
# Build an iOS or tvOS app
|
|
153
|
+
def build_apple(rb_file, device)
|
|
154
|
+
check_build_src_file(rb_file)
|
|
155
|
+
|
|
156
|
+
# Check for Simple 2D framework,
|
|
157
|
+
unless File.exists?('/usr/local/Frameworks/Simple2D/iOS/Simple2D.framework') && File.exists?('/usr/local/Frameworks/Simple2D/tvOS/Simple2D.framework')
|
|
158
|
+
puts "#{'Error:'.error} Simple 2D iOS and tvOS frameworks not found. Install them and try again.\n"
|
|
159
|
+
exit
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Check if MRuby exists; if not, quit
|
|
163
|
+
if `which mruby`.empty?
|
|
164
|
+
puts "#{'Error:'.error} Can't find MRuby, which is needed to build native Ruby 2D applications.\n"
|
|
165
|
+
exit
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Assemble the Ruby 2D library in one `.rb` file and compile to bytecode
|
|
169
|
+
make_lib
|
|
170
|
+
`mrbc -Bruby2d_lib -obuild/lib.c build/lib.rb`
|
|
171
|
+
|
|
172
|
+
# Read the provided Ruby source file, copy to build dir and compile to bytecode
|
|
173
|
+
File.open('build/src.rb', 'w') { |file| file << strip_require(rb_file) }
|
|
174
|
+
`mrbc -Bruby2d_app -obuild/src.c build/src.rb`
|
|
175
|
+
|
|
176
|
+
# Copy over iOS project
|
|
177
|
+
FileUtils.cp_r "#{@gem_dir}/assets/#{device}", "build"
|
|
178
|
+
|
|
179
|
+
# Combine contents of C source files and bytecode into one file
|
|
180
|
+
File.open("build/#{device}/main.c", 'w') do |f|
|
|
181
|
+
f << "#define RUBY2D_IOS_TVOS 1" << "\n\n"
|
|
182
|
+
f << "#define MRUBY 1" << "\n\n"
|
|
183
|
+
f << File.read("build/lib.c") << "\n\n"
|
|
184
|
+
f << File.read("build/src.c") << "\n\n"
|
|
185
|
+
f << File.read("#{@gem_dir}/ext/ruby2d/ruby2d.c")
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Build the Xcode project
|
|
189
|
+
`simple2d build --#{device} build/#{device}/MyApp.xcodeproj`
|
|
190
|
+
|
|
191
|
+
# Clean up
|
|
192
|
+
clean_up unless @debug
|
|
193
|
+
|
|
194
|
+
# Success!
|
|
195
|
+
puts "App created at `build/#{device}`"
|
|
184
196
|
end
|
|
185
197
|
|
|
186
198
|
|
|
187
199
|
# Clean up unneeded build files
|
|
188
|
-
def clean_up
|
|
200
|
+
def clean_up(cmd = nil)
|
|
189
201
|
FileUtils.rm(
|
|
190
202
|
Dir.glob('build/{src,lib}.{rb,c,js}') +
|
|
191
203
|
Dir.glob('build/ruby2d-opal.{rb,js}') +
|
|
192
204
|
Dir.glob('build/app.c')
|
|
193
205
|
)
|
|
206
|
+
if cmd == :all
|
|
207
|
+
puts "cleaning up..."
|
|
208
|
+
FileUtils.rm_f 'build/app'
|
|
209
|
+
FileUtils.rm_f 'build/app.js'
|
|
210
|
+
FileUtils.rm_f 'build/app.html'
|
|
211
|
+
FileUtils.rm_rf 'build/ios'
|
|
212
|
+
FileUtils.rm_rf 'build/tvos'
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
# Launch a native app
|
|
218
|
+
def launch_native
|
|
219
|
+
if !File.exists? 'build/app'
|
|
220
|
+
puts "No native app built!"
|
|
221
|
+
exit
|
|
222
|
+
end
|
|
223
|
+
`( cd build && ./app )`
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
# Launch a web app
|
|
228
|
+
def launch_web
|
|
229
|
+
if !File.exists? 'build/app.html'
|
|
230
|
+
puts "No web app built!"
|
|
231
|
+
exit
|
|
232
|
+
end
|
|
233
|
+
open_cmd = 'open'
|
|
234
|
+
case RUBY_PLATFORM
|
|
235
|
+
when /linux/
|
|
236
|
+
open_cmd = "xdg-#{open_cmd}"
|
|
237
|
+
when /mingw/
|
|
238
|
+
open_cmd = "start"
|
|
239
|
+
end
|
|
240
|
+
system "#{open_cmd} build/app.html"
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
# Launch an iOS or tvOS app in a simulator
|
|
245
|
+
def launch_apple(device)
|
|
246
|
+
case device
|
|
247
|
+
when 'ios'
|
|
248
|
+
if !File.exists? 'build/ios/build/Release-iphonesimulator/MyApp.app'
|
|
249
|
+
puts "No iOS app built!"
|
|
250
|
+
exit
|
|
251
|
+
end
|
|
252
|
+
puts `simple2d simulator --open "iPhone 8" &&
|
|
253
|
+
simple2d simulator --install "build/ios/build/Release-iphonesimulator/MyApp.app" &&
|
|
254
|
+
simple2d simulator --launch "Ruby2D.MyApp"`
|
|
255
|
+
when 'tvos'
|
|
256
|
+
if !File.exists? 'build/tvos/build/Release-appletvsimulator/MyApp.app'
|
|
257
|
+
puts "No tvOS app built!"
|
|
258
|
+
exit
|
|
259
|
+
end
|
|
260
|
+
puts `simple2d simulator --open "Apple TV" &&
|
|
261
|
+
simple2d simulator --install "build/tvos/build/Release-appletvsimulator/MyApp.app" &&
|
|
262
|
+
simple2d simulator --launch "Ruby2D.MyApp"`
|
|
263
|
+
end
|
|
194
264
|
end
|
|
195
265
|
|
|
196
266
|
|
|
@@ -201,31 +271,116 @@ Usage: ruby2d <command> <options>
|
|
|
201
271
|
[-v|--version]
|
|
202
272
|
|
|
203
273
|
Summary of commands and options:
|
|
204
|
-
build Build
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
--debug Build native and web, keeping all intermediate files
|
|
208
|
-
package Create application package for distribution (experimental)
|
|
274
|
+
build Build a Ruby source file
|
|
275
|
+
launch Launch a built Ruby 2D application
|
|
276
|
+
simulator Interact with iOS and tvOS simulators
|
|
209
277
|
-v|--version Prints the installed version\n\n"
|
|
210
278
|
|
|
279
|
+
usage_build = "
|
|
280
|
+
Use the #{"build".bold} command to compile or build Ruby 2D apps.
|
|
281
|
+
|
|
282
|
+
To compile and create a native executable, use:
|
|
283
|
+
build --native <ruby_file>
|
|
284
|
+
|
|
285
|
+
To build for the web, creating a JavaScript and HTML package, use:
|
|
286
|
+
build --web <ruby_file>
|
|
287
|
+
|
|
288
|
+
To build an iOS or tvOS app, use the following:
|
|
289
|
+
build --ios <ruby_file>
|
|
290
|
+
build --tvos <ruby_file>
|
|
291
|
+
|
|
292
|
+
To build for every platform supported by the current system, use:
|
|
293
|
+
build --all <ruby_file>
|
|
294
|
+
|
|
295
|
+
To clean up the build directory, use:
|
|
296
|
+
build --clean
|
|
297
|
+
|
|
298
|
+
Add the #{"--debug".bold} option to print debugging info
|
|
299
|
+
and keep all intermediate files generated.\n\n"
|
|
300
|
+
|
|
301
|
+
usage_launch = "
|
|
302
|
+
Use the #{"launch".bold} command to run a Ruby 2D app that has been built.
|
|
303
|
+
Choose one of the following options to select the kind of app to run:
|
|
304
|
+
|
|
305
|
+
--native
|
|
306
|
+
--web
|
|
307
|
+
--ios
|
|
308
|
+
--tvos\n\n"
|
|
309
|
+
|
|
310
|
+
usage_simulator = "
|
|
311
|
+
Choose an option with the #{"simulator".bold} command:
|
|
312
|
+
|
|
313
|
+
--list List available devices
|
|
314
|
+
--booted Show currently booted devices
|
|
315
|
+
|
|
316
|
+
--open <device_name> Open a simulator device with a given device name
|
|
317
|
+
|
|
318
|
+
--install <app_file> Install an app on the booted simulator given the path
|
|
319
|
+
to the app e.g. \"Release-iphonesimulator/MyApp.app\"
|
|
320
|
+
|
|
321
|
+
--launch <bundle_id> Launch an app given the app bundle's identifier,
|
|
322
|
+
e.g. \"Ruby2D.MyApp\"
|
|
323
|
+
|
|
324
|
+
--log Stream log of the booted simulator
|
|
325
|
+
--log <app> Stream log for the app only, given the app name
|
|
326
|
+
--log-errors Stream log containing only error messages\n\n"
|
|
327
|
+
|
|
328
|
+
# puts ARGV.inspect
|
|
329
|
+
|
|
211
330
|
case ARGV[0]
|
|
212
331
|
when 'build'
|
|
213
|
-
|
|
332
|
+
if ARGV.delete '--debug' then @debug = true end
|
|
214
333
|
case ARGV[1]
|
|
215
334
|
when '--native'
|
|
216
335
|
build_native(ARGV[2])
|
|
217
336
|
when '--web'
|
|
218
337
|
build_web(ARGV[2])
|
|
338
|
+
when '--ios'
|
|
339
|
+
build_apple(ARGV[2], 'ios')
|
|
340
|
+
when '--tvos'
|
|
341
|
+
build_apple(ARGV[2], 'tvos')
|
|
342
|
+
when '--all'
|
|
343
|
+
build_native(ARGV[2])
|
|
344
|
+
build_web(ARGV[2])
|
|
345
|
+
build_apple(ARGV[2], 'ios')
|
|
346
|
+
build_apple(ARGV[2], 'tvos')
|
|
347
|
+
when '--clean'
|
|
348
|
+
clean_up(:all)
|
|
349
|
+
else
|
|
350
|
+
puts usage_build
|
|
351
|
+
end
|
|
352
|
+
when 'launch'
|
|
353
|
+
case ARGV[1]
|
|
354
|
+
when '--native'
|
|
355
|
+
launch_native
|
|
356
|
+
when '--web'
|
|
357
|
+
launch_web
|
|
358
|
+
when '--ios'
|
|
359
|
+
launch_apple('ios')
|
|
360
|
+
when '--tvos'
|
|
361
|
+
launch_apple('tvos')
|
|
219
362
|
else
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
when '
|
|
227
|
-
|
|
228
|
-
|
|
363
|
+
puts usage_launch
|
|
364
|
+
end
|
|
365
|
+
when 'simulator'
|
|
366
|
+
case ARGV[1]
|
|
367
|
+
when '--list'
|
|
368
|
+
puts `simple2d simulator --list`
|
|
369
|
+
when '--booted'
|
|
370
|
+
puts `simple2d simulator --booted`
|
|
371
|
+
when '--open'
|
|
372
|
+
puts `simple2d simulator --open "#{ARGV[2]}"`
|
|
373
|
+
when '--install'
|
|
374
|
+
puts `simple2d simulator --install "#{ARGV[2]}"`
|
|
375
|
+
when '--launch'
|
|
376
|
+
puts `simple2d simulator --launch "#{ARGV[2]}"`
|
|
377
|
+
when '--log'
|
|
378
|
+
puts `simple2d simulator --log`
|
|
379
|
+
when '--log-errors'
|
|
380
|
+
puts `simple2d simulator --log-errors`
|
|
381
|
+
else
|
|
382
|
+
puts usage_simulator
|
|
383
|
+
end
|
|
229
384
|
when '-v', '--version'
|
|
230
385
|
puts Ruby2D::VERSION
|
|
231
386
|
else
|
data/ext/ruby2d/extconf.rb
CHANGED
data/ext/ruby2d/ruby2d.c
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
// ruby2d.c – Native C extension for Ruby and MRuby
|
|
2
2
|
|
|
3
3
|
// Simple 2D includes
|
|
4
|
-
#
|
|
4
|
+
#if RUBY2D_IOS_TVOS
|
|
5
|
+
#include <Simple2D/simple2d.h>
|
|
6
|
+
#else
|
|
7
|
+
#include <simple2d.h>
|
|
8
|
+
#endif
|
|
5
9
|
|
|
6
10
|
// Ruby includes
|
|
7
11
|
#if MRUBY
|
|
@@ -64,7 +68,7 @@
|
|
|
64
68
|
#define r_args_none (MRB_ARGS_NONE())
|
|
65
69
|
#define r_args_req(n) MRB_ARGS_REQ(n)
|
|
66
70
|
// Helpers
|
|
67
|
-
#define r_char_to_sym(str)
|
|
71
|
+
#define r_char_to_sym(str) mrb_symbol_value(mrb_intern_cstr(mrb, str))
|
|
68
72
|
#else
|
|
69
73
|
// Ruby
|
|
70
74
|
#define R_VAL VALUE
|
|
@@ -140,6 +144,14 @@ static void free_window() {
|
|
|
140
144
|
}
|
|
141
145
|
|
|
142
146
|
|
|
147
|
+
/*
|
|
148
|
+
* Normalize controller axis values to 0.0...1.0
|
|
149
|
+
*/
|
|
150
|
+
double normalize_controller_axis(int val) {
|
|
151
|
+
return val > 0 ? val / 32767.0 : val / 32768.0;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
|
|
143
155
|
/*
|
|
144
156
|
* File#exists? for MRuby
|
|
145
157
|
*/
|
|
@@ -692,7 +704,7 @@ void on_mouse(S2D_Event e) {
|
|
|
692
704
|
// type, direction, delta_x, delta_y
|
|
693
705
|
type = r_char_to_sym("scroll");
|
|
694
706
|
direction = e.direction == S2D_MOUSE_SCROLL_NORMAL ?
|
|
695
|
-
|
|
707
|
+
r_char_to_sym("normal") : r_char_to_sym("inverted");
|
|
696
708
|
break;
|
|
697
709
|
case S2D_MOUSE_MOVE:
|
|
698
710
|
// type, x, y, delta_x, delta_y
|
|
@@ -703,26 +715,23 @@ void on_mouse(S2D_Event e) {
|
|
|
703
715
|
if (e.type == S2D_MOUSE_DOWN || e.type == S2D_MOUSE_UP) {
|
|
704
716
|
switch (e.button) {
|
|
705
717
|
case S2D_MOUSE_LEFT:
|
|
706
|
-
button =
|
|
718
|
+
button = r_char_to_sym("left");
|
|
707
719
|
break;
|
|
708
720
|
case S2D_MOUSE_MIDDLE:
|
|
709
|
-
button =
|
|
721
|
+
button = r_char_to_sym("middle");
|
|
710
722
|
break;
|
|
711
723
|
case S2D_MOUSE_RIGHT:
|
|
712
|
-
button =
|
|
724
|
+
button = r_char_to_sym("right");
|
|
713
725
|
break;
|
|
714
726
|
case S2D_MOUSE_X1:
|
|
715
|
-
button =
|
|
727
|
+
button = r_char_to_sym("x1");
|
|
716
728
|
break;
|
|
717
729
|
case S2D_MOUSE_X2:
|
|
718
|
-
button =
|
|
730
|
+
button = r_char_to_sym("x2");
|
|
719
731
|
break;
|
|
720
732
|
}
|
|
721
733
|
}
|
|
722
734
|
|
|
723
|
-
// Bug in MRuby: If `button` or `direction` are symbols (created with
|
|
724
|
-
// r_char_to_sym), they will always both be `nil`. Use `r_str_new` for now.
|
|
725
|
-
|
|
726
735
|
r_funcall(
|
|
727
736
|
ruby2d_window, "mouse_callback", 7, type, button, direction,
|
|
728
737
|
INT2NUM(e.x), INT2NUM(e.y), INT2NUM(e.delta_x), INT2NUM(e.delta_y)
|
|
@@ -735,23 +744,93 @@ void on_mouse(S2D_Event e) {
|
|
|
735
744
|
*/
|
|
736
745
|
static void on_controller(S2D_Event e) {
|
|
737
746
|
|
|
738
|
-
R_VAL type = R_NIL;
|
|
747
|
+
R_VAL type = R_NIL; R_VAL axis = R_NIL; R_VAL button = R_NIL;
|
|
739
748
|
|
|
740
749
|
switch (e.type) {
|
|
741
750
|
case S2D_AXIS:
|
|
742
751
|
type = r_char_to_sym("axis");
|
|
752
|
+
switch (e.axis) {
|
|
753
|
+
case S2D_AXIS_LEFTX:
|
|
754
|
+
axis = r_char_to_sym("left_x");
|
|
755
|
+
break;
|
|
756
|
+
case S2D_AXIS_LEFTY:
|
|
757
|
+
axis = r_char_to_sym("left_y");
|
|
758
|
+
break;
|
|
759
|
+
case S2D_AXIS_RIGHTX:
|
|
760
|
+
axis = r_char_to_sym("right_x");
|
|
761
|
+
break;
|
|
762
|
+
case S2D_AXIS_RIGHTY:
|
|
763
|
+
axis = r_char_to_sym("right_y");
|
|
764
|
+
break;
|
|
765
|
+
case S2D_AXIS_TRIGGERLEFT:
|
|
766
|
+
axis = r_char_to_sym("trigger_left");
|
|
767
|
+
break;
|
|
768
|
+
case S2D_AXIS_TRIGGERRIGHT:
|
|
769
|
+
axis = r_char_to_sym("trigger_right");
|
|
770
|
+
break;
|
|
771
|
+
case S2D_AXIS_INVALID:
|
|
772
|
+
axis = r_char_to_sym("invalid");
|
|
773
|
+
break;
|
|
774
|
+
}
|
|
743
775
|
break;
|
|
744
|
-
case S2D_BUTTON_DOWN:
|
|
745
|
-
type = r_char_to_sym("button_down");
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
776
|
+
case S2D_BUTTON_DOWN: case S2D_BUTTON_UP:
|
|
777
|
+
type = e.type == S2D_BUTTON_DOWN ? r_char_to_sym("button_down") : r_char_to_sym("button_up");
|
|
778
|
+
switch (e.button) {
|
|
779
|
+
case S2D_BUTTON_A:
|
|
780
|
+
button = r_char_to_sym("a");
|
|
781
|
+
break;
|
|
782
|
+
case S2D_BUTTON_B:
|
|
783
|
+
button = r_char_to_sym("b");
|
|
784
|
+
break;
|
|
785
|
+
case S2D_BUTTON_X:
|
|
786
|
+
button = r_char_to_sym("x");
|
|
787
|
+
break;
|
|
788
|
+
case S2D_BUTTON_Y:
|
|
789
|
+
button = r_char_to_sym("y");
|
|
790
|
+
break;
|
|
791
|
+
case S2D_BUTTON_BACK:
|
|
792
|
+
button = r_char_to_sym("back");
|
|
793
|
+
break;
|
|
794
|
+
case S2D_BUTTON_GUIDE:
|
|
795
|
+
button = r_char_to_sym("guide");
|
|
796
|
+
break;
|
|
797
|
+
case S2D_BUTTON_START:
|
|
798
|
+
button = r_char_to_sym("start");
|
|
799
|
+
break;
|
|
800
|
+
case S2D_BUTTON_LEFTSTICK:
|
|
801
|
+
button = r_char_to_sym("left_stick");
|
|
802
|
+
break;
|
|
803
|
+
case S2D_BUTTON_RIGHTSTICK:
|
|
804
|
+
button = r_char_to_sym("right_stick");
|
|
805
|
+
break;
|
|
806
|
+
case S2D_BUTTON_LEFTSHOULDER:
|
|
807
|
+
button = r_char_to_sym("left_shoulder");
|
|
808
|
+
break;
|
|
809
|
+
case S2D_BUTTON_RIGHTSHOULDER:
|
|
810
|
+
button = r_char_to_sym("right_shoulder");
|
|
811
|
+
break;
|
|
812
|
+
case S2D_BUTTON_DPAD_UP:
|
|
813
|
+
button = r_char_to_sym("up");
|
|
814
|
+
break;
|
|
815
|
+
case S2D_BUTTON_DPAD_DOWN:
|
|
816
|
+
button = r_char_to_sym("down");
|
|
817
|
+
break;
|
|
818
|
+
case S2D_BUTTON_DPAD_LEFT:
|
|
819
|
+
button = r_char_to_sym("left");
|
|
820
|
+
break;
|
|
821
|
+
case S2D_BUTTON_DPAD_RIGHT:
|
|
822
|
+
button = r_char_to_sym("right");
|
|
823
|
+
break;
|
|
824
|
+
case S2D_BUTTON_INVALID:
|
|
825
|
+
button = r_char_to_sym("invalid");
|
|
826
|
+
break;
|
|
827
|
+
}
|
|
749
828
|
break;
|
|
750
829
|
}
|
|
751
830
|
|
|
752
831
|
r_funcall(
|
|
753
|
-
ruby2d_window, "controller_callback", 5, INT2NUM(e.which),
|
|
754
|
-
|
|
832
|
+
ruby2d_window, "controller_callback", 5, INT2NUM(e.which),
|
|
833
|
+
type, axis, DBL2NUM(normalize_controller_axis(e.value)), button
|
|
755
834
|
);
|
|
756
835
|
}
|
|
757
836
|
|
|
@@ -800,6 +879,22 @@ static void render() {
|
|
|
800
879
|
}
|
|
801
880
|
|
|
802
881
|
|
|
882
|
+
/*
|
|
883
|
+
* Ruby2D::Window#ext_get_display_dimensions
|
|
884
|
+
*/
|
|
885
|
+
#if MRUBY
|
|
886
|
+
static R_VAL ruby2d_window_ext_get_display_dimensions(mrb_state* mrb, R_VAL self) {
|
|
887
|
+
#else
|
|
888
|
+
static R_VAL ruby2d_window_ext_get_display_dimensions(R_VAL self) {
|
|
889
|
+
#endif
|
|
890
|
+
int w; int h;
|
|
891
|
+
S2D_GetDisplayDimensions(&w, &h);
|
|
892
|
+
r_iv_set(self, "@display_width" , INT2NUM(w));
|
|
893
|
+
r_iv_set(self, "@display_height", INT2NUM(h));
|
|
894
|
+
return R_NIL;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
|
|
803
898
|
/*
|
|
804
899
|
* Ruby2D::Window#ext_show
|
|
805
900
|
*/
|
|
@@ -977,6 +1072,9 @@ void Init_ruby2d() {
|
|
|
977
1072
|
// Ruby2D::Window
|
|
978
1073
|
R_CLASS ruby2d_window_class = r_define_class(ruby2d_module, "Window");
|
|
979
1074
|
|
|
1075
|
+
// Ruby2D::Window#ext_get_display_dimensions
|
|
1076
|
+
r_define_method(ruby2d_window_class, "ext_get_display_dimensions", ruby2d_window_ext_get_display_dimensions, r_args_none);
|
|
1077
|
+
|
|
980
1078
|
// Ruby2D::Window#ext_show
|
|
981
1079
|
r_define_method(ruby2d_window_class, "ext_show", ruby2d_window_ext_show, r_args_none);
|
|
982
1080
|
|