diff --git a/assets/Script/example/SyncExmaple.ts b/assets/Script/example/SyncExmaple.ts index 43fd513..ea65b41 100644 --- a/assets/Script/example/SyncExmaple.ts +++ b/assets/Script/example/SyncExmaple.ts @@ -1,5 +1,5 @@ import { Component, Label, _decorator, view, director, Node, RichText, tween, Tween, math, randomRange, Vec3, Quat, ModelComponent, Color } from "cc"; -import { TestSimpleArrayReplicator } from "../sync/ArrayReplicator"; +import { TestSimpleArrayReplicator, TestSimpleArrayReplicatorVersion } from "../sync/ArrayReplicator"; import { getReplicateMark, ReplicatedOption } from "../sync/ReplicateMark"; import { getReplicator, replicated, replicatedClass } from "../sync/SyncUtil"; @@ -43,6 +43,8 @@ export default class SyncExample extends Component { this.makeObjectReplicated() TestSimpleArrayReplicator(); + console.log("=============="); + TestSimpleArrayReplicatorVersion(); /*let vec = new Vec3(Vec3.ZERO); makeObjectReplicated(vec); vec.x = 123; diff --git a/assets/Script/sync/ArrayReplicator.ts b/assets/Script/sync/ArrayReplicator.ts index 1a4f09b..a251d62 100644 --- a/assets/Script/sync/ArrayReplicator.ts +++ b/assets/Script/sync/ArrayReplicator.ts @@ -74,6 +74,8 @@ export class SimpleArrayReplicator implements IReplicator { this.data[i].version = toVersion; this.data[i].data = this.target[i]; diff.push(i, this.target[i]); + } else if (this.data[i].version >= fromVersion && this.data[i].version <= toVersion) { + diff.push(i, this.target[i]); } } this.lastCheckVersion = toVersion; @@ -123,6 +125,9 @@ export class SimpleArrayReplicator implements IReplicator { } } +/** + * 测试SimpleArrayReplicator的diff生成与应用 + */ export function TestSimpleArrayReplicator() { let source: number[] = [1, 2, 3, 4, 5]; let sourceRp = new SimpleArrayReplicator(source); @@ -145,6 +150,43 @@ export function TestSimpleArrayReplicator() { console.log(target); } +export function TestSimpleArrayReplicatorVersion() { + let source: number[] = []; + let sourceRp = new SimpleArrayReplicator(source); + let target1: number[] = []; + let targetRp1 = new SimpleArrayReplicator(target1); + let target2: number[] = []; + let targetRp2 = new SimpleArrayReplicator(target2); + + source.push(1, 3, 5); + let diff1 = sourceRp.genDiff(0, 1); + console.log(diff1); + targetRp1.applyDiff(diff1); + console.log(source); + console.log(target1); + + source.push(2, 4, 6); + source.splice(0, 0, 1); + let diff2 = sourceRp.genDiff(1, 2); + console.log(diff2); + targetRp1.applyDiff(diff2); + console.log(source); + console.log(target1); + + source.splice(0, 1); + source.push(7, 8, 9); + let diff3 = sourceRp.genDiff(0, 3); + console.log(diff3); + targetRp2.applyDiff(diff3); + console.log(source); + console.log(target2); + + let diff4 = sourceRp.genDiff(2, 3); + console.log(diff4); + targetRp1.applyDiff(diff4); + console.log(target1); +} + interface ArrayObjectVersionInfo { version: number; index: number;