Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/editor #182

Open
wants to merge 55 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
5ce44c7
feat: gameObject addChildAt
fanmingfei Dec 29, 2021
778a3f0
release: v1.2.5-edtor.0
fanmingfei Dec 29, 2021
b41e08c
chore: add emit decorator metadata
jimizai Mar 16, 2022
ef839eb
chore: add reflect metadata
jimizai Mar 16, 2022
30bcbb2
chore: add Field decorator tests
jimizai Mar 16, 2022
da39b7b
rm: drop IDEProp func
jimizai Mar 16, 2022
68d3855
rm: drop IDEProp func
jimizai Mar 16, 2022
c8fa503
feat: update inspector-decorator version
jimizai Mar 16, 2022
37008cb
feat: add reflect metadata to jest setup file
jimizai Mar 16, 2022
06fe594
feat: use Field repalce type decorator
jimizai Mar 16, 2022
8fc9e3f
feat: add color Field
jimizai Mar 21, 2022
5ff3c8c
chore: add scripts
jimizai Mar 21, 2022
88e04be
fix: bug fixed
jimizai Mar 21, 2022
3d2b585
fix: bug fixed
jimizai Mar 21, 2022
0015705
fix: use pnpm replace tnpm
jimizai Mar 22, 2022
93cb366
feat: add link scripts
jimizai Apr 1, 2022
08152b2
chore: update inspector decorator version
jimizai Apr 1, 2022
95f0a36
feat: update field metadata
jimizai Apr 12, 2022
63f00a1
feat: Edit mode Supported.
fanmingfei Apr 18, 2022
3ca3111
Merge branch 'feat/editor' of https://github.com/eva-engine/eva.js in…
jimizai Apr 18, 2022
37f7207
Merge branch 'dev' into feat/editor
fanmingfei Apr 21, 2022
a9dc943
release: v1.2.7-editor.0
fanmingfei Apr 21, 2022
dfd5d6e
chore: update lib inspector-decorators version
jimizai Apr 21, 2022
1dbdead
fix: update @eva/inspector-decorator
fanmingfei Apr 22, 2022
2c649b2
release: v1.2.7-editor.1
fanmingfei Apr 22, 2022
e75d5c9
fix: bug fixed
jimizai Apr 22, 2022
901322e
release: v1.2.7-editor.2
jimizai Apr 22, 2022
8b3c692
Merge branch 'feat/editor' of github.com:eva-engine/eva.js into feat/…
fanmingfei Apr 22, 2022
b7dccf5
fix: bug fixed
jimizai Apr 24, 2022
461f6fe
chore: use resource replace string
jimizai Apr 24, 2022
a4de10f
release: v1.2.7-editor.3
jimizai Apr 24, 2022
3bf3ac4
fix: mask change error
fanmingfei Apr 25, 2022
68a4cad
fix: remove debug
fanmingfei Apr 25, 2022
c82e058
Merge branch 'fix/mask' into feat/editor
jimizai Apr 25, 2022
c351a82
release: v1.2.7-editor.4
jimizai Apr 25, 2022
af148ed
feat: add field metadata to mask component
jimizai Apr 25, 2022
493ccee
release: v1.2.7-editor.5
jimizai Apr 25, 2022
6a022b6
chore: update inspector decorator version
jimizai Apr 29, 2022
db406d3
feat: impl execute in edit mode
jimizai Apr 29, 2022
8f0f045
release: v1.2.7-editor.6
jimizai Apr 30, 2022
4fece0e
feat: define Field props
jimizai May 1, 2022
5f33f94
release: v1.2.7-editor.7
jimizai May 1, 2022
18506da
chore: add lottie resource required
jimizai May 1, 2022
854a727
feat: support select dynamic fields
jimizai May 16, 2022
3ce8a4a
release: v1.2.7-editor.8
jimizai May 16, 2022
2bead6c
release: v1.2.7-editor.9
jimizai May 31, 2022
b3489ac
fix: bug fixed
jimizai Jun 1, 2022
40cabc1
release: v1.2.7-editor.10
jimizai Jun 1, 2022
fcba3c7
fix: rewrite Field decorator property
jimizai Jul 7, 2022
bcf83c4
chore: update inspector decorators version
jimizai Jul 7, 2022
254325d
fix: bug fixed
jimizai Jul 7, 2022
9abcccb
fix: bug fixed
jimizai Jul 7, 2022
df2ff51
release: v1.2.7-editor.11
jimizai Jul 7, 2022
2b607c2
fix: bug fixed
jimizai Jul 11, 2022
4168b24
release: v1.2.7-editor.12
jimizai Jul 11, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,6 @@ stats.html
vite-test/dist
examples/spine38.html
examples/loader.html
package-lock.json
package-lock.json

