mirror of
https://github.com/logsol/chuck.js.git
synced 2026-05-11 10:37:34 +00:00
357 lines
No EOL
10 KiB
JavaScript
Executable file
357 lines
No EOL
10 KiB
JavaScript
Executable file
define([
|
|
"Game/Config/Settings",
|
|
"Lib/Vendor/Box2D",
|
|
"Game/" + GLOBALS.context + "/Collision/Detector",
|
|
"Game/" + GLOBALS.context + "/GameObjects/Tile",
|
|
"Game/" + GLOBALS.context + "/GameObjects/Item",
|
|
"Game/" + GLOBALS.context + "/GameObjects/Items/Skateboard",
|
|
|
|
], function (Settings, Box2D, CollisionDetector, Tile, Item, Skateboard) {
|
|
|
|
// Public
|
|
function Level (path, engine, gameObjects) {
|
|
this.path = path;
|
|
this.engine = engine;
|
|
this.levelObject = null;
|
|
this.gameObjects = gameObjects;
|
|
}
|
|
|
|
Level.prototype.loadLevelInToEngine = function () {
|
|
this.loadLevelObjectFromPath(this.path);
|
|
this.createTiles();
|
|
this.createItems();
|
|
}
|
|
|
|
Level.prototype.destroy = function () {
|
|
for (var key in this.gameObjects) {
|
|
for (var i = 0; i < this.gameObjects[key].length; i++) {
|
|
this.gameObjects[key][i].destroy();
|
|
}
|
|
//this.gameObjects[key] = [];
|
|
}
|
|
}
|
|
|
|
// Private
|
|
|
|
Level.prototype.createTiles = function () {
|
|
if (!this.levelObject || !this.levelObject.tiles || this.levelObject.tiles.length < 1) {
|
|
throw "Level: Can't create physic tiles, no tiles found";
|
|
}
|
|
|
|
var tiles = this.levelObject.tiles;
|
|
|
|
for (var i = 0; i < tiles.length; i++) {
|
|
var options = tiles[i];
|
|
options.m = this.tileAtPositionExists(options.x, options.y - 1) ? "Soil" : "GrassSoil";
|
|
|
|
this.gameObjects.fixed.push(new Tile(this.engine, "tile-" + i, options));
|
|
}
|
|
}
|
|
|
|
Level.prototype.createItems = function() {
|
|
var items = this.levelObject.items;
|
|
|
|
for (var i = 0; i < items.length; i++) {
|
|
var options = items[i];
|
|
var item;
|
|
var uid = "item-" + i;
|
|
|
|
switch(options.type) {
|
|
case 'skateboard':
|
|
item = new Skateboard(this.engine, uid, options);
|
|
break;
|
|
default:
|
|
item = new Item(this.engine, uid, options);
|
|
break
|
|
}
|
|
this.gameObjects.animated.push(item);
|
|
};
|
|
};
|
|
|
|
Level.prototype.loadLevelObjectFromPath = function (path) {
|
|
|
|
// TODO: load JSON levelObject from path
|
|
// s: shape
|
|
// x: x-position
|
|
// y: y-position
|
|
// r: rotation (optional)
|
|
|
|
// Shapes:
|
|
|
|
// 1
|
|
// o o o
|
|
// o o o
|
|
// o o o
|
|
|
|
// 2
|
|
// o
|
|
// o o
|
|
// o o o
|
|
|
|
// 3
|
|
// o
|
|
// o
|
|
// o o
|
|
|
|
// 4
|
|
// o
|
|
// o o o
|
|
// o o o
|
|
|
|
// 5
|
|
// o
|
|
// o
|
|
// o o
|
|
|
|
// 6
|
|
// o
|
|
// o o o
|
|
// o o o
|
|
|
|
// 7
|
|
//
|
|
// o
|
|
// o o
|
|
|
|
// 8
|
|
// o o
|
|
// o o o
|
|
// o o o
|
|
|
|
this.levelObject = {
|
|
/*
|
|
Material densities (g/cm^3):
|
|
|
|
wood: 0.63
|
|
steel: 7.859
|
|
banana: 0.95
|
|
microwave: 3.744
|
|
|
|
*/
|
|
items: [
|
|
{
|
|
name:'Banana',
|
|
image:'banana.gif',
|
|
type:'rectangle',
|
|
category:'kitchen',
|
|
weight: 1,
|
|
width:5,
|
|
height:9,
|
|
depth: 3,
|
|
x:40,
|
|
y:0,
|
|
rotation: 0,
|
|
grabAngle: 0.5
|
|
},
|
|
{
|
|
name:'Refridgerator',
|
|
image:'fridge.gif',
|
|
type:'rectangle',
|
|
category:'kitchen',
|
|
weight: 10,
|
|
width:31,
|
|
height:53,
|
|
x:120,
|
|
y:0,
|
|
rotation: 0,
|
|
grabAngle: -0.5
|
|
},
|
|
{
|
|
name:'Microwave',
|
|
image:'microwave.gif',
|
|
type:'rectangle',
|
|
category:'kitchen',
|
|
weight: 4,
|
|
width:19,
|
|
height:12,
|
|
depth: 12,
|
|
x:100,
|
|
y:0,
|
|
rotation: 0,
|
|
grabAngle: -0.1
|
|
},
|
|
{
|
|
name:'Large Cleaver',
|
|
image:'cleaver_large.gif',
|
|
type:'rectangle',
|
|
category:'kitchen',
|
|
weight: 3,
|
|
width:8,
|
|
height:22,
|
|
x:40,
|
|
y:0,
|
|
rotation: 0,
|
|
grabAngle: 0.3
|
|
},
|
|
{
|
|
name:'Small Cleaver',
|
|
image:'cleaver_small.gif',
|
|
type:'rectangle',
|
|
category:'kitchen',
|
|
weight:2,
|
|
width:6,
|
|
height:17,
|
|
x:60,
|
|
y:0,
|
|
rotation: 0,
|
|
grabAngle: 0.3
|
|
},
|
|
{
|
|
name:'Coffeemachine',
|
|
image:'coffeemachine.gif',
|
|
type:'rectangle',
|
|
category:'kitchen',
|
|
weight:2.4,
|
|
width:11,
|
|
height:14,
|
|
x:80,
|
|
y:0,
|
|
rotation: 0
|
|
},
|
|
{
|
|
name:'Knife',
|
|
image:'knife.gif',
|
|
type:'rectangle',
|
|
category:'kitchen',
|
|
weight:1.5,
|
|
width:4,
|
|
height:15,
|
|
x:140,
|
|
y:0,
|
|
rotation: 0,
|
|
grabAngle: 0.3
|
|
},
|
|
{
|
|
name:'Laundry Machine',
|
|
image:'laundry_machine.gif',
|
|
type:'rectangle',
|
|
category:'laundry',
|
|
weight: 15,
|
|
width:24,
|
|
height:31,
|
|
x:600,
|
|
y:0,
|
|
rotation: 0,
|
|
grabAngle: -0.5
|
|
},
|
|
{
|
|
name:'Skateboard',
|
|
image:'skateboard.gif',
|
|
type:'skateboard',
|
|
category:'outdoor',
|
|
weight: 1.5,
|
|
width:26,
|
|
height:6,
|
|
x:200,
|
|
y:0,
|
|
rotation: 0,
|
|
grabAngle: -1.5
|
|
}
|
|
],
|
|
tiles: /*
|
|
(function() {
|
|
var tiles = [];
|
|
for (var i = 0; i < 50; i++) {
|
|
tiles.push({
|
|
s:1,
|
|
x:i,
|
|
y:5
|
|
})
|
|
};
|
|
return tiles;
|
|
})()
|
|
*/
|
|
|
|
[
|
|
{s:1, x:1, y:1, r:0},
|
|
{s:1, x:3, y:18},
|
|
{s:1, x:37, y:27},
|
|
{s:1, x:20, y:24},
|
|
{s:1, x:24, y:27},
|
|
{s:1, x:37, y:26},
|
|
{s:1, x:9, y:18},
|
|
{s:2, x:32, y:25, r:1},
|
|
{s:1, x:23, y:27},
|
|
{s:3, x:34, y:24, r:1},
|
|
{s:1, x:35, y:28},
|
|
{s:4, x:17, y:21},
|
|
{s:2, x:21, y:24},
|
|
{s:2, x:42, y:23, r:3},
|
|
{s:3, x:30, y:24, r:3},
|
|
{s:2, x:22, y:25},
|
|
{s:1, x:40, y:25},
|
|
{s:1, x:38, y:26},
|
|
{s:1, x:8, y:18},
|
|
{s:1, x:38, y:25},
|
|
{s:1, x:28, y:28},
|
|
{s:1, x:36, y:27},
|
|
{s:1, x:7, y:18},
|
|
{s:2, x:20, y:23},
|
|
{s:2, x:43, y:23, r:1},
|
|
{s:6, x:31, y:24},
|
|
{s:1, x:16, y:21},
|
|
{s:1, x:1, y:18},
|
|
{s:1, x:31, y:29},
|
|
{s:2, x:30, y:25, r:2},
|
|
{s:4, x:11, y:18},
|
|
{s:1, x:28, y:27},
|
|
{s:1, x:28, y:26},
|
|
{s:1, x:28, y:29},
|
|
{s:1, x:19, y:23},
|
|
{s:5, x:12, y:18, r:1},
|
|
{s:1, x:42, y:24},
|
|
{s:6, x:33, y:24, r:2},
|
|
{s:1, x:39, y:25},
|
|
{s:1, x:33, y:29},
|
|
{s:1, x:29, y:29},
|
|
{s:1, x:21, y:25},
|
|
{s:1, x:27, y:27},
|
|
{s:5, x:16, y:20, r:1},
|
|
{s:1, x:5, y:18},
|
|
{s:5, x:18, y:21, r:1},
|
|
{s:4, x:13, y:19},
|
|
{s:1, x:14, y:20},
|
|
{s:1, x:30, y:29},
|
|
{s:1, x:4, y:18},
|
|
{s:1, x:6, y:18},
|
|
{s:1, x:2, y:18},
|
|
{s:1, x:32, y:24},
|
|
{s:1, x:34, y:29},
|
|
{s:1, x:32, y:29},
|
|
{s:2, x:1, y:16},
|
|
{s:1, x:10, y:18},
|
|
{s:1, x:42, y:25},
|
|
{s:2, x:28, y:25, r:3},
|
|
{s:2, x:0, y:16, r:2},
|
|
{s:1, x:22, y:27},
|
|
{s:1, x:25, y:27},
|
|
{s:1, x:31, y:25},
|
|
{s:5, x:14, y:19, r:1},
|
|
{s:1, x:41, y:25},
|
|
{s:1, x:36, y:28},
|
|
{s:4, x:15, y:20},
|
|
{s:2, x:19, y:22},
|
|
{s:3, x:26, y:26, r:3},
|
|
{s:1, x:26, y:27},
|
|
{s:1, x:18, y:22},
|
|
{s:6, x:27, y:26},
|
|
{s:1, x:22, y:26},
|
|
{s:1, x:1, y:17},
|
|
{s:1, x:35, y:29},
|
|
{s:1, x:12, y:19}
|
|
]
|
|
}
|
|
}
|
|
|
|
// TODO remove hack
|
|
Level.prototype.tileAtPositionExists = function(x, y) {
|
|
|
|
for (var i = 0; i < this.levelObject.tiles.length; i++) {
|
|
var o = this.levelObject.tiles[i];
|
|
if(o.x == x && o.y == y) return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
return Level;
|
|
}) |