Merge branch 'master' of http://git.axibug.com/sin365/AxibugEmuOnline
This commit is contained in:
commit
59b62350ea
@ -1,3 +1,4 @@
|
||||
#if UNITY_EDITOR
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
@ -21,4 +22,5 @@ public class AxiPrefabCache_Com2GUID
|
||||
public string ToPATH;
|
||||
public string ToGUID;
|
||||
public MonoScript monoScript;
|
||||
}
|
||||
}
|
||||
#endif
|
@ -1,3 +1,4 @@
|
||||
#if UNITY_EDITOR
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
@ -86,7 +87,7 @@ public class AxiProjectTools : EditorWindow
|
||||
static void LoopPrefabNode(string rootPath, GameObject trans, int depth)
|
||||
{
|
||||
string nodename = $"{rootPath}>{trans.name}";
|
||||
#if UNITY_5_4_OR_NEWER && !UNITY_2018_4_OR_NEWER
|
||||
#if UNITY_2018_4_OR_NEWER
|
||||
GameObject prefabRoot = trans.gameObject;
|
||||
int comCount = prefabRoot.GetComponentCount();
|
||||
for (int i = 0; i < comCount; i++)
|
||||
@ -95,11 +96,6 @@ public class AxiProjectTools : EditorWindow
|
||||
if (com == null)
|
||||
continue;
|
||||
|
||||
if (com.name.Contains("VideoPlayer"))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
MonoBehaviour monoCom = com as MonoBehaviour;
|
||||
if (monoCom == null)
|
||||
continue;
|
||||
@ -262,11 +258,13 @@ public class AxiProjectTools : EditorWindow
|
||||
}
|
||||
|
||||
|
||||
[MenuItem("Axibug移植工具/[5]UnPack所有预制体")]
|
||||
[MenuItem("Axibug移植工具/[5]UnPack所有嵌套预制体和场景中的预制体")]
|
||||
public static void UnpackPrefabs()
|
||||
{
|
||||
|
||||
string[] allAssetPaths = AssetDatabase.GetAllAssetPaths();
|
||||
#if UNITY_2018_4_OR_NEWER
|
||||
GoTAxiProjectToolsSence();
|
||||
string[] allAssetPaths = AssetDatabase.GetAllAssetPaths();
|
||||
int prefabCount = 0;
|
||||
|
||||
foreach (string path in allAssetPaths)
|
||||
@ -278,13 +276,41 @@ public class AxiProjectTools : EditorWindow
|
||||
prefabCount++;
|
||||
}
|
||||
}
|
||||
Debug.Log($"Unpacked {prefabCount} prefabs.");
|
||||
Debug.Log($"{prefabCount}个预制体Unpack");
|
||||
|
||||
Debug.Log("<Color=#FFF333>处理完毕 [5]UnPack所有预制体</color>");
|
||||
}
|
||||
string[] sceneGuids = AssetDatabase.FindAssets("t:scene");
|
||||
foreach (string guid in sceneGuids)
|
||||
{
|
||||
string path = AssetDatabase.GUIDToAssetPath(guid);
|
||||
if (path.Contains(toolSenceName))
|
||||
continue;
|
||||
|
||||
static void UnpackPrefab(string prefabPath)
|
||||
EditorSceneManager.OpenScene(path);
|
||||
Scene currentScene = SceneManager.GetActiveScene();
|
||||
GameObject[] rootObjects = currentScene.GetRootGameObjects();
|
||||
foreach (GameObject rootObj in rootObjects)
|
||||
{
|
||||
// 遍历场景中的所有对象
|
||||
TraverseHierarchy(rootObj);
|
||||
}
|
||||
// Save the scene // 获取当前打开的场景
|
||||
currentScene = EditorSceneManager.GetActiveScene();
|
||||
// 保存场景到文件(默认路径和名称)
|
||||
bool success = EditorSceneManager.SaveScene(currentScene, currentScene.path);
|
||||
|
||||
Debug.Log($"{currentScene.name}场景中 所有物体Unpack");
|
||||
}
|
||||
|
||||
GoTAxiProjectToolsSence();
|
||||
Debug.Log("<Color=#FFF333>处理完毕 [5]UnPack所有预制体</color>");
|
||||
#else
|
||||
Debug.Log("低版本不要执行本函数");
|
||||
#endif
|
||||
}
|
||||
|
||||
static void UnpackPrefab(string prefabPath)
|
||||
{
|
||||
#if UNITY_2018_4_OR_NEWER
|
||||
GameObject prefabInstance = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
|
||||
if (prefabInstance == null)
|
||||
{
|
||||
@ -296,10 +322,14 @@ public class AxiProjectTools : EditorWindow
|
||||
TraverseHierarchy(obj);
|
||||
PrefabUtility.SaveAsPrefabAsset(obj, prefabPath);
|
||||
GameObject.DestroyImmediate(obj);
|
||||
#else
|
||||
Debug.Log("低版本不要执行本函数");
|
||||
#endif
|
||||
}
|
||||
|
||||
static void TraverseHierarchy(GameObject obj)
|
||||
{
|
||||
#if UNITY_2018_4_OR_NEWER
|
||||
// 检查该对象是否是预制体的实例
|
||||
if (PrefabUtility.IsPartOfPrefabInstance(obj))
|
||||
{
|
||||
@ -313,6 +343,9 @@ public class AxiProjectTools : EditorWindow
|
||||
{
|
||||
TraverseHierarchy(obj.transform.GetChild(i).gameObject);
|
||||
}
|
||||
#else
|
||||
Debug.Log("低版本不要执行本函数");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -379,4 +412,5 @@ public class AxiProjectTools : EditorWindow
|
||||
textureImporter.SaveAndReimport();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@ -1,6 +1,8 @@
|
||||
using AxibugEmuOnline.Client;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AxibugEmuOnline.Editors
|
||||
{
|
||||
[CustomEditor(typeof(CommandDispatcher))]
|
||||
@ -13,8 +15,8 @@ namespace AxibugEmuOnline.Editors
|
||||
if (!Application.isPlaying) return;
|
||||
|
||||
var dispacather = target as CommandDispatcher;
|
||||
|
||||
dispacather.GetRegisters(out var normal, out var solo);
|
||||
IReadOnlyList<CommandExecuter> normal; IReadOnlyList<CommandExecuter> solo;
|
||||
dispacather.GetRegisters(out normal, out solo);
|
||||
|
||||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||||
EditorGUILayout.LabelField("NORMAL");
|
||||
|
@ -60,7 +60,7 @@ namespace AxiReplay
|
||||
if (!bNetInit)
|
||||
{
|
||||
data = default(ReplayStep);
|
||||
frameDiff = default;
|
||||
frameDiff = default(int);
|
||||
inputDiff = false;
|
||||
return false;
|
||||
}
|
||||
@ -73,7 +73,7 @@ namespace AxiReplay
|
||||
if (!bNetInit)
|
||||
{
|
||||
data = default(ReplayStep);
|
||||
frameDiff = default;
|
||||
frameDiff = default(int);
|
||||
inputDiff = false;
|
||||
return false;
|
||||
}
|
||||
|
@ -5,152 +5,154 @@ using System.Text;
|
||||
|
||||
namespace AxiReplay
|
||||
{
|
||||
public class ReplayWriter : IReplayWriter
|
||||
{
|
||||
public ReplayData.ReplayFormat mFormat { get; private set; }
|
||||
public Encoding TexEncoding { get; private set; }
|
||||
ReplayHandler handler;
|
||||
string mTitle;
|
||||
string mNote;
|
||||
int mAllFrame;
|
||||
int mAllTime;
|
||||
long mData;
|
||||
int mSingleInputLenght;
|
||||
int mSingleDataLenght;
|
||||
MemoryStream mStream;
|
||||
BinaryWriter mBinaryWriter;
|
||||
public class ReplayWriter : IReplayWriter
|
||||
{
|
||||
public ReplayData.ReplayFormat mFormat { get; private set; }
|
||||
public Encoding TexEncoding { get; private set; }
|
||||
ReplayHandler handler;
|
||||
string mTitle;
|
||||
string mNote;
|
||||
int mAllFrame;
|
||||
int mAllTime;
|
||||
long mData;
|
||||
int mSingleInputLenght;
|
||||
int mSingleDataLenght;
|
||||
MemoryStream mStream;
|
||||
BinaryWriter mBinaryWriter;
|
||||
|
||||
int mCurrFrame;
|
||||
UInt64 mCurrInput;
|
||||
ReplayStep wirteStep;
|
||||
int mCurrFrame;
|
||||
UInt64 mCurrInput;
|
||||
ReplayStep wirteStep;
|
||||
|
||||
List<string> dbgList = new List<string>();
|
||||
List<string> dbgList = new List<string>();
|
||||
|
||||
public ReplayWriter(string Title, string Note, ReplayData.ReplayFormat format, Encoding encoding)
|
||||
{
|
||||
mTitle = Title;
|
||||
mNote = Note;
|
||||
TexEncoding = encoding;
|
||||
mFormat = format;
|
||||
switch (mFormat)
|
||||
{
|
||||
case ReplayData.ReplayFormat.FM32IP64: mSingleInputLenght = sizeof(UInt64); break;
|
||||
case ReplayData.ReplayFormat.FM32IP32: mSingleInputLenght = sizeof(UInt32); break;
|
||||
case ReplayData.ReplayFormat.FM32IP16: mSingleInputLenght = sizeof(UInt16); break;
|
||||
case ReplayData.ReplayFormat.FM32IPBYTE: mSingleInputLenght = sizeof(byte); break;
|
||||
}
|
||||
mSingleDataLenght = (sizeof(UInt32)) + mSingleInputLenght;
|
||||
public ReplayWriter(string Title, string Note, ReplayData.ReplayFormat format, Encoding encoding)
|
||||
{
|
||||
mTitle = Title;
|
||||
mNote = Note;
|
||||
TexEncoding = encoding;
|
||||
mFormat = format;
|
||||
switch (mFormat)
|
||||
{
|
||||
case ReplayData.ReplayFormat.FM32IP64: mSingleInputLenght = sizeof(UInt64); break;
|
||||
case ReplayData.ReplayFormat.FM32IP32: mSingleInputLenght = sizeof(UInt32); break;
|
||||
case ReplayData.ReplayFormat.FM32IP16: mSingleInputLenght = sizeof(UInt16); break;
|
||||
case ReplayData.ReplayFormat.FM32IPBYTE: mSingleInputLenght = sizeof(byte); break;
|
||||
}
|
||||
mSingleDataLenght = (sizeof(UInt32)) + mSingleInputLenght;
|
||||
|
||||
mStream = new MemoryStream();
|
||||
mBinaryWriter = new BinaryWriter(mStream);
|
||||
mStream = new MemoryStream();
|
||||
mBinaryWriter = new BinaryWriter(mStream);
|
||||
|
||||
mCurrFrame = -1;
|
||||
mCurrInput = int.MaxValue;
|
||||
wirteStep = new ReplayStep();
|
||||
mCurrFrame = -1;
|
||||
mCurrInput = int.MaxValue;
|
||||
wirteStep = new ReplayStep();
|
||||
|
||||
dbgList.Clear();
|
||||
dbgList.Clear();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
int byFrameIdx = 0;
|
||||
/// <summary>
|
||||
/// 往前推进帧的,指定帧下标
|
||||
/// </summary>
|
||||
/// <param name="frameInput"></param>
|
||||
public void NextFramebyFrameIdx(int FrameID, UInt64 frameInput)
|
||||
{
|
||||
TakeFrame(FrameID - byFrameIdx, frameInput);
|
||||
byFrameIdx = FrameID;
|
||||
}
|
||||
int byFrameIdx = 0;
|
||||
/// <summary>
|
||||
/// 往前推进帧的,指定帧下标
|
||||
/// </summary>
|
||||
/// <param name="frameInput"></param>
|
||||
public void NextFramebyFrameIdx(int FrameID, UInt64 frameInput)
|
||||
{
|
||||
TakeFrame(FrameID - byFrameIdx, frameInput);
|
||||
byFrameIdx = FrameID;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 往前推进1帧的Input
|
||||
/// </summary>
|
||||
/// <param name="frameInput"></param>
|
||||
public void NextFrame(UInt64 frameInput)
|
||||
{
|
||||
TakeFrame(1, frameInput);
|
||||
}
|
||||
/// <summary>
|
||||
/// 往前推进1帧的Input
|
||||
/// </summary>
|
||||
/// <param name="frameInput"></param>
|
||||
public void NextFrame(UInt64 frameInput)
|
||||
{
|
||||
TakeFrame(1, frameInput);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 往前推进指定帧数量的Input
|
||||
/// </summary>
|
||||
/// <param name="frameInput"></param>
|
||||
public void TakeFrame(int addFrame, UInt64 frameInput)
|
||||
{
|
||||
if (addFrame < 0)
|
||||
{
|
||||
/// <summary>
|
||||
/// 往前推进指定帧数量的Input
|
||||
/// </summary>
|
||||
/// <param name="frameInput"></param>
|
||||
public void TakeFrame(int addFrame, UInt64 frameInput)
|
||||
{
|
||||
if (addFrame < 0)
|
||||
{
|
||||
|
||||
}
|
||||
mCurrFrame += addFrame;
|
||||
if (mCurrInput == frameInput)
|
||||
return;
|
||||
mCurrInput = frameInput;
|
||||
}
|
||||
mCurrFrame += addFrame;
|
||||
if (mCurrInput == frameInput)
|
||||
return;
|
||||
mCurrInput = frameInput;
|
||||
|
||||
wirteStep.FrameStartID = mCurrFrame;
|
||||
wirteStep.InPut = mCurrInput;
|
||||
dbgList.Add($"{mCurrFrame} | {mCurrInput}");
|
||||
wirteStep.FrameStartID = mCurrFrame;
|
||||
wirteStep.InPut = mCurrInput;
|
||||
dbgList.Add($"{mCurrFrame} | {mCurrInput}");
|
||||
|
||||
switch (mFormat)
|
||||
{
|
||||
case ReplayData.ReplayFormat.FM32IP64:
|
||||
mBinaryWriter.Write(wirteStep.FrameStartID);
|
||||
mBinaryWriter.Write(wirteStep.InPut);
|
||||
break;
|
||||
case ReplayData.ReplayFormat.FM32IP32:
|
||||
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 4);
|
||||
break;
|
||||
case ReplayData.ReplayFormat.FM32IP16:
|
||||
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 2);
|
||||
break;
|
||||
case ReplayData.ReplayFormat.FM32IPBYTE:
|
||||
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch (mFormat)
|
||||
{
|
||||
case ReplayData.ReplayFormat.FM32IP64:
|
||||
mBinaryWriter.Write(wirteStep.FrameStartID);
|
||||
mBinaryWriter.Write(wirteStep.InPut);
|
||||
break;
|
||||
case ReplayData.ReplayFormat.FM32IP32:
|
||||
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 4);
|
||||
break;
|
||||
case ReplayData.ReplayFormat.FM32IP16:
|
||||
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 2);
|
||||
break;
|
||||
case ReplayData.ReplayFormat.FM32IPBYTE:
|
||||
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveData(string path, bool bWithDump = false, string dumppath = null)
|
||||
{
|
||||
ReplayData.GetStringByteData(mTitle, out byte[] titleData, out int titleLenghtWithEnd, TexEncoding);
|
||||
ReplayData.GetStringByteData(mNote, out byte[] noteData, out int noteLenghtWithEnd, TexEncoding);
|
||||
public void SaveData(string path, bool bWithDump = false, string dumppath = null)
|
||||
{
|
||||
byte[] titleData; int titleLenghtWithEnd;
|
||||
ReplayData.GetStringByteData(mTitle, out titleData, out titleLenghtWithEnd, TexEncoding);
|
||||
byte[] noteData; int noteLenghtWithEnd;
|
||||
ReplayData.GetStringByteData(mNote, out noteData, out noteLenghtWithEnd, TexEncoding);
|
||||
|
||||
ReplayHandler handler = new ReplayHandler();
|
||||
handler.Format = (int)this.mFormat;
|
||||
handler.DataOffset = ReplayData.HandlerLenght;
|
||||
handler.CreateTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
||||
handler.AllFrame = wirteStep.FrameStartID;
|
||||
handler.SingleLenght = mSingleDataLenght;
|
||||
ReplayHandler handler = new ReplayHandler();
|
||||
handler.Format = (int)this.mFormat;
|
||||
handler.DataOffset = ReplayData.HandlerLenght;
|
||||
handler.CreateTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
||||
handler.AllFrame = wirteStep.FrameStartID;
|
||||
handler.SingleLenght = mSingleDataLenght;
|
||||
|
||||
using (FileStream fs = new FileStream(path, FileMode.Create))
|
||||
{
|
||||
using (BinaryWriter bw = new BinaryWriter(fs))
|
||||
{
|
||||
//写入Handler
|
||||
bw.Write(ReplayData.GetHandlerData(handler));
|
||||
//写入Data
|
||||
bw.Write(mStream.ToArray());
|
||||
}
|
||||
}
|
||||
using (FileStream fs = new FileStream(path, FileMode.Create))
|
||||
{
|
||||
using (BinaryWriter bw = new BinaryWriter(fs))
|
||||
{
|
||||
//写入Handler
|
||||
bw.Write(ReplayData.GetHandlerData(handler));
|
||||
//写入Data
|
||||
bw.Write(mStream.ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
if (bWithDump)
|
||||
{
|
||||
List<string> temp = new List<string>();
|
||||
temp.Add($"Format => {handler.Format}");
|
||||
temp.Add($"DataOffset => {handler.DataOffset}");
|
||||
temp.Add($"CreateTime => {handler.CreateTime}");
|
||||
temp.Add($"AllFrame => {handler.AllFrame}");
|
||||
temp.Add($"SingleLenght => {handler.SingleLenght}");
|
||||
dbgList.InsertRange(0, temp);
|
||||
File.WriteAllLines(dumppath, dbgList);
|
||||
}
|
||||
}
|
||||
if (bWithDump)
|
||||
{
|
||||
List<string> temp = new List<string>();
|
||||
temp.Add($"Format => {handler.Format}");
|
||||
temp.Add($"DataOffset => {handler.DataOffset}");
|
||||
temp.Add($"CreateTime => {handler.CreateTime}");
|
||||
temp.Add($"AllFrame => {handler.AllFrame}");
|
||||
temp.Add($"SingleLenght => {handler.SingleLenght}");
|
||||
dbgList.InsertRange(0, temp);
|
||||
File.WriteAllLines(dumppath, dbgList);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
mStream.Dispose();
|
||||
mBinaryWriter.Dispose();
|
||||
//TODO
|
||||
}
|
||||
public void Dispose()
|
||||
{
|
||||
mStream.Dispose();
|
||||
mBinaryWriter.Dispose();
|
||||
//TODO
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 898ba71ded907534ba7eaada7855cadc
|
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 353264361911f2f43bb2c088c7e73fec
|
||||
guid: 957996f7ef8e16e4d83eace2efbcbfaa
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
BIN
AxibugEmuOnline.Client/Assets/Plugins/PSVita/CommonDialog.suprx
Normal file
BIN
AxibugEmuOnline.Client/Assets/Plugins/PSVita/CommonDialog.suprx
Normal file
Binary file not shown.
@ -1,20 +1,19 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 324deac494a24a7499801349c7908062
|
||||
guid: 255d4b97366fc9e429c8cf1a54ee47b8
|
||||
timeCreated: 1499268372
|
||||
licenseType: Pro
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 1
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
@ -23,11 +22,10 @@ PluginImporter:
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
PSP2: PSP2
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
enabled: 1
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
BIN
AxibugEmuOnline.Client/Assets/Plugins/PSVita/CommonDialog_stub.a
Normal file
BIN
AxibugEmuOnline.Client/Assets/Plugins/PSVita/CommonDialog_stub.a
Normal file
Binary file not shown.
@ -0,0 +1,31 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e4a33d16bdff8ff418e7a5fe120bd193
|
||||
timeCreated: 1499268372
|
||||
licenseType: Pro
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
platformData:
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
- first:
|
||||
PSP2: PSP2
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7c3fabe6430be6943b1fc06a25a275a8
|
||||
guid: b3de348afcfb8214ea5dced94199f16e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
Binary file not shown.
@ -0,0 +1,92 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eb76ae7b43c117c449fe04e536cf3f34
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
platformData:
|
||||
- first:
|
||||
'': Any
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
Exclude Editor: 0
|
||||
Exclude Linux: 1
|
||||
Exclude Linux64: 1
|
||||
Exclude LinuxUniversal: 1
|
||||
Exclude OSXUniversal: 1
|
||||
Exclude PSP2: 0
|
||||
Exclude Win: 1
|
||||
Exclude Win64: 1
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 1
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
DefaultValueInitialized: true
|
||||
OS: AnyOS
|
||||
- first:
|
||||
Facebook: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Facebook: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
PSP2: PSP2
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
Standalone: Linux
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: x86
|
||||
- first:
|
||||
Standalone: Linux64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: x86_64
|
||||
- first:
|
||||
Standalone: OSXUniversal
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Standalone: Win64
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
- first:
|
||||
Windows Store Apps: WindowsStoreApps
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
CPU: AnyCPU
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -25,12 +25,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9760340517325694}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4232056521131536011}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &9003897287163669553
|
||||
MonoBehaviour:
|
||||
@ -56,6 +57,7 @@ AudioSource:
|
||||
serializedVersion: 4
|
||||
OutputAudioMixerGroup: {fileID: 0}
|
||||
m_audioClip: {fileID: 0}
|
||||
m_Resource: {fileID: 0}
|
||||
m_PlayOnAwake: 1
|
||||
m_Volume: 1
|
||||
m_Pitch: 1
|
||||
@ -169,9 +171,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: -1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1038087993597378172}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
@ -240,11 +242,11 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 3430872171738201552}
|
||||
- {fileID: 5684774662137182450}
|
||||
m_Father: {fileID: 4232056520494431727}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
@ -289,12 +291,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4232056520112715746}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4232056521131536011}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &4232056520112715744
|
||||
MonoBehaviour:
|
||||
@ -311,6 +314,8 @@ MonoBehaviour:
|
||||
NesEmu: {fileID: 4232056521131536012}
|
||||
DrawCanvas: {fileID: 4232056520494431724}
|
||||
Image: {fileID: 4232056521759880274}
|
||||
GPUTurboMat_gpu: {fileID: 2100000, guid: 07e28fcb992bc124e986f9d8ff3beb97, type: 2}
|
||||
GPUTurbo: 1
|
||||
--- !u!1 &4232056520494431712
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -322,7 +327,6 @@ GameObject:
|
||||
- component: {fileID: 4232056520494431727}
|
||||
- component: {fileID: 4232056520494431724}
|
||||
- component: {fileID: 4232056520494431725}
|
||||
- component: {fileID: 4232056520494431726}
|
||||
m_Layer: 5
|
||||
m_Name: Canvas
|
||||
m_TagString: Untagged
|
||||
@ -340,11 +344,11 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0, y: 0, z: 0}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4232056521759880275}
|
||||
- {fileID: 1038087993597378172}
|
||||
m_Father: {fileID: 4232056521131536011}
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
@ -368,7 +372,9 @@ Canvas:
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
@ -395,23 +401,6 @@ MonoBehaviour:
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 1
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!114 &4232056520494431726
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4232056520494431712}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!1 &4232056521131536013
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -436,15 +425,16 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4232056521131536013}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4232056520112715745}
|
||||
- {fileID: 4785916497946256520}
|
||||
- {fileID: 4232056520494431727}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &4232056521131536012
|
||||
MonoBehaviour:
|
||||
@ -458,10 +448,8 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 39557e19783acee499ace6c68549e8f8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
InputTemplate: {fileID: 0}
|
||||
VideoProvider: {fileID: 4232056520112715744}
|
||||
AudioProvider: {fileID: 9003897287163669553}
|
||||
m_bPause: 0
|
||||
--- !u!1 &4232056521759880276
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -490,9 +478,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 1, y: 0, z: 0, w: 0}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4232056520494431727}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 180, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
@ -519,7 +507,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 2100000, guid: 07e28fcb992bc124e986f9d8ff3beb97, type: 2}
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
@ -562,9 +550,9 @@ RectTransform:
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1038087993597378172}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 0}
|
||||
|
@ -25,17 +25,18 @@ RectTransform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2371389415552619370}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1727149598719982521}
|
||||
m_Children:
|
||||
- {fileID: 1771748875814093347}
|
||||
m_Father: {fileID: 8950855035476021338}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
m_AnchoredPosition: {x: 84, y: 0}
|
||||
m_SizeDelta: {x: 502, y: 160}
|
||||
m_AnchoredPosition: {x: 49, y: 0}
|
||||
m_SizeDelta: {x: 251, y: 80}
|
||||
m_Pivot: {x: 0, y: 0.5}
|
||||
--- !u!222 &6564505248202665844
|
||||
CanvasRenderer:
|
||||
@ -100,17 +101,17 @@ RectTransform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2721335758118728454}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1727149598719982521}
|
||||
m_Father: {fileID: 8950855035476021338}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 142, y: 160}
|
||||
m_SizeDelta: {x: 71, y: 80}
|
||||
m_Pivot: {x: 0, y: 0.5}
|
||||
--- !u!222 &9075115120373129637
|
||||
CanvasRenderer:
|
||||
@ -159,7 +160,7 @@ GameObject:
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1727149598719982521}
|
||||
- component: {fileID: 7654163251363580929}
|
||||
- component: {fileID: 8370099016684185830}
|
||||
m_Layer: 5
|
||||
m_Name: RoomPlayerSlotUnit
|
||||
m_TagString: Untagged
|
||||
@ -179,20 +180,143 @@ RectTransform:
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 846681823671095772}
|
||||
- {fileID: 6665974318866355999}
|
||||
- {fileID: 8950855035476021338}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 100, y: 100}
|
||||
m_SizeDelta: {x: 300, y: 100}
|
||||
m_Pivot: {x: 0, y: 1}
|
||||
--- !u!222 &7654163251363580929
|
||||
CanvasRenderer:
|
||||
--- !u!114 &8370099016684185830
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5376230278482525414}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 1bfe4359a48b5c349b439e88eb53b8b1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_controllerIndex: 0
|
||||
m_connectInfoNode: {fileID: 2371389415552619370}
|
||||
m_indexIcon: {fileID: 4536003039670490184}
|
||||
m_playerName: {fileID: 6617607173830585898}
|
||||
--- !u!1 &5662729590297657737
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8950855035476021338}
|
||||
m_Layer: 5
|
||||
m_Name: Root
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8950855035476021338
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5662729590297657737}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 846681823671095772}
|
||||
- {fileID: 6665974318866355999}
|
||||
m_Father: {fileID: 1727149598719982521}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: -0.000030517578, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &7128973212336692590
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1771748875814093347}
|
||||
- component: {fileID: 4464870872037843803}
|
||||
- component: {fileID: 6617607173830585898}
|
||||
m_Layer: 5
|
||||
m_Name: playerName
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1771748875814093347
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7128973212336692590}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 6665974318866355999}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 30.93, y: -1.59}
|
||||
m_SizeDelta: {x: 146.1, y: 30.63}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &4464870872037843803
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7128973212336692590}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &6617607173830585898
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7128973212336692590}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_FontData:
|
||||
m_Font: {fileID: 12800000, guid: 33a3bdf8f6bd1ec4eba7c4bc58183212, type: 3}
|
||||
m_FontSize: 20
|
||||
m_FontStyle: 0
|
||||
m_BestFit: 1
|
||||
m_MinSize: 4
|
||||
m_MaxSize: 20
|
||||
m_Alignment: 4
|
||||
m_AlignByGeometry: 0
|
||||
m_RichText: 1
|
||||
m_HorizontalOverflow: 0
|
||||
m_VerticalOverflow: 0
|
||||
m_LineSpacing: 1
|
||||
m_Text: PLAYER_NAME
|
||||
|
@ -64,6 +64,85 @@ MonoBehaviour:
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!1 &1793510994393845066
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2940710093054777883}
|
||||
- component: {fileID: 6850622733671985395}
|
||||
- component: {fileID: 2118483068810584522}
|
||||
m_Layer: 5
|
||||
m_Name: ControlSlotInfo
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2940710093054777883
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1793510994393845066}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 2921874279820016524}
|
||||
- {fileID: 3201409976408832832}
|
||||
- {fileID: 2711516940043786061}
|
||||
- {fileID: 3283429487447647189}
|
||||
m_Father: {fileID: 6362836288749559125}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &6850622733671985395
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1793510994393845066}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 3
|
||||
m_Spacing: 0
|
||||
m_ChildForceExpandWidth: 0
|
||||
m_ChildForceExpandHeight: 0
|
||||
m_ChildControlWidth: 0
|
||||
m_ChildControlHeight: 0
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!114 &2118483068810584522
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1793510994393845066}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 909a5b71ba48a9c46a57d43017072837, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1 &2196797712553207707
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -93,7 +172,8 @@ RectTransform:
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Children:
|
||||
- {fileID: 2940710093054777883}
|
||||
m_Father: {fileID: 5353336693430589123}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@ -626,6 +706,7 @@ MonoBehaviour:
|
||||
DelayValue: {fileID: 6486398873987280650}
|
||||
OnlinePlayerCount: {fileID: 9033504323044377285}
|
||||
FPS: {fileID: 2545793518460288919}
|
||||
ControlSlotInfoNode: {fileID: 1793510994393845066}
|
||||
--- !u!1 &5629957813601835122
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1304,3 +1385,423 @@ MonoBehaviour:
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1001 &3627982800791678196
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 2940710093054777883}
|
||||
m_Modifications:
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 300
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 100
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5376230278482525414, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: P3
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8370099016684185830, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_slotIndex
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
--- !u!224 &2711516940043786061 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
m_PrefabInstance: {fileID: 3627982800791678196}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1001 &4208900619059435628
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 2940710093054777883}
|
||||
m_Modifications:
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 300
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 100
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5376230278482525414, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: P4
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8370099016684185830, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_slotIndex
|
||||
value: 3
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
--- !u!224 &3283429487447647189 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
m_PrefabInstance: {fileID: 4208900619059435628}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1001 &4293513748768145657
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 2940710093054777883}
|
||||
m_Modifications:
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 300
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 100
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5376230278482525414, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: P2
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8370099016684185830, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_slotIndex
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
--- !u!224 &3201409976408832832 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
m_PrefabInstance: {fileID: 4293513748768145657}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1001 &4572424957848191029
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 2940710093054777883}
|
||||
m_Modifications:
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Pivot.y
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMax.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMin.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 300
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 100
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5376230278482525414, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: P1
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
--- !u!224 &2921874279820016524 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 1727149598719982521, guid: cf7167f02ca8e8a4eb176121ffa58f50, type: 3}
|
||||
m_PrefabInstance: {fileID: 4572424957848191029}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
|
@ -931,7 +931,8 @@ GameObject:
|
||||
m_Component:
|
||||
- component: {fileID: 802786939}
|
||||
- component: {fileID: 802786941}
|
||||
- component: {fileID: 802786940}
|
||||
- component: {fileID: 802786942}
|
||||
- component: {fileID: 802786943}
|
||||
m_Layer: 5
|
||||
m_Name: Image2
|
||||
m_TagString: Untagged
|
||||
@ -958,7 +959,15 @@ RectTransform:
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &802786940
|
||||
--- !u!222 &802786941
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 802786938}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &802786942
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
@ -967,7 +976,7 @@ MonoBehaviour:
|
||||
m_GameObject: {fileID: 802786938}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
@ -978,24 +987,25 @@ MonoBehaviour:
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: e043954733c440645ba43b09301ee4a6, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!222 &802786941
|
||||
CanvasRenderer:
|
||||
m_Texture: {fileID: 2800000, guid: e043954733c440645ba43b09301ee4a6, type: 3}
|
||||
m_UVRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
--- !u!114 &802786943
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 802786938}
|
||||
m_CullTransparentMesh: 1
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a0987fcca76655248ac8defaffd1cb45, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!224 &939125854 stripped
|
||||
RectTransform:
|
||||
m_CorrespondingSourceObject: {fileID: 3531919739338806919, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
|
||||
@ -1010,9 +1020,6 @@ GameObject:
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1124446957}
|
||||
- component: {fileID: 1124446960}
|
||||
- component: {fileID: 1124446959}
|
||||
- component: {fileID: 1124446958}
|
||||
- component: {fileID: 1124446961}
|
||||
m_Layer: 5
|
||||
m_Name: FilterPreview
|
||||
@ -1028,83 +1035,20 @@ RectTransform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1124446956}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1471857115}
|
||||
- {fileID: 802786939}
|
||||
m_Father: {fileID: 1335662459}
|
||||
m_Father: {fileID: 1599240741}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0, y: 0}
|
||||
--- !u!114 &1124446958
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1124446956}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!114 &1124446959
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1124446956}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_UiScaleMode: 1
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 1920, y: 1080}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 1
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!223 &1124446960
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1124446956}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 1
|
||||
m_Camera: {fileID: 1475480931}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 1
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 1
|
||||
m_TargetDisplay: 0
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!225 &1124446961
|
||||
CanvasGroup:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1153,11 +1097,9 @@ Transform:
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1639312037}
|
||||
- {fileID: 1475480929}
|
||||
- {fileID: 74796459}
|
||||
- {fileID: 1427887270}
|
||||
- {fileID: 1599240741}
|
||||
- {fileID: 1124446957}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1335662460
|
||||
@ -1172,7 +1114,6 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 980f937ad27ad8540afeb8b7f100997e, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_filterVolume: {fileID: 1475480930}
|
||||
m_filterPreview: {fileID: 1124446961}
|
||||
m_xmbBg: {fileID: 730698712}
|
||||
bTest: 0
|
||||
@ -1229,6 +1170,18 @@ PrefabInstance:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 1599240741}
|
||||
m_Modifications:
|
||||
- target: {fileID: 245821230929098307, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 245821230929098307, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 245821230929098307, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1108503213262670097, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -1253,6 +1206,22 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1700008050955832379, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1700008050955832379, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1700008050955832379, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1700008050955832379, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1710183501897154830, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -1341,6 +1310,22 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2256656160383605798, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2256656160383605798, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2256656160383605798, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2256656160383605798, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2580867844924924490, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -1369,6 +1354,158 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2711516940043786061, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2711516940043786061, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2711516940043786061, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2711516940043786061, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2711516940043786061, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2921874279820016524, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2921874279820016524, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2940710093054777883, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2940710093054777883, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2940710093054777883, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2940710093054777883, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2940710093054777883, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2940710093054777883, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2940710093054777883, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3082393374055389930, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3082393374055389930, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3082393374055389930, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3082393374055389930, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3201409976408832832, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3201409976408832832, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3201409976408832832, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3201409976408832832, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3283429487447647189, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3283429487447647189, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3283429487447647189, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3283429487447647189, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3283429487447647189, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3382122818573208955, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3382122818573208955, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3515422821744378301, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3515422821744378301, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3515422821744378301, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3515422821744378301, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3515422821744378301, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3638410964911123998, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3638410964911123998, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3638410964911123998, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3638410964911123998, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4195056312044822544, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -1409,6 +1546,18 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4671900371089820408, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4671900371089820408, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4671900371089820408, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4701095282238438274, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -1457,6 +1606,22 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5155040771471469003, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5155040771471469003, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5155040771471469003, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5155040771471469003, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5179542162941529357, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -1577,6 +1742,22 @@ PrefabInstance:
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6064974212694732928, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6064974212694732928, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6064974212694732928, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6064974212694732928, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6228199563403754553, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -1649,6 +1830,26 @@ PrefabInstance:
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6384207385666895815, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6384207385666895815, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6384207385666895815, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6384207385666895815, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6384207385666895815, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6462781698725903427, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -1705,6 +1906,46 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6696282460080611485, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6696282460080611485, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6696282460080611485, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6696282460080611485, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6696282460080611485, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7042646075262940748, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7042646075262940748, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7042646075262940748, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7042646075262940748, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7042646075262940748, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7158194035478552859, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -1757,6 +1998,18 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7294832541871909085, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7294832541871909085, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7294832541871909085, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7535416527851975519, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -1785,6 +2038,34 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8720207225742131896, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8720207225742131896, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8720207225742131896, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8720207225742131896, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9044517244222250025, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9044517244222250025, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9044517244222250025, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
@ -1884,174 +2165,6 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
imgUI: {fileID: 1471857116}
|
||||
--- !u!1 &1475480928
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1475480929}
|
||||
- component: {fileID: 1475480931}
|
||||
- component: {fileID: 1475480932}
|
||||
- component: {fileID: 1475480930}
|
||||
m_Layer: 5
|
||||
m_Name: GameCamera
|
||||
m_TagString: MainCamera
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1475480929
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1475480928}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.98, y: 20.14, z: 6.23}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1335662459}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1475480930
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1475480928}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
sharedProfile: {fileID: 11400000, guid: 17060e2d2f9e5c340a526f08317e5a98, type: 2}
|
||||
isGlobal: 1
|
||||
blendDistance: 0
|
||||
weight: 1
|
||||
priority: 0
|
||||
--- !u!20 &1475480931
|
||||
Camera:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1475480928}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_ClearFlags: 1
|
||||
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
|
||||
m_projectionMatrixMode: 1
|
||||
m_GateFitMode: 2
|
||||
m_FOVAxisMode: 0
|
||||
m_Iso: 200
|
||||
m_ShutterSpeed: 0.005
|
||||
m_Aperture: 16
|
||||
m_FocusDistance: 10
|
||||
m_FocalLength: 50
|
||||
m_BladeCount: 5
|
||||
m_Curvature: {x: 2, y: 11}
|
||||
m_BarrelClipping: 0.25
|
||||
m_Anamorphism: 0
|
||||
m_SensorSize: {x: 36, y: 24}
|
||||
m_LensShift: {x: 0, y: 0}
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
near clip plane: 0.3
|
||||
far clip plane: 1000
|
||||
field of view: 60
|
||||
orthographic: 1
|
||||
orthographic size: 5
|
||||
m_Depth: -2
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 32
|
||||
m_RenderingPath: -1
|
||||
m_TargetTexture: {fileID: 0}
|
||||
m_TargetDisplay: 0
|
||||
m_TargetEye: 3
|
||||
m_HDR: 1
|
||||
m_AllowMSAA: 1
|
||||
m_AllowDynamicResolution: 0
|
||||
m_ForceIntoRT: 0
|
||||
m_OcclusionCulling: 1
|
||||
m_StereoConvergence: 10
|
||||
m_StereoSeparation: 0.022
|
||||
--- !u!114 &1475480932
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1475480928}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
volumeTrigger: {fileID: 0}
|
||||
volumeLayer:
|
||||
serializedVersion: 2
|
||||
m_Bits: 32
|
||||
stopNaNPropagation: 1
|
||||
finalBlitToCameraTarget: 0
|
||||
antialiasingMode: 0
|
||||
temporalAntialiasing:
|
||||
jitterSpread: 0.75
|
||||
sharpness: 0.25
|
||||
stationaryBlending: 0.95
|
||||
motionBlending: 0.85
|
||||
subpixelMorphologicalAntialiasing:
|
||||
quality: 2
|
||||
fastApproximateAntialiasing:
|
||||
fastMode: 0
|
||||
keepAlpha: 0
|
||||
fog:
|
||||
enabled: 1
|
||||
excludeSkybox: 1
|
||||
debugLayer:
|
||||
lightMeter:
|
||||
width: 512
|
||||
height: 256
|
||||
showCurves: 1
|
||||
histogram:
|
||||
width: 512
|
||||
height: 256
|
||||
channel: 3
|
||||
waveform:
|
||||
exposure: 0.12
|
||||
height: 256
|
||||
vectorscope:
|
||||
size: 256
|
||||
exposure: 0.12
|
||||
overlaySettings:
|
||||
linearDepth: 0
|
||||
motionColorIntensity: 4
|
||||
motionGridSize: 64
|
||||
colorBlindnessType: 0
|
||||
colorBlindnessStrength: 1
|
||||
m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2}
|
||||
m_ShowToolkit: 0
|
||||
m_ShowCustomSorter: 0
|
||||
breakBeforeColorGrading: 0
|
||||
m_BeforeTransparentBundles: []
|
||||
m_BeforeStackBundles:
|
||||
- assemblyQualifiedName: FixingPixelArtGrille, AxibugEmuOnline.Client, Version=0.0.0.0,
|
||||
Culture=neutral, PublicKeyToken=null
|
||||
- assemblyQualifiedName: MattiasCRT, AxibugEmuOnline.Client, Version=0.0.0.0, Culture=neutral,
|
||||
PublicKeyToken=null
|
||||
- assemblyQualifiedName: LCDPostEffect, AxibugEmuOnline.Client, Version=0.0.0.0,
|
||||
Culture=neutral, PublicKeyToken=null
|
||||
m_AfterStackBundles: []
|
||||
--- !u!1 &1498586261
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 3
|
||||
@ -2190,10 +2303,11 @@ RectTransform:
|
||||
m_LocalScale: {x: 0, y: 0, z: 0}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1124446957}
|
||||
- {fileID: 1983793178}
|
||||
- {fileID: 1469631713}
|
||||
- {fileID: 939125854}
|
||||
- {fileID: 1318590597}
|
||||
- {fileID: 1469631713}
|
||||
m_Father: {fileID: 1335662459}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@ -2214,7 +2328,7 @@ GameObject:
|
||||
- component: {fileID: 1639312035}
|
||||
m_Layer: 0
|
||||
m_Name: UICamera
|
||||
m_TagString: Untagged
|
||||
m_TagString: MainCamera
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
@ -2263,7 +2377,7 @@ Camera:
|
||||
field of view: 60
|
||||
orthographic: 1
|
||||
orthographic size: 5
|
||||
m_Depth: -1
|
||||
m_Depth: 0
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 32
|
||||
@ -2467,10 +2581,18 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 406143166925924216, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: -5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 736530578155193984, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 736530578155193984, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 935090267056593628, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
@ -2963,6 +3085,10 @@ PrefabInstance:
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8801936766261209235, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
|
@ -34,6 +34,11 @@ namespace AxibugEmuOnline.Client.ClientCore
|
||||
#region Mono
|
||||
public static TickLoop tickLoop;
|
||||
private static CoroutineRunner coRunner;
|
||||
|
||||
#if UNITY_PSP2
|
||||
public static SonyVitaCommonDialog sonyVitaCommonDialog;
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
|
||||
#if UNITY_PSP2 && !UNITY_EDITOR //PSV真机
|
||||
@ -43,15 +48,13 @@ namespace AxibugEmuOnline.Client.ClientCore
|
||||
#endif
|
||||
public static void Init(Initer initer, bool isTest = false, string testSrvIP = "")
|
||||
{
|
||||
PlayerPrefs.DeleteAll();
|
||||
//其他平台必要的初始化
|
||||
if (UnityEngine.Application.platform == RuntimePlatform.PSP2)
|
||||
{
|
||||
PSP2Init();
|
||||
}
|
||||
|
||||
if (UnityEngine.Application.platform == RuntimePlatform.PSP2)
|
||||
{
|
||||
//PSV 等平台需要手动创建目录
|
||||
PSP2Init();
|
||||
}
|
||||
|
||||
settings = new AppSettings();
|
||||
settings = new AppSettings();
|
||||
|
||||
log = new LogManager();
|
||||
LogManager.OnLog += OnNoSugarNetLog;
|
||||
@ -66,7 +69,7 @@ namespace AxibugEmuOnline.Client.ClientCore
|
||||
CacheMgr = new CacheManager();
|
||||
roomMgr = new AppRoom();
|
||||
share = new AppShare();
|
||||
filter = new FilterManager(initer.m_filterVolume, initer.m_filterPreview, initer.m_xmbBg);
|
||||
filter = new FilterManager(initer.m_filterPreview, initer.m_xmbBg);
|
||||
bTest = isTest;
|
||||
mTestSrvIP = testSrvIP;
|
||||
var go = new GameObject("[AppAxibugEmuOnline]");
|
||||
@ -90,9 +93,12 @@ namespace AxibugEmuOnline.Client.ClientCore
|
||||
Directory.CreateDirectory(PersistentDataPath);
|
||||
|
||||
#if UNITY_PSP2
|
||||
//创建PSV弹窗UI
|
||||
sonyVitaCommonDialog = new GameObject().AddComponent<SonyVitaCommonDialog>();
|
||||
//释放解码 FMV的26M内存,一般游戏用不上(PSP才用那破玩意儿)
|
||||
UnityEngine.PSVita.PSVitaVideoPlayer.TransferMemToMonoHeap();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
private static IEnumerator AppTickFlow()
|
||||
@ -122,7 +128,7 @@ namespace AxibugEmuOnline.Client.ClientCore
|
||||
yield break;
|
||||
}
|
||||
|
||||
AxiHttpProxy.SendWebRequestProxy request = AxiHttpProxy.Get($"{App.httpAPI.WebSiteApi}/CheckStandInfo?platform={platform}&version={Application.version}");
|
||||
AxiHttpProxy.SendWebRequestProxy request = AxiHttpProxy.Get($"{App.httpAPI.WebSiteApi}/CheckStandInfo?platform={platform}&version={Application.version}");
|
||||
yield return request.SendWebRequest;
|
||||
if (!request.downloadHandler.isDone)
|
||||
yield break;
|
||||
|
@ -14,7 +14,6 @@ using System.Threading;
|
||||
|
||||
public static class PSVThread
|
||||
{
|
||||
static Thread psvThread = new Thread(Loop);
|
||||
static AutoResetEvent autoEvent = new AutoResetEvent(false);
|
||||
static Queue<Action> qActs = new Queue<Action>();
|
||||
static Queue<Action> qWork = new Queue<Action>();
|
||||
@ -29,6 +28,7 @@ public static class PSVThread
|
||||
}
|
||||
|
||||
#if UNITY_PSP2
|
||||
static Thread psvThread = new Thread(Loop);
|
||||
static bool bSingleInit = false;
|
||||
static void SingleInit()
|
||||
{
|
||||
|
@ -9,7 +9,10 @@
|
||||
/// 登录成功
|
||||
/// </summary>
|
||||
OnLoginSucceed,
|
||||
|
||||
/// <summary>
|
||||
/// 当登录被置为false时
|
||||
/// </summary>
|
||||
OnLossLoginState,
|
||||
/// <summary>
|
||||
/// 登录失败
|
||||
/// </summary>
|
||||
@ -62,11 +65,20 @@
|
||||
/// <summary>
|
||||
/// 服务器等待Step更新
|
||||
/// </summary>
|
||||
OnRoomWaitStepChange,
|
||||
|
||||
OnRoomWaitStepChange,
|
||||
|
||||
/// <summary>
|
||||
/// 当房间中手柄位信息发生任何变化时触发,进入房间后也应该触发
|
||||
/// </summary>
|
||||
OnRoomSlotDataChanged,
|
||||
OnRoomSlotDataChanged,
|
||||
/// <summary>
|
||||
/// 当手柄连接设置发生变化时触发
|
||||
/// </summary>
|
||||
OnControllerConnectChanged,
|
||||
/// <summary>
|
||||
/// 当本机手柄渴望插入时触发
|
||||
/// <para>参数: <see cref="int"/> 本地手柄序号[0,3]</para>
|
||||
/// </summary>
|
||||
OnLocalJoyDesireInvert
|
||||
}
|
||||
}
|
||||
|
@ -1,28 +1,32 @@
|
||||
using System;
|
||||
using Assets.Script.AppMain.Filter;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
|
||||
namespace AxibugEmuOnline.Client
|
||||
{
|
||||
public abstract class FilterEffect : PostProcessEffectSettings
|
||||
public abstract class FilterEffect
|
||||
{
|
||||
private List<EditableParamerter> m_editableParamList;
|
||||
|
||||
public BoolParameter Enable = new BoolParameter(false);
|
||||
public abstract string Name { get; }
|
||||
public IReadOnlyCollection<EditableParamerter> EditableParam => m_editableParamList.AsReadOnly();
|
||||
|
||||
public abstract string Name { get; }
|
||||
List<EditableParamerter> m_editableParamList;
|
||||
Material m_material;
|
||||
|
||||
protected abstract string ShaderName { get; }
|
||||
|
||||
public FilterEffect()
|
||||
{
|
||||
GetEditableFilterParamters();
|
||||
m_material = new Material(Shader.Find(ShaderName));
|
||||
}
|
||||
protected void GetEditableFilterParamters()
|
||||
void GetEditableFilterParamters()
|
||||
{
|
||||
var parameters = (from t in GetType().GetFields(BindingFlags.Instance | BindingFlags.Public)
|
||||
where t.FieldType.IsSubclassOf(typeof(ParameterOverride))
|
||||
where t.FieldType.IsSubclassOf(typeof(FilterParameter))
|
||||
where t.DeclaringType.IsSubclassOf(typeof(FilterEffect))
|
||||
orderby t.MetadataToken
|
||||
select t);
|
||||
@ -30,7 +34,7 @@ namespace AxibugEmuOnline.Client
|
||||
m_editableParamList = new List<EditableParamerter>();
|
||||
foreach (var param in parameters)
|
||||
{
|
||||
var paramObj = (ParameterOverride)param.GetValue(this);
|
||||
var paramObj = (FilterParameter)param.GetValue(this);
|
||||
var rangeAtt = param.GetCustomAttribute<RangeAttribute>();
|
||||
float min = 0;
|
||||
float max = 10;
|
||||
@ -44,47 +48,41 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
}
|
||||
|
||||
public void Render(Texture src, RenderTexture result)
|
||||
{
|
||||
m_material.SetTexture("_MainTex", src);
|
||||
OnRenderer(m_material, src, result);
|
||||
}
|
||||
|
||||
protected abstract void OnRenderer(Material renderMat, Texture src, RenderTexture result);
|
||||
|
||||
public class EditableParamerter
|
||||
{
|
||||
private ParameterOverride m_paramObject;
|
||||
private FieldInfo valueFieldInfo;
|
||||
private FilterParameter m_paramObject;
|
||||
|
||||
public Type ValueType { get; private set; }
|
||||
public Type ValueType => m_paramObject.ValueType;
|
||||
public string Name { get; private set; }
|
||||
public object Value
|
||||
{
|
||||
get => valueFieldInfo.GetValue(m_paramObject);
|
||||
set
|
||||
{
|
||||
valueFieldInfo.SetValue(m_paramObject, value);
|
||||
m_paramObject.overrideState = true;
|
||||
}
|
||||
get => m_paramObject.Value;
|
||||
set => m_paramObject.Value = value;
|
||||
}
|
||||
|
||||
public object MinValue { get; private set; }
|
||||
public object MaxValue { get; private set; }
|
||||
|
||||
public EditableParamerter(string name, ParameterOverride paramObject, object minValue, object maxValue)
|
||||
public EditableParamerter(string name, FilterParameter paramObject, object minValue, object maxValue)
|
||||
{
|
||||
m_paramObject = paramObject;
|
||||
Name = name;
|
||||
|
||||
var paramType = paramObject.GetType();
|
||||
|
||||
valueFieldInfo = paramType.GetField("value", BindingFlags.Public | BindingFlags.Instance);
|
||||
if (valueFieldInfo != null)
|
||||
{
|
||||
ValueType = valueFieldInfo.FieldType;
|
||||
}
|
||||
else
|
||||
{
|
||||
ValueType = typeof(object);
|
||||
}
|
||||
|
||||
MinValue = minValue;
|
||||
MaxValue = maxValue;
|
||||
}
|
||||
|
||||
public void ResetToDefault() => m_paramObject.overrideState = false;
|
||||
public void ResetToDefault() => m_paramObject.Value = null;
|
||||
|
||||
|
||||
public void Apply(object overrideValue)
|
||||
|
@ -0,0 +1,402 @@
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using static AxibugEmuOnline.Client.FilterEffect;
|
||||
|
||||
namespace AxibugEmuOnline.Client
|
||||
{
|
||||
public class FilterManager
|
||||
{
|
||||
private List<Filter> m_filters;
|
||||
private Dictionary<EnumPlatform, Filter> m_filterPlatforms = new Dictionary<EnumPlatform, Filter>();
|
||||
private AlphaWraper m_previewFilterWraper;
|
||||
FilterRomSetting m_filterRomSetting;
|
||||
/// <summary>
|
||||
/// 滤镜列表
|
||||
/// </summary>
|
||||
public IReadOnlyList<Filter> Filters => m_filters;
|
||||
|
||||
public FilterManager(CanvasGroup filterPreview, CanvasGroup mainBg)
|
||||
{
|
||||
#if UNITY_PSP2
|
||||
m_filters = new List<Filter>();
|
||||
m_filterRomSetting = new FilterRomSetting();
|
||||
m_previewFilterWraper = new AlphaWraper(mainBg, filterPreview, false);
|
||||
return;
|
||||
#endif
|
||||
|
||||
m_filters = new List<Filter>
|
||||
{
|
||||
new Filter(new FixingPixelArtGrille()),
|
||||
new Filter(new LCDPostEffect()),
|
||||
new Filter(new MattiasCRT()),
|
||||
};
|
||||
var json = PlayerPrefs.GetString(nameof(FilterRomSetting));
|
||||
m_filterRomSetting = JsonUtility.FromJson<FilterRomSetting>(json) ?? new FilterRomSetting();
|
||||
|
||||
m_previewFilterWraper = new AlphaWraper(mainBg, filterPreview, false);
|
||||
ShutDownFilterPreview();
|
||||
ShutDownFilter();
|
||||
}
|
||||
|
||||
private RenderTexture result = null;
|
||||
public Texture ExecuteFilterRender(Texture src)
|
||||
{
|
||||
if (result == null)
|
||||
{
|
||||
//result = RenderTexture.GetTemporary(Screen.width, Screen.height);
|
||||
result = Initer.instance.renderTest;
|
||||
}
|
||||
else if (result.width != Screen.width || result.height != Screen.height)
|
||||
{
|
||||
//RenderTexture.ReleaseTemporary(result);
|
||||
//result = RenderTexture.GetTemporary(Screen.width, Screen.height);
|
||||
result = Initer.instance.renderTest;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool anyFilterEnable = false;
|
||||
foreach (var filter in Filters)
|
||||
{
|
||||
if (!filter.m_setting.Enable.GetValue()) continue;
|
||||
filter.m_setting.Render(src, result);
|
||||
anyFilterEnable = true;
|
||||
}
|
||||
|
||||
if (anyFilterEnable)
|
||||
return result;
|
||||
else
|
||||
return src;
|
||||
}
|
||||
|
||||
/// <summary> 关闭滤镜预览 </summary>
|
||||
public void ShutDownFilterPreview()
|
||||
{
|
||||
m_previewFilterWraper.On = false;
|
||||
}
|
||||
|
||||
/// <summary> 开启滤镜预览 </summary>
|
||||
public void EnableFilterPreview()
|
||||
{
|
||||
m_previewFilterWraper.On = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打开滤镜
|
||||
/// </summary>
|
||||
/// <param name="filter"></param>
|
||||
public void EnableFilter(Filter filter)
|
||||
{
|
||||
foreach (var selfFiler in Filters)
|
||||
{
|
||||
if (selfFiler != filter) selfFiler.m_setting.Enable.Override(false);
|
||||
else selfFiler.m_setting.Enable.Override(true);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 关闭滤镜效果
|
||||
/// </summary>
|
||||
public void ShutDownFilter()
|
||||
{
|
||||
//关闭所有后处理效果
|
||||
foreach (var filter in Filters)
|
||||
filter.m_setting.Enable.Override(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 为指定rom设置滤镜以及滤镜的预设
|
||||
/// </summary>
|
||||
/// <param name="rom">rom对象</param>
|
||||
/// <param name="filter">滤镜</param>
|
||||
/// <param name="preset">滤镜预设</param>
|
||||
public void SetupFilter(RomFile rom, Filter filter, FilterPreset preset)
|
||||
{
|
||||
m_filterRomSetting.Setup(rom, filter, preset);
|
||||
|
||||
string json = m_filterRomSetting.ToJson();
|
||||
PlayerPrefs.SetString(nameof(FilterRomSetting), json);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获得指定rom配置的滤镜设置
|
||||
/// </summary>
|
||||
/// <param name="rom">rom对象</param>
|
||||
/// <returns>此元组任意内任意成员都有可能为空</returns>
|
||||
public GetFilterSetting_result GetFilterSetting(RomFile rom)
|
||||
{
|
||||
var value = m_filterRomSetting.Get(rom);
|
||||
Filter filter = null;
|
||||
FilterPreset preset = null;
|
||||
|
||||
//filter = Filters.FirstOrDefault(f => f.Name == value.filterName);
|
||||
//if (filter != null)
|
||||
//{
|
||||
// string presetName = value.presetName;
|
||||
// preset = filter.Presets.FirstOrDefault(p => p.Name == presetName);
|
||||
//}
|
||||
|
||||
filter = Filters.FirstOrDefault(f => f.Name == value.Item1);
|
||||
if (filter != null)
|
||||
{
|
||||
string presetName = value.Item2;
|
||||
preset = filter.Presets.FirstOrDefault(p => p.Name == presetName);
|
||||
}
|
||||
|
||||
return new GetFilterSetting_result()
|
||||
{
|
||||
filter = filter,
|
||||
preset = preset
|
||||
};
|
||||
}
|
||||
|
||||
public struct GetFilterSetting_result
|
||||
{
|
||||
public Filter filter;
|
||||
public FilterPreset preset;
|
||||
}
|
||||
|
||||
public class Filter
|
||||
{
|
||||
public string Name => m_setting.Name;
|
||||
public IReadOnlyCollection<EditableParamerter> Paramerters => m_setting.EditableParam;
|
||||
/// <summary> 滤镜预设 </summary>
|
||||
public List<FilterPreset> Presets = new List<FilterPreset>();
|
||||
/// <summary> 滤镜默认预设 </summary>
|
||||
public FilterPreset DefaultPreset = new FilterPreset("DEFAULT");
|
||||
|
||||
internal FilterEffect m_setting;
|
||||
|
||||
public Filter(FilterEffect setting)
|
||||
{
|
||||
m_setting = setting;
|
||||
|
||||
loadPresets();
|
||||
}
|
||||
|
||||
private void loadPresets()
|
||||
{
|
||||
var json = PlayerPrefs.GetString($"Filter_{Name}_PresetList", string.Empty);
|
||||
var loadedPresets = JsonUtility.FromJson<FilterPresetList>(json);
|
||||
if (loadedPresets == null) return;
|
||||
else Presets = loadedPresets.presets;
|
||||
}
|
||||
|
||||
public void SavePresets()
|
||||
{
|
||||
var json = JsonUtility.ToJson(new FilterPresetList(Presets));
|
||||
PlayerPrefs.SetString($"Filter_{Name}_PresetList", json);
|
||||
}
|
||||
|
||||
public MsgBool CreatePreset(string presetName, out FilterPreset newPreset)
|
||||
{
|
||||
newPreset = null;
|
||||
if (string.IsNullOrWhiteSpace(presetName)) return "名称不能为空";
|
||||
if (Presets.Count(p => p.Name == presetName) != 0) return "名称重复";
|
||||
|
||||
newPreset = new FilterPreset(presetName);
|
||||
Presets.Add(newPreset);
|
||||
|
||||
SavePresets();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void RemovePreset(FilterPreset preset)
|
||||
{
|
||||
if (!Presets.Remove(preset)) return;
|
||||
SavePresets();
|
||||
|
||||
EventInvoker.RaiseFilterPresetRemoved(this, preset);
|
||||
}
|
||||
|
||||
public void ResetPreset()
|
||||
{
|
||||
foreach (var param in Paramerters)
|
||||
{
|
||||
param.ResetToDefault();
|
||||
}
|
||||
}
|
||||
|
||||
public void ApplyPreset(FilterPreset preset)
|
||||
{
|
||||
foreach (var param in Paramerters)
|
||||
{
|
||||
var value = preset.GetParamValue(param.Name, param.ValueType);
|
||||
if (value == null)
|
||||
param.ResetToDefault();
|
||||
else
|
||||
param.Apply(value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
private class FilterPresetList
|
||||
{
|
||||
public List<FilterPreset> presets;
|
||||
|
||||
public FilterPresetList(List<FilterPreset> presets)
|
||||
{
|
||||
this.presets = presets;
|
||||
foreach (var preset in presets)
|
||||
{
|
||||
preset.ReadyForJson();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class FilterPreset
|
||||
{
|
||||
[SerializeField]
|
||||
public string Name;
|
||||
[SerializeField]
|
||||
private List<string> m_paramName = new List<string>();
|
||||
[SerializeField]
|
||||
private List<string> m_valueJson = new List<string>();
|
||||
|
||||
private bool m_cacheReady = false;
|
||||
private Dictionary<string, string> m_paramName2ValueJson;
|
||||
public FilterPreset(string presetName)
|
||||
{
|
||||
Name = presetName;
|
||||
}
|
||||
|
||||
public void ReadyForJson()
|
||||
{
|
||||
prepareCache();
|
||||
|
||||
m_paramName = m_paramName2ValueJson.Keys.ToList();
|
||||
m_valueJson = m_paramName2ValueJson.Values.ToList();
|
||||
}
|
||||
|
||||
public string GetParamValueJson(string paramName)
|
||||
{
|
||||
prepareCache();
|
||||
string value;
|
||||
m_paramName2ValueJson.TryGetValue(paramName, out value);
|
||||
return value;
|
||||
}
|
||||
|
||||
public object GetParamValue(string paramName, Type valueType)
|
||||
{
|
||||
var rawStr = GetParamValueJson(paramName);
|
||||
if (rawStr == null) return null;
|
||||
|
||||
if (valueType == typeof(float))
|
||||
{
|
||||
float floatVal;
|
||||
float.TryParse(rawStr, out floatVal);
|
||||
return floatVal;
|
||||
}
|
||||
else if (valueType.IsEnum)
|
||||
{
|
||||
var names = Enum.GetNames(valueType);
|
||||
var values = Enum.GetValues(valueType);
|
||||
|
||||
for (int i = 0; i < names.Length; i++)
|
||||
{
|
||||
if (names[i].Equals(rawStr))
|
||||
{
|
||||
return values.GetValue(i);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
App.log.Error($"尚未支持的滤镜参数类型{valueType}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetParamValue(string paramName, Type valueType, object value)
|
||||
{
|
||||
prepareCache();
|
||||
m_paramName2ValueJson[paramName] = value.ToString();
|
||||
}
|
||||
|
||||
private void prepareCache()
|
||||
{
|
||||
if (m_cacheReady) return;
|
||||
|
||||
m_paramName2ValueJson = new Dictionary<string, string>();
|
||||
for (int i = 0; i < m_paramName.Count; i++)
|
||||
{
|
||||
m_paramName2ValueJson[m_paramName[i]] = m_valueJson[i];
|
||||
}
|
||||
|
||||
m_cacheReady = true;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class FilterRomSetting
|
||||
{
|
||||
[SerializeField]
|
||||
private List<int> m_romID;
|
||||
[SerializeField]
|
||||
private List<Item> m_items;
|
||||
|
||||
bool m_cacheReady = false;
|
||||
Dictionary<int, Item> m_cache;
|
||||
|
||||
public void Setup(RomFile rom, Filter filter, FilterPreset preset)
|
||||
{
|
||||
prepareCache();
|
||||
|
||||
if (filter == null)
|
||||
m_cache.Remove(rom.ID);
|
||||
else
|
||||
m_cache[rom.ID] = new Item { FilterName = filter.Name, PresetName = preset != null ? preset.Name : null };
|
||||
}
|
||||
|
||||
public string ToJson()
|
||||
{
|
||||
prepareCache();
|
||||
m_romID = m_cache.Keys.ToList();
|
||||
m_items = m_cache.Values.ToList();
|
||||
|
||||
return JsonUtility.ToJson(this);
|
||||
}
|
||||
|
||||
public ValueTuple<string, string> Get(RomFile rom)
|
||||
{
|
||||
prepareCache();
|
||||
|
||||
Item item;
|
||||
m_cache.TryGetValue(rom.ID, out item);
|
||||
return new ValueTuple<string, string>(item.FilterName, item.PresetName);
|
||||
}
|
||||
|
||||
private void prepareCache()
|
||||
{
|
||||
if (m_cacheReady) return;
|
||||
|
||||
if (m_items == null) m_items = new List<Item>();
|
||||
if (m_romID == null) m_romID = new List<int>();
|
||||
m_cache = new Dictionary<int, Item>();
|
||||
for (int i = 0; i < m_romID.Count && i < m_items.Count; i++)
|
||||
{
|
||||
m_cache[m_romID[i]] = m_items[i];
|
||||
}
|
||||
|
||||
m_cacheReady = true;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
struct Item
|
||||
{
|
||||
public string FilterName;
|
||||
public string PresetName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f61dfd2411084ec469cdb3faacca298e
|
@ -0,0 +1,49 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Assets.Script.AppMain.Filter
|
||||
{
|
||||
public abstract class FilterParameter
|
||||
{
|
||||
public abstract Type ValueType { get; }
|
||||
|
||||
object m_overrideValue;
|
||||
protected object m_defaultValue;
|
||||
public object Value
|
||||
{
|
||||
get => m_overrideValue ?? m_defaultValue;
|
||||
set => m_overrideValue = value;
|
||||
}
|
||||
}
|
||||
|
||||
public class FilterParameter<T> : FilterParameter
|
||||
{
|
||||
public override Type ValueType => typeof(T);
|
||||
public void Override(T value)
|
||||
{
|
||||
Value = value;
|
||||
}
|
||||
public T GetValue() => (T)Value;
|
||||
|
||||
public FilterParameter(T defaultValue)
|
||||
{
|
||||
m_defaultValue = defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
public class BoolParameter : FilterParameter<bool>
|
||||
{
|
||||
public BoolParameter(bool defaultValue) : base(defaultValue) { }
|
||||
}
|
||||
|
||||
public class Vector2Parameter : FilterParameter<Vector2>
|
||||
{
|
||||
public Vector2Parameter(Vector2 defaultValue) : base(defaultValue) { }
|
||||
}
|
||||
|
||||
public class FloatParameter : FilterParameter<float>
|
||||
{
|
||||
public FloatParameter(float defaultValue) : base(defaultValue) { }
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 53e95955f1beeb34a87d2046875fa16f
|
@ -1,50 +1,29 @@
|
||||
using AxibugEmuOnline.Client;
|
||||
using Assets.Script.AppMain.Filter;
|
||||
using AxibugEmuOnline.Client;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
|
||||
[System.Serializable]
|
||||
[PostProcess(typeof(FixingPixelArtGrilleRenderer), PostProcessEvent.BeforeStack, "Filter/FixingPixelArtGrille")]
|
||||
public sealed class FixingPixelArtGrille : FilterEffect
|
||||
{
|
||||
public override string Name => nameof(FixingPixelArtGrille);
|
||||
|
||||
public ParameterOverride<EnumMaskStyle> MaskStyle = new ParameterOverride<EnumMaskStyle> { value = EnumMaskStyle.ApertureGrille };
|
||||
|
||||
[Tooltip("Emulated input resolution\nOptimize for resize")]
|
||||
public Vector2Parameter DrawResolution = new Vector2Parameter
|
||||
{
|
||||
value = new Vector2(272, 240)
|
||||
};
|
||||
|
||||
[Tooltip("Hardness of scanline")]
|
||||
protected override string ShaderName => "PostEffect/FixingPixcelArtGrille";
|
||||
public FilterParameter<EnumMaskStyle> MaskStyle = new FilterParameter<EnumMaskStyle>(EnumMaskStyle.ApertureGrille);
|
||||
public Vector2Parameter DrawResolution = new Vector2Parameter(new Vector2(272, 240));
|
||||
[Range(-32, 0)]
|
||||
public FloatParameter HardScan = new FloatParameter { value = -10 };
|
||||
|
||||
[Tooltip("Hardness of pixels in scanline")]
|
||||
public FloatParameter HardScan = new FloatParameter(-10);
|
||||
[Range(-6, 0)]
|
||||
public FloatParameter HardPix = new FloatParameter { value = -2 };
|
||||
|
||||
[Tooltip("Hardness of short vertical bloom")]
|
||||
public FloatParameter HardPix = new FloatParameter(-2);
|
||||
[Range(-8, 0)]
|
||||
public FloatParameter HardBloomScan = new FloatParameter { value = -4.0f };
|
||||
|
||||
[Tooltip("Hardness of short horizontal bloom")]
|
||||
public FloatParameter HardBloomScan = new FloatParameter(-4.0f);
|
||||
[Range(-4, 0)]
|
||||
public FloatParameter HardBloomPix = new FloatParameter { value = -1.5f };
|
||||
|
||||
[Tooltip("Amount of small bloom effect")]
|
||||
public FloatParameter HardBloomPix = new FloatParameter(-1.5f);
|
||||
[Range(0, 1)]
|
||||
public FloatParameter BloomAmount = new FloatParameter { value = 1 / 16f };
|
||||
|
||||
[Tooltip("Display warp")]
|
||||
public Vector2Parameter Warp = new Vector2Parameter { value = new Vector2(1f / 64f, 1f / 24f) };
|
||||
|
||||
[Tooltip("Amount of shadow mask Light")]
|
||||
public FloatParameter BloomAmount = new FloatParameter(1 / 16f);
|
||||
public Vector2Parameter Warp = new Vector2Parameter(new Vector2(1f / 64f, 1f / 24f));
|
||||
[Range(1, 3)]
|
||||
public FloatParameter MaskLight = new FloatParameter { value = 1.5f };
|
||||
public FloatParameter MaskLight = new FloatParameter(1.5f);
|
||||
[Range(0.1f, 1)]
|
||||
[Tooltip("Amount of shadow mask Dark")]
|
||||
public FloatParameter MaskDrak = new FloatParameter { value = 0.5f };
|
||||
public FloatParameter MaskDrak = new FloatParameter(0.5f);
|
||||
|
||||
public enum EnumMaskStyle
|
||||
{
|
||||
@ -53,54 +32,41 @@ public sealed class FixingPixelArtGrille : FilterEffect
|
||||
StretchedVGA,
|
||||
VGAStyle
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class FixingPixelArtGrilleRenderer : PostProcessEffectRenderer<FixingPixelArtGrille>
|
||||
{
|
||||
private Shader shader;
|
||||
private Material material;
|
||||
|
||||
public override void Init()
|
||||
protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result)
|
||||
{
|
||||
shader = Shader.Find("PostEffect/FixingPixcelArtGrille");
|
||||
material = new Material(shader);
|
||||
}
|
||||
renderMat.SetVector("_iResolution", new Vector4(result.width, result.height, 0, 0));
|
||||
renderMat.SetVector("_res", new Vector4(DrawResolution.GetValue().x, DrawResolution.GetValue().y, 0, 0));
|
||||
renderMat.SetFloat("_hardScan", HardScan.GetValue());
|
||||
renderMat.SetFloat("_hardPix", HardPix.GetValue());
|
||||
renderMat.SetFloat("_hardBloomScan", HardBloomScan.GetValue());
|
||||
renderMat.SetFloat("_hardBloomPix", HardBloomPix.GetValue());
|
||||
renderMat.SetFloat("_bloomAmount", BloomAmount.GetValue());
|
||||
renderMat.SetVector("_warp", Warp.GetValue());
|
||||
renderMat.SetFloat("_maskDark", MaskDrak.GetValue());
|
||||
renderMat.SetFloat("_maskLight", MaskLight.GetValue());
|
||||
|
||||
public override void Render(PostProcessRenderContext context)
|
||||
{
|
||||
material.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0));
|
||||
var res = settings.DrawResolution;
|
||||
material.SetVector("_res", new Vector4(res.value.x, res.value.y, 0, 0));
|
||||
material.SetFloat("_hardScan", settings.HardScan.value);
|
||||
material.SetFloat("_hardPix", settings.HardPix.value);
|
||||
material.SetFloat("_hardBloomScan", settings.HardBloomScan.value);
|
||||
material.SetFloat("_hardBloomPix", settings.HardBloomPix.value);
|
||||
material.SetFloat("_bloomAmount", settings.BloomAmount.value);
|
||||
material.SetVector("_warp", settings.Warp.value);
|
||||
material.SetFloat("_maskDark", settings.MaskDrak.value);
|
||||
material.SetFloat("_maskLight", settings.MaskLight.value);
|
||||
renderMat.DisableKeyword("_MASKSTYLE_VGASTYLE");
|
||||
renderMat.DisableKeyword("_MASKSTYLE_TVSTYLE");
|
||||
renderMat.DisableKeyword("_MASKSTYLE_APERTUREGRILLE");
|
||||
renderMat.DisableKeyword("_MASKSTYLE_STRETCHEDVGA");
|
||||
|
||||
material.DisableKeyword("_MASKSTYLE_VGASTYLE");
|
||||
material.DisableKeyword("_MASKSTYLE_TVSTYLE");
|
||||
material.DisableKeyword("_MASKSTYLE_APERTUREGRILLE");
|
||||
material.DisableKeyword("_MASKSTYLE_STRETCHEDVGA");
|
||||
|
||||
switch (settings.MaskStyle.value)
|
||||
switch (MaskStyle.GetValue())
|
||||
{
|
||||
case FixingPixelArtGrille.EnumMaskStyle.VGAStyle:
|
||||
material.EnableKeyword("_MASKSTYLE_VGASTYLE");
|
||||
case EnumMaskStyle.VGAStyle:
|
||||
renderMat.EnableKeyword("_MASKSTYLE_VGASTYLE");
|
||||
break;
|
||||
case FixingPixelArtGrille.EnumMaskStyle.TVStyle:
|
||||
material.EnableKeyword("_MASKSTYLE_TVSTYLE");
|
||||
case EnumMaskStyle.TVStyle:
|
||||
renderMat.EnableKeyword("_MASKSTYLE_TVSTYLE");
|
||||
break;
|
||||
case FixingPixelArtGrille.EnumMaskStyle.ApertureGrille:
|
||||
material.EnableKeyword("_MASKSTYLE_APERTUREGRILLE");
|
||||
case EnumMaskStyle.ApertureGrille:
|
||||
renderMat.EnableKeyword("_MASKSTYLE_APERTUREGRILLE");
|
||||
break;
|
||||
case FixingPixelArtGrille.EnumMaskStyle.StretchedVGA:
|
||||
material.EnableKeyword("_MASKSTYLE_STRETCHEDVGA");
|
||||
case EnumMaskStyle.StretchedVGA:
|
||||
renderMat.EnableKeyword("_MASKSTYLE_STRETCHEDVGA");
|
||||
break;
|
||||
}
|
||||
|
||||
context.command.Blit(context.source, context.destination, material);
|
||||
Graphics.Blit(src, result, renderMat);
|
||||
}
|
||||
}
|
@ -1,96 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-2985742813244632235
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 98a055cea8a1355429d1cbb752c4e60e, type: 3}
|
||||
m_Name: MattiasCRT
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
enabled:
|
||||
overrideState: 1
|
||||
value: 1
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3}
|
||||
m_Name: GameCamera Profile
|
||||
m_EditorClassIdentifier:
|
||||
settings:
|
||||
- {fileID: 117625959343581733}
|
||||
- {fileID: -2985742813244632235}
|
||||
- {fileID: 2118329037781486242}
|
||||
--- !u!114 &117625959343581733
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: e88ab71ab1a47d048ba0e45b742f6140, type: 3}
|
||||
m_Name: FixingPixelArtGrille
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
enabled:
|
||||
overrideState: 1
|
||||
value: 1
|
||||
MaskStyle:
|
||||
overrideState: 0
|
||||
value: 1
|
||||
DrawResolution:
|
||||
overrideState: 0
|
||||
value: {x: 272, y: 240}
|
||||
HardScan:
|
||||
overrideState: 0
|
||||
value: -10
|
||||
HardPix:
|
||||
overrideState: 0
|
||||
value: -2
|
||||
HardBloomScan:
|
||||
overrideState: 0
|
||||
value: -4
|
||||
HardBloomPix:
|
||||
overrideState: 0
|
||||
value: -1.5
|
||||
BloomAmount:
|
||||
overrideState: 0
|
||||
value: 0.0625
|
||||
Warp:
|
||||
overrideState: 0
|
||||
value: {x: 0.015625, y: 0.041666668}
|
||||
MaskLight:
|
||||
overrideState: 0
|
||||
value: 1.5
|
||||
MaskDrak:
|
||||
overrideState: 0
|
||||
value: 0.5
|
||||
--- !u!114 &2118329037781486242
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2a0a5286ac74b734ba8d1e0cfdfb9c8d, type: 3}
|
||||
m_Name: LCDPostEffect
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
enabled:
|
||||
overrideState: 1
|
||||
value: 1
|
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 17060e2d2f9e5c340a526f08317e5a98
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,28 +1,15 @@
|
||||
using AxibugEmuOnline.Client;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
|
||||
[System.Serializable]
|
||||
[PostProcess(typeof(LCDPostEffectRenderer), PostProcessEvent.BeforeStack, "Filter/LCDPostEffect")]
|
||||
public sealed class LCDPostEffect : FilterEffect
|
||||
{
|
||||
public override string Name => nameof(LCDPostEffect);
|
||||
|
||||
protected override string ShaderName => "Filter/LCDPostEffect";
|
||||
|
||||
protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result)
|
||||
{
|
||||
renderMat.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0));
|
||||
Graphics.Blit(src, result, renderMat);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class LCDPostEffectRenderer : PostProcessEffectRenderer<LCDPostEffect>
|
||||
{
|
||||
private Shader shader;
|
||||
private Material material;
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
shader = Shader.Find("Filter/LCDPostEffect");
|
||||
material = new Material(shader);
|
||||
}
|
||||
|
||||
public override void Render(PostProcessRenderContext context)
|
||||
{
|
||||
material.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0));
|
||||
context.command.Blit(context.source, context.destination, material);
|
||||
}
|
||||
}
|
@ -1,28 +1,15 @@
|
||||
using AxibugEmuOnline.Client;
|
||||
using AxibugEmuOnline.Client;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
|
||||
[System.Serializable]
|
||||
[PostProcess(typeof(MattiasCRTRenderer), PostProcessEvent.BeforeStack, "Filter/MattiasCRT")]
|
||||
public sealed class MattiasCRT : FilterEffect
|
||||
{
|
||||
public override string Name => nameof(MattiasCRT);
|
||||
}
|
||||
|
||||
public sealed class MattiasCRTRenderer : PostProcessEffectRenderer<MattiasCRT>
|
||||
{
|
||||
private Shader shader;
|
||||
private Material material;
|
||||
protected override string ShaderName => "Filter/MattiasCRT";
|
||||
|
||||
public override void Init()
|
||||
protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result)
|
||||
{
|
||||
shader = Shader.Find("Filter/MattiasCRT");
|
||||
material = new Material(shader);
|
||||
}
|
||||
|
||||
public override void Render(PostProcessRenderContext context)
|
||||
{
|
||||
material.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0));
|
||||
context.command.Blit(context.source, context.destination, material);
|
||||
renderMat.SetVector("_iResolution", new Vector4(result.width, result.height, 0, 0));
|
||||
Graphics.Blit(src, result, renderMat);
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
[RequireComponent(typeof(RawImage))]
|
||||
public class UIFilterPreviewer : MonoBehaviour
|
||||
{
|
||||
private RawImage m_rawImg;
|
||||
private Texture m_src;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
m_rawImg = GetComponent<RawImage>();
|
||||
m_src = m_rawImg.texture;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
m_rawImg.texture = App.filter.ExecuteFilterRender(m_src);
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a0987fcca76655248ac8defaffd1cb45
|
@ -1,4 +1,4 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AxibugEmuOnline.Client
|
||||
{
|
||||
@ -14,7 +14,9 @@ namespace AxibugEmuOnline.Client
|
||||
void Resume();
|
||||
void SetupScheme();
|
||||
void StartGame(RomFile romFile);
|
||||
void DoReset();
|
||||
void DoReset();
|
||||
IControllerSetuper GetControllerSetuper();
|
||||
|
||||
EnumPlatform Platform { get; }
|
||||
uint Frame { get; }
|
||||
}
|
||||
|
@ -1,12 +1,10 @@
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
|
||||
namespace AxibugEmuOnline.Client
|
||||
{
|
||||
public class Initer : MonoBehaviour
|
||||
{
|
||||
public PostProcessVolume m_filterVolume;
|
||||
public CanvasGroup m_filterPreview;
|
||||
public CanvasGroup m_xmbBg;
|
||||
public static string dev_UUID;
|
||||
|
@ -13,7 +13,7 @@ namespace AxibugEmuOnline.Client.Manager
|
||||
/// </summary>
|
||||
private IEmuCore m_emuCore;
|
||||
|
||||
private VirtualNes.Core.IControllerSetuper m_controllerSetuper;
|
||||
private IControllerSetuper m_controllerSetuper;
|
||||
|
||||
/// <summary>
|
||||
/// unity的c#实现有bug,以接口类型保存的monobehaviour引用,!=和==运算符没有调用到monobehaviour重写过的运算符
|
||||
@ -63,39 +63,31 @@ namespace AxibugEmuOnline.Client.Manager
|
||||
|
||||
m_emuCore.SetupScheme();
|
||||
|
||||
m_controllerSetuper = Supporter.GetControllerSetuper();
|
||||
|
||||
SetupController();
|
||||
m_controllerSetuper = m_emuCore.GetControllerSetuper();
|
||||
|
||||
//自动分配0号手柄到0号手柄位
|
||||
m_controllerSetuper.SetConnect(con0ToSlot: 0);
|
||||
Eventer.Instance.PostEvent(EEvent.OnControllerConnectChanged);
|
||||
|
||||
Eventer.Instance.RegisterEvent(EEvent.OnRoomSlotDataChanged, OnSlotDataChanged);
|
||||
}
|
||||
|
||||
private void OnSlotDataChanged()
|
||||
{
|
||||
SetupController();
|
||||
}
|
||||
long selfUID = App.user.userdata.UID;
|
||||
uint? con0Slot;
|
||||
uint? con1Slot;
|
||||
uint? con2Slot;
|
||||
uint? con3Slot;
|
||||
|
||||
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 0, out con0Slot);
|
||||
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 1, out con1Slot);
|
||||
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 2, out con2Slot);
|
||||
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 3, out con3Slot);
|
||||
|
||||
m_controllerSetuper.SetConnect(con0Slot, con1Slot, con2Slot, con3Slot);
|
||||
|
||||
private void SetupController()
|
||||
{
|
||||
if (!App.roomMgr.InRoom) //不在房间中,自动分配0号手柄到0号手柄位
|
||||
{
|
||||
m_controllerSetuper.SetConnect(con0ToSlot: 0);
|
||||
}
|
||||
else //在房间中则使用服务器下发的手柄槽位信息分配本地手柄
|
||||
{
|
||||
long selfUID = App.user.userdata.UID;
|
||||
uint? con0Slot;
|
||||
uint? con1Slot;
|
||||
uint? con2Slot;
|
||||
uint? con3Slot;
|
||||
|
||||
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 0, out con0Slot);
|
||||
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 1, out con1Slot);
|
||||
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 2, out con2Slot);
|
||||
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 3, out con3Slot);
|
||||
|
||||
m_controllerSetuper.SetConnect(con0Slot, con1Slot, con2Slot, con3Slot);
|
||||
}
|
||||
Eventer.Instance.PostEvent(EEvent.OnControllerConnectChanged);
|
||||
}
|
||||
|
||||
public void StopGame()
|
||||
|
@ -14,7 +14,7 @@ namespace AxibugEmuOnline.Client.Manager
|
||||
public class AppRoom
|
||||
{
|
||||
public Protobuf_Room_MiniInfo mineRoomMiniInfo { get; private set; } = null;
|
||||
public bool InRoom => mineRoomMiniInfo != null;
|
||||
public bool InRoom => App.user.IsLoggedIn && mineRoomMiniInfo != null;
|
||||
public bool IsHost => mineRoomMiniInfo?.HostPlayerUID == App.user.userdata.UID;
|
||||
public bool IsScreenProviderUID => mineRoomMiniInfo?.ScreenProviderUID == App.user.userdata.UID;
|
||||
public RoomGameState RoomState => mineRoomMiniInfo.GameState;
|
||||
@ -35,6 +35,7 @@ namespace AxibugEmuOnline.Client.Manager
|
||||
Protobuf_Room_Create _Protobuf_Room_Create = new Protobuf_Room_Create();
|
||||
Protobuf_Room_Join _Protobuf_Room_Join = new Protobuf_Room_Join();
|
||||
Protobuf_Room_Leave _Protobuf_Room_Leave = new Protobuf_Room_Leave();
|
||||
Protobuf_Room_Change_PlaySlotWithJoy _Protobuf_Room_Change_PlaySlotWithJoy = new Protobuf_Room_Change_PlaySlotWithJoy();
|
||||
Protobuf_Room_Player_Ready _Protobuf_Room_Player_Ready = new Protobuf_Room_Player_Ready();
|
||||
Protobuf_Room_SinglePlayerInputData _Protobuf_Room_SinglePlayerInputData = new Protobuf_Room_SinglePlayerInputData();
|
||||
Protobuf_Screnn_Frame _Protobuf_Screnn_Frame = new Protobuf_Screnn_Frame();
|
||||
@ -298,6 +299,12 @@ namespace AxibugEmuOnline.Client.Manager
|
||||
|
||||
void RecvRoomMyRoomStateChange(byte[] reqData)
|
||||
{
|
||||
if (mineRoomMiniInfo == null)
|
||||
{
|
||||
App.log.Error("RecvRoomMyRoomStateChange 时 mineRoomMiniInfo 为空");
|
||||
return;
|
||||
}
|
||||
|
||||
Protobuf_Room_MyRoom_State_Change msg = ProtoBufHelper.DeSerizlize<Protobuf_Room_MyRoom_State_Change>(reqData);
|
||||
long[] oldRoomPlayer = GetRoom4PlayerUIDs();
|
||||
Protobuf_Room_GamePlaySlot[] oldslotArr = GetRoom4GameSlotMiniInfos();
|
||||
@ -399,8 +406,52 @@ namespace AxibugEmuOnline.Client.Manager
|
||||
// OverlayManager.PopTip($"[{PlayerName}]进入房间,手柄位:P{i}");
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送修改玩家槽位,但是增量
|
||||
/// </summary>
|
||||
/// <param name="dictSlotIdx2LocalJoyIdx">玩家占用房间GamePlaySlot和LocalJoyIdx字典</param>
|
||||
public void SendChangePlaySlotIdxWithJoyIdx(uint localJoyIndex, uint slotIndex)
|
||||
{
|
||||
if (!App.roomMgr.InRoom) return;
|
||||
|
||||
Dictionary<uint, uint> temp = new Dictionary<uint, uint>();
|
||||
for (int i = 0; i < App.roomMgr.mineRoomMiniInfo.GamePlaySlotList.Count; i++)
|
||||
{
|
||||
var item = App.roomMgr.mineRoomMiniInfo.GamePlaySlotList[i];
|
||||
|
||||
if (item.PlayerUID <= 0) continue;
|
||||
if (item.PlayerUID != App.user.userdata.UID) return;
|
||||
temp[(uint)i] = (uint)item.PlayerLocalJoyIdx;
|
||||
}
|
||||
temp[slotIndex] = localJoyIndex;
|
||||
|
||||
SendChangePlaySlotIdxWithJoyIdx(temp);
|
||||
}
|
||||
/// <summary>
|
||||
/// 发送修改玩家槽位,全量
|
||||
/// </summary>
|
||||
/// <param name="dictSlotIdx2LocalJoyIdx">玩家占用房间GamePlaySlot和LocalJoyIdx字典</param>
|
||||
public void SendChangePlaySlotIdxWithJoyIdx(Dictionary<uint, uint> dictSlotIdx2LocalJoyIdx)
|
||||
{
|
||||
if (!InRoom)
|
||||
return;
|
||||
|
||||
_Protobuf_Room_Change_PlaySlotWithJoy.SlotWithJoy.Clear();
|
||||
|
||||
foreach (var slotdata in dictSlotIdx2LocalJoyIdx)
|
||||
{
|
||||
_Protobuf_Room_Change_PlaySlotWithJoy.SlotWithJoy.Add(new Protobuf_PlaySlotIdxWithJoyIdx()
|
||||
{
|
||||
PlayerSlotIdx = (int)slotdata.Key,
|
||||
PlayerLocalJoyIdx = (int)slotdata.Value,
|
||||
});
|
||||
}
|
||||
|
||||
App.log.Info($"SendChangePlaySlotIdxWithJoyIdx");
|
||||
App.network.SendToServer((int)CommandID.CmdRoomChangePlayerWithJoy, ProtoBufHelper.Serizlize(_Protobuf_Room_Change_PlaySlotWithJoy));
|
||||
}
|
||||
/// <summary>
|
||||
/// 上报即时存档
|
||||
/// </summary>
|
||||
@ -512,16 +563,15 @@ namespace AxibugEmuOnline.Client.Manager
|
||||
/// <param name="roomMiniInfo"></param>
|
||||
/// <param name="freeSlots"></param>
|
||||
/// <returns></returns>
|
||||
public static bool GetFreeSlot(this Protobuf_Room_MiniInfo roomMiniInfo, out int[] freeSlots)
|
||||
public static bool GetFreeSlot(this Protobuf_Room_MiniInfo roomMiniInfo, ref List<int> freeSlots)
|
||||
{
|
||||
List<int> temp = new List<int>();
|
||||
freeSlots.Clear();
|
||||
for (int i = 0; i < roomMiniInfo.GamePlaySlotList.Count; i++)
|
||||
{
|
||||
if (roomMiniInfo.GamePlaySlotList[i].PlayerUID <= 0)
|
||||
temp.Add(i);
|
||||
freeSlots.Add(i);
|
||||
}
|
||||
freeSlots = temp.ToArray();
|
||||
return freeSlots.Length > 0;
|
||||
return freeSlots.Count > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -530,15 +580,10 @@ namespace AxibugEmuOnline.Client.Manager
|
||||
public static bool GetPlayerSlotIdxByUid(this Protobuf_Room_MiniInfo roomMiniInfo, long uid, int joyIdx, out uint? slotIdx)
|
||||
{
|
||||
slotIdx = null;
|
||||
//joyIdx取值返回[0,3],这个序号代表玩家本地的手柄编号
|
||||
//todo : 根据uid和controllerIndex 返回占用的位置
|
||||
|
||||
//目前未实现,所有非0号位置的手柄,都返回false
|
||||
|
||||
|
||||
for (int i = 0; i < roomMiniInfo.GamePlaySlotList.Count; i++)
|
||||
{
|
||||
if (roomMiniInfo.GamePlaySlotList[i].PlayerUID == uid)
|
||||
if (roomMiniInfo.GamePlaySlotList[i].PlayerUID == uid && roomMiniInfo.GamePlaySlotList[i].PlayerLocalJoyIdx == joyIdx)
|
||||
{
|
||||
slotIdx = (uint)i;
|
||||
return true;
|
||||
|
@ -0,0 +1,39 @@
|
||||
/// <summary>
|
||||
/// 负责管理本地控制器与具体游戏之间的槽位分配
|
||||
/// </summary>
|
||||
public interface IControllerSetuper
|
||||
{
|
||||
/// <summary>
|
||||
/// 设置本地手柄与游戏手柄槽位的映射,这个方法是一个全量更新手柄插入设置的方法
|
||||
/// </summary>
|
||||
void SetConnect(
|
||||
uint? con0ToSlot = null,
|
||||
uint? con1ToSlot = null,
|
||||
uint? con2ToSlot = null,
|
||||
uint? con3ToSlot = null);
|
||||
|
||||
/// <summary>
|
||||
/// 指定手柄插槽位,获取当前槽位连接的本地手柄序号
|
||||
/// </summary>
|
||||
/// <param name="slotIndex"></param>
|
||||
/// <returns></returns>
|
||||
int? GetSlotConnectingControllerIndex(int slotIndex);
|
||||
IController GetSlotConnectingController(int slotIndex);
|
||||
|
||||
/// <summary>
|
||||
/// 获得一个空的槽位
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
uint? GetFreeSlotIndex();
|
||||
|
||||
/// <summary>
|
||||
/// 增量式的修改一个手柄和一个槽位的连接关系
|
||||
/// </summary>
|
||||
/// <param name="conIndex"></param>
|
||||
/// <param name="slotIndex"></param>
|
||||
void LetControllerConnect(int conIndex, uint slotIndex);
|
||||
}
|
||||
public interface IController
|
||||
{
|
||||
bool AnyButtonDown();
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f567cb126b157854e9f9b2c71f8cda8e
|
@ -1,364 +0,0 @@
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.PostProcessing;
|
||||
using static AxibugEmuOnline.Client.FilterEffect;
|
||||
|
||||
namespace AxibugEmuOnline.Client
|
||||
{
|
||||
public class FilterManager
|
||||
{
|
||||
private PostProcessProfile m_filterPorfile;
|
||||
private List<Filter> m_filters;
|
||||
private Dictionary<EnumPlatform, Filter> m_filterPlatforms = new Dictionary<EnumPlatform, Filter>();
|
||||
private AlphaWraper m_previewFilterWraper;
|
||||
FilterRomSetting m_filterRomSetting;
|
||||
/// <summary>
|
||||
/// 滤镜列表
|
||||
/// </summary>
|
||||
public IReadOnlyList<Filter> Filters => m_filters;
|
||||
|
||||
public FilterManager(PostProcessVolume filterVolume, CanvasGroup filterPreview, CanvasGroup mainBg)
|
||||
{
|
||||
if (filterVolume == null)
|
||||
return;
|
||||
m_filterPorfile = filterVolume.profile;
|
||||
m_filters = m_filterPorfile.settings.Where(setting => setting is FilterEffect).Select(setting => new Filter(setting as FilterEffect)).ToList();
|
||||
var json = PlayerPrefs.GetString(nameof(FilterRomSetting));
|
||||
m_filterRomSetting = JsonUtility.FromJson<FilterRomSetting>(json) ?? new FilterRomSetting();
|
||||
|
||||
m_previewFilterWraper = new AlphaWraper(mainBg, filterPreview, false);
|
||||
ShutDownFilterPreview();
|
||||
ShutDownFilter();
|
||||
}
|
||||
|
||||
/// <summary> 关闭滤镜预览 </summary>
|
||||
public void ShutDownFilterPreview()
|
||||
{
|
||||
m_previewFilterWraper.On = false;
|
||||
}
|
||||
|
||||
/// <summary> 开启滤镜预览 </summary>
|
||||
public void EnableFilterPreview()
|
||||
{
|
||||
m_previewFilterWraper.On = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打开滤镜
|
||||
/// </summary>
|
||||
/// <param name="filter"></param>
|
||||
public void EnableFilter(Filter filter)
|
||||
{
|
||||
foreach (var selfFiler in Filters)
|
||||
{
|
||||
if (selfFiler != filter) selfFiler.m_setting.enabled.Override(false);
|
||||
else selfFiler.m_setting.enabled.Override(true);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 关闭滤镜效果
|
||||
/// </summary>
|
||||
public void ShutDownFilter()
|
||||
{
|
||||
//关闭所有后处理效果
|
||||
foreach (var setting in m_filterPorfile.settings)
|
||||
setting.enabled.Override(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 为指定rom设置滤镜以及滤镜的预设
|
||||
/// </summary>
|
||||
/// <param name="rom">rom对象</param>
|
||||
/// <param name="filter">滤镜</param>
|
||||
/// <param name="preset">滤镜预设</param>
|
||||
public void SetupFilter(RomFile rom, Filter filter, FilterPreset preset)
|
||||
{
|
||||
m_filterRomSetting.Setup(rom, filter, preset);
|
||||
|
||||
string json = m_filterRomSetting.ToJson();
|
||||
PlayerPrefs.SetString(nameof(FilterRomSetting), json);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获得指定rom配置的滤镜设置
|
||||
/// </summary>
|
||||
/// <param name="rom">rom对象</param>
|
||||
/// <returns>此元组任意内任意成员都有可能为空</returns>
|
||||
public GetFilterSetting_result GetFilterSetting(RomFile rom)
|
||||
{
|
||||
var value = m_filterRomSetting.Get(rom);
|
||||
Filter filter = null;
|
||||
FilterPreset preset = null;
|
||||
|
||||
//filter = Filters.FirstOrDefault(f => f.Name == value.filterName);
|
||||
//if (filter != null)
|
||||
//{
|
||||
// string presetName = value.presetName;
|
||||
// preset = filter.Presets.FirstOrDefault(p => p.Name == presetName);
|
||||
//}
|
||||
|
||||
filter = Filters.FirstOrDefault(f => f.Name == value.Item1);
|
||||
if (filter != null)
|
||||
{
|
||||
string presetName = value.Item2;
|
||||
preset = filter.Presets.FirstOrDefault(p => p.Name == presetName);
|
||||
}
|
||||
|
||||
return new GetFilterSetting_result()
|
||||
{
|
||||
filter = filter,
|
||||
preset = preset
|
||||
};
|
||||
}
|
||||
|
||||
public struct GetFilterSetting_result
|
||||
{
|
||||
public Filter filter;
|
||||
public FilterPreset preset;
|
||||
}
|
||||
|
||||
public class Filter
|
||||
{
|
||||
public string Name => m_setting.Name;
|
||||
public IReadOnlyCollection<EditableParamerter> Paramerters => m_setting.EditableParam;
|
||||
/// <summary> 滤镜预设 </summary>
|
||||
public List<FilterPreset> Presets = new List<FilterPreset>();
|
||||
/// <summary> 滤镜默认预设 </summary>
|
||||
public FilterPreset DefaultPreset = new FilterPreset("DEFAULT");
|
||||
|
||||
internal FilterEffect m_setting;
|
||||
|
||||
public Filter(FilterEffect setting)
|
||||
{
|
||||
m_setting = setting;
|
||||
|
||||
loadPresets();
|
||||
}
|
||||
|
||||
private void loadPresets()
|
||||
{
|
||||
var json = PlayerPrefs.GetString($"Filter_{Name}_PresetList", string.Empty);
|
||||
var loadedPresets = JsonUtility.FromJson<FilterPresetList>(json);
|
||||
if (loadedPresets == null) return;
|
||||
else Presets = loadedPresets.presets;
|
||||
}
|
||||
|
||||
public void SavePresets()
|
||||
{
|
||||
var json = JsonUtility.ToJson(new FilterPresetList(Presets));
|
||||
PlayerPrefs.SetString($"Filter_{Name}_PresetList", json);
|
||||
}
|
||||
|
||||
public MsgBool CreatePreset(string presetName, out FilterPreset newPreset)
|
||||
{
|
||||
newPreset = null;
|
||||
if (string.IsNullOrWhiteSpace(presetName)) return "名称不能为空";
|
||||
if (Presets.Count(p => p.Name == presetName) != 0) return "名称重复";
|
||||
|
||||
newPreset = new FilterPreset(presetName);
|
||||
Presets.Add(newPreset);
|
||||
|
||||
SavePresets();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void RemovePreset(FilterPreset preset)
|
||||
{
|
||||
if (!Presets.Remove(preset)) return;
|
||||
SavePresets();
|
||||
|
||||
EventInvoker.RaiseFilterPresetRemoved(this, preset);
|
||||
}
|
||||
|
||||
public void ResetPreset()
|
||||
{
|
||||
foreach (var param in Paramerters)
|
||||
{
|
||||
param.ResetToDefault();
|
||||
}
|
||||
}
|
||||
|
||||
public void ApplyPreset(FilterPreset preset)
|
||||
{
|
||||
foreach (var param in Paramerters)
|
||||
{
|
||||
var value = preset.GetParamValue(param.Name, param.ValueType);
|
||||
if (value == null)
|
||||
param.ResetToDefault();
|
||||
else
|
||||
param.Apply(value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
private class FilterPresetList
|
||||
{
|
||||
public List<FilterPreset> presets;
|
||||
|
||||
public FilterPresetList(List<FilterPreset> presets)
|
||||
{
|
||||
this.presets = presets;
|
||||
foreach (var preset in presets)
|
||||
{
|
||||
preset.ReadyForJson();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class FilterPreset
|
||||
{
|
||||
[SerializeField]
|
||||
public string Name;
|
||||
[SerializeField]
|
||||
private List<string> m_paramName = new List<string>();
|
||||
[SerializeField]
|
||||
private List<string> m_valueJson = new List<string>();
|
||||
|
||||
private bool m_cacheReady = false;
|
||||
private Dictionary<string, string> m_paramName2ValueJson;
|
||||
public FilterPreset(string presetName)
|
||||
{
|
||||
Name = presetName;
|
||||
}
|
||||
|
||||
public void ReadyForJson()
|
||||
{
|
||||
prepareCache();
|
||||
|
||||
m_paramName = m_paramName2ValueJson.Keys.ToList();
|
||||
m_valueJson = m_paramName2ValueJson.Values.ToList();
|
||||
}
|
||||
|
||||
public string GetParamValueJson(string paramName)
|
||||
{
|
||||
prepareCache();
|
||||
string value;
|
||||
m_paramName2ValueJson.TryGetValue(paramName, out value);
|
||||
return value;
|
||||
}
|
||||
|
||||
public object GetParamValue(string paramName, Type valueType)
|
||||
{
|
||||
var rawStr = GetParamValueJson(paramName);
|
||||
if (rawStr == null) return null;
|
||||
|
||||
if (valueType == typeof(float))
|
||||
{
|
||||
float floatVal;
|
||||
float.TryParse(rawStr, out floatVal);
|
||||
return floatVal;
|
||||
}
|
||||
else if (valueType.IsEnum)
|
||||
{
|
||||
var names = Enum.GetNames(valueType);
|
||||
var values = Enum.GetValues(valueType);
|
||||
|
||||
for (int i = 0; i < names.Length; i++)
|
||||
{
|
||||
if (names[i].Equals(rawStr))
|
||||
{
|
||||
return values.GetValue(i);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
App.log.Error($"尚未支持的滤镜参数类型{valueType}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetParamValue(string paramName, Type valueType, object value)
|
||||
{
|
||||
prepareCache();
|
||||
m_paramName2ValueJson[paramName] = value.ToString();
|
||||
}
|
||||
|
||||
private void prepareCache()
|
||||
{
|
||||
if (m_cacheReady) return;
|
||||
|
||||
m_paramName2ValueJson = new Dictionary<string, string>();
|
||||
for (int i = 0; i < m_paramName.Count; i++)
|
||||
{
|
||||
m_paramName2ValueJson[m_paramName[i]] = m_valueJson[i];
|
||||
}
|
||||
|
||||
m_cacheReady = true;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class FilterRomSetting
|
||||
{
|
||||
[SerializeField]
|
||||
private List<int> m_romID;
|
||||
[SerializeField]
|
||||
private List<Item> m_items;
|
||||
|
||||
bool m_cacheReady = false;
|
||||
Dictionary<int, Item> m_cache;
|
||||
|
||||
public void Setup(RomFile rom, Filter filter, FilterPreset preset)
|
||||
{
|
||||
prepareCache();
|
||||
|
||||
if (filter == null)
|
||||
m_cache.Remove(rom.ID);
|
||||
else
|
||||
m_cache[rom.ID] = new Item { FilterName = filter.Name, PresetName = preset != null ? preset.Name : null };
|
||||
}
|
||||
|
||||
public string ToJson()
|
||||
{
|
||||
prepareCache();
|
||||
m_romID = m_cache.Keys.ToList();
|
||||
m_items = m_cache.Values.ToList();
|
||||
|
||||
return JsonUtility.ToJson(this);
|
||||
}
|
||||
|
||||
public ValueTuple<string,string> Get(RomFile rom)
|
||||
{
|
||||
prepareCache();
|
||||
|
||||
Item item;
|
||||
m_cache.TryGetValue(rom.ID, out item);
|
||||
return new ValueTuple<string, string>(item.FilterName, item.PresetName);
|
||||
}
|
||||
|
||||
private void prepareCache()
|
||||
{
|
||||
if (m_cacheReady) return;
|
||||
|
||||
if (m_items == null) m_items = new List<Item>();
|
||||
if (m_romID == null) m_romID = new List<int>();
|
||||
m_cache = new Dictionary<int, Item>();
|
||||
for (int i = 0; i < m_romID.Count && i < m_items.Count; i++)
|
||||
{
|
||||
m_cache[m_romID[i]] = m_items[i];
|
||||
}
|
||||
|
||||
m_cacheReady = true;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
struct Item
|
||||
{
|
||||
public string FilterName;
|
||||
public string PresetName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@ using AxibugEmuOnline.Client.ClientCore;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
@ -14,7 +15,27 @@ namespace AxibugEmuOnline.Client
|
||||
|
||||
public delegate void GetRomListAPI(Action<Resp_GameList> callback, int page, int pageSize = 10);
|
||||
public delegate void SearchRomListAPI(Action<Resp_GameList> callback, string searchKey, int page, int pageSize = 10);
|
||||
public static string UrlEncode(string str)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
foreach (char c in str)
|
||||
{
|
||||
if ((c >= '0' && c <= '9') ||
|
||||
(c >= 'a' && c <= 'z') ||
|
||||
(c >= 'A' && c <= 'Z') ||
|
||||
c == '-' || c == '_' || c == '.' || c == '!' || c == '~' || c == '*' || c == '\'' || c == '(' || c == ')')
|
||||
{
|
||||
sb.Append(c);
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append('%').Append(((int)c).ToString("X2"));
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
public void GetNesRomList(Action<Resp_GameList> callback, int page, int pageSize = 10)
|
||||
{
|
||||
App.StartCoroutine(GetNesRomListFlow(page, pageSize, callback));
|
||||
@ -26,6 +47,13 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
private IEnumerator SearchNesRomListFlow(string searchKey, int page, int pageSize, Action<Resp_GameList> callback)
|
||||
{
|
||||
//避免特殊字符和个别文字编码问题
|
||||
byte[] gb2312Bytes = Encoding.Default.GetBytes(searchKey);
|
||||
byte[] utf8Bytes = Encoding.Convert(Encoding.Default, Encoding.UTF8, gb2312Bytes);
|
||||
// 将UTF-8编码的字节数组转换回字符串(此时是UTF-8编码的字符串)
|
||||
string utf8String = Encoding.UTF8.GetString(utf8Bytes);
|
||||
searchKey = UrlEncode(utf8String);
|
||||
App.log.Info($"search->{utf8String} ->{searchKey}");
|
||||
|
||||
AxiHttpProxy.SendWebRequestProxy request = AxiHttpProxy.Get($"{WebSiteApi}/NesRomList?Page={page}&PageSize={pageSize}&SearchKey={searchKey}");
|
||||
yield return request.SendWebRequest;
|
||||
|
@ -1,4 +1,4 @@
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using AxiReplay;
|
||||
using System;
|
||||
using System.IO;
|
||||
@ -10,6 +10,12 @@ namespace AxibugEmuOnline.Client
|
||||
{
|
||||
public class CoreSupporter : ISupporterImpl
|
||||
{
|
||||
private NesControllerMapper m_controllerMapper;
|
||||
public CoreSupporter(NesControllerMapper conMapper)
|
||||
{
|
||||
m_controllerMapper = conMapper;
|
||||
}
|
||||
|
||||
public Stream OpenRom(string fname)
|
||||
{
|
||||
try
|
||||
@ -57,7 +63,6 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
|
||||
public EmulatorConfig Config { get; private set; } = new EmulatorConfig();
|
||||
public NesControllerMapper ControllerMapper { get; private set; } = new NesControllerMapper();
|
||||
public void PrepareDirectory(string directPath)
|
||||
{
|
||||
Directory.CreateDirectory($"{App.PersistentDataPath}/{directPath}");
|
||||
@ -116,7 +121,7 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
else m_sampledState = default(ControllerState);
|
||||
|
||||
var localState = ControllerMapper.CreateState();
|
||||
var localState = m_controllerMapper.CreateState();
|
||||
var rawData = ToNet(localState);
|
||||
if (LastTestInput != rawData)
|
||||
{
|
||||
@ -127,15 +132,10 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
else
|
||||
{
|
||||
m_sampledState = ControllerMapper.CreateState();
|
||||
m_sampledState = m_controllerMapper.CreateState();
|
||||
}
|
||||
}
|
||||
|
||||
public IControllerSetuper GetControllerSetuper()
|
||||
{
|
||||
return ControllerMapper;
|
||||
}
|
||||
|
||||
public ControllerState FromNet(AxiReplay.ReplayStep step)
|
||||
{
|
||||
var temp = new ServerInputSnapShot();
|
||||
|
@ -1,4 +1,9 @@
|
||||
using UnityEngine;
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using AxibugEmuOnline.Client.Common;
|
||||
using AxibugEmuOnline.Client.Event;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using VirtualNes.Core;
|
||||
|
||||
namespace AxibugEmuOnline.Client
|
||||
@ -17,18 +22,103 @@ namespace AxibugEmuOnline.Client
|
||||
m_states[0] = m_states[1] = m_states[2] = m_states[3] = 0;
|
||||
|
||||
if (Controller0.ConnectSlot.HasValue) m_states[Controller0.ConnectSlot.Value] = Controller0.GetButtons();
|
||||
else if (Controller0.AnyButtonDown()) Eventer.Instance.PostEvent(EEvent.OnLocalJoyDesireInvert, 0);
|
||||
|
||||
if (Controller1.ConnectSlot.HasValue) m_states[Controller1.ConnectSlot.Value] = Controller1.GetButtons();
|
||||
else if (Controller1.AnyButtonDown()) Eventer.Instance.PostEvent(EEvent.OnLocalJoyDesireInvert, 1);
|
||||
|
||||
if (Controller2.ConnectSlot.HasValue) m_states[Controller2.ConnectSlot.Value] = Controller2.GetButtons();
|
||||
else if (Controller2.AnyButtonDown()) Eventer.Instance.PostEvent(EEvent.OnLocalJoyDesireInvert, 2);
|
||||
|
||||
if (Controller3.ConnectSlot.HasValue) m_states[Controller3.ConnectSlot.Value] = Controller3.GetButtons();
|
||||
else if (Controller3.AnyButtonDown()) Eventer.Instance.PostEvent(EEvent.OnLocalJoyDesireInvert, 3);
|
||||
|
||||
var result = new ControllerState(m_states);
|
||||
return result;
|
||||
}
|
||||
|
||||
public void SetConnect(uint? con0ToSlot = null,
|
||||
uint? con1ToSlot = null,
|
||||
uint? con2ToSlot = null,
|
||||
uint? con3ToSlot = null)
|
||||
{
|
||||
Controller0.ConnectSlot = con0ToSlot;
|
||||
Controller1.ConnectSlot = con1ToSlot;
|
||||
Controller2.ConnectSlot = con2ToSlot;
|
||||
Controller3.ConnectSlot = con3ToSlot;
|
||||
}
|
||||
|
||||
public int? GetSlotConnectingControllerIndex(int slotIndex)
|
||||
{
|
||||
if (Controller0.ConnectSlot.HasValue && Controller0.ConnectSlot.Value == slotIndex) return 0;
|
||||
else if (Controller1.ConnectSlot.HasValue && Controller1.ConnectSlot.Value == slotIndex) return 1;
|
||||
else if (Controller2.ConnectSlot.HasValue && Controller2.ConnectSlot.Value == slotIndex) return 2;
|
||||
else if (Controller3.ConnectSlot.HasValue && Controller3.ConnectSlot.Value == slotIndex) return 3;
|
||||
else return null;
|
||||
}
|
||||
|
||||
public IController GetSlotConnectingController(int slotIndex)
|
||||
{
|
||||
if (Controller0.ConnectSlot.HasValue && Controller0.ConnectSlot.Value == slotIndex) return Controller0;
|
||||
else if (Controller1.ConnectSlot.HasValue && Controller1.ConnectSlot.Value == slotIndex) return Controller1;
|
||||
else if (Controller2.ConnectSlot.HasValue && Controller2.ConnectSlot.Value == slotIndex) return Controller2;
|
||||
else if (Controller3.ConnectSlot.HasValue && Controller3.ConnectSlot.Value == slotIndex) return Controller3;
|
||||
else return null;
|
||||
}
|
||||
|
||||
//static HashSet<uint> s_temp = new HashSet<uint>(4);
|
||||
//低版本不能这样初始化
|
||||
static HashSet<uint> s_temp = new HashSet<uint>();
|
||||
public uint? GetFreeSlotIndex()
|
||||
{
|
||||
s_temp.Clear();
|
||||
s_temp.Add(0);
|
||||
s_temp.Add(1);
|
||||
s_temp.Add(2);
|
||||
s_temp.Add(3);
|
||||
|
||||
if (Controller0.ConnectSlot.HasValue) s_temp.Remove(Controller0.ConnectSlot.Value);
|
||||
if (Controller1.ConnectSlot.HasValue) s_temp.Remove(Controller1.ConnectSlot.Value);
|
||||
if (Controller2.ConnectSlot.HasValue) s_temp.Remove(Controller2.ConnectSlot.Value);
|
||||
if (Controller3.ConnectSlot.HasValue) s_temp.Remove(Controller3.ConnectSlot.Value);
|
||||
|
||||
if (s_temp.Count > 0) return s_temp.First();
|
||||
else return null;
|
||||
}
|
||||
|
||||
public void LetControllerConnect(int conIndex, uint slotIndex)
|
||||
{
|
||||
Controller targetController;
|
||||
switch (conIndex)
|
||||
{
|
||||
case 0: targetController = Controller0;break;
|
||||
case 1: targetController = Controller1; break;
|
||||
case 2: targetController = Controller2; break;
|
||||
case 3: targetController = Controller3; break;
|
||||
default:
|
||||
throw new System.Exception($"Not Allowed conIndex Range: {conIndex}");
|
||||
break;
|
||||
}
|
||||
//var targetController = conIndex switch
|
||||
//{
|
||||
// 0 => Controller0,
|
||||
// 1 => Controller1,
|
||||
// 2 => Controller2,
|
||||
// 3 => Controller3,
|
||||
// _ => throw new System.Exception($"Not Allowed conIndex Range: {conIndex}")
|
||||
//};
|
||||
|
||||
if (targetController.ConnectSlot.HasValue) return;
|
||||
|
||||
targetController.ConnectSlot = slotIndex;
|
||||
|
||||
Eventer.Instance.PostEvent(EEvent.OnControllerConnectChanged);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Nes控制器
|
||||
/// </summary>
|
||||
public class Controller
|
||||
public class Controller : IController
|
||||
{
|
||||
/// <summary>
|
||||
/// 控制器编号
|
||||
@ -85,9 +175,30 @@ namespace AxibugEmuOnline.Client
|
||||
return res;
|
||||
}
|
||||
|
||||
public bool AnyButtonDown()
|
||||
{
|
||||
return
|
||||
UP.IsDown ||
|
||||
DOWN.IsDown ||
|
||||
LEFT.IsDown ||
|
||||
RIGHT.IsDown ||
|
||||
A.IsDown ||
|
||||
B.IsDown ||
|
||||
SELECT.IsDown ||
|
||||
START.IsDown ||
|
||||
MIC.IsDown;
|
||||
}
|
||||
|
||||
public static KeyListener GetKey(int controllerInput, EnumButtonType nesConBtnType)
|
||||
{
|
||||
string configKey = $"NES_{controllerInput}_{nesConBtnType}";
|
||||
string configKey = $"NES_{controllerInput}_{nesConBtnType}";
|
||||
|
||||
//PSV平台固定键值
|
||||
if (UnityEngine.Application.platform == RuntimePlatform.PSP2)
|
||||
{
|
||||
return KeyListener.GetPSVitaKey(controllerInput, nesConBtnType);
|
||||
}
|
||||
|
||||
if (PlayerPrefs.HasKey(configKey))
|
||||
{
|
||||
return new KeyListener(PlayerPrefs.GetString(configKey));
|
||||
@ -115,6 +226,11 @@ namespace AxibugEmuOnline.Client
|
||||
/// <summary> 按键监听器 </summary>
|
||||
KeyListener m_keyListener;
|
||||
|
||||
/// <summary> 指示按钮是否正在按下状态 </summary>
|
||||
public bool IsPressing => m_keyListener.IsPressing();
|
||||
/// <summary> 指示按钮是否被按下 </summary>
|
||||
public bool IsDown => m_keyListener.IsDown();
|
||||
|
||||
public Button(Controller controller, EnumButtonType buttonType)
|
||||
{
|
||||
m_hostController = controller;
|
||||
@ -129,18 +245,18 @@ namespace AxibugEmuOnline.Client
|
||||
/// <returns></returns>
|
||||
public EnumButtonType SampleKey()
|
||||
{
|
||||
return m_keyListener.IsPressing() ? m_buttonType : 0;
|
||||
return IsPressing ? m_buttonType : 0;
|
||||
}
|
||||
|
||||
private void CreateListener()
|
||||
{
|
||||
m_keyListener = Controller.GetKey(m_hostController.ControllerIndex, m_buttonType);
|
||||
}
|
||||
}
|
||||
//low C# readonly
|
||||
//public readonly struct KeyListener
|
||||
|
||||
public struct KeyListener
|
||||
}
|
||||
//low C# readonly
|
||||
//public readonly struct KeyListener
|
||||
|
||||
public struct KeyListener
|
||||
{
|
||||
private readonly KeyCode m_key;
|
||||
|
||||
@ -154,8 +270,8 @@ namespace AxibugEmuOnline.Client
|
||||
{
|
||||
m_key = KeyCode.None;
|
||||
|
||||
int result;
|
||||
if (int.TryParse(confStr, out result))
|
||||
int result;
|
||||
if (int.TryParse(confStr, out result))
|
||||
m_key = (KeyCode)result;
|
||||
}
|
||||
|
||||
@ -163,6 +279,10 @@ namespace AxibugEmuOnline.Client
|
||||
{
|
||||
return Input.GetKey(m_key);
|
||||
}
|
||||
public bool IsDown()
|
||||
{
|
||||
return Input.GetKeyDown(m_key);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
@ -173,7 +293,7 @@ namespace AxibugEmuOnline.Client
|
||||
{
|
||||
switch (controllerIndex)
|
||||
{
|
||||
case 1:
|
||||
case 0:
|
||||
switch (nesConBtnType)
|
||||
{
|
||||
case EnumButtonType.LEFT:
|
||||
@ -197,7 +317,7 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
|
||||
break;
|
||||
case 2:
|
||||
case 1:
|
||||
switch (nesConBtnType)
|
||||
{
|
||||
case EnumButtonType.LEFT:
|
||||
@ -223,19 +343,40 @@ namespace AxibugEmuOnline.Client
|
||||
break;
|
||||
}
|
||||
|
||||
return default(KeyListener);
|
||||
}
|
||||
|
||||
|
||||
public static KeyListener GetPSVitaKey(int controllerIndex, EnumButtonType nesConBtnType)
|
||||
{
|
||||
switch (controllerIndex)
|
||||
{
|
||||
case 0:
|
||||
switch (nesConBtnType)
|
||||
{
|
||||
case EnumButtonType.LEFT:
|
||||
return new KeyListener(PSVitaKey.Left);
|
||||
case EnumButtonType.RIGHT:
|
||||
return new KeyListener(PSVitaKey.Right);
|
||||
case EnumButtonType.UP:
|
||||
return new KeyListener(PSVitaKey.Up);
|
||||
case EnumButtonType.DOWN:
|
||||
return new KeyListener(PSVitaKey.Down);
|
||||
case EnumButtonType.START:
|
||||
return new KeyListener(PSVitaKey.Start);
|
||||
case EnumButtonType.SELECT:
|
||||
return new KeyListener(PSVitaKey.Select);
|
||||
case EnumButtonType.A:
|
||||
return new KeyListener(PSVitaKey.Circle);
|
||||
case EnumButtonType.B:
|
||||
return new KeyListener(PSVitaKey.Cross);
|
||||
case EnumButtonType.MIC:
|
||||
return new KeyListener(PSVitaKey.Block);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return default(KeyListener);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetConnect(uint? con0ToSlot = null,
|
||||
uint? con1ToSlot = null,
|
||||
uint? con2ToSlot = null,
|
||||
uint? con3ToSlot = null)
|
||||
{
|
||||
Controller0.ConnectSlot = con0ToSlot;
|
||||
Controller1.ConnectSlot = con1ToSlot;
|
||||
Controller2.ConnectSlot = con2ToSlot;
|
||||
Controller3.ConnectSlot = con3ToSlot;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -16,12 +16,18 @@ namespace AxibugEmuOnline.Client
|
||||
{
|
||||
public VideoProvider VideoProvider;
|
||||
public AudioProvider AudioProvider;
|
||||
|
||||
|
||||
//模拟器核心实例化对象
|
||||
public NES NesCore { get; private set; }
|
||||
|
||||
/// <summary> 是否暂停 </summary>
|
||||
public bool IsPause { get; private set; }
|
||||
public bool IsPause { get; private set; }
|
||||
public NesControllerMapper ControllerMapper { get; private set; }
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
ControllerMapper = new NesControllerMapper();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
@ -38,9 +44,7 @@ namespace AxibugEmuOnline.Client
|
||||
/// </summary>
|
||||
private unsafe void Update()
|
||||
{
|
||||
if (IsPause) return;
|
||||
|
||||
if (NesCore != null)
|
||||
if (NesCore != null && !IsPause)
|
||||
{
|
||||
PushEmulatorFrame();
|
||||
if (InGameUI.Instance.IsNetPlay)
|
||||
@ -49,10 +53,12 @@ namespace AxibugEmuOnline.Client
|
||||
var screenBuffer = NesCore.ppu.GetScreenPtr();
|
||||
VideoProvider.SetDrawData(screenBuffer);
|
||||
}
|
||||
|
||||
VideoProvider.ApplyFilterEffect();
|
||||
}
|
||||
|
||||
public EnumPlatform Platform => EnumPlatform.NES;
|
||||
|
||||
private CoreSupporter m_coreSupporter;
|
||||
/// <summary>
|
||||
/// 指定ROM开始游戏
|
||||
/// </summary>
|
||||
@ -60,7 +66,8 @@ namespace AxibugEmuOnline.Client
|
||||
{
|
||||
StopGame();
|
||||
|
||||
Supporter.Setup(new CoreSupporter());
|
||||
m_coreSupporter = new CoreSupporter(ControllerMapper);
|
||||
Supporter.Setup(m_coreSupporter);
|
||||
Debuger.Setup(new CoreDebuger());
|
||||
|
||||
App.nesRomLib.AddRomFile(rom);
|
||||
@ -140,7 +147,7 @@ namespace AxibugEmuOnline.Client
|
||||
NesCore = null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if UNITY_EDITOR
|
||||
private ControllerState m_lastState;
|
||||
#endif
|
||||
@ -158,8 +165,8 @@ namespace AxibugEmuOnline.Client
|
||||
//推进帧
|
||||
private bool PushEmulatorFrame()
|
||||
{
|
||||
Supporter.SampleInput(NesCore.FrameCount);
|
||||
var controlState = Supporter.GetControllerState();
|
||||
m_coreSupporter.SampleInput(NesCore.FrameCount);
|
||||
var controlState = m_coreSupporter.GetControllerState();
|
||||
|
||||
//如果未收到Input数据,核心帧不推进
|
||||
if (!controlState.valid) return false;
|
||||
@ -204,8 +211,11 @@ namespace AxibugEmuOnline.Client
|
||||
|
||||
EditorUtility.SetDirty(db);
|
||||
AssetDatabase.SaveAssets();
|
||||
}
|
||||
#endif
|
||||
public IControllerSetuper GetControllerSetuper()
|
||||
{
|
||||
return ControllerMapper;
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
@ -2,19 +2,24 @@
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 6
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: NesEmulator_Screen
|
||||
m_Shader: {fileID: 4800000, guid: b351396ff606116478d7f4412abe4e2e, type: 3}
|
||||
m_ShaderKeywords:
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
@ -58,6 +63,7 @@ Material:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _ColorMask: 15
|
||||
@ -85,3 +91,5 @@ Material:
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
|
@ -102,10 +102,10 @@
|
||||
{
|
||||
float2 mapUV = IN.texcoord;
|
||||
|
||||
float start= 8.0/272.0;
|
||||
float end = (272.0-8.0)/272.0;
|
||||
|
||||
float start= 0.02941535;
|
||||
float end = 0.970582;
|
||||
mapUV.x = lerp(start,end, mapUV.x);
|
||||
//uv映射改为ugui BaseMeshEffect 机制实现uv映射,比shader代码更为平滑
|
||||
|
||||
half4 color = tex2D(_MainTex,mapUV);
|
||||
|
||||
|
@ -27,7 +27,7 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
|
||||
// スキャンラインカラー
|
||||
private static int m_nScanlineColor => Supporter.Config.graphics.nScanlineColor;
|
||||
private static int m_nScanlineColor => 75; //patternViewer调试器用的,参照EmulatorConfig.graphics.nScanlineColor的值
|
||||
|
||||
public static float[][] PalConvTbl = new float[8][]
|
||||
{
|
||||
|
@ -1,3 +1,4 @@
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using UnityEngine;
|
||||
@ -14,26 +15,27 @@ namespace AxibugEmuOnline.Client
|
||||
public RawImage Image;
|
||||
#endregion
|
||||
|
||||
|
||||
#region GPU_TURBO
|
||||
//图像数据字节数
|
||||
//图像数据字节数
|
||||
private int TexBufferSize_gpu;
|
||||
//图像数据指针
|
||||
//图像数据指针
|
||||
private IntPtr wrapTexBufferPointer_gpu;
|
||||
//Unity 2D纹理对象,用于UI上绘制最终输出画面
|
||||
//Unity 2D纹理对象,用于UI上绘制最终输出画面
|
||||
private Texture2D wrapTex_gpu;
|
||||
//nes调色板数据,已转换为unity纹理对象
|
||||
//nes调色板数据,已转换为unity纹理对象
|
||||
private Texture2D pPal_gpu;
|
||||
[SerializeField]
|
||||
private Material GPUTurboMat_gpu;
|
||||
private RenderTexture rt_gpu;
|
||||
#endregion
|
||||
|
||||
#region CPU
|
||||
//图像数据字节数
|
||||
//图像数据字节数
|
||||
private int TexBufferSize_cpu;
|
||||
//图像数据指针
|
||||
//图像数据指针
|
||||
private GCHandle wrapTexBufferGH;
|
||||
private IntPtr wrapTexBufferPointer_cpu;
|
||||
//Unity 2D纹理对象,用于UI上绘制最终输出画面
|
||||
//Unity 2D纹理对象,用于UI上绘制最终输出画面
|
||||
private Texture2D wrapTex_cpu;
|
||||
#endregion
|
||||
|
||||
@ -42,25 +44,31 @@ namespace AxibugEmuOnline.Client
|
||||
private void Awake()
|
||||
{
|
||||
DrawCanvas.worldCamera = Camera.main;
|
||||
GPUTurboMat_gpu = Image.material;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (wrapTexBufferGH.IsAllocated)
|
||||
wrapTexBufferGH.Free();
|
||||
|
||||
if (rt_gpu != null)
|
||||
{
|
||||
RenderTexture.ReleaseTemporary(rt_gpu);
|
||||
rt_gpu = null;
|
||||
}
|
||||
}
|
||||
|
||||
public unsafe void SetDrawData(uint* screenData)
|
||||
{
|
||||
PrepareUI(screenData);
|
||||
if (GPUTurbo) PrepareForGPU(screenData);//判断使用GPU还是CPU
|
||||
else PrepareForCPU(screenData);//使用CPU
|
||||
if (GPUTurbo) PrepareForGPU(screenData);//判断使用GPU还是CPU
|
||||
else PrepareForCPU(screenData);//使用CPU
|
||||
|
||||
if (GPUTurbo)
|
||||
{
|
||||
wrapTex_gpu.LoadRawTextureData(wrapTexBufferPointer_gpu, TexBufferSize_gpu);
|
||||
wrapTex_gpu.Apply();
|
||||
Graphics.Blit(wrapTex_gpu, rt_gpu, GPUTurboMat_gpu);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -69,27 +77,32 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
}
|
||||
|
||||
public void ApplyFilterEffect()
|
||||
{
|
||||
Image.texture = App.filter.ExecuteFilterRender(rt_gpu);
|
||||
}
|
||||
|
||||
private unsafe void PrepareUI(uint* screenData)
|
||||
{
|
||||
if (GPUTurbo)
|
||||
{
|
||||
if (Image.material != GPUTurboMat_gpu) Image.material = GPUTurboMat_gpu;
|
||||
|
||||
if (wrapTex_gpu == null)
|
||||
{
|
||||
wrapTex_gpu = new Texture2D(PPU.SCREEN_WIDTH, PPU.SCREEN_HEIGHT, TextureFormat.RGBA32, false);
|
||||
wrapTex_gpu.filterMode = FilterMode.Point;
|
||||
wrapTexBufferPointer_gpu = (IntPtr)screenData;
|
||||
rt_gpu = RenderTexture.GetTemporary(256, wrapTex_gpu.height, 0);
|
||||
rt_gpu.filterMode = FilterMode.Point;
|
||||
rt_gpu.anisoLevel = 0;
|
||||
rt_gpu.antiAliasing = 1;
|
||||
|
||||
TexBufferSize_gpu = wrapTex_gpu.width * wrapTex_gpu.height * 4;
|
||||
}
|
||||
|
||||
if (Image.texture != wrapTex_gpu) Image.texture = wrapTex_gpu;
|
||||
if (Image.texture != rt_gpu) Image.texture = rt_gpu;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Image.material == GPUTurboMat_gpu) Image.material = null;
|
||||
|
||||
if (wrapTex_cpu == null)
|
||||
{
|
||||
wrapTex_cpu = new Texture2D(PPU.SCREEN_WIDTH - 16, PPU.SCREEN_HEIGHT, TextureFormat.RGBA32, false);
|
||||
@ -103,6 +116,7 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
if (Image.texture != wrapTex_cpu) Image.texture = wrapTex_cpu;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private unsafe void PrepareForGPU(uint* screenData)
|
||||
@ -141,7 +155,7 @@ namespace AxibugEmuOnline.Client
|
||||
|
||||
for (int line = 0; line < PPU.SCREEN_HEIGHT; line++)
|
||||
{
|
||||
//PS:如果是CPU计算,宽度减少16的不必要部分,才能对齐
|
||||
//PS:如果是CPU计算,宽度减少16的不必要部分,才能对齐
|
||||
width = PPU.SCREEN_WIDTH - 16;
|
||||
|
||||
while (width > 0)
|
||||
@ -149,17 +163,17 @@ namespace AxibugEmuOnline.Client
|
||||
var edx = screenData[pScn + 8];
|
||||
|
||||
uint index = edx & 0xFF;
|
||||
//按下标颜色查找表中真实颜色
|
||||
//按下标颜色查找表中真实颜色
|
||||
var colorData = palRaw[index];
|
||||
//dst中颜色排列为abgr,而colorData排列为argb
|
||||
uint r = (colorData & 0x00FF0000) >> 16; // 提取Red通道
|
||||
uint g = (colorData & 0x0000FF00) >> 8; // 提取Green通道
|
||||
uint b = (colorData & 0x000000FF); // 提取Blue通道
|
||||
//dst中颜色排列为abgr,而colorData排列为argb
|
||||
uint r = (colorData & 0x00FF0000) >> 16; // 提取Red通道
|
||||
uint g = (colorData & 0x0000FF00) >> 8; // 提取Green通道
|
||||
uint b = (colorData & 0x000000FF); // 提取Blue通道
|
||||
|
||||
//用rgb构建颜色对象(如果非unity 可以用这个rgb 构建System.Drawing.Color 单个颜色对象)
|
||||
//用rgb构建颜色对象(如果非unity 可以用这个rgb 构建System.Drawing.Color 单个颜色对象)
|
||||
uint abgr = 0xFF000000 | (b << 16) | (g << 8) | (r << 0);
|
||||
|
||||
//放进颜色矩阵
|
||||
//放进颜色矩阵
|
||||
Dst[pDst] = abgr;
|
||||
|
||||
pScn += 1;
|
||||
|
@ -1,6 +1,7 @@
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using AxibugEmuOnline.Client.Event;
|
||||
using AxibugProtobuf;
|
||||
using HaoYueNet.ClientNetworkNet.Standard2;
|
||||
using HaoYueNet.ClientNetwork;
|
||||
using System;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading;
|
||||
@ -99,6 +100,7 @@ namespace AxibugEmuOnline.Client.Network
|
||||
public void OnConnectClose()
|
||||
{
|
||||
NetworkDeBugLog("OnConnectClose");
|
||||
Eventer.Instance.PostEvent(EEvent.OnLossLoginState);
|
||||
|
||||
App.user.LoginOutData();
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 13795c31ef56b3648a06122c6b1864f3
|
||||
guid: 4a4a14412f1bcc844bbd2c9bccf50db2
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
@ -0,0 +1,63 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
public class SonyVitaCommonDialog : MonoBehaviour
|
||||
{
|
||||
static Action<string> resultAct = null;
|
||||
void Awake()
|
||||
{
|
||||
#if UNITY_PSP2
|
||||
Sony.Vita.Dialog.Ime.OnGotIMEDialogResult += OnGotIMEDialogResult;
|
||||
Sony.Vita.Dialog.Main.Initialise();
|
||||
#endif
|
||||
}
|
||||
|
||||
public void ShowPSVitaIME(Action<string> callback, string placeHolder, string defaultText)
|
||||
{
|
||||
#if UNITY_PSP2
|
||||
resultAct = callback;
|
||||
Sony.Vita.Dialog.Ime.ImeDialogParams info = new Sony.Vita.Dialog.Ime.ImeDialogParams();
|
||||
|
||||
// Set supported languages, 'or' flags together or set to 0 to support all languages.
|
||||
info.supportedLanguages = Sony.Vita.Dialog.Ime.FlagsSupportedLanguages.LANGUAGE_SIMPLIFIED_CHINESE |
|
||||
Sony.Vita.Dialog.Ime.FlagsSupportedLanguages.LANGUAGE_JAPANESE |
|
||||
Sony.Vita.Dialog.Ime.FlagsSupportedLanguages.LANGUAGE_ENGLISH_GB |
|
||||
Sony.Vita.Dialog.Ime.FlagsSupportedLanguages.LANGUAGE_TRADITIONAL_CHINESE;
|
||||
|
||||
info.languagesForced = true;
|
||||
|
||||
info.type = Sony.Vita.Dialog.Ime.EnumImeDialogType.TYPE_DEFAULT;
|
||||
info.option = 0;
|
||||
info.canCancel = true;
|
||||
info.textBoxMode = Sony.Vita.Dialog.Ime.FlagsTextBoxMode.TEXTBOX_MODE_WITH_CLEAR;
|
||||
info.enterLabel = Sony.Vita.Dialog.Ime.EnumImeDialogEnterLabel.ENTER_LABEL_DEFAULT;
|
||||
info.maxTextLength = 128;
|
||||
info.title = placeHolder;
|
||||
info.initialText = defaultText;
|
||||
Sony.Vita.Dialog.Ime.Open(info);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if UNITY_PSP2
|
||||
void OnGotIMEDialogResult(Sony.Vita.Dialog.Messages.PluginMessage msg)
|
||||
{
|
||||
Sony.Vita.Dialog.Ime.ImeDialogResult result = Sony.Vita.Dialog.Ime.GetResult();
|
||||
Debug.Log("IME result: " + result.result);
|
||||
Debug.Log("IME button: " + result.button);
|
||||
Debug.Log("IME text: " + result.text);
|
||||
if (result.result == Sony.Vita.Dialog.Ime.EnumImeDialogResult.RESULT_OK)
|
||||
{
|
||||
resultAct.Invoke(result.text);
|
||||
resultAct = null;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if UNITY_PSP2
|
||||
void Update ()
|
||||
{
|
||||
Sony.Vita.Dialog.Main.Update();
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
@ -1,11 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5354e2e13dbff91438a04b9de2351645
|
||||
guid: 7bc72e9d59cc9134d8855521049ad788
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -66,7 +66,7 @@ namespace AxibugEmuOnline.Client
|
||||
SetBaseInfo(m_romfile.Alias, m_romfile.Descript, m_romfile.GameTypeDes);
|
||||
App.CacheMgr.GetSpriteCache(m_romfile.ImageURL, (img, url) =>
|
||||
{
|
||||
if (url != m_romfile.ImageURL) return;
|
||||
if (!m_romfile.InfoReady || url != m_romfile.ImageURL) return;
|
||||
|
||||
m_romImage.sprite = img;
|
||||
});
|
||||
|
@ -2,6 +2,7 @@
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using AxibugEmuOnline.Client.Event;
|
||||
using AxibugProtobuf;
|
||||
using VirtualNes.Core;
|
||||
|
||||
namespace AxibugEmuOnline.Client
|
||||
{
|
||||
@ -111,7 +112,19 @@ namespace AxibugEmuOnline.Client
|
||||
|
||||
private void OnRoomCreated()
|
||||
{
|
||||
m_delayCreateRoom = false;
|
||||
if (m_delayCreateRoom)
|
||||
{
|
||||
m_delayCreateRoom = false;
|
||||
//延迟创建房间成功后,同步本地手柄连接状态
|
||||
Dictionary<uint, uint> temp = new Dictionary<uint, uint>();
|
||||
var setuper = App.emu.Core.GetControllerSetuper();
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
var joyIndex = setuper.GetSlotConnectingControllerIndex(i);
|
||||
if (joyIndex != null) temp[(uint)i] = (uint)joyIndex.Value;
|
||||
}
|
||||
App.roomMgr.SendChangePlaySlotIdxWithJoyIdx(temp);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnLoggedIn()
|
||||
|
@ -1,3 +1,4 @@
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
@ -20,11 +21,13 @@ namespace AxibugEmuOnline.Client
|
||||
m_InputUI.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public static InputUI Input(Action<string> callback, string placeHolder, string defaultText)
|
||||
public static void Input(Action<string> callback, string placeHolder, string defaultText)
|
||||
{
|
||||
#if UNITY_PSP2 && !UNITY_EDITOR
|
||||
App.sonyVitaCommonDialog.ShowPSVitaIME(callback, placeHolder, defaultText);
|
||||
#else
|
||||
s_ins.m_InputUI.Show(new ValueTuple<Action<string>, string, string>(callback, placeHolder, defaultText));
|
||||
|
||||
return s_ins.m_InputUI;
|
||||
#endif
|
||||
}
|
||||
|
||||
public static void PopSideBar<T>(List<T> menus, int defaultIndex = 0, Action onClose = null) where T : OptionMenu
|
||||
|
@ -3,142 +3,143 @@ using AxibugEmuOnline.Client.Event;
|
||||
using AxibugEmuOnline.Client.Manager;
|
||||
using AxibugEmuOnline.Client.UI;
|
||||
using AxibugProtobuf;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using Debug = System.Diagnostics.Debug;
|
||||
|
||||
namespace AxibugEmuOnline.Client
|
||||
{
|
||||
public class RoomItem : MenuItem, IVirtualItem
|
||||
{
|
||||
[SerializeField] Image m_roomPreview;
|
||||
[SerializeField] Slider m_downloadProgress;
|
||||
[SerializeField] GameObject m_downloadingFlag;
|
||||
[SerializeField] GameObject m_romReadyFlag;
|
||||
|
||||
private RomFile m_romFile;
|
||||
|
||||
public int Index { get; set; }
|
||||
public int RoomID { get; private set; }
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
|
||||
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomListSingleUpdate, OnRoomSignelUpdate);
|
||||
}
|
||||
|
||||
private void OnRoomSignelUpdate(int roomID)
|
||||
{
|
||||
if (this.RoomID != roomID) return;
|
||||
|
||||
Protobuf_Room_MiniInfo roomInfo;
|
||||
if (App.roomMgr.GetRoomListMiniInfo(roomID, out roomInfo))
|
||||
UpdateUI(roomInfo);
|
||||
}
|
||||
|
||||
public void SetData(object data)
|
||||
{
|
||||
Debug.Assert(data is Protobuf_Room_MiniInfo);
|
||||
|
||||
var roomInfo = (Protobuf_Room_MiniInfo)data;
|
||||
RoomID = roomInfo.RoomID;
|
||||
|
||||
UpdateUI(roomInfo);
|
||||
}
|
||||
|
||||
public override bool OnEnterItem()
|
||||
{
|
||||
if (m_romFile == null) return false;
|
||||
|
||||
if (!m_romFile.RomReady)
|
||||
{
|
||||
m_romFile.BeginDownload();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Protobuf_Room_MiniInfo MiniInfo;
|
||||
if (!App.roomMgr.GetRoomListMiniInfo(RoomID, out MiniInfo))
|
||||
{
|
||||
OverlayManager.PopTip("房间不存在");
|
||||
return false;
|
||||
}
|
||||
int[] freeSlots;
|
||||
if (!MiniInfo.GetFreeSlot(out freeSlots))
|
||||
{
|
||||
OverlayManager.PopTip("无空闲位置");
|
||||
return false;
|
||||
}
|
||||
|
||||
App.roomMgr.SendJoinRoom(RoomID);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateUI(Protobuf_Room_MiniInfo roomInfo)
|
||||
{
|
||||
var hostNick = roomInfo.GetHostNickName();
|
||||
int cur; int max;
|
||||
|
||||
roomInfo.GetRoomPlayers(out cur, out max);
|
||||
SetBaseInfo("--", $"<b>{hostNick}</b>的房间", $"{cur}/{max}");
|
||||
SetIcon(null);
|
||||
|
||||
roomInfo.FetchRomFileInRoomInfo(EnumPlatform.NES, (room, romFile) =>
|
||||
{
|
||||
if (room.RoomID != RoomID) return;
|
||||
|
||||
m_romFile = romFile;
|
||||
Txt.text = romFile.Alias;
|
||||
|
||||
UpdateRomInfoView();
|
||||
App.CacheMgr.GetSpriteCache(romFile.ImageURL, OnGetRomImage);
|
||||
});
|
||||
}
|
||||
|
||||
protected override void Update()
|
||||
{
|
||||
UpdateRomInfoView();
|
||||
base.Update();
|
||||
}
|
||||
|
||||
private void UpdateRomInfoView()
|
||||
{
|
||||
float? downloadingProgress = null;
|
||||
bool romReady = false;
|
||||
|
||||
if (m_romFile != null)
|
||||
{
|
||||
if (m_romFile.IsDownloading)
|
||||
downloadingProgress = m_romFile.Progress;
|
||||
if (m_romFile.RomReady)
|
||||
romReady = true;
|
||||
}
|
||||
|
||||
m_downloadingFlag.SetActiveEx(downloadingProgress.HasValue);
|
||||
if (downloadingProgress.HasValue)
|
||||
m_downloadProgress.value = downloadingProgress.Value;
|
||||
|
||||
m_romReadyFlag.SetActiveEx(romReady);
|
||||
}
|
||||
|
||||
private void OnGetRomImage(Sprite sprite, string url)
|
||||
{
|
||||
if (m_romFile == null) return;
|
||||
if (m_romFile.ImageURL != url) return;
|
||||
|
||||
SetIcon(sprite);
|
||||
}
|
||||
|
||||
public void SetDependencyProperty(object data)
|
||||
{
|
||||
SetSelectState((data is ThirdMenuRoot && ((ThirdMenuRoot)data).SelectIndex == Index));
|
||||
}
|
||||
|
||||
public void Release()
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
}
|
||||
{
|
||||
public class RoomItem : MenuItem, IVirtualItem
|
||||
{
|
||||
[SerializeField] Image m_roomPreview;
|
||||
[SerializeField] Slider m_downloadProgress;
|
||||
[SerializeField] GameObject m_downloadingFlag;
|
||||
[SerializeField] GameObject m_romReadyFlag;
|
||||
|
||||
private RomFile m_romFile;
|
||||
|
||||
public int Index { get; set; }
|
||||
public int RoomID { get; private set; }
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
|
||||
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomListSingleUpdate, OnRoomSignelUpdate);
|
||||
}
|
||||
|
||||
private void OnRoomSignelUpdate(int roomID)
|
||||
{
|
||||
if (this.RoomID != roomID) return;
|
||||
|
||||
Protobuf_Room_MiniInfo roomInfo;
|
||||
if (App.roomMgr.GetRoomListMiniInfo(roomID, out roomInfo))
|
||||
UpdateUI(roomInfo);
|
||||
}
|
||||
|
||||
public void SetData(object data)
|
||||
{
|
||||
Debug.Assert(data is Protobuf_Room_MiniInfo);
|
||||
|
||||
var roomInfo = (Protobuf_Room_MiniInfo)data;
|
||||
RoomID = roomInfo.RoomID;
|
||||
|
||||
UpdateUI(roomInfo);
|
||||
}
|
||||
|
||||
public override bool OnEnterItem()
|
||||
{
|
||||
if (m_romFile == null) return false;
|
||||
|
||||
if (!m_romFile.RomReady)
|
||||
{
|
||||
m_romFile.BeginDownload();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Protobuf_Room_MiniInfo MiniInfo;
|
||||
if (!App.roomMgr.GetRoomListMiniInfo(RoomID, out MiniInfo))
|
||||
{
|
||||
OverlayManager.PopTip("房间不存在");
|
||||
return false;
|
||||
}
|
||||
List<int> freeSlots = new List<int>();
|
||||
if (!MiniInfo.GetFreeSlot(ref freeSlots))
|
||||
{
|
||||
OverlayManager.PopTip("无空闲位置");
|
||||
return false;
|
||||
}
|
||||
|
||||
App.roomMgr.SendJoinRoom(RoomID);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateUI(Protobuf_Room_MiniInfo roomInfo)
|
||||
{
|
||||
var hostNick = roomInfo.GetHostNickName();
|
||||
int cur; int max;
|
||||
|
||||
roomInfo.GetRoomPlayers(out cur, out max);
|
||||
SetBaseInfo("--", $"<b>{hostNick}</b>的房间", $"{cur}/{max}");
|
||||
SetIcon(null);
|
||||
|
||||
roomInfo.FetchRomFileInRoomInfo(EnumPlatform.NES, (room, romFile) =>
|
||||
{
|
||||
if (room.RoomID != RoomID) return;
|
||||
|
||||
m_romFile = romFile;
|
||||
Txt.text = romFile.Alias;
|
||||
|
||||
UpdateRomInfoView();
|
||||
App.CacheMgr.GetSpriteCache(romFile.ImageURL, OnGetRomImage);
|
||||
});
|
||||
}
|
||||
|
||||
protected override void Update()
|
||||
{
|
||||
UpdateRomInfoView();
|
||||
base.Update();
|
||||
}
|
||||
|
||||
private void UpdateRomInfoView()
|
||||
{
|
||||
float? downloadingProgress = null;
|
||||
bool romReady = false;
|
||||
|
||||
if (m_romFile != null)
|
||||
{
|
||||
if (m_romFile.IsDownloading)
|
||||
downloadingProgress = m_romFile.Progress;
|
||||
if (m_romFile.RomReady)
|
||||
romReady = true;
|
||||
}
|
||||
|
||||
m_downloadingFlag.SetActiveEx(downloadingProgress.HasValue);
|
||||
if (downloadingProgress.HasValue)
|
||||
m_downloadProgress.value = downloadingProgress.Value;
|
||||
|
||||
m_romReadyFlag.SetActiveEx(romReady);
|
||||
}
|
||||
|
||||
private void OnGetRomImage(Sprite sprite, string url)
|
||||
{
|
||||
if (m_romFile == null) return;
|
||||
if (m_romFile.ImageURL != url) return;
|
||||
|
||||
SetIcon(sprite);
|
||||
}
|
||||
|
||||
public void SetDependencyProperty(object data)
|
||||
{
|
||||
SetSelectState((data is ThirdMenuRoot && ((ThirdMenuRoot)data).SelectIndex == Index));
|
||||
}
|
||||
|
||||
public void Release()
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,139 @@
|
||||
using AxibugEmuOnline.Client;
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using AxibugEmuOnline.Client.Event;
|
||||
using DG.Tweening;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using VirtualNes.Core;
|
||||
|
||||
public class ControllerInfo : MonoBehaviour
|
||||
{
|
||||
[Header("手柄槽位序号[0,3]")]
|
||||
[SerializeField]
|
||||
int m_slotIndex;
|
||||
|
||||
[SerializeField]
|
||||
GameObject m_connectInfoNode;
|
||||
[SerializeField]
|
||||
Image m_indexIcon;
|
||||
[SerializeField]
|
||||
Text m_playerName;
|
||||
private bool m_islocal;
|
||||
|
||||
public int SlotIndex
|
||||
{
|
||||
get => m_slotIndex;
|
||||
set
|
||||
{
|
||||
if (m_slotIndex == value) return;
|
||||
m_slotIndex = value;
|
||||
UpdateIndexIcon();
|
||||
}
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
UpdateIndexIcon();
|
||||
}
|
||||
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
Eventer.Instance.RegisterEvent(EEvent.OnMineJoinRoom, OnJoinRoom);
|
||||
Eventer.Instance.RegisterEvent(EEvent.OnMineRoomCreated, OnMineRoomCreated);
|
||||
Eventer.Instance.RegisterEvent(EEvent.OnMineLeavnRoom, OnLeaveRoom);
|
||||
Eventer.Instance.RegisterEvent(EEvent.OnLoginSucceed, OnLoginSuccess);
|
||||
Eventer.Instance.RegisterEvent(EEvent.OnLossLoginState, OnLossLoginState);
|
||||
Eventer.Instance.RegisterEvent(EEvent.OnControllerConnectChanged, OnControlConnectChanged);
|
||||
UpdateConnectInfo();
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
Eventer.Instance.UnregisterEvent(EEvent.OnMineJoinRoom, OnJoinRoom);
|
||||
Eventer.Instance.UnregisterEvent(EEvent.OnMineRoomCreated, OnMineRoomCreated);
|
||||
Eventer.Instance.UnregisterEvent(EEvent.OnMineLeavnRoom, OnLeaveRoom);
|
||||
Eventer.Instance.UnregisterEvent(EEvent.OnLoginSucceed, OnLoginSuccess);
|
||||
Eventer.Instance.UnregisterEvent(EEvent.OnLossLoginState, OnLossLoginState);
|
||||
Eventer.Instance.UnregisterEvent(EEvent.OnControllerConnectChanged, OnControlConnectChanged);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (m_islocal)
|
||||
{
|
||||
var controller = App.emu.Core.GetControllerSetuper().GetSlotConnectingController(m_slotIndex);
|
||||
if (controller == null) return;
|
||||
if (!controller.AnyButtonDown()) return;
|
||||
|
||||
m_indexIcon.rectTransform.DOShakePosition(0.1f);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnMineRoomCreated() => UpdateConnectInfo();
|
||||
private void OnJoinRoom() => UpdateConnectInfo();
|
||||
private void OnLeaveRoom() => UpdateConnectInfo();
|
||||
private void OnLoginSuccess() => UpdateConnectInfo();
|
||||
private void OnLossLoginState() => UpdateConnectInfo();
|
||||
private void OnControlConnectChanged() => UpdateConnectInfo();
|
||||
|
||||
private void UpdateConnectInfo()
|
||||
{
|
||||
if (App.roomMgr.InRoom)
|
||||
{
|
||||
var slotInfo = App.roomMgr.mineRoomMiniInfo.GamePlaySlotList[SlotIndex];
|
||||
if (slotInfo.PlayerUID <= 0)
|
||||
SetDisconnect();
|
||||
else
|
||||
UpdateStateView(App.user.userdata.UID == slotInfo.PlayerUID, slotInfo.PlayerNickName, slotInfo.PlayerLocalJoyIdx);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (App.emu.Core.IsNull())
|
||||
{
|
||||
SetDisconnect();
|
||||
return;
|
||||
|
||||
}
|
||||
var connecter = App.emu.Core.GetControllerSetuper();
|
||||
|
||||
var localControlIndex = connecter.GetSlotConnectingControllerIndex(SlotIndex);
|
||||
if (localControlIndex == null)
|
||||
SetDisconnect();
|
||||
else
|
||||
{
|
||||
if (App.user.IsLoggedIn)
|
||||
UpdateStateView(true, App.user.userdata.NickName, localControlIndex.Value);
|
||||
else
|
||||
UpdateStateView(true, "Player", localControlIndex.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateStateView(bool isLocal, string playerName, int slotIndex)
|
||||
{
|
||||
m_islocal = isLocal;
|
||||
|
||||
m_connectInfoNode.SetActiveEx(true);
|
||||
m_playerName.text = playerName;
|
||||
}
|
||||
|
||||
private void SetDisconnect()
|
||||
{
|
||||
m_connectInfoNode.SetActiveEx(false);
|
||||
m_playerName.text = null;
|
||||
m_islocal = false;
|
||||
}
|
||||
|
||||
private void UpdateIndexIcon()
|
||||
{
|
||||
switch (SlotIndex)
|
||||
{
|
||||
case 0: m_indexIcon.sprite = Resources.Load<Sprite>("UIImage/JoyImg/P1"); break;
|
||||
case 1: m_indexIcon.sprite = Resources.Load<Sprite>("UIImage/JoyImg/P2"); break;
|
||||
case 2: m_indexIcon.sprite = Resources.Load<Sprite>("UIImage/JoyImg/P3"); break;
|
||||
case 3: m_indexIcon.sprite = Resources.Load<Sprite>("UIImage/JoyImg/P4"); break;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1bfe4359a48b5c349b439e88eb53b8b1
|
@ -0,0 +1,45 @@
|
||||
using AxibugEmuOnline.Client;
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using AxibugEmuOnline.Client.Event;
|
||||
using AxibugEmuOnline.Client.Manager;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using VirtualNes.Core;
|
||||
|
||||
public class ControllerInfoPanel : MonoBehaviour
|
||||
{
|
||||
private void OnEnable()
|
||||
{
|
||||
Eventer.Instance.RegisterEvent<int>(EEvent.OnLocalJoyDesireInvert, OnLocalJoyDesireInvert);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
Eventer.Instance.UnregisterEvent<int>(EEvent.OnLocalJoyDesireInvert, OnLocalJoyDesireInvert);
|
||||
}
|
||||
|
||||
static List<int> s_freeSlots = new List<int>(4);
|
||||
private void OnLocalJoyDesireInvert(int joyIndex)
|
||||
{
|
||||
if (App.roomMgr.InRoom)
|
||||
{
|
||||
if (!App.roomMgr.mineRoomMiniInfo.GetFreeSlot(ref s_freeSlots)) return;
|
||||
|
||||
//找到第一个空闲手柄插槽
|
||||
var freeSlotIndex = s_freeSlots[0];
|
||||
App.roomMgr.SendChangePlaySlotIdxWithJoyIdx((uint)joyIndex, (uint)freeSlotIndex);
|
||||
}
|
||||
else //不在房间中,直接设置
|
||||
{
|
||||
if (App.emu.Core.IsNull()) return;
|
||||
var setuper = App.emu.Core.GetControllerSetuper();
|
||||
if (setuper == null) return;
|
||||
|
||||
var freeSlotIndex = setuper.GetFreeSlotIndex();
|
||||
if (freeSlotIndex == null) return;
|
||||
|
||||
setuper.LetControllerConnect(joyIndex, freeSlotIndex.Value);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 909a5b71ba48a9c46a57d43017072837
|
@ -1,4 +1,4 @@
|
||||
using AxibugEmuOnline.Client;
|
||||
using AxibugEmuOnline.Client;
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
@ -14,6 +14,7 @@ public class XMBInfoBar : MonoBehaviour
|
||||
public Text DelayValue;
|
||||
public Text OnlinePlayerCount;
|
||||
public Text FPS;
|
||||
public GameObject ControlSlotInfoNode;
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
@ -21,6 +22,11 @@ public class XMBInfoBar : MonoBehaviour
|
||||
RefreshAll();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
ControlSlotInfoNode.SetActiveEx(!App.emu.Core.IsNull());
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
TickLoop.LoopAction_1s -= RefreshAll;
|
||||
@ -32,31 +38,31 @@ public class XMBInfoBar : MonoBehaviour
|
||||
RefreshPower();
|
||||
RefreshDelay();
|
||||
RefreshFps();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// (uint lastFrame, float lastTime)
|
||||
/// </summary>
|
||||
ValueTuple<uint,float> m_lastFrameInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// (uint lastFrame, float lastTime)
|
||||
/// </summary>
|
||||
ValueTuple<uint, float> m_lastFrameInfo;
|
||||
private void RefreshFps()
|
||||
{
|
||||
if (App.emu.Core.IsNull())
|
||||
FPS.gameObject.SetActiveEx(false);
|
||||
else
|
||||
{
|
||||
FPS.gameObject.SetActiveEx(true);
|
||||
//var gap = App.emu.Core.Frame - m_lastFrameInfo.lastFrame;
|
||||
//var time = Time.realtimeSinceStartup - m_lastFrameInfo.lastTime;
|
||||
var gap = App.emu.Core.Frame - m_lastFrameInfo.Item1;
|
||||
var time = Time.realtimeSinceStartup - m_lastFrameInfo.Item2;
|
||||
var fps = gap / time;
|
||||
FPS.text = $"FPS:{fps:.#}";
|
||||
|
||||
//m_lastFrameInfo.lastFrame = App.emu.Core.Frame;
|
||||
//m_lastFrameInfo.lastTime = Time.realtimeSinceStartup;
|
||||
m_lastFrameInfo.Item1 = App.emu.Core.Frame;
|
||||
m_lastFrameInfo.Item2 = Time.realtimeSinceStartup;
|
||||
}
|
||||
FPS.gameObject.SetActiveEx(true);
|
||||
//var gap = App.emu.Core.Frame - m_lastFrameInfo.lastFrame;
|
||||
//var time = Time.realtimeSinceStartup - m_lastFrameInfo.lastTime;
|
||||
var gap = App.emu.Core.Frame - m_lastFrameInfo.Item1;
|
||||
var time = Time.realtimeSinceStartup - m_lastFrameInfo.Item2;
|
||||
var fps = gap / time;
|
||||
FPS.text = $"FPS:{fps:.#}";
|
||||
|
||||
//m_lastFrameInfo.lastFrame = App.emu.Core.Frame;
|
||||
//m_lastFrameInfo.lastTime = Time.realtimeSinceStartup;
|
||||
m_lastFrameInfo.Item1 = App.emu.Core.Frame;
|
||||
m_lastFrameInfo.Item2 = Time.realtimeSinceStartup;
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshDelay()
|
||||
|
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fc7102c34a9fa4148b4aa74d54e82b1f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ac852e7a0b9604940b0f7e0180fd2707
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 41cd7684d8de61f4499c3aa27a6c5b3a
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 50dfce75937af2a44bafd221a0163501
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 091b4306faaa8fc4084836c5237b76c8
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a5222bc76eba99e4c9fc92b70f4103bc
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7abf09a3e3fd84648852e5d972dfd260
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Binary file not shown.
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0fcf57d6e248ead4a874daa51181ec5f
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -73,7 +73,7 @@ namespace VirtualNes.Core
|
||||
|
||||
public void Process(ISoundDataBuffer lpBuffer, uint dwSize)
|
||||
{
|
||||
int nBits = Supporter.Config.sound.nBits;
|
||||
int nBits = Supporter.S.Config.sound.nBits;
|
||||
uint dwLength = (uint)(dwSize / (nBits / 8));
|
||||
int output;
|
||||
QUEUEDATA q = new QUEUEDATA();
|
||||
@ -82,11 +82,11 @@ namespace VirtualNes.Core
|
||||
var pSoundBuf = m_SoundBuffer;
|
||||
int nCcount = 0;
|
||||
|
||||
int nFilterType = Supporter.Config.sound.nFilterType;
|
||||
int nFilterType = Supporter.S.Config.sound.nFilterType;
|
||||
|
||||
if (!Supporter.Config.sound.bEnable)
|
||||
if (!Supporter.S.Config.sound.bEnable)
|
||||
{
|
||||
byte empty = (byte)(Supporter.Config.sound.nRate == 8 ? 128 : 0);
|
||||
byte empty = (byte)(Supporter.S.Config.sound.nRate == 8 ? 128 : 0);
|
||||
for (int i = 0; i < dwSize; i++)
|
||||
lpBuffer.WriteByte(empty);
|
||||
return;
|
||||
@ -108,7 +108,7 @@ namespace VirtualNes.Core
|
||||
MemoryUtility.ZEROMEMORY(vol, vol.Length);
|
||||
|
||||
var bMute = m_bMute;
|
||||
var nVolume = Supporter.Config.sound.nVolume;
|
||||
var nVolume = Supporter.S.Config.sound.nVolume;
|
||||
|
||||
int nMasterVolume = bMute[0] ? nVolume[0] : 0;
|
||||
|
||||
@ -151,7 +151,7 @@ namespace VirtualNes.Core
|
||||
vol[23] = (int)(bMute[8] ? (FME7_VOL * nVolume[11] * nMasterVolume) / (100 * 100) : 0);
|
||||
|
||||
// double cycle_rate = ((double)FRAME_CYCLES*60.0/12.0)/(double)Config.sound.nRate;
|
||||
double cycle_rate = (nes.nescfg.FrameCycles * 60.0 / 12.0) / Supporter.Config.sound.nRate;
|
||||
double cycle_rate = (nes.nescfg.FrameCycles * 60.0 / 12.0) / Supporter.S.Config.sound.nRate;
|
||||
|
||||
// CPUサイクル数がループしてしまった時の対策処理
|
||||
if (elapsed_time > nes.cpu.GetTotalCycles())
|
||||
@ -253,7 +253,7 @@ namespace VirtualNes.Core
|
||||
// DC成分のカット(HPF TEST)
|
||||
{
|
||||
// static double cutoff = (2.0*3.141592653579*40.0/44100.0);
|
||||
double cutoff = cutofftemp / Supporter.Config.sound.nRate;
|
||||
double cutoff = cutofftemp / Supporter.S.Config.sound.nRate;
|
||||
double @in, @out;
|
||||
|
||||
@in = output;
|
||||
@ -436,7 +436,7 @@ namespace VirtualNes.Core
|
||||
public void SoundSetup()
|
||||
{
|
||||
float fClock = nes.nescfg.CpuClock;
|
||||
int nRate = Supporter.Config.sound.nRate;
|
||||
int nRate = Supporter.S.Config.sound.nRate;
|
||||
|
||||
@internal.Setup(fClock, nRate);
|
||||
vrc6.Setup(fClock, nRate);
|
||||
@ -460,7 +460,7 @@ namespace VirtualNes.Core
|
||||
elapsed_time = 0;
|
||||
|
||||
float fClock = nes.nescfg.CpuClock;
|
||||
int nRate = Supporter.Config.sound.nRate;
|
||||
int nRate = Supporter.S.Config.sound.nRate;
|
||||
|
||||
@internal.Reset(fClock, nRate);
|
||||
vrc6.Reset(fClock, nRate);
|
||||
|
@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
using System;
|
||||
|
||||
namespace VirtualNes.Core
|
||||
@ -184,15 +184,15 @@ namespace VirtualNes.Core
|
||||
|
||||
Setup(fClock, nRate);
|
||||
|
||||
// $4011反場ヽ趙仄卅中
|
||||
// $4011は初期化しない
|
||||
ushort addr;
|
||||
for (addr = 0x4000; addr <= 0x4010; addr++)
|
||||
{
|
||||
Write(addr, 0x00);
|
||||
SyncWrite(addr, 0x00);
|
||||
}
|
||||
// Write( 0x4001, 0x08 ); // Reset媆反inc乒奈玉卞卅月?
|
||||
// Write( 0x4005, 0x08 ); // Reset媆反inc乒奈玉卞卅月?
|
||||
// Write( 0x4001, 0x08 ); // Reset時はincモードになる?
|
||||
// Write( 0x4005, 0x08 ); // Reset時はincモードになる?
|
||||
Write(0x4012, 0x00);
|
||||
Write(0x4013, 0x00);
|
||||
Write(0x4015, 0x00);
|
||||
@ -200,7 +200,7 @@ namespace VirtualNes.Core
|
||||
SyncWrite(0x4013, 0x00);
|
||||
SyncWrite(0x4015, 0x00);
|
||||
|
||||
// $4017反𤩸五煋心匹場ヽ趙仄卅中(場ヽ乒奈玉互0匹丐月及毛ヽ渾仄凶末白玄互丐月鮋)
|
||||
// $4017は書き込みで初期化しない(初期モードが0であるのを期待したソフトがある為)
|
||||
FrameIRQ = 0xC0;
|
||||
FrameCycle = 0;
|
||||
FrameIRQoccur = 0;
|
||||
@ -301,7 +301,7 @@ namespace VirtualNes.Core
|
||||
case 0x4017:
|
||||
break;
|
||||
|
||||
// VirtuaNES嘐衄禾奈玄
|
||||
// VirtuaNES固有ポート
|
||||
case 0x4018:
|
||||
UpdateRectangle(ch0, data);
|
||||
UpdateRectangle(ch1, data);
|
||||
@ -635,7 +635,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
}
|
||||
|
||||
// 奶件民平堪中皿民用奶朮市永玄(TEST)
|
||||
// インチキ臭いプチノイズカット(TEST)
|
||||
ch4.dpcm_output_real = ((ch4.reg[1] & 0x01) + ch4.dpcm_value * 2) - 0x40;
|
||||
if (Math.Abs(ch4.dpcm_output_real - ch4.dpcm_output_fake) <= 8)
|
||||
{
|
||||
@ -712,7 +712,7 @@ namespace VirtualNes.Core
|
||||
private int RenderTriangle()
|
||||
{
|
||||
int vol;
|
||||
if (Supporter.Config.sound.bDisableVolumeEffect)
|
||||
if (Supporter.S.Config.sound.bDisableVolumeEffect)
|
||||
{
|
||||
vol = 256;
|
||||
}
|
||||
@ -731,7 +731,7 @@ namespace VirtualNes.Core
|
||||
return ch2.nowvolume * vol / 256;
|
||||
}
|
||||
|
||||
if (!(Supporter.Config.sound.bChangeTone && ChannelTone[2, 0] != 0))
|
||||
if (!(Supporter.S.Config.sound.bChangeTone && ChannelTone[2, 0] != 0))
|
||||
{
|
||||
ch2.phaseacc -= cycle_rate;
|
||||
if (ch2.phaseacc >= 0)
|
||||
@ -756,7 +756,7 @@ namespace VirtualNes.Core
|
||||
return ch2.nowvolume * vol / 256;
|
||||
}
|
||||
|
||||
// 樓笭ⅸ歙
|
||||
// 加重平均
|
||||
int num_times, total;
|
||||
num_times = total = 0;
|
||||
while (ch2.phaseacc < 0)
|
||||
@ -799,7 +799,7 @@ namespace VirtualNes.Core
|
||||
return ch2.nowvolume * vol / 256;
|
||||
}
|
||||
|
||||
// 樓笭ⅸ歙
|
||||
// 加重平均
|
||||
int num_times, total;
|
||||
num_times = total = 0;
|
||||
while (ch2.phaseacc < 0)
|
||||
@ -832,9 +832,9 @@ namespace VirtualNes.Core
|
||||
}
|
||||
int volume = ch.nowvolume;
|
||||
|
||||
if (!(Supporter.Config.sound.bChangeTone && (ChannelTone[(ch.complement == 0) ? 0 : 1, ch.reg[0] >> 6]) != 0))
|
||||
if (!(Supporter.S.Config.sound.bChangeTone && (ChannelTone[(ch.complement == 0) ? 0 : 1, ch.reg[0] >> 6]) != 0))
|
||||
{
|
||||
// 娗嶲<EFBFBD>燴
|
||||
// 補間処理
|
||||
double total;
|
||||
double sample_weight = ch.phaseacc;
|
||||
if (sample_weight > cycle_rate)
|
||||
@ -864,7 +864,7 @@ namespace VirtualNes.Core
|
||||
int x = ChannelTone[(ch.complement == 0) ? 0 : 1, ch.reg[0] >> 6] - 1;
|
||||
int pTone = 0;
|
||||
|
||||
// 載陔剠仄
|
||||
// 更新無し
|
||||
ch.phaseacc -= cycle_rate * 2;
|
||||
if (ch.phaseacc >= 0)
|
||||
{
|
||||
@ -872,7 +872,7 @@ namespace VirtualNes.Core
|
||||
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
||||
}
|
||||
|
||||
// 1旦氾永皿分仃載陔
|
||||
// 1ステップだけ更新
|
||||
int freq = INT2FIX(ch.freq + 1);
|
||||
if (freq > cycle_rate * 2)
|
||||
{
|
||||
@ -882,7 +882,7 @@ namespace VirtualNes.Core
|
||||
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
||||
}
|
||||
|
||||
// 樓笭ⅸ歙
|
||||
// 加重平均
|
||||
int num_times, total;
|
||||
num_times = total = 0;
|
||||
while (ch.phaseacc < 0)
|
||||
@ -1015,7 +1015,7 @@ namespace VirtualNes.Core
|
||||
SyncWrite4017(data);
|
||||
break;
|
||||
|
||||
// VirtuaNES娚葲<EFBFBD><EFBFBD><EFBFBD>
|
||||
// VirtuaNES屌桳億乕僩
|
||||
case 0x4018:
|
||||
SyncUpdateRectangle(ch0, data);
|
||||
SyncUpdateRectangle(ch1, data);
|
||||
|
@ -1110,7 +1110,7 @@ namespace VirtualNes.Core
|
||||
case 0xD2: /* JAM */
|
||||
case 0xF2: /* JAM */
|
||||
default:
|
||||
if (!Supporter.Config.emulator.bIllegalOp)
|
||||
if (!Supporter.S.Config.emulator.bIllegalOp)
|
||||
{
|
||||
throw new Exception("IllegalOp");
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ namespace VirtualNes.Core
|
||||
Debuger.Log($"SOUND CODE:{addr & 0x1F:X2}");
|
||||
|
||||
// OSDにするべきか…
|
||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
||||
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||
{
|
||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||
//DirectSound.EsfAllStop();
|
||||
|
@ -43,7 +43,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
|
||||
// OSDにするべきか…
|
||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
||||
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||
{
|
||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||
//DirectSound.EsfAllStop();
|
||||
|
@ -57,7 +57,7 @@ namespace VirtualNes.Core
|
||||
9,10, 8,11,13,12,14,15 };
|
||||
|
||||
// OSDにするべきか…
|
||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
||||
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||
{
|
||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||
Debuger.Log($"CODE {data:X2}");
|
||||
|
@ -326,7 +326,7 @@ namespace VirtualNes.Core
|
||||
if (pad.GetExController() != (int)EXCONTROLLER.EXCONTROLLER_TURBOFILE)
|
||||
return;
|
||||
|
||||
var fp = Supporter.OpenFile(Supporter.Config.path.szSavePath, "TurboFile.vtf");
|
||||
var fp = Supporter.S.OpenFile(Supporter.S.Config.path.szSavePath, "TurboFile.vtf");
|
||||
try
|
||||
{
|
||||
if (fp == null)
|
||||
@ -367,10 +367,10 @@ namespace VirtualNes.Core
|
||||
if (!rom.IsSAVERAM())
|
||||
return;
|
||||
|
||||
var saveFileDir = Supporter.Config.path.szSavePath;
|
||||
var saveFileDir = Supporter.S.Config.path.szSavePath;
|
||||
var saveFileName = $"{rom.GetRomName()}.sav";
|
||||
|
||||
var fp = Supporter.OpenFile(saveFileDir, saveFileName);
|
||||
var fp = Supporter.S.OpenFile(saveFileDir, saveFileName);
|
||||
|
||||
try
|
||||
{
|
||||
@ -502,13 +502,13 @@ namespace VirtualNes.Core
|
||||
EmulationCPU(nescfg.ScanlineCycles);
|
||||
if (bDraw)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -518,7 +518,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
else
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -535,13 +535,13 @@ namespace VirtualNes.Core
|
||||
EmulationCPU(nescfg.HDrawCycles);
|
||||
if (bDraw)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -551,7 +551,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
else
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -658,7 +658,7 @@ namespace VirtualNes.Core
|
||||
// 僗僋儕乕儞昤夋(Scanline 1乣239)
|
||||
if (bDraw)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
ppu.ScanlineNext();
|
||||
EmulationCPU(FETCH_CYCLES * 10);
|
||||
mapper.HSync(scanline);
|
||||
@ -670,7 +670,7 @@ namespace VirtualNes.Core
|
||||
{
|
||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
ppu.ScanlineNext();
|
||||
EmulationCPU(FETCH_CYCLES * 10);
|
||||
mapper.HSync(scanline);
|
||||
@ -694,7 +694,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
else
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
ppu.ScanlineNext();
|
||||
EmulationCPU(FETCH_CYCLES * 10);
|
||||
mapper.HSync(scanline);
|
||||
@ -1095,7 +1095,7 @@ namespace VirtualNes.Core
|
||||
|
||||
Debuger.Log($"Saving SAVERAM...[{romName}]");
|
||||
|
||||
Supporter.SaveSRAMToFile(MMU.WRAM, romName);
|
||||
Supporter.S.SaveSRAMToFile(MMU.WRAM, romName);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1143,7 +1143,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
}
|
||||
|
||||
Supporter.SaveDISKToFile(contents.ToArray(), rom.GetRomName());
|
||||
Supporter.S.SaveDISKToFile(contents.ToArray(), rom.GetRomName());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -1168,7 +1168,7 @@ namespace VirtualNes.Core
|
||||
{
|
||||
Debuger.Log("Saving TURBOFILE...");
|
||||
|
||||
Supporter.SaveFile(MMU.ERAM, Supporter.Config.path.szSavePath, "TurboFile.vtf");
|
||||
Supporter.S.SaveFile(MMU.ERAM, Supporter.S.Config.path.szSavePath, "TurboFile.vtf");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -181,7 +181,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Supporter.Config.emulator.bFourPlayer)
|
||||
if (Supporter.S.Config.emulator.bFourPlayer)
|
||||
{
|
||||
// NES type
|
||||
pad1bit = padbitsync[0] | ((uint)padbitsync[2] << 8) | 0x00080000;
|
||||
|
@ -50,7 +50,7 @@ namespace VirtualNes.Core
|
||||
|
||||
try
|
||||
{
|
||||
fp = Supporter.OpenRom(fname);
|
||||
fp = Supporter.S.OpenRom(fname);
|
||||
if (fp == null)
|
||||
{
|
||||
throw new System.Exception($"Open Rom Failed:[{fname}]");
|
||||
@ -167,7 +167,7 @@ namespace VirtualNes.Core
|
||||
lpPRG[3] = 0x1A;
|
||||
lpPRG[4] = (byte)diskno;
|
||||
|
||||
fp = Supporter.OpenFile_DISKSYS();
|
||||
fp = Supporter.S.OpenFile_DISKSYS();
|
||||
if (fp == null)
|
||||
{
|
||||
throw new Exception($"Not found DISKSYS.ROM for [{fname}]");
|
||||
@ -217,7 +217,7 @@ namespace VirtualNes.Core
|
||||
throw new Exception($"Unsupport format:[{fname}]");
|
||||
}
|
||||
|
||||
Supporter.GetFilePathInfo(fname, out fullpath, out path);
|
||||
Supporter.S.GetRomPathInfo(fname, out fullpath, out path);
|
||||
name = Path.GetFileNameWithoutExtension(fullpath);
|
||||
if (!bNSF)
|
||||
{
|
||||
@ -244,7 +244,7 @@ namespace VirtualNes.Core
|
||||
|
||||
FileNameCheck(fname);
|
||||
|
||||
if (Supporter.TryGetMapperNo(this, out int mapperNo))
|
||||
if (Supporter.S.TryGetMapperNo(this, out int mapperNo))
|
||||
{
|
||||
Debuger.Log($"ROMDB Set Mapper #{mapper:000} to #{mapperNo:000}");
|
||||
mapper = mapperNo;
|
||||
|
@ -51,9 +51,25 @@ namespace VirtualNes.Core
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
//return CombineHashCode(raw0, raw1, raw2, raw3, valid);
|
||||
return HashCode.Combine(raw0, raw1, raw2, raw3, valid);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// .NetStandard2.0编译备用函数
|
||||
/// </summary>
|
||||
/// <param name="raw0"></param>
|
||||
/// <param name="raw1"></param>
|
||||
/// <param name="raw2"></param>
|
||||
/// <param name="raw3"></param>
|
||||
/// <param name="valid"></param>
|
||||
/// <returns></returns>
|
||||
static int CombineHashCode(uint raw0, uint raw1, uint raw2, uint raw3, bool valid)
|
||||
{
|
||||
uint validUInt = valid ? 1u : 0u;
|
||||
uint combinedHash = (raw0 * 31 + raw1) * 31 + raw2 * 31 + raw3 * 31 + validUInt;
|
||||
return (int)combinedHash;
|
||||
}
|
||||
public static bool operator ==(ControllerState left, ControllerState right)
|
||||
{
|
||||
return
|
||||
|
@ -1,77 +1,16 @@
|
||||
using System.IO;
|
||||
using System.IO;
|
||||
|
||||
namespace VirtualNes.Core
|
||||
{
|
||||
public static class Supporter
|
||||
{
|
||||
private static ISupporterImpl s_support;
|
||||
internal static ISupporterImpl S => s_support;
|
||||
|
||||
public static void Setup(ISupporterImpl supporter)
|
||||
{
|
||||
s_support = supporter;
|
||||
}
|
||||
|
||||
public static Stream OpenRom(string fname)
|
||||
{
|
||||
return s_support.OpenRom(fname);
|
||||
}
|
||||
|
||||
public static void GetFilePathInfo(string fname, out string fullPath, out string directPath)
|
||||
{
|
||||
s_support.GetRomPathInfo(fname, out fullPath, out directPath);
|
||||
}
|
||||
|
||||
public static Stream OpenFile_DISKSYS()
|
||||
{
|
||||
return s_support.OpenFile_DISKSYS();
|
||||
}
|
||||
|
||||
public static void SaveSRAMToFile(byte[] sramContent, string romName)
|
||||
{
|
||||
s_support.SaveSRAMToFile(sramContent, romName);
|
||||
}
|
||||
|
||||
public static void SaveDISKToFile(byte[] diskFileContent, string romName)
|
||||
{
|
||||
s_support.SaveDISKToFile(diskFileContent, romName);
|
||||
}
|
||||
|
||||
public static void PrepareDirectory(string directPath)
|
||||
{
|
||||
s_support.PrepareDirectory(directPath);
|
||||
}
|
||||
|
||||
public static void SaveFile(byte[] fileData, string directPath, string fileName)
|
||||
{
|
||||
s_support.SaveFile(fileData, directPath, fileName);
|
||||
}
|
||||
|
||||
public static Stream OpenFile(string directPath, string fileName)
|
||||
{
|
||||
return s_support.OpenFile(directPath, fileName);
|
||||
}
|
||||
|
||||
public static bool TryGetMapperNo(ROM rom, out int mapperNo)
|
||||
{
|
||||
return s_support.TryGetMapperNo(rom, out mapperNo);
|
||||
}
|
||||
|
||||
public static ControllerState GetControllerState()
|
||||
{
|
||||
return s_support.GetControllerState();
|
||||
}
|
||||
|
||||
public static void SampleInput(uint frameCount)
|
||||
{
|
||||
s_support.SampleInput(frameCount);
|
||||
}
|
||||
|
||||
public static IControllerSetuper GetControllerSetuper()
|
||||
{
|
||||
return s_support.GetControllerSetuper();
|
||||
}
|
||||
|
||||
public static EmulatorConfig Config => s_support.Config;
|
||||
}
|
||||
|
||||
public interface ISupporterImpl
|
||||
@ -82,28 +21,11 @@ namespace VirtualNes.Core
|
||||
void SaveSRAMToFile(byte[] sramContent, string romName);
|
||||
void SaveDISKToFile(byte[] diskFileContent, string romName);
|
||||
EmulatorConfig Config { get; }
|
||||
|
||||
void PrepareDirectory(string directPath);
|
||||
void SaveFile(byte[] fileData, string directPath, string fileName);
|
||||
Stream OpenFile(string directPath, string fileName);
|
||||
bool TryGetMapperNo(ROM rom, out int mapperNo);
|
||||
ControllerState GetControllerState();
|
||||
void SampleInput(uint frameCount);
|
||||
IControllerSetuper GetControllerSetuper();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 负责管理本地控制器与具体游戏之间的槽位分配
|
||||
/// </summary>
|
||||
public interface IControllerSetuper
|
||||
{
|
||||
/// <summary>
|
||||
/// 设置本地手柄与游戏手柄槽位的映射
|
||||
/// </summary>
|
||||
void SetConnect(
|
||||
uint? con0ToSlot = null,
|
||||
uint? con1ToSlot = null,
|
||||
uint? con2ToSlot = null,
|
||||
uint? con3ToSlot = null);
|
||||
}
|
||||
}
|
@ -2,7 +2,6 @@
|
||||
"dependencies": {
|
||||
"com.unity.2d.sprite": "1.0.0",
|
||||
"com.unity.ide.visualstudio": "2.0.22",
|
||||
"com.unity.postprocessing": "3.4.0",
|
||||
"com.unity.ugui": "2.0.0",
|
||||
"com.unity.modules.accessibility": "1.0.0",
|
||||
"com.unity.modules.ai": "1.0.0",
|
||||
|
@ -22,15 +22,6 @@
|
||||
},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.postprocessing": {
|
||||
"version": "3.4.0",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.modules.physics": "1.0.0"
|
||||
},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.test-framework": {
|
||||
"version": "1.4.5",
|
||||
"depth": 1,
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AxibugEmuOnline.Web", "Axib
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AxibugEmuOnline.Server", "AxibugEmuOnline.Server\AxibugEmuOnline.Server.csproj", "{9F509DB4-CDB4-4CDB-9C10-805C5E644EEF}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VirtualNes.Core", "VirtualNes.Core\VirtualNes.Core.csproj", "{8A4771D6-74B9-453C-9932-6B774280E325}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VirtualNes.Core", "Core\VirtualNes.Core\VirtualNes.Core.csproj", "{637EB35A-4D1A-41EA-9A7B-459E17E93981}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@ -23,10 +23,10 @@ Global
|
||||
{9F509DB4-CDB4-4CDB-9C10-805C5E644EEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F509DB4-CDB4-4CDB-9C10-805C5E644EEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F509DB4-CDB4-4CDB-9C10-805C5E644EEF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8A4771D6-74B9-453C-9932-6B774280E325}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8A4771D6-74B9-453C-9932-6B774280E325}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8A4771D6-74B9-453C-9932-6B774280E325}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8A4771D6-74B9-453C-9932-6B774280E325}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{637EB35A-4D1A-41EA-9A7B-459E17E93981}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{637EB35A-4D1A-41EA-9A7B-459E17E93981}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{637EB35A-4D1A-41EA-9A7B-459E17E93981}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{637EB35A-4D1A-41EA-9A7B-459E17E93981}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -73,7 +73,7 @@ namespace VirtualNes.Core
|
||||
|
||||
public void Process(ISoundDataBuffer lpBuffer, uint dwSize)
|
||||
{
|
||||
int nBits = Supporter.Config.sound.nBits;
|
||||
int nBits = Supporter.S.Config.sound.nBits;
|
||||
uint dwLength = (uint)(dwSize / (nBits / 8));
|
||||
int output;
|
||||
QUEUEDATA q = new QUEUEDATA();
|
||||
@ -82,11 +82,11 @@ namespace VirtualNes.Core
|
||||
var pSoundBuf = m_SoundBuffer;
|
||||
int nCcount = 0;
|
||||
|
||||
int nFilterType = Supporter.Config.sound.nFilterType;
|
||||
int nFilterType = Supporter.S.Config.sound.nFilterType;
|
||||
|
||||
if (!Supporter.Config.sound.bEnable)
|
||||
if (!Supporter.S.Config.sound.bEnable)
|
||||
{
|
||||
byte empty = (byte)(Supporter.Config.sound.nRate == 8 ? 128 : 0);
|
||||
byte empty = (byte)(Supporter.S.Config.sound.nRate == 8 ? 128 : 0);
|
||||
for (int i = 0; i < dwSize; i++)
|
||||
lpBuffer.WriteByte(empty);
|
||||
return;
|
||||
@ -108,7 +108,7 @@ namespace VirtualNes.Core
|
||||
MemoryUtility.ZEROMEMORY(vol, vol.Length);
|
||||
|
||||
var bMute = m_bMute;
|
||||
var nVolume = Supporter.Config.sound.nVolume;
|
||||
var nVolume = Supporter.S.Config.sound.nVolume;
|
||||
|
||||
int nMasterVolume = bMute[0] ? nVolume[0] : 0;
|
||||
|
||||
@ -151,7 +151,7 @@ namespace VirtualNes.Core
|
||||
vol[23] = (int)(bMute[8] ? (FME7_VOL * nVolume[11] * nMasterVolume) / (100 * 100) : 0);
|
||||
|
||||
// double cycle_rate = ((double)FRAME_CYCLES*60.0/12.0)/(double)Config.sound.nRate;
|
||||
double cycle_rate = (nes.nescfg.FrameCycles * 60.0 / 12.0) / Supporter.Config.sound.nRate;
|
||||
double cycle_rate = (nes.nescfg.FrameCycles * 60.0 / 12.0) / Supporter.S.Config.sound.nRate;
|
||||
|
||||
// CPUサイクル数がループしてしまった時の対策処理
|
||||
if (elapsed_time > nes.cpu.GetTotalCycles())
|
||||
@ -253,7 +253,7 @@ namespace VirtualNes.Core
|
||||
// DC成分のカット(HPF TEST)
|
||||
{
|
||||
// static double cutoff = (2.0*3.141592653579*40.0/44100.0);
|
||||
double cutoff = cutofftemp / Supporter.Config.sound.nRate;
|
||||
double cutoff = cutofftemp / Supporter.S.Config.sound.nRate;
|
||||
double @in, @out;
|
||||
|
||||
@in = output;
|
||||
@ -436,7 +436,7 @@ namespace VirtualNes.Core
|
||||
public void SoundSetup()
|
||||
{
|
||||
float fClock = nes.nescfg.CpuClock;
|
||||
int nRate = Supporter.Config.sound.nRate;
|
||||
int nRate = Supporter.S.Config.sound.nRate;
|
||||
|
||||
@internal.Setup(fClock, nRate);
|
||||
vrc6.Setup(fClock, nRate);
|
||||
@ -460,7 +460,7 @@ namespace VirtualNes.Core
|
||||
elapsed_time = 0;
|
||||
|
||||
float fClock = nes.nescfg.CpuClock;
|
||||
int nRate = Supporter.Config.sound.nRate;
|
||||
int nRate = Supporter.S.Config.sound.nRate;
|
||||
|
||||
@internal.Reset(fClock, nRate);
|
||||
vrc6.Reset(fClock, nRate);
|
||||
|
@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
using System;
|
||||
|
||||
namespace VirtualNes.Core
|
||||
@ -184,15 +184,15 @@ namespace VirtualNes.Core
|
||||
|
||||
Setup(fClock, nRate);
|
||||
|
||||
// $4011反場ヽ趙仄卅中
|
||||
// $4011は初期化しない
|
||||
ushort addr;
|
||||
for (addr = 0x4000; addr <= 0x4010; addr++)
|
||||
{
|
||||
Write(addr, 0x00);
|
||||
SyncWrite(addr, 0x00);
|
||||
}
|
||||
// Write( 0x4001, 0x08 ); // Reset媆反inc乒奈玉卞卅月?
|
||||
// Write( 0x4005, 0x08 ); // Reset媆反inc乒奈玉卞卅月?
|
||||
// Write( 0x4001, 0x08 ); // Reset時はincモードになる?
|
||||
// Write( 0x4005, 0x08 ); // Reset時はincモードになる?
|
||||
Write(0x4012, 0x00);
|
||||
Write(0x4013, 0x00);
|
||||
Write(0x4015, 0x00);
|
||||
@ -200,7 +200,7 @@ namespace VirtualNes.Core
|
||||
SyncWrite(0x4013, 0x00);
|
||||
SyncWrite(0x4015, 0x00);
|
||||
|
||||
// $4017反𤩸五煋心匹場ヽ趙仄卅中(場ヽ乒奈玉互0匹丐月及毛ヽ渾仄凶末白玄互丐月鮋)
|
||||
// $4017は書き込みで初期化しない(初期モードが0であるのを期待したソフトがある為)
|
||||
FrameIRQ = 0xC0;
|
||||
FrameCycle = 0;
|
||||
FrameIRQoccur = 0;
|
||||
@ -301,7 +301,7 @@ namespace VirtualNes.Core
|
||||
case 0x4017:
|
||||
break;
|
||||
|
||||
// VirtuaNES嘐衄禾奈玄
|
||||
// VirtuaNES固有ポート
|
||||
case 0x4018:
|
||||
UpdateRectangle(ch0, data);
|
||||
UpdateRectangle(ch1, data);
|
||||
@ -635,7 +635,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
}
|
||||
|
||||
// 奶件民平堪中皿民用奶朮市永玄(TEST)
|
||||
// インチキ臭いプチノイズカット(TEST)
|
||||
ch4.dpcm_output_real = ((ch4.reg[1] & 0x01) + ch4.dpcm_value * 2) - 0x40;
|
||||
if (Math.Abs(ch4.dpcm_output_real - ch4.dpcm_output_fake) <= 8)
|
||||
{
|
||||
@ -712,7 +712,7 @@ namespace VirtualNes.Core
|
||||
private int RenderTriangle()
|
||||
{
|
||||
int vol;
|
||||
if (Supporter.Config.sound.bDisableVolumeEffect)
|
||||
if (Supporter.S.Config.sound.bDisableVolumeEffect)
|
||||
{
|
||||
vol = 256;
|
||||
}
|
||||
@ -731,7 +731,7 @@ namespace VirtualNes.Core
|
||||
return ch2.nowvolume * vol / 256;
|
||||
}
|
||||
|
||||
if (!(Supporter.Config.sound.bChangeTone && ChannelTone[2, 0] != 0))
|
||||
if (!(Supporter.S.Config.sound.bChangeTone && ChannelTone[2, 0] != 0))
|
||||
{
|
||||
ch2.phaseacc -= cycle_rate;
|
||||
if (ch2.phaseacc >= 0)
|
||||
@ -756,7 +756,7 @@ namespace VirtualNes.Core
|
||||
return ch2.nowvolume * vol / 256;
|
||||
}
|
||||
|
||||
// 樓笭ⅸ歙
|
||||
// 加重平均
|
||||
int num_times, total;
|
||||
num_times = total = 0;
|
||||
while (ch2.phaseacc < 0)
|
||||
@ -799,7 +799,7 @@ namespace VirtualNes.Core
|
||||
return ch2.nowvolume * vol / 256;
|
||||
}
|
||||
|
||||
// 樓笭ⅸ歙
|
||||
// 加重平均
|
||||
int num_times, total;
|
||||
num_times = total = 0;
|
||||
while (ch2.phaseacc < 0)
|
||||
@ -832,9 +832,9 @@ namespace VirtualNes.Core
|
||||
}
|
||||
int volume = ch.nowvolume;
|
||||
|
||||
if (!(Supporter.Config.sound.bChangeTone && (ChannelTone[(ch.complement == 0) ? 0 : 1, ch.reg[0] >> 6]) != 0))
|
||||
if (!(Supporter.S.Config.sound.bChangeTone && (ChannelTone[(ch.complement == 0) ? 0 : 1, ch.reg[0] >> 6]) != 0))
|
||||
{
|
||||
// 娗嶲<EFBFBD>燴
|
||||
// 補間処理
|
||||
double total;
|
||||
double sample_weight = ch.phaseacc;
|
||||
if (sample_weight > cycle_rate)
|
||||
@ -864,7 +864,7 @@ namespace VirtualNes.Core
|
||||
int x = ChannelTone[(ch.complement == 0) ? 0 : 1, ch.reg[0] >> 6] - 1;
|
||||
int pTone = 0;
|
||||
|
||||
// 載陔剠仄
|
||||
// 更新無し
|
||||
ch.phaseacc -= cycle_rate * 2;
|
||||
if (ch.phaseacc >= 0)
|
||||
{
|
||||
@ -872,7 +872,7 @@ namespace VirtualNes.Core
|
||||
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
||||
}
|
||||
|
||||
// 1旦氾永皿分仃載陔
|
||||
// 1ステップだけ更新
|
||||
int freq = INT2FIX(ch.freq + 1);
|
||||
if (freq > cycle_rate * 2)
|
||||
{
|
||||
@ -882,7 +882,7 @@ namespace VirtualNes.Core
|
||||
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
||||
}
|
||||
|
||||
// 樓笭ⅸ歙
|
||||
// 加重平均
|
||||
int num_times, total;
|
||||
num_times = total = 0;
|
||||
while (ch.phaseacc < 0)
|
||||
@ -1015,7 +1015,7 @@ namespace VirtualNes.Core
|
||||
SyncWrite4017(data);
|
||||
break;
|
||||
|
||||
// VirtuaNES娚葲<EFBFBD><EFBFBD><EFBFBD>
|
||||
// VirtuaNES屌桳億乕僩
|
||||
case 0x4018:
|
||||
SyncUpdateRectangle(ch0, data);
|
||||
SyncUpdateRectangle(ch1, data);
|
||||
|
@ -1110,7 +1110,7 @@ namespace VirtualNes.Core
|
||||
case 0xD2: /* JAM */
|
||||
case 0xF2: /* JAM */
|
||||
default:
|
||||
if (!Supporter.Config.emulator.bIllegalOp)
|
||||
if (!Supporter.S.Config.emulator.bIllegalOp)
|
||||
{
|
||||
throw new Exception("IllegalOp");
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ namespace VirtualNes.Core
|
||||
Debuger.Log($"SOUND CODE:{addr & 0x1F:X2}");
|
||||
|
||||
// OSDにするべきか…
|
||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
||||
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||
{
|
||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||
//DirectSound.EsfAllStop();
|
||||
|
@ -43,7 +43,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
|
||||
// OSDにするべきか…
|
||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
||||
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||
{
|
||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||
//DirectSound.EsfAllStop();
|
||||
|
@ -57,7 +57,7 @@ namespace VirtualNes.Core
|
||||
9,10, 8,11,13,12,14,15 };
|
||||
|
||||
// OSDにするべきか…
|
||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
||||
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||
{
|
||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||
Debuger.Log($"CODE {data:X2}");
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
@ -249,7 +249,7 @@ namespace VirtualNes.Core
|
||||
LoadDISK();
|
||||
|
||||
{
|
||||
// Pad・ッ・鬣ケトレ、タ、ネウ<EFBFBD>レサッ・ソ・、・゚・<EFBFBD>ー、ャ゚W、、、ホ、ヌ、ウ、ウ、ヌ
|
||||
// Padクラス内だと初期化タイミングが遅いのでここで
|
||||
uint crc = rom.GetPROM_CRC();
|
||||
if (
|
||||
crc == 0xe792de94 // Best Play - Pro Yakyuu (New) (J)
|
||||
@ -275,7 +275,7 @@ namespace VirtualNes.Core
|
||||
|
||||
LoadTurboFile();
|
||||
|
||||
// VS-Unisystem、ホ・ヌ・ユ・ゥ・<EFBFBD>ネヤOカィ
|
||||
// VS-Unisystemのデフォルト設定
|
||||
if (rom.IsVSUNISYSTEM())
|
||||
{
|
||||
uint crc = rom.GetPROM_CRC();
|
||||
@ -286,13 +286,13 @@ namespace VirtualNes.Core
|
||||
|
||||
Reset();
|
||||
|
||||
// ・イゥ`・犹フモミ、ホ・ヌ・ユ・ゥ・<EFBDA9>ネ・ェ・ラ・キ・逾<EFBDA5><E980BE>Oカィ(ヤOカィ諾、ケ瓶、ヒハケ、ヲ樣)
|
||||
// ゲーム固有のデフォルトオプションを設定(設定戻す時に使う為)
|
||||
GameOption.defRenderMethod = (int)GetRenderMethod();
|
||||
GameOption.defIRQtype = GetIrqType();
|
||||
GameOption.defFrameIRQ = GetFrameIRQmode();
|
||||
GameOption.defVideoMode = GetVideoMode();
|
||||
|
||||
// ヤOカィ、<EFBFBD>愰`・ノ、キ、ニヤOカィ、ケ、<EFBDB9>(・ィ・<EFBDA8>ネ・熙ャ殪、ア、<EFBDB1>ミ・ヌ・ユ・ゥ・<EFBDA9>ネ、ャネ<EFBDAC><EFBE88>)
|
||||
// 設定をロードして設定する(エントリが無ければデフォルトが入る)
|
||||
if (rom.GetMapperNo() != 20)
|
||||
{
|
||||
GameOption.Load(rom.GetPROM_CRC());
|
||||
@ -326,17 +326,17 @@ namespace VirtualNes.Core
|
||||
if (pad.GetExController() != (int)EXCONTROLLER.EXCONTROLLER_TURBOFILE)
|
||||
return;
|
||||
|
||||
var fp = Supporter.OpenFile(Supporter.Config.path.szSavePath, "TurboFile.vtf");
|
||||
var fp = Supporter.S.OpenFile(Supporter.S.Config.path.szSavePath, "TurboFile.vtf");
|
||||
try
|
||||
{
|
||||
if (fp == null)
|
||||
{
|
||||
// xxx ・ユ・。・、・<EFBFBD><EFBFBD>_、ア、゙、サ、<EFBFBD>
|
||||
// xxx ファイルを開けません
|
||||
throw new Exception($"Can Not Open File [TurboFile.vtf]");
|
||||
}
|
||||
|
||||
long size = fp.Length;
|
||||
// ・ユ・。・、・<EFBFBD>オ・、・コネ。オテ
|
||||
// ファイルサイズ取得
|
||||
if (size > 32 * 1024)
|
||||
{
|
||||
size = 32 * 1024;
|
||||
@ -354,7 +354,7 @@ namespace VirtualNes.Core
|
||||
|
||||
private void LoadDISK()
|
||||
{
|
||||
//todo : エナオ忞巐チネ。ヨァウヨ
|
||||
//todo : 磁碟机读取支持
|
||||
}
|
||||
|
||||
private void LoadSRAM()
|
||||
@ -367,10 +367,10 @@ namespace VirtualNes.Core
|
||||
if (!rom.IsSAVERAM())
|
||||
return;
|
||||
|
||||
var saveFileDir = Supporter.Config.path.szSavePath;
|
||||
var saveFileDir = Supporter.S.Config.path.szSavePath;
|
||||
var saveFileName = $"{rom.GetRomName()}.sav";
|
||||
|
||||
var fp = Supporter.OpenFile(saveFileDir, saveFileName);
|
||||
var fp = Supporter.S.OpenFile(saveFileDir, saveFileName);
|
||||
|
||||
try
|
||||
{
|
||||
@ -400,7 +400,7 @@ namespace VirtualNes.Core
|
||||
{
|
||||
int i;
|
||||
|
||||
// メモリクリア
|
||||
// 儊儌儕僋儕傾
|
||||
MemoryUtility.ZEROMEMORY(MMU.RAM, MMU.RAM.Length);
|
||||
MemoryUtility.ZEROMEMORY(MMU.WRAM, MMU.WRAM.Length);
|
||||
MemoryUtility.ZEROMEMORY(MMU.DRAM, MMU.DRAM.Length);
|
||||
@ -420,11 +420,11 @@ namespace VirtualNes.Core
|
||||
|
||||
MMU.PROM = MMU.VROM = null;
|
||||
|
||||
// 0 除算防止対策
|
||||
// 0 彍嶼杊巭懳嶔
|
||||
MMU.PROM_8K_SIZE = MMU.PROM_16K_SIZE = MMU.PROM_32K_SIZE = 1;
|
||||
MMU.VROM_1K_SIZE = MMU.VROM_2K_SIZE = MMU.VROM_4K_SIZE = MMU.VROM_8K_SIZE = 1;
|
||||
|
||||
// デフォルトバンク設定
|
||||
// 僨僼僅儖僩僶儞僋愝掕
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
MMU.CPU_MEM_BANK[i] = null;
|
||||
@ -432,11 +432,11 @@ namespace VirtualNes.Core
|
||||
MMU.CPU_MEM_PAGE[i] = 0;
|
||||
}
|
||||
|
||||
// 内臓RAM/WRAM
|
||||
// 撪憻RAM/WRAM
|
||||
MMU.SetPROM_Bank(0, MMU.RAM, MMU.BANKTYPE_RAM);
|
||||
MMU.SetPROM_Bank(3, MMU.WRAM, MMU.BANKTYPE_RAM);
|
||||
|
||||
// ダミー
|
||||
// 僟儈乕
|
||||
MMU.SetPROM_Bank(1, MMU.XRAM, MMU.BANKTYPE_ROM);
|
||||
MMU.SetPROM_Bank(2, MMU.XRAM, MMU.BANKTYPE_ROM);
|
||||
|
||||
@ -502,13 +502,13 @@ namespace VirtualNes.Core
|
||||
EmulationCPU(nescfg.ScanlineCycles);
|
||||
if (bDraw)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -518,11 +518,11 @@ namespace VirtualNes.Core
|
||||
}
|
||||
else
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
}
|
||||
}
|
||||
ppu.ScanlineNext(); // これの位置でラスター系は画面が違う
|
||||
ppu.ScanlineNext(); // 偙傟偺埵抲偱儔僗僞乕宯偼夋柺偑堘偆
|
||||
if (RenderMethod == EnumRenderMethod.PRE_ALL_RENDER)
|
||||
EmulationCPU(nescfg.ScanlineCycles);
|
||||
|
||||
@ -535,13 +535,13 @@ namespace VirtualNes.Core
|
||||
EmulationCPU(nescfg.HDrawCycles);
|
||||
if (bDraw)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -551,7 +551,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
else
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -583,7 +583,7 @@ namespace VirtualNes.Core
|
||||
{
|
||||
pad.VSync();
|
||||
|
||||
// VBLANK期間
|
||||
// VBLANK婜娫
|
||||
if (scanline == nescfg.TotalScanlines - 1)
|
||||
{
|
||||
ppu.VBlankEnd();
|
||||
@ -642,7 +642,7 @@ namespace VirtualNes.Core
|
||||
|
||||
if (scanline == 0)
|
||||
{
|
||||
// ダミースキャンライン
|
||||
// 僟儈乕僗僉儍儞儔僀儞
|
||||
// H-Draw (4fetches*32)
|
||||
EmulationCPU(FETCH_CYCLES * 128);
|
||||
ppu.FrameStart();
|
||||
@ -655,10 +655,10 @@ namespace VirtualNes.Core
|
||||
}
|
||||
else if (scanline < 240)
|
||||
{
|
||||
// スクリーン描画(Scanline 1~239)
|
||||
// 僗僋儕乕儞昤夋(Scanline 1乣239)
|
||||
if (bDraw)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
ppu.ScanlineNext();
|
||||
EmulationCPU(FETCH_CYCLES * 10);
|
||||
mapper.HSync(scanline);
|
||||
@ -670,7 +670,7 @@ namespace VirtualNes.Core
|
||||
{
|
||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
ppu.ScanlineNext();
|
||||
EmulationCPU(FETCH_CYCLES * 10);
|
||||
mapper.HSync(scanline);
|
||||
@ -694,7 +694,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
else
|
||||
{
|
||||
ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip);
|
||||
ppu.Scanline(scanline, Supporter.S.Config.graphics.bAllSprite, Supporter.S.Config.graphics.bLeftClip);
|
||||
ppu.ScanlineNext();
|
||||
EmulationCPU(FETCH_CYCLES * 10);
|
||||
mapper.HSync(scanline);
|
||||
@ -707,7 +707,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
else if (scanline == 240)
|
||||
{
|
||||
// ダミースキャンライン (Scanline 240)
|
||||
// 僟儈乕僗僉儍儞儔僀儞 (Scanline 240)
|
||||
mapper.VSync();
|
||||
|
||||
EmulationCPU(nescfg.HDrawCycles);
|
||||
@ -720,7 +720,7 @@ namespace VirtualNes.Core
|
||||
{
|
||||
pad.VSync();
|
||||
|
||||
// VBLANK期間
|
||||
// VBLANK婜娫
|
||||
if (scanline == nescfg.TotalScanlines - 1)
|
||||
{
|
||||
ppu.VBlankEnd();
|
||||
@ -864,7 +864,7 @@ namespace VirtualNes.Core
|
||||
MMU.VROM_4K_SIZE = rom.GetVROM_SIZE() * 2;
|
||||
MMU.VROM_8K_SIZE = rom.GetVROM_SIZE();
|
||||
|
||||
// デフォルトバンク
|
||||
// 僨僼僅儖僩僶儞僋
|
||||
if (MMU.VROM_8K_SIZE != 0)
|
||||
{
|
||||
MMU.SetVROM_8K_Bank(0);
|
||||
@ -874,7 +874,7 @@ namespace VirtualNes.Core
|
||||
MMU.SetCRAM_8K_Bank(0);
|
||||
}
|
||||
|
||||
// ミラー
|
||||
// 儈儔乕
|
||||
if (rom.Is4SCREEN())
|
||||
{
|
||||
MMU.SetVRAM_Mirror(MMU.VRAM_MIRROR4);
|
||||
@ -976,13 +976,13 @@ namespace VirtualNes.Core
|
||||
reg.S = 0xFF;
|
||||
reg.P = CPU.Z_FLAG | CPU.R_FLAG | CPU.I_FLAG;
|
||||
|
||||
// 安全対策を兼ねてあえてループに(1秒分)
|
||||
// 埨慡懳嶔傪寭偹偰偁偊偰儖乕僾偵(1昩暘)
|
||||
for (int i = 0; i < nescfg.TotalScanlines * 60; i++)
|
||||
{
|
||||
EmulationCPU(nescfg.ScanlineCycles);
|
||||
cpu.GetContext(ref reg);
|
||||
|
||||
// 無限ループに入ったことを確認したら抜ける
|
||||
// 柍尷儖乕僾偵擖偭偨偙偲傪妋擣偟偨傜敳偗傞
|
||||
if (reg.PC == 0x4700)
|
||||
{
|
||||
break;
|
||||
@ -993,7 +993,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
|
||||
cpu.GetContext(ref reg);
|
||||
// 無限ループに入っていたら再設定する
|
||||
// 柍尷儖乕僾偵擖偭偰偄偨傜嵞愝掕偡傞
|
||||
if (reg.PC == 0x4700)
|
||||
{
|
||||
reg.PC = 0x4720; // Play Address
|
||||
@ -1009,7 +1009,7 @@ namespace VirtualNes.Core
|
||||
else
|
||||
{
|
||||
cpu.GetContext(ref reg);
|
||||
reg.PC = 0x4700; // 無限ループ
|
||||
reg.PC = 0x4700; // 柍尷儖乕僾
|
||||
reg.S = 0xFF;
|
||||
|
||||
EmulationCPU(nescfg.ScanlineCycles * nescfg.TotalScanlines);
|
||||
@ -1095,7 +1095,7 @@ namespace VirtualNes.Core
|
||||
|
||||
Debuger.Log($"Saving SAVERAM...[{romName}]");
|
||||
|
||||
Supporter.SaveSRAMToFile(MMU.WRAM, romName);
|
||||
Supporter.S.SaveSRAMToFile(MMU.WRAM, romName);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1143,7 +1143,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
}
|
||||
|
||||
Supporter.SaveDISKToFile(contents.ToArray(), rom.GetRomName());
|
||||
Supporter.S.SaveDISKToFile(contents.ToArray(), rom.GetRomName());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -1168,7 +1168,7 @@ namespace VirtualNes.Core
|
||||
{
|
||||
Debuger.Log("Saving TURBOFILE...");
|
||||
|
||||
Supporter.SaveFile(MMU.ERAM, Supporter.Config.path.szSavePath, "TurboFile.vtf");
|
||||
Supporter.S.SaveFile(MMU.ERAM, Supporter.S.Config.path.szSavePath, "TurboFile.vtf");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1186,7 +1186,7 @@ namespace VirtualNes.Core
|
||||
if (m_BarcodeCycles > 1000)
|
||||
{
|
||||
m_BarcodeCycles = 0;
|
||||
// 停止?
|
||||
// 掆巭丠
|
||||
if (m_BarcodeData[m_BarcodePtr] != 0xFF)
|
||||
{
|
||||
m_BarcodeOut = m_BarcodeData[m_BarcodePtr++];
|
||||
@ -1227,7 +1227,7 @@ namespace VirtualNes.Core
|
||||
return;
|
||||
|
||||
m_TapeCycles += (nescfg.CpuClock / 32000.0);
|
||||
// m_TapeCycles += (nescfg.CpuClock / 22050.0); // 遅すぎてダメっぽい
|
||||
// m_TapeCycles += (nescfg.CpuClock / 22050.0); // 抶偡偓偰僟儊偭傐偄
|
||||
|
||||
if (m_bTapePlay)
|
||||
{
|
||||
@ -1293,7 +1293,7 @@ namespace VirtualNes.Core
|
||||
return MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF];
|
||||
}
|
||||
|
||||
return 0x00; // Warning予防
|
||||
return 0x00; // Warning梊杊
|
||||
}
|
||||
|
||||
private byte ReadReg(ushort addr)
|
||||
@ -1504,7 +1504,7 @@ namespace VirtualNes.Core
|
||||
pad.Write(addr, data);
|
||||
apu.Write(addr, data);
|
||||
break;
|
||||
// VirtuaNES固有ポート
|
||||
// VirtuaNES屌桳億乕僩
|
||||
case 0x18:
|
||||
apu.Write(addr, data);
|
||||
break;
|
||||
@ -1596,7 +1596,7 @@ namespace VirtualNes.Core
|
||||
ref state.reg.cpureg.FrameIRQ_type,
|
||||
ref state.reg.cpureg.FrameIRQ,
|
||||
ref state.reg.cpureg.FrameIRQ_occur);
|
||||
state.reg.cpureg.FrameIRQ_cycles = cycles; // イホユユ、ャINT、ハ樣」ィ、ゥ
|
||||
state.reg.cpureg.FrameIRQ_cycles = cycles; // 参照がINTな為(ぉ
|
||||
|
||||
state.reg.cpureg.DMA_cycles = cpu.GetDmaCycles();
|
||||
state.reg.cpureg.emul_cycles = emul_cycles;
|
||||
@ -1625,7 +1625,7 @@ namespace VirtualNes.Core
|
||||
MemoryUtility.memcpy(state.ram.SPPAL, MMU.SPPAL, state.ram.SPPAL.Length);
|
||||
MemoryUtility.memcpy(state.ram.SPRAM, MMU.SPRAM, state.ram.SPRAM.Length);
|
||||
|
||||
// S-RAM STATE(ハケモテ/ホエハケモテ、ヒ騅、<E9A885>鬢コエ贇レ、ケ、<EFBDB9>ミ・サゥ`・ヨ、ケ、<EFBDB9>)
|
||||
// S-RAM STATE(使用/未使用に関わらず存在すればセーブする)
|
||||
if (rom.IsSAVERAM())
|
||||
{
|
||||
size = (uint)SAVERAM_SIZE;
|
||||
@ -1649,9 +1649,9 @@ namespace VirtualNes.Core
|
||||
uint size = 0;
|
||||
|
||||
// SAVE CPU MEMORY BANK DATA
|
||||
// BANK0,1,2、マ・ミ・<EFBFBD>ッ・サゥ`・ヨ、ヒ騅4、ハ、キ
|
||||
// VirtuaNES0.30、ォ、<EFBFBD>
|
||||
// ・ミ・<EFBFBD>ッ」ウ、マSRAMハケモテ、ヒ騅、<EFBFBD>鬢コ・サゥ`・ヨ
|
||||
// BANK0,1,2はバンクセーブに関係なし
|
||||
// VirtuaNES0.30から
|
||||
// バンク3はSRAM使用に関わらずセーブ
|
||||
for (int i = 3; i < 8; i++)
|
||||
{
|
||||
state.mmu.CPU_MEM_TYPE[i] = MMU.CPU_MEM_TYPE[i];
|
||||
@ -1696,7 +1696,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
}
|
||||
|
||||
// WRITE VRAM MEMORY(ウ」、ヒ4Kキヨ、ケ、ル、ニ抱、ュ゙z、<EFBFBD>)
|
||||
// WRITE VRAM MEMORY(常に4K分すべて書き込む)
|
||||
state.VRAM = new byte[4 * 1024];
|
||||
Array.Copy(MMU.VRAM, state.VRAM, state.VRAM.Length);
|
||||
|
||||
@ -1764,7 +1764,7 @@ namespace VirtualNes.Core
|
||||
int DiskSize = 16 + 65500 * rom.GetDiskNo();
|
||||
|
||||
|
||||
// マ珀`ハ<>、<EFBFBD>ォ・ヲ・<EFBDA6>ネ
|
||||
// 相違数をカウント
|
||||
for (int i = 16; i < DiskSize; i++)
|
||||
{
|
||||
if (lpWrite[i] != 0)
|
||||
@ -1874,9 +1874,9 @@ namespace VirtualNes.Core
|
||||
//BANK STATE
|
||||
{
|
||||
// SAVE CPU MEMORY BANK DATA
|
||||
// BANK0,1,2、マ・ミ・<EFBFBD>ッ・サゥ`・ヨ、ヒ騅4、ハ、キ
|
||||
// VirtuaNES0.30、ォ、<EFBFBD>
|
||||
// ・ミ・<EFBFBD>ッ」ウ、マSRAMハケモテ、ヒ騅、<EFBFBD>鬢コ・サゥ`・ヨ
|
||||
// BANK0,1,2はバンクセーブに関係なし
|
||||
// VirtuaNES0.30から
|
||||
// バンク3はSRAM使用に関わらずセーブ
|
||||
for (byte i = 3; i < 8; i++)
|
||||
{
|
||||
MMU.CPU_MEM_TYPE[i] = state.mmu.CPU_MEM_TYPE[i];
|
||||
|
@ -181,7 +181,7 @@ namespace VirtualNes.Core
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Supporter.Config.emulator.bFourPlayer)
|
||||
if (Supporter.S.Config.emulator.bFourPlayer)
|
||||
{
|
||||
// NES type
|
||||
pad1bit = padbitsync[0] | ((uint)padbitsync[2] << 8) | 0x00080000;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user