From d1c734f07811c3fb52d62ca24f0980ed4e65e23a Mon Sep 17 00:00:00 2001 From: jracek Date: Mon, 13 Jan 2025 19:59:41 +0100 Subject: [PATCH] Recursive calling of ObjectExporters from a SceneExporter, icons --- .gitattributes | 96 +++ .gitignore | 551 ++++++++++++++++++ Editor.meta | 8 + Editor/PSXObjectExporterEditor.cs | 19 + Editor/PSXObjectExporterEditor.cs.meta | 2 + Editor/PSXSceneExporterEditor.cs | 17 + Editor/PSXSceneExporterEditor.cs.meta | 2 + Editor/net.psxsplash.splashedit.Editor.asmdef | 16 + ...et.psxsplash.splashedit.Editor.asmdef.meta | 7 + Icons.meta | 8 + Icons/PSXSObjectExporter.png | Bin 0 -> 6839 bytes Icons/PSXSObjectExporter.png.meta | 130 +++++ Icons/PSXSceneExporter.png | Bin 0 -> 8210 bytes Icons/PSXSceneExporter.png.meta | 130 +++++ Runtime.meta | 8 + Runtime/PSXObjectExporter.cs | 13 + Runtime/PSXObjectExporter.cs.meta | 11 + Runtime/PSXSceneExporter.cs | 40 ++ Runtime/PSXSceneExporter.cs.meta | 11 + .../net.psxsplash.splashedit.Runtime.asmdef | 14 + ...t.psxsplash.splashedit.Runtime.asmdef.meta | 7 + package.json | 8 + package.json.meta | 7 + 23 files changed, 1105 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Editor.meta create mode 100644 Editor/PSXObjectExporterEditor.cs create mode 100644 Editor/PSXObjectExporterEditor.cs.meta create mode 100644 Editor/PSXSceneExporterEditor.cs create mode 100644 Editor/PSXSceneExporterEditor.cs.meta create mode 100644 Editor/net.psxsplash.splashedit.Editor.asmdef create mode 100644 Editor/net.psxsplash.splashedit.Editor.asmdef.meta create mode 100644 Icons.meta create mode 100644 Icons/PSXSObjectExporter.png create mode 100644 Icons/PSXSObjectExporter.png.meta create mode 100644 Icons/PSXSceneExporter.png create mode 100644 Icons/PSXSceneExporter.png.meta create mode 100644 Runtime.meta create mode 100644 Runtime/PSXObjectExporter.cs create mode 100644 Runtime/PSXObjectExporter.cs.meta create mode 100644 Runtime/PSXSceneExporter.cs create mode 100644 Runtime/PSXSceneExporter.cs.meta create mode 100644 Runtime/net.psxsplash.splashedit.Runtime.asmdef create mode 100644 Runtime/net.psxsplash.splashedit.Runtime.asmdef.meta create mode 100644 package.json create mode 100644 package.json.meta diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4a62547 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,96 @@ +# +# Auto Generated +# + +# Other +*.pdf filter=lfs diff=lfs merge=lfs -text +# Unity Binary Assets +*.cubemap filter=lfs diff=lfs merge=lfs -text +*.unitypackage filter=lfs diff=lfs merge=lfs -text +# Executables +*.exe filter=lfs diff=lfs merge=lfs -text +*.dll filter=lfs diff=lfs merge=lfs -text +*.so filter=lfs diff=lfs merge=lfs -text +*.pdb filter=lfs diff=lfs merge=lfs -text +*.mdb filter=lfs diff=lfs merge=lfs -text +# Packaging +*.zip filter=lfs diff=lfs merge=lfs -text +*.7z filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +# 3D +*.fbx filter=lfs diff=lfs merge=lfs -text +*.blend filter=lfs diff=lfs merge=lfs -text +# Image +*.hdr filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.apng filter=lfs diff=lfs merge=lfs -text +*.atsc filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.bmp filter=lfs diff=lfs merge=lfs -text +*.exr filter=lfs diff=lfs merge=lfs -text +*.tga filter=lfs diff=lfs merge=lfs -text +*.tiff filter=lfs diff=lfs merge=lfs -text +*.tif filter=lfs diff=lfs merge=lfs -text +*.iff filter=lfs diff=lfs merge=lfs -text +*.pict filter=lfs diff=lfs merge=lfs -text +*.dds filter=lfs diff=lfs merge=lfs -text +*.xcf filter=lfs diff=lfs merge=lfs -text +*.leo filter=lfs diff=lfs merge=lfs -text +*.kra filter=lfs diff=lfs merge=lfs -text +*.kpp filter=lfs diff=lfs merge=lfs -text +*.clip filter=lfs diff=lfs merge=lfs -text +*.webm filter=lfs diff=lfs merge=lfs -text +*.webp filter=lfs diff=lfs merge=lfs -text +*.psd filter=lfs diff=lfs merge=lfs -text +*.afphoto filter=lfs diff=lfs merge=lfs -text +*.afdesign filter=lfs diff=lfs merge=lfs -text +# Audio +*.mp3 filter=lfs diff=lfs merge=lfs -text +*.ogg filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text +*.aiff filter=lfs diff=lfs merge=lfs -text +*.aif filter=lfs diff=lfs merge=lfs -text +*.mod filter=lfs diff=lfs merge=lfs -text +*.it filter=lfs diff=lfs merge=lfs -text +*.s3m filter=lfs diff=lfs merge=lfs -text +*.xm filter=lfs diff=lfs merge=lfs -text +# Video +*.mov filter=lfs diff=lfs merge=lfs -text +*.avi filter=lfs diff=lfs merge=lfs -text +*.asf filter=lfs diff=lfs merge=lfs -text +*.mpg filter=lfs diff=lfs merge=lfs -text +*.mpeg filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text +*.flv filter=lfs diff=lfs merge=lfs -text +*.ogv filter=lfs diff=lfs merge=lfs -text +*.wmv filter=lfs diff=lfs merge=lfs -text +# Unity-Specific +* text=auto + +# Some assets such as lighting data, nav meshes, etc will always be binary, +# as will anything with [PreferBinarySerialization] +# (Even if you force it to text mode serialization) +# Meaning autoCRLF on git will fuck up your project. +*.asset auto +TimeManager.asset -text + +# +# The following should be text to allow git merges +# + +*.anim text +*.controller text +*.mat text +*.meta text +*.physicsMaterial text +*.physicsMaterial2D text +*.prefab text +*.unity text +*.preset text +*.lfs_test filter=lfs diff=lfs merge=lfs -text + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3b21346 --- /dev/null +++ b/.gitignore @@ -0,0 +1,551 @@ +# Originally Created by https://www.gitignore.io/api/git,unity,macos,csharp,windows,visualstudio,visualstudiocode + +### Csharp ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs +.vsconfig + +# Mono auto generated files +mono_crash.* + +# Build results +/[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +/x64/ +/x86/ +/[Aa][Rr][Mm]/ +/[Aa][Rr][Mm]64/ +bld/ +/[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +#**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +### Git ### +# Created by git for backups. To disable backups in Git: +# $ git config --global mergetool.keepBackup false +*.orig + +# Created by git when using merge tools for conflicts +*.BACKUP.* +*.BASE.* +*.LOCAL.* +*.REMOTE.* +*_BACKUP_*.txt +*_BASE_*.txt +*_LOCAL_*.txt +*_REMOTE_*.txt + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# MemoryCaptures can get excessive in size. +# They also could contain extremely sensitive data +/[Mm]emoryCaptures/ + +# Asset meta data should only be ignored when the corresponding asset is also ignored +#!/[Aa]ssets/**/*.meta +#[Aa]ssets/**/csc.* + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +/[Aa]ssets/Plugins/Editor/JetBrains* + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db +*.idea + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Builds +*.apk +*.unitypackage + +# Crashlytics generated file +crashlytics-build.properties + +# Packed Addressables +/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* + +# Temporary auto-generated Android Assets +/[Aa]ssets/[Ss]treamingAssets/aa.meta +/[Aa]ssets/[Ss]treamingAssets/aa/* + + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + + +#==================================================================== +#============================== UNITY =============================== +#==================================================================== + + +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore +# +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Uu]ser[Ss]ettings/ + +#==================================================================== +#=========================== VS / VS CODE =========================== +#==================================================================== + +# VSCode +*.suo +*.userosscache +*.sln.docstates +*.user +*.rsuser + +#==================================================================== +#============================= BLENDER ============================== +#==================================================================== + +*.blend[123456789] +*.blend[123456789].meta + +#==================================================================== +#========================== UNITY PLUGINS =========================== +#==================================================================== + +# BAKERY + +# Fuckit, we'll have to rebuild them +*/BakeryLightmaps/* +/Assets/BakeryLightmaps.meta + +# Obnoxious cache files that change a lot +/Assets/Plugins/Bakery/ftGlobalStorage.asset +/Assets/Plugins/Bakery/ftGlobalStorage.asset.meta +/Assets/Plugins/Bakery/ftLocalStorage.asset +/Assets/Plugins/Bakery/ftLocalStorage.asset.meta + +#==================================================================== +#======================== GENERAL PURPOSE =========================== +#==================================================================== + + +# Deliberate Exclusions: +# Note: needs a pattern for .meta files too (unless this is a root only thing) +/exclude/ +/exclude_*/* + +# Global ignore +**/#vcignore/ +**/#vcignore.meta + + diff --git a/Editor.meta b/Editor.meta new file mode 100644 index 0000000..9c8784b --- /dev/null +++ b/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d64fb2a2412d7958ca13d15956c4182b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/PSXObjectExporterEditor.cs b/Editor/PSXObjectExporterEditor.cs new file mode 100644 index 0000000..7dbb41e --- /dev/null +++ b/Editor/PSXObjectExporterEditor.cs @@ -0,0 +1,19 @@ +using UnityEngine; +using UnityEditor; +using PSXSplash.Runtime; + +[CustomEditor(typeof(PSXObjectExporter))] +public class PSXObjectExporterEditor : Editor +{ + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + DrawDefaultInspector(); + + PSXObjectExporter comp = (PSXObjectExporter)target; + if (GUILayout.Button("Export")) + { + comp.Export(); + } + } +} diff --git a/Editor/PSXObjectExporterEditor.cs.meta b/Editor/PSXObjectExporterEditor.cs.meta new file mode 100644 index 0000000..a2dcc29 --- /dev/null +++ b/Editor/PSXObjectExporterEditor.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 89b9844e599dd374098ec6168f0de0b0 \ No newline at end of file diff --git a/Editor/PSXSceneExporterEditor.cs b/Editor/PSXSceneExporterEditor.cs new file mode 100644 index 0000000..bf6721a --- /dev/null +++ b/Editor/PSXSceneExporterEditor.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using UnityEditor; +using PSXSplash.Runtime; + +[CustomEditor(typeof(PSXSceneExporter))] +public class PSXSceneExporterEditor : Editor { + public override void OnInspectorGUI() { + base.OnInspectorGUI(); + DrawDefaultInspector(); + + PSXSceneExporter comp = (PSXSceneExporter)target; + if(GUILayout.Button("Export")) { + comp.Export(); + } + + } +} \ No newline at end of file diff --git a/Editor/PSXSceneExporterEditor.cs.meta b/Editor/PSXSceneExporterEditor.cs.meta new file mode 100644 index 0000000..81f6257 --- /dev/null +++ b/Editor/PSXSceneExporterEditor.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: becf2eb607e7a60baaf3bebe4683d66f \ No newline at end of file diff --git a/Editor/net.psxsplash.splashedit.Editor.asmdef b/Editor/net.psxsplash.splashedit.Editor.asmdef new file mode 100644 index 0000000..f9fc32e --- /dev/null +++ b/Editor/net.psxsplash.splashedit.Editor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "net.psxplash.splashedit.Editor", + "rootNamespace": "", + "references": [ + "net.psxsplash.splashedit.Runtime" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Editor/net.psxsplash.splashedit.Editor.asmdef.meta b/Editor/net.psxsplash.splashedit.Editor.asmdef.meta new file mode 100644 index 0000000..88082a4 --- /dev/null +++ b/Editor/net.psxsplash.splashedit.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7e3500b5974da9723bdd0d457348ea2d +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Icons.meta b/Icons.meta new file mode 100644 index 0000000..3ac132a --- /dev/null +++ b/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab7e1dbd79d3e1101b7d44cdf06a2991 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Icons/PSXSObjectExporter.png b/Icons/PSXSObjectExporter.png new file mode 100644 index 0000000000000000000000000000000000000000..7dbfda722071afe9486d6fe587e92f6d3d936c06 GIT binary patch literal 6839 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 literal 0 HcmV?d00001 diff --git a/Icons/PSXSceneExporter.png.meta b/Icons/PSXSceneExporter.png.meta new file mode 100644 index 0000000..9580ffa --- /dev/null +++ b/Icons/PSXSceneExporter.png.meta @@ -0,0 +1,130 @@ +fileFormatVersion: 2 +guid: 0be7a2d4700082dbc83b9274837c70bc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime.meta b/Runtime.meta new file mode 100644 index 0000000..57f552a --- /dev/null +++ b/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 49f302f0a6255c06c8e340024aa43f45 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/PSXObjectExporter.cs b/Runtime/PSXObjectExporter.cs new file mode 100644 index 0000000..3809855 --- /dev/null +++ b/Runtime/PSXObjectExporter.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace PSXSplash.Runtime +{ + public class PSXObjectExporter : MonoBehaviour + { + public void Export() + { + Debug.Log($"Export: {this.name}"); + } + } +} + diff --git a/Runtime/PSXObjectExporter.cs.meta b/Runtime/PSXObjectExporter.cs.meta new file mode 100644 index 0000000..4ebe016 --- /dev/null +++ b/Runtime/PSXObjectExporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bea0f31a495202580ac77bd9fd6e99f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: e11677149a517ca5186e32dfda3ec088, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/PSXSceneExporter.cs b/Runtime/PSXSceneExporter.cs new file mode 100644 index 0000000..28fbc5e --- /dev/null +++ b/Runtime/PSXSceneExporter.cs @@ -0,0 +1,40 @@ +using UnityEditor; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace PSXSplash.Runtime +{ + public class PSXSceneExporter : MonoBehaviour + { + public void Export() + { + Debug.Log($"Exporting scene: {SceneManager.GetActiveScene().name}"); + + Scene activeScene = SceneManager.GetActiveScene(); + foreach (GameObject obj in activeScene.GetRootGameObjects()) + { + ExportAllPSXExporters(obj.transform); + } + } + + void ExportAllPSXExporters(Transform parentTransform) + { + PSXObjectExporter exporter = parentTransform.GetComponent(); + + if (exporter != null) + { + exporter.Export(); + } + + foreach (Transform child in parentTransform) + { + ExportAllPSXExporters(child); + } + } + + void OnDrawGizmos() + { + Gizmos.DrawIcon(transform.position, "Packages/net.psxsplash.splashedit/Icons/PSXSceneExporter.png", true); + } + } +} diff --git a/Runtime/PSXSceneExporter.cs.meta b/Runtime/PSXSceneExporter.cs.meta new file mode 100644 index 0000000..3cf8f3c --- /dev/null +++ b/Runtime/PSXSceneExporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab5195ad94fd173cfb6d48ee06eaf245 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 0be7a2d4700082dbc83b9274837c70bc, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/net.psxsplash.splashedit.Runtime.asmdef b/Runtime/net.psxsplash.splashedit.Runtime.asmdef new file mode 100644 index 0000000..453360d --- /dev/null +++ b/Runtime/net.psxsplash.splashedit.Runtime.asmdef @@ -0,0 +1,14 @@ +{ + "name": "net.psxsplash.splashedit.Runtime", + "rootNamespace": "", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Runtime/net.psxsplash.splashedit.Runtime.asmdef.meta b/Runtime/net.psxsplash.splashedit.Runtime.asmdef.meta new file mode 100644 index 0000000..3ea92ec --- /dev/null +++ b/Runtime/net.psxsplash.splashedit.Runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1afaf17520143848ea52af093808349d +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/package.json b/package.json new file mode 100644 index 0000000..32f2624 --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "name": "net.psxsplash.splashedit", + "version": "1.0.0", + "displayName": "Splashedit", + "description": "A toolkit for PSX asset management within Unity", + "unity": "6000.0" + } + \ No newline at end of file diff --git a/package.json.meta b/package.json.meta new file mode 100644 index 0000000..d70bd40 --- /dev/null +++ b/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4ce4c77cd43204cf8bdfca08c2b66f83 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: