Exemple #1
0
    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();
    }
Exemple #2
0
    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();
        }
    }
Exemple #3
0
    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));
                }
            }
        }
    }
Exemple #4
0
    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();
    }
Exemple #5
0
    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));
        }
    }
Exemple #6
0
    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);
    }