entityjs 0.4.1 → 0.4.2

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 (111) hide show
  1. data/.gitignore +1 -0
  2. data/bin/entityjs +1 -1
  3. data/entityjs.gemspec +3 -2
  4. data/lib/entityjs.rb +13 -1
  5. data/lib/entityjs/command.rb +22 -16
  6. data/lib/entityjs/commands/build.rb +96 -48
  7. data/lib/entityjs/commands/eunit.rb +1 -1
  8. data/lib/entityjs/commands/html.rb +31 -0
  9. data/lib/entityjs/commands/min.rb +37 -0
  10. data/lib/entityjs/commands/new.rb +3 -0
  11. data/lib/entityjs/commands/server.rb +9 -3
  12. data/lib/entityjs/config.rb +163 -59
  13. data/lib/entityjs/dirc.rb +28 -0
  14. data/lib/entityjs/page.rb +73 -34
  15. data/lib/entityjs/version.rb +1 -1
  16. data/public/favicon.ico +0 -0
  17. data/public/play.html +33 -28
  18. data/public/qunit/qunit.entity.js +56 -6
  19. data/public/qunit/qunit.input.js +5 -5
  20. data/public/test.html +49 -0
  21. data/spec/javascripts/src/core/comp_spec.js +17 -6
  22. data/spec/javascripts/src/core/entity_spec.js +4 -5
  23. data/spec/javascripts/src/core/query_spec.js +25 -0
  24. data/spec/javascripts/src/core/re_spec.js +3 -3
  25. data/spec/javascripts/src/cycle/update_spec.js +8 -8
  26. data/spec/javascripts/src/display/align_spec.js +2 -2
  27. data/spec/javascripts/src/display/el_spec.js +17 -0
  28. data/spec/javascripts/src/input/keyboard_spec.js +4 -4
  29. data/spec/javascripts/src/input/mouse_spec.js +8 -7
  30. data/spec/javascripts/src/math/random_spec.js +8 -0
  31. data/spec/javascripts/src/util/clone_spec.js +20 -0
  32. data/spec/lib/entityjs/commands/build_spec.rb +3 -8
  33. data/spec/lib/entityjs/commands/html_spec.rb +27 -0
  34. data/spec/lib/entityjs/commands/min_spec.rb +30 -0
  35. data/spec/lib/entityjs/config_spec.rb +6 -0
  36. data/spec/lib/entityjs/page_spec.rb +4 -4
  37. data/src/core/comp.js +87 -31
  38. data/src/core/entity.js +38 -43
  39. data/src/core/load.js +2 -8
  40. data/src/core/query.js +17 -5
  41. data/src/core/re.js +1 -1
  42. data/src/core/system.js +8 -11
  43. data/src/cycle/drawlist.js +11 -11
  44. data/src/cycle/update.js +5 -5
  45. data/src/display/align.js +10 -3
  46. data/src/display/animate.js +26 -12
  47. data/src/display/el.js +99 -0
  48. data/src/input/keyboard.js +5 -5
  49. data/src/input/mouse.js +16 -11
  50. data/src/math/bisect.js +1 -1
  51. data/src/math/force.js +4 -4
  52. data/src/math/hitmap.js +2 -1
  53. data/src/math/iso.js +1 -1
  54. data/src/math/random.js +17 -2
  55. data/src/math/tile.js +1 -1
  56. data/src/media/sound.js +1 -1
  57. data/src/pattern/pathfind.js +2 -4
  58. data/src/save/storage.js +1 -1
  59. data/src/util/clone.js +12 -0
  60. data/src/util/scene.js +21 -16
  61. data/templates/circle/game.json +16 -0
  62. data/templates/circle/scripts/displays/circle.js +40 -0
  63. data/templates/circle/scripts/scenes/home.js +8 -17
  64. data/templates/circle/tests/scenes/home_test.js +3 -11
  65. data/templates/dom/game.json +6 -0
  66. data/templates/dom/scripts/els/btn.js +5 -0
  67. data/templates/dom/scripts/els/contain.js +5 -0
  68. data/templates/dom/scripts/els/header.js +5 -0
  69. data/templates/{animation → dom}/scripts/init.js +0 -0
  70. data/templates/dom/scripts/scenes/home.js +22 -0
  71. data/templates/{animation → dom}/scripts/scenes/load.js +0 -0
  72. data/templates/dom/tests/scenes/home_test.js +9 -0
  73. data/templates/{animation → dom}/tests/scenes/load_test.js +0 -0
  74. data/templates/isometric/game.json +16 -0
  75. data/templates/platform/game.json +18 -0
  76. data/templates/platform/scripts/displays/hero.js +1 -1
  77. data/templates/platform/scripts/items/coin.js +1 -1
  78. data/templates/platform/scripts/items/spring.js +1 -1
  79. data/templates/platform/tests/displays/hero_test.js +4 -4
  80. data/templates/platform/tests/factories.js +1 -1
  81. data/templates/platform/tests/items/coin_test.js +1 -1
  82. data/templates/pong/game.json +16 -0
  83. data/templates/tiltmaze/game.json +16 -0
  84. data/templates/tiltmaze/scripts/structs/level.js +1 -1
  85. data/templates/tiltmaze/scripts/tiles/walltile.js +1 -1
  86. metadata +45 -32
  87. data/.rspec +0 -2
  88. data/public/tests.html +0 -31
  89. data/src/cycle/worker.js +0 -9
  90. data/templates/animation/assets/images/hero.png +0 -0
  91. data/templates/animation/scripts/scenes/home.js +0 -41
  92. data/templates/animation/tests/init_test.js +0 -4
  93. data/templates/animation/tests/scenes/home_test.js +0 -15
  94. data/templates/arrow_keys/assets/images/arrow.png +0 -0
  95. data/templates/arrow_keys/config.yml +0 -22
  96. data/templates/arrow_keys/readme.txt +0 -9
  97. data/templates/arrow_keys/scripts/displays/arrow.js +0 -69
  98. data/templates/arrow_keys/scripts/init.js +0 -10
  99. data/templates/arrow_keys/scripts/inputs/controls.js +0 -35
  100. data/templates/arrow_keys/scripts/scenes/home.js +0 -20
  101. data/templates/arrow_keys/scripts/scenes/load.js +0 -57
  102. data/templates/arrow_keys/tests/displays/arrow_test.js +0 -29
  103. data/templates/arrow_keys/tests/init_test.js +0 -4
  104. data/templates/arrow_keys/tests/inputs/controls_test.js +0 -32
  105. data/templates/arrow_keys/tests/scenes/home_test.js +0 -0
  106. data/templates/arrow_keys/tests/scenes/load_test.js +0 -18
  107. data/templates/circle/config.yml +0 -22
  108. data/templates/isometric/config.yml +0 -22
  109. data/templates/platform/config.yml +0 -23
  110. data/templates/pong/config.yml +0 -22
  111. data/templates/tiltmaze/config.yml +0 -25
