| | 1 | | using System.Collections; |
| | 2 | | using System.Collections.Generic; |
| | 3 | | using DCL.Configuration; |
| | 4 | | using DCL.Controllers; |
| | 5 | | using DCL.Interface; |
| | 6 | | using DCL.Models; |
| | 7 | | using Newtonsoft.Json; |
| | 8 | | using UnityEngine; |
| | 9 | | using static ProtocolV2; |
| | 10 | |
|
| | 11 | | namespace DCL.Builder |
| | 12 | | { |
| | 13 | | public class LegacyComponentSender : IComponentSendHandler |
| | 14 | | { |
| | 15 | | //This is done for optimization purposes, recreating new objects can increase garbage collection |
| 39 | 16 | | private TransformComponent entityTransformComponentModel = new TransformComponent(); |
| 39 | 17 | | private EntityPayload entityPayload = new EntityPayload(); |
| 39 | 18 | | private ModifyEntityComponentEvent modifyEntityComponentEvent = new ModifyEntityComponentEvent(); |
| 39 | 19 | | private EntitySingleComponentPayload entitySingleComponentPayload = new EntitySingleComponentPayload(); |
| | 20 | |
|
| | 21 | | public void SendNewEntityToKernel(string sceneId, long entityId, ComponentPayload[] componentsPayload) |
| | 22 | | { |
| 1 | 23 | | AddEntityEvent addEntityEvent = new AddEntityEvent(); |
| 1 | 24 | | entityPayload.entityId = entityId; |
| 1 | 25 | | entityPayload.components = componentsPayload; |
| | 26 | |
|
| 1 | 27 | | addEntityEvent.payload = entityPayload; |
| | 28 | |
|
| 1 | 29 | | WebInterface.SceneEvent<AddEntityEvent> sceneEvent = new WebInterface.SceneEvent<AddEntityEvent>(); |
| 1 | 30 | | sceneEvent.sceneId = sceneId; |
| 1 | 31 | | sceneEvent.eventType = BIWSettings.STATE_EVENT_NAME; |
| 1 | 32 | | sceneEvent.payload = addEntityEvent; |
| | 33 | |
|
| | 34 | | //Note(Adrian): We use Newtonsoft instead of JsonUtility because we need to deal with super classes, JsonUti |
| 1 | 35 | | string message = JsonConvert.SerializeObject(sceneEvent); |
| 1 | 36 | | WebInterface.BuilderInWorldMessage(BIWSettings.SCENE_EVENT_NAME, message); |
| 1 | 37 | | } |
| | 38 | |
|
| | 39 | | public void ChangeEntityComponent(EntitySingleComponentPayload payload, IParcelScene scene) |
| | 40 | | { |
| 2 | 41 | | modifyEntityComponentEvent.payload = payload; |
| | 42 | |
|
| 2 | 43 | | WebInterface.SceneEvent<ModifyEntityComponentEvent> sceneEvent = new WebInterface.SceneEvent<ModifyEntityCom |
| 2 | 44 | | sceneEvent.sceneId = scene.sceneData.id; |
| 2 | 45 | | sceneEvent.eventType = BIWSettings.STATE_EVENT_NAME; |
| 2 | 46 | | sceneEvent.payload = modifyEntityComponentEvent; |
| | 47 | |
|
| | 48 | | //Note (Adrian): We use Newtonsoft instead of JsonUtility because we need to deal with super classes, JsonUt |
| 2 | 49 | | string message = JsonConvert.SerializeObject(sceneEvent, Formatting.None, new JsonSerializerSettings |
| | 50 | | { |
| | 51 | | ReferenceLoopHandling = ReferenceLoopHandling.Ignore |
| | 52 | | }); |
| | 53 | |
|
| 2 | 54 | | WebInterface.BuilderInWorldMessage(BIWSettings.SCENE_EVENT_NAME, message); |
| 2 | 55 | | } |
| | 56 | |
|
| | 57 | | public void EntityTransformReport(IDCLEntity entity, IParcelScene scene) { |
| | 58 | |
|
| 1 | 59 | | entitySingleComponentPayload.entityId = entity.entityId; |
| 1 | 60 | | entitySingleComponentPayload.componentId = (int) CLASS_ID_COMPONENT.TRANSFORM; |
| | 61 | |
|
| 1 | 62 | | entityTransformComponentModel.position = WorldStateUtils.ConvertUnityToScenePosition(entity.gameObject.trans |
| 1 | 63 | | entityTransformComponentModel.rotation = new QuaternionRepresentation(entity.gameObject.transform.rotation); |
| 1 | 64 | | entityTransformComponentModel.scale = entity.gameObject.transform.lossyScale; |
| | 65 | |
|
| 1 | 66 | | entitySingleComponentPayload.data = entityTransformComponentModel; |
| | 67 | |
|
| 1 | 68 | | modifyEntityComponentEvent.payload = entitySingleComponentPayload; |
| | 69 | |
|
| 1 | 70 | | WebInterface.SceneEvent<ModifyEntityComponentEvent> sceneEvent = new WebInterface.SceneEvent<ModifyEntityCom |
| 1 | 71 | | sceneEvent.sceneId = scene.sceneData.id; |
| 1 | 72 | | sceneEvent.eventType = BIWSettings.STATE_EVENT_NAME; |
| 1 | 73 | | sceneEvent.payload = modifyEntityComponentEvent; |
| | 74 | |
|
| | 75 | | //Note (Adrian): We use Newtonsoft instead of JsonUtility because we need to deal with super classes, JsonUt |
| 1 | 76 | | string message = JsonConvert.SerializeObject(sceneEvent); |
| 1 | 77 | | WebInterface.BuilderInWorldMessage(BIWSettings.SCENE_EVENT_NAME, message); |
| 1 | 78 | | } |
| | 79 | |
|
| | 80 | | public void RemoveEntityOnKernel(long entityId, IParcelScene scene) |
| | 81 | | { |
| 2 | 82 | | RemoveEntityEvent removeEntityEvent = new RemoveEntityEvent(); |
| 2 | 83 | | RemoveEntityPayload removeEntityPayLoad = new RemoveEntityPayload(); |
| 2 | 84 | | removeEntityPayLoad.entityId = entityId; |
| 2 | 85 | | removeEntityEvent.payload = removeEntityPayLoad; |
| | 86 | |
|
| 2 | 87 | | WebInterface.SendSceneEvent(scene.sceneData.id, BIWSettings.STATE_EVENT_NAME, removeEntityEvent); |
| 2 | 88 | | } |
| | 89 | | } |
| | 90 | | } |
| | 91 | |
|