entityjs 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
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'