From 9e16c49a461a604dbda82f7f186968a895f7932e Mon Sep 17 00:00:00 2001 From: Thibault Neveu Date: Fri, 15 Jun 2018 16:35:30 +0100 Subject: [PATCH] Load edit page from storage. Fixe remove bug in edit --- demo/dist/metacar.min.js | 6 ++--- demo/webapp/public/js/editor.js | 15 ++++++++---- dist/metacar.min.js | 6 ++--- src/editor.ts | 3 ++- src/metacar.ts | 1 - src/metacar_editor.ts | 42 ++++++++++++++++++++------------- 6 files changed, 45 insertions(+), 28 deletions(-) diff --git a/demo/dist/metacar.min.js b/demo/dist/metacar.min.js index 546e3c6..77d4573 100644 --- a/demo/dist/metacar.min.js +++ b/demo/dist/metacar.min.js @@ -155,7 +155,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Editor\", function() { return Editor; });\n/* harmony import */ var _asset_manager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./asset_manager */ \"./src/asset_manager.ts\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./global */ \"./src/global.ts\");\n/* harmony import */ var _world__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./world */ \"./src/world.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\nvar Editor = (function (_super) {\n __extends(Editor, _super);\n function Editor(levelContent, canvasId) {\n var _this = _super.call(this, levelContent, canvasId) || this;\n _this.selectedItems = null;\n _this.am = new _asset_manager__WEBPACK_IMPORTED_MODULE_0__[\"AssetManger\"](_this);\n return _this;\n }\n Editor.prototype._setEvents = function () {\n };\n Editor.prototype._setup = function (info) {\n var _this = this;\n this._setEvents();\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n this.am.createMap(this.map, info, textures, false);\n this.am.createCars(this.map, info, textures);\n if (info.agent)\n this.agent = this.am.createAgent(this.map, info, textures);\n var that = this;\n for (var i = 0; i < this.envs.length; i++) {\n this.envs[i].interactive = true;\n this.envs[i].on(\"rightclick\", function () { that.removeItem(this); });\n }\n for (var i = 0; i < this.am.assets.length; i++) {\n this.am.assets[i].interactive = true;\n this.am.assets[i].on(\"rightclick\", function () { that.removeItem(this); });\n }\n this.app.ticker.add(function (delta) { return _this.loop(delta); });\n };\n Editor.prototype.resize = function (width, height) {\n this.app.renderer.resize(width * _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"], height * _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]);\n };\n Editor.prototype.getSelectedItems = function () {\n return this.selectedItems;\n };\n Editor.prototype.selectedItem = function (item) {\n if (this.selectedItems) {\n this.app.stage.removeChild(this.selectedItems);\n }\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n this.selectedItems = new _global__WEBPACK_IMPORTED_MODULE_1__[\"Sprite\"](textures[item.image]);\n this.selectedItems.type = item.type;\n this.selectedItems.image = item.image;\n this.selectedItems.data = item.data;\n this.selectedItems.x = 0;\n this.selectedItems.y = 0;\n this.app.stage.addChild(this.selectedItems);\n };\n Editor.prototype.removeItem = function (item) {\n if (item.lidar) {\n this.app.stage.removeChild(item.lidar);\n }\n if (item.mapId == _global__WEBPACK_IMPORTED_MODULE_1__[\"MAP\"].CAR) {\n item.road.cars.splice(item.road.cars.indexOf(item.car_id), 1);\n }\n if (item.agent)\n this.agent = undefined;\n this.app.stage.removeChild(item);\n item.isremove = true;\n };\n Editor.prototype.exportMap = function (width, height, file_name, download) {\n return this.am.exportMap(width, height, file_name, download);\n };\n Editor.prototype.setCurrentItem = function () {\n this.am.addAsset(this.selectedItems);\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n var that = this;\n if (this.selectedItems.type == \"road\") {\n this.am.createRoad({\n mx: Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n my: Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n type: this.selectedItems.data\n }, textures, this.selectedItems.data);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"car\") {\n this.am.createCars(this.map, { cars: [{\n \"mx\": Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"my\": Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"rotation\": 0,\n \"line\": 0,\n }] }, textures);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"agent\" && this.agent == undefined) {\n this.agent = this.am.createAgent(this.map, { agent: {\n \"mx\": Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"my\": Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"rotation\": 0,\n \"line\": 0,\n \"motion\": {\n \"type\": \"BasicMotionEngine\",\n \"options\": {\n \"rotation_step\": 0.5,\n \"actions\": [\"UP\", \"LEFT\", \"RIGHT\", \"DOWN\", \"WAIT\"]\n }\n }\n } }, textures);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"asset\") {\n this.am.createAsset(this.selectedItems.image, { x: this.selectedItems.x, y: this.selectedItems.y }, textures, this.selectedItems.data);\n this.am.assets[this.am.assets.length - 1].interactive = true;\n this.am.assets[this.am.assets.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n this.app.stage.removeChild(this.selectedItems);\n this.selectedItems = null;\n };\n return Editor;\n}(_world__WEBPACK_IMPORTED_MODULE_2__[\"World\"]));\n\n\n\n//# sourceURL=webpack://metacar/./src/editor.ts?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Editor\", function() { return Editor; });\n/* harmony import */ var _asset_manager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./asset_manager */ \"./src/asset_manager.ts\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./global */ \"./src/global.ts\");\n/* harmony import */ var _world__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./world */ \"./src/world.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\nvar Editor = (function (_super) {\n __extends(Editor, _super);\n function Editor(levelContent, canvasId) {\n var _this = _super.call(this, levelContent, canvasId) || this;\n _this.selectedItems = null;\n _this.am = new _asset_manager__WEBPACK_IMPORTED_MODULE_0__[\"AssetManger\"](_this);\n return _this;\n }\n Editor.prototype._setEvents = function () {\n };\n Editor.prototype._setup = function (info) {\n var _this = this;\n this._setEvents();\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n this.am.createMap(this.map, info, textures, false);\n this.am.createCars(this.map, info, textures);\n if (info.agent)\n this.agent = this.am.createAgent(this.map, info, textures);\n var that = this;\n for (var i = 0; i < this.envs.length; i++) {\n this.envs[i].interactive = true;\n this.envs[i].on(\"rightclick\", function () { that.removeItem(this); });\n }\n for (var i = 0; i < this.am.assets.length; i++) {\n this.am.assets[i].interactive = true;\n this.am.assets[i].on(\"rightclick\", function () { that.removeItem(this); });\n }\n this.app.ticker.add(function (delta) { return _this.loop(delta); });\n };\n Editor.prototype.resize = function (width, height) {\n this.app.renderer.resize(width * _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"], height * _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]);\n };\n Editor.prototype.getSelectedItems = function () {\n return this.selectedItems;\n };\n Editor.prototype.selectedItem = function (item) {\n if (this.selectedItems) {\n this.app.stage.removeChild(this.selectedItems);\n }\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n this.selectedItems = new _global__WEBPACK_IMPORTED_MODULE_1__[\"Sprite\"](textures[item.image]);\n this.selectedItems.type = item.type;\n this.selectedItems.image = item.image;\n this.selectedItems.data = item.data;\n this.selectedItems.x = 0;\n this.selectedItems.y = 0;\n this.app.stage.addChild(this.selectedItems);\n };\n Editor.prototype.removeItem = function (item) {\n if (item.lidar) {\n this.app.stage.removeChild(item.lidar);\n }\n if (item.mapId == _global__WEBPACK_IMPORTED_MODULE_1__[\"MAP\"].CAR) {\n if (item.road)\n item.road.cars.splice(item.road.cars.indexOf(item.carId), 1);\n }\n if (item.agent)\n this.agent = undefined;\n this.app.stage.removeChild(item);\n item.isremove = true;\n };\n Editor.prototype.exportMap = function (width, height, file_name, download) {\n return this.am.exportMap(width, height, file_name, download);\n };\n Editor.prototype.setCurrentItem = function () {\n this.am.addAsset(this.selectedItems);\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n var that = this;\n if (this.selectedItems.type == \"road\") {\n this.am.createRoad({\n mx: Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n my: Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n type: this.selectedItems.data\n }, textures, this.selectedItems.data);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"car\") {\n this.am.createCars(this.map, { cars: [{\n \"mx\": Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"my\": Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"rotation\": 0,\n \"line\": 0,\n }] }, textures);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"agent\" && this.agent == undefined) {\n this.agent = this.am.createAgent(this.map, { agent: {\n \"mx\": Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"my\": Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"rotation\": 0,\n \"line\": 0,\n \"motion\": {\n \"type\": \"BasicMotionEngine\",\n \"options\": {\n \"rotation_step\": 0.5,\n \"actions\": [\"UP\", \"LEFT\", \"RIGHT\", \"DOWN\", \"WAIT\"]\n }\n }\n } }, textures);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"asset\") {\n this.am.createAsset(this.selectedItems.image, { x: this.selectedItems.x, y: this.selectedItems.y }, textures, this.selectedItems.data);\n this.am.assets[this.am.assets.length - 1].interactive = true;\n this.am.assets[this.am.assets.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n this.app.stage.removeChild(this.selectedItems);\n this.selectedItems = null;\n };\n return Editor;\n}(_world__WEBPACK_IMPORTED_MODULE_2__[\"World\"]));\n\n\n\n//# sourceURL=webpack://metacar/./src/editor.ts?"); /***/ }), @@ -251,7 +251,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MetaCar\", function() { return MetaCar; });\n/* harmony import */ var _level__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./level */ \"./src/level.ts\");\n/* harmony import */ var _ui_event__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ui_event */ \"./src/ui_event.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _basic_motion_engine__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basic_motion_engine */ \"./src/basic_motion_engine.ts\");\n\n\n\n\nvar MetaCar = (function () {\n function MetaCar(canvasId, levelToLoad) {\n this.eventList = [\"train\", \"play\", \"stop\", \"reset_env\", \"load\"];\n this.agentMotionEngine = _basic_motion_engine__WEBPACK_IMPORTED_MODULE_3__[\"BasicMotionEngine\"];\n this.agentMotionOptions = {};\n this.isCarsMoving = true;\n if (!canvasId || !levelToLoad) {\n console.error(\"You must specify the canvasId and the levelToLoad\");\n }\n this.canvasId = canvasId;\n this.levelToLoad = levelToLoad;\n }\n MetaCar.prototype.load = function () {\n var _this = this;\n return new Promise(function (resolve, reject) {\n console.log(typeof _this.levelToLoad, _this.levelToLoad);\n if (typeof _this.levelToLoad == \"string\") {\n _utils__WEBPACK_IMPORTED_MODULE_2__[\"loadCustomURL\"](_this.levelToLoad, function (content) {\n _this.level = new _level__WEBPACK_IMPORTED_MODULE_0__[\"Level\"](content, _this.canvasId);\n _this.level.setAgentMotion(_this.agentMotionEngine, _this.agentMotionOptions);\n _this.level.setAgentLidar(_this.agentLidarInfo);\n _this.level.carsMoving(_this.isCarsMoving);\n _this._setEvents();\n _this.level.load(function (delta) { return _this._loop(delta); });\n resolve();\n });\n }\n else {\n _this.level = new _level__WEBPACK_IMPORTED_MODULE_0__[\"Level\"](_this.levelToLoad, _this.canvasId);\n _this.level.setAgentMotion(_this.agentMotionEngine, _this.agentMotionOptions);\n _this.level.setAgentLidar(_this.agentLidarInfo);\n _this.level.carsMoving(_this.isCarsMoving);\n _this._setEvents();\n _this.level.load(function (delta) { return _this._loop(delta); });\n resolve();\n }\n });\n };\n MetaCar.prototype.carsMoving = function (moving) {\n this.isCarsMoving = moving;\n };\n MetaCar.prototype.setAgentLidar = function (options) {\n this.agentLidarInfo = options;\n };\n MetaCar.prototype.setAgentMotion = function (motion, options) {\n this.agentMotionEngine = motion;\n this.agentMotionOptions = options;\n };\n MetaCar.prototype.addEvent = function (eventName, fc, options) {\n var index = this.eventList.indexOf(eventName);\n if (index == -1) {\n this.event.onCustomEvent(eventName, fc);\n return;\n }\n var event = this.eventList[index];\n if (event != \"load\") {\n this.eventCallback[index](fc);\n }\n else {\n this.eventCallback[index](fc, options);\n }\n };\n MetaCar.prototype.render = function (val) {\n this.level.render(val);\n };\n MetaCar.prototype.save = function (content, file_name) {\n _utils__WEBPACK_IMPORTED_MODULE_2__[\"saveAs\"](content, file_name);\n };\n MetaCar.prototype.actionSpace = function () {\n return this.level.agent.motion.actionSpace();\n };\n MetaCar.prototype.getState = function (linear) {\n if (linear === void 0) { linear = false; }\n return this.level.agent.getState(linear);\n };\n MetaCar.prototype.step = function (action) {\n return this.level.step(1, action);\n };\n MetaCar.prototype.reset = function () {\n this.level.reset();\n };\n MetaCar.prototype.randomRoadPosition = function () {\n var roads = this.level.getRoads();\n var keys = Object.keys(roads);\n keys.sort(function () { return Math.random() - 0.5; });\n for (var k in keys) {\n var road = roads[keys[k]];\n if (road.cars.length == 0) {\n road.setCarPosition(this.level.agent.core);\n break;\n }\n }\n };\n MetaCar.prototype._loop = function (delta) {\n if (this.event.isPlaying()) {\n this.event.playCallback();\n }\n else {\n this.level.step(delta);\n }\n };\n MetaCar.prototype._setEvents = function () {\n var _this = this;\n this.event = new _ui_event__WEBPACK_IMPORTED_MODULE_1__[\"UIEvent\"](this.level, this.canvasId);\n this.eventCallback = [\n function (fc) { return _this.event.onTrain(fc); },\n function (fc) { return _this.event.onPlay(fc); },\n function (fc) { return _this.event.onStop(fc); },\n function (fc) { return _this.event.onResetEnv(fc); },\n function (fc, opt) { return _this.event.onLoad(fc, opt); }\n ];\n };\n return MetaCar;\n}());\n\n\n\n//# sourceURL=webpack://metacar/./src/metacar.ts?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MetaCar\", function() { return MetaCar; });\n/* harmony import */ var _level__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./level */ \"./src/level.ts\");\n/* harmony import */ var _ui_event__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ui_event */ \"./src/ui_event.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _basic_motion_engine__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basic_motion_engine */ \"./src/basic_motion_engine.ts\");\n\n\n\n\nvar MetaCar = (function () {\n function MetaCar(canvasId, levelToLoad) {\n this.eventList = [\"train\", \"play\", \"stop\", \"reset_env\", \"load\"];\n this.agentMotionEngine = _basic_motion_engine__WEBPACK_IMPORTED_MODULE_3__[\"BasicMotionEngine\"];\n this.agentMotionOptions = {};\n this.isCarsMoving = true;\n if (!canvasId || !levelToLoad) {\n console.error(\"You must specify the canvasId and the levelToLoad\");\n }\n this.canvasId = canvasId;\n this.levelToLoad = levelToLoad;\n }\n MetaCar.prototype.load = function () {\n var _this = this;\n return new Promise(function (resolve, reject) {\n if (typeof _this.levelToLoad == \"string\") {\n _utils__WEBPACK_IMPORTED_MODULE_2__[\"loadCustomURL\"](_this.levelToLoad, function (content) {\n _this.level = new _level__WEBPACK_IMPORTED_MODULE_0__[\"Level\"](content, _this.canvasId);\n _this.level.setAgentMotion(_this.agentMotionEngine, _this.agentMotionOptions);\n _this.level.setAgentLidar(_this.agentLidarInfo);\n _this.level.carsMoving(_this.isCarsMoving);\n _this._setEvents();\n _this.level.load(function (delta) { return _this._loop(delta); });\n resolve();\n });\n }\n else {\n _this.level = new _level__WEBPACK_IMPORTED_MODULE_0__[\"Level\"](_this.levelToLoad, _this.canvasId);\n _this.level.setAgentMotion(_this.agentMotionEngine, _this.agentMotionOptions);\n _this.level.setAgentLidar(_this.agentLidarInfo);\n _this.level.carsMoving(_this.isCarsMoving);\n _this._setEvents();\n _this.level.load(function (delta) { return _this._loop(delta); });\n resolve();\n }\n });\n };\n MetaCar.prototype.carsMoving = function (moving) {\n this.isCarsMoving = moving;\n };\n MetaCar.prototype.setAgentLidar = function (options) {\n this.agentLidarInfo = options;\n };\n MetaCar.prototype.setAgentMotion = function (motion, options) {\n this.agentMotionEngine = motion;\n this.agentMotionOptions = options;\n };\n MetaCar.prototype.addEvent = function (eventName, fc, options) {\n var index = this.eventList.indexOf(eventName);\n if (index == -1) {\n this.event.onCustomEvent(eventName, fc);\n return;\n }\n var event = this.eventList[index];\n if (event != \"load\") {\n this.eventCallback[index](fc);\n }\n else {\n this.eventCallback[index](fc, options);\n }\n };\n MetaCar.prototype.render = function (val) {\n this.level.render(val);\n };\n MetaCar.prototype.save = function (content, file_name) {\n _utils__WEBPACK_IMPORTED_MODULE_2__[\"saveAs\"](content, file_name);\n };\n MetaCar.prototype.actionSpace = function () {\n return this.level.agent.motion.actionSpace();\n };\n MetaCar.prototype.getState = function (linear) {\n if (linear === void 0) { linear = false; }\n return this.level.agent.getState(linear);\n };\n MetaCar.prototype.step = function (action) {\n return this.level.step(1, action);\n };\n MetaCar.prototype.reset = function () {\n this.level.reset();\n };\n MetaCar.prototype.randomRoadPosition = function () {\n var roads = this.level.getRoads();\n var keys = Object.keys(roads);\n keys.sort(function () { return Math.random() - 0.5; });\n for (var k in keys) {\n var road = roads[keys[k]];\n if (road.cars.length == 0) {\n road.setCarPosition(this.level.agent.core);\n break;\n }\n }\n };\n MetaCar.prototype._loop = function (delta) {\n if (this.event.isPlaying()) {\n this.event.playCallback();\n }\n else {\n this.level.step(delta);\n }\n };\n MetaCar.prototype._setEvents = function () {\n var _this = this;\n this.event = new _ui_event__WEBPACK_IMPORTED_MODULE_1__[\"UIEvent\"](this.level, this.canvasId);\n this.eventCallback = [\n function (fc) { return _this.event.onTrain(fc); },\n function (fc) { return _this.event.onPlay(fc); },\n function (fc) { return _this.event.onStop(fc); },\n function (fc) { return _this.event.onResetEnv(fc); },\n function (fc, opt) { return _this.event.onLoad(fc, opt); }\n ];\n };\n return MetaCar;\n}());\n\n\n\n//# sourceURL=webpack://metacar/./src/metacar.ts?"); /***/ }), @@ -263,7 +263,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MetaCarEditor\", function() { return MetaCarEditor; });\n/* harmony import */ var _ui_event__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ui_event */ \"./src/ui_event.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _editor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./editor */ \"./src/editor.ts\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./global */ \"./src/global.ts\");\n\n\n\n\nvar MetaCarEditor = (function () {\n function MetaCarEditor(canvasId, levelUrl) {\n this.eventList = [\"save\"];\n if (!canvasId || this.levelUrl) {\n console.error(\"You must specify the canvasId and the levelUrl\");\n }\n this.canvasId = canvasId;\n this.levelUrl = levelUrl;\n }\n MetaCarEditor.prototype.load = function (level, agent) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"loadCustomURL\"](_this.levelUrl, function (content) {\n _this.level = new _editor__WEBPACK_IMPORTED_MODULE_2__[\"Editor\"](content, _this.canvasId);\n _this.level.load(function (delta) { return _this.loop(delta); });\n _this.event = new _ui_event__WEBPACK_IMPORTED_MODULE_0__[\"UIEvent\"](_this.level, _this.canvasId);\n _this.event.createEditorElementsEvents();\n _this.eventCallback = [\n function (fc, options) { return _this.event.onSaveEditor(fc, options); }\n ];\n resolve();\n });\n });\n };\n MetaCarEditor.prototype.addEvent = function (eventName, fc, options) {\n var index = this.eventList.indexOf(eventName);\n if (index == -1) {\n this.event.onCustomEvent(eventName, fc);\n return;\n }\n var event = this.eventList[index];\n this.eventCallback[index](fc, options);\n };\n MetaCarEditor.prototype.loop = function (delta) {\n var mousePos = this.level.getMousePosition();\n var selectedItem = this.level.getSelectedItems();\n if (selectedItem && selectedItem.type == \"asset\") {\n selectedItem.x = mousePos.x;\n selectedItem.y = mousePos.y;\n }\n else if (selectedItem) {\n selectedItem.x = Math.floor(mousePos.x / _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"]) * _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"];\n selectedItem.y = Math.floor(mousePos.y / _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"]) * _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"];\n }\n };\n return MetaCarEditor;\n}());\n\n\n\n//# sourceURL=webpack://metacar/./src/metacar_editor.ts?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MetaCarEditor\", function() { return MetaCarEditor; });\n/* harmony import */ var _ui_event__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ui_event */ \"./src/ui_event.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _editor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./editor */ \"./src/editor.ts\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./global */ \"./src/global.ts\");\n\n\n\n\nvar MetaCarEditor = (function () {\n function MetaCarEditor(canvasId, levelToLoad) {\n this.eventList = [\"save\"];\n if (!canvasId || this.levelToLoad) {\n console.error(\"You must specify the canvasId and the levelToLoad\");\n }\n this.canvasId = canvasId;\n this.levelToLoad = levelToLoad;\n }\n MetaCarEditor.prototype.load = function (level, agent) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n if (typeof _this.levelToLoad == \"string\") {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"loadCustomURL\"](_this.levelToLoad, function (content) {\n _this.level = new _editor__WEBPACK_IMPORTED_MODULE_2__[\"Editor\"](content, _this.canvasId);\n _this.level.load(function (delta) { return _this.loop(delta); });\n _this.event = new _ui_event__WEBPACK_IMPORTED_MODULE_0__[\"UIEvent\"](_this.level, _this.canvasId);\n _this.event.createEditorElementsEvents();\n _this.eventCallback = [\n function (fc, options) { return _this.event.onSaveEditor(fc, options); }\n ];\n resolve();\n });\n }\n else {\n _this.level = new _editor__WEBPACK_IMPORTED_MODULE_2__[\"Editor\"](_this.levelToLoad, _this.canvasId);\n _this.level.load(function (delta) { return _this.loop(delta); });\n _this.event = new _ui_event__WEBPACK_IMPORTED_MODULE_0__[\"UIEvent\"](_this.level, _this.canvasId);\n _this.event.createEditorElementsEvents();\n _this.eventCallback = [\n function (fc, options) { return _this.event.onSaveEditor(fc, options); }\n ];\n resolve();\n }\n });\n };\n MetaCarEditor.prototype.addEvent = function (eventName, fc, options) {\n var index = this.eventList.indexOf(eventName);\n if (index == -1) {\n this.event.onCustomEvent(eventName, fc);\n return;\n }\n var event = this.eventList[index];\n this.eventCallback[index](fc, options);\n };\n MetaCarEditor.prototype.loop = function (delta) {\n var mousePos = this.level.getMousePosition();\n var selectedItem = this.level.getSelectedItems();\n if (selectedItem && selectedItem.type == \"asset\") {\n selectedItem.x = mousePos.x;\n selectedItem.y = mousePos.y;\n }\n else if (selectedItem) {\n selectedItem.x = Math.floor(mousePos.x / _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"]) * _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"];\n selectedItem.y = Math.floor(mousePos.y / _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"]) * _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"];\n }\n };\n return MetaCarEditor;\n}());\n\n\n\n//# sourceURL=webpack://metacar/./src/metacar_editor.ts?"); /***/ }), diff --git a/demo/webapp/public/js/editor.js b/demo/webapp/public/js/editor.js index a770315..2844154 100644 --- a/demo/webapp/public/js/editor.js +++ b/demo/webapp/public/js/editor.js @@ -1,8 +1,15 @@ -// Get the url of the desired level -let levelUrl = metacar.level.level0; -// Create the editor (canvasID, levelUrl) -var editor = new metacar.editor("editor", levelUrl); +// Get the url of the desired level +let levelToLoad = metacar.level.level0; + +// If a level is avaiable in the storage, load this level instead. +var levelObject = localStorage.getItem('mylevel.json'); +if (levelObject){ + levelToLoad = JSON.parse(levelObject); +} + +// Create the editor (canvasID, levelUrl) +var editor = new metacar.editor("editor", levelToLoad); editor.load().then(() => { editor.addEvent("save", (content) => { console.log(content); diff --git a/dist/metacar.min.js b/dist/metacar.min.js index 546e3c6..77d4573 100644 --- a/dist/metacar.min.js +++ b/dist/metacar.min.js @@ -155,7 +155,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Editor\", function() { return Editor; });\n/* harmony import */ var _asset_manager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./asset_manager */ \"./src/asset_manager.ts\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./global */ \"./src/global.ts\");\n/* harmony import */ var _world__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./world */ \"./src/world.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\nvar Editor = (function (_super) {\n __extends(Editor, _super);\n function Editor(levelContent, canvasId) {\n var _this = _super.call(this, levelContent, canvasId) || this;\n _this.selectedItems = null;\n _this.am = new _asset_manager__WEBPACK_IMPORTED_MODULE_0__[\"AssetManger\"](_this);\n return _this;\n }\n Editor.prototype._setEvents = function () {\n };\n Editor.prototype._setup = function (info) {\n var _this = this;\n this._setEvents();\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n this.am.createMap(this.map, info, textures, false);\n this.am.createCars(this.map, info, textures);\n if (info.agent)\n this.agent = this.am.createAgent(this.map, info, textures);\n var that = this;\n for (var i = 0; i < this.envs.length; i++) {\n this.envs[i].interactive = true;\n this.envs[i].on(\"rightclick\", function () { that.removeItem(this); });\n }\n for (var i = 0; i < this.am.assets.length; i++) {\n this.am.assets[i].interactive = true;\n this.am.assets[i].on(\"rightclick\", function () { that.removeItem(this); });\n }\n this.app.ticker.add(function (delta) { return _this.loop(delta); });\n };\n Editor.prototype.resize = function (width, height) {\n this.app.renderer.resize(width * _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"], height * _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]);\n };\n Editor.prototype.getSelectedItems = function () {\n return this.selectedItems;\n };\n Editor.prototype.selectedItem = function (item) {\n if (this.selectedItems) {\n this.app.stage.removeChild(this.selectedItems);\n }\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n this.selectedItems = new _global__WEBPACK_IMPORTED_MODULE_1__[\"Sprite\"](textures[item.image]);\n this.selectedItems.type = item.type;\n this.selectedItems.image = item.image;\n this.selectedItems.data = item.data;\n this.selectedItems.x = 0;\n this.selectedItems.y = 0;\n this.app.stage.addChild(this.selectedItems);\n };\n Editor.prototype.removeItem = function (item) {\n if (item.lidar) {\n this.app.stage.removeChild(item.lidar);\n }\n if (item.mapId == _global__WEBPACK_IMPORTED_MODULE_1__[\"MAP\"].CAR) {\n item.road.cars.splice(item.road.cars.indexOf(item.car_id), 1);\n }\n if (item.agent)\n this.agent = undefined;\n this.app.stage.removeChild(item);\n item.isremove = true;\n };\n Editor.prototype.exportMap = function (width, height, file_name, download) {\n return this.am.exportMap(width, height, file_name, download);\n };\n Editor.prototype.setCurrentItem = function () {\n this.am.addAsset(this.selectedItems);\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n var that = this;\n if (this.selectedItems.type == \"road\") {\n this.am.createRoad({\n mx: Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n my: Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n type: this.selectedItems.data\n }, textures, this.selectedItems.data);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"car\") {\n this.am.createCars(this.map, { cars: [{\n \"mx\": Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"my\": Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"rotation\": 0,\n \"line\": 0,\n }] }, textures);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"agent\" && this.agent == undefined) {\n this.agent = this.am.createAgent(this.map, { agent: {\n \"mx\": Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"my\": Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"rotation\": 0,\n \"line\": 0,\n \"motion\": {\n \"type\": \"BasicMotionEngine\",\n \"options\": {\n \"rotation_step\": 0.5,\n \"actions\": [\"UP\", \"LEFT\", \"RIGHT\", \"DOWN\", \"WAIT\"]\n }\n }\n } }, textures);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"asset\") {\n this.am.createAsset(this.selectedItems.image, { x: this.selectedItems.x, y: this.selectedItems.y }, textures, this.selectedItems.data);\n this.am.assets[this.am.assets.length - 1].interactive = true;\n this.am.assets[this.am.assets.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n this.app.stage.removeChild(this.selectedItems);\n this.selectedItems = null;\n };\n return Editor;\n}(_world__WEBPACK_IMPORTED_MODULE_2__[\"World\"]));\n\n\n\n//# sourceURL=webpack://metacar/./src/editor.ts?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Editor\", function() { return Editor; });\n/* harmony import */ var _asset_manager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./asset_manager */ \"./src/asset_manager.ts\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./global */ \"./src/global.ts\");\n/* harmony import */ var _world__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./world */ \"./src/world.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\nvar Editor = (function (_super) {\n __extends(Editor, _super);\n function Editor(levelContent, canvasId) {\n var _this = _super.call(this, levelContent, canvasId) || this;\n _this.selectedItems = null;\n _this.am = new _asset_manager__WEBPACK_IMPORTED_MODULE_0__[\"AssetManger\"](_this);\n return _this;\n }\n Editor.prototype._setEvents = function () {\n };\n Editor.prototype._setup = function (info) {\n var _this = this;\n this._setEvents();\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n this.am.createMap(this.map, info, textures, false);\n this.am.createCars(this.map, info, textures);\n if (info.agent)\n this.agent = this.am.createAgent(this.map, info, textures);\n var that = this;\n for (var i = 0; i < this.envs.length; i++) {\n this.envs[i].interactive = true;\n this.envs[i].on(\"rightclick\", function () { that.removeItem(this); });\n }\n for (var i = 0; i < this.am.assets.length; i++) {\n this.am.assets[i].interactive = true;\n this.am.assets[i].on(\"rightclick\", function () { that.removeItem(this); });\n }\n this.app.ticker.add(function (delta) { return _this.loop(delta); });\n };\n Editor.prototype.resize = function (width, height) {\n this.app.renderer.resize(width * _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"], height * _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]);\n };\n Editor.prototype.getSelectedItems = function () {\n return this.selectedItems;\n };\n Editor.prototype.selectedItem = function (item) {\n if (this.selectedItems) {\n this.app.stage.removeChild(this.selectedItems);\n }\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n this.selectedItems = new _global__WEBPACK_IMPORTED_MODULE_1__[\"Sprite\"](textures[item.image]);\n this.selectedItems.type = item.type;\n this.selectedItems.image = item.image;\n this.selectedItems.data = item.data;\n this.selectedItems.x = 0;\n this.selectedItems.y = 0;\n this.app.stage.addChild(this.selectedItems);\n };\n Editor.prototype.removeItem = function (item) {\n if (item.lidar) {\n this.app.stage.removeChild(item.lidar);\n }\n if (item.mapId == _global__WEBPACK_IMPORTED_MODULE_1__[\"MAP\"].CAR) {\n if (item.road)\n item.road.cars.splice(item.road.cars.indexOf(item.carId), 1);\n }\n if (item.agent)\n this.agent = undefined;\n this.app.stage.removeChild(item);\n item.isremove = true;\n };\n Editor.prototype.exportMap = function (width, height, file_name, download) {\n return this.am.exportMap(width, height, file_name, download);\n };\n Editor.prototype.setCurrentItem = function () {\n this.am.addAsset(this.selectedItems);\n var textures = _global__WEBPACK_IMPORTED_MODULE_1__[\"Loader\"].resources[_global__WEBPACK_IMPORTED_MODULE_1__[\"JSON_TEXTURES\"]].textures;\n var that = this;\n if (this.selectedItems.type == \"road\") {\n this.am.createRoad({\n mx: Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n my: Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n type: this.selectedItems.data\n }, textures, this.selectedItems.data);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"car\") {\n this.am.createCars(this.map, { cars: [{\n \"mx\": Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"my\": Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"rotation\": 0,\n \"line\": 0,\n }] }, textures);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"agent\" && this.agent == undefined) {\n this.agent = this.am.createAgent(this.map, { agent: {\n \"mx\": Math.floor(this.selectedItems.x / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"my\": Math.floor(this.selectedItems.y / _global__WEBPACK_IMPORTED_MODULE_1__[\"ROADSIZE\"]),\n \"rotation\": 0,\n \"line\": 0,\n \"motion\": {\n \"type\": \"BasicMotionEngine\",\n \"options\": {\n \"rotation_step\": 0.5,\n \"actions\": [\"UP\", \"LEFT\", \"RIGHT\", \"DOWN\", \"WAIT\"]\n }\n }\n } }, textures);\n this.envs[this.envs.length - 1].interactive = true;\n this.envs[this.envs.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n else if (this.selectedItems.type == \"asset\") {\n this.am.createAsset(this.selectedItems.image, { x: this.selectedItems.x, y: this.selectedItems.y }, textures, this.selectedItems.data);\n this.am.assets[this.am.assets.length - 1].interactive = true;\n this.am.assets[this.am.assets.length - 1].on(\"rightclick\", function () { that.removeItem(this); });\n }\n this.app.stage.removeChild(this.selectedItems);\n this.selectedItems = null;\n };\n return Editor;\n}(_world__WEBPACK_IMPORTED_MODULE_2__[\"World\"]));\n\n\n\n//# sourceURL=webpack://metacar/./src/editor.ts?"); /***/ }), @@ -251,7 +251,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MetaCar\", function() { return MetaCar; });\n/* harmony import */ var _level__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./level */ \"./src/level.ts\");\n/* harmony import */ var _ui_event__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ui_event */ \"./src/ui_event.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _basic_motion_engine__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basic_motion_engine */ \"./src/basic_motion_engine.ts\");\n\n\n\n\nvar MetaCar = (function () {\n function MetaCar(canvasId, levelToLoad) {\n this.eventList = [\"train\", \"play\", \"stop\", \"reset_env\", \"load\"];\n this.agentMotionEngine = _basic_motion_engine__WEBPACK_IMPORTED_MODULE_3__[\"BasicMotionEngine\"];\n this.agentMotionOptions = {};\n this.isCarsMoving = true;\n if (!canvasId || !levelToLoad) {\n console.error(\"You must specify the canvasId and the levelToLoad\");\n }\n this.canvasId = canvasId;\n this.levelToLoad = levelToLoad;\n }\n MetaCar.prototype.load = function () {\n var _this = this;\n return new Promise(function (resolve, reject) {\n console.log(typeof _this.levelToLoad, _this.levelToLoad);\n if (typeof _this.levelToLoad == \"string\") {\n _utils__WEBPACK_IMPORTED_MODULE_2__[\"loadCustomURL\"](_this.levelToLoad, function (content) {\n _this.level = new _level__WEBPACK_IMPORTED_MODULE_0__[\"Level\"](content, _this.canvasId);\n _this.level.setAgentMotion(_this.agentMotionEngine, _this.agentMotionOptions);\n _this.level.setAgentLidar(_this.agentLidarInfo);\n _this.level.carsMoving(_this.isCarsMoving);\n _this._setEvents();\n _this.level.load(function (delta) { return _this._loop(delta); });\n resolve();\n });\n }\n else {\n _this.level = new _level__WEBPACK_IMPORTED_MODULE_0__[\"Level\"](_this.levelToLoad, _this.canvasId);\n _this.level.setAgentMotion(_this.agentMotionEngine, _this.agentMotionOptions);\n _this.level.setAgentLidar(_this.agentLidarInfo);\n _this.level.carsMoving(_this.isCarsMoving);\n _this._setEvents();\n _this.level.load(function (delta) { return _this._loop(delta); });\n resolve();\n }\n });\n };\n MetaCar.prototype.carsMoving = function (moving) {\n this.isCarsMoving = moving;\n };\n MetaCar.prototype.setAgentLidar = function (options) {\n this.agentLidarInfo = options;\n };\n MetaCar.prototype.setAgentMotion = function (motion, options) {\n this.agentMotionEngine = motion;\n this.agentMotionOptions = options;\n };\n MetaCar.prototype.addEvent = function (eventName, fc, options) {\n var index = this.eventList.indexOf(eventName);\n if (index == -1) {\n this.event.onCustomEvent(eventName, fc);\n return;\n }\n var event = this.eventList[index];\n if (event != \"load\") {\n this.eventCallback[index](fc);\n }\n else {\n this.eventCallback[index](fc, options);\n }\n };\n MetaCar.prototype.render = function (val) {\n this.level.render(val);\n };\n MetaCar.prototype.save = function (content, file_name) {\n _utils__WEBPACK_IMPORTED_MODULE_2__[\"saveAs\"](content, file_name);\n };\n MetaCar.prototype.actionSpace = function () {\n return this.level.agent.motion.actionSpace();\n };\n MetaCar.prototype.getState = function (linear) {\n if (linear === void 0) { linear = false; }\n return this.level.agent.getState(linear);\n };\n MetaCar.prototype.step = function (action) {\n return this.level.step(1, action);\n };\n MetaCar.prototype.reset = function () {\n this.level.reset();\n };\n MetaCar.prototype.randomRoadPosition = function () {\n var roads = this.level.getRoads();\n var keys = Object.keys(roads);\n keys.sort(function () { return Math.random() - 0.5; });\n for (var k in keys) {\n var road = roads[keys[k]];\n if (road.cars.length == 0) {\n road.setCarPosition(this.level.agent.core);\n break;\n }\n }\n };\n MetaCar.prototype._loop = function (delta) {\n if (this.event.isPlaying()) {\n this.event.playCallback();\n }\n else {\n this.level.step(delta);\n }\n };\n MetaCar.prototype._setEvents = function () {\n var _this = this;\n this.event = new _ui_event__WEBPACK_IMPORTED_MODULE_1__[\"UIEvent\"](this.level, this.canvasId);\n this.eventCallback = [\n function (fc) { return _this.event.onTrain(fc); },\n function (fc) { return _this.event.onPlay(fc); },\n function (fc) { return _this.event.onStop(fc); },\n function (fc) { return _this.event.onResetEnv(fc); },\n function (fc, opt) { return _this.event.onLoad(fc, opt); }\n ];\n };\n return MetaCar;\n}());\n\n\n\n//# sourceURL=webpack://metacar/./src/metacar.ts?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MetaCar\", function() { return MetaCar; });\n/* harmony import */ var _level__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./level */ \"./src/level.ts\");\n/* harmony import */ var _ui_event__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ui_event */ \"./src/ui_event.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _basic_motion_engine__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basic_motion_engine */ \"./src/basic_motion_engine.ts\");\n\n\n\n\nvar MetaCar = (function () {\n function MetaCar(canvasId, levelToLoad) {\n this.eventList = [\"train\", \"play\", \"stop\", \"reset_env\", \"load\"];\n this.agentMotionEngine = _basic_motion_engine__WEBPACK_IMPORTED_MODULE_3__[\"BasicMotionEngine\"];\n this.agentMotionOptions = {};\n this.isCarsMoving = true;\n if (!canvasId || !levelToLoad) {\n console.error(\"You must specify the canvasId and the levelToLoad\");\n }\n this.canvasId = canvasId;\n this.levelToLoad = levelToLoad;\n }\n MetaCar.prototype.load = function () {\n var _this = this;\n return new Promise(function (resolve, reject) {\n if (typeof _this.levelToLoad == \"string\") {\n _utils__WEBPACK_IMPORTED_MODULE_2__[\"loadCustomURL\"](_this.levelToLoad, function (content) {\n _this.level = new _level__WEBPACK_IMPORTED_MODULE_0__[\"Level\"](content, _this.canvasId);\n _this.level.setAgentMotion(_this.agentMotionEngine, _this.agentMotionOptions);\n _this.level.setAgentLidar(_this.agentLidarInfo);\n _this.level.carsMoving(_this.isCarsMoving);\n _this._setEvents();\n _this.level.load(function (delta) { return _this._loop(delta); });\n resolve();\n });\n }\n else {\n _this.level = new _level__WEBPACK_IMPORTED_MODULE_0__[\"Level\"](_this.levelToLoad, _this.canvasId);\n _this.level.setAgentMotion(_this.agentMotionEngine, _this.agentMotionOptions);\n _this.level.setAgentLidar(_this.agentLidarInfo);\n _this.level.carsMoving(_this.isCarsMoving);\n _this._setEvents();\n _this.level.load(function (delta) { return _this._loop(delta); });\n resolve();\n }\n });\n };\n MetaCar.prototype.carsMoving = function (moving) {\n this.isCarsMoving = moving;\n };\n MetaCar.prototype.setAgentLidar = function (options) {\n this.agentLidarInfo = options;\n };\n MetaCar.prototype.setAgentMotion = function (motion, options) {\n this.agentMotionEngine = motion;\n this.agentMotionOptions = options;\n };\n MetaCar.prototype.addEvent = function (eventName, fc, options) {\n var index = this.eventList.indexOf(eventName);\n if (index == -1) {\n this.event.onCustomEvent(eventName, fc);\n return;\n }\n var event = this.eventList[index];\n if (event != \"load\") {\n this.eventCallback[index](fc);\n }\n else {\n this.eventCallback[index](fc, options);\n }\n };\n MetaCar.prototype.render = function (val) {\n this.level.render(val);\n };\n MetaCar.prototype.save = function (content, file_name) {\n _utils__WEBPACK_IMPORTED_MODULE_2__[\"saveAs\"](content, file_name);\n };\n MetaCar.prototype.actionSpace = function () {\n return this.level.agent.motion.actionSpace();\n };\n MetaCar.prototype.getState = function (linear) {\n if (linear === void 0) { linear = false; }\n return this.level.agent.getState(linear);\n };\n MetaCar.prototype.step = function (action) {\n return this.level.step(1, action);\n };\n MetaCar.prototype.reset = function () {\n this.level.reset();\n };\n MetaCar.prototype.randomRoadPosition = function () {\n var roads = this.level.getRoads();\n var keys = Object.keys(roads);\n keys.sort(function () { return Math.random() - 0.5; });\n for (var k in keys) {\n var road = roads[keys[k]];\n if (road.cars.length == 0) {\n road.setCarPosition(this.level.agent.core);\n break;\n }\n }\n };\n MetaCar.prototype._loop = function (delta) {\n if (this.event.isPlaying()) {\n this.event.playCallback();\n }\n else {\n this.level.step(delta);\n }\n };\n MetaCar.prototype._setEvents = function () {\n var _this = this;\n this.event = new _ui_event__WEBPACK_IMPORTED_MODULE_1__[\"UIEvent\"](this.level, this.canvasId);\n this.eventCallback = [\n function (fc) { return _this.event.onTrain(fc); },\n function (fc) { return _this.event.onPlay(fc); },\n function (fc) { return _this.event.onStop(fc); },\n function (fc) { return _this.event.onResetEnv(fc); },\n function (fc, opt) { return _this.event.onLoad(fc, opt); }\n ];\n };\n return MetaCar;\n}());\n\n\n\n//# sourceURL=webpack://metacar/./src/metacar.ts?"); /***/ }), @@ -263,7 +263,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MetaCarEditor\", function() { return MetaCarEditor; });\n/* harmony import */ var _ui_event__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ui_event */ \"./src/ui_event.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _editor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./editor */ \"./src/editor.ts\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./global */ \"./src/global.ts\");\n\n\n\n\nvar MetaCarEditor = (function () {\n function MetaCarEditor(canvasId, levelUrl) {\n this.eventList = [\"save\"];\n if (!canvasId || this.levelUrl) {\n console.error(\"You must specify the canvasId and the levelUrl\");\n }\n this.canvasId = canvasId;\n this.levelUrl = levelUrl;\n }\n MetaCarEditor.prototype.load = function (level, agent) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"loadCustomURL\"](_this.levelUrl, function (content) {\n _this.level = new _editor__WEBPACK_IMPORTED_MODULE_2__[\"Editor\"](content, _this.canvasId);\n _this.level.load(function (delta) { return _this.loop(delta); });\n _this.event = new _ui_event__WEBPACK_IMPORTED_MODULE_0__[\"UIEvent\"](_this.level, _this.canvasId);\n _this.event.createEditorElementsEvents();\n _this.eventCallback = [\n function (fc, options) { return _this.event.onSaveEditor(fc, options); }\n ];\n resolve();\n });\n });\n };\n MetaCarEditor.prototype.addEvent = function (eventName, fc, options) {\n var index = this.eventList.indexOf(eventName);\n if (index == -1) {\n this.event.onCustomEvent(eventName, fc);\n return;\n }\n var event = this.eventList[index];\n this.eventCallback[index](fc, options);\n };\n MetaCarEditor.prototype.loop = function (delta) {\n var mousePos = this.level.getMousePosition();\n var selectedItem = this.level.getSelectedItems();\n if (selectedItem && selectedItem.type == \"asset\") {\n selectedItem.x = mousePos.x;\n selectedItem.y = mousePos.y;\n }\n else if (selectedItem) {\n selectedItem.x = Math.floor(mousePos.x / _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"]) * _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"];\n selectedItem.y = Math.floor(mousePos.y / _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"]) * _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"];\n }\n };\n return MetaCarEditor;\n}());\n\n\n\n//# sourceURL=webpack://metacar/./src/metacar_editor.ts?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MetaCarEditor\", function() { return MetaCarEditor; });\n/* harmony import */ var _ui_event__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ui_event */ \"./src/ui_event.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _editor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./editor */ \"./src/editor.ts\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./global */ \"./src/global.ts\");\n\n\n\n\nvar MetaCarEditor = (function () {\n function MetaCarEditor(canvasId, levelToLoad) {\n this.eventList = [\"save\"];\n if (!canvasId || this.levelToLoad) {\n console.error(\"You must specify the canvasId and the levelToLoad\");\n }\n this.canvasId = canvasId;\n this.levelToLoad = levelToLoad;\n }\n MetaCarEditor.prototype.load = function (level, agent) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n if (typeof _this.levelToLoad == \"string\") {\n _utils__WEBPACK_IMPORTED_MODULE_1__[\"loadCustomURL\"](_this.levelToLoad, function (content) {\n _this.level = new _editor__WEBPACK_IMPORTED_MODULE_2__[\"Editor\"](content, _this.canvasId);\n _this.level.load(function (delta) { return _this.loop(delta); });\n _this.event = new _ui_event__WEBPACK_IMPORTED_MODULE_0__[\"UIEvent\"](_this.level, _this.canvasId);\n _this.event.createEditorElementsEvents();\n _this.eventCallback = [\n function (fc, options) { return _this.event.onSaveEditor(fc, options); }\n ];\n resolve();\n });\n }\n else {\n _this.level = new _editor__WEBPACK_IMPORTED_MODULE_2__[\"Editor\"](_this.levelToLoad, _this.canvasId);\n _this.level.load(function (delta) { return _this.loop(delta); });\n _this.event = new _ui_event__WEBPACK_IMPORTED_MODULE_0__[\"UIEvent\"](_this.level, _this.canvasId);\n _this.event.createEditorElementsEvents();\n _this.eventCallback = [\n function (fc, options) { return _this.event.onSaveEditor(fc, options); }\n ];\n resolve();\n }\n });\n };\n MetaCarEditor.prototype.addEvent = function (eventName, fc, options) {\n var index = this.eventList.indexOf(eventName);\n if (index == -1) {\n this.event.onCustomEvent(eventName, fc);\n return;\n }\n var event = this.eventList[index];\n this.eventCallback[index](fc, options);\n };\n MetaCarEditor.prototype.loop = function (delta) {\n var mousePos = this.level.getMousePosition();\n var selectedItem = this.level.getSelectedItems();\n if (selectedItem && selectedItem.type == \"asset\") {\n selectedItem.x = mousePos.x;\n selectedItem.y = mousePos.y;\n }\n else if (selectedItem) {\n selectedItem.x = Math.floor(mousePos.x / _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"]) * _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"];\n selectedItem.y = Math.floor(mousePos.y / _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"]) * _global__WEBPACK_IMPORTED_MODULE_3__[\"ROADSIZE\"];\n }\n };\n return MetaCarEditor;\n}());\n\n\n\n//# sourceURL=webpack://metacar/./src/metacar_editor.ts?"); /***/ }), diff --git a/src/editor.ts b/src/editor.ts index 5e27519..bb40f37 100644 --- a/src/editor.ts +++ b/src/editor.ts @@ -97,7 +97,8 @@ export class Editor extends World { this.app.stage.removeChild(item.lidar); } if (item.mapId == MAP.CAR){ - item.road.cars.splice(item.road.cars.indexOf(item.car_id), 1); + if (item.road) + item.road.cars.splice(item.road.cars.indexOf(item.carId), 1); } if (item.agent) this.agent = undefined; diff --git a/src/metacar.ts b/src/metacar.ts index ce99ca6..2fb2f48 100644 --- a/src/metacar.ts +++ b/src/metacar.ts @@ -52,7 +52,6 @@ export class MetaCar { public load(): Promise{ return new Promise((resolve, reject) => { - console.log(typeof this.levelToLoad, this.levelToLoad); if (typeof this.levelToLoad == "string"){ U.loadCustomURL(this.levelToLoad, (content: LevelInfo) => { this.level = new Level(content, this.canvasId); diff --git a/src/metacar_editor.ts b/src/metacar_editor.ts index a26b4c9..8811317 100644 --- a/src/metacar_editor.ts +++ b/src/metacar_editor.ts @@ -10,24 +10,22 @@ export class MetaCarEditor { private agent: any; private level: Editor; private canvasId: string; - private levelUrl: string; + private levelToLoad: string|Object; private event: UIEvent; private eventList: string[] = ["save"] private eventCallback: any[]; - constructor(canvasId: string, levelUrl: string) { - /** - * @canvasId: HTML canvas ID to used - * @level: URL or Local storage URL. - * localstorage://level-name - * embedded:// - * http(s):// - */ - if (!canvasId || this.levelUrl){ - console.error("You must specify the canvasId and the levelUrl"); + /** + * @canvasId: HTML canvas ID + * @levelToLoad: URL of the level or directly the level's object. + * URL format: embedded://... or http(s)://... + */ + constructor(canvasId: string, levelToLoad: string) { + if (!canvasId || this.levelToLoad){ + console.error("You must specify the canvasId and the levelToLoad"); } this.canvasId = canvasId; - this.levelUrl = levelUrl; + this.levelToLoad = levelToLoad; } public load(level: string, agent: any): Promise{ @@ -37,8 +35,21 @@ export class MetaCarEditor { @agent (Agent class) */ return new Promise((resolve, reject) => { - U.loadCustomURL(this.levelUrl, (content: LevelInfo) => { - this.level = new Editor(content, this.canvasId); + if (typeof this.levelToLoad == "string"){ + U.loadCustomURL(this.levelToLoad, (content: LevelInfo) => { + this.level = new Editor(content, this.canvasId); + this.level.load((delta: number) => this.loop(delta)); + this.event = new UIEvent(this.level, this.canvasId); + this.event.createEditorElementsEvents(); + + this.eventCallback = [ + (fc: any, options: eventEditorLoadOptions) => this.event.onSaveEditor(fc, options) + ]; + resolve(); + }); + } + else{ + this.level = new Editor(this.levelToLoad, this.canvasId); this.level.load((delta: number) => this.loop(delta)); this.event = new UIEvent(this.level, this.canvasId); this.event.createEditorElementsEvents(); @@ -46,9 +57,8 @@ export class MetaCarEditor { this.eventCallback = [ (fc: any, options: eventEditorLoadOptions) => this.event.onSaveEditor(fc, options) ]; - resolve(); - }); + } }); }