Skip to content

Commit e83d00d

Browse files
authored
[Reviewed] [3D particle] Allow to be used inside custom objects (#1653)
1 parent 679784e commit e83d00d

File tree

1 file changed

+84
-76
lines changed

1 file changed

+84
-76
lines changed

extensions/reviewed/ParticleEmitter3D.json

Lines changed: 84 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
"author": "",
33
"category": "Visual effect",
44
"extensionNamespace": "",
5-
"gdevelopVersion": ">=5.5.222",
65
"fullName": "3D particle emitter",
6+
"gdevelopVersion": ">=5.5.222",
77
"helpPath": "",
88
"iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWZpcmUiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTcuNjYgMTEuMkMxNy40MyAxMC45IDE3LjE1IDEwLjY0IDE2Ljg5IDEwLjM4QzE2LjIyIDkuNzggMTUuNDYgOS4zNSAxNC44MiA4LjcyQzEzLjMzIDcuMjYgMTMgNC44NSAxMy45NSAzQzEzIDMuMjMgMTIuMTcgMy43NSAxMS40NiA0LjMyQzguODcgNi40IDcuODUgMTAuMDcgOS4wNyAxMy4yMkM5LjExIDEzLjMyIDkuMTUgMTMuNDIgOS4xNSAxMy41NUM5LjE1IDEzLjc3IDkgMTMuOTcgOC44IDE0LjA1QzguNTcgMTQuMTUgOC4zMyAxNC4wOSA4LjE0IDEzLjkzQzguMDggMTMuODggOC4wNCAxMy44MyA4IDEzLjc2QzYuODcgMTIuMzMgNi42OSAxMC4yOCA3LjQ1IDguNjRDNS43OCAxMCA0Ljg3IDEyLjMgNSAxNC40N0M1LjA2IDE0Ljk3IDUuMTIgMTUuNDcgNS4yOSAxNS45N0M1LjQzIDE2LjU3IDUuNyAxNy4xNyA2IDE3LjdDNy4wOCAxOS40MyA4Ljk1IDIwLjY3IDEwLjk2IDIwLjkyQzEzLjEgMjEuMTkgMTUuMzkgMjAuOCAxNy4wMyAxOS4zMkMxOC44NiAxNy42NiAxOS41IDE1IDE4LjU2IDEyLjcyTDE4LjQzIDEyLjQ2QzE4LjIyIDEyIDE3LjY2IDExLjIgMTcuNjYgMTEuMk0xNC41IDE3LjVDMTQuMjIgMTcuNzQgMTMuNzYgMTggMTMuNCAxOC4xQzEyLjI4IDE4LjUgMTEuMTYgMTcuOTQgMTAuNSAxNy4yOEMxMS42OSAxNyAxMi40IDE2LjEyIDEyLjYxIDE1LjIzQzEyLjc4IDE0LjQzIDEyLjQ2IDEzLjc3IDEyLjMzIDEzQzEyLjIxIDEyLjI2IDEyLjIzIDExLjYzIDEyLjUgMTAuOTRDMTIuNjkgMTEuMzIgMTIuODkgMTEuNyAxMy4xMyAxMkMxMy45IDEzIDE1LjExIDEzLjQ0IDE1LjM3IDE0LjhDMTUuNDEgMTQuOTQgMTUuNDMgMTUuMDggMTUuNDMgMTUuMjNDMTUuNDYgMTYuMDUgMTUuMSAxNi45NSAxNC41IDE3LjVIMTQuNVoiIC8+PC9zdmc+",
99
"name": "ParticleEmitter3D",
1010
"previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/f2e5a34bf465f781866677762d385d6c8e9e8d203383f2df9a3b7e0fad6a2cb5_fire.svg",
1111
"shortDescription": "Display a large number of particles to create visual effects.",
12-
"version": "2.1.0",
12+
"version": "2.1.1",
1313
"description": [
1414
"Particle emitters can be used to display:",
1515
"- Fire",
@@ -71,14 +71,16 @@
7171
" const threeObject3D = this.get3DRendererObject();",
7272
"",
7373
" threeObject3D.rotation.set(",
74-
" gdjs.toRad(this._object.getRotationX()),",
74+
" // TODO The rotation on X goes the wrong way.",
75+
" // Increment the major and remove this sign.",
76+
" - gdjs.toRad(this._object.getRotationX()),",
7577
" gdjs.toRad(this._object.getRotationY()),",
76-
" -gdjs.toRad(this._object.angle)",
78+
" gdjs.toRad(this._object.angle)",
7779
" );",
7880
"",
7981
" threeObject3D.position.set(",
8082
" this._object.getX(),",
81-
" -this._object.getY(),",
83+
" this._object.getY(),",
8284
" this._object.getZ()",
8385
" );",
8486
"",
@@ -6783,6 +6785,71 @@
67836785
"is3D": true,
67846786
"isUsingLegacyInstancesRenderer": true,
67856787
"name": "ParticleEmitter3D",
6788+
"objects": [
6789+
{
6790+
"adaptCollisionMaskAutomatically": true,
6791+
"assetStoreId": "",
6792+
"name": "Particle",
6793+
"type": "Sprite",
6794+
"updateIfNotVisible": false,
6795+
"variables": [],
6796+
"effects": [],
6797+
"behaviors": [],
6798+
"animations": [
6799+
{
6800+
"name": "Image",
6801+
"useMultipleDirections": false,
6802+
"directions": [
6803+
{
6804+
"looping": false,
6805+
"timeBetweenFrames": 0.08,
6806+
"sprites": []
6807+
}
6808+
]
6809+
}
6810+
]
6811+
}
6812+
],
6813+
"objectsFolderStructure": {
6814+
"folderName": "__ROOT",
6815+
"children": [
6816+
{
6817+
"objectName": "Particle"
6818+
}
6819+
]
6820+
},
6821+
"objectsGroups": [],
6822+
"layers": [
6823+
{
6824+
"ambientLightColorB": 200,
6825+
"ambientLightColorG": 200,
6826+
"ambientLightColorR": 200,
6827+
"camera3DFarPlaneDistance": 10000,
6828+
"camera3DFieldOfView": 45,
6829+
"camera3DNearPlaneDistance": 3,
6830+
"cameraType": "",
6831+
"followBaseLayerCamera": false,
6832+
"isLightingLayer": false,
6833+
"isLocked": false,
6834+
"name": "",
6835+
"renderingType": "",
6836+
"visibility": true,
6837+
"cameras": [
6838+
{
6839+
"defaultSize": true,
6840+
"defaultViewport": true,
6841+
"height": 0,
6842+
"viewportBottom": 1,
6843+
"viewportLeft": 0,
6844+
"viewportRight": 1,
6845+
"viewportTop": 0,
6846+
"width": 0
6847+
}
6848+
],
6849+
"effects": []
6850+
}
6851+
],
6852+
"instances": [],
67866853
"eventsFunctions": [
67876854
{
67886855
"fullName": "",
@@ -6911,7 +6978,7 @@
69116978
"",
69126979
"// This is a hack that may break in future releases.",
69136980
"// Replace the group that would hold children objects by the emmiter.",
6914-
"const layer = gameScene.getLayer(object.getLayer());",
6981+
"const layer = object.getInstanceContainer().getLayer(object.getLayer());",
69156982
"const group = object.getRenderer()._threeGroup;",
69166983
"layer.getRenderer().remove3DRendererObject(group);",
69176984
"particleSystem.emitter.position.copy(group.position);",
@@ -7001,7 +7068,7 @@
70017068
" for (const layerName of layerNames) {",
70027069
" const layer = gameScene.getLayer(layerName);",
70037070
" if (layer.__particleEmmiter3DExtension) {",
7004-
" layer.__particleEmmiter3DExtension.batchSystem.update(object.getElapsedTime() / 1000);",
7071+
" layer.__particleEmmiter3DExtension.batchSystem.update(layer.getElapsedTime() / 1000);",
70057072
" }",
70067073
" }",
70077074
"}"
@@ -7449,7 +7516,7 @@
74497516
" for (const layerName of layerNames) {",
74507517
" const layer = gameScene.getLayer(layerName);",
74517518
" if (layer.__particleEmmiter3DExtension) {",
7452-
" layer.__particleEmmiter3DExtension.batchSystem.update(object.getElapsedTime() / 1000);",
7519+
" layer.__particleEmmiter3DExtension.batchSystem.update(layer.getElapsedTime() / 1000);",
74537520
" }",
74547521
" }",
74557522
"}"
@@ -7489,10 +7556,16 @@
74897556
" // Here runtimeScene is the gdjs.CustomRuntimeObjectInstanceContainer inside the custom object.",
74907557
" const gameScene = object.getRuntimeScene();",
74917558
"",
7492-
" const layer = gameScene.getLayer(object.getLayer());",
7559+
" let rootObject = object;",
7560+
" while (rootObject.getInstanceContainer().getOwner) {",
7561+
" rootObject = rootObject.getInstanceContainer().getOwner();",
7562+
" }",
7563+
"",
7564+
" const layer = gameScene.getLayer(rootObject.getLayer());",
74937565
" layer.__particleEmmiter3DExtension = layer.__particleEmmiter3DExtension || {};",
74947566
" if (!layer.__particleEmmiter3DExtension.batchSystem) {",
74957567
" const batchSystem = new gdjs.__particleEmmiter3DExtension.BatchedRenderer();",
7568+
" batchSystem.scale.y *= -1;",
74967569
" const threeScene = layer.getRenderer().getThreeScene();",
74977570
" if (threeScene) {",
74987571
" threeScene.add(batchSystem);",
@@ -7536,7 +7609,7 @@
75367609
],
75377610
"parameterObjects": "Object",
75387611
"useStrict": true,
7539-
"eventsSheetExpanded": false
7612+
"eventsSheetExpanded": true
75407613
}
75417614
],
75427615
"parameters": [
@@ -9758,72 +9831,7 @@
97589831
"hidden": true,
97599832
"name": "RotationY"
97609833
}
9761-
],
9762-
"objects": [
9763-
{
9764-
"adaptCollisionMaskAutomatically": true,
9765-
"assetStoreId": "",
9766-
"name": "Particle",
9767-
"type": "Sprite",
9768-
"updateIfNotVisible": false,
9769-
"variables": [],
9770-
"effects": [],
9771-
"behaviors": [],
9772-
"animations": [
9773-
{
9774-
"name": "Image",
9775-
"useMultipleDirections": false,
9776-
"directions": [
9777-
{
9778-
"looping": false,
9779-
"timeBetweenFrames": 0.08,
9780-
"sprites": []
9781-
}
9782-
]
9783-
}
9784-
]
9785-
}
9786-
],
9787-
"objectsFolderStructure": {
9788-
"folderName": "__ROOT",
9789-
"children": [
9790-
{
9791-
"objectName": "Particle"
9792-
}
9793-
]
9794-
},
9795-
"objectsGroups": [],
9796-
"layers": [
9797-
{
9798-
"ambientLightColorB": 200,
9799-
"ambientLightColorG": 200,
9800-
"ambientLightColorR": 200,
9801-
"camera3DFarPlaneDistance": 10000,
9802-
"camera3DFieldOfView": 45,
9803-
"camera3DNearPlaneDistance": 3,
9804-
"cameraType": "",
9805-
"followBaseLayerCamera": false,
9806-
"isLightingLayer": false,
9807-
"isLocked": false,
9808-
"name": "",
9809-
"renderingType": "",
9810-
"visibility": true,
9811-
"cameras": [
9812-
{
9813-
"defaultSize": true,
9814-
"defaultViewport": true,
9815-
"height": 0,
9816-
"viewportBottom": 1,
9817-
"viewportLeft": 0,
9818-
"viewportRight": 1,
9819-
"viewportTop": 0,
9820-
"width": 0
9821-
}
9822-
],
9823-
"effects": []
9824-
}
9825-
],
9826-
"instances": []
9834+
]
98279835
}
98289836
]
98299837
}

0 commit comments

Comments
 (0)