data/.gitignore CHANGED
@@ -7,3 +7,4 @@ pkg/*
7
7
  ._redcar
8
8
  mygame
9
9
  *.min.js
10
+ .rspec
@@ -19,6 +19,6 @@ case code
19
19
  puts "EntityJS game not found"
20
20
  puts "Move inside the root directory"
21
21
  when 3
22
- puts "File/Directory exists"
22
+ puts "File/Directory already exists"
23
23
 
24
24
  end
@@ -20,13 +20,14 @@ Gem::Specification.new do |s|
20
20
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
21
  s.require_paths = ["lib"]
22
22
 
23
- # specify any dependencies here; for example:
24
23
  s.add_development_dependency "rspec"
25
24
  s.add_development_dependency "jasmine"
26
25
 
27
- s.add_dependency "sinatra", ">= 1.3.0"
26
+ s.add_dependency "sinatra", ">= 1.0"
28
27
  s.add_dependency "coffee-script"
29
28
  s.add_dependency 'uglifier'
30
29
  s.add_dependency 'json'
31
30
  s.add_dependency 'cobravsmongoose'
31
+ s.add_dependency 'cssmin'
32
+
32
33
  end
@@ -38,6 +38,14 @@ rescue LoadError
38
38
  exit
39
39
  end
40
40
 
41
+ begin
42
+ require "cssmin"
43
+ rescue LoadError
44
+ puts "Could not load 'cssmin'"
45
+ puts "run 'gem install cssmin'"
46
+ exit
47
+ end
48
+
41
49
  module Entityjs
42
50
 
43
51
  def self.root
@@ -67,7 +75,11 @@ module Entityjs
67
75
  return nil
68
76
  end
69
77
  end
70
-
78
+
79
+ def self.public_path
80
+ return "#{Entityjs::root}/public"
81
+ end
82
+
71
83
  end
72
84
 
73
85
  require 'entityjs/command'
@@ -1,5 +1,4 @@
1
- Dir.glob("#{Entityjs::root}/lib/entityjs/*.rb").each {|f| require f }
2
- Dir.glob("#{Entityjs::root}/lib/entityjs/*/*.rb").each {|f| require f }
1
+ Dir.glob("#{Entityjs::root}/lib/entityjs//**/*.rb").each {|f| require f }
3
2
 
