diff --git a/.gitignore b/.gitignore index 16431d81..92079cc0 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,7 @@ # Visual Studio cache directory .vs/ +.vscode/ .idea/ # Gradle cache directory diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..ddb6ff85 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "visualstudiotoolsforunity.vstuc" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..da60e25a --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,10 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to Unity", + "type": "vstuc", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..6b1418b6 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,72 @@ +{ + "files.exclude": { + "**/.DS_Store": true, + "**/.git": true, + "**/.vs": true, + "**/.gitmodules": true, + "**/.vsconfig": true, + "**/*.booproj": true, + "**/*.pidb": true, + "**/*.suo": true, + "**/*.user": true, + "**/*.userprefs": true, + "**/*.unityproj": true, + "**/*.dll": true, + "**/*.exe": true, + "**/*.pdf": true, + "**/*.mid": true, + "**/*.midi": true, + "**/*.wav": true, + "**/*.gif": true, + "**/*.ico": true, + "**/*.jpg": true, + "**/*.jpeg": true, + "**/*.png": true, + "**/*.psd": true, + "**/*.tga": true, + "**/*.tif": true, + "**/*.tiff": true, + "**/*.3ds": true, + "**/*.3DS": true, + "**/*.fbx": true, + "**/*.FBX": true, + "**/*.lxo": true, + "**/*.LXO": true, + "**/*.ma": true, + "**/*.MA": true, + "**/*.obj": true, + "**/*.OBJ": true, + "**/*.asset": true, + "**/*.cubemap": true, + "**/*.flare": true, + "**/*.mat": true, + "**/*.meta": true, + "**/*.prefab": true, + "**/*.unity": true, + "build/": true, + "Build/": true, + "Library/": true, + "library/": true, + "obj/": true, + "Obj/": true, + "Logs/": true, + "logs/": true, + "ProjectSettings/": true, + "UserSettings/": true, + "temp/": true, + "Temp/": true + }, + "files.associations": { + "*.asset": "yaml", + "*.meta": "yaml", + "*.prefab": "yaml", + "*.unity": "yaml", + }, + "explorer.fileNesting.enabled": true, + "explorer.fileNesting.patterns": { + "*.sln": "*.csproj", + "*.slnx": "*.csproj" + }, + "dotnet.defaultSolution": "Motions-In-Motion.slnx", + "dotnet.enableWorkspaceBasedDevelopment": false +} \ No newline at end of file diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 00000000..f019fd0a --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/Audio.meta b/Assets/Audio.meta new file mode 100644 index 00000000..de05d685 --- /dev/null +++ b/Assets/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf843c590ba7099428258706ba67436a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/AcidFastSongforJam0dot2.wav b/Assets/Audio/AcidFastSongforJam0dot2.wav new file mode 100644 index 00000000..8c48b6b2 Binary files /dev/null and b/Assets/Audio/AcidFastSongforJam0dot2.wav differ diff --git a/Assets/Audio/AcidFastSongforJam0dot2.wav.meta b/Assets/Audio/AcidFastSongforJam0dot2.wav.meta new file mode 100644 index 00000000..70a656fb --- /dev/null +++ b/Assets/Audio/AcidFastSongforJam0dot2.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 8d3abacd422d3b743b931ba29f821024 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/CamsAmazingSongJAckboxJam0dot3.wav b/Assets/Audio/CamsAmazingSongJAckboxJam0dot3.wav new file mode 100644 index 00000000..4ea74835 Binary files /dev/null and b/Assets/Audio/CamsAmazingSongJAckboxJam0dot3.wav differ diff --git a/Assets/Audio/CamsAmazingSongJAckboxJam0dot3.wav.meta b/Assets/Audio/CamsAmazingSongJAckboxJam0dot3.wav.meta new file mode 100644 index 00000000..80e692e6 --- /dev/null +++ b/Assets/Audio/CamsAmazingSongJAckboxJam0dot3.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 86c5713942f467043a72f1ef071d80e3 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/CongoObjectionBeat0dot4.wav b/Assets/Audio/CongoObjectionBeat0dot4.wav new file mode 100644 index 00000000..ed961b40 Binary files /dev/null and b/Assets/Audio/CongoObjectionBeat0dot4.wav differ diff --git a/Assets/Audio/CongoObjectionBeat0dot4.wav.meta b/Assets/Audio/CongoObjectionBeat0dot4.wav.meta new file mode 100644 index 00000000..e92fa3cb --- /dev/null +++ b/Assets/Audio/CongoObjectionBeat0dot4.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 7f8fb2919953e694fa4463249e8c17b4 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/MainGameLoopSongGameJamLaywerSongButCouldBeSwitchedForEvidenceSong.wav b/Assets/Audio/MainGameLoopSongGameJamLaywerSongButCouldBeSwitchedForEvidenceSong.wav new file mode 100644 index 00000000..306ecc3e Binary files /dev/null and b/Assets/Audio/MainGameLoopSongGameJamLaywerSongButCouldBeSwitchedForEvidenceSong.wav differ diff --git a/Assets/Audio/MainGameLoopSongGameJamLaywerSongButCouldBeSwitchedForEvidenceSong.wav.meta b/Assets/Audio/MainGameLoopSongGameJamLaywerSongButCouldBeSwitchedForEvidenceSong.wav.meta new file mode 100644 index 00000000..40d3d5f5 --- /dev/null +++ b/Assets/Audio/MainGameLoopSongGameJamLaywerSongButCouldBeSwitchedForEvidenceSong.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 30cc6d23762b3a54c9cc4b8a92f84232 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/MakingEvidenceSongJackboxJamv0dot2.wav b/Assets/Audio/MakingEvidenceSongJackboxJamv0dot2.wav new file mode 100644 index 00000000..b430bc93 Binary files /dev/null and b/Assets/Audio/MakingEvidenceSongJackboxJamv0dot2.wav differ diff --git a/Assets/Audio/MakingEvidenceSongJackboxJamv0dot2.wav.meta b/Assets/Audio/MakingEvidenceSongJackboxJamv0dot2.wav.meta new file mode 100644 index 00000000..94eaa168 --- /dev/null +++ b/Assets/Audio/MakingEvidenceSongJackboxJamv0dot2.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: cfab22b1552840642bf69eb8d5b3cd04 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/lobbymenusong0dot7.wav b/Assets/Audio/lobbymenusong0dot7.wav new file mode 100644 index 00000000..655439af Binary files /dev/null and b/Assets/Audio/lobbymenusong0dot7.wav differ diff --git a/Assets/Audio/lobbymenusong0dot7.wav.meta b/Assets/Audio/lobbymenusong0dot7.wav.meta new file mode 100644 index 00000000..68d538fb --- /dev/null +++ b/Assets/Audio/lobbymenusong0dot7.wav.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 65e2b768092c7f443bd6b31cffca2143 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor.meta b/Assets/Editor.meta new file mode 100644 index 00000000..bbeaecfd --- /dev/null +++ b/Assets/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 174488e86621bd7448c25bc9ab6eeedd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/MainMenuInfoPanelBuilder.cs b/Assets/Editor/MainMenuInfoPanelBuilder.cs new file mode 100644 index 00000000..4f4cbe32 --- /dev/null +++ b/Assets/Editor/MainMenuInfoPanelBuilder.cs @@ -0,0 +1,223 @@ +using TMPro; +using UnityEditor; +using UnityEditor.Events; +using UnityEngine; +using UnityEngine.UI; + +public static class MainMenuInfoPanelBuilder +{ + private const string PrefabPath = "Assets/Externals/GameJam/Views/MainMenuJam.prefab"; + private const string HowToPlayPath = "Assets/Externals/GameJam/Docs/How To Play.txt"; + private const string GddPath = "Assets/Externals/GameJam/Docs/GDD.txt"; + + [MenuItem("Tools/Game Jam/Rebuild Main Menu Info Panels")] + public static void Rebuild() + { + var root = PrefabUtility.LoadPrefabContents(PrefabPath); + try + { + var existing = root.transform.Find("Info Panels"); + if (existing != null) + Object.DestroyImmediate(existing.gameObject); + + var controller = root.GetComponent(); + if (controller == null) + controller = root.AddComponent(); + + var infoRoot = CreateRect("Info Panels", root.transform); + Stretch(infoRoot); + + var howToPlayButton = CreateButton( + "How to Play Button", infoRoot, "How to Play", + new Vector2(0f, 0f), new Vector2(0f, 0f), + new Vector2(24f, 24f), new Vector2(220f, 58f), new Vector2(0f, 0f)); + + var gddButton = CreateButton( + "GDD Button", infoRoot, "GDD", + new Vector2(1f, 0f), new Vector2(1f, 0f), + new Vector2(-24f, 24f), new Vector2(160f, 58f), new Vector2(1f, 0f)); + + var overlay = CreateRect("Document Overlay", infoRoot); + Stretch(overlay); + var overlayImage = overlay.gameObject.AddComponent(); + overlayImage.color = new Color(0.025f, 0.035f, 0.05f, 0.96f); + + var panel = CreateRect("Panel", overlay); + panel.anchorMin = new Vector2(0.04f, 0.04f); + panel.anchorMax = new Vector2(0.96f, 0.96f); + panel.offsetMin = Vector2.zero; + panel.offsetMax = Vector2.zero; + var panelImage = panel.gameObject.AddComponent(); + panelImage.color = new Color(0.94f, 0.92f, 0.82f, 1f); + + var title = CreateText("Title", panel, "Document", 38f, FontStyles.Bold); + title.alignment = TextAlignmentOptions.Center; + title.color = new Color(0.08f, 0.09f, 0.12f, 1f); + SetRect(title.rectTransform, new Vector2(0f, 1f), new Vector2(1f, 1f), + new Vector2(80f, -74f), new Vector2(-80f, -16f)); + + var closeButton = CreateButton( + "Close Button", panel, "X", + new Vector2(1f, 1f), new Vector2(1f, 1f), + new Vector2(-18f, -18f), new Vector2(48f, 48f), new Vector2(1f, 1f)); + closeButton.targetGraphic.GetComponent().color = new Color(0.65f, 0.16f, 0.14f, 1f); + + var scrollView = CreateRect("Scroll View", panel); + scrollView.anchorMin = new Vector2(0.035f, 0.04f); + scrollView.anchorMax = new Vector2(0.965f, 0.86f); + scrollView.offsetMin = Vector2.zero; + scrollView.offsetMax = Vector2.zero; + var scrollBackground = scrollView.gameObject.AddComponent(); + scrollBackground.color = new Color(1f, 1f, 1f, 0.42f); + + var viewport = CreateRect("Viewport", scrollView); + viewport.anchorMin = Vector2.zero; + viewport.anchorMax = new Vector2(0.965f, 1f); + viewport.offsetMin = new Vector2(12f, 12f); + viewport.offsetMax = new Vector2(-4f, -12f); + viewport.gameObject.AddComponent(); + + var body = CreateText("Read Only Text", viewport, string.Empty, 24f, FontStyles.Normal); + body.alignment = TextAlignmentOptions.TopLeft; + body.color = new Color(0.07f, 0.075f, 0.09f, 1f); + body.raycastTarget = false; + body.textWrappingMode = TextWrappingModes.Normal; + body.overflowMode = TextOverflowModes.Overflow; + body.rectTransform.anchorMin = new Vector2(0f, 1f); + body.rectTransform.anchorMax = new Vector2(1f, 1f); + body.rectTransform.pivot = new Vector2(0.5f, 1f); + body.rectTransform.anchoredPosition = Vector2.zero; + body.rectTransform.sizeDelta = new Vector2(-24f, 1000f); + var fitter = body.gameObject.AddComponent(); + fitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained; + fitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; + + var scrollbar = CreateScrollbar(scrollView); + + var scrollRect = scrollView.gameObject.AddComponent(); + scrollRect.content = body.rectTransform; + scrollRect.viewport = viewport; + scrollRect.horizontal = false; + scrollRect.vertical = true; + scrollRect.movementType = ScrollRect.MovementType.Clamped; + scrollRect.scrollSensitivity = 48f; + scrollRect.verticalScrollbar = scrollbar; + scrollRect.verticalScrollbarVisibility = ScrollRect.ScrollbarVisibility.AutoHideAndExpandViewport; + scrollRect.verticalScrollbarSpacing = -2f; + + UnityEventTools.AddPersistentListener(howToPlayButton.onClick, controller.OpenHowToPlay); + UnityEventTools.AddPersistentListener(gddButton.onClick, controller.OpenGdd); + UnityEventTools.AddPersistentListener(closeButton.onClick, controller.Close); + + var serializedController = new SerializedObject(controller); + serializedController.FindProperty("overlay").objectReferenceValue = overlay.gameObject; + serializedController.FindProperty("title").objectReferenceValue = title; + serializedController.FindProperty("body").objectReferenceValue = body; + serializedController.FindProperty("scrollRect").objectReferenceValue = scrollRect; + serializedController.FindProperty("howToPlayText").objectReferenceValue = + AssetDatabase.LoadAssetAtPath(HowToPlayPath); + serializedController.FindProperty("gddText").objectReferenceValue = + AssetDatabase.LoadAssetAtPath(GddPath); + serializedController.ApplyModifiedPropertiesWithoutUndo(); + + overlay.gameObject.SetActive(false); + PrefabUtility.SaveAsPrefabAsset(root, PrefabPath); + } + finally + { + PrefabUtility.UnloadPrefabContents(root); + } + + AssetDatabase.SaveAssets(); + Debug.Log("Rebuilt MainMenuJam information buttons and scroll panel."); + } + + private static RectTransform CreateRect(string name, Transform parent) + { + var gameObject = new GameObject(name, typeof(RectTransform)); + gameObject.layer = 5; + var rect = (RectTransform)gameObject.transform; + rect.SetParent(parent, false); + return rect; + } + + private static void Stretch(RectTransform rect) + { + rect.anchorMin = Vector2.zero; + rect.anchorMax = Vector2.one; + rect.offsetMin = Vector2.zero; + rect.offsetMax = Vector2.zero; + } + + private static void SetRect(RectTransform rect, Vector2 anchorMin, Vector2 anchorMax, + Vector2 offsetMin, Vector2 offsetMax) + { + rect.anchorMin = anchorMin; + rect.anchorMax = anchorMax; + rect.offsetMin = offsetMin; + rect.offsetMax = offsetMax; + } + + private static TextMeshProUGUI CreateText(string name, Transform parent, string value, + float fontSize, FontStyles style) + { + var rect = CreateRect(name, parent); + var text = rect.gameObject.AddComponent(); + text.text = value; + text.font = TMP_Settings.defaultFontAsset; + text.fontSize = fontSize; + text.fontStyle = style; + text.color = Color.white; + text.raycastTarget = false; + return text; + } + + private static Button CreateButton(string name, Transform parent, string label, + Vector2 anchorMin, Vector2 anchorMax, Vector2 position, Vector2 size, Vector2 pivot) + { + var rect = CreateRect(name, parent); + rect.anchorMin = anchorMin; + rect.anchorMax = anchorMax; + rect.pivot = pivot; + rect.anchoredPosition = position; + rect.sizeDelta = size; + + var image = rect.gameObject.AddComponent(); + image.color = new Color(0.12f, 0.24f, 0.34f, 0.98f); + var button = rect.gameObject.AddComponent