private void HandleCollision() { int layerMask = 0; layerMask |= 1 << LayerMask.NameToLayer("Object"); RaycastHit2D[] hits = Physics2D.RaycastAll(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero, Mathf.Infinity, layerMask); if (hits != null && hits.Length > 0) { System.Array.Sort(hits, (x, y) => (x.distance.CompareTo(y.distance))); if (Settings.ShowObjects) { for (int i = 0; i < hits.Length; i++) { // the object identified by hit.transform was clicked Unity_ObjBehaviour ob = hits[i].transform.GetComponentInParent <Unity_ObjBehaviour>(); if (ob != null) { highlightedObject = ob; break; } } } } Vector2Int mouseTile = Controller.obj.levelController.controllerTilemap.MouseToTileInt(Input.mousePosition); highlightedCollision = LevelEditorData.Level?.Maps?.Select(x => x.GetMapTile(mouseTile.x, mouseTile.y)).ToArray(); highlightedTile = LevelEditorData.Level?.Maps?.Select(x => x.GetMapTile(mouseTile.x, mouseTile.y)).ToArray(); }
void Update() { highlightedObject = null; highlightedCollision = null; Rect screenRect = new Rect(0, 0, Screen.width, Screen.height); if (Controller.LoadState == Controller.State.Finished && !EventSystem.current.IsPointerOverGameObject() && screenRect.Contains(Input.mousePosition) ) { HandleCollision(); } }
public void Update() { if (Controller.LoadState == Controller.State.Finished && !sentHierarchy) { SendHierarchy(); sentHierarchy = true; } if ((Application.platform == RuntimePlatform.WebGLPlayer || debugMessages) && Controller.LoadState == Controller.State.Finished) { // TODO: Handle highlight & selection changes like in raymap: var hl = Controller.obj.levelController.editor.objectHighlight; // TODO: Also check highlighted collision? if (highlightedObject_ != hl.highlightedObject) { highlightedObject_ = hl.highlightedObject; Send(GetHighlightMessageJSON()); } // Check selected object if (selectedObject_ != Controller.obj.levelEventController.SelectedEvent) { selectedObject_ = Controller.obj.levelEventController.SelectedEvent; if (selectedObject_ != null) { x_ = selectedObject_.ObjData.XPosition; y_ = selectedObject_.ObjData.YPosition; // TODO: keep state indices so updates on animation speed, etc. can be sent //selectedPersoStateIndex_ = selectedPerso_.currentState; Send(GetSelectionMessageJSON(includeLists: true, includeDetails: true)); } } // Check selected object's changed values if (selectedObject_ != null) { if (selectedObject_.ObjData.XPosition != x_ || selectedObject_.ObjData.YPosition != y_) { x_ = selectedObject_.ObjData.XPosition; y_ = selectedObject_.ObjData.YPosition; Send(GetSelectionMessageJSON(includeLists: false, includeDetails: false)); } } } }
private void HandleCollision() { var ec = Controller.obj?.levelEventController?.editor?.cam; bool mouselook = ec != null && (ec.MouseLookEnabled || ec.MouseLookRMBEnabled); if (mouselook) { return; } int layerMask = 0; Camera cam = Camera.main; //layerMask |= 1 << LayerMask.NameToLayer("Object"); if (LevelEditorData.Level?.IsometricData != null) { cam = ec?.camera3D ?? cam; // Isometric: Raycast objects layerMask = 1 << LayerMask.NameToLayer("3D Object"); Ray ray = cam.ScreenPointToRay(Input.mousePosition); RaycastHit[] hits = Physics.RaycastAll(ray, Mathf.Infinity, layerMask, QueryTriggerInteraction.Ignore); if (hits != null && hits.Length > 0) { System.Array.Sort(hits, (x, y) => (x.distance.CompareTo(y.distance))); if (Settings.ShowObjects) { for (int i = 0; i < hits.Length; i++) { // the object identified by hit.transform was clicked Unity_ObjBehaviour ob = hits[i].transform.GetComponentInParent <Unity_ObjBehaviour>(); if (ob != null) { highlightedObject = ob; break; } } } } // Isometric: Raycast collision layerMask = 1 << LayerMask.NameToLayer("3D Collision"); ray = cam.ScreenPointToRay(Input.mousePosition); hits = Physics.RaycastAll(ray, Mathf.Infinity, layerMask, QueryTriggerInteraction.Ignore); if (hits != null && hits.Length > 0) { System.Array.Sort(hits, (x, y) => (x.distance.CompareTo(y.distance))); for (int i = 0; i < hits.Length; i++) { // the object identified by hit.transform was clicked // Hack, for now use the gameobject name string[] name = hits[i].transform.gameObject.name.Split(','); if (name.Length == 2 && int.TryParse(name[0], out int x) && int.TryParse(name[1], out int y)) { var c3dt = LevelEditorData.Level.IsometricData.GetCollisionTile(x, y); if (c3dt != null) { highlightedCollision3D = c3dt; break; } } } } // TODO: Add colliders to each 3D block, and dummy behavior that has the x,y coordinates in tile space. Only disable renderers... } else { layerMask = 1 << LayerMask.NameToLayer("Object"); RaycastHit2D[] hits = Physics2D.RaycastAll(cam.ScreenToWorldPoint(Input.mousePosition), Vector2.zero, Mathf.Infinity, layerMask); if (hits != null && hits.Length > 0) { System.Array.Sort(hits, (x, y) => (x.distance.CompareTo(y.distance))); if (Settings.ShowObjects) { for (int i = 0; i < hits.Length; i++) { // the object identified by hit.transform was clicked Unity_ObjBehaviour ob = hits[i].transform.GetComponentInParent <Unity_ObjBehaviour>(); if (ob != null) { highlightedObject = ob; break; } } } } } Vector2Int mouseTileCollision = Controller.obj.levelController.controllerTilemap.MouseToTileInt(Input.mousePosition, collision: true); highlightedCollision = LevelEditorData.Level?.Maps?.Where(x => x.Type.HasFlag(Unity_Map.MapType.Collision)).Select(x => x.GetMapTile(mouseTileCollision.x, mouseTileCollision.y)).ToArray(); Vector2Int mouseTile = Controller.obj.levelController.controllerTilemap.MouseToTileInt(Input.mousePosition); highlightedTile = LevelEditorData.Level?.Maps?.Where(x => x.Type.HasFlag(Unity_Map.MapType.Graphics)).Select(x => x.GetMapTile(mouseTile.x, mouseTile.y)).ToArray(); }
private void ParseObjectJSON(WebJSON.Object msg) { if (msg == null || msg.Index < -1) { return; } var objects = Controller.obj.levelController.Objects; if (msg.Index > objects.Count) { return; } Unity_ObjBehaviour o = msg.Index == -1 ? Controller.obj.levelController.RaymanObject : objects[msg.Index]; if (o == null) { return; } bool refreshObjectLists = false; // Now we have the object, parse it if (msg.X.HasValue) { o.ObjData.XPosition = (short)msg.X.Value; } if (msg.Y.HasValue) { o.ObjData.YPosition = (short)msg.Y.Value; } if (msg.IsEnabled.HasValue) { o.IsEnabled = msg.IsEnabled.Value; } if (msg.StateIndex.HasValue) { o.ObjData.CurrentUIState = msg.StateIndex.Value; } switch (o.ObjData) { case Unity_Object_R1 r1o: if (msg.R1_ETAIndex.HasValue && r1o.ETAIndex != msg.R1_ETAIndex.Value) { r1o.ETAIndex = msg.R1_ETAIndex.Value; refreshObjectLists = true; } if (msg.R1_DESIndex.HasValue && r1o.DESIndex != msg.R1_DESIndex.Value) { r1o.DESIndex = msg.R1_DESIndex.Value; refreshObjectLists = true; } break; case Unity_Object_R2 r2o: if (msg.R2_AnimGroupIndex.HasValue && r2o.AnimGroupIndex != msg.R2_AnimGroupIndex.Value) { r2o.AnimGroupIndex = msg.R2_AnimGroupIndex.Value; refreshObjectLists = true; } break; case Unity_Object_R1Jaguar r1jo: if (msg.R1Jaguar_EventDefinitionIndex.HasValue && r1jo.EventDefinitionIndex != msg.R1Jaguar_EventDefinitionIndex.Value) { r1jo.EventDefinitionIndex = msg.R1Jaguar_EventDefinitionIndex.Value; refreshObjectLists = true; } break; case Unity_Object_GBA go: if (msg.GBA_GraphicsDataIndex.HasValue && go.GraphicsDataIndex != msg.GBA_GraphicsDataIndex.Value) { go.GraphicsDataIndex = msg.GBA_GraphicsDataIndex.Value; refreshObjectLists = true; } break; } // TODO: More object settings? if (refreshObjectLists) { Send(GetSelectionMessageJSON(includeLists: true, includeDetails: true)); } }
private WebJSON.Object GetObjectJSON(Unity_ObjBehaviour obj, bool includeLists = false, bool includeDetails = false) { if (obj == null) { return(null); } var webObj = new WebJSON.Object() { Name = obj.ObjData.PrimaryName, SecondaryName = obj.ObjData.SecondaryName, Index = obj.Index, IsAlways = obj.ObjData.IsAlways, IsEnabled = obj.IsEnabled, IsEditor = obj.ObjData.IsEditor, // Updateable fields X = obj.ObjData.XPosition, Y = obj.ObjData.YPosition }; if (includeDetails) { // Common details webObj.AnimIndex = obj.ObjData.AnimationIndex; if (includeLists) { webObj.StateNames = obj.ObjData.UIStateNames; } webObj.StateIndex = obj.ObjData.CurrentUIState; // Specific properties for type switch (obj.ObjData) { case Unity_Object_R1 r1obj: webObj.R1_Type = (ushort)r1obj.EventData.Type; webObj.R1_DESIndex = r1obj.DESIndex; webObj.R1_ETAIndex = r1obj.ETAIndex; webObj.R1_Etat = r1obj.EventData.Etat; webObj.R1_SubEtat = r1obj.EventData.SubEtat; webObj.R1_OffsetBX = r1obj.EventData.OffsetBX; webObj.R1_OffsetBY = r1obj.EventData.OffsetBY; webObj.R1_OffsetHY = r1obj.EventData.OffsetHY; webObj.R1_FollowSprite = r1obj.EventData.FollowSprite; webObj.R1_HitPoints = r1obj.EventData.ActualHitPoints; webObj.R1_HitSprite = r1obj.EventData.HitSprite; webObj.R1_FollowEnabled = r1obj.EventData.GetFollowEnabled(LevelEditorData.CurrentSettings); webObj.R1_DisplayPrio = r1obj.EventData.DisplayPrio; if (includeLists) { webObj.R1_Commands = r1obj.EventData.Commands?.ToTranslatedStrings(r1obj.EventData.LabelOffsets); webObj.R1_DESNames = r1obj.ObjManager.DES.Select(x => x.DisplayName).ToArray(); webObj.R1_ETANames = r1obj.ObjManager.ETA.Select(x => x.DisplayName).ToArray(); } break; case Unity_Object_R2 r2obj: webObj.R1_Type = (ushort)r2obj.EventData.EventType; webObj.R2_AnimGroupIndex = r2obj.AnimGroupIndex; webObj.R2_MapLayer = r2obj.EventData.MapLayer.ToString(); webObj.R1_Etat = r2obj.EventData.Etat; webObj.R1_SubEtat = r2obj.EventData.SubEtat; webObj.R1_OffsetBX = r2obj.EventData.CollisionData?.OffsetBX; webObj.R1_OffsetBY = r2obj.EventData.CollisionData?.OffsetBY; webObj.R1_OffsetHY = r2obj.EventData.CollisionData?.OffsetHY; webObj.R1_DisplayPrio = r2obj.EventData.DisplayPrio; if (includeLists) { webObj.R2_AnimGroupNames = r2obj.ObjManager.AnimGroups.Select(x => x.Pointer?.ToString() ?? "N/A").ToArray(); } break; case Unity_Object_R1Jaguar r1jaguarObj: webObj.R1Jaguar_EventDefinitionIndex = r1jaguarObj.EventDefinitionIndex; webObj.R1Jaguar_ComplexState = r1jaguarObj.ComplexStateIndex; webObj.R1Jaguar_State = r1jaguarObj.StateIndex; if (includeLists) { webObj.R1Jaguar_EventDefinitionNames = r1jaguarObj.ObjManager.EventDefinitions.Select(x => x.DisplayName).ToArray(); } break; case Unity_Object_GBA gbaObj: webObj.GBA_ActorID = gbaObj.Actor.ActorID; webObj.GBA_GraphicsDataIndex = gbaObj.GraphicsDataIndex; webObj.GBA_State = gbaObj.Actor.StateIndex; if (includeLists) { webObj.GBA_GraphicsDataNames = gbaObj.ObjManager.GraphicsDatas.Select(x => x.Index.ToString()).ToArray(); } break; } } return(webObj); }
private void ParseObjectJSON(WebJSON.Object msg) { if (msg == null || msg.Index < -1) { return; } var objects = Controller.obj.levelController.Objects; if (msg.Index > objects.Count) { return; } Unity_ObjBehaviour o = msg.Index == -1 ? Controller.obj.levelController.RaymanObject : objects[msg.Index]; if (o == null) { return; } bool refreshObjectLists = false; // Now we have the object, parse it if (msg.X.HasValue) { o.ObjData.XPosition = (short)msg.X.Value; } if (msg.Y.HasValue) { o.ObjData.YPosition = (short)msg.Y.Value; } if (msg.IsEnabled.HasValue) { o.IsEnabled = msg.IsEnabled.Value; } if (msg.StateIndex.HasValue) { o.ObjData.CurrentUIState = msg.StateIndex.Value; } if (msg.Position3D.HasValue && o.ObjData is Unity_Object_3D o3d && LevelEditorData.Level?.IsometricData != null) { o3d.Position = msg.Position3D.Value; } switch (o.ObjData) { case Unity_Object_R1 r1o: if (msg.R1_ETAIndex.HasValue && r1o.ETAIndex != msg.R1_ETAIndex.Value) { r1o.ETAIndex = msg.R1_ETAIndex.Value; refreshObjectLists = true; } if (msg.R1_DESIndex.HasValue && r1o.DESIndex != msg.R1_DESIndex.Value) { r1o.DESIndex = msg.R1_DESIndex.Value; refreshObjectLists = true; } break; case Unity_Object_R2 r2o: if (msg.R2_AnimGroupIndex.HasValue && r2o.AnimGroupIndex != msg.R2_AnimGroupIndex.Value) { r2o.AnimGroupIndex = msg.R2_AnimGroupIndex.Value; refreshObjectLists = true; } break; case Unity_Object_R1Jaguar r1jo: if (msg.R1Jaguar_EventDefinitionIndex.HasValue && r1jo.EventDefinitionIndex != msg.R1Jaguar_EventDefinitionIndex.Value) { r1jo.EventDefinitionIndex = msg.R1Jaguar_EventDefinitionIndex.Value; refreshObjectLists = true; } break; case Unity_Object_GBA gbao: if (msg.GBA_ActorModelIndex.HasValue && gbao.ActorModelIndex != msg.GBA_ActorModelIndex.Value) { gbao.ActorModelIndex = msg.GBA_ActorModelIndex.Value; refreshObjectLists = true; } break; case Unity_Object_GBC gbco: if (msg.GBC_ActorModelIndex.HasValue && gbco.ActorModelIndex != msg.GBC_ActorModelIndex.Value) { gbco.ActorModelIndex = msg.GBC_ActorModelIndex.Value; refreshObjectLists = true; } break; case Unity_Object_GBARRR rrro: if (msg.GBARRR_AnimationGroupIndex.HasValue && rrro.AnimationGroupIndex != msg.GBARRR_AnimationGroupIndex.Value) { rrro.AnimationGroupIndex = msg.GBARRR_AnimationGroupIndex.Value; refreshObjectLists = true; } break; case Unity_Object_GBARRRMode7Unused rrrMode7Unused_o: if (msg.GBARRR_AnimationGroupIndex.HasValue && rrrMode7Unused_o.AnimationGroupIndex != msg.GBARRR_AnimationGroupIndex.Value) { rrrMode7Unused_o.AnimationGroupIndex = msg.GBARRR_AnimationGroupIndex.Value; refreshObjectLists = true; } break; case Unity_Object_GBAIsometricRHR rhro: if (msg.GBAIsometric_AnimSetIndex.HasValue && rhro.AnimSetIndex != msg.GBAIsometric_AnimSetIndex.Value) { rhro.AnimSetIndex = msg.GBAIsometric_AnimSetIndex.Value; refreshObjectLists = true; } break; case Unity_Object_GBAIsometricSpyro spyro_o: if (msg.GBAIsometric_AnimSetIndex.HasValue && spyro_o.AnimSetIndex != msg.GBAIsometric_AnimSetIndex.Value) { spyro_o.AnimSetIndex = msg.GBAIsometric_AnimSetIndex.Value; refreshObjectLists = true; } break; case Unity_Object_GBAIsometricSpyro2_2D spyro2D_o: if (msg.GBAIsometric_AnimSetIndex.HasValue && spyro2D_o.AnimSetIndex != msg.GBAIsometric_AnimSetIndex.Value) { spyro2D_o.AnimSetIndex = msg.GBAIsometric_AnimSetIndex.Value; refreshObjectLists = true; } break; case Unity_Object_SNES snes_o: if (msg.SNES_GraphicsGroupIndex.HasValue && snes_o.GraphicsGroupIndex != msg.SNES_GraphicsGroupIndex.Value) { snes_o.GraphicsGroupIndex = msg.SNES_GraphicsGroupIndex.Value; refreshObjectLists = true; } break; case Unity_Object_GBAVV crashObj: if (msg.GBAVV_AnimSetIndex.HasValue && crashObj.AnimSetIndex != msg.GBAVV_AnimSetIndex.Value) { crashObj.AnimSetIndex = msg.GBAVV_AnimSetIndex.Value; refreshObjectLists = true; } break; case Unity_Object_GBAVVMode7 crashObj: if (msg.GBAVV_AnimSetIndex.HasValue && crashObj.AnimSetIndex != msg.GBAVV_AnimSetIndex.Value) { crashObj.AnimSetIndex = msg.GBAVV_AnimSetIndex.Value; refreshObjectLists = true; } break; } if (refreshObjectLists) { Send(GetSelectionMessageJSON(includeLists: true, includeDetails: true)); } }
public void Update() { if (Controller.LoadState == Controller.State.Finished && !sentHierarchy) { SendHierarchy(); sentHierarchy = true; } if ((Application.platform == RuntimePlatform.WebGLPlayer || debugMessages) && Controller.LoadState == Controller.State.Finished) { // TODO: Handle highlight & selection changes like in raymap: var hl = Controller.obj.levelController.editor.objectHighlight; var hlCollision3D = hl.highlightedCollision3D; var hlCollision = hl.highlightedCollision; if (!Settings.ShowCollision) { hlCollision3D = null; hlCollision = null; } if (highlightedObject_ != hl.highlightedObject || (highlightedCollision3D_ != hlCollision3D || (highlightedCollision_ != hlCollision && (highlightedCollision_ == null || hlCollision == null || !highlightedCollision_.SequenceEqual(hlCollision))))) { highlightedObject_ = hl.highlightedObject; highlightedCollision_ = hlCollision; highlightedCollision3D_ = hlCollision3D; Send(GetHighlightMessageJSON()); } // Check selected object if (selectedObject_ != Controller.obj.levelEventController.SelectedEvent) { selectedObject_ = Controller.obj.levelEventController.SelectedEvent; if (selectedObject_ != null) { x_ = selectedObject_.ObjData.XPosition; y_ = selectedObject_.ObjData.YPosition; if (selectedObject_.ObjData is Unity_Object_3D o3d && LevelEditorData.Level?.IsometricData != null) { pos3D_ = o3d.Position; } // TODO: keep state indices so updates on animation speed, etc. can be sent //selectedPersoStateIndex_ = selectedPerso_.currentState; } Send(GetSelectionMessageJSON(includeLists: true, includeDetails: true)); } // Check selected object's changed values if (selectedObject_ != null) { if (selectedObject_.ObjData.XPosition != x_ || selectedObject_.ObjData.YPosition != y_ || (selectedObject_.ObjData is Unity_Object_3D o3d && LevelEditorData.Level?.IsometricData != null && o3d.Position != pos3D_)) { x_ = selectedObject_.ObjData.XPosition; y_ = selectedObject_.ObjData.YPosition; if (selectedObject_.ObjData is Unity_Object_3D o3d2 && LevelEditorData.Level?.IsometricData != null) { pos3D_ = o3d2.Position; } Send(GetSelectionMessageJSON(includeLists: false, includeDetails: false)); } } } }
private WebJSON.Object GetObjectJSON(Unity_ObjBehaviour obj, bool includeLists = false, bool includeDetails = false) { if (obj == null) { return(null); } var webObj = new WebJSON.Object() { Name = obj.ObjData.PrimaryName, SecondaryName = obj.ObjData.SecondaryName, Index = obj.Index, IsAlways = obj.ObjData.IsAlways, IsEnabled = obj.IsEnabled, IsEditor = obj.ObjData.IsEditor, // Updateable fields X = obj.ObjData.XPosition, Y = obj.ObjData.YPosition }; if (obj.ObjData is Unity_Object_3D o3d && LevelEditorData.Level?.IsometricData != null) { webObj.Position3D = o3d.Position; } if (includeDetails) { // Common details webObj.AnimIndex = obj.ObjData.AnimationIndex; if (includeLists) { webObj.StateNames = obj.ObjData.UIStateNames; } webObj.StateIndex = obj.ObjData.CurrentUIState; // Specific properties for type switch (obj.ObjData) { case Unity_Object_R1 r1obj: webObj.R1_Type = (ushort)r1obj.EventData.Type; webObj.R1_DESIndex = r1obj.DESIndex; webObj.R1_ETAIndex = r1obj.ETAIndex; webObj.R1_Etat = r1obj.EventData.Etat; webObj.R1_SubEtat = r1obj.EventData.SubEtat; webObj.R1_OffsetBX = r1obj.EventData.OffsetBX; webObj.R1_OffsetBY = r1obj.EventData.OffsetBY; webObj.R1_OffsetHY = r1obj.EventData.OffsetHY; webObj.R1_FollowSprite = r1obj.EventData.FollowSprite; webObj.R1_HitPoints = r1obj.EventData.ActualHitPoints; webObj.R1_HitSprite = r1obj.EventData.HitSprite; webObj.R1_FollowEnabled = r1obj.EventData.GetFollowEnabled(LevelEditorData.CurrentSettings); webObj.R1_DisplayPrio = r1obj.EventData.DisplayPrio; if (includeLists) { webObj.R1_Commands = r1obj.EventData.Commands?.ToTranslatedStrings(r1obj.EventData.LabelOffsets); webObj.R1_DESNames = r1obj.ObjManager.DES.Select(x => x.DisplayName).ToArray(); webObj.R1_ETANames = r1obj.ObjManager.ETA.Select(x => x.DisplayName).ToArray(); } break; case Unity_Object_R2 r2obj: webObj.R1_Type = (ushort)r2obj.EventData.EventType; webObj.R2_MapLayer = r2obj.EventData.MapLayer.ToString(); webObj.R1_Etat = r2obj.EventData.Etat; webObj.R1_SubEtat = r2obj.EventData.SubEtat; webObj.R1_OffsetBX = r2obj.EventData.CollisionData?.OffsetBX; webObj.R1_OffsetBY = r2obj.EventData.CollisionData?.OffsetBY; webObj.R1_OffsetHY = r2obj.EventData.CollisionData?.OffsetHY; webObj.R1_HitPoints = r2obj.EventData.HitPoints; webObj.R1_DisplayPrio = r2obj.EventData.DisplayPrio; if (r2obj.AnimGroupIndex != -1) { webObj.R2_AnimGroupIndex = r2obj.AnimGroupIndex; if (includeLists) { webObj.R2_AnimGroupNames = r2obj.ObjManager.AnimGroups.Select(x => x.Pointer?.ToString() ?? "N/A").ToArray(); } } break; case Unity_Object_R1Jaguar r1jaguarObj: webObj.R1Jaguar_EventDefinitionIndex = r1jaguarObj.EventDefinitionIndex; webObj.R1Jaguar_ComplexState = r1jaguarObj.ComplexStateIndex; webObj.R1Jaguar_State = r1jaguarObj.StateIndex; if (includeLists) { webObj.R1Jaguar_EventDefinitionNames = r1jaguarObj.ObjManager.EventDefinitions.Select(x => x.DisplayName).ToArray(); } break; case Unity_Object_GBA gbaObj: webObj.GBA_ActorID = gbaObj.Actor.ActorID; webObj.GBA_Action = gbaObj.Actor.ActionIndex; if (gbaObj.ActorModelIndex != -1) { webObj.GBA_ActorModelIndex = gbaObj.ActorModelIndex; if (includeLists) { webObj.GBA_ActorModelNames = gbaObj.ObjManager.ActorModels.Select(x => x.DisplayName).ToArray(); } } break; case Unity_Object_GBAIsometricRHR rhrObj: webObj.GBAIsometric_AnimSetIndex = rhrObj.AnimSetIndex; if (includeLists) { webObj.GBAIsometric_AnimSetNames = rhrObj.ObjManager.AnimSets.Select(x => x.Name).ToArray(); } break; case Unity_Object_GBAIsometricSpyro spyroObj: if (spyroObj.AnimSetIndex != -1) { webObj.GBAIsometric_AnimSetIndex = spyroObj.AnimSetIndex; if (includeLists) { webObj.GBAIsometric_AnimSetNames = spyroObj.ObjManager.AnimSets.Select((x, i) => i.ToString()).ToArray(); } } break; case Unity_Object_GBAIsometricSpyro2_2D spyro2DObj: if (spyro2DObj.AnimSetIndex != -1) { webObj.GBAIsometric_AnimSetIndex = spyro2DObj.AnimSetIndex; if (includeLists) { webObj.GBAIsometric_AnimSetNames = spyro2DObj.ObjManager.AnimSets.Select((x, i) => i.ToString()).ToArray(); } } break; case Unity_Object_GBC gbcObj: webObj.GBC_XlateID = gbcObj.Actor.XlateID; if (gbcObj.ActorModelIndex != -1) { webObj.GBC_ActorModelIndex = gbcObj.ActorModelIndex; if (includeLists) { webObj.GBC_ActorModelNames = gbcObj.ObjManager.ActorModels.Select(x => x.Index.ToString()).ToArray(); } } break; case Unity_Object_GBARRR rrrObj: webObj.GBARRR_GraphicsIndex = (int)rrrObj.Object.P_GraphicsIndex; webObj.GBARRR_GraphicsKey = rrrObj.Object.Ushort_0C; if (rrrObj.AnimationGroupIndex != -1) { webObj.GBARRR_AnimationGroupIndex = rrrObj.AnimationGroupIndex; if (includeLists) { webObj.GBARRR_AnimationGroupNames = rrrObj.ObjManager.GraphicsDatas.Select((g, i) => i.ToString()).ToArray(); } } break; case Unity_Object_GBARRRMode7Unused rrrMode7UnusedObj: webObj.GBARRR_AnimationGroupIndex = rrrMode7UnusedObj.AnimationGroupIndex; if (includeLists) { webObj.GBARRR_AnimationGroupNames = rrrMode7UnusedObj.ObjManager.GraphicsDatas.Select((g, i) => g.BlockIndex.ToString()).ToArray(); } break; case Unity_Object_SNES snesObj: webObj.SNES_GraphicsGroupIndex = snesObj.GraphicsGroupIndex; if (includeLists) { webObj.SNES_GraphicsGroupNames = snesObj.ObjManager.GraphicsGroups.Select((g, i) => g.Name).ToArray(); } break; case Unity_Object_GBAVV crashObj: if (crashObj.ObjParams?.Any() == true) { webObj.GBAVV_ObjParams = Util.ByteArrayToHexString(crashObj.ObjParams); } if (crashObj.AnimSetIndex != -1) { webObj.GBAVV_AnimSetIndex = crashObj.AnimSetIndex; if (includeLists) { webObj.GBAVV_AnimSetNames = crashObj.ObjManager.AnimSets.Select((x, i) => i.ToString()).ToArray(); } } break; case Unity_Object_GBAVVMode7 crashObj: if (crashObj.AnimSetIndex != -1) { webObj.GBAVV_AnimSetIndex = crashObj.AnimSetIndex; if (includeLists) { webObj.GBAVV_AnimSetNames = crashObj.ObjManager.AnimSets.Select((x, i) => i.ToString()).ToArray(); } } break; } } return(webObj); }