internal static void Init() { GsSerializer.OnNewEventHandler += OnNewEventHandler; GsSerializer.OnNewSnapShotReceived += OnNewSnapShotReceived; GsSerializer.CurrentPlayerLeftRoom += CurrentPlayerLeftRoom; GsSerializer.CurrentPlayerJoinRoom += CurrentPlayerJoinRoom; RealTimeEventHandlers.JoinedRoom += JoinedRoom; RealTimeEventHandlers.LeftRoom += LeftRoom; RealTimeEventHandlers.RoomMembersDetailReceived += RoomMembersDetailReceived; _monoBehaviourHandler = new MonoBehaviourHandler(); _prefabHandler = new PrefabHandler(); _functionHandler = new FunctionHandler(); _propertyHandler = new PropertyHandler(); _memberHandler = new MemberHandler(); _monoBehaviourHandler.Init(); _memberHandler.Init(); _propertyHandler.Init(_memberHandler); TypeUtil.Init(); ObjectUtil.Init(); IsAvailable = true; }
public void SetupForTests() { _recordedEvents = new List <string>(); _mockPrefabHandler = Substitute.For <IPrefabHandler>(); _mockSpriteHandler = Substitute.For <ISpriteHandler>(); _mockTechTypeHandler = Substitute.For <ITechTypeHandlerInternal>(); _craftDataHandler = Substitute.For <ICraftDataHandler>(); _spawnable = new TestSpawnable(_recordedEvents) { PrefabHandler = _mockPrefabHandler, SpriteHandler = _mockSpriteHandler, TechTypeHandler = _mockTechTypeHandler, CraftDataHandler = _craftDataHandler }; }
internal static void ApplySnapShot(IEnumerable <SnapShotData> datas, IPrefabHandler handler = null, IMonoBehaviourHandler monoBehaviourHandler = null, IPropertyHandler propertyHandler = null) { foreach (var shotData in datas) { switch (shotData.Type) { case SnapShotType.Function: ApplyFunction(shotData.Buffer, monoBehaviourHandler: monoBehaviourHandler); break; case SnapShotType.Object: ApplyObject((byte)ObjectActions.Instantiate, shotData.Buffer, shotData.OwnerId, handler); break; case SnapShotType.Property: ApplyProperty((byte)PropertyAction.Apply, shotData.Buffer, shotData.OwnerId, propertyHandler); break; default: throw new GameServiceException("Invalid SnapShot Type!"); } } }
public void Patch_EventsInvoked() { // ARRANGE const TechType createdTechType = TechType.Accumulator; IPrefabHandler mockPrefabHandler = Substitute.For <IPrefabHandler>(); ISpriteHandler mockSpriteHandler = Substitute.For <ISpriteHandler>(); ITechTypeHandlerInternal mockTechTypeHandler = Substitute.For <ITechTypeHandlerInternal>(); ICraftDataHandler mockCraftDataHandler = Substitute.For <ICraftDataHandler>(); IKnownTechHandler mockKnownTechHandler = Substitute.For <IKnownTechHandler>(); mockTechTypeHandler .AddTechType(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>(), Arg.Any <bool>()) .Returns(createdTechType); var techData = new TechData(); var pdaItem = new SimpleTestPdaItem { PrefabHandler = mockPrefabHandler, SpriteHandler = mockSpriteHandler, TechTypeHandler = mockTechTypeHandler, CraftDataHandler = mockCraftDataHandler, KnownTechHandler = mockKnownTechHandler, TechDataToReturn = techData, }; // ACT pdaItem.Patch(); // ASSERT mockCraftDataHandler.Received(1).SetTechData(createdTechType, techData); mockCraftDataHandler.Received(1).AddToGroup(TechGroup.Cyclops, TechCategory.Cyclops, createdTechType); mockKnownTechHandler.DidNotReceiveWithAnyArgs(); mockTechTypeHandler.Received(1).AddTechType(Arg.Any <string>(), "classId", "friendlyName", "description", true); }
private static void ApplyObject(byte objectAction, byte[] data, string ownerId, IPrefabHandler handler) { var action = (ObjectActions)objectAction; switch (action) { case ObjectActions.Instantiate: var instantiateData = new InstantiateData(); GsSerializer.Object.CallReadStream(instantiateData, data); // Call Callback GsLiveRealtime.Callbacks.OnBeforeInstantiateHandler?.Invoke(null, new OnBeforeInstantiate(instantiateData.PrefabName, ownerId, instantiateData.Position, instantiateData.Rotation)); var obj = handler.Instantiate(instantiateData.PrefabName, instantiateData.Position, instantiateData.Rotation, ownerId, ownerId == GsLiveRealtime.CurrentPlayerMemberId); // Call Callback GsLiveRealtime.Callbacks.OnAfterInstantiateHandler?.Invoke(null, new OnAfterInstantiate(obj, instantiateData.PrefabName, ownerId, instantiateData.Position, instantiateData.Rotation)); break; case ObjectActions.Destroy: var objectHandler = new GameObjectData(); GsSerializer.Object.CallReadStream(objectHandler, data); // Call Callback GsLiveRealtime.Callbacks.OnDestroyObjectHandler?.Invoke(null, new OnDestroyObject(objectHandler.ObjectNameOrTag, objectHandler.IsTag)); if (objectHandler.IsTag) { handler.DestroyWithTag(objectHandler.ObjectNameOrTag); } else { handler.DestroyWithName(objectHandler.ObjectNameOrTag); } break; default: throw new ArgumentOutOfRangeException(); } }
internal static void ApplyData(Types types, string ownerId, byte[] subCaller, byte[] extra, IPrefabHandler handler = null, IMonoBehaviourHandler monoBehaviourHandler = null, IPropertyHandler propertyHandler = null) { switch (types) { case Types.ObserverActions: ApplyTransform(subCaller[1], ownerId, extra); break; case Types.ObjectsActions: ApplyObject(subCaller[1], extra, ownerId, handler); break; case Types.RunFunction: ApplyFunction(extra, monoBehaviourHandler: monoBehaviourHandler); break; case Types.Property: ApplyProperty(subCaller[1], extra, ownerId, propertyHandler); break; default: throw new ArgumentOutOfRangeException(nameof(types), types, null); } }