entityjs 0.2.2 → 0.3.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.
- data/.gitignore +7 -6
- data/.rspec +2 -0
- data/README.md +170 -49
- data/Rakefile +9 -0
- data/bin/entityjs +24 -14
- data/entityjs.gemspec +15 -9
- data/lib/entityjs/assets.rb +167 -0
- data/lib/entityjs/command.rb +52 -27
- data/lib/entityjs/commands/build.rb +128 -0
- data/lib/entityjs/commands/comp.rb +74 -0
- data/lib/entityjs/commands/font.rb +73 -0
- data/lib/entityjs/commands/new.rb +59 -0
- data/lib/entityjs/commands/server.rb +54 -0
- data/lib/entityjs/commands/templates.rb +28 -0
- data/lib/entityjs/commands/test.rb +69 -0
- data/lib/entityjs/config.rb +130 -0
- data/lib/entityjs/dirc.rb +184 -0
- data/lib/entityjs/parsers/parse_tmx.rb +41 -0
- data/lib/entityjs/parsers/parse_xml.rb +39 -0
- data/lib/entityjs/version.rb +1 -1
- data/lib/entityjs.rb +53 -0
- data/license.txt +1 -1
- data/public/play.html +122 -0
- data/public/qunit/qunit.css +226 -0
- data/public/qunit/qunit.entity.js +190 -0
- data/public/qunit/qunit.input.js +200 -0
- data/public/qunit/qunit.js +1598 -0
- data/public/qunit/qunit.mock.js +97 -0
- data/public/tests.html +45 -0
- data/spec/javascripts/helpers/accept.png +0 -0
- data/spec/javascripts/helpers/alligator.mp3 +0 -0
- data/spec/javascripts/helpers/alligator.ogg +0 -0
- data/spec/javascripts/helpers/canvas.js +15 -0
- data/spec/javascripts/helpers/entityunit.js +50 -0
- data/spec/javascripts/helpers/factories.js +11 -0
- data/spec/javascripts/helpers/jquery-1.7.1.min.js +4 -0
- data/spec/javascripts/src/core/comp_spec.js +145 -0
- data/spec/javascripts/src/core/entity_spec.js +324 -0
- data/spec/javascripts/src/core/load_spec.js +71 -0
- data/spec/javascripts/src/core/query_spec.js +157 -0
- data/spec/javascripts/src/core/re_spec.js +61 -0
- data/spec/javascripts/src/core/system_spec.js +41 -0
- data/spec/javascripts/src/cycle/draw_spec.js +106 -0
- data/spec/javascripts/src/cycle/tick_spec.js +20 -0
- data/spec/javascripts/src/cycle/update_spec.js +86 -0
- data/spec/javascripts/src/display/align_spec.js +43 -0
- data/spec/javascripts/src/display/circle_spec.js +26 -0
- data/spec/javascripts/src/display/group_spec.js +7 -0
- data/spec/javascripts/src/display/image_spec.js +32 -0
- data/spec/javascripts/src/display/imgtext_spec.js +32 -0
- data/spec/javascripts/src/display/rect_spec.js +13 -0
- data/spec/javascripts/src/display/screen_spec.js +47 -0
- data/spec/javascripts/src/display/sprite_spec.js +28 -0
- data/spec/javascripts/src/display/text_spec.js +30 -0
- data/spec/javascripts/src/input/keyboard_spec.js +67 -0
- data/spec/javascripts/src/input/mouse_spec.js +133 -0
- data/spec/javascripts/src/input/pressed_spec.js +31 -0
- data/spec/javascripts/src/math/bisect_spec.js +59 -0
- data/spec/javascripts/src/math/body_spec.js +30 -0
- data/spec/javascripts/src/math/drag_spec.js +38 -0
- data/spec/javascripts/src/math/force_spec.js +134 -0
- data/spec/javascripts/src/math/hit_spec.js +28 -0
- data/spec/javascripts/src/math/hitmap_spec.js +52 -0
- data/spec/javascripts/src/math/limit_spec.js +35 -0
- data/spec/javascripts/src/math/point_spec.js +57 -0
- data/spec/javascripts/src/math/tile_spec.js +78 -0
- data/spec/javascripts/src/media/sound_spec.js +40 -0
- data/spec/javascripts/src/pattern/automap_spec.js +93 -0
- data/spec/javascripts/src/pattern/flicker_spec.js +66 -0
- data/spec/javascripts/src/pattern/timestep_spec.js +23 -0
- data/spec/javascripts/src/save/storage_spec.js +37 -0
- data/spec/javascripts/src/util/log_spec.js +9 -0
- data/spec/javascripts/src/util/polyfill_spec.js +13 -0
- data/spec/javascripts/src/util/random_spec.js +33 -0
- data/spec/javascripts/src/util/scene_spec.js +52 -0
- data/spec/javascripts/src/util/sheet_spec.js +25 -0
- data/spec/javascripts/src/util/support_spec.js +17 -0
- data/spec/javascripts/support/jasmine.yml +76 -0
- data/spec/javascripts/support/jasmine_config.rb +32 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/lib/entityjs/assets_spec.rb +216 -0
- data/spec/lib/entityjs/command_spec.rb +53 -0
- data/spec/lib/entityjs/commands/build_spec.rb +69 -0
- data/spec/lib/entityjs/commands/comp_spec.rb +45 -0
- data/spec/lib/entityjs/commands/font_spec.rb +7 -0
- data/spec/lib/entityjs/commands/new_spec.rb +20 -0
- data/spec/lib/entityjs/commands/templates_spec.rb +9 -0
- data/spec/lib/entityjs/commands/test_spec.rb +31 -0
- data/spec/lib/entityjs/config_spec.rb +19 -0
- data/spec/lib/entityjs/dirc_spec.rb +83 -0
- data/spec/lib/entityjs/version_spec.rb +9 -0
- data/spec/spec_helper.rb +21 -3
- data/spec/support/factories.rb +19 -0
- data/spec/support/mygame.rb +11 -0
- data/src/core/comp.js +318 -0
- data/src/core/entity.js +549 -0
- data/src/core/load.js +242 -0
- data/src/core/query.js +354 -0
- data/src/core/re.js +74 -0
- data/src/core/system.js +121 -0
- data/src/cycle/draw.js +178 -0
- data/src/cycle/tick.js +25 -0
- data/src/{entityjs/cycle → cycle}/tween.js +60 -60
- data/src/{entityjs/cycle → cycle}/update.js +86 -85
- data/src/{entityjs/cycle → cycle}/wait.js +22 -21
- data/src/{entityjs/cycle → cycle}/worker.js +8 -8
- data/src/display/align.js +45 -0
- data/src/display/circle.js +33 -0
- data/src/{entityjs/display → display}/group.js +62 -62
- data/src/display/image.js +35 -0
- data/src/display/imgtext.js +102 -0
- data/src/{entityjs/display → display}/rect.js +18 -18
- data/src/display/screen.js +57 -0
- data/src/display/sprite.js +54 -0
- data/src/display/text.js +44 -0
- data/src/{entityjs/input → input}/keyboard.js +152 -150
- data/src/input/mouse.js +111 -0
- data/src/input/pressed.js +41 -0
- data/src/{entityjs/input → input}/touch.js +24 -28
- data/src/math/bisect.js +84 -0
- data/src/math/body.js +70 -0
- data/src/{entityjs/math → math}/drag.js +44 -38
- data/src/math/force.js +143 -0
- data/src/math/hit.js +32 -0
- data/src/math/hitmap.js +167 -0
- data/src/math/limit.js +37 -0
- data/src/math/point.js +40 -0
- data/src/math/tile.js +109 -0
- data/src/media/channel.js +93 -0
- data/src/{entityjs/media → media}/playlist.js +4 -4
- data/src/media/sound.js +114 -0
- data/src/{entityjs/net → net}/socket.js +51 -51
- data/src/pattern/automap.js +133 -0
- data/src/{entityjs/pattern → pattern}/flicker.js +206 -213
- data/src/pattern/timestep.js +31 -0
- data/src/{entityjs/save → save}/database.js +6 -6
- data/src/{entityjs/save → save}/storage.js +47 -56
- data/src/{entityjs/util → util}/log.js +17 -25
- data/src/{entityjs/util → util}/polyfill.js +24 -24
- data/src/util/random.js +20 -0
- data/src/util/scene.js +102 -0
- data/src/util/sheet.js +35 -0
- data/src/{entityjs/util → util}/support.js +109 -132
- data/{examples/keys → templates/arrow_keys/assets/images}/arrow.png +0 -0
- data/templates/arrow_keys/config.yml +22 -0
- data/templates/arrow_keys/readme.txt +9 -0
- data/templates/arrow_keys/scripts/display/arrow.js +69 -0
- data/templates/arrow_keys/scripts/init.js +10 -0
- data/templates/arrow_keys/scripts/input/controls.js +35 -0
- data/templates/arrow_keys/scripts/scenes/home.js +20 -0
- data/templates/arrow_keys/scripts/scenes/load.js +57 -0
- data/templates/arrow_keys/tests/display/arrow_test.js +29 -0
- data/templates/arrow_keys/tests/init_test.js +4 -0
- data/templates/arrow_keys/tests/input/controls_test.js +32 -0
- data/templates/arrow_keys/tests/scenes/home_test.js +0 -0
- data/templates/arrow_keys/tests/scenes/load_test.js +16 -0
- data/templates/blank/config.yml +22 -0
- data/templates/blank/readme.txt +79 -0
- data/templates/platform/assets/images/bit.png +0 -0
- data/templates/platform/assets/images/hero.png +0 -0
- data/templates/platform/assets/images/items.png +0 -0
- data/templates/platform/assets/images/tiles.png +0 -0
- data/templates/platform/assets/levels/level1.tmx +44 -0
- data/templates/platform/assets/sounds/coin.mp3 +0 -0
- data/templates/platform/assets/sounds/coin.ogg +0 -0
- data/templates/platform/config.yml +22 -0
- data/templates/platform/readme.txt +87 -0
- data/templates/platform/scripts/display/bit.js +12 -0
- data/templates/platform/scripts/display/hero.js +77 -0
- data/templates/platform/scripts/display/tile.js +2 -0
- data/templates/platform/scripts/display/tsprite.js +17 -0
- data/templates/platform/scripts/init.js +7 -0
- data/templates/platform/scripts/items/coin.js +27 -0
- data/templates/platform/scripts/items/item.js +41 -0
- data/templates/platform/scripts/items/spring.js +25 -0
- data/templates/platform/scripts/scenes/home.js +10 -0
- data/templates/platform/scripts/scenes/load.js +27 -0
- data/templates/platform/scripts/scenes/play.js +31 -0
- data/templates/platform/scripts/util/counter.js +34 -0
- data/templates/platform/scripts/util/level.js +84 -0
- data/templates/platform/tests/display/bit_test.js +7 -0
- data/templates/platform/tests/display/hero_test.js +73 -0
- data/templates/platform/tests/display/tile_test.js +7 -0
- data/templates/platform/tests/display/tsprite_test.js +8 -0
- data/templates/platform/tests/factories.js +30 -0
- data/templates/platform/tests/items/coin_test.js +28 -0
- data/templates/platform/tests/items/item_test.js +36 -0
- data/templates/platform/tests/items/spring_test.js +21 -0
- data/templates/platform/tests/scenes/home_test.js +9 -0
- data/templates/platform/tests/scenes/load_test.js +11 -0
- data/templates/platform/tests/scenes/play_test.js +15 -0
- data/templates/platform/tests/util/counter_test.js +9 -0
- data/templates/platform/tests/util/level_test.js +29 -0
- metadata +249 -97
- data/build/build_debug.bat +0 -1
- data/build/build_min.bat +0 -1
- data/build/config.php +0 -64
- data/build/debug.php +0 -48
- data/build/files.php +0 -74
- data/build/jsmin.php +0 -376
- data/build/min.php +0 -50
- data/changelog.txt +0 -53
- data/examples/keys/keys.html +0 -59
- data/examples/keys/keys.js +0 -148
- data/examples/mouse/mouse.html +0 -58
- data/examples/mouse/mouse.js +0 -60
- data/examples/scenes/home.png +0 -0
- data/examples/scenes/scenes.html +0 -55
- data/examples/scenes/scenes.js +0 -134
- data/examples/scenes/win.png +0 -0
- data/examples/sounds/sound1.mp3 +0 -0
- data/examples/sounds/sound1.ogg +0 -0
- data/examples/sounds/sounds.html +0 -56
- data/examples/sounds/sounds.js +0 -44
- data/examples/style/background.png +0 -0
- data/examples/style/sheet.css +0 -762
- data/examples/tiles/tiles.html +0 -56
- data/examples/tiles/tiles.js +0 -85
- data/examples/tiles/tiles.png +0 -0
- data/lib/blank/config.js +0 -4
- data/lib/blank/config.yml +0 -21
- data/lib/blank/home.js +0 -11
- data/lib/blank/init.js +0 -7
- data/lib/blank/load.js +0 -21
- data/lib/blank/play.html +0 -29
- data/lib/entity.debug.js +0 -52
- data/lib/entity.min.js +0 -184
- data/lib/entityjs/comp.rb +0 -11
- data/lib/entityjs/game.rb +0 -93
- data/lib/entityjs/min.rb +0 -11
- data/lib/entityjs/refresh.rb +0 -14
- data/spec/lib/entityjs/game_spec.rb +0 -11
- data/src/entityjs/core/component.js +0 -306
- data/src/entityjs/core/entity.js +0 -516
- data/src/entityjs/core/load.js +0 -224
- data/src/entityjs/core/query.js +0 -410
- data/src/entityjs/core/re.js +0 -70
- data/src/entityjs/core/system.js +0 -125
- data/src/entityjs/cycle/draw.js +0 -185
- data/src/entityjs/cycle/ticker.js +0 -27
- data/src/entityjs/display/anchor.js +0 -53
- data/src/entityjs/display/bitfont.js +0 -93
- data/src/entityjs/display/bitmap.js +0 -37
- data/src/entityjs/display/circle.js +0 -30
- data/src/entityjs/display/font.js +0 -41
- data/src/entityjs/display/screen.js +0 -46
- data/src/entityjs/display/sprite.js +0 -37
- data/src/entityjs/input/mouse.js +0 -123
- data/src/entityjs/input/pressed.js +0 -81
- data/src/entityjs/math/bind.js +0 -76
- data/src/entityjs/math/bisect.js +0 -69
- data/src/entityjs/math/body.js +0 -39
- data/src/entityjs/math/hitmap.js +0 -165
- data/src/entityjs/math/hittest.js +0 -26
- data/src/entityjs/math/physics.js +0 -142
- data/src/entityjs/math/point.js +0 -57
- data/src/entityjs/math/tile.js +0 -91
- data/src/entityjs/media/channel.js +0 -93
- data/src/entityjs/media/sound.js +0 -110
- data/src/entityjs/pattern/arraymap.js +0 -89
- data/src/entityjs/pattern/timestep.js +0 -34
- data/src/entityjs/util/random.js +0 -38
- data/src/entityjs/util/scene.js +0 -101
- data/src/entityjs/util/sheet.js +0 -51
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module('controls');
|
|
2
|
+
|
|
3
|
+
var controls = re.e('controls');
|
|
4
|
+
|
|
5
|
+
test('addArrow', function(){
|
|
6
|
+
|
|
7
|
+
var old = re('arrow').length;
|
|
8
|
+
|
|
9
|
+
//should call addarrow
|
|
10
|
+
expectCall(controls, 'addArrow');
|
|
11
|
+
|
|
12
|
+
//press space
|
|
13
|
+
keypress('space');
|
|
14
|
+
|
|
15
|
+
//check that a new arrow was created
|
|
16
|
+
equal(re('arrow').length, old+1);
|
|
17
|
+
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test('removeArrow', function(){
|
|
21
|
+
|
|
22
|
+
var old = re('arrow').length;
|
|
23
|
+
|
|
24
|
+
expectCall(controls, 'removeArrow');
|
|
25
|
+
|
|
26
|
+
//press r
|
|
27
|
+
keypress('r');
|
|
28
|
+
|
|
29
|
+
//check that a new arrow was removed
|
|
30
|
+
equal(re('arrow').length, old-1);
|
|
31
|
+
|
|
32
|
+
});
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module('load');
|
|
2
|
+
|
|
3
|
+
test('load assets', function(){
|
|
4
|
+
|
|
5
|
+
//replace re.scene('home').enter with start()
|
|
6
|
+
stub(re.scene('home'), 'enter', function(){ start(); });
|
|
7
|
+
|
|
8
|
+
//go into the load scene
|
|
9
|
+
re.scene('load').enter();
|
|
10
|
+
|
|
11
|
+
//it should be loading the assets
|
|
12
|
+
//stop until it finishes and enters the new home scene
|
|
13
|
+
//the home scene should then call start()
|
|
14
|
+
stop();
|
|
15
|
+
|
|
16
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Configure your game settings
|
|
2
|
+
|
|
3
|
+
width: 500
|
|
4
|
+
height: 400
|
|
5
|
+
canvas-id: game-canvas
|
|
6
|
+
|
|
7
|
+
#files to ignore in /scripts
|
|
8
|
+
scripts-ignore:
|
|
9
|
+
|
|
10
|
+
#specify files to be loaded first in /scripts
|
|
11
|
+
order:
|
|
12
|
+
|
|
13
|
+
#components to ignore in the entityjs source
|
|
14
|
+
#reduce file size by ignoring unused components
|
|
15
|
+
entity-ignore:
|
|
16
|
+
socket
|
|
17
|
+
wait
|
|
18
|
+
group
|
|
19
|
+
|
|
20
|
+
#ignore tests in /tests
|
|
21
|
+
tests-ignore:
|
|
22
|
+
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
------------- EntityJS Gem ----------------------
|
|
2
|
+
|
|
3
|
+
The EntityJS Gem lets you quickly create HTML5 javascript games.
|
|
4
|
+
|
|
5
|
+
# Directory Structure
|
|
6
|
+
|
|
7
|
+
## /assets
|
|
8
|
+
Contains all sounds, images and data files. Place all sounds in the sounds directory
|
|
9
|
+
and all the images in the images directory. These directories will be looked at
|
|
10
|
+
and an asset array will be created for easy asset loading (see scripts/scenes/load.js)
|
|
11
|
+
|
|
12
|
+
Creating any other directory or placing files in the levels directory will be seen
|
|
13
|
+
as data files and will be read and automatically put in js files.
|
|
14
|
+
|
|
15
|
+
For example, if I have a directory like /assets/animations/monster.json.
|
|
16
|
+
|
|
17
|
+
The file will automatically be read upon calling 'entityjs refresh' and will be turned into this:
|
|
18
|
+
|
|
19
|
+
re.e('monster.json animation')
|
|
20
|
+
.attr(**Animation JSON here**);
|
|
21
|
+
|
|
22
|
+
Which means you can edit files in different programs and not worry about copying and pasting
|
|
23
|
+
the contents. Just run entityjs refresh.
|
|
24
|
+
|
|
25
|
+
At the moment JSON, XML and TMX is supported but in the future, YAML, and CSV will be supported.
|
|
26
|
+
TMX is a special XML format for a tile map editor called tiled.
|
|
27
|
+
|
|
28
|
+
## /builds
|
|
29
|
+
|
|
30
|
+
Contains assets and minified code for the game.
|
|
31
|
+
|
|
32
|
+
## /scripts
|
|
33
|
+
|
|
34
|
+
Contains javascripts for the game.
|
|
35
|
+
|
|
36
|
+
## /tests
|
|
37
|
+
|
|
38
|
+
Contains tests for the game. It is good practice to keep this structured exactly the same as the scripts
|
|
39
|
+
directory.
|
|
40
|
+
|
|
41
|
+
## config.yml
|
|
42
|
+
|
|
43
|
+
A configuration file in yaml. This can be edited in any text editor.
|
|
44
|
+
|
|
45
|
+
## readme.txt
|
|
46
|
+
|
|
47
|
+
Good practice to make one for every game to help other people.
|
|
48
|
+
|
|
49
|
+
# Commands
|
|
50
|
+
|
|
51
|
+
## create a new entityjs game
|
|
52
|
+
entityjs new [project_name]
|
|
53
|
+
|
|
54
|
+
- example
|
|
55
|
+
entityjs new alien_shooter
|
|
56
|
+
|
|
57
|
+
- create game with arrow_keys template
|
|
58
|
+
entityjs new alien_shooter alien arrow_keys
|
|
59
|
+
|
|
60
|
+
## create a new component
|
|
61
|
+
entityjs comp [component_name]
|
|
62
|
+
|
|
63
|
+
- example
|
|
64
|
+
entityjs comp hero
|
|
65
|
+
|
|
66
|
+
## build game
|
|
67
|
+
entityjs build
|
|
68
|
+
|
|
69
|
+
Exports game in builds directory
|
|
70
|
+
|
|
71
|
+
## build game with custom name
|
|
72
|
+
entityjs build release1
|
|
73
|
+
|
|
74
|
+
## Run server
|
|
75
|
+
entityjs server
|
|
76
|
+
or
|
|
77
|
+
entityjs s
|
|
78
|
+
|
|
79
|
+
Navigate to localhost:2345 to play the game.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<map version="1.0" orientation="orthogonal" width="20" height="16" tilewidth="25" tileheight="25">
|
|
3
|
+
<tileset firstgid="1" name="tiles" tilewidth="25" tileheight="25">
|
|
4
|
+
<image source="../images/tiles.png" width="200" height="25"/>
|
|
5
|
+
</tileset>
|
|
6
|
+
<tileset firstgid="9" name="Hero" tilewidth="25" tileheight="25">
|
|
7
|
+
<image source="../images/hero.png" width="225" height="50"/>
|
|
8
|
+
</tileset>
|
|
9
|
+
<tileset firstgid="27" name="items" tilewidth="25" tileheight="25">
|
|
10
|
+
<image source="../images/items.png" width="250" height="50"/>
|
|
11
|
+
</tileset>
|
|
12
|
+
<layer name="Base" width="20" height="16">
|
|
13
|
+
<data encoding="csv">
|
|
14
|
+
0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,
|
|
15
|
+
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
16
|
+
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
17
|
+
0,0,0,0,0,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
18
|
+
0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
19
|
+
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
20
|
+
0,0,0,0,0,0,0,0,0,7,0,0,0,7,7,0,0,0,0,0,
|
|
21
|
+
0,0,0,0,0,0,0,0,7,0,0,0,7,0,8,0,0,0,0,0,
|
|
22
|
+
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
23
|
+
0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,
|
|
24
|
+
5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,
|
|
25
|
+
1,2,2,5,0,0,0,0,7,0,0,0,6,2,5,0,0,0,0,0,
|
|
26
|
+
1,1,1,3,0,0,6,2,2,5,0,6,1,1,1,5,0,0,0,0,
|
|
27
|
+
1,1,1,3,0,6,1,1,1,1,2,1,1,1,1,1,5,0,0,0,
|
|
28
|
+
1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,
|
|
29
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
|
30
|
+
</data>
|
|
31
|
+
</layer>
|
|
32
|
+
<objectgroup color="#5e3ea4" name="Hero" width="20" height="16">
|
|
33
|
+
<object gid="9" x="0" y="25"/>
|
|
34
|
+
</objectgroup>
|
|
35
|
+
<objectgroup name="Items" width="20" height="16">
|
|
36
|
+
<object gid="41" x="350" y="150"/>
|
|
37
|
+
<object gid="41" x="275" y="300"/>
|
|
38
|
+
<object gid="41" x="125" y="225"/>
|
|
39
|
+
<object gid="41" x="425" y="250"/>
|
|
40
|
+
<object gid="39" x="175" y="300"/>
|
|
41
|
+
<object gid="39" x="225" y="150"/>
|
|
42
|
+
<object gid="41" x="125" y="75"/>
|
|
43
|
+
</objectgroup>
|
|
44
|
+
</map>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Configure your game settings
|
|
2
|
+
|
|
3
|
+
width: 500
|
|
4
|
+
height: 400
|
|
5
|
+
canvas-id: game-canvas
|
|
6
|
+
|
|
7
|
+
#files to ignore in /scripts
|
|
8
|
+
scripts-ignore:
|
|
9
|
+
|
|
10
|
+
#specify files to be loaded first in /scripts
|
|
11
|
+
order:
|
|
12
|
+
|
|
13
|
+
#components to ignore in the entityjs source
|
|
14
|
+
#reduce file size by ignoring unused components
|
|
15
|
+
entity-ignore:
|
|
16
|
+
socket
|
|
17
|
+
wait
|
|
18
|
+
group
|
|
19
|
+
|
|
20
|
+
#ignore tests in /tests
|
|
21
|
+
tests-ignore:
|
|
22
|
+
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
------------- EntityJS Gem ----------------------
|
|
2
|
+
|
|
3
|
+
The EntityJS Gem lets you quickly create HTML5 javascript games.
|
|
4
|
+
|
|
5
|
+
# Directory Structure
|
|
6
|
+
|
|
7
|
+
## /assets
|
|
8
|
+
Contains all sounds, images and data files. Place all sounds in the sounds directory
|
|
9
|
+
and all the images in the images directory. These directories will be looked at
|
|
10
|
+
and an asset array will be created for easy asset loading (see scripts/scenes/load.js)
|
|
11
|
+
|
|
12
|
+
Creating any other directory or placing files in the levels directory will be seen
|
|
13
|
+
as data files and will be read and automatically put in js files.
|
|
14
|
+
|
|
15
|
+
For example, if I have a directory like /assets/animations/monster.json.
|
|
16
|
+
|
|
17
|
+
The file will automatically be read upon calling 'entityjs refresh' and will be turned into this:
|
|
18
|
+
|
|
19
|
+
re.e('monster.json animation')
|
|
20
|
+
.attr(**Animation JSON here**);
|
|
21
|
+
|
|
22
|
+
Which means you can edit files in different programs and not worry about copying and pasting
|
|
23
|
+
the contents. Just run entityjs refresh.
|
|
24
|
+
|
|
25
|
+
At the moment only JSON is supported but in the future, XML, YAML, CSV and TMX will be supported.
|
|
26
|
+
TMX is a special XML format for a tile map editor.
|
|
27
|
+
|
|
28
|
+
## /builds
|
|
29
|
+
|
|
30
|
+
Contains assets and minified code for the game.
|
|
31
|
+
|
|
32
|
+
## /scripts
|
|
33
|
+
|
|
34
|
+
Contains javascripts for the game.
|
|
35
|
+
|
|
36
|
+
## /tests
|
|
37
|
+
|
|
38
|
+
Contains tests for the game. It is good practice to keep this structured exactly the same as the scripts
|
|
39
|
+
directory.
|
|
40
|
+
|
|
41
|
+
## /tmp
|
|
42
|
+
|
|
43
|
+
Contains temporary files generated by EntityJS Gem. Usually don't have to touch this.
|
|
44
|
+
Might be removed and replaced in the future.
|
|
45
|
+
|
|
46
|
+
## config.yml
|
|
47
|
+
|
|
48
|
+
A configuration file in yaml. This can be edited in any text editor.
|
|
49
|
+
|
|
50
|
+
## play.html
|
|
51
|
+
|
|
52
|
+
The current game. If its missing files, run 'entityjs r'
|
|
53
|
+
|
|
54
|
+
# Commands
|
|
55
|
+
|
|
56
|
+
## create a new entityjs game
|
|
57
|
+
entityjs new [project_name] [comps]+
|
|
58
|
+
|
|
59
|
+
- example
|
|
60
|
+
entityjs new alien_shooter
|
|
61
|
+
|
|
62
|
+
- example with components
|
|
63
|
+
entityjs new alien_shooter alien hero lazer
|
|
64
|
+
|
|
65
|
+
This will create a new game called 'alien_shooter'
|
|
66
|
+
with three components, alien, hero, lazer
|
|
67
|
+
|
|
68
|
+
## create a new component
|
|
69
|
+
entityjs comp [component_name]
|
|
70
|
+
|
|
71
|
+
- example
|
|
72
|
+
entityjs comp hero
|
|
73
|
+
|
|
74
|
+
## build game
|
|
75
|
+
entityjs build
|
|
76
|
+
|
|
77
|
+
Exports game in builds directory
|
|
78
|
+
|
|
79
|
+
## build game with custom name
|
|
80
|
+
entityjs build release1
|
|
81
|
+
|
|
82
|
+
## refresh sources
|
|
83
|
+
entityjs refresh
|
|
84
|
+
or
|
|
85
|
+
entityjs r
|
|
86
|
+
|
|
87
|
+
Creates a file called game.debug.js inside /tmp
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The bit component defines an image text to draw text on screen.
|
|
3
|
+
*/
|
|
4
|
+
re.c('bit')
|
|
5
|
+
.requires('imgtext bit.png align')
|
|
6
|
+
.defines({
|
|
7
|
+
//defines the width of each character
|
|
8
|
+
imgtext:[
|
|
9
|
+
8,4,8,12,10,12,12,4,6,6,8,8,6,8,4,12,10,6,10,10,10,10,10,10,10,10,4,4,8,8,8,10,
|
|
10
|
+
12,10,10,8,10,8,8,10,10,8,10,10,8,12,10,10,10,10,10,10,8,10,10,12,10,10,8,6,12,
|
|
11
|
+
6,8,10,6,10,10,8,10,10,8,10,10,4,6,10,4,12,10,10,10,10,8,10,8,10,10,12,8,10,10,8,4,8]
|
|
12
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
re.c('hero')
|
|
2
|
+
.requires('hero.png tsprite update force flicker body')
|
|
3
|
+
.defines({
|
|
4
|
+
|
|
5
|
+
speed:40 * re.sys.stepSize,
|
|
6
|
+
|
|
7
|
+
friX:0.75,
|
|
8
|
+
friY:0.95,
|
|
9
|
+
|
|
10
|
+
padX:6,
|
|
11
|
+
|
|
12
|
+
bodyX:24,
|
|
13
|
+
bodyY:24,
|
|
14
|
+
|
|
15
|
+
jumpSpeed:480 * re.sys.stepSize,
|
|
16
|
+
jump:false,
|
|
17
|
+
ground:true,
|
|
18
|
+
|
|
19
|
+
update:function(){
|
|
20
|
+
|
|
21
|
+
//jump
|
|
22
|
+
if(this.ground && !this.jump && re.pressed('w')){
|
|
23
|
+
this.forceJump();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
//walk back and fourth
|
|
27
|
+
if(re.pressed('a')){
|
|
28
|
+
this.velX -= this.speed;
|
|
29
|
+
this.scaleX = -1;
|
|
30
|
+
|
|
31
|
+
if(!this.jump) this.flicker('run');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if(re.pressed('d')){
|
|
35
|
+
this.velX += this.speed;
|
|
36
|
+
this.scaleX = 1;
|
|
37
|
+
|
|
38
|
+
if(!this.jump) this.flicker('run');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//switch back to idle animation if stopped moving
|
|
42
|
+
if(this.isIdle(0.3)) this.flicker('idle');
|
|
43
|
+
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
forceJump:function(){
|
|
47
|
+
this.jump = true;
|
|
48
|
+
this.velY -= this.jumpSpeed;
|
|
49
|
+
|
|
50
|
+
this.flicker('jump');
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
jumpReset:function(x, y, tx, ty){
|
|
54
|
+
//check if a hit happened on the y axis
|
|
55
|
+
if(y){
|
|
56
|
+
this.jump = false;
|
|
57
|
+
this.ground = (ty >= this.posY);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
})
|
|
62
|
+
.init(function(){
|
|
63
|
+
|
|
64
|
+
//add animations
|
|
65
|
+
this.addFlicker({
|
|
66
|
+
idle:[-1, 600, [0, 1]],
|
|
67
|
+
run:[-1, 800, [2, 3]],
|
|
68
|
+
jump:[1, 500, [4, 5, 4]],
|
|
69
|
+
ladder:[-1, 500, [6, 7]]
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
this.on({
|
|
73
|
+
update:this.update,
|
|
74
|
+
aftermath:this.jumpReset
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*
|
|
2
|
+
The tsprite component is a simple extension to sprite that defaults the size attributes.
|
|
3
|
+
*/
|
|
4
|
+
re.c('tsprite')
|
|
5
|
+
.requires('sprite')
|
|
6
|
+
.init(function(){
|
|
7
|
+
this.sizeX = re.tile.sizeX;
|
|
8
|
+
this.sizeY = re.tile.sizeY;
|
|
9
|
+
|
|
10
|
+
this.bodyX = re.tile.sizeX;
|
|
11
|
+
this.bodyY = re.tile.sizeY;
|
|
12
|
+
|
|
13
|
+
//setup registration point
|
|
14
|
+
this.regX = this.sizeX * 0.5;
|
|
15
|
+
this.regY = this.sizeY * 0.5;
|
|
16
|
+
|
|
17
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
re.c('coin')
|
|
2
|
+
.requires('item flicker')
|
|
3
|
+
.defines({
|
|
4
|
+
|
|
5
|
+
touch:function(){
|
|
6
|
+
this.collect();
|
|
7
|
+
},
|
|
8
|
+
|
|
9
|
+
collect:function(){
|
|
10
|
+
this.sfx.play();
|
|
11
|
+
this.trigger('collect');
|
|
12
|
+
this.dispose();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
})
|
|
16
|
+
.init(function(){
|
|
17
|
+
//add comp for searchability
|
|
18
|
+
this.comp('coin');
|
|
19
|
+
|
|
20
|
+
this.sfx = re.e('sound coin.sfx');
|
|
21
|
+
|
|
22
|
+
this.addFlicker('glow', -1, 1800, '14 15 15');
|
|
23
|
+
this.flicker('glow');
|
|
24
|
+
})
|
|
25
|
+
//accepted tile frames in items.png which will become coins
|
|
26
|
+
.alias('t14')
|
|
27
|
+
.alias('t15');
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
re.c('item')
|
|
2
|
+
.requires('tsprite update hit items.png')
|
|
3
|
+
.namespaces({
|
|
4
|
+
|
|
5
|
+
update:function(t){
|
|
6
|
+
|
|
7
|
+
if(this.hero.hitBody(this.posX, this.posY, this.sizeX, this.sizeY, 10, 0)){
|
|
8
|
+
this.touching = true;
|
|
9
|
+
this.touch(t);
|
|
10
|
+
|
|
11
|
+
} else if(this.touching){
|
|
12
|
+
|
|
13
|
+
this.touching = false;
|
|
14
|
+
|
|
15
|
+
this.untouch(t);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
})
|
|
21
|
+
.defaults({
|
|
22
|
+
touching:false,
|
|
23
|
+
|
|
24
|
+
touch:function(){
|
|
25
|
+
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
untouch:function(){
|
|
29
|
+
|
|
30
|
+
}
|
|
31
|
+
})
|
|
32
|
+
.init(function(){
|
|
33
|
+
this.hero = re('hero')[0];
|
|
34
|
+
|
|
35
|
+
this.on('update', this.item_update);
|
|
36
|
+
|
|
37
|
+
this.updateBefore(this.hero);
|
|
38
|
+
})
|
|
39
|
+
.dispose(function(){
|
|
40
|
+
this.off();
|
|
41
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
re.c('spring')
|
|
2
|
+
.requires('item flicker')
|
|
3
|
+
.defines({
|
|
4
|
+
|
|
5
|
+
touch:function(){
|
|
6
|
+
this.hero.velY = -5;
|
|
7
|
+
|
|
8
|
+
if(re.pressed('w')){
|
|
9
|
+
this.hero.velY = -25;
|
|
10
|
+
this.flicker('bounce');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
})
|
|
15
|
+
.init(function(){
|
|
16
|
+
//add animation, can also send a string instead of an array
|
|
17
|
+
this.addFlicker('bounce', 1, 300, '13 12');
|
|
18
|
+
|
|
19
|
+
this.frame(12);
|
|
20
|
+
|
|
21
|
+
this.comp('spring');
|
|
22
|
+
})
|
|
23
|
+
//used to place it in level.js
|
|
24
|
+
.alias('t12')
|
|
25
|
+
.alias('t13');
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
re.scene('load')
|
|
2
|
+
.enter(function(){
|
|
3
|
+
|
|
4
|
+
re.tile.sizeX = re.tile.sizeY = 25;
|
|
5
|
+
|
|
6
|
+
re.sys.clearColor = '#D6F8FA';
|
|
7
|
+
|
|
8
|
+
//setup gravity
|
|
9
|
+
re.force.graY = 30 * re.sys.stepSize;
|
|
10
|
+
|
|
11
|
+
re.load(re.assets)
|
|
12
|
+
.complete(function(){
|
|
13
|
+
|
|
14
|
+
//move to home
|
|
15
|
+
re.scene('home').enter();
|
|
16
|
+
})
|
|
17
|
+
.error(function(e){
|
|
18
|
+
|
|
19
|
+
})
|
|
20
|
+
.progress(function(i){
|
|
21
|
+
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
})
|
|
25
|
+
.exit(function(){
|
|
26
|
+
//exit load scene
|
|
27
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
re.scene('play')
|
|
2
|
+
.enter(function(level){
|
|
3
|
+
|
|
4
|
+
//offset screen because all tiles are centered..
|
|
5
|
+
//checkout tsprite.js
|
|
6
|
+
re.screen.pos(-re.tile.sizeX * 0.5, -re.tile.sizeY * 0.5);
|
|
7
|
+
|
|
8
|
+
//display coin text
|
|
9
|
+
var counter = this.counter = re.e('counter');
|
|
10
|
+
|
|
11
|
+
//find level
|
|
12
|
+
this.level = re(level+'.tmx')[0];
|
|
13
|
+
|
|
14
|
+
//load it
|
|
15
|
+
this.level.build();
|
|
16
|
+
|
|
17
|
+
//let the player collect coins
|
|
18
|
+
//listen for collect events from all coins
|
|
19
|
+
re('coin').on('collect', function(){
|
|
20
|
+
counter.add(1);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
})
|
|
24
|
+
.exit(function(){
|
|
25
|
+
|
|
26
|
+
this.counter.dispose();
|
|
27
|
+
|
|
28
|
+
//teardown level
|
|
29
|
+
this.level.teardown();
|
|
30
|
+
|
|
31
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
re.c('counter')
|
|
2
|
+
.defines({
|
|
3
|
+
|
|
4
|
+
_count:0,
|
|
5
|
+
|
|
6
|
+
add:function(value){
|
|
7
|
+
if(re.is(value)){
|
|
8
|
+
this._count += value;
|
|
9
|
+
this.coinText.text("Coins: "+this._count);
|
|
10
|
+
|
|
11
|
+
return this;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return this._count;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
})
|
|
18
|
+
.init(function(){
|
|
19
|
+
|
|
20
|
+
//define text
|
|
21
|
+
this.coinText = re.e('bit')
|
|
22
|
+
.alignLeft(5)
|
|
23
|
+
.alignTop(5)
|
|
24
|
+
//ignore screen coordinates
|
|
25
|
+
.attr('screenable', false);
|
|
26
|
+
|
|
27
|
+
//set default text
|
|
28
|
+
this.add(0);
|
|
29
|
+
})
|
|
30
|
+
.dispose(function(){
|
|
31
|
+
|
|
32
|
+
this.coinText.dispose();
|
|
33
|
+
|
|
34
|
+
});
|