private void serializeAttackEventExtraRecorder(Gson gson, String recordingPath) { try { JsonWriter writer = new JsonWriter(new FileWriter(recordingPath + DIRECTION_ORIGIN_LIST)); gson.toJson(directionAndOriginPosRecorderList.getList(), ArrayList.class, writer); writer.close(); directionAndOriginPosRecorderList.reset(); logger.info("AttackEvent extras serialization completed!"); } catch (Exception e) { logger.error("Error while serializing AttackEvent extras:", e); } }
private void deserializeAttackEventExtraRecorder(Gson gson, String recordingPath) { try (FileReader fileReader = new FileReader(recordingPath + DIRECTION_ORIGIN_LIST)) { JsonParser parser = new JsonParser(); JsonElement jsonElement = parser.parse(fileReader); Type type = new TypeToken<ArrayList<DirectionAndOriginPosRecorder>>() {}.getType(); ArrayList<DirectionAndOriginPosRecorder> list = gson.fromJson(jsonElement, type); directionAndOriginPosRecorderList.setList(list); logger.info("AttackEvent extras deserialization completed!"); } catch (Exception e) { logger.error("Error while deserializing AttackEvent extras:", e); } }
CharacterStateEventPositionMap characterStateEventPositionMap = new CharacterStateEventPositionMap(); rootContext.put(CharacterStateEventPositionMap.class, characterStateEventPositionMap); DirectionAndOriginPosRecorderList directionAndOriginPosRecorderList = new DirectionAndOriginPosRecorderList(); rootContext.put(DirectionAndOriginPosRecorderList.class, directionAndOriginPosRecorderList);
@ReceiveEvent(components = LocationComponent.class, netFilter = RegisterMode.AUTHORITY) public void onAttackRequest(AttackRequest event, EntityRef character, CharacterComponent characterComponent) { // if an item is used, make sure this entity is allowed to attack with it if (event.getItem().exists()) { if (!character.equals(event.getItem().getOwner())) { return; } } OnItemUseEvent onItemUseEvent = new OnItemUseEvent(); character.send(onItemUseEvent); if (!onItemUseEvent.isConsumed()) { EntityRef gazeEntity = GazeAuthoritySystem.getGazeEntityForCharacter(character); LocationComponent gazeLocation = gazeEntity.getComponent(LocationComponent.class); Vector3f direction = gazeLocation.getWorldDirection(); Vector3f originPos = gazeLocation.getWorldPosition(); if (recordAndReplayCurrentStatus.getStatus() == RecordAndReplayStatus.RECORDING) { directionAndOriginPosRecorderList.getAttackEventDirectionAndOriginPosRecorder().add(direction, originPos); } else if (recordAndReplayCurrentStatus.getStatus() == RecordAndReplayStatus.REPLAYING) { Vector3f[] data = directionAndOriginPosRecorderList.getAttackEventDirectionAndOriginPosRecorder().poll(); direction = data[0]; originPos = data[1]; } HitResult result = physics.rayTrace(originPos, direction, characterComponent.interactionRange, Sets.newHashSet(character), DEFAULTPHYSICSFILTER); if (result.isHit()) { result.getEntity().send(new AttackEvent(character, event.getItem())); } } }
Vector3f originPos = getViewPosition(); if (recordAndReplayCurrentStatus.getStatus() == RecordAndReplayStatus.RECORDING) { this.directionAndOriginPosRecorderList.getTargetOrOwnedEntityDirectionAndOriginPosRecorder().add(direction, originPos); } else if (recordAndReplayCurrentStatus.getStatus() == RecordAndReplayStatus.REPLAYING) { Vector3f[] data = this.directionAndOriginPosRecorderList.getTargetOrOwnedEntityDirectionAndOriginPosRecorder().poll(); direction = data[0]; originPos = data[1];
private void setUpLocalPlayer(Context context) { LocalPlayer localPlayer = new LocalPlayer(); localPlayer.setRecordAndReplayClasses(new DirectionAndOriginPosRecorderList(), new RecordAndReplayCurrentStatus()); clientEntity = mock(EntityRef.class); ClientComponent clientComponent = new ClientComponent(); characterEntity = mock(EntityRef.class); clientComponent.character = characterEntity; when(clientEntity.getComponent(ClientComponent.class)).thenReturn(clientComponent); localPlayer.setClientEntity(clientEntity); context.put(LocalPlayer.class, localPlayer); registerEntityKeyCapturing(); }
recordAndReplayUtils = new RecordAndReplayUtils(); CharacterStateEventPositionMap characterStateEventPositionMap = new CharacterStateEventPositionMap(); DirectionAndOriginPosRecorderList directionAndOriginPosRecorderList = new DirectionAndOriginPosRecorderList(); recordAndReplaySerializer = new RecordAndReplaySerializer(entityManager, recordedEventStore, recordAndReplayUtils, characterStateEventPositionMap, directionAndOriginPosRecorderList, moduleEnvironment); recordAndReplayCurrentStatus = context.get(RecordAndReplayCurrentStatus.class);
RecordAndReplayUtils recordAndReplayUtils = new RecordAndReplayUtils(); CharacterStateEventPositionMap characterStateEventPositionMap = new CharacterStateEventPositionMap(); DirectionAndOriginPosRecorderList directionAndOriginPosRecorderList = new DirectionAndOriginPosRecorderList(); RecordAndReplaySerializer recordAndReplaySerializer = new RecordAndReplaySerializer(entityManager, eventStore, recordAndReplayUtils, characterStateEventPositionMap, directionAndOriginPosRecorderList, null); recordAndReplayCurrentStatus.setStatus(RecordAndReplayStatus.REPLAYING);
CharacterStateEventPositionMap characterStateEventPositionMap = new CharacterStateEventPositionMap(); context.put(CharacterStateEventPositionMap.class, characterStateEventPositionMap); DirectionAndOriginPosRecorderList directionAndOriginPosRecorderList = new DirectionAndOriginPosRecorderList(); context.put(DirectionAndOriginPosRecorderList.class, directionAndOriginPosRecorderList); RecordAndReplaySerializer recordAndReplaySerializer = new RecordAndReplaySerializer(engineEntityManager, recordedEventStore, recordAndReplayUtils, characterStateEventPositionMap, directionAndOriginPosRecorderList, moduleManager.getEnvironment());