HeavenStudioPlus/Assets/Scripts/Initializer.cs

150 lines
5.4 KiB
C#
Raw Normal View History

using System;
2022-01-03 22:42:43 +00:00
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Text;
2022-01-03 22:42:43 +00:00
using UnityEngine;
2022-02-05 04:40:33 +00:00
using UnityEngine.Audio;
2022-01-03 22:42:43 +00:00
2022-03-14 14:21:05 +00:00
namespace HeavenStudio
2022-01-03 22:42:43 +00:00
{
public class Initializer : MonoBehaviour
{
public TextAsset level;
public AudioClip music;
public GameObject canvas;
2022-01-06 00:11:33 +00:00
public bool debugUI;
public bool playOnStart = false;
public bool editor = false;
2022-01-03 22:42:43 +00:00
string json = "";
string ext = "";
2022-01-03 22:42:43 +00:00
private void Start()
{
string[] args = System.Environment.GetCommandLineArgs();
string input = "";
for (int i = 1; i < args.Length; i++) {
// first arg is always this executable
Debug.Log(args[i]);
if (args[i].IndexOfAny(Path.GetInvalidPathChars()) == -1)
{
if (File.Exists(args[i]))
{
input = args[i];
editor = false;
playOnStart = true;
}
}
else if (args[i] == "-debug")
{
debugUI = true;
}
}
2022-01-03 22:42:43 +00:00
GameObject Cameras = Instantiate(Resources.Load<GameObject>("Prefabs/Cameras")); Cameras.name = "Cameras";
GameObject MainCamera = Cameras.transform.GetChild(0).gameObject;
GameObject CursorCamera = Cameras.transform.GetChild(1).gameObject;
GameObject OverlayCamera = Cameras.transform.GetChild(2).gameObject;
GameObject GameLetterbox = Cameras.transform.GetChild(3).gameObject;
2022-01-03 22:42:43 +00:00
GameObject Cursor = Instantiate(Resources.Load<GameObject>("Prefabs/Cursor"));
Cursor.name = "Cursor";
GameObject Games = new GameObject();
Games.name = "Games";
GameObject GameManager = new GameObject();
GameManager.name = "GameManager";
GameManager gameManager = GameManager.AddComponent<GameManager>();
2022-01-15 22:52:53 +00:00
gameManager.playOnStart = playOnStart;
2022-01-03 22:42:43 +00:00
gameManager.GamesHolder = Games;
gameManager.CircleCursor = Cursor.transform.GetChild(0).GetComponent<CircleCursor>();
gameManager.GameCamera = MainCamera.GetComponent<Camera>();
gameManager.CursorCam = CursorCamera.GetComponent<Camera>();
gameManager.OverlayCamera = OverlayCamera.GetComponent<Camera>();
gameManager.GameLetterbox = GameLetterbox;
2022-01-03 22:42:43 +00:00
GameObject Profiler = Instantiate(Resources.Load<GameObject>("Prefabs/GameProfiler"));
Profiler.name = "GameProfiler";
2022-01-06 00:11:33 +00:00
if (!debugUI)
{
Profiler.GetComponent<DebugUI>().enabled = false;
Profiler.transform.GetChild(0).gameObject.SetActive(false);
}
2022-01-03 22:42:43 +00:00
GameObject Conductor = new GameObject();
Conductor.name = "Conductor";
2022-01-15 22:52:53 +00:00
AudioSource source = Conductor.AddComponent<AudioSource>();
source.clip = music;
2022-01-03 22:42:43 +00:00
Conductor.AddComponent<Conductor>();
2022-01-15 22:52:53 +00:00
Conductor.GetComponent<Conductor>().musicSource = source;
2022-02-05 04:40:33 +00:00
source.outputAudioMixerGroup = Settings.GetMusicMixer();
// Conductor.AddComponent<AudioDspTimeKeeper>();
2022-01-06 00:11:33 +00:00
if (editor)
{
2022-03-14 14:21:05 +00:00
this.GetComponent<HeavenStudio.Editor.Editor>().Init();
2022-01-06 00:11:33 +00:00
}
2022-01-15 22:52:53 +00:00
else
{
this.GetComponent<HeavenStudio.Editor.Editor>().enabled = false;
this.GetComponent<HeavenStudio.Editor.EditorTheme>().enabled = false;
this.GetComponent<HeavenStudio.Editor.BoxSelection>().enabled = false;
canvas.SetActive(false);
OpenCmdRemix(input);
Debug.Log(json);
gameManager.txt = json;
gameManager.ext = ext;
2022-01-15 22:52:53 +00:00
gameManager.Init();
}
2022-01-03 22:42:43 +00:00
}
public void OpenCmdRemix(string path)
{
if (path == string.Empty) return;
if (!File.Exists(path)) return;
byte[] MusicBytes;
bool loadedMusic = false;
string extension = path.GetExtension();
using var zipFile = File.Open(path, FileMode.Open);
using var archive = new ZipArchive(zipFile, ZipArchiveMode.Read);
foreach (var entry in archive.Entries)
switch (entry.Name)
{
case "remix.json":
{
using var stream = entry.Open();
using var reader = new StreamReader(stream);
json = reader.ReadToEnd();
ext = extension;
break;
}
case "song.ogg":
{
using var stream = entry.Open();
using var memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
MusicBytes = memoryStream.ToArray();
Conductor.instance.musicSource.clip = OggVorbis.VorbisPlugin.ToAudioClip(MusicBytes, "music");
loadedMusic = true;
break;
}
}
if (!loadedMusic)
{
Conductor.instance.musicSource.clip = null;
MusicBytes = null;
}
}
2022-01-03 22:42:43 +00:00
}
}