4
3
  # 0 - ok
5
4
  # 1 - command not found
@@ -23,11 +22,15 @@ module Entityjs
23
22
  when /^(test|t)$/
24
23
  return Entityjs::Test.generate(args)
25
24
 
26
- when 'release'
25
+ when '/^(release|r)$/'
27
26
  return Entityjs::Release.generate(args)
27
+
28
28
  when 'eunit'
29
29
  return Entityjs::Eunit.generate(args)
30
30
 
31
+ when 'min'
32
+ return Entityjs::Min.generate(args)
33
+
31
34
  when /^(comp|c)$/
32
35
  return Entityjs::Comp.generate(args)
33
36
 
@@ -37,6 +40,9 @@ module Entityjs
37
40
  when /^(font|f)$/
38
41
  return Entityjs::Font.generate(args)
39
42
 
43
+ when /^(html)$/
44
+ return Entityjs::Html.generate(args)
45
+
40
46
  when /^(version|v|-v)$/
41
47
  puts 'EntityJS V'+Entityjs::VERSION
42
48
  return 0
@@ -44,19 +50,19 @@ module Entityjs
44
50
  when /^(help|h|-h)$/
45
51
  puts ""
46
52
  puts '---- Commands ----'
47
- puts 'entityjs new [name]'
48
- puts 'entityjs new [name] [template]'
49
- puts 'entityjs templates'
50
- puts 'entityjs comp [name]'
51
- puts 'entityjs test [name]'
52
- puts 'entityjs test [name] [tests]+'
53
- puts 'entityjs font [name] (soon...)'
54
- puts 'entityjs release'
55
- puts 'entityjs build'
56
- puts 'entityjs build [name]'
57
- puts 'entityjs server'
58
- puts 'entityjs help'
59
- puts 'entityjs version'
53
+ puts 'new [name]'
54
+ puts 'new [name] [template]'
55
+ puts 'templates'
56
+ puts 'comp [name]'
57
+ puts 'test [name]'
58
+ puts 'test [name] [tests]+'
59
+ puts 'font [name] (soon...)'
60
+ puts 'release'
61
+ puts 'html'
62
+ puts 'build'
63
+ puts 'server'
64
+ puts 'help'
65
+ puts 'version'
60
66
  return 0
61
67
 
62
68
  end
@@ -6,7 +6,7 @@ module Entityjs
6
6
 
7
7
  class Build
8
8
 
9
- def self.generate(name=nil)
9
+ def self.generate(args=nil)
10
10
 
11
11
  if !Dirc.game?
12
12
  return 2
@@ -14,63 +14,63 @@ module Entityjs
14
14
 
15
15
  Config.instance.reload
16
16
 
17
- if name.nil? || name.empty?
18
- date = Time.now.strftime('%s')
19
- name = "build-#{date}"
20
- else
21
- name = name.first
22
- end
23
-
24
- builds_folder = Config.builds_folder
25
- assets_folder = Config.assets_folder
17
+ build_folder = Config.instance.build_path
18
+ assets_folder = Config.instance.build_assets_path
26
19
  images_folder = Config.images_folder
27
20
  sounds_folder = Config.sounds_folder
28
21
  scripts_folder = Config.scripts_folder
29
22
 
30
- final_name = 'game.min.js'
23
+ final_name = Config.instance.build_name+'.js'
31
24
  html_name = 'play.html'
32
25
 
26
+ puts "Building to #{build_folder}"
27
+
33
28
  #build if it doesn't exist
34
- Dirc.create_dir('builds', true)
35
-
36
- #create new directory
37
- if File.directory?(name)
38
- return 3
39
- end
29
+ Dirc.create_dir(build_folder, true)
40
30
 
41
- assets_root = Dirc.game_root+'/'+assets_folder
31
+ #clear directory
32
+ #FileUtils.rm_rf("#{build_folder}/.", :secure=> true)
42
33
 
43
- Dir.mkdir(name)
44
- Dir.chdir(name)
34
+ assets_root = Dirc.game_root+'/'+Config.assets_folder
45
35
 
46
36
  #copy everything inside the assets folder
