@@ -23,76 +23,44 @@ All portions of the code written by the Ethereal Engine team are Copyright © 20
2323Ethereal Engine. All Rights Reserved.
2424*/
2525
26- import { Color , Mesh , PlaneGeometry , ShaderMaterial , Texture , Uniform , Vector2 , Vector3 } from 'three'
26+ import { DoubleSide , Mesh , MeshBasicMaterial , SphereGeometry , Texture } from 'three'
2727
28- import { defineActionQueue , defineState , getMutableState , getState , useHookstate } from '@etherealengine/hyperflux'
28+ import { defineActionQueue , defineState , getState } from '@etherealengine/hyperflux'
2929
30- import { useEffect } from 'react'
3130import { AssetLoader } from '../../assets/classes/AssetLoader'
3231import { Engine } from '../../ecs/classes/Engine'
3332import { EngineState } from '../../ecs/classes/EngineState'
34- import { removeComponent , setComponent } from '../../ecs/functions/ComponentFunctions'
33+ import { getComponent , removeComponent } from '../../ecs/functions/ComponentFunctions'
3534import { createEntity } from '../../ecs/functions/EntityFunctions'
36- import { EntityTreeComponent } from '../../ecs/functions/EntityTree'
3735import { defineSystem } from '../../ecs/functions/SystemFunctions'
3836import { addObjectToGroup } from '../../scene/components/GroupComponent'
3937import { setVisibleComponent } from '../../scene/components/VisibleComponent'
4038import { ObjectLayers } from '../../scene/constants/ObjectLayers'
4139import { setObjectLayers } from '../../scene/functions/setObjectLayers'
42- import { LocalTransformComponent } from '../../transform/components/TransformComponent'
40+ import {
41+ ComputedTransformComponent ,
42+ setComputedTransformComponent
43+ } from '../../transform/components/ComputedTransformComponent'
44+ import { TransformComponent } from '../../transform/components/TransformComponent'
4345import { createTransitionState } from '../../xrui/functions/createTransitionState'
4446import { CameraActions } from '../CameraState'
4547
46- const VERTEX_SHADER = `
47- precision highp float;
48-
49- void main() {
50- vec3 newPosition = position * 2.0;
51- gl_Position = vec4(newPosition, 1.0);
52- }`
53-
54- const FRAGMENT_SHADER = `
55- precision highp float;
56-
57- uniform vec2 resolution;
58- uniform vec3 color;
59- uniform float intensity;
60- #ifdef USE_GRAPHIC
61- uniform sampler2D graphicTexture;
62- #endif
63- void main() {
64- vec2 uv = gl_FragCoord.xy / resolution.xy;
65- vec4 baseColor = vec4(color, intensity);
66- #ifdef USE_GRAPHIC
67- if (uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0) {
68- vec4 graphicColor = texture2D(graphicTexture, uv);
69- baseColor = graphicColor * baseColor;
70- } else {
71- baseColor = vec4(0.0, 0.0, 0.0, 1.0);
72- }
73- #endif
74- gl_FragColor = baseColor;
75- }`
76-
7748const fadeToBlackQueue = defineActionQueue ( CameraActions . fadeToBlack . matches )
7849
7950const CameraFadeBlackEffectSystemState = defineState ( {
8051 name : 'CameraFadeBlackEffectSystemState' ,
8152 initial : ( ) => {
82- const geometry = new PlaneGeometry ( 1 , 1 )
83- const material = new ShaderMaterial ( {
84- vertexShader : VERTEX_SHADER ,
85- fragmentShader : FRAGMENT_SHADER ,
53+ const geometry = new SphereGeometry ( 10 )
54+ const material = new MeshBasicMaterial ( {
8655 transparent : true ,
87- depthTest : false ,
88- uniforms : {
89- color : { value : new Color ( 'black' ) } ,
90- intensity : { value : 0 } ,
91- resolution : { value : new Vector2 ( window . outerWidth , window . outerHeight ) }
92- }
56+ side : DoubleSide ,
57+ depthWrite : true ,
58+ depthTest : false
9359 } )
9460
9561 const mesh = new Mesh ( geometry , material )
62+ mesh . scale . set ( - 1 , 1 , - 1 )
63+ mesh . renderOrder = 1
9664 mesh . name = 'Camera Fade Transition'
9765 const entity = createEntity ( )
9866 addObjectToGroup ( entity , mesh )
@@ -112,43 +80,31 @@ const execute = () => {
11280 for ( const action of fadeToBlackQueue ( ) ) {
11381 transition . setState ( action . in ? 'IN' : 'OUT' )
11482 if ( action . in ) {
115- setComponent ( entity , LocalTransformComponent , {
116- position : new Vector3 ( 0 , 0 , - 0.1 )
83+ setComputedTransformComponent ( entity , Engine . instance . cameraEntity , ( ) => {
84+ getComponent ( entity , TransformComponent ) . position . copy (
85+ getComponent ( Engine . instance . cameraEntity , TransformComponent ) . position
86+ )
11787 } )
118- setComponent ( entity , EntityTreeComponent , { parentEntity : Engine . instance . cameraEntity } )
119- } else removeComponent ( entity , LocalTransformComponent )
88+ } else removeComponent ( entity , ComputedTransformComponent )
12089 if ( action . graphicTexture ) {
12190 AssetLoader . load ( action . graphicTexture , { } , ( texture : Texture ) => {
122- mesh . material . uniforms . graphicTexture = new Uniform ( texture )
123- mesh . material . uniforms . color = new Uniform ( new Color ( 'white' ) )
124- mesh . material . defines . USE_GRAPHIC = true
91+ mesh . material . map = texture
12592 mesh . material . needsUpdate = true
12693 } )
12794 } else {
128- delete mesh . material . defines . USE_GRAPHIC
129- mesh . material . uniforms . color = new Uniform ( new Color ( 'black' ) )
95+ mesh . material . map = null
13096 mesh . material . needsUpdate = true
13197 }
13298 }
99+
133100 const deltaSeconds = getState ( EngineState ) . deltaSeconds
134101 transition . update ( deltaSeconds , ( alpha ) => {
135- mesh . material . uniforms . intensity . value = alpha
102+ mesh . material . opacity = alpha
136103 setVisibleComponent ( entity , alpha > 0 )
137104 } )
138105}
139106
140- const reactor = ( ) => {
141- const outerWidth = useHookstate ( window . outerWidth )
142- const outerHeight = useHookstate ( window . outerHeight )
143- const { mesh } = useHookstate ( getMutableState ( CameraFadeBlackEffectSystemState ) )
144- useEffect ( ( ) => {
145- mesh . material . uniforms . resolution . nested ( 'value' ) . set ( [ outerWidth . value , outerHeight . value ] )
146- } , [ outerWidth , outerHeight ] )
147- return null
148- }
149-
150107export const CameraFadeBlackEffectSystem = defineSystem ( {
151108 uuid : 'ee.engine.CameraFadeBlackEffectSystem' ,
152- execute,
153- reactor
109+ execute
154110} )
0 commit comments