forked from sin365/AxibugEmuOnline
Merge branch 'master' of http://git.axibug.com/sin365/AxibugEmuOnline
This commit is contained in:
commit
30373844c4
@ -1,3 +1,4 @@
|
|||||||
|
#if UNITY_EDITOR
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
@ -22,3 +23,4 @@ public class AxiPrefabCache_Com2GUID
|
|||||||
public string ToGUID;
|
public string ToGUID;
|
||||||
public MonoScript monoScript;
|
public MonoScript monoScript;
|
||||||
}
|
}
|
||||||
|
#endif
|
@ -1,3 +1,4 @@
|
|||||||
|
#if UNITY_EDITOR
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@ -86,7 +87,7 @@ public class AxiProjectTools : EditorWindow
|
|||||||
static void LoopPrefabNode(string rootPath, GameObject trans, int depth)
|
static void LoopPrefabNode(string rootPath, GameObject trans, int depth)
|
||||||
{
|
{
|
||||||
string nodename = $"{rootPath}>{trans.name}";
|
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;
|
GameObject prefabRoot = trans.gameObject;
|
||||||
int comCount = prefabRoot.GetComponentCount();
|
int comCount = prefabRoot.GetComponentCount();
|
||||||
for (int i = 0; i < comCount; i++)
|
for (int i = 0; i < comCount; i++)
|
||||||
@ -95,11 +96,6 @@ public class AxiProjectTools : EditorWindow
|
|||||||
if (com == null)
|
if (com == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (com.name.Contains("VideoPlayer"))
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
MonoBehaviour monoCom = com as MonoBehaviour;
|
MonoBehaviour monoCom = com as MonoBehaviour;
|
||||||
if (monoCom == null)
|
if (monoCom == null)
|
||||||
continue;
|
continue;
|
||||||
@ -262,11 +258,13 @@ public class AxiProjectTools : EditorWindow
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[MenuItem("Axibug移植工具/[5]UnPack所有预制体")]
|
[MenuItem("Axibug移植工具/[5]UnPack所有嵌套预制体和场景中的预制体")]
|
||||||
public static void UnpackPrefabs()
|
public static void UnpackPrefabs()
|
||||||
{
|
{
|
||||||
|
|
||||||
string[] allAssetPaths = AssetDatabase.GetAllAssetPaths();
|
#if UNITY_2018_4_OR_NEWER
|
||||||
|
GoTAxiProjectToolsSence();
|
||||||
|
string[] allAssetPaths = AssetDatabase.GetAllAssetPaths();
|
||||||
int prefabCount = 0;
|
int prefabCount = 0;
|
||||||
|
|
||||||
foreach (string path in allAssetPaths)
|
foreach (string path in allAssetPaths)
|
||||||
@ -278,13 +276,41 @@ public class AxiProjectTools : EditorWindow
|
|||||||
prefabCount++;
|
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);
|
GameObject prefabInstance = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
|
||||||
if (prefabInstance == null)
|
if (prefabInstance == null)
|
||||||
{
|
{
|
||||||
@ -296,10 +322,14 @@ public class AxiProjectTools : EditorWindow
|
|||||||
TraverseHierarchy(obj);
|
TraverseHierarchy(obj);
|
||||||
PrefabUtility.SaveAsPrefabAsset(obj, prefabPath);
|
PrefabUtility.SaveAsPrefabAsset(obj, prefabPath);
|
||||||
GameObject.DestroyImmediate(obj);
|
GameObject.DestroyImmediate(obj);
|
||||||
|
#else
|
||||||
|
Debug.Log("低版本不要执行本函数");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TraverseHierarchy(GameObject obj)
|
static void TraverseHierarchy(GameObject obj)
|
||||||
{
|
{
|
||||||
|
#if UNITY_2018_4_OR_NEWER
|
||||||
// 检查该对象是否是预制体的实例
|
// 检查该对象是否是预制体的实例
|
||||||
if (PrefabUtility.IsPartOfPrefabInstance(obj))
|
if (PrefabUtility.IsPartOfPrefabInstance(obj))
|
||||||
{
|
{
|
||||||
@ -313,6 +343,9 @@ public class AxiProjectTools : EditorWindow
|
|||||||
{
|
{
|
||||||
TraverseHierarchy(obj.transform.GetChild(i).gameObject);
|
TraverseHierarchy(obj.transform.GetChild(i).gameObject);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
Debug.Log("低版本不要执行本函数");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -380,3 +413,4 @@ public class AxiProjectTools : EditorWindow
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
@ -1,6 +1,8 @@
|
|||||||
using AxibugEmuOnline.Client;
|
using AxibugEmuOnline.Client;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Editors
|
namespace AxibugEmuOnline.Editors
|
||||||
{
|
{
|
||||||
[CustomEditor(typeof(CommandDispatcher))]
|
[CustomEditor(typeof(CommandDispatcher))]
|
||||||
@ -13,8 +15,8 @@ namespace AxibugEmuOnline.Editors
|
|||||||
if (!Application.isPlaying) return;
|
if (!Application.isPlaying) return;
|
||||||
|
|
||||||
var dispacather = target as CommandDispatcher;
|
var dispacather = target as CommandDispatcher;
|
||||||
|
IReadOnlyList<CommandExecuter> normal; IReadOnlyList<CommandExecuter> solo;
|
||||||
dispacather.GetRegisters(out var normal, out var solo);
|
dispacather.GetRegisters(out normal, out solo);
|
||||||
|
|
||||||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||||||
EditorGUILayout.LabelField("NORMAL");
|
EditorGUILayout.LabelField("NORMAL");
|
||||||
|
@ -60,7 +60,7 @@ namespace AxiReplay
|
|||||||
if (!bNetInit)
|
if (!bNetInit)
|
||||||
{
|
{
|
||||||
data = default(ReplayStep);
|
data = default(ReplayStep);
|
||||||
frameDiff = default;
|
frameDiff = default(int);
|
||||||
inputDiff = false;
|
inputDiff = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -73,7 +73,7 @@ namespace AxiReplay
|
|||||||
if (!bNetInit)
|
if (!bNetInit)
|
||||||
{
|
{
|
||||||
data = default(ReplayStep);
|
data = default(ReplayStep);
|
||||||
frameDiff = default;
|
frameDiff = default(int);
|
||||||
inputDiff = false;
|
inputDiff = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -5,152 +5,154 @@ using System.Text;
|
|||||||
|
|
||||||
namespace AxiReplay
|
namespace AxiReplay
|
||||||
{
|
{
|
||||||
public class ReplayWriter : IReplayWriter
|
public class ReplayWriter : IReplayWriter
|
||||||
{
|
{
|
||||||
public ReplayData.ReplayFormat mFormat { get; private set; }
|
public ReplayData.ReplayFormat mFormat { get; private set; }
|
||||||
public Encoding TexEncoding { get; private set; }
|
public Encoding TexEncoding { get; private set; }
|
||||||
ReplayHandler handler;
|
ReplayHandler handler;
|
||||||
string mTitle;
|
string mTitle;
|
||||||
string mNote;
|
string mNote;
|
||||||
int mAllFrame;
|
int mAllFrame;
|
||||||
int mAllTime;
|
int mAllTime;
|
||||||
long mData;
|
long mData;
|
||||||
int mSingleInputLenght;
|
int mSingleInputLenght;
|
||||||
int mSingleDataLenght;
|
int mSingleDataLenght;
|
||||||
MemoryStream mStream;
|
MemoryStream mStream;
|
||||||
BinaryWriter mBinaryWriter;
|
BinaryWriter mBinaryWriter;
|
||||||
|
|
||||||
int mCurrFrame;
|
int mCurrFrame;
|
||||||
UInt64 mCurrInput;
|
UInt64 mCurrInput;
|
||||||
ReplayStep wirteStep;
|
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)
|
public ReplayWriter(string Title, string Note, ReplayData.ReplayFormat format, Encoding encoding)
|
||||||
{
|
{
|
||||||
mTitle = Title;
|
mTitle = Title;
|
||||||
mNote = Note;
|
mNote = Note;
|
||||||
TexEncoding = encoding;
|
TexEncoding = encoding;
|
||||||
mFormat = format;
|
mFormat = format;
|
||||||
switch (mFormat)
|
switch (mFormat)
|
||||||
{
|
{
|
||||||
case ReplayData.ReplayFormat.FM32IP64: mSingleInputLenght = sizeof(UInt64); break;
|
case ReplayData.ReplayFormat.FM32IP64: mSingleInputLenght = sizeof(UInt64); break;
|
||||||
case ReplayData.ReplayFormat.FM32IP32: mSingleInputLenght = sizeof(UInt32); break;
|
case ReplayData.ReplayFormat.FM32IP32: mSingleInputLenght = sizeof(UInt32); break;
|
||||||
case ReplayData.ReplayFormat.FM32IP16: mSingleInputLenght = sizeof(UInt16); break;
|
case ReplayData.ReplayFormat.FM32IP16: mSingleInputLenght = sizeof(UInt16); break;
|
||||||
case ReplayData.ReplayFormat.FM32IPBYTE: mSingleInputLenght = sizeof(byte); break;
|
case ReplayData.ReplayFormat.FM32IPBYTE: mSingleInputLenght = sizeof(byte); break;
|
||||||
}
|
}
|
||||||
mSingleDataLenght = (sizeof(UInt32)) + mSingleInputLenght;
|
mSingleDataLenght = (sizeof(UInt32)) + mSingleInputLenght;
|
||||||
|
|
||||||
mStream = new MemoryStream();
|
mStream = new MemoryStream();
|
||||||
mBinaryWriter = new BinaryWriter(mStream);
|
mBinaryWriter = new BinaryWriter(mStream);
|
||||||
|
|
||||||
mCurrFrame = -1;
|
mCurrFrame = -1;
|
||||||
mCurrInput = int.MaxValue;
|
mCurrInput = int.MaxValue;
|
||||||
wirteStep = new ReplayStep();
|
wirteStep = new ReplayStep();
|
||||||
|
|
||||||
dbgList.Clear();
|
dbgList.Clear();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int byFrameIdx = 0;
|
int byFrameIdx = 0;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 往前推进帧的,指定帧下标
|
/// 往前推进帧的,指定帧下标
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="frameInput"></param>
|
/// <param name="frameInput"></param>
|
||||||
public void NextFramebyFrameIdx(int FrameID, UInt64 frameInput)
|
public void NextFramebyFrameIdx(int FrameID, UInt64 frameInput)
|
||||||
{
|
{
|
||||||
TakeFrame(FrameID - byFrameIdx, frameInput);
|
TakeFrame(FrameID - byFrameIdx, frameInput);
|
||||||
byFrameIdx = FrameID;
|
byFrameIdx = FrameID;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 往前推进1帧的Input
|
/// 往前推进1帧的Input
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="frameInput"></param>
|
/// <param name="frameInput"></param>
|
||||||
public void NextFrame(UInt64 frameInput)
|
public void NextFrame(UInt64 frameInput)
|
||||||
{
|
{
|
||||||
TakeFrame(1, frameInput);
|
TakeFrame(1, frameInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 往前推进指定帧数量的Input
|
/// 往前推进指定帧数量的Input
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="frameInput"></param>
|
/// <param name="frameInput"></param>
|
||||||
public void TakeFrame(int addFrame, UInt64 frameInput)
|
public void TakeFrame(int addFrame, UInt64 frameInput)
|
||||||
{
|
{
|
||||||
if (addFrame < 0)
|
if (addFrame < 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
mCurrFrame += addFrame;
|
mCurrFrame += addFrame;
|
||||||
if (mCurrInput == frameInput)
|
if (mCurrInput == frameInput)
|
||||||
return;
|
return;
|
||||||
mCurrInput = frameInput;
|
mCurrInput = frameInput;
|
||||||
|
|
||||||
wirteStep.FrameStartID = mCurrFrame;
|
wirteStep.FrameStartID = mCurrFrame;
|
||||||
wirteStep.InPut = mCurrInput;
|
wirteStep.InPut = mCurrInput;
|
||||||
dbgList.Add($"{mCurrFrame} | {mCurrInput}");
|
dbgList.Add($"{mCurrFrame} | {mCurrInput}");
|
||||||
|
|
||||||
switch (mFormat)
|
switch (mFormat)
|
||||||
{
|
{
|
||||||
case ReplayData.ReplayFormat.FM32IP64:
|
case ReplayData.ReplayFormat.FM32IP64:
|
||||||
mBinaryWriter.Write(wirteStep.FrameStartID);
|
mBinaryWriter.Write(wirteStep.FrameStartID);
|
||||||
mBinaryWriter.Write(wirteStep.InPut);
|
mBinaryWriter.Write(wirteStep.InPut);
|
||||||
break;
|
break;
|
||||||
case ReplayData.ReplayFormat.FM32IP32:
|
case ReplayData.ReplayFormat.FM32IP32:
|
||||||
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 4);
|
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 4);
|
||||||
break;
|
break;
|
||||||
case ReplayData.ReplayFormat.FM32IP16:
|
case ReplayData.ReplayFormat.FM32IP16:
|
||||||
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 2);
|
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 2);
|
||||||
break;
|
break;
|
||||||
case ReplayData.ReplayFormat.FM32IPBYTE:
|
case ReplayData.ReplayFormat.FM32IPBYTE:
|
||||||
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 1);
|
mBinaryWriter.Write(BitConverter.GetBytes(wirteStep.All64Data), 0, 4 + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveData(string path, bool bWithDump = false, string dumppath = null)
|
public void SaveData(string path, bool bWithDump = false, string dumppath = null)
|
||||||
{
|
{
|
||||||
ReplayData.GetStringByteData(mTitle, out byte[] titleData, out int titleLenghtWithEnd, TexEncoding);
|
byte[] titleData; int titleLenghtWithEnd;
|
||||||
ReplayData.GetStringByteData(mNote, out byte[] noteData, out int noteLenghtWithEnd, TexEncoding);
|
ReplayData.GetStringByteData(mTitle, out titleData, out titleLenghtWithEnd, TexEncoding);
|
||||||
|
byte[] noteData; int noteLenghtWithEnd;
|
||||||
|
ReplayData.GetStringByteData(mNote, out noteData, out noteLenghtWithEnd, TexEncoding);
|
||||||
|
|
||||||
ReplayHandler handler = new ReplayHandler();
|
ReplayHandler handler = new ReplayHandler();
|
||||||
handler.Format = (int)this.mFormat;
|
handler.Format = (int)this.mFormat;
|
||||||
handler.DataOffset = ReplayData.HandlerLenght;
|
handler.DataOffset = ReplayData.HandlerLenght;
|
||||||
handler.CreateTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
handler.CreateTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
||||||
handler.AllFrame = wirteStep.FrameStartID;
|
handler.AllFrame = wirteStep.FrameStartID;
|
||||||
handler.SingleLenght = mSingleDataLenght;
|
handler.SingleLenght = mSingleDataLenght;
|
||||||
|
|
||||||
using (FileStream fs = new FileStream(path, FileMode.Create))
|
using (FileStream fs = new FileStream(path, FileMode.Create))
|
||||||
{
|
{
|
||||||
using (BinaryWriter bw = new BinaryWriter(fs))
|
using (BinaryWriter bw = new BinaryWriter(fs))
|
||||||
{
|
{
|
||||||
//写入Handler
|
//写入Handler
|
||||||
bw.Write(ReplayData.GetHandlerData(handler));
|
bw.Write(ReplayData.GetHandlerData(handler));
|
||||||
//写入Data
|
//写入Data
|
||||||
bw.Write(mStream.ToArray());
|
bw.Write(mStream.ToArray());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bWithDump)
|
if (bWithDump)
|
||||||
{
|
{
|
||||||
List<string> temp = new List<string>();
|
List<string> temp = new List<string>();
|
||||||
temp.Add($"Format => {handler.Format}");
|
temp.Add($"Format => {handler.Format}");
|
||||||
temp.Add($"DataOffset => {handler.DataOffset}");
|
temp.Add($"DataOffset => {handler.DataOffset}");
|
||||||
temp.Add($"CreateTime => {handler.CreateTime}");
|
temp.Add($"CreateTime => {handler.CreateTime}");
|
||||||
temp.Add($"AllFrame => {handler.AllFrame}");
|
temp.Add($"AllFrame => {handler.AllFrame}");
|
||||||
temp.Add($"SingleLenght => {handler.SingleLenght}");
|
temp.Add($"SingleLenght => {handler.SingleLenght}");
|
||||||
dbgList.InsertRange(0, temp);
|
dbgList.InsertRange(0, temp);
|
||||||
File.WriteAllLines(dumppath, dbgList);
|
File.WriteAllLines(dumppath, dbgList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
mStream.Dispose();
|
mStream.Dispose();
|
||||||
mBinaryWriter.Dispose();
|
mBinaryWriter.Dispose();
|
||||||
//TODO
|
//TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 898ba71ded907534ba7eaada7855cadc
|
Binary file not shown.
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 353264361911f2f43bb2c088c7e73fec
|
guid: 957996f7ef8e16e4d83eace2efbcbfaa
|
||||||
folderAsset: yes
|
folderAsset: yes
|
||||||
DefaultImporter:
|
DefaultImporter:
|
||||||
externalObjects: {}
|
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
|
fileFormatVersion: 2
|
||||||
guid: 324deac494a24a7499801349c7908062
|
guid: 255d4b97366fc9e429c8cf1a54ee47b8
|
||||||
|
timeCreated: 1499268372
|
||||||
|
licenseType: Pro
|
||||||
PluginImporter:
|
PluginImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
iconMap: {}
|
iconMap: {}
|
||||||
executionOrder: {}
|
executionOrder: {}
|
||||||
defineConstraints: []
|
|
||||||
isPreloaded: 0
|
isPreloaded: 0
|
||||||
isOverridable: 0
|
isOverridable: 0
|
||||||
isExplicitlyReferenced: 0
|
|
||||||
validateReferences: 1
|
|
||||||
platformData:
|
platformData:
|
||||||
- first:
|
- first:
|
||||||
Any:
|
Any:
|
||||||
second:
|
second:
|
||||||
enabled: 1
|
enabled: 0
|
||||||
settings: {}
|
settings: {}
|
||||||
- first:
|
- first:
|
||||||
Editor: Editor
|
Editor: Editor
|
||||||
@ -23,11 +22,10 @@ PluginImporter:
|
|||||||
settings:
|
settings:
|
||||||
DefaultValueInitialized: true
|
DefaultValueInitialized: true
|
||||||
- first:
|
- first:
|
||||||
Windows Store Apps: WindowsStoreApps
|
PSP2: PSP2
|
||||||
second:
|
second:
|
||||||
enabled: 0
|
enabled: 1
|
||||||
settings:
|
settings: {}
|
||||||
CPU: AnyCPU
|
|
||||||
userData:
|
userData:
|
||||||
assetBundleName:
|
assetBundleName:
|
||||||
assetBundleVariant:
|
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
|
fileFormatVersion: 2
|
||||||
guid: 7c3fabe6430be6943b1fc06a25a275a8
|
guid: b3de348afcfb8214ea5dced94199f16e
|
||||||
folderAsset: yes
|
folderAsset: yes
|
||||||
DefaultImporter:
|
DefaultImporter:
|
||||||
externalObjects: {}
|
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_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 9760340517325694}
|
m_GameObject: {fileID: 9760340517325694}
|
||||||
|
serializedVersion: 2
|
||||||
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_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 4232056521131536011}
|
m_Father: {fileID: 4232056521131536011}
|
||||||
m_RootOrder: 1
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &9003897287163669553
|
--- !u!114 &9003897287163669553
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
@ -56,6 +57,7 @@ AudioSource:
|
|||||||
serializedVersion: 4
|
serializedVersion: 4
|
||||||
OutputAudioMixerGroup: {fileID: 0}
|
OutputAudioMixerGroup: {fileID: 0}
|
||||||
m_audioClip: {fileID: 0}
|
m_audioClip: {fileID: 0}
|
||||||
|
m_Resource: {fileID: 0}
|
||||||
m_PlayOnAwake: 1
|
m_PlayOnAwake: 1
|
||||||
m_Volume: 1
|
m_Volume: 1
|
||||||
m_Pitch: 1
|
m_Pitch: 1
|
||||||
@ -169,9 +171,9 @@ RectTransform:
|
|||||||
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_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: -1, z: 1}
|
m_LocalScale: {x: 1, y: -1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 1038087993597378172}
|
m_Father: {fileID: 1038087993597378172}
|
||||||
m_RootOrder: 0
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
m_AnchorMax: {x: 1, y: 1}
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
@ -240,11 +242,11 @@ RectTransform:
|
|||||||
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_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 3430872171738201552}
|
- {fileID: 3430872171738201552}
|
||||||
- {fileID: 5684774662137182450}
|
- {fileID: 5684774662137182450}
|
||||||
m_Father: {fileID: 4232056520494431727}
|
m_Father: {fileID: 4232056520494431727}
|
||||||
m_RootOrder: 1
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 1}
|
m_AnchorMin: {x: 0, y: 1}
|
||||||
m_AnchorMax: {x: 0, y: 1}
|
m_AnchorMax: {x: 0, y: 1}
|
||||||
@ -289,12 +291,13 @@ Transform:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 4232056520112715746}
|
m_GameObject: {fileID: 4232056520112715746}
|
||||||
|
serializedVersion: 2
|
||||||
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_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 4232056521131536011}
|
m_Father: {fileID: 4232056521131536011}
|
||||||
m_RootOrder: 0
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &4232056520112715744
|
--- !u!114 &4232056520112715744
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
@ -311,6 +314,8 @@ MonoBehaviour:
|
|||||||
NesEmu: {fileID: 4232056521131536012}
|
NesEmu: {fileID: 4232056521131536012}
|
||||||
DrawCanvas: {fileID: 4232056520494431724}
|
DrawCanvas: {fileID: 4232056520494431724}
|
||||||
Image: {fileID: 4232056521759880274}
|
Image: {fileID: 4232056521759880274}
|
||||||
|
GPUTurboMat_gpu: {fileID: 2100000, guid: 07e28fcb992bc124e986f9d8ff3beb97, type: 2}
|
||||||
|
GPUTurbo: 1
|
||||||
--- !u!1 &4232056520494431712
|
--- !u!1 &4232056520494431712
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -322,7 +327,6 @@ GameObject:
|
|||||||
- component: {fileID: 4232056520494431727}
|
- component: {fileID: 4232056520494431727}
|
||||||
- component: {fileID: 4232056520494431724}
|
- component: {fileID: 4232056520494431724}
|
||||||
- component: {fileID: 4232056520494431725}
|
- component: {fileID: 4232056520494431725}
|
||||||
- component: {fileID: 4232056520494431726}
|
|
||||||
m_Layer: 5
|
m_Layer: 5
|
||||||
m_Name: Canvas
|
m_Name: Canvas
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@ -340,11 +344,11 @@ RectTransform:
|
|||||||
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_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 0, y: 0, z: 0}
|
m_LocalScale: {x: 0, y: 0, z: 0}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 4232056521759880275}
|
- {fileID: 4232056521759880275}
|
||||||
- {fileID: 1038087993597378172}
|
- {fileID: 1038087993597378172}
|
||||||
m_Father: {fileID: 4232056521131536011}
|
m_Father: {fileID: 4232056521131536011}
|
||||||
m_RootOrder: 2
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
m_AnchorMax: {x: 0, y: 0}
|
m_AnchorMax: {x: 0, y: 0}
|
||||||
@ -368,7 +372,9 @@ Canvas:
|
|||||||
m_OverrideSorting: 0
|
m_OverrideSorting: 0
|
||||||
m_OverridePixelPerfect: 0
|
m_OverridePixelPerfect: 0
|
||||||
m_SortingBucketNormalizedSize: 0
|
m_SortingBucketNormalizedSize: 0
|
||||||
|
m_VertexColorAlwaysGammaSpace: 0
|
||||||
m_AdditionalShaderChannelsFlag: 0
|
m_AdditionalShaderChannelsFlag: 0
|
||||||
|
m_UpdateRectTransformForStandalone: 0
|
||||||
m_SortingLayerID: 0
|
m_SortingLayerID: 0
|
||||||
m_SortingOrder: 0
|
m_SortingOrder: 0
|
||||||
m_TargetDisplay: 0
|
m_TargetDisplay: 0
|
||||||
@ -395,23 +401,6 @@ MonoBehaviour:
|
|||||||
m_DefaultSpriteDPI: 96
|
m_DefaultSpriteDPI: 96
|
||||||
m_DynamicPixelsPerUnit: 1
|
m_DynamicPixelsPerUnit: 1
|
||||||
m_PresetInfoIsWorld: 0
|
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
|
--- !u!1 &4232056521131536013
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -436,15 +425,16 @@ Transform:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 4232056521131536013}
|
m_GameObject: {fileID: 4232056521131536013}
|
||||||
|
serializedVersion: 2
|
||||||
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_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 4232056520112715745}
|
- {fileID: 4232056520112715745}
|
||||||
- {fileID: 4785916497946256520}
|
- {fileID: 4785916497946256520}
|
||||||
- {fileID: 4232056520494431727}
|
- {fileID: 4232056520494431727}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 0
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &4232056521131536012
|
--- !u!114 &4232056521131536012
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
@ -458,10 +448,8 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 39557e19783acee499ace6c68549e8f8, type: 3}
|
m_Script: {fileID: 11500000, guid: 39557e19783acee499ace6c68549e8f8, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
InputTemplate: {fileID: 0}
|
|
||||||
VideoProvider: {fileID: 4232056520112715744}
|
VideoProvider: {fileID: 4232056520112715744}
|
||||||
AudioProvider: {fileID: 9003897287163669553}
|
AudioProvider: {fileID: 9003897287163669553}
|
||||||
m_bPause: 0
|
|
||||||
--- !u!1 &4232056521759880276
|
--- !u!1 &4232056521759880276
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -490,9 +478,9 @@ RectTransform:
|
|||||||
m_LocalRotation: {x: 1, y: 0, z: 0, w: 0}
|
m_LocalRotation: {x: 1, y: 0, z: 0, w: 0}
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 4232056520494431727}
|
m_Father: {fileID: 4232056520494431727}
|
||||||
m_RootOrder: 0
|
|
||||||
m_LocalEulerAnglesHint: {x: 180, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 180, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
m_AnchorMax: {x: 1, y: 1}
|
m_AnchorMax: {x: 1, y: 1}
|
||||||
@ -519,7 +507,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
|
m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
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_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_RaycastTarget: 1
|
m_RaycastTarget: 1
|
||||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
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_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 1038087993597378172}
|
m_Father: {fileID: 1038087993597378172}
|
||||||
m_RootOrder: 1
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
m_AnchorMax: {x: 1, y: 0}
|
m_AnchorMax: {x: 1, y: 0}
|
||||||
|
@ -25,17 +25,18 @@ RectTransform:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 2371389415552619370}
|
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_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children:
|
||||||
m_Father: {fileID: 1727149598719982521}
|
- {fileID: 1771748875814093347}
|
||||||
|
m_Father: {fileID: 8950855035476021338}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0.5}
|
m_AnchorMin: {x: 0, y: 0.5}
|
||||||
m_AnchorMax: {x: 0, y: 0.5}
|
m_AnchorMax: {x: 0, y: 0.5}
|
||||||
m_AnchoredPosition: {x: 84, y: 0}
|
m_AnchoredPosition: {x: 49, y: 0}
|
||||||
m_SizeDelta: {x: 502, y: 160}
|
m_SizeDelta: {x: 251, y: 80}
|
||||||
m_Pivot: {x: 0, y: 0.5}
|
m_Pivot: {x: 0, y: 0.5}
|
||||||
--- !u!222 &6564505248202665844
|
--- !u!222 &6564505248202665844
|
||||||
CanvasRenderer:
|
CanvasRenderer:
|
||||||
@ -100,17 +101,17 @@ RectTransform:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 2721335758118728454}
|
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_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 1727149598719982521}
|
m_Father: {fileID: 8950855035476021338}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0.5}
|
m_AnchorMin: {x: 0, y: 0.5}
|
||||||
m_AnchorMax: {x: 0, y: 0.5}
|
m_AnchorMax: {x: 0, y: 0.5}
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
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}
|
m_Pivot: {x: 0, y: 0.5}
|
||||||
--- !u!222 &9075115120373129637
|
--- !u!222 &9075115120373129637
|
||||||
CanvasRenderer:
|
CanvasRenderer:
|
||||||
@ -159,7 +160,7 @@ GameObject:
|
|||||||
serializedVersion: 6
|
serializedVersion: 6
|
||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 1727149598719982521}
|
- component: {fileID: 1727149598719982521}
|
||||||
- component: {fileID: 7654163251363580929}
|
- component: {fileID: 8370099016684185830}
|
||||||
m_Layer: 5
|
m_Layer: 5
|
||||||
m_Name: RoomPlayerSlotUnit
|
m_Name: RoomPlayerSlotUnit
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@ -179,20 +180,143 @@ RectTransform:
|
|||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 846681823671095772}
|
- {fileID: 8950855035476021338}
|
||||||
- {fileID: 6665974318866355999}
|
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 1}
|
m_AnchorMin: {x: 0, y: 1}
|
||||||
m_AnchorMax: {x: 0, y: 1}
|
m_AnchorMax: {x: 0, y: 1}
|
||||||
m_AnchoredPosition: {x: 0, y: 0}
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
m_SizeDelta: {x: 100, y: 100}
|
m_SizeDelta: {x: 300, y: 100}
|
||||||
m_Pivot: {x: 0, y: 1}
|
m_Pivot: {x: 0, y: 1}
|
||||||
--- !u!222 &7654163251363580929
|
--- !u!114 &8370099016684185830
|
||||||
CanvasRenderer:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 5376230278482525414}
|
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
|
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_ChildScaleWidth: 0
|
||||||
m_ChildScaleHeight: 0
|
m_ChildScaleHeight: 0
|
||||||
m_ReverseArrangement: 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
|
--- !u!1 &2196797712553207707
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -93,7 +172,8 @@ RectTransform:
|
|||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children:
|
||||||
|
- {fileID: 2940710093054777883}
|
||||||
m_Father: {fileID: 5353336693430589123}
|
m_Father: {fileID: 5353336693430589123}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
@ -626,6 +706,7 @@ MonoBehaviour:
|
|||||||
DelayValue: {fileID: 6486398873987280650}
|
DelayValue: {fileID: 6486398873987280650}
|
||||||
OnlinePlayerCount: {fileID: 9033504323044377285}
|
OnlinePlayerCount: {fileID: 9033504323044377285}
|
||||||
FPS: {fileID: 2545793518460288919}
|
FPS: {fileID: 2545793518460288919}
|
||||||
|
ControlSlotInfoNode: {fileID: 1793510994393845066}
|
||||||
--- !u!1 &5629957813601835122
|
--- !u!1 &5629957813601835122
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -1304,3 +1385,423 @@ MonoBehaviour:
|
|||||||
m_FillOrigin: 0
|
m_FillOrigin: 0
|
||||||
m_UseSpriteMesh: 0
|
m_UseSpriteMesh: 0
|
||||||
m_PixelsPerUnitMultiplier: 1
|
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:
|
m_Component:
|
||||||
- component: {fileID: 802786939}
|
- component: {fileID: 802786939}
|
||||||
- component: {fileID: 802786941}
|
- component: {fileID: 802786941}
|
||||||
- component: {fileID: 802786940}
|
- component: {fileID: 802786942}
|
||||||
|
- component: {fileID: 802786943}
|
||||||
m_Layer: 5
|
m_Layer: 5
|
||||||
m_Name: Image2
|
m_Name: Image2
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@ -958,7 +959,15 @@ RectTransform:
|
|||||||
m_AnchoredPosition: {x: 0, y: 0}
|
m_AnchoredPosition: {x: 0, y: 0}
|
||||||
m_SizeDelta: {x: 0, y: 0}
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
m_Pivot: {x: 0.5, y: 0.5}
|
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:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
@ -967,7 +976,7 @@ MonoBehaviour:
|
|||||||
m_GameObject: {fileID: 802786938}
|
m_GameObject: {fileID: 802786938}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_Material: {fileID: 0}
|
m_Material: {fileID: 0}
|
||||||
@ -978,24 +987,25 @@ MonoBehaviour:
|
|||||||
m_OnCullStateChanged:
|
m_OnCullStateChanged:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls: []
|
m_Calls: []
|
||||||
m_Sprite: {fileID: 21300000, guid: e043954733c440645ba43b09301ee4a6, type: 3}
|
m_Texture: {fileID: 2800000, guid: e043954733c440645ba43b09301ee4a6, type: 3}
|
||||||
m_Type: 0
|
m_UVRect:
|
||||||
m_PreserveAspect: 0
|
serializedVersion: 2
|
||||||
m_FillCenter: 1
|
x: 0
|
||||||
m_FillMethod: 4
|
y: 0
|
||||||
m_FillAmount: 1
|
width: 1
|
||||||
m_FillClockwise: 1
|
height: 1
|
||||||
m_FillOrigin: 0
|
--- !u!114 &802786943
|
||||||
m_UseSpriteMesh: 0
|
MonoBehaviour:
|
||||||
m_PixelsPerUnitMultiplier: 1
|
|
||||||
--- !u!222 &802786941
|
|
||||||
CanvasRenderer:
|
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 802786938}
|
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
|
--- !u!224 &939125854 stripped
|
||||||
RectTransform:
|
RectTransform:
|
||||||
m_CorrespondingSourceObject: {fileID: 3531919739338806919, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
|
m_CorrespondingSourceObject: {fileID: 3531919739338806919, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
|
||||||
@ -1010,9 +1020,6 @@ GameObject:
|
|||||||
serializedVersion: 6
|
serializedVersion: 6
|
||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 1124446957}
|
- component: {fileID: 1124446957}
|
||||||
- component: {fileID: 1124446960}
|
|
||||||
- component: {fileID: 1124446959}
|
|
||||||
- component: {fileID: 1124446958}
|
|
||||||
- component: {fileID: 1124446961}
|
- component: {fileID: 1124446961}
|
||||||
m_Layer: 5
|
m_Layer: 5
|
||||||
m_Name: FilterPreview
|
m_Name: FilterPreview
|
||||||
@ -1028,83 +1035,20 @@ RectTransform:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 1124446956}
|
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_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_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 1471857115}
|
- {fileID: 1471857115}
|
||||||
- {fileID: 802786939}
|
- {fileID: 802786939}
|
||||||
m_Father: {fileID: 1335662459}
|
m_Father: {fileID: 1599240741}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 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_AnchoredPosition: {x: 0, y: 0}
|
||||||
m_SizeDelta: {x: 0, y: 0}
|
m_SizeDelta: {x: 0, y: 0}
|
||||||
m_Pivot: {x: 0, y: 0}
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
--- !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
|
|
||||||
--- !u!225 &1124446961
|
--- !u!225 &1124446961
|
||||||
CanvasGroup:
|
CanvasGroup:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -1153,11 +1097,9 @@ Transform:
|
|||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 1639312037}
|
- {fileID: 1639312037}
|
||||||
- {fileID: 1475480929}
|
|
||||||
- {fileID: 74796459}
|
- {fileID: 74796459}
|
||||||
- {fileID: 1427887270}
|
- {fileID: 1427887270}
|
||||||
- {fileID: 1599240741}
|
- {fileID: 1599240741}
|
||||||
- {fileID: 1124446957}
|
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &1335662460
|
--- !u!114 &1335662460
|
||||||
@ -1172,7 +1114,6 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 980f937ad27ad8540afeb8b7f100997e, type: 3}
|
m_Script: {fileID: 11500000, guid: 980f937ad27ad8540afeb8b7f100997e, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
m_filterVolume: {fileID: 1475480930}
|
|
||||||
m_filterPreview: {fileID: 1124446961}
|
m_filterPreview: {fileID: 1124446961}
|
||||||
m_xmbBg: {fileID: 730698712}
|
m_xmbBg: {fileID: 730698712}
|
||||||
bTest: 0
|
bTest: 0
|
||||||
@ -1229,6 +1170,18 @@ PrefabInstance:
|
|||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TransformParent: {fileID: 1599240741}
|
m_TransformParent: {fileID: 1599240741}
|
||||||
m_Modifications:
|
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}
|
- target: {fileID: 1108503213262670097, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
@ -1253,6 +1206,22 @@ PrefabInstance:
|
|||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 1710183501897154830, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
@ -1341,6 +1310,22 @@ PrefabInstance:
|
|||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 2580867844924924490, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
@ -1369,6 +1354,158 @@ PrefabInstance:
|
|||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 4195056312044822544, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
@ -1409,6 +1546,18 @@ PrefabInstance:
|
|||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 4701095282238438274, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
@ -1457,6 +1606,22 @@ PrefabInstance:
|
|||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 5179542162941529357, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
@ -1577,6 +1742,22 @@ PrefabInstance:
|
|||||||
propertyPath: m_SizeDelta.y
|
propertyPath: m_SizeDelta.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 6228199563403754553, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
@ -1649,6 +1830,26 @@ PrefabInstance:
|
|||||||
propertyPath: m_LocalPosition.y
|
propertyPath: m_LocalPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 6462781698725903427, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
@ -1705,6 +1906,46 @@ PrefabInstance:
|
|||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 7158194035478552859, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
@ -1757,6 +1998,18 @@ PrefabInstance:
|
|||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 7535416527851975519, guid: 3b211f31b55a35e44a8fa38666f63383, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
@ -1785,6 +2038,34 @@ PrefabInstance:
|
|||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
@ -1884,174 +2165,6 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
imgUI: {fileID: 1471857116}
|
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
|
--- !u!1 &1498586261
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 3
|
m_ObjectHideFlags: 3
|
||||||
@ -2190,10 +2303,11 @@ RectTransform:
|
|||||||
m_LocalScale: {x: 0, y: 0, z: 0}
|
m_LocalScale: {x: 0, y: 0, z: 0}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
|
- {fileID: 1124446957}
|
||||||
- {fileID: 1983793178}
|
- {fileID: 1983793178}
|
||||||
|
- {fileID: 1469631713}
|
||||||
- {fileID: 939125854}
|
- {fileID: 939125854}
|
||||||
- {fileID: 1318590597}
|
- {fileID: 1318590597}
|
||||||
- {fileID: 1469631713}
|
|
||||||
m_Father: {fileID: 1335662459}
|
m_Father: {fileID: 1335662459}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
@ -2214,7 +2328,7 @@ GameObject:
|
|||||||
- component: {fileID: 1639312035}
|
- component: {fileID: 1639312035}
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: UICamera
|
m_Name: UICamera
|
||||||
m_TagString: Untagged
|
m_TagString: MainCamera
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
@ -2263,7 +2377,7 @@ Camera:
|
|||||||
field of view: 60
|
field of view: 60
|
||||||
orthographic: 1
|
orthographic: 1
|
||||||
orthographic size: 5
|
orthographic size: 5
|
||||||
m_Depth: -1
|
m_Depth: 0
|
||||||
m_CullingMask:
|
m_CullingMask:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Bits: 32
|
m_Bits: 32
|
||||||
@ -2467,10 +2581,18 @@ PrefabInstance:
|
|||||||
propertyPath: m_AnchoredPosition.y
|
propertyPath: m_AnchoredPosition.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 736530578155193984, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 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}
|
- target: {fileID: 935090267056593628, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
|
||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
@ -2963,6 +3085,10 @@ PrefabInstance:
|
|||||||
propertyPath: m_AnchorMax.y
|
propertyPath: m_AnchorMax.y
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8801936766261209235, guid: 1de15a80c8c1aa94486563740a15d91c, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
|
@ -34,6 +34,11 @@ namespace AxibugEmuOnline.Client.ClientCore
|
|||||||
#region Mono
|
#region Mono
|
||||||
public static TickLoop tickLoop;
|
public static TickLoop tickLoop;
|
||||||
private static CoroutineRunner coRunner;
|
private static CoroutineRunner coRunner;
|
||||||
|
|
||||||
|
#if UNITY_PSP2
|
||||||
|
public static SonyVitaCommonDialog sonyVitaCommonDialog;
|
||||||
|
#endif
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#if UNITY_PSP2 && !UNITY_EDITOR //PSV真机
|
#if UNITY_PSP2 && !UNITY_EDITOR //PSV真机
|
||||||
@ -43,15 +48,13 @@ namespace AxibugEmuOnline.Client.ClientCore
|
|||||||
#endif
|
#endif
|
||||||
public static void Init(Initer initer, bool isTest = false, string testSrvIP = "")
|
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)
|
settings = new AppSettings();
|
||||||
{
|
|
||||||
//PSV 等平台需要手动创建目录
|
|
||||||
PSP2Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
settings = new AppSettings();
|
|
||||||
|
|
||||||
log = new LogManager();
|
log = new LogManager();
|
||||||
LogManager.OnLog += OnNoSugarNetLog;
|
LogManager.OnLog += OnNoSugarNetLog;
|
||||||
@ -66,7 +69,7 @@ namespace AxibugEmuOnline.Client.ClientCore
|
|||||||
CacheMgr = new CacheManager();
|
CacheMgr = new CacheManager();
|
||||||
roomMgr = new AppRoom();
|
roomMgr = new AppRoom();
|
||||||
share = new AppShare();
|
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;
|
bTest = isTest;
|
||||||
mTestSrvIP = testSrvIP;
|
mTestSrvIP = testSrvIP;
|
||||||
var go = new GameObject("[AppAxibugEmuOnline]");
|
var go = new GameObject("[AppAxibugEmuOnline]");
|
||||||
@ -90,9 +93,12 @@ namespace AxibugEmuOnline.Client.ClientCore
|
|||||||
Directory.CreateDirectory(PersistentDataPath);
|
Directory.CreateDirectory(PersistentDataPath);
|
||||||
|
|
||||||
#if UNITY_PSP2
|
#if UNITY_PSP2
|
||||||
|
//创建PSV弹窗UI
|
||||||
|
sonyVitaCommonDialog = new GameObject().AddComponent<SonyVitaCommonDialog>();
|
||||||
//释放解码 FMV的26M内存,一般游戏用不上(PSP才用那破玩意儿)
|
//释放解码 FMV的26M内存,一般游戏用不上(PSP才用那破玩意儿)
|
||||||
UnityEngine.PSVita.PSVitaVideoPlayer.TransferMemToMonoHeap();
|
UnityEngine.PSVita.PSVitaVideoPlayer.TransferMemToMonoHeap();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IEnumerator AppTickFlow()
|
private static IEnumerator AppTickFlow()
|
||||||
@ -122,7 +128,7 @@ namespace AxibugEmuOnline.Client.ClientCore
|
|||||||
yield break;
|
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;
|
yield return request.SendWebRequest;
|
||||||
if (!request.downloadHandler.isDone)
|
if (!request.downloadHandler.isDone)
|
||||||
yield break;
|
yield break;
|
||||||
|
@ -14,7 +14,6 @@ using System.Threading;
|
|||||||
|
|
||||||
public static class PSVThread
|
public static class PSVThread
|
||||||
{
|
{
|
||||||
static Thread psvThread = new Thread(Loop);
|
|
||||||
static AutoResetEvent autoEvent = new AutoResetEvent(false);
|
static AutoResetEvent autoEvent = new AutoResetEvent(false);
|
||||||
static Queue<Action> qActs = new Queue<Action>();
|
static Queue<Action> qActs = new Queue<Action>();
|
||||||
static Queue<Action> qWork = new Queue<Action>();
|
static Queue<Action> qWork = new Queue<Action>();
|
||||||
@ -29,6 +28,7 @@ public static class PSVThread
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if UNITY_PSP2
|
#if UNITY_PSP2
|
||||||
|
static Thread psvThread = new Thread(Loop);
|
||||||
static bool bSingleInit = false;
|
static bool bSingleInit = false;
|
||||||
static void SingleInit()
|
static void SingleInit()
|
||||||
{
|
{
|
||||||
|
@ -9,7 +9,10 @@
|
|||||||
/// 登录成功
|
/// 登录成功
|
||||||
/// </summary>
|
/// </summary>
|
||||||
OnLoginSucceed,
|
OnLoginSucceed,
|
||||||
|
/// <summary>
|
||||||
|
/// 当登录被置为false时
|
||||||
|
/// </summary>
|
||||||
|
OnLossLoginState,
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 登录失败
|
/// 登录失败
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -68,5 +71,14 @@
|
|||||||
/// 当房间中手柄位信息发生任何变化时触发,进入房间后也应该触发
|
/// 当房间中手柄位信息发生任何变化时触发,进入房间后也应该触发
|
||||||
/// </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.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Rendering.PostProcessing;
|
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Client
|
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 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()
|
public FilterEffect()
|
||||||
{
|
{
|
||||||
GetEditableFilterParamters();
|
GetEditableFilterParamters();
|
||||||
|
m_material = new Material(Shader.Find(ShaderName));
|
||||||
}
|
}
|
||||||
protected void GetEditableFilterParamters()
|
void GetEditableFilterParamters()
|
||||||
{
|
{
|
||||||
var parameters = (from t in GetType().GetFields(BindingFlags.Instance | BindingFlags.Public)
|
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))
|
where t.DeclaringType.IsSubclassOf(typeof(FilterEffect))
|
||||||
orderby t.MetadataToken
|
orderby t.MetadataToken
|
||||||
select t);
|
select t);
|
||||||
@ -30,7 +34,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
m_editableParamList = new List<EditableParamerter>();
|
m_editableParamList = new List<EditableParamerter>();
|
||||||
foreach (var param in parameters)
|
foreach (var param in parameters)
|
||||||
{
|
{
|
||||||
var paramObj = (ParameterOverride)param.GetValue(this);
|
var paramObj = (FilterParameter)param.GetValue(this);
|
||||||
var rangeAtt = param.GetCustomAttribute<RangeAttribute>();
|
var rangeAtt = param.GetCustomAttribute<RangeAttribute>();
|
||||||
float min = 0;
|
float min = 0;
|
||||||
float max = 10;
|
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
|
public class EditableParamerter
|
||||||
{
|
{
|
||||||
private ParameterOverride m_paramObject;
|
private FilterParameter m_paramObject;
|
||||||
private FieldInfo valueFieldInfo;
|
|
||||||
|
|
||||||
public Type ValueType { get; private set; }
|
public Type ValueType => m_paramObject.ValueType;
|
||||||
public string Name { get; private set; }
|
public string Name { get; private set; }
|
||||||
public object Value
|
public object Value
|
||||||
{
|
{
|
||||||
get => valueFieldInfo.GetValue(m_paramObject);
|
get => m_paramObject.Value;
|
||||||
set
|
set => m_paramObject.Value = value;
|
||||||
{
|
|
||||||
valueFieldInfo.SetValue(m_paramObject, value);
|
|
||||||
m_paramObject.overrideState = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public object MinValue { get; private set; }
|
public object MinValue { get; private set; }
|
||||||
public object MaxValue { 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;
|
m_paramObject = paramObject;
|
||||||
Name = name;
|
Name = name;
|
||||||
|
|
||||||
var paramType = paramObject.GetType();
|
var paramType = paramObject.GetType();
|
||||||
|
|
||||||
valueFieldInfo = paramType.GetField("value", BindingFlags.Public | BindingFlags.Instance);
|
|
||||||
if (valueFieldInfo != null)
|
|
||||||
{
|
|
||||||
ValueType = valueFieldInfo.FieldType;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ValueType = typeof(object);
|
|
||||||
}
|
|
||||||
|
|
||||||
MinValue = minValue;
|
MinValue = minValue;
|
||||||
MaxValue = maxValue;
|
MaxValue = maxValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetToDefault() => m_paramObject.overrideState = false;
|
public void ResetToDefault() => m_paramObject.Value = null;
|
||||||
|
|
||||||
|
|
||||||
public void Apply(object overrideValue)
|
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;
|
||||||
using UnityEngine.Rendering.PostProcessing;
|
|
||||||
|
|
||||||
[System.Serializable]
|
|
||||||
[PostProcess(typeof(FixingPixelArtGrilleRenderer), PostProcessEvent.BeforeStack, "Filter/FixingPixelArtGrille")]
|
|
||||||
public sealed class FixingPixelArtGrille : FilterEffect
|
public sealed class FixingPixelArtGrille : FilterEffect
|
||||||
{
|
{
|
||||||
public override string Name => nameof(FixingPixelArtGrille);
|
public override string Name => nameof(FixingPixelArtGrille);
|
||||||
|
|
||||||
public ParameterOverride<EnumMaskStyle> MaskStyle = new ParameterOverride<EnumMaskStyle> { value = EnumMaskStyle.ApertureGrille };
|
protected override string ShaderName => "PostEffect/FixingPixcelArtGrille";
|
||||||
|
public FilterParameter<EnumMaskStyle> MaskStyle = new FilterParameter<EnumMaskStyle>(EnumMaskStyle.ApertureGrille);
|
||||||
[Tooltip("Emulated input resolution\nOptimize for resize")]
|
public Vector2Parameter DrawResolution = new Vector2Parameter(new Vector2(272, 240));
|
||||||
public Vector2Parameter DrawResolution = new Vector2Parameter
|
|
||||||
{
|
|
||||||
value = new Vector2(272, 240)
|
|
||||||
};
|
|
||||||
|
|
||||||
[Tooltip("Hardness of scanline")]
|
|
||||||
[Range(-32, 0)]
|
[Range(-32, 0)]
|
||||||
public FloatParameter HardScan = new FloatParameter { value = -10 };
|
public FloatParameter HardScan = new FloatParameter(-10);
|
||||||
|
|
||||||
[Tooltip("Hardness of pixels in scanline")]
|
|
||||||
[Range(-6, 0)]
|
[Range(-6, 0)]
|
||||||
public FloatParameter HardPix = new FloatParameter { value = -2 };
|
public FloatParameter HardPix = new FloatParameter(-2);
|
||||||
|
|
||||||
[Tooltip("Hardness of short vertical bloom")]
|
|
||||||
[Range(-8, 0)]
|
[Range(-8, 0)]
|
||||||
public FloatParameter HardBloomScan = new FloatParameter { value = -4.0f };
|
public FloatParameter HardBloomScan = new FloatParameter(-4.0f);
|
||||||
|
|
||||||
[Tooltip("Hardness of short horizontal bloom")]
|
|
||||||
[Range(-4, 0)]
|
[Range(-4, 0)]
|
||||||
public FloatParameter HardBloomPix = new FloatParameter { value = -1.5f };
|
public FloatParameter HardBloomPix = new FloatParameter(-1.5f);
|
||||||
|
|
||||||
[Tooltip("Amount of small bloom effect")]
|
|
||||||
[Range(0, 1)]
|
[Range(0, 1)]
|
||||||
public FloatParameter BloomAmount = new FloatParameter { value = 1 / 16f };
|
public FloatParameter BloomAmount = new FloatParameter(1 / 16f);
|
||||||
|
public Vector2Parameter Warp = new Vector2Parameter(new Vector2(1f / 64f, 1f / 24f));
|
||||||
[Tooltip("Display warp")]
|
|
||||||
public Vector2Parameter Warp = new Vector2Parameter { value = new Vector2(1f / 64f, 1f / 24f) };
|
|
||||||
|
|
||||||
[Tooltip("Amount of shadow mask Light")]
|
|
||||||
[Range(1, 3)]
|
[Range(1, 3)]
|
||||||
public FloatParameter MaskLight = new FloatParameter { value = 1.5f };
|
public FloatParameter MaskLight = new FloatParameter(1.5f);
|
||||||
[Range(0.1f, 1)]
|
[Range(0.1f, 1)]
|
||||||
[Tooltip("Amount of shadow mask Dark")]
|
public FloatParameter MaskDrak = new FloatParameter(0.5f);
|
||||||
public FloatParameter MaskDrak = new FloatParameter { value = 0.5f };
|
|
||||||
|
|
||||||
public enum EnumMaskStyle
|
public enum EnumMaskStyle
|
||||||
{
|
{
|
||||||
@ -53,54 +32,41 @@ public sealed class FixingPixelArtGrille : FilterEffect
|
|||||||
StretchedVGA,
|
StretchedVGA,
|
||||||
VGAStyle
|
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");
|
renderMat.SetVector("_iResolution", new Vector4(result.width, result.height, 0, 0));
|
||||||
material = new Material(shader);
|
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)
|
renderMat.DisableKeyword("_MASKSTYLE_VGASTYLE");
|
||||||
{
|
renderMat.DisableKeyword("_MASKSTYLE_TVSTYLE");
|
||||||
material.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0));
|
renderMat.DisableKeyword("_MASKSTYLE_APERTUREGRILLE");
|
||||||
var res = settings.DrawResolution;
|
renderMat.DisableKeyword("_MASKSTYLE_STRETCHEDVGA");
|
||||||
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);
|
|
||||||
|
|
||||||
material.DisableKeyword("_MASKSTYLE_VGASTYLE");
|
switch (MaskStyle.GetValue())
|
||||||
material.DisableKeyword("_MASKSTYLE_TVSTYLE");
|
|
||||||
material.DisableKeyword("_MASKSTYLE_APERTUREGRILLE");
|
|
||||||
material.DisableKeyword("_MASKSTYLE_STRETCHEDVGA");
|
|
||||||
|
|
||||||
switch (settings.MaskStyle.value)
|
|
||||||
{
|
{
|
||||||
case FixingPixelArtGrille.EnumMaskStyle.VGAStyle:
|
case EnumMaskStyle.VGAStyle:
|
||||||
material.EnableKeyword("_MASKSTYLE_VGASTYLE");
|
renderMat.EnableKeyword("_MASKSTYLE_VGASTYLE");
|
||||||
break;
|
break;
|
||||||
case FixingPixelArtGrille.EnumMaskStyle.TVStyle:
|
case EnumMaskStyle.TVStyle:
|
||||||
material.EnableKeyword("_MASKSTYLE_TVSTYLE");
|
renderMat.EnableKeyword("_MASKSTYLE_TVSTYLE");
|
||||||
break;
|
break;
|
||||||
case FixingPixelArtGrille.EnumMaskStyle.ApertureGrille:
|
case EnumMaskStyle.ApertureGrille:
|
||||||
material.EnableKeyword("_MASKSTYLE_APERTUREGRILLE");
|
renderMat.EnableKeyword("_MASKSTYLE_APERTUREGRILLE");
|
||||||
break;
|
break;
|
||||||
case FixingPixelArtGrille.EnumMaskStyle.StretchedVGA:
|
case EnumMaskStyle.StretchedVGA:
|
||||||
material.EnableKeyword("_MASKSTYLE_STRETCHEDVGA");
|
renderMat.EnableKeyword("_MASKSTYLE_STRETCHEDVGA");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Graphics.Blit(src, result, renderMat);
|
||||||
context.command.Blit(context.source, context.destination, material);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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 AxibugEmuOnline.Client;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Rendering.PostProcessing;
|
|
||||||
|
|
||||||
[System.Serializable]
|
|
||||||
[PostProcess(typeof(LCDPostEffectRenderer), PostProcessEvent.BeforeStack, "Filter/LCDPostEffect")]
|
|
||||||
public sealed class LCDPostEffect : FilterEffect
|
public sealed class LCDPostEffect : FilterEffect
|
||||||
{
|
{
|
||||||
public override string Name => nameof(LCDPostEffect);
|
public override string Name => nameof(LCDPostEffect);
|
||||||
}
|
|
||||||
|
|
||||||
public sealed class LCDPostEffectRenderer : PostProcessEffectRenderer<LCDPostEffect>
|
protected override string ShaderName => "Filter/LCDPostEffect";
|
||||||
{
|
|
||||||
private Shader shader;
|
|
||||||
private Material material;
|
|
||||||
|
|
||||||
public override void Init()
|
protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result)
|
||||||
{
|
{
|
||||||
shader = Shader.Find("Filter/LCDPostEffect");
|
renderMat.SetVector("_iResolution", new Vector4(Screen.width, Screen.height, 0, 0));
|
||||||
material = new Material(shader);
|
Graphics.Blit(src, result, renderMat);
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
||||||
using UnityEngine.Rendering.PostProcessing;
|
|
||||||
|
|
||||||
[System.Serializable]
|
|
||||||
[PostProcess(typeof(MattiasCRTRenderer), PostProcessEvent.BeforeStack, "Filter/MattiasCRT")]
|
|
||||||
public sealed class MattiasCRT : FilterEffect
|
public sealed class MattiasCRT : FilterEffect
|
||||||
{
|
{
|
||||||
public override string Name => nameof(MattiasCRT);
|
public override string Name => nameof(MattiasCRT);
|
||||||
}
|
|
||||||
|
|
||||||
public sealed class MattiasCRTRenderer : PostProcessEffectRenderer<MattiasCRT>
|
protected override string ShaderName => "Filter/MattiasCRT";
|
||||||
{
|
|
||||||
private Shader shader;
|
|
||||||
private Material material;
|
|
||||||
|
|
||||||
public override void Init()
|
protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result)
|
||||||
{
|
{
|
||||||
shader = Shader.Find("Filter/MattiasCRT");
|
renderMat.SetVector("_iResolution", new Vector4(result.width, result.height, 0, 0));
|
||||||
material = new Material(shader);
|
Graphics.Blit(src, result, renderMat);
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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
|
namespace AxibugEmuOnline.Client
|
||||||
{
|
{
|
||||||
@ -15,6 +15,8 @@ namespace AxibugEmuOnline.Client
|
|||||||
void SetupScheme();
|
void SetupScheme();
|
||||||
void StartGame(RomFile romFile);
|
void StartGame(RomFile romFile);
|
||||||
void DoReset();
|
void DoReset();
|
||||||
|
IControllerSetuper GetControllerSetuper();
|
||||||
|
|
||||||
EnumPlatform Platform { get; }
|
EnumPlatform Platform { get; }
|
||||||
uint Frame { get; }
|
uint Frame { get; }
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
using AxibugEmuOnline.Client.ClientCore;
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Rendering.PostProcessing;
|
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Client
|
namespace AxibugEmuOnline.Client
|
||||||
{
|
{
|
||||||
public class Initer : MonoBehaviour
|
public class Initer : MonoBehaviour
|
||||||
{
|
{
|
||||||
public PostProcessVolume m_filterVolume;
|
|
||||||
public CanvasGroup m_filterPreview;
|
public CanvasGroup m_filterPreview;
|
||||||
public CanvasGroup m_xmbBg;
|
public CanvasGroup m_xmbBg;
|
||||||
public static string dev_UUID;
|
public static string dev_UUID;
|
||||||
|
@ -13,7 +13,7 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private IEmuCore m_emuCore;
|
private IEmuCore m_emuCore;
|
||||||
|
|
||||||
private VirtualNes.Core.IControllerSetuper m_controllerSetuper;
|
private IControllerSetuper m_controllerSetuper;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// unity的c#实现有bug,以接口类型保存的monobehaviour引用,!=和==运算符没有调用到monobehaviour重写过的运算符
|
/// unity的c#实现有bug,以接口类型保存的monobehaviour引用,!=和==运算符没有调用到monobehaviour重写过的运算符
|
||||||
@ -63,39 +63,31 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
|
|
||||||
m_emuCore.SetupScheme();
|
m_emuCore.SetupScheme();
|
||||||
|
|
||||||
m_controllerSetuper = Supporter.GetControllerSetuper();
|
m_controllerSetuper = m_emuCore.GetControllerSetuper();
|
||||||
|
|
||||||
SetupController();
|
//自动分配0号手柄到0号手柄位
|
||||||
|
m_controllerSetuper.SetConnect(con0ToSlot: 0);
|
||||||
|
Eventer.Instance.PostEvent(EEvent.OnControllerConnectChanged);
|
||||||
|
|
||||||
Eventer.Instance.RegisterEvent(EEvent.OnRoomSlotDataChanged, OnSlotDataChanged);
|
Eventer.Instance.RegisterEvent(EEvent.OnRoomSlotDataChanged, OnSlotDataChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnSlotDataChanged()
|
private void OnSlotDataChanged()
|
||||||
{
|
{
|
||||||
SetupController();
|
long selfUID = App.user.userdata.UID;
|
||||||
}
|
uint? con0Slot;
|
||||||
|
uint? con1Slot;
|
||||||
|
uint? con2Slot;
|
||||||
|
uint? con3Slot;
|
||||||
|
|
||||||
private void SetupController()
|
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 0, out con0Slot);
|
||||||
{
|
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 1, out con1Slot);
|
||||||
if (!App.roomMgr.InRoom) //不在房间中,自动分配0号手柄到0号手柄位
|
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 2, out con2Slot);
|
||||||
{
|
App.roomMgr.mineRoomMiniInfo.GetPlayerSlotIdxByUid(selfUID, 3, out con3Slot);
|
||||||
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);
|
m_controllerSetuper.SetConnect(con0Slot, con1Slot, con2Slot, con3Slot);
|
||||||
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()
|
public void StopGame()
|
||||||
|
@ -14,7 +14,7 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
public class AppRoom
|
public class AppRoom
|
||||||
{
|
{
|
||||||
public Protobuf_Room_MiniInfo mineRoomMiniInfo { get; private set; } = null;
|
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 IsHost => mineRoomMiniInfo?.HostPlayerUID == App.user.userdata.UID;
|
||||||
public bool IsScreenProviderUID => mineRoomMiniInfo?.ScreenProviderUID == App.user.userdata.UID;
|
public bool IsScreenProviderUID => mineRoomMiniInfo?.ScreenProviderUID == App.user.userdata.UID;
|
||||||
public RoomGameState RoomState => mineRoomMiniInfo.GameState;
|
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_Create _Protobuf_Room_Create = new Protobuf_Room_Create();
|
||||||
Protobuf_Room_Join _Protobuf_Room_Join = new Protobuf_Room_Join();
|
Protobuf_Room_Join _Protobuf_Room_Join = new Protobuf_Room_Join();
|
||||||
Protobuf_Room_Leave _Protobuf_Room_Leave = new Protobuf_Room_Leave();
|
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_Player_Ready _Protobuf_Room_Player_Ready = new Protobuf_Room_Player_Ready();
|
||||||
Protobuf_Room_SinglePlayerInputData _Protobuf_Room_SinglePlayerInputData = new Protobuf_Room_SinglePlayerInputData();
|
Protobuf_Room_SinglePlayerInputData _Protobuf_Room_SinglePlayerInputData = new Protobuf_Room_SinglePlayerInputData();
|
||||||
Protobuf_Screnn_Frame _Protobuf_Screnn_Frame = new Protobuf_Screnn_Frame();
|
Protobuf_Screnn_Frame _Protobuf_Screnn_Frame = new Protobuf_Screnn_Frame();
|
||||||
@ -298,6 +299,12 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
|
|
||||||
void RecvRoomMyRoomStateChange(byte[] reqData)
|
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);
|
Protobuf_Room_MyRoom_State_Change msg = ProtoBufHelper.DeSerizlize<Protobuf_Room_MyRoom_State_Change>(reqData);
|
||||||
long[] oldRoomPlayer = GetRoom4PlayerUIDs();
|
long[] oldRoomPlayer = GetRoom4PlayerUIDs();
|
||||||
Protobuf_Room_GamePlaySlot[] oldslotArr = GetRoom4GameSlotMiniInfos();
|
Protobuf_Room_GamePlaySlot[] oldslotArr = GetRoom4GameSlotMiniInfos();
|
||||||
@ -401,6 +408,50 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <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>
|
||||||
/// 上报即时存档
|
/// 上报即时存档
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -512,16 +563,15 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
/// <param name="roomMiniInfo"></param>
|
/// <param name="roomMiniInfo"></param>
|
||||||
/// <param name="freeSlots"></param>
|
/// <param name="freeSlots"></param>
|
||||||
/// <returns></returns>
|
/// <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++)
|
for (int i = 0; i < roomMiniInfo.GamePlaySlotList.Count; i++)
|
||||||
{
|
{
|
||||||
if (roomMiniInfo.GamePlaySlotList[i].PlayerUID <= 0)
|
if (roomMiniInfo.GamePlaySlotList[i].PlayerUID <= 0)
|
||||||
temp.Add(i);
|
freeSlots.Add(i);
|
||||||
}
|
}
|
||||||
freeSlots = temp.ToArray();
|
return freeSlots.Count > 0;
|
||||||
return freeSlots.Length > 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <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)
|
public static bool GetPlayerSlotIdxByUid(this Protobuf_Room_MiniInfo roomMiniInfo, long uid, int joyIdx, out uint? slotIdx)
|
||||||
{
|
{
|
||||||
slotIdx = null;
|
slotIdx = null;
|
||||||
//joyIdx取值返回[0,3],这个序号代表玩家本地的手柄编号
|
|
||||||
//todo : 根据uid和controllerIndex 返回占用的位置
|
|
||||||
|
|
||||||
//目前未实现,所有非0号位置的手柄,都返回false
|
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < roomMiniInfo.GamePlaySlotList.Count; i++)
|
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;
|
slotIdx = (uint)i;
|
||||||
return true;
|
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;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Networking;
|
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 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 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)
|
public void GetNesRomList(Action<Resp_GameList> callback, int page, int pageSize = 10)
|
||||||
{
|
{
|
||||||
App.StartCoroutine(GetNesRomListFlow(page, pageSize, callback));
|
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)
|
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}");
|
AxiHttpProxy.SendWebRequestProxy request = AxiHttpProxy.Get($"{WebSiteApi}/NesRomList?Page={page}&PageSize={pageSize}&SearchKey={searchKey}");
|
||||||
yield return request.SendWebRequest;
|
yield return request.SendWebRequest;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using AxibugEmuOnline.Client.ClientCore;
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
using AxiReplay;
|
using AxiReplay;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@ -10,6 +10,12 @@ namespace AxibugEmuOnline.Client
|
|||||||
{
|
{
|
||||||
public class CoreSupporter : ISupporterImpl
|
public class CoreSupporter : ISupporterImpl
|
||||||
{
|
{
|
||||||
|
private NesControllerMapper m_controllerMapper;
|
||||||
|
public CoreSupporter(NesControllerMapper conMapper)
|
||||||
|
{
|
||||||
|
m_controllerMapper = conMapper;
|
||||||
|
}
|
||||||
|
|
||||||
public Stream OpenRom(string fname)
|
public Stream OpenRom(string fname)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -57,7 +63,6 @@ namespace AxibugEmuOnline.Client
|
|||||||
}
|
}
|
||||||
|
|
||||||
public EmulatorConfig Config { get; private set; } = new EmulatorConfig();
|
public EmulatorConfig Config { get; private set; } = new EmulatorConfig();
|
||||||
public NesControllerMapper ControllerMapper { get; private set; } = new NesControllerMapper();
|
|
||||||
public void PrepareDirectory(string directPath)
|
public void PrepareDirectory(string directPath)
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory($"{App.PersistentDataPath}/{directPath}");
|
Directory.CreateDirectory($"{App.PersistentDataPath}/{directPath}");
|
||||||
@ -116,7 +121,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
}
|
}
|
||||||
else m_sampledState = default(ControllerState);
|
else m_sampledState = default(ControllerState);
|
||||||
|
|
||||||
var localState = ControllerMapper.CreateState();
|
var localState = m_controllerMapper.CreateState();
|
||||||
var rawData = ToNet(localState);
|
var rawData = ToNet(localState);
|
||||||
if (LastTestInput != rawData)
|
if (LastTestInput != rawData)
|
||||||
{
|
{
|
||||||
@ -127,15 +132,10 @@ namespace AxibugEmuOnline.Client
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_sampledState = ControllerMapper.CreateState();
|
m_sampledState = m_controllerMapper.CreateState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IControllerSetuper GetControllerSetuper()
|
|
||||||
{
|
|
||||||
return ControllerMapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ControllerState FromNet(AxiReplay.ReplayStep step)
|
public ControllerState FromNet(AxiReplay.ReplayStep step)
|
||||||
{
|
{
|
||||||
var temp = new ServerInputSnapShot();
|
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;
|
using VirtualNes.Core;
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Client
|
namespace AxibugEmuOnline.Client
|
||||||
@ -17,18 +22,103 @@ namespace AxibugEmuOnline.Client
|
|||||||
m_states[0] = m_states[1] = m_states[2] = m_states[3] = 0;
|
m_states[0] = m_states[1] = m_states[2] = m_states[3] = 0;
|
||||||
|
|
||||||
if (Controller0.ConnectSlot.HasValue) m_states[Controller0.ConnectSlot.Value] = Controller0.GetButtons();
|
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();
|
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();
|
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();
|
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);
|
var result = new ControllerState(m_states);
|
||||||
return result;
|
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>
|
/// <summary>
|
||||||
/// Nes控制器
|
/// Nes控制器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Controller
|
public class Controller : IController
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 控制器编号
|
/// 控制器编号
|
||||||
@ -85,9 +175,30 @@ namespace AxibugEmuOnline.Client
|
|||||||
return res;
|
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)
|
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))
|
if (PlayerPrefs.HasKey(configKey))
|
||||||
{
|
{
|
||||||
return new KeyListener(PlayerPrefs.GetString(configKey));
|
return new KeyListener(PlayerPrefs.GetString(configKey));
|
||||||
@ -115,6 +226,11 @@ namespace AxibugEmuOnline.Client
|
|||||||
/// <summary> 按键监听器 </summary>
|
/// <summary> 按键监听器 </summary>
|
||||||
KeyListener m_keyListener;
|
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)
|
public Button(Controller controller, EnumButtonType buttonType)
|
||||||
{
|
{
|
||||||
m_hostController = controller;
|
m_hostController = controller;
|
||||||
@ -129,7 +245,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public EnumButtonType SampleKey()
|
public EnumButtonType SampleKey()
|
||||||
{
|
{
|
||||||
return m_keyListener.IsPressing() ? m_buttonType : 0;
|
return IsPressing ? m_buttonType : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateListener()
|
private void CreateListener()
|
||||||
@ -137,10 +253,10 @@ namespace AxibugEmuOnline.Client
|
|||||||
m_keyListener = Controller.GetKey(m_hostController.ControllerIndex, m_buttonType);
|
m_keyListener = Controller.GetKey(m_hostController.ControllerIndex, m_buttonType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//low C# readonly
|
//low C# readonly
|
||||||
//public readonly struct KeyListener
|
//public readonly struct KeyListener
|
||||||
|
|
||||||
public struct KeyListener
|
public struct KeyListener
|
||||||
{
|
{
|
||||||
private readonly KeyCode m_key;
|
private readonly KeyCode m_key;
|
||||||
|
|
||||||
@ -155,7 +271,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
m_key = KeyCode.None;
|
m_key = KeyCode.None;
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
if (int.TryParse(confStr, out result))
|
if (int.TryParse(confStr, out result))
|
||||||
m_key = (KeyCode)result;
|
m_key = (KeyCode)result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,6 +279,10 @@ namespace AxibugEmuOnline.Client
|
|||||||
{
|
{
|
||||||
return Input.GetKey(m_key);
|
return Input.GetKey(m_key);
|
||||||
}
|
}
|
||||||
|
public bool IsDown()
|
||||||
|
{
|
||||||
|
return Input.GetKeyDown(m_key);
|
||||||
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
@ -173,7 +293,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
{
|
{
|
||||||
switch (controllerIndex)
|
switch (controllerIndex)
|
||||||
{
|
{
|
||||||
case 1:
|
case 0:
|
||||||
switch (nesConBtnType)
|
switch (nesConBtnType)
|
||||||
{
|
{
|
||||||
case EnumButtonType.LEFT:
|
case EnumButtonType.LEFT:
|
||||||
@ -197,7 +317,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 1:
|
||||||
switch (nesConBtnType)
|
switch (nesConBtnType)
|
||||||
{
|
{
|
||||||
case EnumButtonType.LEFT:
|
case EnumButtonType.LEFT:
|
||||||
@ -225,17 +345,38 @@ namespace AxibugEmuOnline.Client
|
|||||||
|
|
||||||
return default(KeyListener);
|
return default(KeyListener);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void SetConnect(uint? con0ToSlot = null,
|
|
||||||
uint? con1ToSlot = null,
|
public static KeyListener GetPSVitaKey(int controllerIndex, EnumButtonType nesConBtnType)
|
||||||
uint? con2ToSlot = null,
|
{
|
||||||
uint? con3ToSlot = null)
|
switch (controllerIndex)
|
||||||
{
|
{
|
||||||
Controller0.ConnectSlot = con0ToSlot;
|
case 0:
|
||||||
Controller1.ConnectSlot = con1ToSlot;
|
switch (nesConBtnType)
|
||||||
Controller2.ConnectSlot = con2ToSlot;
|
{
|
||||||
Controller3.ConnectSlot = con3ToSlot;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -22,6 +22,12 @@ namespace AxibugEmuOnline.Client
|
|||||||
|
|
||||||
/// <summary> 是否暂停 </summary>
|
/// <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()
|
private void Start()
|
||||||
{
|
{
|
||||||
@ -38,9 +44,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private unsafe void Update()
|
private unsafe void Update()
|
||||||
{
|
{
|
||||||
if (IsPause) return;
|
if (NesCore != null && !IsPause)
|
||||||
|
|
||||||
if (NesCore != null)
|
|
||||||
{
|
{
|
||||||
PushEmulatorFrame();
|
PushEmulatorFrame();
|
||||||
if (InGameUI.Instance.IsNetPlay)
|
if (InGameUI.Instance.IsNetPlay)
|
||||||
@ -49,10 +53,12 @@ namespace AxibugEmuOnline.Client
|
|||||||
var screenBuffer = NesCore.ppu.GetScreenPtr();
|
var screenBuffer = NesCore.ppu.GetScreenPtr();
|
||||||
VideoProvider.SetDrawData(screenBuffer);
|
VideoProvider.SetDrawData(screenBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VideoProvider.ApplyFilterEffect();
|
||||||
}
|
}
|
||||||
|
|
||||||
public EnumPlatform Platform => EnumPlatform.NES;
|
public EnumPlatform Platform => EnumPlatform.NES;
|
||||||
|
private CoreSupporter m_coreSupporter;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 指定ROM开始游戏
|
/// 指定ROM开始游戏
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -60,7 +66,8 @@ namespace AxibugEmuOnline.Client
|
|||||||
{
|
{
|
||||||
StopGame();
|
StopGame();
|
||||||
|
|
||||||
Supporter.Setup(new CoreSupporter());
|
m_coreSupporter = new CoreSupporter(ControllerMapper);
|
||||||
|
Supporter.Setup(m_coreSupporter);
|
||||||
Debuger.Setup(new CoreDebuger());
|
Debuger.Setup(new CoreDebuger());
|
||||||
|
|
||||||
App.nesRomLib.AddRomFile(rom);
|
App.nesRomLib.AddRomFile(rom);
|
||||||
@ -158,8 +165,8 @@ namespace AxibugEmuOnline.Client
|
|||||||
//推进帧
|
//推进帧
|
||||||
private bool PushEmulatorFrame()
|
private bool PushEmulatorFrame()
|
||||||
{
|
{
|
||||||
Supporter.SampleInput(NesCore.FrameCount);
|
m_coreSupporter.SampleInput(NesCore.FrameCount);
|
||||||
var controlState = Supporter.GetControllerState();
|
var controlState = m_coreSupporter.GetControllerState();
|
||||||
|
|
||||||
//如果未收到Input数据,核心帧不推进
|
//如果未收到Input数据,核心帧不推进
|
||||||
if (!controlState.valid) return false;
|
if (!controlState.valid) return false;
|
||||||
@ -205,7 +212,10 @@ namespace AxibugEmuOnline.Client
|
|||||||
EditorUtility.SetDirty(db);
|
EditorUtility.SetDirty(db);
|
||||||
AssetDatabase.SaveAssets();
|
AssetDatabase.SaveAssets();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
public IControllerSetuper GetControllerSetuper()
|
||||||
|
{
|
||||||
|
return ControllerMapper;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,19 +2,24 @@
|
|||||||
%TAG !u! tag:unity3d.com,2011:
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
--- !u!21 &2100000
|
--- !u!21 &2100000
|
||||||
Material:
|
Material:
|
||||||
serializedVersion: 6
|
serializedVersion: 8
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
m_PrefabInternal: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: NesEmulator_Screen
|
m_Name: NesEmulator_Screen
|
||||||
m_Shader: {fileID: 4800000, guid: b351396ff606116478d7f4412abe4e2e, type: 3}
|
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_LightmapFlags: 4
|
||||||
m_EnableInstancingVariants: 0
|
m_EnableInstancingVariants: 0
|
||||||
m_DoubleSidedGI: 0
|
m_DoubleSidedGI: 0
|
||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap: {}
|
stringTagMap: {}
|
||||||
disabledShaderPasses: []
|
disabledShaderPasses: []
|
||||||
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TexEnvs:
|
m_TexEnvs:
|
||||||
@ -58,6 +63,7 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Ints: []
|
||||||
m_Floats:
|
m_Floats:
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
- _ColorMask: 15
|
- _ColorMask: 15
|
||||||
@ -85,3 +91,5 @@ Material:
|
|||||||
m_Colors:
|
m_Colors:
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
|
m_AllowLocking: 1
|
||||||
|
@ -102,10 +102,10 @@
|
|||||||
{
|
{
|
||||||
float2 mapUV = IN.texcoord;
|
float2 mapUV = IN.texcoord;
|
||||||
|
|
||||||
float start= 8.0/272.0;
|
float start= 0.02941535;
|
||||||
float end = (272.0-8.0)/272.0;
|
float end = 0.970582;
|
||||||
|
|
||||||
mapUV.x = lerp(start,end, mapUV.x);
|
mapUV.x = lerp(start,end, mapUV.x);
|
||||||
|
//uv映射改为ugui BaseMeshEffect 机制实现uv映射,比shader代码更为平滑
|
||||||
|
|
||||||
half4 color = tex2D(_MainTex,mapUV);
|
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][]
|
public static float[][] PalConvTbl = new float[8][]
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@ -14,26 +15,27 @@ namespace AxibugEmuOnline.Client
|
|||||||
public RawImage Image;
|
public RawImage Image;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region GPU_TURBO
|
#region GPU_TURBO
|
||||||
//图像数据字节数
|
//图像数据字节数
|
||||||
private int TexBufferSize_gpu;
|
private int TexBufferSize_gpu;
|
||||||
//图像数据指针
|
//图像数据指针
|
||||||
private IntPtr wrapTexBufferPointer_gpu;
|
private IntPtr wrapTexBufferPointer_gpu;
|
||||||
//Unity 2D纹理对象,用于UI上绘制最终输出画面
|
//Unity 2D纹理对象,用于UI上绘制最终输出画面
|
||||||
private Texture2D wrapTex_gpu;
|
private Texture2D wrapTex_gpu;
|
||||||
//nes调色板数据,已转换为unity纹理对象
|
//nes调色板数据,已转换为unity纹理对象
|
||||||
private Texture2D pPal_gpu;
|
private Texture2D pPal_gpu;
|
||||||
|
[SerializeField]
|
||||||
private Material GPUTurboMat_gpu;
|
private Material GPUTurboMat_gpu;
|
||||||
|
private RenderTexture rt_gpu;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region CPU
|
#region CPU
|
||||||
//图像数据字节数
|
//图像数据字节数
|
||||||
private int TexBufferSize_cpu;
|
private int TexBufferSize_cpu;
|
||||||
//图像数据指针
|
//图像数据指针
|
||||||
private GCHandle wrapTexBufferGH;
|
private GCHandle wrapTexBufferGH;
|
||||||
private IntPtr wrapTexBufferPointer_cpu;
|
private IntPtr wrapTexBufferPointer_cpu;
|
||||||
//Unity 2D纹理对象,用于UI上绘制最终输出画面
|
//Unity 2D纹理对象,用于UI上绘制最终输出画面
|
||||||
private Texture2D wrapTex_cpu;
|
private Texture2D wrapTex_cpu;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -42,25 +44,31 @@ namespace AxibugEmuOnline.Client
|
|||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
DrawCanvas.worldCamera = Camera.main;
|
DrawCanvas.worldCamera = Camera.main;
|
||||||
GPUTurboMat_gpu = Image.material;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
{
|
{
|
||||||
if (wrapTexBufferGH.IsAllocated)
|
if (wrapTexBufferGH.IsAllocated)
|
||||||
wrapTexBufferGH.Free();
|
wrapTexBufferGH.Free();
|
||||||
|
|
||||||
|
if (rt_gpu != null)
|
||||||
|
{
|
||||||
|
RenderTexture.ReleaseTemporary(rt_gpu);
|
||||||
|
rt_gpu = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public unsafe void SetDrawData(uint* screenData)
|
public unsafe void SetDrawData(uint* screenData)
|
||||||
{
|
{
|
||||||
PrepareUI(screenData);
|
PrepareUI(screenData);
|
||||||
if (GPUTurbo) PrepareForGPU(screenData);//判断使用GPU还是CPU
|
if (GPUTurbo) PrepareForGPU(screenData);//判断使用GPU还是CPU
|
||||||
else PrepareForCPU(screenData);//使用CPU
|
else PrepareForCPU(screenData);//使用CPU
|
||||||
|
|
||||||
if (GPUTurbo)
|
if (GPUTurbo)
|
||||||
{
|
{
|
||||||
wrapTex_gpu.LoadRawTextureData(wrapTexBufferPointer_gpu, TexBufferSize_gpu);
|
wrapTex_gpu.LoadRawTextureData(wrapTexBufferPointer_gpu, TexBufferSize_gpu);
|
||||||
wrapTex_gpu.Apply();
|
wrapTex_gpu.Apply();
|
||||||
|
Graphics.Blit(wrapTex_gpu, rt_gpu, GPUTurboMat_gpu);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -69,27 +77,32 @@ namespace AxibugEmuOnline.Client
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ApplyFilterEffect()
|
||||||
|
{
|
||||||
|
Image.texture = App.filter.ExecuteFilterRender(rt_gpu);
|
||||||
|
}
|
||||||
|
|
||||||
private unsafe void PrepareUI(uint* screenData)
|
private unsafe void PrepareUI(uint* screenData)
|
||||||
{
|
{
|
||||||
if (GPUTurbo)
|
if (GPUTurbo)
|
||||||
{
|
{
|
||||||
if (Image.material != GPUTurboMat_gpu) Image.material = GPUTurboMat_gpu;
|
|
||||||
|
|
||||||
if (wrapTex_gpu == null)
|
if (wrapTex_gpu == null)
|
||||||
{
|
{
|
||||||
wrapTex_gpu = new Texture2D(PPU.SCREEN_WIDTH, PPU.SCREEN_HEIGHT, TextureFormat.RGBA32, false);
|
wrapTex_gpu = new Texture2D(PPU.SCREEN_WIDTH, PPU.SCREEN_HEIGHT, TextureFormat.RGBA32, false);
|
||||||
wrapTex_gpu.filterMode = FilterMode.Point;
|
wrapTex_gpu.filterMode = FilterMode.Point;
|
||||||
wrapTexBufferPointer_gpu = (IntPtr)screenData;
|
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;
|
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
|
else
|
||||||
{
|
{
|
||||||
if (Image.material == GPUTurboMat_gpu) Image.material = null;
|
|
||||||
|
|
||||||
if (wrapTex_cpu == null)
|
if (wrapTex_cpu == null)
|
||||||
{
|
{
|
||||||
wrapTex_cpu = new Texture2D(PPU.SCREEN_WIDTH - 16, PPU.SCREEN_HEIGHT, TextureFormat.RGBA32, false);
|
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;
|
if (Image.texture != wrapTex_cpu) Image.texture = wrapTex_cpu;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private unsafe void PrepareForGPU(uint* screenData)
|
private unsafe void PrepareForGPU(uint* screenData)
|
||||||
@ -141,7 +155,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
|
|
||||||
for (int line = 0; line < PPU.SCREEN_HEIGHT; line++)
|
for (int line = 0; line < PPU.SCREEN_HEIGHT; line++)
|
||||||
{
|
{
|
||||||
//PS:如果是CPU计算,宽度减少16的不必要部分,才能对齐
|
//PS:如果是CPU计算,宽度减少16的不必要部分,才能对齐
|
||||||
width = PPU.SCREEN_WIDTH - 16;
|
width = PPU.SCREEN_WIDTH - 16;
|
||||||
|
|
||||||
while (width > 0)
|
while (width > 0)
|
||||||
@ -149,17 +163,17 @@ namespace AxibugEmuOnline.Client
|
|||||||
var edx = screenData[pScn + 8];
|
var edx = screenData[pScn + 8];
|
||||||
|
|
||||||
uint index = edx & 0xFF;
|
uint index = edx & 0xFF;
|
||||||
//按下标颜色查找表中真实颜色
|
//按下标颜色查找表中真实颜色
|
||||||
var colorData = palRaw[index];
|
var colorData = palRaw[index];
|
||||||
//dst中颜色排列为abgr,而colorData排列为argb
|
//dst中颜色排列为abgr,而colorData排列为argb
|
||||||
uint r = (colorData & 0x00FF0000) >> 16; // 提取Red通道
|
uint r = (colorData & 0x00FF0000) >> 16; // 提取Red通道
|
||||||
uint g = (colorData & 0x0000FF00) >> 8; // 提取Green通道
|
uint g = (colorData & 0x0000FF00) >> 8; // 提取Green通道
|
||||||
uint b = (colorData & 0x000000FF); // 提取Blue通道
|
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);
|
uint abgr = 0xFF000000 | (b << 16) | (g << 8) | (r << 0);
|
||||||
|
|
||||||
//放进颜色矩阵
|
//放进颜色矩阵
|
||||||
Dst[pDst] = abgr;
|
Dst[pDst] = abgr;
|
||||||
|
|
||||||
pScn += 1;
|
pScn += 1;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using AxibugEmuOnline.Client.ClientCore;
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
|
using AxibugEmuOnline.Client.Event;
|
||||||
using AxibugProtobuf;
|
using AxibugProtobuf;
|
||||||
using HaoYueNet.ClientNetworkNet.Standard2;
|
using HaoYueNet.ClientNetwork;
|
||||||
using System;
|
using System;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -99,6 +100,7 @@ namespace AxibugEmuOnline.Client.Network
|
|||||||
public void OnConnectClose()
|
public void OnConnectClose()
|
||||||
{
|
{
|
||||||
NetworkDeBugLog("OnConnectClose");
|
NetworkDeBugLog("OnConnectClose");
|
||||||
|
Eventer.Instance.PostEvent(EEvent.OnLossLoginState);
|
||||||
|
|
||||||
App.user.LoginOutData();
|
App.user.LoginOutData();
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 13795c31ef56b3648a06122c6b1864f3
|
guid: 4a4a14412f1bcc844bbd2c9bccf50db2
|
||||||
folderAsset: yes
|
folderAsset: yes
|
||||||
DefaultImporter:
|
DefaultImporter:
|
||||||
externalObjects: {}
|
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
|
fileFormatVersion: 2
|
||||||
guid: 5354e2e13dbff91438a04b9de2351645
|
guid: 7bc72e9d59cc9134d8855521049ad788
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
defaultReferences: []
|
defaultReferences: []
|
||||||
executionOrder: 0
|
executionOrder: 0
|
||||||
icon: {instanceID: 0}
|
icon: {instanceID: 0}
|
||||||
userData:
|
userData:
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
@ -66,7 +66,7 @@ namespace AxibugEmuOnline.Client
|
|||||||
SetBaseInfo(m_romfile.Alias, m_romfile.Descript, m_romfile.GameTypeDes);
|
SetBaseInfo(m_romfile.Alias, m_romfile.Descript, m_romfile.GameTypeDes);
|
||||||
App.CacheMgr.GetSpriteCache(m_romfile.ImageURL, (img, url) =>
|
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;
|
m_romImage.sprite = img;
|
||||||
});
|
});
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using AxibugEmuOnline.Client.ClientCore;
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
using AxibugEmuOnline.Client.Event;
|
using AxibugEmuOnline.Client.Event;
|
||||||
using AxibugProtobuf;
|
using AxibugProtobuf;
|
||||||
|
using VirtualNes.Core;
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Client
|
namespace AxibugEmuOnline.Client
|
||||||
{
|
{
|
||||||
@ -111,7 +112,19 @@ namespace AxibugEmuOnline.Client
|
|||||||
|
|
||||||
private void OnRoomCreated()
|
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()
|
private void OnLoggedIn()
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@ -20,11 +21,13 @@ namespace AxibugEmuOnline.Client
|
|||||||
m_InputUI.gameObject.SetActive(false);
|
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));
|
s_ins.m_InputUI.Show(new ValueTuple<Action<string>, string, string>(callback, placeHolder, defaultText));
|
||||||
|
#endif
|
||||||
return s_ins.m_InputUI;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void PopSideBar<T>(List<T> menus, int defaultIndex = 0, Action onClose = null) where T : OptionMenu
|
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.Manager;
|
||||||
using AxibugEmuOnline.Client.UI;
|
using AxibugEmuOnline.Client.UI;
|
||||||
using AxibugProtobuf;
|
using AxibugProtobuf;
|
||||||
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
using Debug = System.Diagnostics.Debug;
|
using Debug = System.Diagnostics.Debug;
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Client
|
namespace AxibugEmuOnline.Client
|
||||||
{
|
{
|
||||||
public class RoomItem : MenuItem, IVirtualItem
|
public class RoomItem : MenuItem, IVirtualItem
|
||||||
{
|
{
|
||||||
[SerializeField] Image m_roomPreview;
|
[SerializeField] Image m_roomPreview;
|
||||||
[SerializeField] Slider m_downloadProgress;
|
[SerializeField] Slider m_downloadProgress;
|
||||||
[SerializeField] GameObject m_downloadingFlag;
|
[SerializeField] GameObject m_downloadingFlag;
|
||||||
[SerializeField] GameObject m_romReadyFlag;
|
[SerializeField] GameObject m_romReadyFlag;
|
||||||
|
|
||||||
private RomFile m_romFile;
|
private RomFile m_romFile;
|
||||||
|
|
||||||
public int Index { get; set; }
|
public int Index { get; set; }
|
||||||
public int RoomID { get; private set; }
|
public int RoomID { get; private set; }
|
||||||
|
|
||||||
protected override void Awake()
|
protected override void Awake()
|
||||||
{
|
{
|
||||||
base.Awake();
|
base.Awake();
|
||||||
|
|
||||||
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomListSingleUpdate, OnRoomSignelUpdate);
|
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomListSingleUpdate, OnRoomSignelUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnRoomSignelUpdate(int roomID)
|
private void OnRoomSignelUpdate(int roomID)
|
||||||
{
|
{
|
||||||
if (this.RoomID != roomID) return;
|
if (this.RoomID != roomID) return;
|
||||||
|
|
||||||
Protobuf_Room_MiniInfo roomInfo;
|
Protobuf_Room_MiniInfo roomInfo;
|
||||||
if (App.roomMgr.GetRoomListMiniInfo(roomID, out roomInfo))
|
if (App.roomMgr.GetRoomListMiniInfo(roomID, out roomInfo))
|
||||||
UpdateUI(roomInfo);
|
UpdateUI(roomInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetData(object data)
|
public void SetData(object data)
|
||||||
{
|
{
|
||||||
Debug.Assert(data is Protobuf_Room_MiniInfo);
|
Debug.Assert(data is Protobuf_Room_MiniInfo);
|
||||||
|
|
||||||
var roomInfo = (Protobuf_Room_MiniInfo)data;
|
var roomInfo = (Protobuf_Room_MiniInfo)data;
|
||||||
RoomID = roomInfo.RoomID;
|
RoomID = roomInfo.RoomID;
|
||||||
|
|
||||||
UpdateUI(roomInfo);
|
UpdateUI(roomInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool OnEnterItem()
|
public override bool OnEnterItem()
|
||||||
{
|
{
|
||||||
if (m_romFile == null) return false;
|
if (m_romFile == null) return false;
|
||||||
|
|
||||||
if (!m_romFile.RomReady)
|
if (!m_romFile.RomReady)
|
||||||
{
|
{
|
||||||
m_romFile.BeginDownload();
|
m_romFile.BeginDownload();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Protobuf_Room_MiniInfo MiniInfo;
|
Protobuf_Room_MiniInfo MiniInfo;
|
||||||
if (!App.roomMgr.GetRoomListMiniInfo(RoomID, out MiniInfo))
|
if (!App.roomMgr.GetRoomListMiniInfo(RoomID, out MiniInfo))
|
||||||
{
|
{
|
||||||
OverlayManager.PopTip("房间不存在");
|
OverlayManager.PopTip("房间不存在");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
int[] freeSlots;
|
List<int> freeSlots = new List<int>();
|
||||||
if (!MiniInfo.GetFreeSlot(out freeSlots))
|
if (!MiniInfo.GetFreeSlot(ref freeSlots))
|
||||||
{
|
{
|
||||||
OverlayManager.PopTip("无空闲位置");
|
OverlayManager.PopTip("无空闲位置");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
App.roomMgr.SendJoinRoom(RoomID);
|
App.roomMgr.SendJoinRoom(RoomID);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateUI(Protobuf_Room_MiniInfo roomInfo)
|
private void UpdateUI(Protobuf_Room_MiniInfo roomInfo)
|
||||||
{
|
{
|
||||||
var hostNick = roomInfo.GetHostNickName();
|
var hostNick = roomInfo.GetHostNickName();
|
||||||
int cur; int max;
|
int cur; int max;
|
||||||
|
|
||||||
roomInfo.GetRoomPlayers(out cur, out max);
|
roomInfo.GetRoomPlayers(out cur, out max);
|
||||||
SetBaseInfo("--", $"<b>{hostNick}</b>的房间", $"{cur}/{max}");
|
SetBaseInfo("--", $"<b>{hostNick}</b>的房间", $"{cur}/{max}");
|
||||||
SetIcon(null);
|
SetIcon(null);
|
||||||
|
|
||||||
roomInfo.FetchRomFileInRoomInfo(EnumPlatform.NES, (room, romFile) =>
|
roomInfo.FetchRomFileInRoomInfo(EnumPlatform.NES, (room, romFile) =>
|
||||||
{
|
{
|
||||||
if (room.RoomID != RoomID) return;
|
if (room.RoomID != RoomID) return;
|
||||||
|
|
||||||
m_romFile = romFile;
|
m_romFile = romFile;
|
||||||
Txt.text = romFile.Alias;
|
Txt.text = romFile.Alias;
|
||||||
|
|
||||||
UpdateRomInfoView();
|
UpdateRomInfoView();
|
||||||
App.CacheMgr.GetSpriteCache(romFile.ImageURL, OnGetRomImage);
|
App.CacheMgr.GetSpriteCache(romFile.ImageURL, OnGetRomImage);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Update()
|
protected override void Update()
|
||||||
{
|
{
|
||||||
UpdateRomInfoView();
|
UpdateRomInfoView();
|
||||||
base.Update();
|
base.Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateRomInfoView()
|
private void UpdateRomInfoView()
|
||||||
{
|
{
|
||||||
float? downloadingProgress = null;
|
float? downloadingProgress = null;
|
||||||
bool romReady = false;
|
bool romReady = false;
|
||||||
|
|
||||||
if (m_romFile != null)
|
if (m_romFile != null)
|
||||||
{
|
{
|
||||||
if (m_romFile.IsDownloading)
|
if (m_romFile.IsDownloading)
|
||||||
downloadingProgress = m_romFile.Progress;
|
downloadingProgress = m_romFile.Progress;
|
||||||
if (m_romFile.RomReady)
|
if (m_romFile.RomReady)
|
||||||
romReady = true;
|
romReady = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_downloadingFlag.SetActiveEx(downloadingProgress.HasValue);
|
m_downloadingFlag.SetActiveEx(downloadingProgress.HasValue);
|
||||||
if (downloadingProgress.HasValue)
|
if (downloadingProgress.HasValue)
|
||||||
m_downloadProgress.value = downloadingProgress.Value;
|
m_downloadProgress.value = downloadingProgress.Value;
|
||||||
|
|
||||||
m_romReadyFlag.SetActiveEx(romReady);
|
m_romReadyFlag.SetActiveEx(romReady);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnGetRomImage(Sprite sprite, string url)
|
private void OnGetRomImage(Sprite sprite, string url)
|
||||||
{
|
{
|
||||||
if (m_romFile == null) return;
|
if (m_romFile == null) return;
|
||||||
if (m_romFile.ImageURL != url) return;
|
if (m_romFile.ImageURL != url) return;
|
||||||
|
|
||||||
SetIcon(sprite);
|
SetIcon(sprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetDependencyProperty(object data)
|
public void SetDependencyProperty(object data)
|
||||||
{
|
{
|
||||||
SetSelectState((data is ThirdMenuRoot && ((ThirdMenuRoot)data).SelectIndex == Index));
|
SetSelectState((data is ThirdMenuRoot && ((ThirdMenuRoot)data).SelectIndex == Index));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Release()
|
public void Release()
|
||||||
{
|
{
|
||||||
Reset();
|
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 AxibugEmuOnline.Client.ClientCore;
|
||||||
using System;
|
using System;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@ -14,6 +14,7 @@ public class XMBInfoBar : MonoBehaviour
|
|||||||
public Text DelayValue;
|
public Text DelayValue;
|
||||||
public Text OnlinePlayerCount;
|
public Text OnlinePlayerCount;
|
||||||
public Text FPS;
|
public Text FPS;
|
||||||
|
public GameObject ControlSlotInfoNode;
|
||||||
|
|
||||||
void OnEnable()
|
void OnEnable()
|
||||||
{
|
{
|
||||||
@ -21,6 +22,11 @@ public class XMBInfoBar : MonoBehaviour
|
|||||||
RefreshAll();
|
RefreshAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Update()
|
||||||
|
{
|
||||||
|
ControlSlotInfoNode.SetActiveEx(!App.emu.Core.IsNull());
|
||||||
|
}
|
||||||
|
|
||||||
void OnDisable()
|
void OnDisable()
|
||||||
{
|
{
|
||||||
TickLoop.LoopAction_1s -= RefreshAll;
|
TickLoop.LoopAction_1s -= RefreshAll;
|
||||||
@ -34,10 +40,10 @@ public class XMBInfoBar : MonoBehaviour
|
|||||||
RefreshFps();
|
RefreshFps();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// (uint lastFrame, float lastTime)
|
/// (uint lastFrame, float lastTime)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
ValueTuple<uint,float> m_lastFrameInfo;
|
ValueTuple<uint, float> m_lastFrameInfo;
|
||||||
private void RefreshFps()
|
private void RefreshFps()
|
||||||
{
|
{
|
||||||
if (App.emu.Core.IsNull())
|
if (App.emu.Core.IsNull())
|
||||||
@ -45,18 +51,18 @@ public class XMBInfoBar : MonoBehaviour
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
FPS.gameObject.SetActiveEx(true);
|
FPS.gameObject.SetActiveEx(true);
|
||||||
//var gap = App.emu.Core.Frame - m_lastFrameInfo.lastFrame;
|
//var gap = App.emu.Core.Frame - m_lastFrameInfo.lastFrame;
|
||||||
//var time = Time.realtimeSinceStartup - m_lastFrameInfo.lastTime;
|
//var time = Time.realtimeSinceStartup - m_lastFrameInfo.lastTime;
|
||||||
var gap = App.emu.Core.Frame - m_lastFrameInfo.Item1;
|
var gap = App.emu.Core.Frame - m_lastFrameInfo.Item1;
|
||||||
var time = Time.realtimeSinceStartup - m_lastFrameInfo.Item2;
|
var time = Time.realtimeSinceStartup - m_lastFrameInfo.Item2;
|
||||||
var fps = gap / time;
|
var fps = gap / time;
|
||||||
FPS.text = $"FPS:{fps:.#}";
|
FPS.text = $"FPS:{fps:.#}";
|
||||||
|
|
||||||
//m_lastFrameInfo.lastFrame = App.emu.Core.Frame;
|
//m_lastFrameInfo.lastFrame = App.emu.Core.Frame;
|
||||||
//m_lastFrameInfo.lastTime = Time.realtimeSinceStartup;
|
//m_lastFrameInfo.lastTime = Time.realtimeSinceStartup;
|
||||||
m_lastFrameInfo.Item1 = App.emu.Core.Frame;
|
m_lastFrameInfo.Item1 = App.emu.Core.Frame;
|
||||||
m_lastFrameInfo.Item2 = Time.realtimeSinceStartup;
|
m_lastFrameInfo.Item2 = Time.realtimeSinceStartup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RefreshDelay()
|
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)
|
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));
|
uint dwLength = (uint)(dwSize / (nBits / 8));
|
||||||
int output;
|
int output;
|
||||||
QUEUEDATA q = new QUEUEDATA();
|
QUEUEDATA q = new QUEUEDATA();
|
||||||
@ -82,11 +82,11 @@ namespace VirtualNes.Core
|
|||||||
var pSoundBuf = m_SoundBuffer;
|
var pSoundBuf = m_SoundBuffer;
|
||||||
int nCcount = 0;
|
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++)
|
for (int i = 0; i < dwSize; i++)
|
||||||
lpBuffer.WriteByte(empty);
|
lpBuffer.WriteByte(empty);
|
||||||
return;
|
return;
|
||||||
@ -108,7 +108,7 @@ namespace VirtualNes.Core
|
|||||||
MemoryUtility.ZEROMEMORY(vol, vol.Length);
|
MemoryUtility.ZEROMEMORY(vol, vol.Length);
|
||||||
|
|
||||||
var bMute = m_bMute;
|
var bMute = m_bMute;
|
||||||
var nVolume = Supporter.Config.sound.nVolume;
|
var nVolume = Supporter.S.Config.sound.nVolume;
|
||||||
|
|
||||||
int nMasterVolume = bMute[0] ? nVolume[0] : 0;
|
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);
|
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 = ((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サイクル数がループしてしまった時の対策処理
|
// CPUサイクル数がループしてしまった時の対策処理
|
||||||
if (elapsed_time > nes.cpu.GetTotalCycles())
|
if (elapsed_time > nes.cpu.GetTotalCycles())
|
||||||
@ -253,7 +253,7 @@ namespace VirtualNes.Core
|
|||||||
// DC成分のカット(HPF TEST)
|
// DC成分のカット(HPF TEST)
|
||||||
{
|
{
|
||||||
// static double cutoff = (2.0*3.141592653579*40.0/44100.0);
|
// 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;
|
double @in, @out;
|
||||||
|
|
||||||
@in = output;
|
@in = output;
|
||||||
@ -436,7 +436,7 @@ namespace VirtualNes.Core
|
|||||||
public void SoundSetup()
|
public void SoundSetup()
|
||||||
{
|
{
|
||||||
float fClock = nes.nescfg.CpuClock;
|
float fClock = nes.nescfg.CpuClock;
|
||||||
int nRate = Supporter.Config.sound.nRate;
|
int nRate = Supporter.S.Config.sound.nRate;
|
||||||
|
|
||||||
@internal.Setup(fClock, nRate);
|
@internal.Setup(fClock, nRate);
|
||||||
vrc6.Setup(fClock, nRate);
|
vrc6.Setup(fClock, nRate);
|
||||||
@ -460,7 +460,7 @@ namespace VirtualNes.Core
|
|||||||
elapsed_time = 0;
|
elapsed_time = 0;
|
||||||
|
|
||||||
float fClock = nes.nescfg.CpuClock;
|
float fClock = nes.nescfg.CpuClock;
|
||||||
int nRate = Supporter.Config.sound.nRate;
|
int nRate = Supporter.S.Config.sound.nRate;
|
||||||
|
|
||||||
@internal.Reset(fClock, nRate);
|
@internal.Reset(fClock, nRate);
|
||||||
vrc6.Reset(fClock, nRate);
|
vrc6.Reset(fClock, nRate);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace VirtualNes.Core
|
namespace VirtualNes.Core
|
||||||
@ -184,15 +184,15 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
Setup(fClock, nRate);
|
Setup(fClock, nRate);
|
||||||
|
|
||||||
// $4011反場ヽ趙仄卅中
|
// $4011は初期化しない
|
||||||
ushort addr;
|
ushort addr;
|
||||||
for (addr = 0x4000; addr <= 0x4010; addr++)
|
for (addr = 0x4000; addr <= 0x4010; addr++)
|
||||||
{
|
{
|
||||||
Write(addr, 0x00);
|
Write(addr, 0x00);
|
||||||
SyncWrite(addr, 0x00);
|
SyncWrite(addr, 0x00);
|
||||||
}
|
}
|
||||||
// Write( 0x4001, 0x08 ); // Reset媆反inc乒奈玉卞卅月?
|
// Write( 0x4001, 0x08 ); // Reset時はincモードになる?
|
||||||
// Write( 0x4005, 0x08 ); // Reset媆反inc乒奈玉卞卅月?
|
// Write( 0x4005, 0x08 ); // Reset時はincモードになる?
|
||||||
Write(0x4012, 0x00);
|
Write(0x4012, 0x00);
|
||||||
Write(0x4013, 0x00);
|
Write(0x4013, 0x00);
|
||||||
Write(0x4015, 0x00);
|
Write(0x4015, 0x00);
|
||||||
@ -200,7 +200,7 @@ namespace VirtualNes.Core
|
|||||||
SyncWrite(0x4013, 0x00);
|
SyncWrite(0x4013, 0x00);
|
||||||
SyncWrite(0x4015, 0x00);
|
SyncWrite(0x4015, 0x00);
|
||||||
|
|
||||||
// $4017反𤩸五煋心匹場ヽ趙仄卅中(場ヽ乒奈玉互0匹丐月及毛ヽ渾仄凶末白玄互丐月鮋)
|
// $4017は書き込みで初期化しない(初期モードが0であるのを期待したソフトがある為)
|
||||||
FrameIRQ = 0xC0;
|
FrameIRQ = 0xC0;
|
||||||
FrameCycle = 0;
|
FrameCycle = 0;
|
||||||
FrameIRQoccur = 0;
|
FrameIRQoccur = 0;
|
||||||
@ -301,7 +301,7 @@ namespace VirtualNes.Core
|
|||||||
case 0x4017:
|
case 0x4017:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// VirtuaNES嘐衄禾奈玄
|
// VirtuaNES固有ポート
|
||||||
case 0x4018:
|
case 0x4018:
|
||||||
UpdateRectangle(ch0, data);
|
UpdateRectangle(ch0, data);
|
||||||
UpdateRectangle(ch1, 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;
|
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)
|
if (Math.Abs(ch4.dpcm_output_real - ch4.dpcm_output_fake) <= 8)
|
||||||
{
|
{
|
||||||
@ -712,7 +712,7 @@ namespace VirtualNes.Core
|
|||||||
private int RenderTriangle()
|
private int RenderTriangle()
|
||||||
{
|
{
|
||||||
int vol;
|
int vol;
|
||||||
if (Supporter.Config.sound.bDisableVolumeEffect)
|
if (Supporter.S.Config.sound.bDisableVolumeEffect)
|
||||||
{
|
{
|
||||||
vol = 256;
|
vol = 256;
|
||||||
}
|
}
|
||||||
@ -731,7 +731,7 @@ namespace VirtualNes.Core
|
|||||||
return ch2.nowvolume * vol / 256;
|
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;
|
ch2.phaseacc -= cycle_rate;
|
||||||
if (ch2.phaseacc >= 0)
|
if (ch2.phaseacc >= 0)
|
||||||
@ -756,7 +756,7 @@ namespace VirtualNes.Core
|
|||||||
return ch2.nowvolume * vol / 256;
|
return ch2.nowvolume * vol / 256;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 樓笭ⅸ歙
|
// 加重平均
|
||||||
int num_times, total;
|
int num_times, total;
|
||||||
num_times = total = 0;
|
num_times = total = 0;
|
||||||
while (ch2.phaseacc < 0)
|
while (ch2.phaseacc < 0)
|
||||||
@ -799,7 +799,7 @@ namespace VirtualNes.Core
|
|||||||
return ch2.nowvolume * vol / 256;
|
return ch2.nowvolume * vol / 256;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 樓笭ⅸ歙
|
// 加重平均
|
||||||
int num_times, total;
|
int num_times, total;
|
||||||
num_times = total = 0;
|
num_times = total = 0;
|
||||||
while (ch2.phaseacc < 0)
|
while (ch2.phaseacc < 0)
|
||||||
@ -832,9 +832,9 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
int volume = ch.nowvolume;
|
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 total;
|
||||||
double sample_weight = ch.phaseacc;
|
double sample_weight = ch.phaseacc;
|
||||||
if (sample_weight > cycle_rate)
|
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 x = ChannelTone[(ch.complement == 0) ? 0 : 1, ch.reg[0] >> 6] - 1;
|
||||||
int pTone = 0;
|
int pTone = 0;
|
||||||
|
|
||||||
// 載陔剠仄
|
// 更新無し
|
||||||
ch.phaseacc -= cycle_rate * 2;
|
ch.phaseacc -= cycle_rate * 2;
|
||||||
if (ch.phaseacc >= 0)
|
if (ch.phaseacc >= 0)
|
||||||
{
|
{
|
||||||
@ -872,7 +872,7 @@ namespace VirtualNes.Core
|
|||||||
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1旦氾永皿分仃載陔
|
// 1ステップだけ更新
|
||||||
int freq = INT2FIX(ch.freq + 1);
|
int freq = INT2FIX(ch.freq + 1);
|
||||||
if (freq > cycle_rate * 2)
|
if (freq > cycle_rate * 2)
|
||||||
{
|
{
|
||||||
@ -882,7 +882,7 @@ namespace VirtualNes.Core
|
|||||||
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 樓笭ⅸ歙
|
// 加重平均
|
||||||
int num_times, total;
|
int num_times, total;
|
||||||
num_times = total = 0;
|
num_times = total = 0;
|
||||||
while (ch.phaseacc < 0)
|
while (ch.phaseacc < 0)
|
||||||
@ -1015,7 +1015,7 @@ namespace VirtualNes.Core
|
|||||||
SyncWrite4017(data);
|
SyncWrite4017(data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// VirtuaNES娚葲<EFBFBD><EFBFBD><EFBFBD>
|
// VirtuaNES屌桳億乕僩
|
||||||
case 0x4018:
|
case 0x4018:
|
||||||
SyncUpdateRectangle(ch0, data);
|
SyncUpdateRectangle(ch0, data);
|
||||||
SyncUpdateRectangle(ch1, data);
|
SyncUpdateRectangle(ch1, data);
|
||||||
|
@ -1110,7 +1110,7 @@ namespace VirtualNes.Core
|
|||||||
case 0xD2: /* JAM */
|
case 0xD2: /* JAM */
|
||||||
case 0xF2: /* JAM */
|
case 0xF2: /* JAM */
|
||||||
default:
|
default:
|
||||||
if (!Supporter.Config.emulator.bIllegalOp)
|
if (!Supporter.S.Config.emulator.bIllegalOp)
|
||||||
{
|
{
|
||||||
throw new Exception("IllegalOp");
|
throw new Exception("IllegalOp");
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ namespace VirtualNes.Core
|
|||||||
Debuger.Log($"SOUND CODE:{addr & 0x1F:X2}");
|
Debuger.Log($"SOUND CODE:{addr & 0x1F:X2}");
|
||||||
|
|
||||||
// OSDにするべきか…
|
// OSDにするべきか…
|
||||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||||
{
|
{
|
||||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||||
//DirectSound.EsfAllStop();
|
//DirectSound.EsfAllStop();
|
||||||
|
@ -43,7 +43,7 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OSDにするべきか…
|
// OSDにするべきか…
|
||||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||||
{
|
{
|
||||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||||
//DirectSound.EsfAllStop();
|
//DirectSound.EsfAllStop();
|
||||||
|
@ -57,7 +57,7 @@ namespace VirtualNes.Core
|
|||||||
9,10, 8,11,13,12,14,15 };
|
9,10, 8,11,13,12,14,15 };
|
||||||
|
|
||||||
// OSDにするべきか…
|
// OSDにするべきか…
|
||||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||||
{
|
{
|
||||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||||
Debuger.Log($"CODE {data:X2}");
|
Debuger.Log($"CODE {data:X2}");
|
||||||
|
@ -326,7 +326,7 @@ namespace VirtualNes.Core
|
|||||||
if (pad.GetExController() != (int)EXCONTROLLER.EXCONTROLLER_TURBOFILE)
|
if (pad.GetExController() != (int)EXCONTROLLER.EXCONTROLLER_TURBOFILE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var fp = Supporter.OpenFile(Supporter.Config.path.szSavePath, "TurboFile.vtf");
|
var fp = Supporter.S.OpenFile(Supporter.S.Config.path.szSavePath, "TurboFile.vtf");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (fp == null)
|
if (fp == null)
|
||||||
@ -367,10 +367,10 @@ namespace VirtualNes.Core
|
|||||||
if (!rom.IsSAVERAM())
|
if (!rom.IsSAVERAM())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var saveFileDir = Supporter.Config.path.szSavePath;
|
var saveFileDir = Supporter.S.Config.path.szSavePath;
|
||||||
var saveFileName = $"{rom.GetRomName()}.sav";
|
var saveFileName = $"{rom.GetRomName()}.sav";
|
||||||
|
|
||||||
var fp = Supporter.OpenFile(saveFileDir, saveFileName);
|
var fp = Supporter.S.OpenFile(saveFileDir, saveFileName);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -502,13 +502,13 @@ namespace VirtualNes.Core
|
|||||||
EmulationCPU(nescfg.ScanlineCycles);
|
EmulationCPU(nescfg.ScanlineCycles);
|
||||||
if (bDraw)
|
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
|
else
|
||||||
{
|
{
|
||||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
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
|
else
|
||||||
{
|
{
|
||||||
@ -518,7 +518,7 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
else
|
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);
|
EmulationCPU(nescfg.HDrawCycles);
|
||||||
if (bDraw)
|
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
|
else
|
||||||
{
|
{
|
||||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
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
|
else
|
||||||
{
|
{
|
||||||
@ -551,7 +551,7 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
else
|
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)
|
// 僗僋儕乕儞昤夋(Scanline 1乣239)
|
||||||
if (bDraw)
|
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();
|
ppu.ScanlineNext();
|
||||||
EmulationCPU(FETCH_CYCLES * 10);
|
EmulationCPU(FETCH_CYCLES * 10);
|
||||||
mapper.HSync(scanline);
|
mapper.HSync(scanline);
|
||||||
@ -670,7 +670,7 @@ namespace VirtualNes.Core
|
|||||||
{
|
{
|
||||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
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();
|
ppu.ScanlineNext();
|
||||||
EmulationCPU(FETCH_CYCLES * 10);
|
EmulationCPU(FETCH_CYCLES * 10);
|
||||||
mapper.HSync(scanline);
|
mapper.HSync(scanline);
|
||||||
@ -694,7 +694,7 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
else
|
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();
|
||||||
EmulationCPU(FETCH_CYCLES * 10);
|
EmulationCPU(FETCH_CYCLES * 10);
|
||||||
mapper.HSync(scanline);
|
mapper.HSync(scanline);
|
||||||
@ -1095,7 +1095,7 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
Debuger.Log($"Saving SAVERAM...[{romName}]");
|
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)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -1168,7 +1168,7 @@ namespace VirtualNes.Core
|
|||||||
{
|
{
|
||||||
Debuger.Log("Saving TURBOFILE...");
|
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
|
else
|
||||||
{
|
{
|
||||||
if (Supporter.Config.emulator.bFourPlayer)
|
if (Supporter.S.Config.emulator.bFourPlayer)
|
||||||
{
|
{
|
||||||
// NES type
|
// NES type
|
||||||
pad1bit = padbitsync[0] | ((uint)padbitsync[2] << 8) | 0x00080000;
|
pad1bit = padbitsync[0] | ((uint)padbitsync[2] << 8) | 0x00080000;
|
||||||
|
@ -50,7 +50,7 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
fp = Supporter.OpenRom(fname);
|
fp = Supporter.S.OpenRom(fname);
|
||||||
if (fp == null)
|
if (fp == null)
|
||||||
{
|
{
|
||||||
throw new System.Exception($"Open Rom Failed:[{fname}]");
|
throw new System.Exception($"Open Rom Failed:[{fname}]");
|
||||||
@ -167,7 +167,7 @@ namespace VirtualNes.Core
|
|||||||
lpPRG[3] = 0x1A;
|
lpPRG[3] = 0x1A;
|
||||||
lpPRG[4] = (byte)diskno;
|
lpPRG[4] = (byte)diskno;
|
||||||
|
|
||||||
fp = Supporter.OpenFile_DISKSYS();
|
fp = Supporter.S.OpenFile_DISKSYS();
|
||||||
if (fp == null)
|
if (fp == null)
|
||||||
{
|
{
|
||||||
throw new Exception($"Not found DISKSYS.ROM for [{fname}]");
|
throw new Exception($"Not found DISKSYS.ROM for [{fname}]");
|
||||||
@ -217,7 +217,7 @@ namespace VirtualNes.Core
|
|||||||
throw new Exception($"Unsupport format:[{fname}]");
|
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);
|
name = Path.GetFileNameWithoutExtension(fullpath);
|
||||||
if (!bNSF)
|
if (!bNSF)
|
||||||
{
|
{
|
||||||
@ -244,7 +244,7 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
FileNameCheck(fname);
|
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}");
|
Debuger.Log($"ROMDB Set Mapper #{mapper:000} to #{mapperNo:000}");
|
||||||
mapper = mapperNo;
|
mapper = mapperNo;
|
||||||
|
@ -51,9 +51,25 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
public override int GetHashCode()
|
public override int GetHashCode()
|
||||||
{
|
{
|
||||||
|
//return CombineHashCode(raw0, raw1, raw2, raw3, valid);
|
||||||
return HashCode.Combine(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)
|
public static bool operator ==(ControllerState left, ControllerState right)
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
|
@ -1,77 +1,16 @@
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace VirtualNes.Core
|
namespace VirtualNes.Core
|
||||||
{
|
{
|
||||||
public static class Supporter
|
public static class Supporter
|
||||||
{
|
{
|
||||||
private static ISupporterImpl s_support;
|
private static ISupporterImpl s_support;
|
||||||
|
internal static ISupporterImpl S => s_support;
|
||||||
|
|
||||||
public static void Setup(ISupporterImpl supporter)
|
public static void Setup(ISupporterImpl supporter)
|
||||||
{
|
{
|
||||||
s_support = 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
|
public interface ISupporterImpl
|
||||||
@ -82,28 +21,11 @@ namespace VirtualNes.Core
|
|||||||
void SaveSRAMToFile(byte[] sramContent, string romName);
|
void SaveSRAMToFile(byte[] sramContent, string romName);
|
||||||
void SaveDISKToFile(byte[] diskFileContent, string romName);
|
void SaveDISKToFile(byte[] diskFileContent, string romName);
|
||||||
EmulatorConfig Config { get; }
|
EmulatorConfig Config { get; }
|
||||||
|
|
||||||
void PrepareDirectory(string directPath);
|
void PrepareDirectory(string directPath);
|
||||||
void SaveFile(byte[] fileData, string directPath, string fileName);
|
void SaveFile(byte[] fileData, string directPath, string fileName);
|
||||||
Stream OpenFile(string directPath, string fileName);
|
Stream OpenFile(string directPath, string fileName);
|
||||||
bool TryGetMapperNo(ROM rom, out int mapperNo);
|
bool TryGetMapperNo(ROM rom, out int mapperNo);
|
||||||
ControllerState GetControllerState();
|
ControllerState GetControllerState();
|
||||||
void SampleInput(uint frameCount);
|
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": {
|
"dependencies": {
|
||||||
"com.unity.2d.sprite": "1.0.0",
|
"com.unity.2d.sprite": "1.0.0",
|
||||||
"com.unity.ide.visualstudio": "2.0.22",
|
"com.unity.ide.visualstudio": "2.0.22",
|
||||||
"com.unity.postprocessing": "3.4.0",
|
|
||||||
"com.unity.ugui": "2.0.0",
|
"com.unity.ugui": "2.0.0",
|
||||||
"com.unity.modules.accessibility": "1.0.0",
|
"com.unity.modules.accessibility": "1.0.0",
|
||||||
"com.unity.modules.ai": "1.0.0",
|
"com.unity.modules.ai": "1.0.0",
|
||||||
|
@ -22,15 +22,6 @@
|
|||||||
},
|
},
|
||||||
"url": "https://packages.unity.cn"
|
"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": {
|
"com.unity.test-framework": {
|
||||||
"version": "1.4.5",
|
"version": "1.4.5",
|
||||||
"depth": 1,
|
"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
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AxibugEmuOnline.Server", "AxibugEmuOnline.Server\AxibugEmuOnline.Server.csproj", "{9F509DB4-CDB4-4CDB-9C10-805C5E644EEF}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AxibugEmuOnline.Server", "AxibugEmuOnline.Server\AxibugEmuOnline.Server.csproj", "{9F509DB4-CDB4-4CDB-9C10-805C5E644EEF}"
|
||||||
EndProject
|
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
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
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}.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.ActiveCfg = Release|Any CPU
|
||||||
{9F509DB4-CDB4-4CDB-9C10-805C5E644EEF}.Release|Any CPU.Build.0 = 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
|
{637EB35A-4D1A-41EA-9A7B-459E17E93981}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{8A4771D6-74B9-453C-9932-6B774280E325}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{637EB35A-4D1A-41EA-9A7B-459E17E93981}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{8A4771D6-74B9-453C-9932-6B774280E325}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{637EB35A-4D1A-41EA-9A7B-459E17E93981}.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}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -73,7 +73,7 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
public void Process(ISoundDataBuffer lpBuffer, uint dwSize)
|
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));
|
uint dwLength = (uint)(dwSize / (nBits / 8));
|
||||||
int output;
|
int output;
|
||||||
QUEUEDATA q = new QUEUEDATA();
|
QUEUEDATA q = new QUEUEDATA();
|
||||||
@ -82,11 +82,11 @@ namespace VirtualNes.Core
|
|||||||
var pSoundBuf = m_SoundBuffer;
|
var pSoundBuf = m_SoundBuffer;
|
||||||
int nCcount = 0;
|
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++)
|
for (int i = 0; i < dwSize; i++)
|
||||||
lpBuffer.WriteByte(empty);
|
lpBuffer.WriteByte(empty);
|
||||||
return;
|
return;
|
||||||
@ -108,7 +108,7 @@ namespace VirtualNes.Core
|
|||||||
MemoryUtility.ZEROMEMORY(vol, vol.Length);
|
MemoryUtility.ZEROMEMORY(vol, vol.Length);
|
||||||
|
|
||||||
var bMute = m_bMute;
|
var bMute = m_bMute;
|
||||||
var nVolume = Supporter.Config.sound.nVolume;
|
var nVolume = Supporter.S.Config.sound.nVolume;
|
||||||
|
|
||||||
int nMasterVolume = bMute[0] ? nVolume[0] : 0;
|
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);
|
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 = ((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サイクル数がループしてしまった時の対策処理
|
// CPUサイクル数がループしてしまった時の対策処理
|
||||||
if (elapsed_time > nes.cpu.GetTotalCycles())
|
if (elapsed_time > nes.cpu.GetTotalCycles())
|
||||||
@ -253,7 +253,7 @@ namespace VirtualNes.Core
|
|||||||
// DC成分のカット(HPF TEST)
|
// DC成分のカット(HPF TEST)
|
||||||
{
|
{
|
||||||
// static double cutoff = (2.0*3.141592653579*40.0/44100.0);
|
// 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;
|
double @in, @out;
|
||||||
|
|
||||||
@in = output;
|
@in = output;
|
||||||
@ -436,7 +436,7 @@ namespace VirtualNes.Core
|
|||||||
public void SoundSetup()
|
public void SoundSetup()
|
||||||
{
|
{
|
||||||
float fClock = nes.nescfg.CpuClock;
|
float fClock = nes.nescfg.CpuClock;
|
||||||
int nRate = Supporter.Config.sound.nRate;
|
int nRate = Supporter.S.Config.sound.nRate;
|
||||||
|
|
||||||
@internal.Setup(fClock, nRate);
|
@internal.Setup(fClock, nRate);
|
||||||
vrc6.Setup(fClock, nRate);
|
vrc6.Setup(fClock, nRate);
|
||||||
@ -460,7 +460,7 @@ namespace VirtualNes.Core
|
|||||||
elapsed_time = 0;
|
elapsed_time = 0;
|
||||||
|
|
||||||
float fClock = nes.nescfg.CpuClock;
|
float fClock = nes.nescfg.CpuClock;
|
||||||
int nRate = Supporter.Config.sound.nRate;
|
int nRate = Supporter.S.Config.sound.nRate;
|
||||||
|
|
||||||
@internal.Reset(fClock, nRate);
|
@internal.Reset(fClock, nRate);
|
||||||
vrc6.Reset(fClock, nRate);
|
vrc6.Reset(fClock, nRate);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace VirtualNes.Core
|
namespace VirtualNes.Core
|
||||||
@ -184,15 +184,15 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
Setup(fClock, nRate);
|
Setup(fClock, nRate);
|
||||||
|
|
||||||
// $4011反場ヽ趙仄卅中
|
// $4011は初期化しない
|
||||||
ushort addr;
|
ushort addr;
|
||||||
for (addr = 0x4000; addr <= 0x4010; addr++)
|
for (addr = 0x4000; addr <= 0x4010; addr++)
|
||||||
{
|
{
|
||||||
Write(addr, 0x00);
|
Write(addr, 0x00);
|
||||||
SyncWrite(addr, 0x00);
|
SyncWrite(addr, 0x00);
|
||||||
}
|
}
|
||||||
// Write( 0x4001, 0x08 ); // Reset媆反inc乒奈玉卞卅月?
|
// Write( 0x4001, 0x08 ); // Reset時はincモードになる?
|
||||||
// Write( 0x4005, 0x08 ); // Reset媆反inc乒奈玉卞卅月?
|
// Write( 0x4005, 0x08 ); // Reset時はincモードになる?
|
||||||
Write(0x4012, 0x00);
|
Write(0x4012, 0x00);
|
||||||
Write(0x4013, 0x00);
|
Write(0x4013, 0x00);
|
||||||
Write(0x4015, 0x00);
|
Write(0x4015, 0x00);
|
||||||
@ -200,7 +200,7 @@ namespace VirtualNes.Core
|
|||||||
SyncWrite(0x4013, 0x00);
|
SyncWrite(0x4013, 0x00);
|
||||||
SyncWrite(0x4015, 0x00);
|
SyncWrite(0x4015, 0x00);
|
||||||
|
|
||||||
// $4017反𤩸五煋心匹場ヽ趙仄卅中(場ヽ乒奈玉互0匹丐月及毛ヽ渾仄凶末白玄互丐月鮋)
|
// $4017は書き込みで初期化しない(初期モードが0であるのを期待したソフトがある為)
|
||||||
FrameIRQ = 0xC0;
|
FrameIRQ = 0xC0;
|
||||||
FrameCycle = 0;
|
FrameCycle = 0;
|
||||||
FrameIRQoccur = 0;
|
FrameIRQoccur = 0;
|
||||||
@ -301,7 +301,7 @@ namespace VirtualNes.Core
|
|||||||
case 0x4017:
|
case 0x4017:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// VirtuaNES嘐衄禾奈玄
|
// VirtuaNES固有ポート
|
||||||
case 0x4018:
|
case 0x4018:
|
||||||
UpdateRectangle(ch0, data);
|
UpdateRectangle(ch0, data);
|
||||||
UpdateRectangle(ch1, 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;
|
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)
|
if (Math.Abs(ch4.dpcm_output_real - ch4.dpcm_output_fake) <= 8)
|
||||||
{
|
{
|
||||||
@ -712,7 +712,7 @@ namespace VirtualNes.Core
|
|||||||
private int RenderTriangle()
|
private int RenderTriangle()
|
||||||
{
|
{
|
||||||
int vol;
|
int vol;
|
||||||
if (Supporter.Config.sound.bDisableVolumeEffect)
|
if (Supporter.S.Config.sound.bDisableVolumeEffect)
|
||||||
{
|
{
|
||||||
vol = 256;
|
vol = 256;
|
||||||
}
|
}
|
||||||
@ -731,7 +731,7 @@ namespace VirtualNes.Core
|
|||||||
return ch2.nowvolume * vol / 256;
|
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;
|
ch2.phaseacc -= cycle_rate;
|
||||||
if (ch2.phaseacc >= 0)
|
if (ch2.phaseacc >= 0)
|
||||||
@ -756,7 +756,7 @@ namespace VirtualNes.Core
|
|||||||
return ch2.nowvolume * vol / 256;
|
return ch2.nowvolume * vol / 256;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 樓笭ⅸ歙
|
// 加重平均
|
||||||
int num_times, total;
|
int num_times, total;
|
||||||
num_times = total = 0;
|
num_times = total = 0;
|
||||||
while (ch2.phaseacc < 0)
|
while (ch2.phaseacc < 0)
|
||||||
@ -799,7 +799,7 @@ namespace VirtualNes.Core
|
|||||||
return ch2.nowvolume * vol / 256;
|
return ch2.nowvolume * vol / 256;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 樓笭ⅸ歙
|
// 加重平均
|
||||||
int num_times, total;
|
int num_times, total;
|
||||||
num_times = total = 0;
|
num_times = total = 0;
|
||||||
while (ch2.phaseacc < 0)
|
while (ch2.phaseacc < 0)
|
||||||
@ -832,9 +832,9 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
int volume = ch.nowvolume;
|
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 total;
|
||||||
double sample_weight = ch.phaseacc;
|
double sample_weight = ch.phaseacc;
|
||||||
if (sample_weight > cycle_rate)
|
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 x = ChannelTone[(ch.complement == 0) ? 0 : 1, ch.reg[0] >> 6] - 1;
|
||||||
int pTone = 0;
|
int pTone = 0;
|
||||||
|
|
||||||
// 載陔剠仄
|
// 更新無し
|
||||||
ch.phaseacc -= cycle_rate * 2;
|
ch.phaseacc -= cycle_rate * 2;
|
||||||
if (ch.phaseacc >= 0)
|
if (ch.phaseacc >= 0)
|
||||||
{
|
{
|
||||||
@ -872,7 +872,7 @@ namespace VirtualNes.Core
|
|||||||
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1旦氾永皿分仃載陔
|
// 1ステップだけ更新
|
||||||
int freq = INT2FIX(ch.freq + 1);
|
int freq = INT2FIX(ch.freq + 1);
|
||||||
if (freq > cycle_rate * 2)
|
if (freq > cycle_rate * 2)
|
||||||
{
|
{
|
||||||
@ -882,7 +882,7 @@ namespace VirtualNes.Core
|
|||||||
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
return temp * volume / ((1 << RECTANGLE_VOL_SHIFT) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 樓笭ⅸ歙
|
// 加重平均
|
||||||
int num_times, total;
|
int num_times, total;
|
||||||
num_times = total = 0;
|
num_times = total = 0;
|
||||||
while (ch.phaseacc < 0)
|
while (ch.phaseacc < 0)
|
||||||
@ -1015,7 +1015,7 @@ namespace VirtualNes.Core
|
|||||||
SyncWrite4017(data);
|
SyncWrite4017(data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// VirtuaNES娚葲<EFBFBD><EFBFBD><EFBFBD>
|
// VirtuaNES屌桳億乕僩
|
||||||
case 0x4018:
|
case 0x4018:
|
||||||
SyncUpdateRectangle(ch0, data);
|
SyncUpdateRectangle(ch0, data);
|
||||||
SyncUpdateRectangle(ch1, data);
|
SyncUpdateRectangle(ch1, data);
|
||||||
|
@ -1110,7 +1110,7 @@ namespace VirtualNes.Core
|
|||||||
case 0xD2: /* JAM */
|
case 0xD2: /* JAM */
|
||||||
case 0xF2: /* JAM */
|
case 0xF2: /* JAM */
|
||||||
default:
|
default:
|
||||||
if (!Supporter.Config.emulator.bIllegalOp)
|
if (!Supporter.S.Config.emulator.bIllegalOp)
|
||||||
{
|
{
|
||||||
throw new Exception("IllegalOp");
|
throw new Exception("IllegalOp");
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ namespace VirtualNes.Core
|
|||||||
Debuger.Log($"SOUND CODE:{addr & 0x1F:X2}");
|
Debuger.Log($"SOUND CODE:{addr & 0x1F:X2}");
|
||||||
|
|
||||||
// OSDにするべきか…
|
// OSDにするべきか…
|
||||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||||
{
|
{
|
||||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||||
//DirectSound.EsfAllStop();
|
//DirectSound.EsfAllStop();
|
||||||
|
@ -43,7 +43,7 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OSDにするべきか…
|
// OSDにするべきか…
|
||||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||||
{
|
{
|
||||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||||
//DirectSound.EsfAllStop();
|
//DirectSound.EsfAllStop();
|
||||||
|
@ -57,7 +57,7 @@ namespace VirtualNes.Core
|
|||||||
9,10, 8,11,13,12,14,15 };
|
9,10, 8,11,13,12,14,15 };
|
||||||
|
|
||||||
// OSDにするべきか…
|
// OSDにするべきか…
|
||||||
if (Supporter.Config.sound.bExtraSoundEnable)
|
if (Supporter.S.Config.sound.bExtraSoundEnable)
|
||||||
{
|
{
|
||||||
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
//TODO : 似乎VirtuaNES有直接播放某个音频文件的功能
|
||||||
Debuger.Log($"CODE {data:X2}");
|
Debuger.Log($"CODE {data:X2}");
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -249,7 +249,7 @@ namespace VirtualNes.Core
|
|||||||
LoadDISK();
|
LoadDISK();
|
||||||
|
|
||||||
{
|
{
|
||||||
// Pad・ッ・鬣ケトレ、タ、ネウ<EFBFBD>レサッ・ソ・、・゚・<EFBFBD>ー、ャ゚W、、、ホ、ヌ、ウ、ウ、ヌ
|
// Padクラス内だと初期化タイミングが遅いのでここで
|
||||||
uint crc = rom.GetPROM_CRC();
|
uint crc = rom.GetPROM_CRC();
|
||||||
if (
|
if (
|
||||||
crc == 0xe792de94 // Best Play - Pro Yakyuu (New) (J)
|
crc == 0xe792de94 // Best Play - Pro Yakyuu (New) (J)
|
||||||
@ -275,7 +275,7 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
LoadTurboFile();
|
LoadTurboFile();
|
||||||
|
|
||||||
// VS-Unisystem、ホ・ヌ・ユ・ゥ・<EFBFBD>ネヤOカィ
|
// VS-Unisystemのデフォルト設定
|
||||||
if (rom.IsVSUNISYSTEM())
|
if (rom.IsVSUNISYSTEM())
|
||||||
{
|
{
|
||||||
uint crc = rom.GetPROM_CRC();
|
uint crc = rom.GetPROM_CRC();
|
||||||
@ -286,13 +286,13 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
Reset();
|
Reset();
|
||||||
|
|
||||||
// ・イゥ`・犹フモミ、ホ・ヌ・ユ・ゥ・<EFBDA9>ネ・ェ・ラ・キ・逾<EFBDA5><E980BE>Oカィ(ヤOカィ諾、ケ瓶、ヒハケ、ヲ樣)
|
// ゲーム固有のデフォルトオプションを設定(設定戻す時に使う為)
|
||||||
GameOption.defRenderMethod = (int)GetRenderMethod();
|
GameOption.defRenderMethod = (int)GetRenderMethod();
|
||||||
GameOption.defIRQtype = GetIrqType();
|
GameOption.defIRQtype = GetIrqType();
|
||||||
GameOption.defFrameIRQ = GetFrameIRQmode();
|
GameOption.defFrameIRQ = GetFrameIRQmode();
|
||||||
GameOption.defVideoMode = GetVideoMode();
|
GameOption.defVideoMode = GetVideoMode();
|
||||||
|
|
||||||
// ヤOカィ、<EFBFBD>愰`・ノ、キ、ニヤOカィ、ケ、<EFBDB9>(・ィ・<EFBDA8>ネ・熙ャ殪、ア、<EFBDB1>ミ・ヌ・ユ・ゥ・<EFBDA9>ネ、ャネ<EFBDAC><EFBE88>)
|
// 設定をロードして設定する(エントリが無ければデフォルトが入る)
|
||||||
if (rom.GetMapperNo() != 20)
|
if (rom.GetMapperNo() != 20)
|
||||||
{
|
{
|
||||||
GameOption.Load(rom.GetPROM_CRC());
|
GameOption.Load(rom.GetPROM_CRC());
|
||||||
@ -326,17 +326,17 @@ namespace VirtualNes.Core
|
|||||||
if (pad.GetExController() != (int)EXCONTROLLER.EXCONTROLLER_TURBOFILE)
|
if (pad.GetExController() != (int)EXCONTROLLER.EXCONTROLLER_TURBOFILE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var fp = Supporter.OpenFile(Supporter.Config.path.szSavePath, "TurboFile.vtf");
|
var fp = Supporter.S.OpenFile(Supporter.S.Config.path.szSavePath, "TurboFile.vtf");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (fp == null)
|
if (fp == null)
|
||||||
{
|
{
|
||||||
// xxx ・ユ・。・、・<EFBFBD><EFBFBD>_、ア、゙、サ、<EFBFBD>
|
// xxx ファイルを開けません
|
||||||
throw new Exception($"Can Not Open File [TurboFile.vtf]");
|
throw new Exception($"Can Not Open File [TurboFile.vtf]");
|
||||||
}
|
}
|
||||||
|
|
||||||
long size = fp.Length;
|
long size = fp.Length;
|
||||||
// ・ユ・。・、・<EFBFBD>オ・、・コネ。オテ
|
// ファイルサイズ取得
|
||||||
if (size > 32 * 1024)
|
if (size > 32 * 1024)
|
||||||
{
|
{
|
||||||
size = 32 * 1024;
|
size = 32 * 1024;
|
||||||
@ -354,7 +354,7 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
private void LoadDISK()
|
private void LoadDISK()
|
||||||
{
|
{
|
||||||
//todo : エナオ忞巐チネ。ヨァウヨ
|
//todo : 磁碟机读取支持
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadSRAM()
|
private void LoadSRAM()
|
||||||
@ -367,10 +367,10 @@ namespace VirtualNes.Core
|
|||||||
if (!rom.IsSAVERAM())
|
if (!rom.IsSAVERAM())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var saveFileDir = Supporter.Config.path.szSavePath;
|
var saveFileDir = Supporter.S.Config.path.szSavePath;
|
||||||
var saveFileName = $"{rom.GetRomName()}.sav";
|
var saveFileName = $"{rom.GetRomName()}.sav";
|
||||||
|
|
||||||
var fp = Supporter.OpenFile(saveFileDir, saveFileName);
|
var fp = Supporter.S.OpenFile(saveFileDir, saveFileName);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -400,7 +400,7 @@ namespace VirtualNes.Core
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// メモリクリア
|
// 儊儌儕僋儕傾
|
||||||
MemoryUtility.ZEROMEMORY(MMU.RAM, MMU.RAM.Length);
|
MemoryUtility.ZEROMEMORY(MMU.RAM, MMU.RAM.Length);
|
||||||
MemoryUtility.ZEROMEMORY(MMU.WRAM, MMU.WRAM.Length);
|
MemoryUtility.ZEROMEMORY(MMU.WRAM, MMU.WRAM.Length);
|
||||||
MemoryUtility.ZEROMEMORY(MMU.DRAM, MMU.DRAM.Length);
|
MemoryUtility.ZEROMEMORY(MMU.DRAM, MMU.DRAM.Length);
|
||||||
@ -420,11 +420,11 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
MMU.PROM = MMU.VROM = null;
|
MMU.PROM = MMU.VROM = null;
|
||||||
|
|
||||||
// 0 除算防止対策
|
// 0 彍嶼杊巭懳嶔
|
||||||
MMU.PROM_8K_SIZE = MMU.PROM_16K_SIZE = MMU.PROM_32K_SIZE = 1;
|
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;
|
MMU.VROM_1K_SIZE = MMU.VROM_2K_SIZE = MMU.VROM_4K_SIZE = MMU.VROM_8K_SIZE = 1;
|
||||||
|
|
||||||
// デフォルトバンク設定
|
// 僨僼僅儖僩僶儞僋愝掕
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
MMU.CPU_MEM_BANK[i] = null;
|
MMU.CPU_MEM_BANK[i] = null;
|
||||||
@ -432,11 +432,11 @@ namespace VirtualNes.Core
|
|||||||
MMU.CPU_MEM_PAGE[i] = 0;
|
MMU.CPU_MEM_PAGE[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 内臓RAM/WRAM
|
// 撪憻RAM/WRAM
|
||||||
MMU.SetPROM_Bank(0, MMU.RAM, MMU.BANKTYPE_RAM);
|
MMU.SetPROM_Bank(0, MMU.RAM, MMU.BANKTYPE_RAM);
|
||||||
MMU.SetPROM_Bank(3, MMU.WRAM, MMU.BANKTYPE_RAM);
|
MMU.SetPROM_Bank(3, MMU.WRAM, MMU.BANKTYPE_RAM);
|
||||||
|
|
||||||
// ダミー
|
// 僟儈乕
|
||||||
MMU.SetPROM_Bank(1, MMU.XRAM, MMU.BANKTYPE_ROM);
|
MMU.SetPROM_Bank(1, MMU.XRAM, MMU.BANKTYPE_ROM);
|
||||||
MMU.SetPROM_Bank(2, MMU.XRAM, MMU.BANKTYPE_ROM);
|
MMU.SetPROM_Bank(2, MMU.XRAM, MMU.BANKTYPE_ROM);
|
||||||
|
|
||||||
@ -502,13 +502,13 @@ namespace VirtualNes.Core
|
|||||||
EmulationCPU(nescfg.ScanlineCycles);
|
EmulationCPU(nescfg.ScanlineCycles);
|
||||||
if (bDraw)
|
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
|
else
|
||||||
{
|
{
|
||||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
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
|
else
|
||||||
{
|
{
|
||||||
@ -518,11 +518,11 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
else
|
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)
|
if (RenderMethod == EnumRenderMethod.PRE_ALL_RENDER)
|
||||||
EmulationCPU(nescfg.ScanlineCycles);
|
EmulationCPU(nescfg.ScanlineCycles);
|
||||||
|
|
||||||
@ -535,13 +535,13 @@ namespace VirtualNes.Core
|
|||||||
EmulationCPU(nescfg.HDrawCycles);
|
EmulationCPU(nescfg.HDrawCycles);
|
||||||
if (bDraw)
|
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
|
else
|
||||||
{
|
{
|
||||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
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
|
else
|
||||||
{
|
{
|
||||||
@ -551,7 +551,7 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
else
|
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();
|
pad.VSync();
|
||||||
|
|
||||||
// VBLANK期間
|
// VBLANK婜娫
|
||||||
if (scanline == nescfg.TotalScanlines - 1)
|
if (scanline == nescfg.TotalScanlines - 1)
|
||||||
{
|
{
|
||||||
ppu.VBlankEnd();
|
ppu.VBlankEnd();
|
||||||
@ -642,7 +642,7 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
if (scanline == 0)
|
if (scanline == 0)
|
||||||
{
|
{
|
||||||
// ダミースキャンライン
|
// 僟儈乕僗僉儍儞儔僀儞
|
||||||
// H-Draw (4fetches*32)
|
// H-Draw (4fetches*32)
|
||||||
EmulationCPU(FETCH_CYCLES * 128);
|
EmulationCPU(FETCH_CYCLES * 128);
|
||||||
ppu.FrameStart();
|
ppu.FrameStart();
|
||||||
@ -655,10 +655,10 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
else if (scanline < 240)
|
else if (scanline < 240)
|
||||||
{
|
{
|
||||||
// スクリーン描画(Scanline 1~239)
|
// 僗僋儕乕儞昤夋(Scanline 1乣239)
|
||||||
if (bDraw)
|
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();
|
ppu.ScanlineNext();
|
||||||
EmulationCPU(FETCH_CYCLES * 10);
|
EmulationCPU(FETCH_CYCLES * 10);
|
||||||
mapper.HSync(scanline);
|
mapper.HSync(scanline);
|
||||||
@ -670,7 +670,7 @@ namespace VirtualNes.Core
|
|||||||
{
|
{
|
||||||
if (pad.IsZapperMode() && scanline == ZapperY)
|
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();
|
ppu.ScanlineNext();
|
||||||
EmulationCPU(FETCH_CYCLES * 10);
|
EmulationCPU(FETCH_CYCLES * 10);
|
||||||
mapper.HSync(scanline);
|
mapper.HSync(scanline);
|
||||||
@ -694,7 +694,7 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
else
|
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();
|
||||||
EmulationCPU(FETCH_CYCLES * 10);
|
EmulationCPU(FETCH_CYCLES * 10);
|
||||||
mapper.HSync(scanline);
|
mapper.HSync(scanline);
|
||||||
@ -707,7 +707,7 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
else if (scanline == 240)
|
else if (scanline == 240)
|
||||||
{
|
{
|
||||||
// ダミースキャンライン (Scanline 240)
|
// 僟儈乕僗僉儍儞儔僀儞 (Scanline 240)
|
||||||
mapper.VSync();
|
mapper.VSync();
|
||||||
|
|
||||||
EmulationCPU(nescfg.HDrawCycles);
|
EmulationCPU(nescfg.HDrawCycles);
|
||||||
@ -720,7 +720,7 @@ namespace VirtualNes.Core
|
|||||||
{
|
{
|
||||||
pad.VSync();
|
pad.VSync();
|
||||||
|
|
||||||
// VBLANK期間
|
// VBLANK婜娫
|
||||||
if (scanline == nescfg.TotalScanlines - 1)
|
if (scanline == nescfg.TotalScanlines - 1)
|
||||||
{
|
{
|
||||||
ppu.VBlankEnd();
|
ppu.VBlankEnd();
|
||||||
@ -864,7 +864,7 @@ namespace VirtualNes.Core
|
|||||||
MMU.VROM_4K_SIZE = rom.GetVROM_SIZE() * 2;
|
MMU.VROM_4K_SIZE = rom.GetVROM_SIZE() * 2;
|
||||||
MMU.VROM_8K_SIZE = rom.GetVROM_SIZE();
|
MMU.VROM_8K_SIZE = rom.GetVROM_SIZE();
|
||||||
|
|
||||||
// デフォルトバンク
|
// 僨僼僅儖僩僶儞僋
|
||||||
if (MMU.VROM_8K_SIZE != 0)
|
if (MMU.VROM_8K_SIZE != 0)
|
||||||
{
|
{
|
||||||
MMU.SetVROM_8K_Bank(0);
|
MMU.SetVROM_8K_Bank(0);
|
||||||
@ -874,7 +874,7 @@ namespace VirtualNes.Core
|
|||||||
MMU.SetCRAM_8K_Bank(0);
|
MMU.SetCRAM_8K_Bank(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ミラー
|
// 儈儔乕
|
||||||
if (rom.Is4SCREEN())
|
if (rom.Is4SCREEN())
|
||||||
{
|
{
|
||||||
MMU.SetVRAM_Mirror(MMU.VRAM_MIRROR4);
|
MMU.SetVRAM_Mirror(MMU.VRAM_MIRROR4);
|
||||||
@ -976,13 +976,13 @@ namespace VirtualNes.Core
|
|||||||
reg.S = 0xFF;
|
reg.S = 0xFF;
|
||||||
reg.P = CPU.Z_FLAG | CPU.R_FLAG | CPU.I_FLAG;
|
reg.P = CPU.Z_FLAG | CPU.R_FLAG | CPU.I_FLAG;
|
||||||
|
|
||||||
// 安全対策を兼ねてあえてループに(1秒分)
|
// 埨慡懳嶔傪寭偹偰偁偊偰儖乕僾偵(1昩暘)
|
||||||
for (int i = 0; i < nescfg.TotalScanlines * 60; i++)
|
for (int i = 0; i < nescfg.TotalScanlines * 60; i++)
|
||||||
{
|
{
|
||||||
EmulationCPU(nescfg.ScanlineCycles);
|
EmulationCPU(nescfg.ScanlineCycles);
|
||||||
cpu.GetContext(ref reg);
|
cpu.GetContext(ref reg);
|
||||||
|
|
||||||
// 無限ループに入ったことを確認したら抜ける
|
// 柍尷儖乕僾偵擖偭偨偙偲傪妋擣偟偨傜敳偗傞
|
||||||
if (reg.PC == 0x4700)
|
if (reg.PC == 0x4700)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@ -993,7 +993,7 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
|
|
||||||
cpu.GetContext(ref reg);
|
cpu.GetContext(ref reg);
|
||||||
// 無限ループに入っていたら再設定する
|
// 柍尷儖乕僾偵擖偭偰偄偨傜嵞愝掕偡傞
|
||||||
if (reg.PC == 0x4700)
|
if (reg.PC == 0x4700)
|
||||||
{
|
{
|
||||||
reg.PC = 0x4720; // Play Address
|
reg.PC = 0x4720; // Play Address
|
||||||
@ -1009,7 +1009,7 @@ namespace VirtualNes.Core
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
cpu.GetContext(ref reg);
|
cpu.GetContext(ref reg);
|
||||||
reg.PC = 0x4700; // 無限ループ
|
reg.PC = 0x4700; // 柍尷儖乕僾
|
||||||
reg.S = 0xFF;
|
reg.S = 0xFF;
|
||||||
|
|
||||||
EmulationCPU(nescfg.ScanlineCycles * nescfg.TotalScanlines);
|
EmulationCPU(nescfg.ScanlineCycles * nescfg.TotalScanlines);
|
||||||
@ -1095,7 +1095,7 @@ namespace VirtualNes.Core
|
|||||||
|
|
||||||
Debuger.Log($"Saving SAVERAM...[{romName}]");
|
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)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -1168,7 +1168,7 @@ namespace VirtualNes.Core
|
|||||||
{
|
{
|
||||||
Debuger.Log("Saving TURBOFILE...");
|
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)
|
if (m_BarcodeCycles > 1000)
|
||||||
{
|
{
|
||||||
m_BarcodeCycles = 0;
|
m_BarcodeCycles = 0;
|
||||||
// 停止?
|
// 掆巭丠
|
||||||
if (m_BarcodeData[m_BarcodePtr] != 0xFF)
|
if (m_BarcodeData[m_BarcodePtr] != 0xFF)
|
||||||
{
|
{
|
||||||
m_BarcodeOut = m_BarcodeData[m_BarcodePtr++];
|
m_BarcodeOut = m_BarcodeData[m_BarcodePtr++];
|
||||||
@ -1227,7 +1227,7 @@ namespace VirtualNes.Core
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
m_TapeCycles += (nescfg.CpuClock / 32000.0);
|
m_TapeCycles += (nescfg.CpuClock / 32000.0);
|
||||||
// m_TapeCycles += (nescfg.CpuClock / 22050.0); // 遅すぎてダメっぽい
|
// m_TapeCycles += (nescfg.CpuClock / 22050.0); // 抶偡偓偰僟儊偭傐偄
|
||||||
|
|
||||||
if (m_bTapePlay)
|
if (m_bTapePlay)
|
||||||
{
|
{
|
||||||
@ -1293,7 +1293,7 @@ namespace VirtualNes.Core
|
|||||||
return MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF];
|
return MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF];
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0x00; // Warning予防
|
return 0x00; // Warning梊杊
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte ReadReg(ushort addr)
|
private byte ReadReg(ushort addr)
|
||||||
@ -1504,7 +1504,7 @@ namespace VirtualNes.Core
|
|||||||
pad.Write(addr, data);
|
pad.Write(addr, data);
|
||||||
apu.Write(addr, data);
|
apu.Write(addr, data);
|
||||||
break;
|
break;
|
||||||
// VirtuaNES固有ポート
|
// VirtuaNES屌桳億乕僩
|
||||||
case 0x18:
|
case 0x18:
|
||||||
apu.Write(addr, data);
|
apu.Write(addr, data);
|
||||||
break;
|
break;
|
||||||
@ -1596,7 +1596,7 @@ namespace VirtualNes.Core
|
|||||||
ref state.reg.cpureg.FrameIRQ_type,
|
ref state.reg.cpureg.FrameIRQ_type,
|
||||||
ref state.reg.cpureg.FrameIRQ,
|
ref state.reg.cpureg.FrameIRQ,
|
||||||
ref state.reg.cpureg.FrameIRQ_occur);
|
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.DMA_cycles = cpu.GetDmaCycles();
|
||||||
state.reg.cpureg.emul_cycles = emul_cycles;
|
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.SPPAL, MMU.SPPAL, state.ram.SPPAL.Length);
|
||||||
MemoryUtility.memcpy(state.ram.SPRAM, MMU.SPRAM, state.ram.SPRAM.Length);
|
MemoryUtility.memcpy(state.ram.SPRAM, MMU.SPRAM, state.ram.SPRAM.Length);
|
||||||
|
|
||||||
// S-RAM STATE(ハケモテ/ホエハケモテ、ヒ騅、<E9A885>鬢コエ贇レ、ケ、<EFBDB9>ミ・サゥ`・ヨ、ケ、<EFBDB9>)
|
// S-RAM STATE(使用/未使用に関わらず存在すればセーブする)
|
||||||
if (rom.IsSAVERAM())
|
if (rom.IsSAVERAM())
|
||||||
{
|
{
|
||||||
size = (uint)SAVERAM_SIZE;
|
size = (uint)SAVERAM_SIZE;
|
||||||
@ -1649,9 +1649,9 @@ namespace VirtualNes.Core
|
|||||||
uint size = 0;
|
uint size = 0;
|
||||||
|
|
||||||
// SAVE CPU MEMORY BANK DATA
|
// SAVE CPU MEMORY BANK DATA
|
||||||
// BANK0,1,2、マ・ミ・<EFBFBD>ッ・サゥ`・ヨ、ヒ騅4、ハ、キ
|
// BANK0,1,2はバンクセーブに関係なし
|
||||||
// VirtuaNES0.30、ォ、<EFBFBD>
|
// VirtuaNES0.30から
|
||||||
// ・ミ・<EFBFBD>ッ」ウ、マSRAMハケモテ、ヒ騅、<EFBFBD>鬢コ・サゥ`・ヨ
|
// バンク3はSRAM使用に関わらずセーブ
|
||||||
for (int i = 3; i < 8; i++)
|
for (int i = 3; i < 8; i++)
|
||||||
{
|
{
|
||||||
state.mmu.CPU_MEM_TYPE[i] = MMU.CPU_MEM_TYPE[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];
|
state.VRAM = new byte[4 * 1024];
|
||||||
Array.Copy(MMU.VRAM, state.VRAM, state.VRAM.Length);
|
Array.Copy(MMU.VRAM, state.VRAM, state.VRAM.Length);
|
||||||
|
|
||||||
@ -1764,7 +1764,7 @@ namespace VirtualNes.Core
|
|||||||
int DiskSize = 16 + 65500 * rom.GetDiskNo();
|
int DiskSize = 16 + 65500 * rom.GetDiskNo();
|
||||||
|
|
||||||
|
|
||||||
// マ珀`ハ<>、<EFBFBD>ォ・ヲ・<EFBDA6>ネ
|
// 相違数をカウント
|
||||||
for (int i = 16; i < DiskSize; i++)
|
for (int i = 16; i < DiskSize; i++)
|
||||||
{
|
{
|
||||||
if (lpWrite[i] != 0)
|
if (lpWrite[i] != 0)
|
||||||
@ -1874,9 +1874,9 @@ namespace VirtualNes.Core
|
|||||||
//BANK STATE
|
//BANK STATE
|
||||||
{
|
{
|
||||||
// SAVE CPU MEMORY BANK DATA
|
// SAVE CPU MEMORY BANK DATA
|
||||||
// BANK0,1,2、マ・ミ・<EFBFBD>ッ・サゥ`・ヨ、ヒ騅4、ハ、キ
|
// BANK0,1,2はバンクセーブに関係なし
|
||||||
// VirtuaNES0.30、ォ、<EFBFBD>
|
// VirtuaNES0.30から
|
||||||
// ・ミ・<EFBFBD>ッ」ウ、マSRAMハケモテ、ヒ騅、<EFBFBD>鬢コ・サゥ`・ヨ
|
// バンク3はSRAM使用に関わらずセーブ
|
||||||
for (byte i = 3; i < 8; i++)
|
for (byte i = 3; i < 8; i++)
|
||||||
{
|
{
|
||||||
MMU.CPU_MEM_TYPE[i] = state.mmu.CPU_MEM_TYPE[i];
|
MMU.CPU_MEM_TYPE[i] = state.mmu.CPU_MEM_TYPE[i];
|
||||||
|
@ -181,7 +181,7 @@ namespace VirtualNes.Core
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (Supporter.Config.emulator.bFourPlayer)
|
if (Supporter.S.Config.emulator.bFourPlayer)
|
||||||
{
|
{
|
||||||
// NES type
|
// NES type
|
||||||
pad1bit = padbitsync[0] | ((uint)padbitsync[2] << 8) | 0x00080000;
|
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