MAME.Core/MAME.Unity/Assets/Script/UMAME/UMAME.cs

160 lines
4.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Assets.Script.UMAME.Common;
using mame;
using MAME.Core.Motion;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class UMAME : MonoBehaviour
{
MameMainMotion emu;
UniLog mUniLog;
UniMouse mUniMouse;
UniVideoPlayer mUniVideoPlayer;
UniSoundPlayer mUniSoundPlayer;
UniKeyboard mUniKeyboard;
UniResources mUniResources;
public Text mFPS;
public Button btnStop;
public Button btnStart;
public Button btnRomDir;
public Dictionary<string, RomInfo> ALLGame;
public List<RomInfo> HadGameList = new List<RomInfo>();
string mChangeRomName = string.Empty;
public bool bQuickTestRom = false;
public string mQuickTestRom = string.Empty;
Dropdown optionDropdown;
public static System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
public static bool bInGame { get; private set; }
#if UNITY_EDITOR_WIN
public static string RomPath => "G:\\MAME.NET.Rom";
#elif UNITY_ANDROID
public static string RomPath => Application.persistentDataPath;
#elif UNITY_PSP2
public static string RomPath => Application.dataPath;
#else
public static string RomPath => Application.persistentDataPath;
#endif
private void Awake()
{
mFPS = GameObject.Find("FPS").GetComponent<Text>();
optionDropdown = GameObject.Find("optionDropdown").GetComponent<Dropdown>();
emu = new MameMainMotion();
mUniLog = new UniLog();
mUniMouse = this.gameObject.AddComponent<UniMouse>();
mUniVideoPlayer = this.gameObject.AddComponent<UniVideoPlayer>();
mUniSoundPlayer = GameObject.Find("Audio").transform.GetComponent<UniSoundPlayer>();
mUniKeyboard = this.gameObject.AddComponent<UniKeyboard>();
mUniResources = new UniResources();
mChangeRomName = UniMAMESetting.instance.LastGameRom;
emu.Init(RomPath, mUniLog, mUniResources, mUniVideoPlayer, mUniSoundPlayer, mUniKeyboard, mUniMouse);
ALLGame = emu.GetGameList();
Debug.Log($"ALLGame:{ALLGame.Count}");
#if !UNITY_EDITOR
bQuickTestRom = false;
#endif
if (bQuickTestRom)
mChangeRomName = mQuickTestRom;
GetHadRomList();
if (bQuickTestRom)
LoadGame();
}
void OnEnable()
{
btnStop.onClick.AddListener(StopGame);
btnStart.onClick.AddListener(LoadGame);
}
void LoadGame()
{
mChangeRomName = HadGameList[optionDropdown.value].Name;
UniMAMESetting.instance.LastGameRom = mChangeRomName;
StopGame();
//<2F><>ȡROM
emu.LoadRom(mChangeRomName);
//<2F><>ȡ<EFBFBD>ɹ<EFBFBD>
if (emu.bRom)
{
//<2F><>ȡROM֮<4D><D6AE><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>߳<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
emu.GetGameScreenSize(out int _width, out int _height, out IntPtr _framePtr);
Debug.Log($"_width->{_width}, _height->{_height}, _framePtr->{_framePtr}");
mUniVideoPlayer.Initialize(_width, _height, _framePtr);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ƶ
mUniSoundPlayer.Initialize();
//<2F><>ʼ<EFBFBD><CABC>Ϸ
emu.StartGame();
bInGame = true;
}
else
{
Debug.Log($"ROM<4F><4D><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>");
}
}
private void Update()
{
mFPS.text = ($"fpsv {mUniVideoPlayer.videoFPS.ToString("F2")} fpsa {mUniSoundPlayer.audioFPS.ToString("F2")}");
}
void StopGame()
{
if (bInGame)
{
emu.StopGame();
mUniVideoPlayer.StopVideo();
mUniSoundPlayer.StopPlay();
bInGame = false;
}
}
void GetHadRomList()
{
HadGameList.Clear();
optionDropdown.options.Clear();
Debug.Log($"GetHadRomList:{RomPath + "/roms/"}");
string[] directoryEntries = Directory.GetDirectories(RomPath + "/roms/");
for (int i = 0; i < directoryEntries.Length; i++)
{
string path = directoryEntries[i];
string dirName = Path.GetFileName(path);
if (ALLGame.ContainsKey(dirName))
{
HadGameList.Add(ALLGame[dirName]);
optionDropdown.options.Add(new Dropdown.OptionData(dirName));
}
}
Debug.Log($"HadGameList:{HadGameList.Count}");
RomInfo tempCurrRom = HadGameList.Where(w => w.Name == mChangeRomName).FirstOrDefault();
if (tempCurrRom != null)
{
optionDropdown.value = HadGameList.IndexOf(tempCurrRom);
}
else
{
optionDropdown.value = 0;
}
optionDropdown.RefreshShownValue();
}
void OpenFolderRomPath()
{
System.Diagnostics.Process.Start("explorer.exe", "/select," + RomPath);
}
}