47
- puts "Copying assets folder"
48
- FileUtils.cp_r assets_root, assets_folder
37
+ puts "Copying assets folder to #{assets_folder}"
38
+ FileUtils.cp_r assets_root+'/.', assets_folder
49
39
 
50
40
  #append all files into one big file
51
- puts "Compiling code"
52
-
53
- entity_src = self.compile_entity(Config.instance.entity_ignore)
54
- scripts = self.compile_scripts(Config.instance.scripts_ignore, Config.instance.scripts_order)
55
-
56
- out = entity_src+scripts
41
+ puts "Compiling scripts"
42
+
43
+ out = self.compile_game
57
44
 
45
+ puts "Minifying scripts"
46
+
47
+ out = self.minify(out)
48
+
49
+ puts "Minifying styles"
50
+
51
+ css = self.minify_styles(self.compile_styles(Config.instance.build_styles_ignore))
52
+
58
53
  #minify
59
54
  puts "Almost done..."
60
-
55
+
61
56
  #save
62
57
  File.open(final_name, 'w') do |f|
63
58
 
64
- f.write(self.minify(out))
65
-
66
- f.close
59
+ f.write(out)
67
60
  end
68
61
 
69
- #create play.html
70
- puts "Creating play page"
62
+ #save css
63
+ File.open(Config.instance.build_styles_path+"/"+Config.instance.build_styles_name+'.css', 'w') do |f|
64
+ f.write(css)
65
+ end
66
+
67
+
68
+ if Config.instance.build_ignore_play.nil?
69
+ #create play.html
70
+ puts "Creating play page"
71
71
 
72
- File.open(html_name, 'w') do |f|
73
- f.write(%Q(<!DOCTYPE html>
72
+ #create play.html code
73
+ play_code = %Q(<!DOCTYPE html>
74
74
  <html>
75
75
  <head>
76
76
  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
@@ -80,13 +80,25 @@ module Entityjs
80
80
  <canvas id='#{Config.instance.canvas_id}' width='#{Config.instance.width}' height='#{Config.instance.height}'>Error browser does not support canvas element.</canvas>
81
81
  </body>
82
82
  </html>
83
- ))
84
- f.close
83
+ )
84
+
85
+ #check if local play.html exists
86
+ if Dirc::exists?('play.html')
87
+ #create js for html
88
+ js = "<script src='#{final_name}' type='text/javascript'></script>"
89
+ play_code = Page::render_play_page(:js=>js)
90
+ end
91
+
92
+ File.open(html_name, 'w') do |f|
93
+ f.write(play_code)
94
+ end
95
+ else
96
+ puts "Ignoring play.html"
85
97
  end
86
98
 
87
- puts "Successfully built!"
99
+ puts "Build Complete!"
88
100
  puts "Build is at"
89
- puts " #{builds_folder}/#{name}"
101
+ puts " #{File.expand_path(build_folder)}"
90
102
 
91
103
  Dirc.to_game_root
92
104
 
@@ -104,7 +116,7 @@ module Entityjs
104
116
  end
105
117
 
106
118
  #add version
107
- out = out.gsub(/\$VERSION/, Entityjs::VERSION)
119
+ out = out.gsub(/RE_VERSION/, Entityjs::VERSION)
108
120
 
109
121
  return out
110
122
  end
@@ -123,7 +135,23 @@ module Entityjs
123
135
 
124
136
  return out
125
137
  end
126
-
138
+
139
+ def self.compile_styles(ignore = nil)
140
+ styles = Dirc.find_styles(ignore)
141
+
142
+ out = ''
143
+
144
+ styles.each do |i|
145
+ out += IO.read(i)
146
+ end
147
+
148
+ return Config.preprocess(out)
149
+ end
150
+
151
+ def self.minify_styles(styles)
152
+ return CSSMin.minify(styles)
153
+ end
154
+
127
155
  #compiles all game source and returns it
128
156
  def self.compile_scripts(ignore = nil, order=nil)
129
157
  #find with short urls for proper data processing
@@ -137,21 +165,41 @@ module Entityjs
137
165
  out += "\n"
138
166
  end
139
167
 
168
+ out = Config.preprocess(out)
169
+
140
170
  #add js config
141
171
  out += self.js_config
142
172
 
143
173
  return out
144
174
  end
145
175
 
