From a251eeaed5aca53d601f9475f60dc71becacadfb Mon Sep 17 00:00:00 2001 From: Jan Racek Date: Sat, 28 Mar 2026 01:32:36 +0100 Subject: [PATCH] more fixes --- Data.meta | 8 +++++ Data/SPLASHLICENSE.DAT | Bin 0 -> 28032 bytes Data/SPLASHLICENSE.DAT.meta | 7 ++++ Editor/Core/SplashBuildPaths.cs | 7 ++++ Editor/Core/SplashSettings.cs | 2 +- Editor/Inspectors/PSXComponentEditors.cs | 40 ++++++++++++++++------ Editor/Inspectors/PSXComponentEditors2.cs | 3 ++ Editor/PSXObjectExporterEditor.cs | 2 +- Runtime/PSXAudioClip.cs | 2 +- Runtime/PSXInteractable.cs | 34 ++++++++---------- Runtime/PSXSceneExporter.cs | 1 - Runtime/PSXSceneWriter.cs | 27 ++++++--------- Runtime/SceneMemoryAnalyzer.cs | 3 -- 13 files changed, 83 insertions(+), 53 deletions(-) create mode 100644 Data.meta create mode 100644 Data/SPLASHLICENSE.DAT create mode 100644 Data/SPLASHLICENSE.DAT.meta diff --git a/Data.meta b/Data.meta new file mode 100644 index 0000000..04215d2 --- /dev/null +++ b/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7e9b1c3e60e2ff48be3cd61902ba6f1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Data/SPLASHLICENSE.DAT b/Data/SPLASHLICENSE.DAT new file mode 100644 index 0000000000000000000000000000000000000000..e480cc986340fdc188016052a2dfa6b5bf319efa GIT binary patch literal 28032 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 literal 0 HcmV?d00001 diff --git a/Data/SPLASHLICENSE.DAT.meta b/Data/SPLASHLICENSE.DAT.meta new file mode 100644 index 0000000..5701751 --- /dev/null +++ b/Data/SPLASHLICENSE.DAT.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 244f6913a02805e4aa3cebdd1240cab7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Core/SplashBuildPaths.cs b/Editor/Core/SplashBuildPaths.cs index bf3bc15..4f034ff 100644 --- a/Editor/Core/SplashBuildPaths.cs +++ b/Editor/Core/SplashBuildPaths.cs @@ -109,6 +109,13 @@ namespace SplashEdit.EditorCode return Path.Combine(BuildOutputDir, $"scene_{sceneIndex}.splashpack"); } + /// + /// Default license file path (SPLASHLICENSE.DAT) shipped in the package Data folder. + /// Resolved relative to the Unity project so it works on any machine. + /// + public static string DefaultLicenseFilePath => + Path.GetFullPath(Path.Combine("Packages", "net.psxsplash.splashedit", "Data", "SPLASHLICENSE.DAT")); + /// /// Gets the loader pack (loading screen) output path for a scene by index. /// Uses a deterministic naming scheme: scene_0.loading, scene_1.loading, etc. diff --git a/Editor/Core/SplashSettings.cs b/Editor/Core/SplashSettings.cs index 821d6d9..14928a7 100644 --- a/Editor/Core/SplashSettings.cs +++ b/Editor/Core/SplashSettings.cs @@ -151,7 +151,7 @@ namespace SplashEdit.EditorCode /// public static string LicenseFilePath { - get => EditorPrefs.GetString(Prefix + "LicenseFilePath", ""); + get => EditorPrefs.GetString(Prefix + "LicenseFilePath", SplashBuildPaths.DefaultLicenseFilePath); set => EditorPrefs.SetString(Prefix + "LicenseFilePath", value); } diff --git a/Editor/Inspectors/PSXComponentEditors.cs b/Editor/Inspectors/PSXComponentEditors.cs index 573245d..1fad0aa 100644 --- a/Editor/Inspectors/PSXComponentEditors.cs +++ b/Editor/Inspectors/PSXComponentEditors.cs @@ -12,21 +12,21 @@ namespace SplashEdit.EditorCode { private bool _interactionFoldout = true; private bool _advancedFoldout = false; - + private SerializedProperty _interactionRadius; private SerializedProperty _interactButton; private SerializedProperty _isRepeatable; private SerializedProperty _cooldownFrames; private SerializedProperty _showPrompt; + private SerializedProperty _promptCanvasName; private SerializedProperty _requireLineOfSight; - private SerializedProperty _interactionOffset; - - private static readonly string[] ButtonNames = + + private static readonly string[] ButtonNames = { "Select", "L3", "R3", "Start", "Up", "Right", "Down", "Left", "L2", "R2", "L1", "R1", "Triangle", "Circle", "Cross", "Square" }; - + private void OnEnable() { _interactionRadius = serializedObject.FindProperty("interactionRadius"); @@ -34,10 +34,10 @@ namespace SplashEdit.EditorCode _isRepeatable = serializedObject.FindProperty("isRepeatable"); _cooldownFrames = serializedObject.FindProperty("cooldownFrames"); _showPrompt = serializedObject.FindProperty("showPrompt"); + _promptCanvasName = serializedObject.FindProperty("promptCanvasName"); _requireLineOfSight = serializedObject.FindProperty("requireLineOfSight"); - _interactionOffset = serializedObject.FindProperty("interactionOffset"); } - + public override void OnInspectorGUI() { serializedObject.Update(); @@ -76,15 +76,35 @@ namespace SplashEdit.EditorCode EditorGUI.indentLevel--; } - EditorGUILayout.PropertyField(_showPrompt); + EditorGUILayout.Space(4); + + EditorGUILayout.PropertyField(_showPrompt, new GUIContent("Show Prompt Canvas")); + + if (_showPrompt.boolValue) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(_promptCanvasName, new GUIContent("Canvas Name")); + if (string.IsNullOrEmpty(_promptCanvasName.stringValue)) + { + EditorGUILayout.HelpBox( + "Enter the name of a PSXCanvas that will be shown when the player is in range and hidden when they leave.", + MessageType.Info); + } + if (_promptCanvasName.stringValue != null && _promptCanvasName.stringValue.Length > 15) + { + EditorGUILayout.HelpBox("Canvas name is limited to 15 characters.", MessageType.Warning); + } + EditorGUI.indentLevel--; + } }); EditorGUILayout.Space(2); _advancedFoldout = PSXEditorStyles.DrawFoldoutCard("Advanced", _advancedFoldout, () => { - EditorGUILayout.PropertyField(_requireLineOfSight); - EditorGUILayout.PropertyField(_interactionOffset); + EditorGUILayout.PropertyField(_requireLineOfSight, + new GUIContent("Require Facing", + "Player must be facing the object to interact. Uses a forward-direction check.")); }); EditorGUILayout.Space(4); diff --git a/Editor/Inspectors/PSXComponentEditors2.cs b/Editor/Inspectors/PSXComponentEditors2.cs index 2c7dda6..36cc9fa 100644 --- a/Editor/Inspectors/PSXComponentEditors2.cs +++ b/Editor/Inspectors/PSXComponentEditors2.cs @@ -1,3 +1,6 @@ +// I raged that my scrollwheel was broken while writing this and that's why it's 2 files. + + using UnityEngine; using UnityEditor; using SplashEdit.RuntimeCode; diff --git a/Editor/PSXObjectExporterEditor.cs b/Editor/PSXObjectExporterEditor.cs index 40224e9..1e3b61b 100644 --- a/Editor/PSXObjectExporterEditor.cs +++ b/Editor/PSXObjectExporterEditor.cs @@ -158,7 +158,7 @@ namespace SplashEdit.EditorCode if (collType == PSXCollisionType.Static) { EditorGUILayout.LabelField( - "Baked into world collision mesh. No runtime cost.", + "Only bakes holes in the navregions", PSXEditorStyles.RichLabel); } else if (collType == PSXCollisionType.Dynamic) diff --git a/Runtime/PSXAudioClip.cs b/Runtime/PSXAudioClip.cs index a52ba5f..61206e7 100644 --- a/Runtime/PSXAudioClip.cs +++ b/Runtime/PSXAudioClip.cs @@ -18,7 +18,7 @@ namespace SplashEdit.RuntimeCode /// At export time, the AudioClip is converted to SPU ADPCM and packed /// into the splashpack for runtime loading. /// - [AddComponentMenu("PSX/Audio Clip")] + [AddComponentMenu("PSX/PSX Audio Clip")] [Icon("Packages/net.psxsplash.splashedit/Icons/PSXAudioClip.png")] public class PSXAudioClip : MonoBehaviour { diff --git a/Runtime/PSXInteractable.cs b/Runtime/PSXInteractable.cs index 00b8401..92b76f0 100644 --- a/Runtime/PSXInteractable.cs +++ b/Runtime/PSXInteractable.cs @@ -14,25 +14,25 @@ namespace SplashEdit.RuntimeCode [Header("Interaction Settings")] [Tooltip("Distance within which the player can interact with this object")] [SerializeField] private float interactionRadius = 2.0f; - + [Tooltip("Button that triggers interaction (0-15, matches PS1 button mapping)")] - [SerializeField] private int interactButton = 5; // Default to Cross button - + [SerializeField] private int interactButton = 14; // Default to Cross button + [Tooltip("Can this object be interacted with multiple times?")] [SerializeField] private bool isRepeatable = true; - + [Tooltip("Cooldown between interactions (in frames, 60 = 1 second at NTSC)")] [SerializeField] private ushort cooldownFrames = 30; - - [Tooltip("Show interaction prompt when in range (requires UI system)")] - [SerializeField] private bool showPrompt = true; - + + [Tooltip("Show a UI canvas when the player is in range")] + [SerializeField] private bool showPrompt = false; + + [Tooltip("Name of the PSXCanvas to show when the player is in range")] + [SerializeField] private string promptCanvasName = ""; + [Header("Advanced")] - [Tooltip("Require line-of-sight to player for interaction")] + [Tooltip("Require the player to be facing this object to interact")] [SerializeField] private bool requireLineOfSight = false; - - [Tooltip("Custom interaction point offset from object center")] - [SerializeField] private Vector3 interactionOffset = Vector3.zero; // Public accessors for export public float InteractionRadius => interactionRadius; @@ -40,23 +40,19 @@ namespace SplashEdit.RuntimeCode public bool IsRepeatable => isRepeatable; public ushort CooldownFrames => cooldownFrames; public bool ShowPrompt => showPrompt; + public string PromptCanvasName => promptCanvasName; public bool RequireLineOfSight => requireLineOfSight; - public Vector3 InteractionOffset => interactionOffset; private void OnDrawGizmosSelected() { // Draw interaction radius Gizmos.color = new Color(1f, 1f, 0f, 0.3f); // Yellow, semi-transparent - Vector3 center = transform.position + interactionOffset; + Vector3 center = transform.position; Gizmos.DrawWireSphere(center, interactionRadius); - + // Draw filled sphere with lower alpha Gizmos.color = new Color(1f, 1f, 0f, 0.1f); Gizmos.DrawSphere(center, interactionRadius); - - // Draw interaction point - Gizmos.color = Color.yellow; - Gizmos.DrawSphere(center, 0.1f); } } } diff --git a/Runtime/PSXSceneExporter.cs b/Runtime/PSXSceneExporter.cs index 0b7f8e8..6151e0b 100644 --- a/Runtime/PSXSceneExporter.cs +++ b/Runtime/PSXSceneExporter.cs @@ -311,7 +311,6 @@ namespace SplashEdit.RuntimeCode atlases = _atlases, interactables = _interactables, audioClips = audioExports, - collisionExporter = _collisionExporter, navRegionBuilder = _navRegionBuilder, roomBuilder = _roomBuilder, bvh = _bvh, diff --git a/Runtime/PSXSceneWriter.cs b/Runtime/PSXSceneWriter.cs index 09e9145..4355184 100644 --- a/Runtime/PSXSceneWriter.cs +++ b/Runtime/PSXSceneWriter.cs @@ -22,7 +22,6 @@ namespace SplashEdit.RuntimeCode public TextureAtlas[] atlases; public PSXInteractable[] interactables; public AudioClipExport[] audioClips; - public PSXCollisionExporter collisionExporter; public PSXNavRegionBuilder navRegionBuilder; public PSXRoomBuilder roomBuilder; public BVH bvh; @@ -169,8 +168,8 @@ namespace SplashEdit.RuntimeCode writer.Write((ushort)scene.sceneType); writer.Write((ushort)triggerBoxCount); // was pad0 - writer.Write((ushort)scene.collisionExporter.MeshCount); - writer.Write((ushort)scene.collisionExporter.TriangleCount); + writer.Write((ushort)0); // collisionMeshCount (removed, kept for binary compat) + writer.Write((ushort)0); // collisionTriCount (removed, kept for binary compat) writer.Write((ushort)scene.navRegionBuilder.RegionCount); writer.Write((ushort)scene.navRegionBuilder.PortalCount); @@ -342,7 +341,7 @@ namespace SplashEdit.RuntimeCode scene.bvh.WriteToBinary(writer, gte); // ────────────────────────────────────────────────────── - // Interactable components (24 bytes each) + // Interactable components (28 bytes each) // ────────────────────────────────────────────────────── AlignToFourBytes(writer); foreach (PSXInteractable interactable in scene.interactables) @@ -353,11 +352,6 @@ namespace SplashEdit.RuntimeCode float radiusSq = interactable.InteractionRadius * interactable.InteractionRadius; writer.Write(PSXTrig.ConvertWorldToFixed12(radiusSq / (gte * gte))); - Vector3 offset = interactable.InteractionOffset; - writer.Write(PSXTrig.ConvertWorldToFixed12(offset.x / gte)); - writer.Write(PSXTrig.ConvertWorldToFixed12(-offset.y / gte)); - writer.Write(PSXTrig.ConvertWorldToFixed12(offset.z / gte)); - writer.Write((byte)interactable.InteractButton); byte flags = 0; if (interactable.IsRepeatable) flags |= 0x01; @@ -368,15 +362,14 @@ namespace SplashEdit.RuntimeCode writer.Write((ushort)0); // currentCooldown (runtime) writer.Write((ushort)goIndex); - } - // ────────────────────────────────────────────────────── - // World collision soup (version 7+) - // ────────────────────────────────────────────────────── - if (scene.collisionExporter.MeshCount > 0) - { - AlignToFourBytes(writer); - scene.collisionExporter.WriteToBinary(writer, gte); + // Prompt canvas name (16 bytes, null-terminated, zero-padded) + string canvasName = interactable.PromptCanvasName ?? ""; + byte[] nameBytes = new byte[16]; + int len = System.Math.Min(canvasName.Length, 15); + for (int ci = 0; ci < len; ci++) + nameBytes[ci] = (byte)canvasName[ci]; + writer.Write(nameBytes); } // ────────────────────────────────────────────────────── diff --git a/Runtime/SceneMemoryAnalyzer.cs b/Runtime/SceneMemoryAnalyzer.cs index 5a86fb8..5fd579e 100644 --- a/Runtime/SceneMemoryAnalyzer.cs +++ b/Runtime/SceneMemoryAnalyzer.cs @@ -114,9 +114,6 @@ namespace SplashEdit.RuntimeCode // ---- Interactable section ---- report.interactableBytes = (long)scene.interactables.Length * BytesPerInteractable; - // ---- Collision soup ---- - report.collisionBytes = EstimateCollisionSize(scene.collisionExporter); - // ---- Nav region data ---- report.navRegionBytes = EstimateNavRegionSize(scene.navRegionBuilder);