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 ofmessage_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;
}
}