176
+ def self.compile_game
177
+
178
+ entity_src = self.compile_entity(Config.instance.build_entity_ignore+Config.instance.entity_ignore)
179
+ scripts = self.compile_scripts(Config.instance.build_scripts_ignore+Config.instance.scripts_ignore, Config.instance.scripts_order)
180
+
181
+ self.build_wrap(entity_src+scripts)
182
+ end
183
+
184
+ def self.build_wrap(code)
185
+
186
+ head = Config.instance.build_head
187
+ foot = Config.instance.build_foot
188
+
189
+ return head+code+foot
190
+ end
191
+
146
192
  #minifies source and returns it
147
- def self.minify(code, license=true)
193
+ def self.minify(code, ops={})
194
+ ops[:copyright] ||= false
195
+ ops[:license] ||= true
148
196
 
149
- code = Uglifier.compile(code, :copyright=>false)
197
+ code = Uglifier.compile(code, :copyright=>ops[:copyright])
150
198
 
151
199
  #add entity license statement
152
- if license.is_a? String
153
- code = license + code
154
- elsif license
200
+ if ops[:license].is_a? String
201
+ code = ops[:license] + code
202
+ elsif !ops[:license].nil?
155
203
  code = Config.instance.license + code
156
204
  end
157
205
 
@@ -159,7 +207,7 @@ module Entityjs
159
207
  end
160
208
 
161
209
  def self.js_config(path = nil, images = nil, sounds = nil, canvas = nil)
162
- path ||= 'assets/'
210
+ path ||= Config.assets_folder+'/'
163
211
  images ||= self.images_to_js
164
212
  sounds ||= self.sounds_to_js
165
213
  canvas ||= Config.instance.canvas_id
@@ -19,7 +19,7 @@ module Entityjs
19
19
 
20
20
  license = "/* QUnit V1.5.0pre with EntityJS Entensions | http://docs.jquery.com/QUnit */\n"
21
21
 
22
- min = Entityjs::Build.minify(min, license)
22
+ min = Entityjs::Build.minify(min, :license=>license)
23
23
 
24
24
  File.open(name, 'w') do |f|
25
25
 
@@ -0,0 +1,31 @@
1
+ module Entityjs
2
+
3
+ class Html
4
+
5
+ def self.generate(name='')
6
+ if !Dirc.game?
7
+ return 2
8
+ end
9
+
10
+ puts "Creating HTML files"
11
+
12
+ play = 'play.html'
13
+ test = 'test.html'
14
+
15
+ if File.exists?(play) || File.exists?(test)
16
+ return 3
17
+ end
18
+
19
+ FileUtils.cp Entityjs::public_path+'/'+play, play
20
+ FileUtils.cp Entityjs::public_path+'/'+test, test
21
+
22
+
23
+ puts "Created #{play}"
24
+ puts "Created #{test}"
25
+
26
+ return 0
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,37 @@
1
+ module Entityjs
2
+
3
+ class Min
4
+
5
+ def self.generate(args=nil)
6
+
7
+ if !Dirc.game?
8
+ return 2
9
+ end
10
+
11
+ Config.instance.reload
12
+
13
+ final_name = Config.instance.build_name+'.js'
14
+ path = Config.instance.build_path+'/'+final_name
15
+
16
+ puts "Compiling code"
17
+
18
+ out = Build.compile_game
19
+
20
+ puts "Minifying"
21
+
22
+ out = Build.minify(out)
23
+
24
+ puts "Writing to #{path}"
25
+
26
+ File.open(path, 'w') do |f|
27
+ f.write(out)
28
+ end
29
+
30
+ puts "Done"
31
+
32
+ return 0
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -27,6 +27,9 @@ module Entityjs
27
27
  puts "Version: #{Entityjs::VERSION}"
28
28
  puts "Website: http://entityjs.com"
29
29
  puts ""
30
+ puts "Try it out:"
31
+ puts " cd #{name}"
32
+ puts " entityjs server"
30
33
 
31
34
  Dirc.change_dir(name)
32
35
 
@@ -22,16 +22,22 @@ module Entityjs
22
22
 
23
23
  get '/' do
24
24
 
25
- Page.render_play()
25
+ Page.render_play_page()
26
26
 
27
27
  end
28
28
 
29
- get '/tests' do
29
+ get '/test' do
30
30
 
31
- Page.render_tests()
31
+ Page.render_test_page()
32
32
 
33
33
  end
34
34
 
35
+ get '/favicon.ico' do
36
+ content_type 'image/ico'
37
+
38
+ Page.render_favicon
39
+ end
40
+
35
41
  #entity source code
36
42
  get '/entityjs/*' do
37
43
  content_type 'text/javascript'