1.6.0 • Published 4 months ago

@etherealengine/hyperflux v1.6.0

Weekly downloads
-
License
CPAL
Repository
github
Last release
4 months ago

HyperFlux

HyperFlux brings together various state management strategies in Ethereal Engine, in a way that makes it easy to introspect and test.

In Ethereal Engine, we define 3 different stores

The ENGINE store is, meaning actions are dispatched directly on the incoming queue, and run on the Engine timer.

createHyperStore({
  name: 'ENGINE',
  getDispatchId: () => 'engine',
  getDispatchTime: () => Engine.instance.elapsedTime
})
// IncomingActionSystem
import { applyIncomingActions } from '@etherealengine/hyperflux'
export default async function IncomingActionSystem(world) {
  return () => {
    applyIncomingActions(Engine.instance.store)
  }
}

In any case, the appropriate store must be provided when dispatching an action:

dispatchAction( WorldNetworkAction.spawnAvatar({ parameters }))

Likewise when adding or removing receptors:

addActionReceptor((a) =>
  matches(a).when(WorldNetworkAction.spawnObject.matches, (a) => recepted.push(a))
)

State objects can also be defined and retrieved from a store:

const PeerState = defineState('peers', () => {
    return [] // initial state
})

// get state
const peerState = getState(Engine.instance.store, PeerState)

All incoming, outoing, and historical actions accessible on the store.actions object.