wgge 1.0.2 → 1.0.4

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.
@@ -40,18 +40,21 @@ export default class AudioRenderer extends RendererBase {
40
40
  }
41
41
  });
42
42
 
43
- this.game.assets.getAsset(this.model.url.get(), (audio) => {
44
- if (!this.audio) {
45
- console.log('audio loaded after renderer was deactivated');
46
- return;
43
+ this.game.assets.loadAsset(
44
+ this.model.url.get(),
45
+ (audio) => {
46
+ if (!this.audio) {
47
+ console.log('audio loaded after renderer was deactivated');
48
+ return;
49
+ }
50
+
51
+ this.audio.addEventListener('canplaythrough', () => {
52
+ this.updatePlaying();
53
+ });
54
+
55
+ this.audio.src = audio.src;
47
56
  }
48
-
49
- this.audio.addEventListener('canplaythrough', () => {
50
- this.updatePlaying();
51
- });
52
-
53
- this.audio.src = audio.src;
54
- });
57
+ );
55
58
  }
56
59
 
57
60
  deactivateInternal() {
@@ -49,11 +49,14 @@ export default class ImageCanvasRenderer extends CanvasRenderer {
49
49
  reloadImage() {
50
50
  this.image = null;
51
51
  if (this.model.image.uri.isEmpty()) return;
52
- this.game.assets.getAsset(this.model.image.uri.get(), (img) => {
53
- this.image = img;
54
- this.model.image.size.set(img.width, img.height);
55
- this.renderImage();
56
- });
52
+ this.game.assets.loadAsset(
53
+ this.model.image.uri.get(),
54
+ (img) => {
55
+ this.image = img;
56
+ this.model.image.size.set(img.width, img.height);
57
+ this.renderImage();
58
+ }
59
+ );
57
60
  }
58
61
 
59
62
  }
@@ -33,9 +33,12 @@ export default class ImageDomRenderer extends DomRenderer {
33
33
  console.error('Invalid image URI', uri);
34
34
  return;
35
35
  }
36
- this.game.assets.getAsset(uri, (img) => {
37
- this.container = img.cloneNode(true);
38
- this.dom.appendChild(this.container);
39
- });
36
+ this.game.assets.loadAsset(
37
+ uri,
38
+ (img) => {
39
+ this.container = img.cloneNode(true);
40
+ this.dom.appendChild(this.container);
41
+ }
42
+ );
40
43
  }
41
44
  }
@@ -1,6 +1,5 @@
1
1
  import * as localForage from "localforage";
2
2
  import ControllerBase from "../core/controller/ControllerBase";
3
- import EditorController from "../editor/EditorController";
4
3
  import ControlsController from "./controls/ControlsController";
5
4
 