pnpm-lock.yaml
15 changes: 15 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
clean:
@lerna clean

install:
@npm install --force
@lerna bootstrap

build: clean install
@npm run build spine-base -- --types
@npm run build -- --types

link:
@node scripts/link.js

all: build link
56 changes: 56 additions & 0 deletions examples/src/addChildAt.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { RendererSystem } from "@eva/plugin-renderer";
import { Game, GameObject, RESOURCE_TYPE, resource } from "@eva/eva.js"
import { Img, ImgSystem } from "@eva/plugin-renderer-img";
export const name = 'image';
export async function init(canvas) {
resource.addResource([
{
name: 'imageName',
type: RESOURCE_TYPE.IMAGE,
src: {
image: {
type: 'png',
url: 'https://gw.alicdn.com/tfs/TB1DNzoOvb2gK0jSZK9XXaEgFXa-658-1152.webp',
},
},
preload: true,
},
]);
const game = new Game({
systems: [
new RendererSystem({
canvas,
width: 750,
height: 1000,
}),
new ImgSystem(),
],
});



window.test = (index: number) => {

const image = new GameObject('image', {
size: { width: 500, height: 500 },
origin: { x: 0, y: 0 },
position: {
x: Math.random() * 650,
y: Math.random() * 800,
},
anchor: {
x: 0,
y: 0,
},
});

image.addComponent(
new Img({
resource: 'imageName',
}),
);

game.scene.addChildAt(image, index);

}
}
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"private": true,
"version": "1.2.7",
"version": "1.2.7-editor.12",
"workspace": "packages",
"name": "eva.js",
"scripts": {
Expand Down Expand Up @@ -65,6 +65,7 @@
"lerna": "^3.22.1",
"minimist": "^1.2.5",
"prettier": "^2.2.1",
"reflect-metadata": "^0.1.13",
"reset.css": "^2.0.2",
"rollup": "^2.40.0",
"rollup-plugin-inject": "^3.0.2",
Expand Down
27 changes: 10 additions & 17 deletions packages/eva.js/__tests__/decorators.spec.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,19 @@
import { type } from '@eva/inspector-decorator'
import {decorators, System} from '../lib';
import { Field, getPropertiesOf } from '@eva/inspector-decorator';
import { decorators, System } from '../lib';

const {componentObserver} = decorators;
const { componentObserver } = decorators;

describe('decorators', () => {
it('ide decorator should collect props', () => {
class Test {
static IDEProps: any = {};

@type('string') public name: string = 'Test';
@type('size') public size: number[] = [10, 10];
@Field() public name: string = 'Test';
@Field(() => Number) public size: number[] = [10, 10];
}
expect(Test.IDEProps).toEqual({
name: {
key: 'name',
type: 'string'
},
size: {
key: 'size',
type: 'size'
}
});
const attrs = getPropertiesOf(Test);
expect(attrs.children[0].type).toBe('string');
expect(attrs.children[0].isArray).toBe(false);
expect(attrs.children[1].type).toBe('number');
expect(attrs.children[1].isArray).toBe(true);
});

it('class use component observer decorator', () => {
Expand Down
26 changes: 22 additions & 4 deletions packages/eva.js/lib/core/GameObject.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,24 @@ class GameObject {
gameObject.scene = this.scene;
}

/**
*
* @param gameObject Child GameObject
* @param index Add to index in children
*/
addChildAt(gameObject: GameObject, index: number) {
if (index > this.transform.children.length) {
throw new Error(
gameObject.name + 'addChildAt: The index 18 supplied is out of bounds ' + this.transform.children.length,
);
}
gameObject.transform.childIndex = index;
this.addChild(gameObject);
// packages/eva.js/lib/core/GameObject.ts > addChildAt
// packages/plugin-renderer/lib/Transform.ts > change
// packages/eva.js/lib/core/Transform.ts > addChild
}

/**
* Remove child gameObject
* @param gameObject - child gameobject
Expand All @@ -135,7 +153,7 @@ class GameObject {
addComponent<T extends Component<ComponentParams>>(C: T): T;
addComponent<T extends Component<ComponentParams>>(C: ComponentConstructor<T>, obj?: ComponentParams): T;
addComponent<T extends Component<ComponentParams>>(C: T | ComponentConstructor<T>, obj?: ComponentParams): T {
if (this.destroyed) return
if (this.destroyed) return;
const componentName = getComponentName(C);
if (this._componentCache[componentName]) return;

Expand Down Expand Up @@ -238,8 +256,8 @@ class GameObject {
/** Destory this gameObject */
destroy() {
if (!this.transform) {
console.error('Cannot destroy gameObject that have already been destroyed.')
return
console.error('Cannot destroy gameObject that have already been destroyed.');
return;
}
Array.from(this.transform.children).forEach(({ gameObject }) => {
gameObject.destroy();
Expand All @@ -250,7 +268,7 @@ class GameObject {
this._removeComponent(key);
}
this.components.length = 0;
this.destroyed = true
this.destroyed = true;
}
}

Expand Down
41 changes: 25 additions & 16 deletions packages/eva.js/lib/core/Transform.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {type, step} from '@eva/inspector-decorator';
import { Field } from '@eva/inspector-decorator';
import Component from './Component';
import type { ComponentParams } from './Component';

Expand All @@ -10,9 +10,6 @@ interface Vector2 {
y: number;
}

/**
* Two dimensional size
*/
interface Size2 {
width: number;
height: number;
Expand Down Expand Up @@ -56,6 +53,9 @@ class Transform extends Component<TransformParams> {
readonly name: string = 'Transform';
private _parent: Transform = null;

/** only used in addChildAt */
childIndex: number = -1;

/** Whether this transform in a scene object */
inScene: boolean = false;

Expand All @@ -77,13 +77,18 @@ class Transform extends Component<TransformParams> {
this.rotation = params.rotation || this.rotation;
}

@type('vector2') @step(1) position: Vector2 = {x: 0, y: 0};
@type('size') @step(1) size: Size2 = {width: 0, height: 0};
@type('vector2') @step(0.1) origin: Vector2 = {x: 0, y: 0};
@type('vector2') @step(0.1) anchor: Vector2 = {x: 0, y: 0};
@type('vector2') @step(0.1) scale: Vector2 = {x: 1, y: 1};
@type('vector2') @step(0.1) skew: Vector2 = {x: 0, y: 0};
@type('number') @step(0.1) rotation: number = 0;
@Field({ type: 'vector2', step: 0.01 }) position = { x: 0, y: 0 };
@Field({
type: 'size2',
step: 0.01,
min: 0,
})
size: Size2 = { width: 0, height: 0 };
@Field({ type: 'vector2', step: 0.01 }) origin: Vector2 = { x: 0, y: 0 };
@Field({ type: 'vector2', step: 0.01 }) anchor: Vector2 = { x: 0, y: 0 };
@Field({ type: 'vector2', bindable: true, step: 0.01, min: 0 }) scale: Vector2 = { x: 1, y: 1 };
@Field({ type: 'vector2', step: 0.01 }) skew: Vector2 = { x: 0, y: 0 };
@Field({ step: 0.01 }) rotation: number = 0;

set parent(val: Transform) {
if (val) {
Expand All @@ -108,14 +113,18 @@ class Transform extends Component<TransformParams> {
* @param child - child gameObject's transform component
*/
addChild(child: Transform) {
if (child.parent === this) {
const index = this.children.findIndex(item => item === child);
this.children.splice(index, 1);
} else if (child.parent) {
if (child.parent) {
child.parent.removeChild(child);
}
child._parent = this;
this.children.push(child);
if (child.childIndex > -1) {
// packages/eva.js/lib/core/GameObject.ts > addChildAt
// packages/plugin-renderer/lib/Transform.ts > change
// packages/eva.js/lib/core/Transform.ts > addChild
this.children.splice(child.childIndex, 0, child);
} else {
this.children.push(child);
}
}

/**
Expand Down
12 changes: 0 additions & 12 deletions packages/eva.js/lib/decorators/ide.ts

This file was deleted.

Loading