Skip to content

Commit

Permalink
Merge Main branch (#826)
Browse files Browse the repository at this point in the history
* Add color space (#543)

* feat: add engine settings

* fix: opt code (#519)

* feat: modify physics-related class for editor (#547)

* feat: modify physics-related class for editor

* Merge main to dev/0.6 (#553)

* refactor: merge main to dev/0.6

* fix(gl): fix gl error (#555)

* v0.5.7

* fix: bump verison (#557)

Co-authored-by: shensi.zxd <[email protected]>

* fix: shader error (#556)

Co-authored-by: shensi.zxd <[email protected]>

* feat/add AnimatorState script for handle animatorState's lifecycle (#552)

* feat: add `StateMachineScript`

* fix: onEndRender trigger error

* Fix Call EndRender Error (#563)

* fix: onEndRender trigger error

* feat: support skybox with hdr(rgbe) format (#567)

* feat: add rgbm decode mode

* fix: color space correction (#566)

* fix: color space correction

* fix: bump version (#568)

* feat: change clipTime to normalized as same as  transitionTime for mo… (#560)

* feat: change clipTime to normalized as same as  transitionTime for more understandable

* Update README.md

* Update README.md

* Update README.md

* feat: add method: addEvent overload (#559)

* feat: support ambient-light replacement (#569)

* feat: support ambient-light replacement

Co-authored-by: shensi.zxd <[email protected]>
Co-authored-by: GuoLei <[email protected]>

* Feat/ambient light adapter editor (#570)

* feat: adapter oasis editor with ambient light

* feat: add getCurrentAnimatorState API and fix crossfade time (#565)

* fix: use alipay cdn for physx wasm (#571)

* add wasm file (#572)

* fix: use alipay cdn for physx wasm

* fix: include wasm files

* Fix : the compatibility problem of IOS lower version (#573)

* fix: the compatibility problem of IOS lower version

* Merge dev/0.6 branch (#574)

* feat: solve math design circular dependency (#488)

* feat: solve math design cirular dependency

* PhysX based raycast and collider (#505)

* feat: add physx version raycast and trigger
* feat: add  trigger event in script

* feat: Add InputManager (#497)

* feat:  add InputManager

* Fix InputManager's Bug which will be triggered when there is no physics engine. (#524)

* fix:InputManager modify timing

* Lite Physics Package (#522)

* feat: add physics lite package

* Refactor: split pbr shader  (#514)

* refactor: pbr shader clean up

* feat: add createCapsule in PrimitiveMesh (#515)

* feat: add createCapsule in PrimitiveMesh

* Feat: support read/write mipmap data from textures and render target (#382)

* feat: support render to mip level

* feat: support reading from texture with mip level

* Feat: hdr runtime (#523)

* feat: support IBL  HDR Specular

* perf: plane horizontal default (#535)

* perf(plane): plane horizontal default

* fix(plane): fix cull face (#537)

* fix(plane): fix uv error (#538)

* feat: add more uv channel and color (#548)

* Feat: Sprite add clone function. (#532)

* feat: sprite add clone function

* Add color space (#543)

* feat: add engine settings

* fix: opt code (#519)

* feat: modify physics-related class for editor (#547)

* feat: modify physics-related class for editor

* Merge main to dev/0.6 (#553)

* refactor: merge main to dev/0.6

* fix: bump verison (#557)

Co-authored-by: shensi.zxd <[email protected]>

* fix: shader error (#556)

Co-authored-by: shensi.zxd <[email protected]>

* feat/add AnimatorState script for handle animatorState's lifecycle (#552)

* feat: add `StateMachineScript`

* feat: support skybox with hdr(rgbe) format (#567)

* feat: add rgbm decode mode

* fix: color space correction (#566)

* fix: color space correction

* fix: bump version (#568)

* feat: change clipTime to normalized as same as  transitionTime for mo… (#560)

* feat: change clipTime to normalized as same as  transitionTime for more understandable

* feat: add method: addEvent overload (#559)

* feat: support ambient-light replacement (#569)

* feat: support ambient-light replacement

Co-authored-by: shensi.zxd <[email protected]>
Co-authored-by: GuoLei <[email protected]>

* Feat/ambient light adapter editor (#570)

* feat: adapter oasis editor with ambient light

* feat: add getCurrentAnimatorState API and fix crossfade time (#565)

* fix: use alipay cdn for physx wasm (#571)

* add wasm file (#572)

* fix: use alipay cdn for physx wasm

* fix: include wasm files

* Fix : the compatibility problem of IOS lower version (#573)

* fix: the compatibility problem of IOS lower version

Co-authored-by: yangfengzzz <[email protected]>
Co-authored-by: AZhan <[email protected]>
Co-authored-by: zhuxudong <[email protected]>
Co-authored-by: JujieX <[email protected]>
Co-authored-by: singlecoder <[email protected]>
Co-authored-by: shensi.zxd <[email protected]>
Co-authored-by: luzhuang <[email protected]>

* v0.6.0-alpha.0

* refactor: fix physics package.json

* refactor: fix physics package.json (#575)

* v0.6.0-alpha.1

* feat: support env loader (#577)

Co-authored-by: shensi.zxd <[email protected]>

* fix: fix physcis update time and dynamic collider update (#578)

* feat: support env loader (#577) (#580)

* Feat/animator reset (#533)

* feat: add animator reset

* Merge latest dev/0.6 (#581)

* feat: support env loader (#577)
* feat: add animator reset

* feat: adapter env (#582)

Co-authored-by: shensi.zxd <[email protected]>

* feat: add rgbm switch (#584)

Co-authored-by: shensi.zxd <[email protected]>

* Feat/animator reset (#583)

* fix: bug fix

* fix: remove ms blob deprecated

* build: update typescript version

* feat: update background mesh

* refactor: add gc ignore

* Fix Background UV Error and Update TypeScript Version (#585)

* fix: update background mesh

* v0.6.0-alpha.2

* v0.6.0-alpha.3

* fix: dependencies package version (#588)

* Fix: the bug that inputmanager cannot be obtained (#589)

* fix: the bug that inputmanager cannot be obtained

* fix: package.json (#591)

* fix: the bug that inputmanager cannot be obtained (#592)

* fix: the bug that inputmanager cannot be obtained

* v0.6.0

* v0.6.1

* build: physics use oasis-engine dependency

* Change Dependency for Physics (#594)


* build: physics use oasis-engine dependency

* v0.6.2

* fix: use canvas  as control precision (#601)

Co-authored-by: shensi.zxd <[email protected]>

* v0.6.3

* fix: `worldToViewportPoint()` bug

* fix: `worldToViewportPoint()` bug (#603)

* fix: `screenToViewportPoint()` bug

* refactor: opt `viewportToWorldPoint` and `screenToWorldPoint`

* fix: comments

* fix: opt code

* refactor: opt code

* Merge branch 'main' of github.com:oasis-engine/engine

* refactor: opt code

* fix: raycast bug, global and local transform misused (#602)

* fix: set trilinear filter mode by default (#610)

Co-authored-by: shensi.zxd <[email protected]>

* fix: add  transparent channel (#611)

Co-authored-by: shensi.zxd <[email protected]>

* fix: front face bug

* refactor: fix code

* optimization viewportToWorldPoint and screenToWorldPoint (#604)

* fix: `worldToViewportPoint()` bug

* fix: `screenToViewportPoint()` bug

* refactor: opt `viewportToWorldPoint` and `screenToWorldPoint`

* fix: front face bug

* bump version

* bump version

* feat: add register and reflection object

* feat: add prefab parser

* Merge branch 'main' of github.com:oasis-engine/engine

* fix: front face bug

* Fix mesh render front face bug (#614)

* fix: front face bug

* fix: viewportToWorldPoint and worldToViewportPoint bug (#615)

* fix: `viewportToWorldPoint` and `worldToViewportPoint` bug and improve performance

* fix: resourceManager has't destory all cache

* Fix ResourceManager Has not Destoryed All Cache (#621)


* fix: resourceManager has't destory all cache

* Update README.md

chore: update links

* v0.6.4

* Fix asset destroy cache bug (#622)

* fix: glTF or Entity  destroy cache bug

* v0.6.5

* fix: cache promise is not clear

* Fix Loading Promise is not Clear (#623)

* fix: cache promise is not clear

* fix: entity cache bug

* refactor: add destroyed project

* fix: entity cache bug (#627)

* fix: entity cache bug

* v0.6.6

* refactor: delete deprecate code (#630)

* bump version

* feat: export prefabloader

* fix: dynamic explansion

* feat: add mipmap generate warn

* feat: add mipmap true

* feat: add pixel buffer

* fix: normal attributer is need in unlit (#637)

* fix: normal attributer is need in unlit

* fix: physx bug (#651)

* fix: physx bug

* fix: opt collider shape scale

* v0.6.7

* fix: get pixel buffer use mip level should right shift (#656)

Co-authored-by: gz65555 <[email protected]>

* Update AnimatorState.ts (#657)

fix: fix comment

* Rename `ability` to `component`. (#608)

* fix: resize max uniform vector count (#660)

* fix: resize max uniform vector count

Co-authored-by: shensi.zxd <[email protected]>

* Optimize the use of `Transform` API (#638)

* refactor: opt transform API

* fix(2d): can not update world position for sprite renderer when call … (#635)

* fix(2d): can not update wrold position for sprite renderer when call bounds in the same frame

* Merge latest main to dev/0.6 (#672)

* fix: normal attributer is need in unlit (#637)

* fix: normal attributer is need in unlit

* fix: physx bug (#651)

* fix: physx bug

* fix: opt collider shape scale

* v0.6.7

* fix: get pixel buffer use mip level should right shift (#656)

Co-authored-by: gz65555 <[email protected]>

* Update AnimatorState.ts (#657)

fix: fix comment

* Rename `ability` to `component`. (#608)

* fix: resize max uniform vector count (#660)

* fix: resize max uniform vector count

Co-authored-by: shensi.zxd <[email protected]>

* fix(2d): can not update world position for sprite renderer when call … (#635)

* fix(2d): can not update wrold position for sprite renderer when call bounds in the same frame

Co-authored-by: zhuxudong <[email protected]>
Co-authored-by: yangfengzzz <[email protected]>
Co-authored-by: Hu Song <[email protected]>
Co-authored-by: gz65555 <[email protected]>
Co-authored-by: luzhuang <[email protected]>
Co-authored-by: Bob <[email protected]>
Co-authored-by: shensi.zxd <[email protected]>
Co-authored-by: singlecoder <[email protected]>

* fix: trigger event update (#673)

* fix: trigger event update

* refactor: remove Promise.finally (#671)

* refactor: remove Promise.finally

Co-authored-by: lizhigao <[email protected]>

* fix: ignore scale (#670)

* fix: camera ignore scale

* fix: use linear color space in gltf (#674)

Co-authored-by: shensi.zxd <[email protected]>

* Fix Background Draw (#675)

Co-authored-by: gz65555 <[email protected]>

* Fix transform bug (#678)

* fix: transform

* Fix: ModelMesh._indicesChangeFlag (#685)


* Fix: ModelMesh._indicesChangeFlag

* feat: non-trigger script and dynamic collider (#680)

* feat: non-trigger script and dynamic collider

* fix: break texcoor to avoid `_vertexSlotChanged` error (#684)

Co-authored-by: shensi.zxd <[email protected]>

* v0.6.8

* fix: rotation not normalized bug (#693)

* Offscreen canvas requires no input interaction. (#689)

* fix:InputManager when use OffScreenCanvas

* fix: scene romove entity bug (#698)

* feat: keyboardevent (#677)

* feat: keyboardevent

* fix: position is deleted from entity (#699)

Co-authored-by: shensi.zxd <[email protected]>

* feat: physics fix-time update (#700)

* feat: fix-time physics update

* feat: add physicsUpdate in Script

* Optimize: Optimize the lookat function of transform. (#701)

* fix:transform lookat

* fix: transoform `rotate` bug when `relativeToLocal` is true (#702)

* fix: wordRotationQuatenion bug (#703)

* Feat:The first version of text system (#686)

* feat(text): init TextRenderer

* fix: fix text renderer clone error (#716)

* fix(text): fix text renderer clone error

* Optimization texture structure (#715)

* feat: opt texture struct

* fix: script destroy bug (#720)

* fix: script destroy bug

* fix: make free control not depend on scene (#724)

Co-authored-by: shensi.zxd <[email protected]>

* Feat: support multi-uv and occlusion texture coordinate (#683)

* feat: support multi uv and occlusion texture coord

* Optimization physics init (#722)

* refactor: opt physics int

* fix: physics update order and destroy method (#727)

* feat: update engine version

* fix: physcis event remove when collider shape destroy (#738)

* fix: physcis event remove when collider shape destroy

* feat: add type watch

* feat: init all project

* build: remove init oasis

* physics test (#742)

* Fix RenderTaget type problem (#741)

* Test: text system (#740)

* feat(text): test for text renderer

* Fix unit test and compile bug (#746)

* fix: component unit test

* test: test for text renderer (#745)

* feat(text): fix test for text renderer

* FloatTexture version Blendshape  (#737)

* feat: add texture-2d-array and rename TextureCubeMap to TextureCube

* feat: opt blendshape animation and improve attribute version

* Opt ModelMesh code (#739)

* refactor: opt `ModelMesh` code

* refactor: opt code

* refactor: opt code (#747)

* refactor: use modelmesh encode buffer

* Feat: support load hdr to cubemap in RGBM format and invert x axis (#733)

* feat: add HDR loader

* Feat: support pbr clearcoat (#669)

* feat: support clearcoat

* feat: support  Specular  AA

* feat: animator play backwards (#730)

* feat: animator play backwward

* fix: constrain min shininess  to `1e-4` (#749)

* fix: constrain min shininess  to `1e-4`

* Add a ts-ignore (#679)

* types: add ts-ignore to XMLHttpRequestBodyInit because typedoc does not know it

* refactor: fix code

* refactor: opt code

* Merge latest `main` to `dev/0.7` (#751)

* refactor: merge latest `main` to `dev/0.7

* feat: update wasm version (#753)

* refactor:opt code

* Merge `dev/0.7` to `main` (#754)

* refactor: delete deprecate code (#630)

* Optimize the use of `Transform` API (#638)

* refactor: opt transform API

* Merge latest main to dev/0.6 (#672)

* fix: normal attributer is need in unlit (#637)

* fix: normal attributer is need in unlit

* fix: physx bug (#651)

* fix: physx bug

* fix: opt collider shape scale

* v0.6.7

* fix: get pixel buffer use mip level should right shift (#656)

Co-authored-by: gz65555 <[email protected]>

* Update AnimatorState.ts (#657)

fix: fix comment

* Rename `ability` to `component`. (#608)

* fix: resize max uniform vector count (#660)

* fix: resize max uniform vector count

Co-authored-by: shensi.zxd <[email protected]>

* fix(2d): can not update world position for sprite renderer when call … (#635)

* fix(2d): can not update wrold position for sprite renderer when call bounds in the same frame

Co-authored-by: zhuxudong <[email protected]>
Co-authored-by: yangfengzzz <[email protected]>
Co-authored-by: Hu Song <[email protected]>
Co-authored-by: gz65555 <[email protected]>
Co-authored-by: luzhuang <[email protected]>
Co-authored-by: Bob <[email protected]>
Co-authored-by: shensi.zxd <[email protected]>
Co-authored-by: singlecoder <[email protected]>

* fix: trigger event update (#673)

* fix: trigger event update

* fix: ignore scale (#670)

* fix: camera ignore scale

* Fix transform bug (#678)

* fix: transform

* Fix: ModelMesh._indicesChangeFlag (#685)


* Fix: ModelMesh._indicesChangeFlag

* feat: non-trigger script and dynamic collider (#680)

* feat: non-trigger script and dynamic collider

* fix: rotation not normalized bug (#693)

* Offscreen canvas requires no input interaction. (#689)

* fix:InputManager when use OffScreenCanvas

* feat: keyboardevent (#677)

* feat: keyboardevent

* feat: physics fix-time update (#700)

* feat: fix-time physics update

* feat: add physicsUpdate in Script

* Optimize: Optimize the lookat function of transform. (#701)

* fix:transform lookat

* fix: transoform `rotate` bug when `relativeToLocal` is true (#702)

* fix: wordRotationQuatenion bug (#703)

* Feat:The first version of text system (#686)

* feat(text): init TextRenderer

* fix: fix text renderer clone error (#716)

* fix(text): fix text renderer clone error

* Optimization texture structure (#715)

* feat: opt texture struct

* fix: script destroy bug (#720)

* fix: script destroy bug

* Feat: support multi-uv and occlusion texture coordinate (#683)

* feat: support multi uv and occlusion texture coord

* Optimization physics init (#722)

* refactor: opt physics int

* fix: physics update order and destroy method (#727)

* fix: physcis event remove when collider shape destroy (#738)

* fix: physcis event remove when collider shape destroy

* physics test (#742)

* Fix RenderTaget type problem (#741)

* Test: text system (#740)

* feat(text): test for text renderer

* Fix unit test and compile bug (#746)

* fix: component unit test

* test: test for text renderer (#745)

* feat(text): fix test for text renderer

* FloatTexture version Blendshape  (#737)

* feat: add texture-2d-array and rename TextureCubeMap to TextureCube

* feat: opt blendshape animation and improve attribute version

* Opt ModelMesh code (#739)

* refactor: opt `ModelMesh` code

* refactor: opt code

* refactor: opt code (#747)

* Feat: support load hdr to cubemap in RGBM format and invert x axis (#733)

* feat: add HDR loader

* Feat: support pbr clearcoat (#669)

* feat: support clearcoat

* feat: support  Specular  AA

* feat: animator play backwards (#730)

* feat: animator play backwward

* refactor: fix code

* refactor: opt code

* Merge latest `main` to `dev/0.7` (#751)

* refactor: merge latest `main` to `dev/0.7

* feat: update wasm version (#753)

* refactor:opt code

Co-authored-by: zhuxudong <[email protected]>
Co-authored-by: yangfengzzz <[email protected]>
Co-authored-by: Hu Song <[email protected]>
Co-authored-by: gz65555 <[email protected]>
Co-authored-by: luzhuang <[email protected]>
Co-authored-by: Bob <[email protected]>
Co-authored-by: shensi.zxd <[email protected]>
Co-authored-by: singlecoder <[email protected]>
Co-authored-by: AZhan <[email protected]>

* v0.7.0-beta.1

* Create release.yml

Add automatically generated release notes config file

* Update release.yml

* Update release.yml

* docs: update commit spec and change log config (#758)

* Update release.yml

* fix(animation): animator play error when blendShape count is 1 (#761)

* fix: animator play error when blendShape count is 1

* fix: lite box collider scale bug (#759)

* fix: lite box collider shape should scale the size of box instead use transform

* refactor: adapter to website (#764)

Co-authored-by: shensi.zxd <[email protected]>

* types(background): add export for BackgroundTextureFillMode (#768)

* fix(primitive-mesh): fix normal error for capsule cap (#762)

* fix(shader): not normalize normal bug(#769)

Co-authored-by: shensi.zxd <[email protected]>

* fix(input): Remove the onblur function register when the engine is destroyed (#770)

* Fix(Engine): destroy  bug cause by `requestAnimationFrame`(#771)

* v0.7.0-beta.2

* fix:  fix the order of layerState when AnimatorStatePlayState.Finished (#774)

* fix: the order of layerState when AnimatorStatePlayState.Finished #774

* fix: specular anti aliasing value (#773)

* fix: specular anti aliasing

* v0.7.0-beta.3

* fix: adapter all variable in miniprogram-adapter (#777)

* fix: struct in shader must init value in alipay miniprogram (#775)

* fix: struct in shader must init value in miniprogram

* v0.7.0-beta.4

* refactor: remove console

* refactor: add math serialize

* refactor: add model mesh serialize

* refactor: add scene loader

* refactor: delete schema parser

* refactor: add scene loader

* refactor: add index

* refactor: fix types error

* Update README.md

* Update README.md

* Update README.md

* Add component denpendent decorator (#796) (#807)

* feat: add `dependentComponents` decorator

* fix(Renderer): destroy crash when material is null (#808)

* Improve BlendShape when use attribute mode (#804)

* feat: improve BlendShape when use attribute mode

* v0.7.0-beta.5

* refactor: remove useless import

* fix: fixed the bug of animator revert when blendWeight length exceeds 4 (#817)

* fix: fixed the bug of animator revert when blendWeight length exceeds 4

* v0.7.0-beta.6

* fix(text): fix horizontal and vertical alignment error (#772)

* fix(text): fix horizontal alignment error

* Fix crossFade bug when two AnimatorState use one AnimationClip (#766)

* fix: crossFade bug when two AnimatorState use one AnimationClip #766
Co-authored-by: wz84888 <[email protected]>

* types: export `BoolUpdateFlag` type (#822)

* types: export `BoolUpdateFlag` type

* refactor: clear import (#825)

* Improve ShaderData Macro feature (#823)

* feat: add macros property for ShaderData
* fix: fix bug when `enableMacro` and `disableMacro`

* feat: export animation type

* refactor: bump version

Co-authored-by: GuoLei <[email protected]>
Co-authored-by: yangfengzzz <[email protected]>
Co-authored-by: singlecoder <[email protected]>
Co-authored-by: zhuxudong <[email protected]>
Co-authored-by: shensi.zxd <[email protected]>
Co-authored-by: luzhuang <[email protected]>
Co-authored-by: JujieX <[email protected]>
Co-authored-by: AZhan <[email protected]>
Co-authored-by: Bob <[email protected]>
Co-authored-by: gz65555 <[email protected]>
Co-authored-by: Cleam Lee <[email protected]>
Co-authored-by: lizhigao <[email protected]>
Co-authored-by: susiwen8 <[email protected]>
  • Loading branch information
14 people authored Jun 10, 2022
1 parent 303abb8 commit 7e06639
Show file tree
Hide file tree
Showing 46 changed files with 1,011 additions and 620 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@
![npm-download](https://img.shields.io/npm/dm/oasis-engine)
[![codecov](https://codecov.io/gh/oasis-engine/engine/branch/main/graph/badge.svg?token=KR2UBKE3OX)](https://codecov.io/gh/oasis-engine/engine)

This is a **web-first** and **mobile-first** high-performance real-time development platform. Use **component system design** and pursue ease of use and light weight. Developers can independently use and write Typescript scripts to develop projects using pure code.
This is a **web-first** and **mobile-first** high-performance real-time interactive engine. Use **component system design** and pursue ease of use and light weight. Developers can independently use and write Typescript scripts to develop projects using pure code.

## Features

- 🖥 &nbsp;**Platform** - Suppport HTML5 and Alipay miniprogram
- 🔮 &nbsp;**Graphics** - Advanced 2D + 3D graphics engine
- 🏃 &nbsp;**Animation** - Powerful animation system
- 🧱 &nbsp;**Physics** - Powerful and easy-to-use physical features
- 📑 &nbsp;**Scripts** - Use TypeScript to write logic efficiently

## Usage
Expand Down
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"npmClient": "npm",
"version": "0.7.0-beta.4",
"version": "0.7.0-beta.6",
"bootstrap": {
"hoist": true
},
Expand Down
4 changes: 2 additions & 2 deletions packages/controls/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/controls",
"version": "0.7.0-beta.4",
"version": "0.7.0-beta.6",
"license": "MIT",
"scripts": {
"b:types": "tsc",
Expand All @@ -16,6 +16,6 @@
"types/**/*"
],
"dependencies": {
"oasis-engine": "0.7.0-beta.4"
"oasis-engine": "0.7.0-beta.6"
}
}
6 changes: 3 additions & 3 deletions packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oasis-engine/core",
"version": "0.7.0-beta.4",
"version": "0.7.0-beta.6",
"license": "MIT",
"main": "dist/main.js",
"module": "dist/module.js",
Expand All @@ -15,9 +15,9 @@
"types/**/*"
],
"dependencies": {
"@oasis-engine/math": "0.7.0-beta.4"
"@oasis-engine/math": "0.7.0-beta.6"
},
"devDependencies": {
"@oasis-engine/design": "0.7.0-beta.4"
"@oasis-engine/design": "0.7.0-beta.6"
}
}
3 changes: 1 addition & 2 deletions packages/core/src/2d/sprite/Sprite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,7 @@ export class Sprite extends RefObject {

set pivot(value: Vector2) {
const pivot = this._pivot;
const x = MathUtil.clamp(value.x, 0, 1);
const y = MathUtil.clamp(value.y, 0, 1);
const { x, y } = value;
if (pivot === value || pivot.x !== x || pivot.y !== y) {
pivot.setValue(x, y);
this._setDirtyFlagTrue(DirtyFlag.positions);
Expand Down
54 changes: 39 additions & 15 deletions packages/core/src/2d/text/TextRenderer.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
import { BoundingBox, Color, Vector3 } from "@oasis-engine/math";
import { Sprite, SpriteMaskInteraction, SpriteMaskLayer, SpriteRenderer } from "..";
import { CompareFunction, Renderer, UpdateFlag } from "../..";
import { BoolUpdateFlag } from "../../BoolUpdateFlag";
import { Camera } from "../../Camera";
import { assignmentClone, deepClone, ignoreClone } from "../../clone/CloneManager";
import { Entity } from "../../Entity";
import { Renderer } from "../../Renderer";
import { CompareFunction } from "../../shader/enums/CompareFunction";
import { Texture2D } from "../../texture";
import { FontStyle } from "../enums/FontStyle";
import { SpriteMaskInteraction } from "../enums/SpriteMaskInteraction";
import { SpriteMaskLayer } from "../enums/SpriteMaskLayer";
import { TextHorizontalAlignment, TextVerticalAlignment } from "../enums/TextAlignment";
import { OverflowMode } from "../enums/TextOverflow";
import { Sprite } from "../sprite/Sprite";
import { SpriteRenderer } from "../sprite/SpriteRenderer";
import { Font } from "./Font";
import { TextUtils } from "./TextUtils";

Expand Down Expand Up @@ -329,19 +333,12 @@ export class TextRenderer extends Renderer {
* @override
*/
protected _updateBounds(worldBounds: BoundingBox): void {
const sprite = this._sprite;
if (sprite && sprite.texture) {
if (this._customLocalBounds && this._customRootEntity) {
const worldMatrix = this._customRootEntity.transform.worldMatrix;
BoundingBox.transform(this._customLocalBounds, worldMatrix, worldBounds);
} else {
const localBounds = sprite.bounds;
const worldMatrix = this._entity.transform.worldMatrix;
BoundingBox.transform(localBounds, worldMatrix, worldBounds);
}
if (this._customLocalBounds && this._customRootEntity) {
const worldMatrix = this._customRootEntity.transform.worldMatrix;
BoundingBox.transform(this._customLocalBounds, worldMatrix, worldBounds);
} else {
worldBounds.min.setValue(0, 0, 0);
worldBounds.max.setValue(0, 0, 0);
const worldMatrix = this._entity.transform.worldMatrix;
BoundingBox.transform(this._sprite.bounds, worldMatrix, worldBounds);
}
}

Expand Down Expand Up @@ -378,7 +375,34 @@ export class TextRenderer extends Renderer {
const { width, height } = trimData;
const canvas = TextUtils.updateCanvas(width, height, trimData.data);
this._clearTexture();
const { _sprite: sprite } = this;
const { _sprite: sprite, horizontalAlignment, verticalAlignment } = this;

// Handle the case that width or height of text is larger than real width or height.
const { pixelsPerUnit, pivot } = sprite;
switch (horizontalAlignment) {
case TextHorizontalAlignment.Left:
pivot.x = ((this.width * pixelsPerUnit) / width) * 0.5;
break;
case TextHorizontalAlignment.Right:
pivot.x = 1 - ((this.width * pixelsPerUnit) / width) * 0.5;
break;
case TextHorizontalAlignment.Center:
pivot.x = 0.5;
break;
}
switch (verticalAlignment) {
case TextVerticalAlignment.Top:
pivot.y = 1 - ((this.height * pixelsPerUnit) / height) * 0.5;
break;
case TextVerticalAlignment.Bottom:
pivot.y = ((this.height * pixelsPerUnit) / height) * 0.5;
break;
case TextVerticalAlignment.Center:
pivot.y = 0.5;
break;
}
sprite.pivot = pivot;

// If add fail, set texture for sprite.
if (!this.engine._dynamicTextAtlasManager.addSprite(sprite, canvas)) {
const texture = new Texture2D(this.engine, width, height);
Expand Down
9 changes: 4 additions & 5 deletions packages/core/src/Camera.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Logger } from "./base";
import { BoolUpdateFlag } from "./BoolUpdateFlag";
import { deepClone, ignoreClone } from "./clone/CloneManager";
import { Component } from "./Component";
import { dependencies } from "./ComponentsDependencies";
import { dependentComponents } from "./ComponentsDependencies";
import { Entity } from "./Entity";
import { CameraClearFlags } from "./enums/CameraClearFlags";
import { Layer } from "./Layer";
Expand All @@ -16,7 +16,6 @@ import { ShaderMacroCollection } from "./shader/ShaderMacroCollection";
import { TextureCubeFace } from "./texture/enums/TextureCubeFace";
import { RenderTarget } from "./texture/RenderTarget";
import { Transform } from "./Transform";
import { UpdateFlag } from "./UpdateFlag";

class MathTemp {
static tempVec4 = new Vector4();
Expand All @@ -26,8 +25,9 @@ class MathTemp {

/**
* Camera component, as the entrance to the three-dimensional world.
* @decorator `@dependentComponents(Transform)`
*/
@dependencies(Transform)
@dependentComponents(Transform)
export class Camera extends Component {
private static _viewMatrixProperty = Shader.getPropertyByName("u_viewMat");
private static _projectionMatrixProperty = Shader.getPropertyByName("u_projMat");
Expand Down Expand Up @@ -314,8 +314,7 @@ export class Camera extends Component {
}

/**
* Create the Camera component.
* @param entity - Entity
* @internal
*/
constructor(entity: Entity) {
super(entity);
Expand Down
33 changes: 18 additions & 15 deletions packages/core/src/ComponentsDependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,24 @@ export class ComponentsDependencies {
private static _invDependenciesMap = new Map<ComponentConstructor, ComponentConstructor[]>();

/**
* Register component dependencies.
* @param currentComponent - The component you want to be register.
* @param dependentComponent - The component's dependencies.
* @internal
*/
static register(currentComponent: ComponentConstructor, dependentComponent: ComponentConstructor) {
static _register(currentComponent: ComponentConstructor, dependentComponent: ComponentConstructor): void {
this._addDependency(currentComponent, dependentComponent, this._dependenciesMap);
this._addDependency(dependentComponent, currentComponent, this._invDependenciesMap);
}

/**
* @internal
*/
static _addCheck(entity: Entity, type: ComponentConstructor) {
static _addCheck(entity: Entity, type: ComponentConstructor): void {
// Check if there are dependent components.
const dependencies = ComponentsDependencies._dependenciesMap.get(type);
if (dependencies) {
for (let i = 0, len = dependencies.length; i < len; i++) {
if (!entity.getComponent(dependencies[i])) {
throw `you should add ${dependencies[i]} before adding ${type}`;
const dependentComponents = ComponentsDependencies._dependenciesMap.get(type);
if (dependentComponents) {
for (let i = 0, n = dependentComponents.length; i < n; i++) {
const dependentComponent = dependentComponents[i];
if (!entity.getComponent(dependentComponent)) {
entity.addComponent(dependentComponent);
}
}
}
Expand All @@ -41,7 +40,7 @@ export class ComponentsDependencies {
/**
* @internal
*/
static _removeCheck(entity: Entity, type: ComponentConstructor) {
static _removeCheck(entity: Entity, type: ComponentConstructor): void {
const invDependencies = ComponentsDependencies._invDependenciesMap.get(type);
if (invDependencies) {
for (let i = 0, len = invDependencies.length; i < len; i++) {
Expand All @@ -55,8 +54,8 @@ export class ComponentsDependencies {
private static _addDependency(
currentComponent: ComponentConstructor,
dependentComponent: ComponentConstructor,
map: Map<any, any>
) {
map: Map<ComponentConstructor, ComponentConstructor[]>
): void {
let components = map.get(currentComponent);
if (!components) {
components = [];
Expand All @@ -70,8 +69,12 @@ export class ComponentsDependencies {
private constructor() {}
}

export function dependencies(...componentClass: ComponentConstructor[]) {
/**
* Dependent components, automatically added if they do not exist.
* @param components - Dependent components
*/
export function dependentComponents(...components: ComponentConstructor[]) {
return function <T extends ComponentConstructor>(target: T): void {
componentClass.forEach((component) => ComponentsDependencies.register(target, component));
components.forEach((component) => ComponentsDependencies._register(target, component));
};
}
58 changes: 32 additions & 26 deletions packages/core/src/Renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,27 @@ import { BoolUpdateFlag } from "./BoolUpdateFlag";
import { Camera } from "./Camera";
import { deepClone, ignoreClone, shallowClone } from "./clone/CloneManager";
import { Component } from "./Component";
import { dependentComponents } from "./ComponentsDependencies";
import { Entity } from "./Entity";
import { Material } from "./material/Material";
import { RenderContext } from "./RenderPipeline/RenderContext";
import { Shader } from "./shader";
import { ShaderDataGroup } from "./shader/enums/ShaderDataGroup";
import { ShaderData } from "./shader/ShaderData";
import { ShaderMacroCollection } from "./shader/ShaderMacroCollection";
import { UpdateFlag } from "./UpdateFlag";
import { Transform } from "./Transform";

/**
* Renderable component.
* Basis for all renderers.
* @decorator `@dependentComponents(Transform)`
*/
export abstract class Renderer extends Component {
@dependentComponents(Transform)
export class Renderer extends Component {
private static _localMatrixProperty = Shader.getPropertyByName("u_localMat");
private static _worldMatrixProperty = Shader.getPropertyByName("u_modelMat");
private static _mvMatrixProperty = Shader.getPropertyByName("u_MVMat");
private static _mvpMatrixProperty = Shader.getPropertyByName("u_MVPMat");
private static _mvInvMatrixProperty = Shader.getPropertyByName("u_MVInvMat");
private static _normalMatrixProperty = Shader.getPropertyByName("u_normalMat");
private static _mvInvMatrixProperty = Shader.getPropertyByName("u_MVInvMat");private static _normalMatrixProperty = Shader.getPropertyByName("u_normalMat");

/** ShaderData related to renderer. */
@deepClone
Expand Down Expand Up @@ -165,26 +167,10 @@ export abstract class Renderer extends Component {
setMaterial(index: number, material: Material): void;

setMaterial(indexOrMaterial: number | Material, material: Material = null): void {
let index;
if (typeof indexOrMaterial === "number") {
index = indexOrMaterial;
this._setMaterial(indexOrMaterial, material);
} else {
index = 0;
material = indexOrMaterial;
}

const materials = this._materials;
if (index >= materials.length) {
materials.length = index + 1;
}

const materialsInstance = this._materialsInstanced;
const internalMaterial = materials[index];
if (internalMaterial !== material) {
materials[index] = material;
index < materialsInstance.length && (materialsInstance[index] = false);
internalMaterial && internalMaterial._addRefCount(-1);
material && material._addRefCount(1);
this._setMaterial(0, indexOrMaterial);
}
}

Expand Down Expand Up @@ -286,7 +272,9 @@ export abstract class Renderer extends Component {
/**
* @internal
*/
abstract _render(camera: Camera): void;
_render(camera: Camera): void {
throw "not implement";
}

/**
* @internal
Expand All @@ -300,8 +288,9 @@ export abstract class Renderer extends Component {

this.shaderData._addRefCount(-1);

for (let i = 0, n = this._materials.length; i < n; i++) {
this._materials[i]._addRefCount(-1);
const materials = this._materials;
for (let i = 0, n = materials.length; i < n; i++) {
materials[i]?._addRefCount(-1);
}
}

Expand All @@ -316,4 +305,21 @@ export abstract class Renderer extends Component {
this._materials[index] = insMaterial;
return insMaterial;
}

private _setMaterial(index: number, material: Material): void {
const materials = this._materials;
if (index >= materials.length) {
materials.length = index + 1;
}

const internalMaterial = materials[index];
if (internalMaterial !== material) {
const materialsInstance = this._materialsInstanced;
index < materialsInstance.length && (materialsInstance[index] = false);

internalMaterial && internalMaterial._addRefCount(-1);
material && material._addRefCount(1);
materials[index] = material;
}
}
}
3 changes: 3 additions & 0 deletions packages/core/src/Transform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,9 @@ export class Transform extends Component {
this._setDirtyFlagFalse(TransformFlag.WorldMatrix);
}

/**
* @internal
*/
constructor(entity: Entity) {
super(entity);

Expand Down
5 changes: 2 additions & 3 deletions packages/core/src/animation/AnimationClip.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export class AnimationClip extends Motion {
/**
* @param name - The AnimationClip's name
*/
constructor (public readonly name: string) {
constructor(public readonly name: string) {
super();
}

Expand All @@ -60,9 +60,8 @@ export class AnimationClip extends Motion {
*/
addEvent(event: AnimationEvent): void;


addEvent(param: AnimationEvent | string, time?: number, parameter?: Object): void {
if (typeof param === 'string') {
if (typeof param === "string") {
const event = new AnimationEvent();
event.functionName = param;
event.time = time;
Expand Down
Loading

0 comments on commit 7e06639

Please sign in to comment.