Skip to content

Commit

Permalink
add: Sprite Support #306
Browse files Browse the repository at this point in the history
  • Loading branch information
brianzinn committed Jan 6, 2024
1 parent e7313a3 commit 0af1bbd
Show file tree
Hide file tree
Showing 10 changed files with 622 additions and 7 deletions.
13 changes: 8 additions & 5 deletions packages/react-babylonjs/docs/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Shadows, Textures, etc.)
vrDeviceOrientationArcRotateCamera, vrDeviceOrientationFreeCamera,
vrDeviceOrientationGamepadCamera, webXrCamera

3. **Geometries (meshes)** - bbox, capsule, cylinder, dashedLines, decal, disc,
3. **Geometries (meshes)** - box, capsule, cylinder, dashedLines, decal, disc,
extrudePolygon, extrudeShape, extrudeShapeCustom, geodesic, goldberg, ground,
groundFromHeightMap, icoSphere, lathe, lines, lineSystem, plane,
babylon-polygon, polyhedron, ribbon, sphere, babylon-text, tiledBox,
Expand All @@ -50,7 +50,7 @@ Shadows, Textures, etc.)
mrdlSliderThumbMaterial, multiMaterial, nodeMaterial, occlusionMaterial,
pbrBaseMaterial, pbrBaseSimpleMaterial, pbrMaterial,
pbrMetallicRoughnessMaterial, pbrSpecularGlossinessMaterial, pushMaterial,
shaderMaterial, standardMateria
shaderMaterial, standardMaterial

> note: Materials can have configuration (read-only) properties as classes. With
> `assignFrom` prop you can declare detailMapConfiguration,
Expand All @@ -76,8 +76,9 @@ Shadows, Textures, etc.)
7. **EffectLayers** - effectLayer, glowLayer, highlightLayer

8. **Behaviors** - autoRotationBehavior, bouncingBehavior, framingBehavior,
attachToBoxBehavior, fadeInOutBehavior, multiPointerScaleBehavior,
pointerDragBehavior, sixDofDragBehavior
attachToBoxBehavior, fadeInOutBehavior, followBehavior,
handConstraintBehavior, multiPointerScaleBehavior, pointerDragBehavior,
sixDofDragBehavior, surfaceMagnetismBehavior

9. **PostProcessRenderPipelines**: defaultRenderingPipeline,
lensRenderingPipeline, postProcessRenderPipeline, ssao2RenderingPipeline,
Expand Down Expand Up @@ -106,7 +107,9 @@ Shadows, Textures, etc.)
gizmo, lightGizmo, planeDragGizmo, planeRotationGizmo, positionGizmo,
rotationGizmo, scaleGizmo, slateGizmo

12. **Others** - adtForMesh, adtForMeshTexture, adtFullScreenUi,
12. **Sprites** spriteManager, spritePackedManager, thinSprite, sprite

13. **Others** - adtForMesh, adtForMeshTexture, adtFullScreenUi,
environmentHelper, physicsImpostor, pointsCloudSystem, shadowGenerator /
cascadedShadowGenerator, layer, utilityLayerRenderer, viewport,
vrExperienceHelper
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { Sprite } from '@babylonjs/core/Sprites/sprite.js'
import { SpriteManager } from '@babylonjs/core/Sprites/spriteManager.js'
import { CreatedInstance } from '../CreatedInstance'
import { assignProperty } from '../helper/property'
import DeferredCreationLifecycleListener from './DeferredCreationLifecycleListener'
import { Nullable } from '@babylonjs/core/types'
import { Scene } from '@babylonjs/core/scene'

export default class SpriteLifecycleListener extends DeferredCreationLifecycleListener<
Sprite,
any
> {
createInstance = (
instance: CreatedInstance<Sprite>,
scene: Scene,
props: any
): Nullable<Sprite> => {
let result: Nullable<Sprite> = null
let tmp: CreatedInstance<any> | null = instance.parent

while (tmp !== null) {
// FiberSpriteManager and FiberSpritePackedManager
if (
tmp.metadata.className.startsWith('FiberSprite') &&
tmp.metadata.className.endsWith('Manager')
) {
const manager = tmp.hostInstance as SpriteManager
instance.hostInstance = result = new Sprite(props.name, manager)
break
}
tmp = tmp.parent
}

if (result === null) {
console.warn(`No SpriteManager found as child node of '${props.name ?? 'no name'}'`)
}

return result
}
}
1 change: 1 addition & 0 deletions packages/react-babylonjs/src/customHosts/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export { default as NodeLifecycleListener } from './NodeLifecycleListener'
export { default as PhysicsImpostorLifecycleListener } from './PhysicsImpostorLifecycleListener'
export { default as PhysicsAggregateLifecycleListener } from './PhysicsAggregateLifecycleListener'
export { default as ShadowGeneratorLifecycleListener } from './ShadowGeneratorLifecycleListener'
export { default as SpriteLifecycleListener } from './SpriteLifecycleListener'
export { default as TargetPropsHandler } from './TargetPropsHandler'
export { default as TexturesLifecycleListener } from './TexturesLifecycleListener'
export { default as ViewportLifecycleListener } from './ViewportLifecycleListener'
Expand Down
Loading

0 comments on commit 0af1bbd

Please sign in to comment.