mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
Compare commits
1 Commits
a05b0cd0ef
...
network-sy
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0a182346fa |
@@ -17,6 +17,50 @@ namespace gdjs {
|
||||
|
||||
constructor() {}
|
||||
|
||||
getNetworkSyncData(): TweenManagerSyncData {
|
||||
const tweens: TweenManagerSyncData = {};
|
||||
for (const [identifier, tween] of this._tweens) {
|
||||
tweens[identifier] = {
|
||||
progress: tween.getProgress(),
|
||||
value: tween.getValue(),
|
||||
isPlaying: tween.isPlaying(),
|
||||
hasFinished: tween.hasFinished(),
|
||||
};
|
||||
}
|
||||
return tweens;
|
||||
}
|
||||
|
||||
// We only handle tweens partially for network sync.
|
||||
// We only sync the props of existing tweens, but do not handle
|
||||
// adding or removing tweens.
|
||||
updateFromNetworkSyncData(networkSyncData: TweenManagerSyncData) {
|
||||
for (const [identifier, tweenData] of Object.entries(
|
||||
networkSyncData
|
||||
)) {
|
||||
const tween = this._tweens.get(identifier);
|
||||
if (!tween) {
|
||||
continue;
|
||||
}
|
||||
if (
|
||||
tweenData.isPlaying !== undefined &&
|
||||
tweenData.isPlaying !== tween.isPlaying()
|
||||
) {
|
||||
tweenData.isPlaying
|
||||
? this.resumeTween(identifier)
|
||||
: this.pauseTween(identifier);
|
||||
}
|
||||
if (
|
||||
tweenData.hasFinished === true &&
|
||||
tweenData.hasFinished !== tween.hasFinished()
|
||||
) {
|
||||
this.stopTween(identifier, false);
|
||||
}
|
||||
if (tweenData.progress !== undefined) {
|
||||
tween.setProgress(tweenData.progress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Make all active tween step toward the end.
|
||||
* @param timeDelta the duration from the previous step in seconds
|
||||
@@ -267,6 +311,7 @@ namespace gdjs {
|
||||
stop(jumpToDest: boolean): void;
|
||||
resume(): void;
|
||||
pause(): void;
|
||||
setProgress(progress: float): void;
|
||||
getProgress(): float;
|
||||
getValue(): float;
|
||||
}
|
||||
@@ -339,6 +384,11 @@ namespace gdjs {
|
||||
getProgress(): float {
|
||||
return this.elapsedTime / this.totalDuration;
|
||||
}
|
||||
|
||||
setProgress(progress: float): void {
|
||||
this.elapsedTime = progress * this.totalDuration;
|
||||
this._updateValue();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -4,6 +4,23 @@ Copyright (c) 2010-2023 Florian Rival (Florian.Rival@gmail.com)
|
||||
*/
|
||||
namespace gdjs {
|
||||
const logger = new gdjs.Logger('Tween');
|
||||
|
||||
interface TweenData {
|
||||
progress: number;
|
||||
value: number;
|
||||
isPlaying: boolean;
|
||||
hasFinished: boolean;
|
||||
}
|
||||
export type TweenManagerSyncData = Record<string, TweenData>;
|
||||
|
||||
interface TweenNetworkSyncDataType {
|
||||
tweens: TweenManagerSyncData;
|
||||
}
|
||||
|
||||
export interface TweenNetworkSyncData extends BehaviorNetworkSyncData {
|
||||
props: TweenNetworkSyncDataType;
|
||||
}
|
||||
|
||||
interface IColorable extends gdjs.RuntimeObject {
|
||||
setColor(color: string): void;
|
||||
getColor(): string;
|
||||
@@ -84,6 +101,21 @@ namespace gdjs {
|
||||
return true;
|
||||
}
|
||||
|
||||
getNetworkSyncData(): TweenNetworkSyncData {
|
||||
return {
|
||||
...super.getNetworkSyncData(),
|
||||
props: {
|
||||
tweens: this._tweens.getNetworkSyncData(),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
updateFromNetworkSyncData(networkSyncData: TweenNetworkSyncData) {
|
||||
super.updateFromNetworkSyncData(networkSyncData);
|
||||
|
||||
this._tweens.updateFromNetworkSyncData(networkSyncData.props.tweens);
|
||||
}
|
||||
|
||||
doStepPreEvents(instanceContainer: gdjs.RuntimeInstanceContainer): void {
|
||||
this._tweens.step();
|
||||
}
|
||||
|
Reference in New Issue
Block a user