mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-08-25 12:23:58 -04:00
66 lines
2.1 KiB
TypeScript
66 lines
2.1 KiB
TypeScript
/*
|
|
* GDevelop JS Platform
|
|
* Copyright 2013-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved.
|
|
* This project is released under the MIT License.
|
|
*/
|
|
namespace gdjs {
|
|
/**
|
|
* OnceTriggers is used to store the status of the conditions "Trigger once",
|
|
* that are used in events to have conditions that are only valid for one frame in a row.
|
|
* @category Core Engine > Events interfacing
|
|
*/
|
|
|
|
type OnceTriggersSyncData = {
|
|
onceTriggers: Record<integer, boolean>;
|
|
lastFrameOnceTriggers: Record<integer, boolean>;
|
|
};
|
|
/**
|
|
* @category Core Engine > Events interfacing
|
|
*/
|
|
export class OnceTriggers {
|
|
_onceTriggers: Record<integer, boolean> = {};
|
|
_lastFrameOnceTrigger: Record<integer, boolean> = {};
|
|
|
|
/**
|
|
* To be called when events begin so that "Trigger once" conditions
|
|
* are properly handled.
|
|
*/
|
|
startNewFrame(): void {
|
|
// Clear triggers from 2 frames ago
|
|
for (const k in this._lastFrameOnceTrigger)
|
|
if (this._lastFrameOnceTrigger.hasOwnProperty(k))
|
|
delete this._lastFrameOnceTrigger[k];
|
|
|
|
// Move triggers from this frame to last frame
|
|
for (const k in this._onceTriggers) {
|
|
if (this._onceTriggers.hasOwnProperty(k)) {
|
|
this._lastFrameOnceTrigger[k] = this._onceTriggers[k];
|
|
delete this._onceTriggers[k];
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Used by "Trigger once" conditions: return true only if
|
|
* this method was not called with the same identifier during the last frame.
|
|
* @param triggerId The identifier of the "Trigger once" condition.
|
|
*/
|
|
triggerOnce(triggerId: integer): boolean {
|
|
this._onceTriggers[triggerId] = true;
|
|
return !this._lastFrameOnceTrigger.hasOwnProperty(triggerId);
|
|
}
|
|
|
|
getNetworkSyncData(): OnceTriggersSyncData {
|
|
return {
|
|
onceTriggers: this._onceTriggers,
|
|
lastFrameOnceTriggers: this._lastFrameOnceTrigger,
|
|
};
|
|
}
|
|
|
|
updateNetworkSyncData(data: OnceTriggersSyncData): void {
|
|
this._onceTriggers = data.onceTriggers;
|
|
this._lastFrameOnceTrigger = data.lastFrameOnceTriggers;
|
|
}
|
|
}
|
|
}
|