Exemple #1
0
 public static void SetupButtons(Type type, object value, ReferenceChain refChain)
 {
     if (value is VehicleInfo)
     {
         var info = (VehicleInfo)value;
         if (info.m_mesh != null)
         {
             if (GUILayout.Button("Preview"))
             {
                 MeshViewer.CreateMeshViewer(info.name, info.m_mesh, info.m_material);
             }
         }
         if (info.m_lodMesh != null)
         {
             if (GUILayout.Button("Preview LOD"))
             {
                 MeshViewer.CreateMeshViewer(info.name + "_LOD", info.m_lodMesh, info.m_lodMaterial);
             }
         }
     }
     else if (value is NetInfo)
     {
         SetupPlopButton(value);
     }
     else if (value is BuildingInfo)
     {
         var info = (BuildingInfo)value;
         SetupPlopButton(value);
         if (info.m_mesh != null)
         {
             if (GUILayout.Button("Preview"))
             {
                 MeshViewer.CreateMeshViewer(info.name, info.m_mesh, info.m_material);
             }
         }
         if (info.m_lodMesh != null)
         {
             if (GUILayout.Button("Preview LOD"))
             {
                 MeshViewer.CreateMeshViewer(info.name + "_LOD", info.m_lodMesh, info.m_lodMaterial);
             }
         }
     }
     else if (value is PropInfo)
     {
         var info = (PropInfo)value;
         SetupPlopButton(value);
         if (info.m_mesh != null)
         {
             if (GUILayout.Button("Preview"))
             {
                 MeshViewer.CreateMeshViewer(info.name, info.m_mesh, info.m_material);
             }
         }
         if (info.m_lodMesh != null)
         {
             if (GUILayout.Button("Preview LOD"))
             {
                 MeshViewer.CreateMeshViewer(info.name + "_LOD", info.m_lodMesh, info.m_lodMaterial);
             }
         }
     }
     else if (value is TreeInfo)
     {
         var info = (TreeInfo)value;
         SetupPlopButton(value);
         if (info.m_mesh != null)
         {
             if (GUILayout.Button("Preview"))
             {
                 MeshViewer.CreateMeshViewer(info.name, info.m_mesh, info.m_material);
             }
         }
     }
     else if (value is CitizenInfo)
     {
         var info = (CitizenInfo)value;
         if (info.m_lodMesh != null)
         {
             if (GUILayout.Button("Preview LOD"))
             {
                 MeshViewer.CreateMeshViewer(info.name, info.m_lodMesh, info.m_lodMaterial);
             }
         }
     }
     else if (value is MilestoneInfo)
     {
         var info = (MilestoneInfo)value;
         if (GUILayout.Button("Unlock"))
         {
             var wrapper = new MilestonesWrapper(UnlockManager.instance);
             wrapper.UnlockMilestone(info.name);
         }
     }
     else if (value is NetInfo.Segment)
     {
         var info = (NetInfo.Segment)value;
         if (info.m_mesh != null)
         {
             if (GUILayout.Button("Preview"))
             {
                 MeshViewer.CreateMeshViewer(null, info.m_mesh, info.m_material);
             }
             if (GUILayout.Button("Preview LOD"))
             {
                 MeshViewer.CreateMeshViewer(null, info.m_lodMesh, info.m_lodMaterial);
             }
         }
     }
     else if (value is NetInfo.Node)
     {
         var info = (NetInfo.Node)value;
         if (info.m_mesh != null)
         {
             if (GUILayout.Button("Preview"))
             {
                 MeshViewer.CreateMeshViewer(null, info.m_mesh, info.m_material);
             }
             if (GUILayout.Button("Preview LOD"))
             {
                 MeshViewer.CreateMeshViewer(null, info.m_lodMesh, info.m_lodMaterial);
             }
         }
     }
     else if (TypeUtil.IsTextureType(type) && value != null)
     {
         var texture = (Texture)value;
         if (GUILayout.Button("Preview"))
         {
             TextureViewer.CreateTextureViewer(refChain, texture);
         }
         if (GUILayout.Button("Dump .png"))
         {
             TextureUtil.DumpTextureToPNG(texture);
         }
     }
     else if (TypeUtil.IsMeshType(type) && value != null)
     {
         if (GUILayout.Button("Preview"))
         {
             MeshViewer.CreateMeshViewer(null, (Mesh)value, null);
         }
         if (((Mesh)value).isReadable)
         {
             if (GUILayout.Button("Dump .obj"))
             {
                 var outPath = refChain.ToString().Replace(' ', '_');
                 DumpUtil.DumpMeshAndTextures(outPath, value as Mesh);
             }
         }
     }
     if (GUILayout.Button("Copy"))
     {
         _buffer = value;
     }
 }
        public static void SetupCommonButtons(ReferenceChain refChain, object value, uint valueIndex, TypeUtil.SmartType smartType = TypeUtil.SmartType.Undefined)
        {
            switch (value)
            {
            case null:
                if (GUILayout.Button("Watch"))
                {
                    MainWindow.Instance.Watches.AddWatch(refChain);
                }

                return;

            case PrefabInfo prefabInfo:
                SetupButtonsForPrefab(prefabInfo);
                break;

            case MilestoneInfo milestoneInfo:
                if (GUILayout.Button("Unlock"))
                {
                    var wrapper = new MilestonesWrapper(UnlockManager.instance);
                    wrapper.UnlockMilestone(milestoneInfo.name);
                }

                break;

            case NetInfo.Segment segmentInfo:
                SetupSegmentButtons(refChain, segmentInfo);
                break;

            case NetInfo.Node nodeInfo:
                SetupNodeButtons(refChain, nodeInfo);
                break;

            case BuildingInfo.MeshInfo buildingSumMeshInfo:
                SetupMeshPreviewButtons(
                    name: null,
                    buildingSumMeshInfo.m_subInfo?.m_mesh,
                    buildingSumMeshInfo.m_subInfo?.m_material,
                    buildingSumMeshInfo.m_subInfo?.m_lodMesh,
                    buildingSumMeshInfo.m_subInfo?.m_lodMaterial);
                break;

            case VehicleInfo.MeshInfo vehicleSumMeshInfo:
                SetupMeshPreviewButtons(
                    name: null,
                    vehicleSumMeshInfo.m_subInfo?.m_mesh,
                    vehicleSumMeshInfo.m_subInfo?.m_material,
                    vehicleSumMeshInfo.m_subInfo?.m_lodMesh,
                    vehicleSumMeshInfo.m_subInfo?.m_lodMaterial);
                break;

            case CitizenInstance instance
                when valueIndex > 0 &&
                (instance.m_flags & (CitizenInstance.Flags.Created | CitizenInstance.Flags.Deleted)) ==
                CitizenInstance.Flags.Created:

                InstanceID citizenInstanceInst = default;
                citizenInstanceInst.CitizenInstance = (ushort)valueIndex;
                SetupGotoButton(citizenInstanceInst, instance.GetLastFramePosition());
                break;

            case Citizen citizen when citizen.m_instance > 0:
                ref var citizenInstance = ref CitizenManager.instance.m_instances.m_buffer[citizen.m_instance];
                if ((citizenInstance.m_flags & (CitizenInstance.Flags.Created | CitizenInstance.Flags.Deleted)) ==
                    CitizenInstance.Flags.Created)
                {
                    InstanceID citizenInstanceInst2 = default;
                    citizenInstanceInst2.CitizenInstance = citizen.m_instance;
                    SetupGotoButton(citizenInstanceInst2, citizenInstance.GetLastFramePosition());
                }

                break;

            case Vehicle vehicle when valueIndex > 0 &&
                (vehicle.m_flags & (Vehicle.Flags.Created | Vehicle.Flags.Deleted)) ==
                Vehicle.Flags.Created:
                InstanceID vehicleInst = default;
                vehicleInst.Vehicle = (ushort)valueIndex;
                SetupGotoButton(vehicleInst, vehicle.GetLastFramePosition());
                break;

            case VehicleParked parkedVehicle when valueIndex > 0 && (parkedVehicle.m_flags & 3) == 1:
                InstanceID parkedVehicleInst = default;
                parkedVehicleInst.ParkedVehicle = (ushort)valueIndex;
                SetupGotoButton(parkedVehicleInst, parkedVehicle.m_position);
                break;

            case Building building when valueIndex > 0 &&
                (building.m_flags & (Building.Flags.Created | Building.Flags.Deleted)) ==
                Building.Flags.Created:
                InstanceID buildingInst = default;
                buildingInst.Building = (ushort)valueIndex;
                SetupGotoButton(buildingInst, building.m_position);
                break;

            case PropInstance prop when valueIndex > 0 &&
                ((PropInstance.Flags)prop.m_flags & (PropInstance.Flags.Created | PropInstance.Flags.Deleted)) ==
                PropInstance.Flags.Created:
                InstanceID propInst = default;
                propInst.Prop = (ushort)valueIndex;
                SetupGotoButton(propInst, prop.Position);
                break;

            case TreeInstance tree when valueIndex > 0 &&
                ((TreeInstance.Flags)tree.m_flags & (TreeInstance.Flags.Created | TreeInstance.Flags.Deleted)) ==
                TreeInstance.Flags.Created:
                InstanceID treeInst = default;
                treeInst.Tree = valueIndex;
                SetupGotoButton(treeInst, tree.Position);
                break;

            case NetSegment segment when valueIndex > 0 &&
                (segment.m_flags &
                 (NetSegment.Flags.Created | NetSegment.Flags.Deleted)) ==
                NetSegment.Flags.Created:
                InstanceID segmentInst = default;
                segmentInst.NetSegment = (ushort)valueIndex;
                SetupGotoButton(segmentInst, segment.m_middlePosition);
                break;

            case NetNode node when valueIndex > 0 &&
                (node.m_flags & (NetNode.Flags.Created | NetNode.Flags.Deleted)) ==
                NetNode.Flags.Created:
                InstanceID nodeInst = default;
                nodeInst.NetNode = (ushort)valueIndex;
                SetupGotoButton(nodeInst, node.m_position);
                break;

            case NetLane lane when valueIndex > 0 &&
                ((NetLane.Flags)lane.m_flags & (NetLane.Flags.Created | NetLane.Flags.Deleted)) ==
                NetLane.Flags.Created:
                InstanceID segmentInst1 = default;
                segmentInst1.NetSegment = lane.m_segment;
                var segment1 = NetManager.instance.m_segments.m_buffer[lane.m_segment];
                SetupGotoButton(segmentInst1, segment1.m_middlePosition);
                break;

            case Texture texture:
                SetupTextureButtons(texture);
                break;

            case UITextureAtlas.SpriteInfo spriteInfo:
                SetupTextureButtons(spriteInfo.texture);
                break;

            case UITextureSprite textureSprite:
                SetupTextureButtons(textureSprite.texture);
                break;

            case Mesh mesh:
                SetupMeshButtons(refChain, mesh);
                break;
            }

            SetupSmartShowButtons(value, smartType);
            if (GUILayout.Button("Watch"))
            {
                MainWindow.Instance.Watches.AddWatch(refChain);
            }

            if (GUILayout.Button("Copy"))
            {
                buffer = value;
            }
        }