ComponentModifier

import { ComponentModifier } from "encompass-ecs";

A ComponentModifier is a subclass of Engine that provides a structure for a common pattern - collecting all ComponentMessages of a particular type that reference the same Component instance.

The first message type given in the @Reads decorator is assumed to be the target ComponentMessage type.

Abstracts

modify(component, messages, dt)

This callback runs during the modify pass of World update when one or more ComponentMessages of message_type are produced during the detection pass.

Arguments:
  • component (Component) – The component attached to the ComponentMessage tracked by the ComponentModifier.
  • messages (GCOptimizedList<ComponentMessage>) – A GCOptimizedSet of all the messages of message_type created during the detection pass.
  • dt (number) – The delta time value given to the World update function.

Example

import { Component, ComponentModifier, Message, Mutates, Reads, Type } from "encompass-ecs";
import { MusicComponent } from "hyperspace/components/music";
import { SoundComponent } from "hyperspace/components/sound";
import { AudioMessage } from "hyperspace/messages/component/audio";
import { TimeDilationBroadcast } from "hyperspace/messages/state/time_dilation";
import { AudioComponent } from "hyperspace/types/audio_component";
import { GCOptimizedSet } from "encompass-gc-optimized-collections";

@Reads(AudioMessage, TimeDilationBroadcast)
@Mutates(MusicComponent, SoundComponent)
export class AudioModifier extends ComponentModifier {
    protected modify(music_component: AudioComponent, messages: GCOptimizedSet<AudioMessage>, dt: number) {
        let factor = 1;
        for (const broadcast of this.read_messages(TimeDilationBroadcast).iterable()) {
            factor *= broadcast.factor;
        }

        dt *= factor;

        const source = music_component.source;
        source.setPitch(factor);
        music_component.time += dt;
    }
}