6
5
  export default class GameController extends ControllerBase {
@@ -19,7 +18,6 @@ export default class GameController extends ControllerBase {
19
18
  this.resourcesTimeOut = null;
20
19
 
21
20
  this.addChild(new ControlsController(this.game, this.model.controls));
22
- this.addChild(new EditorController(this.game, this.model.editor));
23
21
 
24
22
  this.addAutoEvent(
25
23
  window,
package/game/GameModel.js CHANGED
@@ -2,7 +2,6 @@ import ObjectModel from "../core/model/ObjectModel";
2
2
  import Vector2 from "../core/model/vector/Vector2";
3
3
  import ControlsModel from "./controls/ControlsModel";
4
4
  import ResourcesModel from "./resources/ResourcesModel";
5
- import EditorModel from "../editor/EditorModel";
6
5
  import NullableNode from "../core/model/value/NullableNode";
7
6
  import BoolValue from "../core/model/value/BoolValue";
8
7
  import GlobalAudioModel from "../core/audio/global/GlobalAudioModel";
@@ -15,11 +14,6 @@ export default class GameModel extends ObjectModel {
15
14
  */
16
15
  isInDebugMode;
17
16
 
18
- /**
19
- * @type EditorModel
20
- */
21
- editor;
22
-
23
17
  /**
24
18
  * @type NullableNode<MenuModel>
25
19
  */
@@ -59,7 +53,6 @@ export default class GameModel extends ObjectModel {
59
53
  super(false);
60
54
 
61
55
  this.isInDebugMode = this.addProperty('isInDebugMode', new BoolValue(debugModeEnabled));
62
- this.editor = this.addProperty('editor', new EditorModel());
63
56
  this.menu = this.addProperty('menu', new NullableNode());
64
57
 
65
58
  this.viewBoxSize = this.addProperty('viewBoxSize', new Vector2());
@@ -1,8 +1,6 @@
1
1
  import DomRenderer from "../core/renderer/dom/DomRenderer";
2
- import EditorRenderer from "../editor/EditorRenderer";
3
2
  import NullableNodeRenderer from "../core/renderer/generic/NullableNodeRenderer";
4
3
  import GlobalAudioRenderer from "../core/audio/global/GlobalAudioRenderer";
5
- import ConditionalNodeRenderer from "../core/renderer/generic/ConditionalNodeRenderer";
6
4
  import DOMHelper from "../core/helper/DOMHelper";
7
5
  import MainMenuRenderer from "./menu/MainMenuRenderer";
8
6
 
@@ -35,15 +33,6 @@ export default class GameRenderer extends DomRenderer {
35
33
  )
36
34
  );
37
35
 
38
- this.addChild(
39
- new ConditionalNodeRenderer(
40
- this.game,
41
- this.model.isInDebugMode,
42
- () => this.model.isInDebugMode.get(),
43
- () => new EditorRenderer(this.game, this.model.editor, this.editorLayer)
44
- )
45
- );
46
-
47
36
  this.addAutoEvents(
48
37
  this.model.assets,
49
38
  ['session-finished-loaders-changed', 'session-total-loaders-changed'],
@@ -68,7 +57,6 @@ export default class GameRenderer extends DomRenderer {
68
57
  this.saveGameLayer = DOMHelper.createElement(this.container, 'div', 'savegame-layer container container-host');
69
58
  this.loadingLayer = DOMHelper.createElement(this.container, 'div', 'loading-layer');
70
59
  this.menuLayer = DOMHelper.createElement(this.container, 'div', 'menu-layer');
71
- this.editorLayer = DOMHelper.createElement(this.container, 'div', 'editor-layer');
72
60
 
73
61
  this.model.assets.preload(this.model.getResourcesForPreload());
74
62
  }
@@ -79,7 +67,6 @@ export default class GameRenderer extends DomRenderer {
79
67
  this.saveGameLayer = null;
80
68
  this.loadingLayer = null;
81
69
  this.menuLayer = null;
82
- this.editorLayer = null;
83
70
  }
84
71
 
85
72
  updateLoading() {
@@ -1,25 +1,22 @@
1
- import ModelNodeTable from "../../core/model/collection/table/ModelNodeTable";
2
- import MaterialModel from "./material/MaterialModel";
3
1
  import ObjectModel from "../../core/model/ObjectModel";
4
- import Model3dModel from "./3d/3DModel";
5
2
 
6
3
  export default class ResourcesModel extends ObjectModel {
7
4
 
8
5
  /**
9
6
  * @type ModelNodeTable
10
7
  */
11
- materials;
8
+ images;
12
9
 
13
10
  /**
14
- * @type ModelNodeTable<Model3dModel>
11
+ * @type ModelNodeTable
15
12
  */
16
- models3d;
13
+ sounds;
17
14
 
18
15
  constructor() {
19
16
  super();
20
17
 
21
- this.materials = this.addProperty('materials', new ModelNodeTable((id) => new MaterialModel(id)));
22
- this.models3d = this.addProperty('models3d', new ModelNodeTable((id) => new Model3dModel(id)));
18
+ //this.images = this.addProperty('images', new ModelNodeTable((id) => new ImageModel(id)));
19
+ //this.sounds = this.addProperty('sounds', new ModelNodeTable((id) => new Model3dModel(id)));
23
20
 
24
21
  }
25
22
 
@@ -1,23 +1,13 @@
1
1
  import Dictionary from "../../../core/Dictionary";
2
2
  import Collection from "../../../core/Collection";
3
3
  import ImageLoader from "./loader/ImageLoader";
4
- import GlbLoader from "./loader/GlbLoader";
5
4
  import AudioLoader from "./loader/AudioLoader";
6
- import MaterialLoader from "./loader/MaterialLoader";
7
- import Model3dLoader from "./loader/Model3dLoader";
8
- import SpriteLoader from "./loader/SpriteLoader";
9
5
  import NodeWithEvents from "../../../core/model/event/NodeWithEvents";
10
6
  import StringHelper from "../../../core/helper/StringHelper";
11
- import Model3dAnimationLoader from "./loader/Model3dAnimationLoader";
12
7
 
13
8
  const ASSET_TYPE_LOADERS = {
14
9
  'aud': AudioLoader,
15
- 'img': ImageLoader,
16
- 'glb': GlbLoader,
17
- 'mat': MaterialLoader,
18
- 'm3d': Model3dLoader,
19
- 'm3a': Model3dAnimationLoader,
20
- 'spr': SpriteLoader
10
+ 'img': ImageLoader
21
11
  }
22
12
 
23
13
  /**
@@ -133,7 +123,7 @@ export default class AssetCache extends NodeWithEvents {
133
123
  this.loaders.remove(loader);
134
124
  }
135
125
 
136
- getAsset(uri, onLoaded = null, onError = null) {
126
+ loadAsset(uri, onLoaded = null, onError = null) {
137
127
  if (typeof uri !== 'string') {
138
128
  console.log('uri is not a string', uri);
139
129
  return;
@@ -167,37 +157,25 @@ export default class AssetCache extends NodeWithEvents {
167
157
  }
168
158
  }
169
159
 
170
- loadAsset(uri, onLoaded) {
171
- this.getAsset(uri, onLoaded);
172
- }
173
-
174
160
  loadImage(url, onLoaded) {
175
- this.getAsset(url, onLoaded);
161
+ this.loadAsset(url, onLoaded);
176
162
  }
177
163
 
178
- loadMaterial(materialId, onLoaded) {
179
- this.getAsset(`mat/${materialId}`, onLoaded);
164
+ loadAudio(materialId, onLoaded) {
165
+ this.loadAsset(`mat/${materialId}`, onLoaded);
180
166
  }
181
167
 
182
168
  resetMaterial(materialId) {
183
169
  this.resetCache(`mat/${materialId}`);
184
170
  }
185
171
 
186
- loadModel3d(modelId, onLoaded) {
187
- this.getAsset(`m3d/${modelId}`, onLoaded);
188
- }
189
-
190
- loadSprite(spriteId, onLoaded) {
191
- this.getAsset(`spr/${spriteId}`, onLoaded);
192
- }
193
-
194
172
  preload(resources) {
195
173
  console.log('Preloading:', resources);
196
- resources.forEach((r) => this.getAsset(r));
174
+ resources.forEach((r) => this.loadAsset(r));
197
175
  }
198
176
 
199
177
  load(resources) {
200
178
  console.log('Loading:', resources);
201
- resources.forEach((r) => this.getAsset(r, () => undefined));
179
+ resources.forEach((r) => this.loadAsset(r, () => undefined));
202
180
  }
203
181
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wgge",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Web GL Game Engine",
5
5
  "main": "index.js",
6
6
  "devDependencies": {
package/style/style.less CHANGED
@@ -1,3 +1,2 @@
1
1
  @import "basic/utilities.less";
2
- @import "basic/editor.less";
3
2
  @import "basic/game.less";
@@ -1,134 +0,0 @@
1
- import ControllerBase from "../core/controller/ControllerBase";
2
- import HttpHelper from "../core/helper/HttpHelper";
3
-
4
- export default class EditorController extends ControllerBase {
5
-
6
- /**
7
- * @type DemoEditorModel
8
- */
9
- model;
10
-
11
- constructor(game, model) {
12
- super(game, model);
13
-
14
- this.model = model;
15
-
16
- this.addAutoEvent(
17
- this.model,
18
- 'table-selected',
19
- (table) => this.runOnUpdate(() => this.model.activeTable.set(table))
20
- );
21
-
22
- this.addAutoEvent(
23
- this.model,
24
- 'table-closed',
25
- () => this.runOnUpdate(() => this.model.activeTable.set(null))
26
- );
27
-
28
- this.addAutoEvent(
29
- this.model,
30
- 'node-saved',
31
- (param) => this.runOnUpdate(() => this.saveNode(param))
32
- );
33
-
34
- this.addAutoEvent(
35
- this.model,
36
- 'form-closed',
37
- () => this.runOnUpdate(() => this.model.activeForm.set(null))
38
- );
39
-
40
- this.addAutoEvent(
41
- this.model,
42
- 'node-delete',
43
- (param) => this.runOnUpdate(() => this.deleteNode(param))
44
- );
45
-
46
- this.addAutoEvent(
47
- this.model,
48
- 'node-clone',
49
- (param) => this.runOnUpdate(() => this.cloneNode(param))
50
- );
51
-
52
- this.addAutoEvent(
53
- this.model,
54
- 'download-resources',
55
- (param) => this.runOnUpdate(() => this.downloadResources(param))
56
- );
57
-
58
- this.addAutoEvent(
59
- this.model,
60
- 'save-resources',
61
- () => this.saveResources()
62
- );
63
-
64
- this.addAutoEvent(
65
- this.model,
66
- 'switch-options',
67
- () => this.runOnUpdate(() => this.model.isVisible.invert())
68
- );
69
-
70
- }
71
-
72
- activateInternal() {
73
- this.game.audio.paused.set(true);
74
- }
75
-
76
- deactivateInternal() {
77
- this.game.audio.paused.set(false);
78
- }
79
-
80
- /**
81
- *
82
- * * @param {Object} param
83
- * * @param {ObjectModel} param.node
84
- * * @param {FormData} param.data
85
- */
86
- saveNode(param) {
87
- const node = param.node;
88
- const data = param.data;
89
-
90
- node.properties.forEach((name, value) => {
91
- if (data.has(name)) {
92
- if (value && value.value !== undefined && typeof value.set === 'function') {
93
- value.set(data.get(name));
94
- } else {
95
- console.log(data.get(name), name);
96
- }
97
- } else if (data.has(`${name}[]`)) {
98
- if (typeof value === 'object' && typeof value.setFromArray === 'function') {
99
- const arr = data.getAll(`${name}[]`);
100
- value.setFromArray(arr);
101
- }
102
- } else if (value && typeof value.value === 'boolean' && typeof value.set === 'function') {
103
- value.set(false);
104
- }
105
- });
106
- }
107
-
108
- deleteNode(param) {
109
- const node = param.node;
110
- const table = param.table;
111
- const result = table.remove(node);
112
- if (table.selectedNode.equalsTo(node)) {
113
- table.selectedNode.set(null);
114
- }
115
- console.log('removed node', result);
116
- }
117
-
118
- cloneNode(param) {
119
- const node = param.node;
120
- const table = param.table;
121
- const result = table.addClone(node);
122
- table.selectedNode.set(result);
123
- console.log('cloned node', result);
124
- }
125
-
126
- downloadResources() {
127
- const data = JSON.stringify(this.game.resources.getState());
128
- HttpHelper.fakeDownload('resources.json', data);
129
- }
130
-
131
- async saveResources() {
132
- await HttpHelper.post('http://localhost:88/save-resources', this.game.resources.getState());
133
- }
134
- }
@@ -1,38 +0,0 @@
1
- import ObjectModel from "../core/model/ObjectModel";
2
- import NullableNode from "../core/model/value/NullableNode";
3
- import BoolValue from "../core/model/value/BoolValue";
4
-
5
- export default class EditorModel extends ObjectModel {
6
-
7
- /**
8
- * @type BoolValue
9
- */
10
- isVisible;
11
-
12
- /**
13
- * @type NullableNode
14
- */
15
- activeTable;
16
-
17
- /**
18
- * @type NullableNode
19
- */
20
- activeForm;
21
-
22
- /**
23
- * @type NullableNode<MaterialModel>
24
- */
25
- activeMaterial;
26
-
27
- constructor() {
28
- super();
29
-
30
- this.activeTable = this.addProperty('activeTable', new NullableNode());
31
- this.activeForm = this.addProperty('activeForm', new NullableNode());
32
- this.activeMaterial = this.addProperty('activeMaterial', new NullableNode());
33
-
34
- this.isVisible = this.addProperty('isVisible', new BoolValue(true));
35
-
36
- }
37
-
38
- }
@@ -1,116 +0,0 @@
1
- import DomRenderer from "../core/renderer/dom/DomRenderer";
2
- import TableRenderer from "./table/TableRenderer";
3
- import NullableNodeRenderer from "../core/renderer/generic/NullableNodeRenderer";
4
- import NodeFormRenderer from "./form/NodeFormRenderer";
5
- import DOMHelper from "../core/helper/DOMHelper";
6
-
7
- export default class EditorRenderer extends DomRenderer {
8
-
9
- /**
10
- * @type EditorModel
11
- */
12
- model;
13
-
14
- constructor(game, model, dom) {
15
- super(game, model, dom);
16
-
17
- this.model = model;
18
-
19
- this.container = null;
20
-
21
- this.tableRenderer = new NullableNodeRenderer(this.game, this.model.activeTable, (model) => new TableRenderer(this.game, model, this.table));
22
- this.addChild(this.tableRenderer);
23
-
24
- this.formRenderer = new NullableNodeRenderer(this.game, this.model.activeForm, (model) => new NodeFormRenderer(this.game, model, this.form));
25
- this.addChild(this.formRenderer);
26
-
27
- this.addAutoEvent(
28
- this.model.activeTable,
29
- 'change',
30
- () => this.updateTables()
31
- );
32
-
33
- this.addAutoEvent(
34
- this.model.isVisible,
35
- 'change',
36
- () => {
37
- if (this.model.isVisible.get()) {
38
- DOMHelper.removeClass(this.dock, 'hidden');
39
- DOMHelper.removeClass(this.buttonsLeft, 'hidden');
40
- DOMHelper.removeClass(this.buttonsRight, 'hidden');
41
- } else {
42
- DOMHelper.addClass(this.dock, 'hidden');
43
- DOMHelper.addClass(this.buttonsLeft, 'hidden');
44
- DOMHelper.addClass(this.buttonsRight, 'hidden');
45
- }
46
- },
47
- true
48
- );
49
-
50
- this.stopEventPropagationHandler = (e) => e.stopPropagation();
51
- }
52
-
53
- activateInternal() {
54
- this.container = this.addElement('div', 'editor');
55
- this.nav = DOMHelper.createElement(this.container, 'nav', 'bg row');
56
-
57
- const buttons = DOMHelper.createElement(this.nav, 'div', 'buttons row');
58
- this.switch = DOMHelper.createElement(buttons, 'input');
59
- this.switch.setAttribute('type', 'checkbox');
60
- this.switch.setAttribute('name', 'switch');
61
- this.switch.setAttribute('checked', this.model.isVisible.get());
62
- this.switch.addEventListener('change', () => this.model.triggerEvent('switch-options'));
63
-
64
- this.buttonsLeft = DOMHelper.createElement(buttons, 'div');
65
-
66
- DOMHelper.createElement(
67
- this.buttonsLeft,
68
- 'button',
69
- 'special',
70
- 'Save Resources',
71
- () => this.model.triggerEvent('save-resources')
72
- );
73
-
74
- this.buttonsRight = DOMHelper.createElement(this.nav, 'div');
75
-
76
- this.dock = DOMHelper.createElement(this.container, 'div', 'dock bg');
77
- this.tables = DOMHelper.createElement(this.dock, 'div', 'table-selection bg');
78
- this.table = DOMHelper.createElement(this.dock, 'div', 'active-table');
79
- this.form = DOMHelper.createElement(this.dock, 'div', 'active-form');
80
- this.item = DOMHelper.createElement(this.dock, 'div', 'active-item');
81
-
82
- const events = ['click', 'mousemove', 'mousedown', 'mouseup', 'wheel'];
83
- const elements = [this.nav, this.tables, this.table, this.form, this.item];
84
- for (const eli in elements) {
85
- for (const evi in events) {
86
- this.addAutoEvent(elements[eli], events[evi], this.stopEventPropagationHandler);
87
- }
88
- }
89
-
90
- this.updateTables();
91
- }
92
-
93
- deactivateInternal() {
94
- this.removeElement(this.container);
95
- }
96
-
97
- updateTables() {
98
- DOMHelper.emptyElement(this.tables);
99
- const wrapper = DOMHelper.createElement(this.tables, 'div', 'inner');
100
- this.addMenuSection(wrapper, this.game.resources, 'Resources');
101
- }
102
-
103
- addMenuSection(wrapper, node, name) {
104
- DOMHelper.createElement(wrapper, 'h3', null, name);
105
- const menu = DOMHelper.createElement(wrapper, 'ul', 'menu');
106
- node.properties.forEach(
107
- (name, property) => {
108
- const isActive = this.model.activeTable.equalsTo(property);
109
- const item = DOMHelper.createElement(menu, 'li', isActive ? 'active' : '');
110
- const link = DOMHelper.createElement(item, 'a', null, name);
111
- link.addEventListener('click', () => this.model.triggerEvent('table-selected', property));
112
- }
113
- );
114
- }
115
-
116
- }