init new repos
8
.gitattributes
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
# Auto detect text files
|
||||
* text=auto
|
||||
|
||||
# Unity scene and prefab files should be treated as binary
|
||||
*.unity binary
|
||||
*.prefab binary
|
||||
*.asset binary
|
||||
*.mat binary
|
||||
99
.gitignore
vendored
Normal file
@@ -0,0 +1,99 @@
|
||||
# This .gitignore file should be placed at the root of your Unity project directory
|
||||
#
|
||||
# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore
|
||||
#
|
||||
.utmp/
|
||||
/[Ll]ibrary/
|
||||
/[Tt]emp/
|
||||
/[Oo]bj/
|
||||
/[Bb]uild/
|
||||
/[Bb]uilds/
|
||||
/[Ll]ogs/
|
||||
/[Uu]ser[Ss]ettings/
|
||||
*.log
|
||||
|
||||
# By default unity supports Blender asset imports, *.blend1 blender files do not need to be commited to version control.
|
||||
*.blend1
|
||||
*.blend1.meta
|
||||
|
||||
# MemoryCaptures can get excessive in size.
|
||||
# They also could contain extremely sensitive data
|
||||
/[Mm]emoryCaptures/
|
||||
|
||||
# Recordings can get excessive in size
|
||||
/[Rr]ecordings/
|
||||
|
||||
# Uncomment this line if you wish to ignore the asset store tools plugin
|
||||
# /[Aa]ssets/AssetStoreTools*
|
||||
|
||||
# Autogenerated Jetbrains Rider plugin
|
||||
/[Aa]ssets/Plugins/Editor/JetBrains*
|
||||
# Jetbrains Rider personal-layer settings
|
||||
*.DotSettings.user
|
||||
|
||||
# Visual Studio cache directory
|
||||
.vs/
|
||||
|
||||
# Gradle cache directory
|
||||
.gradle/
|
||||
|
||||
# Autogenerated VS/MD/Consulo solution and project files
|
||||
ExportedObj/
|
||||
.consulo/
|
||||
*.csproj
|
||||
*.unityproj
|
||||
*.sln
|
||||
*.suo
|
||||
*.tmp
|
||||
*.user
|
||||
*.userprefs
|
||||
*.pidb
|
||||
*.booproj
|
||||
*.svd
|
||||
*.pdb
|
||||
*.mdb
|
||||
*.opendb
|
||||
*.VC.db
|
||||
|
||||
# Unity3D generated meta files
|
||||
*.pidb.meta
|
||||
*.pdb.meta
|
||||
*.mdb.meta
|
||||
|
||||
# Unity3D generated file on crash reports
|
||||
sysinfo.txt
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Builds
|
||||
*.apk
|
||||
*.aab
|
||||
*.unitypackage
|
||||
*.unitypackage.meta
|
||||
*.app
|
||||
|
||||
# Crashlytics generated file
|
||||
crashlytics-build.properties
|
||||
|
||||
# TestRunner generated files
|
||||
InitTestScene*.unity*
|
||||
|
||||
# Addressables default ignores, before user customizations
|
||||
/ServerData
|
||||
/[Aa]ssets/StreamingAssets/aa*
|
||||
/[Aa]ssets/AddressableAssetsData/link.xml*
|
||||
/[Aa]ssets/Addressables_Temp*
|
||||
# By default, Addressables content builds will generate addressables_content_state.bin
|
||||
# files in platform-specific subfolders, for example:
|
||||
# /Assets/AddressableAssetsData/OSX/addressables_content_state.bin
|
||||
/[Aa]ssets/AddressableAssetsData/*/*.bin*
|
||||
|
||||
# Visual Scripting auto-generated files
|
||||
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db
|
||||
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db.meta
|
||||
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers
|
||||
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers.meta
|
||||
|
||||
# Auto-generated scenes by play mode tests
|
||||
/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity*
|
||||
6
.vsconfig
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.VisualStudio.Workload.ManagedGame"
|
||||
]
|
||||
}
|
||||
8
Assets/Code.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6dc2cacd9d5393346b0edde0d2267ef2
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
111
Assets/Code/App.cs
Normal file
@@ -0,0 +1,111 @@
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
|
||||
public class App : MonoBehaviour
|
||||
{
|
||||
public static ScriptVM VM { get; private set; }
|
||||
public static ScriptLoader Loader { get; private set; }
|
||||
public static GameState GameState { get; private set; }
|
||||
public static CameraController CameraController { get; private set; }
|
||||
public static UIManager UI { get; private set; }
|
||||
public static TextManager TextManager { get; private set; }
|
||||
public static VideoPlayer VideoPlayer { get; private set; }
|
||||
public static SceneLoader SceneLoader { get; private set; }
|
||||
public static ResourceManager ResourceManager { get; private set; }
|
||||
|
||||
public const float Ps1FPS = 60f;
|
||||
|
||||
|
||||
[SerializeField] private string startScript;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
DontDestroyOnLoad(gameObject);
|
||||
InitializeManagers();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> F1
|
||||
}
|
||||
|
||||
private void InitializeManagers()
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GameState = new GameObject("GameState").AddComponent<GameState>();
|
||||
GameState.IsPlayerControlLocked = true;
|
||||
DontDestroyOnLoad(GameState.gameObject);
|
||||
|
||||
|
||||
ControlsController controlsController = new GameObject("ControlsController").AddComponent<ControlsController>(); //TODO: Set On Scene
|
||||
DontDestroyOnLoad(controlsController.gameObject);
|
||||
|
||||
ResourceManager = new GameObject("ResourceManager").AddComponent<ResourceManager>();
|
||||
DontDestroyOnLoad(ResourceManager.gameObject);
|
||||
|
||||
CameraController = FindFirstObjectByType<CameraController>();
|
||||
DontDestroyOnLoad(CameraController.gameObject);
|
||||
|
||||
UI = FindFirstObjectByType<UIManager>();
|
||||
if (UI == null)
|
||||
{
|
||||
Debug.LogError("UIManager not found on scene! Please add UIManager component to a GameObject.");
|
||||
return;
|
||||
}
|
||||
UI.Initialize(); // <20><><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>!
|
||||
DontDestroyOnLoad(UI.gameObject);
|
||||
|
||||
TextManager = new GameObject("TextManager").AddComponent<TextManager>();
|
||||
DontDestroyOnLoad(TextManager.gameObject);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Loader = new ScriptLoader();
|
||||
SceneLoader = gameObject.AddComponent<SceneLoader>();
|
||||
VM = gameObject.AddComponent<ScriptVM>();
|
||||
}
|
||||
|
||||
public void LoadScriptFromFile(string filePath)
|
||||
{
|
||||
string fullPath = Path.Combine(Application.streamingAssetsPath, filePath);
|
||||
|
||||
if (File.Exists(fullPath))
|
||||
{
|
||||
byte[] scriptData = File.ReadAllBytes(fullPath);
|
||||
Script script = Loader.Load(scriptData);
|
||||
VM.LoadAndRunScript(script);
|
||||
Debug.Log($"Script loaded from: {fullPath}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError($"File not found: {fullPath}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Update()
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> F1
|
||||
if (Input.GetKeyDown(KeyCode.F1))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
LoadScriptFromFile("Events/" + startScript + ".TRNSL");
|
||||
}
|
||||
|
||||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (Input.GetKeyDown(KeyCode.F2))
|
||||
{
|
||||
if (VM.IsRunning)
|
||||
{
|
||||
Debug.Log("Script is running");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("No script running");
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (Input.GetKeyDown(KeyCode.F3))
|
||||
{
|
||||
// TODO: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> VM
|
||||
Debug.Log("Stop script requested");
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Code/App.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3db5aef391bb2874c8afac0550553818
|
||||
131
Assets/Code/CameraController.cs
Normal file
@@ -0,0 +1,131 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
public class CameraController : MonoBehaviour
|
||||
{
|
||||
|
||||
[Header("Camera Settings")]
|
||||
public float cameraHeight = 600f; // Высота камеры над целью
|
||||
public float cameraDistance = 700f; // Расстояние от камеры до цели
|
||||
public float rotationSpeed = 5f; // Скорость плавного поворота
|
||||
|
||||
public Vector3 cameraTargetPoint; // Точка, на которую смотрит камера
|
||||
|
||||
public uint sourceX;
|
||||
public uint sourceY;
|
||||
public uint sourceZ;
|
||||
|
||||
public int currentCameraRotation = 0; // Текущий угол вращения (0-7)
|
||||
private bool isCameraRotating = false;
|
||||
private Quaternion targetCameraRotation;
|
||||
|
||||
|
||||
public void SetCamTargetXY(uint rotate, uint xx, uint yy, uint zz)
|
||||
{
|
||||
sourceX = xx;
|
||||
sourceY = yy;
|
||||
sourceZ = zz;
|
||||
|
||||
float targetX = (int)xx;
|
||||
float targetY = (int)yy;
|
||||
float targetZ = (int)zz;
|
||||
|
||||
// Устанавливаем целевую точку
|
||||
cameraTargetPoint = new Vector3(targetX, targetY, targetZ);
|
||||
|
||||
// Преобразуем вращение (0-7 в 0-315 градусов с шагом 45)
|
||||
float targetAngle = ResourceManager.ConvertGameRotation(rotate);
|
||||
|
||||
// Обновляем текущее вращение
|
||||
currentCameraRotation = (int)rotate;
|
||||
|
||||
// Немедленно устанавливаем позицию и вращение камеры
|
||||
UpdateCameraPositionImmediate(targetAngle);
|
||||
|
||||
//Debug.Log($"Camera target: {cameraTargetPoint}, Rotation: {targetAngle}° (index: {rotate})");
|
||||
}
|
||||
|
||||
// Немедленное обновление позиции камеры
|
||||
private void UpdateCameraPositionImmediate(float angle)
|
||||
{
|
||||
// Преобразуем угол в радианы
|
||||
float radAngle = angle * Mathf.Deg2Rad;
|
||||
|
||||
// Вычисляем смещение камеры от целевой точки
|
||||
Vector3 cameraOffset = new Vector3(
|
||||
Mathf.Sin(radAngle) * cameraDistance,
|
||||
cameraHeight, // Фиксированная высота над целью
|
||||
Mathf.Cos(radAngle) * cameraDistance
|
||||
);
|
||||
|
||||
// Устанавливаем позицию камеры
|
||||
transform.position = cameraTargetPoint + cameraOffset;
|
||||
|
||||
// Камера всегда смотрит на целевую точку
|
||||
transform.LookAt(cameraTargetPoint);
|
||||
}
|
||||
|
||||
// Метод для плавного поворота камеры на заданный угол (если понадобится)
|
||||
public void RotateCameraSmoothly(int targetRotationIndex)
|
||||
{
|
||||
if (isCameraRotating) return;
|
||||
|
||||
targetRotationIndex = targetRotationIndex % 8;
|
||||
if (targetRotationIndex == currentCameraRotation) return;
|
||||
|
||||
StartCoroutine(SmoothRotationCoroutine(targetRotationIndex));
|
||||
}
|
||||
|
||||
// Корутина для плавного вращения
|
||||
private IEnumerator SmoothRotationCoroutine(int targetRotationIndex)
|
||||
{
|
||||
isCameraRotating = true;
|
||||
|
||||
|
||||
float startAngle = currentCameraRotation * 45f;
|
||||
float targetAngle = targetRotationIndex * 45f;
|
||||
float progress = 0f;
|
||||
|
||||
// Корректируем для кратчайшего пути вращения
|
||||
float angleDifference = Mathf.DeltaAngle(startAngle, targetAngle);
|
||||
if (Mathf.Abs(angleDifference) > 180f)
|
||||
{
|
||||
targetAngle = startAngle + (angleDifference > 0 ? angleDifference - 360f : angleDifference + 360f);
|
||||
}
|
||||
|
||||
Vector3 startPosition = transform.position;
|
||||
|
||||
while (progress < 1f)
|
||||
{
|
||||
progress += Time.deltaTime * rotationSpeed;
|
||||
float currentAngle = Mathf.Lerp(startAngle, targetAngle, progress);
|
||||
|
||||
// Обновляем позицию камеры
|
||||
float radAngle = currentAngle * Mathf.Deg2Rad;
|
||||
Vector3 cameraOffset = new Vector3(
|
||||
Mathf.Sin(radAngle) * cameraDistance,
|
||||
cameraHeight,
|
||||
Mathf.Cos(radAngle) * cameraDistance
|
||||
);
|
||||
|
||||
transform.position = cameraTargetPoint + cameraOffset;
|
||||
transform.LookAt(cameraTargetPoint);
|
||||
|
||||
yield return null;
|
||||
}
|
||||
|
||||
// Финализируем позицию
|
||||
currentCameraRotation = targetRotationIndex;
|
||||
UpdateCameraPositionImmediate(targetRotationIndex * 45f);
|
||||
|
||||
isCameraRotating = false;
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
2
Assets/Code/CameraController.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c7a97f909cd8e0d4899d3988adde47a0
|
||||
106
Assets/Code/CharacterController.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
public class CharacterController : MonoBehaviour
|
||||
{
|
||||
public int CharacterId { get; set; }
|
||||
public bool IsMoving { get; private set; }
|
||||
public bool IsAnimationComplete { get; private set; }
|
||||
[SerializeField]
|
||||
public int blockSubroutine { get; set; }
|
||||
|
||||
private float _moveSpeed = 200f;
|
||||
private Vector3 _originalPosition;
|
||||
|
||||
void Start()
|
||||
{
|
||||
_originalPosition = transform.position;
|
||||
}
|
||||
|
||||
public void MoveToGameCoordinates(uint gameX, uint gameZ, uint endAction, uint speed)
|
||||
{
|
||||
IsMoving = true;
|
||||
IsAnimationComplete = false;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float x = ResourceManager.ConvertGameCoordinate(gameX);
|
||||
float z = ResourceManager.ConvertGameCoordinate(gameZ);
|
||||
float y = transform.position.y;
|
||||
|
||||
Vector3 targetPosition = new Vector3(x, y, z);
|
||||
float speedMultiplier = speed == 1 ? 2f : 1f;
|
||||
|
||||
StartCoroutine(MoveCoroutine(targetPosition, speedMultiplier, endAction));
|
||||
}
|
||||
|
||||
private IEnumerator MoveCoroutine(Vector3 targetPosition, float speedMultiplier, uint endAction)
|
||||
{
|
||||
float currentSpeed = _moveSpeed * speedMultiplier;
|
||||
float journeyLength = Vector3.Distance(transform.position, targetPosition);
|
||||
float startTime = Time.time;
|
||||
|
||||
Vector3 startPosition = transform.position;
|
||||
|
||||
while (Vector3.Distance(transform.position, targetPosition) > 0.1f)
|
||||
{
|
||||
float distCovered = (Time.time - startTime) * currentSpeed;
|
||||
float fractionOfJourney = distCovered / journeyLength;
|
||||
|
||||
transform.position = Vector3.Lerp(startPosition, targetPosition, fractionOfJourney);
|
||||
yield return null;
|
||||
}
|
||||
|
||||
transform.position = targetPosition;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ApplyEndAction(endAction);
|
||||
|
||||
IsMoving = false;
|
||||
IsAnimationComplete = true;
|
||||
}
|
||||
|
||||
private void ApplyEndAction(uint endAction)
|
||||
{
|
||||
switch (endAction)
|
||||
{
|
||||
case 1: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 90<39>
|
||||
transform.rotation = Quaternion.Euler(0, 90f, 0);
|
||||
break;
|
||||
case 2: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 180<38>
|
||||
transform.rotation = Quaternion.Euler(0, 180f, 0);
|
||||
break;
|
||||
case 3: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 270<37>
|
||||
transform.rotation = Quaternion.Euler(0, 270f, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void PlayAnimation(int animationId, int repeatCount)
|
||||
{
|
||||
IsAnimationComplete = false;
|
||||
StartCoroutine(AnimationCoroutine(animationId, repeatCount));
|
||||
}
|
||||
|
||||
private IEnumerator AnimationCoroutine(int animationId, int repeatCount)
|
||||
{
|
||||
Vector3 startPosition = transform.position;
|
||||
|
||||
for (int i = 0; i < Mathf.Max(1, repeatCount); i++)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
transform.position = startPosition + Vector3.up * 50f;
|
||||
yield return new WaitForSeconds(0.1f);
|
||||
transform.position += Vector3.down * 50f;
|
||||
yield return new WaitForSeconds(0.1f);
|
||||
}
|
||||
|
||||
IsAnimationComplete = true;
|
||||
}
|
||||
|
||||
public void StopAllActions()
|
||||
{
|
||||
StopAllCoroutines();
|
||||
IsMoving = false;
|
||||
IsAnimationComplete = true;
|
||||
}
|
||||
}
|
||||
2
Assets/Code/CharacterController.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 62142119356b539449e0c93c84a50d92
|
||||
161
Assets/Code/ControlsController.cs
Normal file
@@ -0,0 +1,161 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class ControlsController : MonoBehaviour
|
||||
{
|
||||
public static ControlsController Instance { get; private set; }
|
||||
|
||||
private GameObject _controlledObject; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> id=1)
|
||||
private CharacterController _characterController;
|
||||
|
||||
[Header("Movement Settings")]
|
||||
public float moveSpeed = 300f;
|
||||
public float rotationSpeed = 90f;
|
||||
|
||||
[Header("Camera Settings")]
|
||||
public float cameraRotationAngle = 45f;
|
||||
public float cameraChangeSpeed = 5f;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (Instance == null)
|
||||
{
|
||||
Instance = this;
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetControlledObject(GameObject obj)
|
||||
{
|
||||
_controlledObject = obj;
|
||||
_characterController = obj?.GetComponent<CharacterController>();
|
||||
cameraRotationAngle = App.CameraController.currentCameraRotation;
|
||||
|
||||
if (_controlledObject != null)
|
||||
{
|
||||
Debug.Log($"Controlled object set: {_controlledObject.name}");
|
||||
UpdateCameraPosition();
|
||||
}
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (_controlledObject == null || App.GameState.IsPlayerControlLocked)
|
||||
return;
|
||||
|
||||
HandleMovement();
|
||||
HandleCameraRotation();
|
||||
HandleInteraction();
|
||||
}
|
||||
|
||||
private void HandleMovement()
|
||||
{
|
||||
float horizontal = Input.GetAxis("Horizontal");
|
||||
float vertical = Input.GetAxis("Vertical");
|
||||
|
||||
if (horizontal != 0 || vertical != 0)
|
||||
{
|
||||
Vector3 movement = new Vector3(horizontal, 0, vertical) * moveSpeed * Time.deltaTime;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Vector3 cameraForward = App.CameraController.transform.forward;
|
||||
cameraForward.y = 0;
|
||||
cameraForward.Normalize();
|
||||
|
||||
Vector3 cameraRight = App.CameraController.transform.right;
|
||||
cameraRight.y = 0;
|
||||
cameraRight.Normalize();
|
||||
|
||||
Vector3 moveDirection = (cameraForward * vertical + cameraRight * horizontal).normalized;
|
||||
_controlledObject.transform.position += moveDirection * moveSpeed * Time.deltaTime;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (moveDirection != Vector3.zero)
|
||||
{
|
||||
Quaternion targetRotation = Quaternion.LookRotation(moveDirection);
|
||||
_controlledObject.transform.rotation = Quaternion.Slerp(
|
||||
_controlledObject.transform.rotation,
|
||||
targetRotation,
|
||||
rotationSpeed * Time.deltaTime
|
||||
);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
UpdateCameraPosition();
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleCameraRotation()
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.Q))
|
||||
{
|
||||
RotateCamera(-1);
|
||||
}
|
||||
else if (Input.GetKeyDown(KeyCode.E))
|
||||
{
|
||||
RotateCamera(1);
|
||||
}
|
||||
}
|
||||
|
||||
private void RotateCamera(float angle)
|
||||
{
|
||||
int newRotation = App.CameraController.currentCameraRotation + (int)angle;
|
||||
cameraRotationAngle = newRotation;
|
||||
|
||||
//int newRotation = (currentRotation + (int)(angle / 45f)) % 8;
|
||||
//if (newRotation < 0) newRotation += 8;
|
||||
|
||||
App.CameraController.RotateCameraSmoothly(newRotation);
|
||||
}
|
||||
|
||||
private void HandleInteraction()
|
||||
{
|
||||
if (Input.GetButtonDown("Submit"))
|
||||
{
|
||||
CheckNearbyInteractions();
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckNearbyInteractions()
|
||||
{
|
||||
Collider[] hitColliders = Physics.OverlapSphere(_controlledObject.transform.position, 100f);
|
||||
foreach (var hitCollider in hitColliders)
|
||||
{
|
||||
CharacterController otherController = hitCollider.GetComponent<CharacterController>();
|
||||
if (otherController != null && otherController != _characterController)
|
||||
{
|
||||
if (otherController.blockSubroutine != 0)
|
||||
{
|
||||
StartSubroutine((ushort)otherController.blockSubroutine);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateCameraPosition()
|
||||
{
|
||||
if (_controlledObject != null)
|
||||
{
|
||||
Vector3 position = _controlledObject.transform.position;
|
||||
App.CameraController.SetCamTargetXY(
|
||||
(uint)App.CameraController.currentCameraRotation,
|
||||
(uint)position.x,
|
||||
(uint)position.y,
|
||||
(uint)position.z
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private void StartSubroutine(ushort subId)
|
||||
{
|
||||
if (App.VM != null)
|
||||
{
|
||||
App.VM.StartSubroutine(subId);
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Code/ControlsController.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed07e269a7d0d1242bc94ddac6f34186
|
||||
43
Assets/Code/GameState.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class GameState : MonoBehaviour
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
public string PlayerName { get; set; }
|
||||
public int Health { get; set; }
|
||||
public int Magic { get; set; }
|
||||
public int Level { get; set; }
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
public bool IsPlayerControlLocked { get; set; }
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
private Dictionary<int, int> _storyVariables = new Dictionary<int, int>();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
public List<int> Skills { get; set; } = new List<int>();
|
||||
public Dictionary<int, int> Inventory { get; set; } = new Dictionary<int, int>();
|
||||
|
||||
public void SetGlobalVariable(int address, int value)
|
||||
{
|
||||
_storyVariables[address] = value;
|
||||
Debug.Log($"Set global variable 0x{address:X8} = {value}");
|
||||
}
|
||||
|
||||
public int GetGlobalVariable(int address)
|
||||
{
|
||||
return _storyVariables.TryGetValue(address, out int value) ? value : 0;
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
_storyVariables.Clear();
|
||||
Skills.Clear();
|
||||
Inventory.Clear();
|
||||
Health = 100;
|
||||
Magic = 50;
|
||||
Level = 1;
|
||||
IsPlayerControlLocked = true;
|
||||
}
|
||||
}
|
||||
2
Assets/Code/GameState.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7417d9fa7200ff242a416ac128c9abeb
|
||||
84
Assets/Code/ResourceManager.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class ResourceManager : MonoBehaviour
|
||||
{
|
||||
public GameObject LoadModel(int id)
|
||||
{
|
||||
GameObject characterContainer = new GameObject($"CharLoaded_{id:X4}");
|
||||
|
||||
GameObject mesh = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
||||
mesh.transform.SetParent(characterContainer.transform);
|
||||
|
||||
BoxCollider boxCollider = mesh.GetComponent<BoxCollider>();
|
||||
if (boxCollider != null)
|
||||
{
|
||||
GameObject.Destroy(boxCollider);
|
||||
}
|
||||
|
||||
float height = id == 1 ? 150f : 60f;
|
||||
mesh.transform.localScale = new Vector3(30f, height, 30f);
|
||||
|
||||
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mesh.transform.localPosition = new Vector3(0, height / 2f, 0);
|
||||
|
||||
// 6. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
CapsuleCollider capsuleCollider = characterContainer.AddComponent<CapsuleCollider>();
|
||||
capsuleCollider.height = height;
|
||||
capsuleCollider.radius = 50f;
|
||||
capsuleCollider.center = new Vector3(0, height / 2f, 0); // <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
characterContainer.AddComponent<CharacterController>();
|
||||
|
||||
return characterContainer;
|
||||
}
|
||||
|
||||
public static int ConvertGameCoordinate(uint gameCoord)
|
||||
{
|
||||
int value30bit = (int)(gameCoord & 0x3FFFFFFF);
|
||||
if ((gameCoord & 0x40000000) != 0)
|
||||
{
|
||||
return value30bit - 0x40000000;
|
||||
}
|
||||
else
|
||||
{
|
||||
return value30bit;
|
||||
}
|
||||
}
|
||||
|
||||
public static float ConvertGameRotation(uint gameRot)
|
||||
{
|
||||
return gameRot * 45f - 180f;
|
||||
}
|
||||
|
||||
public GameObject CharLoad(int modelId)
|
||||
{
|
||||
GameObject obj = LoadModel(modelId);
|
||||
obj.name = $"ModelTemplate_{modelId:X4}";
|
||||
obj.SetActive(false);
|
||||
return obj;
|
||||
}
|
||||
|
||||
public GameObject CharInit(GameObject obj, int id, uint gameX, uint gameY, uint gameZ, uint gameRot)
|
||||
{
|
||||
GameObject characterInstance = Instantiate(obj);
|
||||
|
||||
var ctrl = characterInstance.GetComponent<CharacterController>();
|
||||
ctrl.CharacterId = id;
|
||||
characterInstance.name = $"{id:X4}"; //rename for normal script ID
|
||||
float x = ConvertGameCoordinate(gameX);
|
||||
float y = ConvertGameCoordinate(gameY);
|
||||
float z = ConvertGameCoordinate(gameZ);
|
||||
float rotation = ConvertGameRotation(gameRot);
|
||||
|
||||
characterInstance.transform.position = new Vector3(x, y, z);
|
||||
characterInstance.transform.rotation = Quaternion.Euler(0, rotation, 0);
|
||||
characterInstance.SetActive(true);
|
||||
|
||||
if (id == 1 && ControlsController.Instance != null)
|
||||
{
|
||||
ControlsController.Instance.SetControlledObject(characterInstance);
|
||||
}
|
||||
|
||||
return characterInstance;
|
||||
}
|
||||
}
|
||||
2
Assets/Code/ResourceManager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5ee0eb2f342e82e40a72aa889274cb53
|
||||
29
Assets/Code/SceneLoader.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
public class SceneLoader : MonoBehaviour
|
||||
{
|
||||
public void LoadDungeon(int dungeonId)
|
||||
{
|
||||
Debug.Log($"Loading dungeon: {dungeonId}");
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
public void LoadCity(int districtId, int y, int x) //+ Exit
|
||||
{
|
||||
Debug.Log($"Loading city: {districtId}. ({x}, {y})");
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
public void LoadBattle(int battleId) //+ floor...
|
||||
{
|
||||
Debug.Log($"Loading battle: {battleId}");
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
public void LoadEvent(int EventId, int hz)
|
||||
{
|
||||
Debug.Log($"Loading event: {EventId} ({EventId + 181}). Hz - {hz}");
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
2
Assets/Code/SceneLoader.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a652356dbc9c6bc4ba82116ecd6c13c3
|
||||
148
Assets/Code/ScriptLoader.cs
Normal file
@@ -0,0 +1,148 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
|
||||
public class ScriptLoader
|
||||
{
|
||||
public Script Load(byte[] binaryData)
|
||||
{
|
||||
Script script = new Script();
|
||||
using (BinaryReader reader = new BinaryReader(new MemoryStream(binaryData)))
|
||||
{
|
||||
uint subTableOffset = reader.ReadUInt32();
|
||||
uint unk2 = reader.ReadUInt32();
|
||||
uint subCount = reader.ReadUInt32();
|
||||
|
||||
uint cmdListOffset = reader.ReadUInt32();
|
||||
uint paramsListOffset = reader.ReadUInt32();
|
||||
uint textArrayOffset = reader.ReadUInt32();
|
||||
uint endOfFileOffset = (uint)binaryData.Length; // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
script.SubroutineTable = ParseSubTable(reader, subCount, subTableOffset);
|
||||
|
||||
reader.BaseStream.Position = cmdListOffset;
|
||||
List<ScriptCommand> commandsWithoutParams = ParseCmdListWithoutParams(reader, paramsListOffset);
|
||||
script.Commands = new List<ScriptCommand>(commandsWithoutParams.Count);
|
||||
|
||||
for (int i = 0; i < commandsWithoutParams.Count; i++)
|
||||
{
|
||||
ScriptCommand cmd = commandsWithoutParams[i];
|
||||
uint currentParamsOffset = cmd.ParamsOffset;
|
||||
uint nextParamsOffset;
|
||||
|
||||
if (i < commandsWithoutParams.Count - 1)
|
||||
{
|
||||
nextParamsOffset = commandsWithoutParams[i + 1].ParamsOffset;
|
||||
}
|
||||
else
|
||||
{
|
||||
nextParamsOffset = textArrayOffset;
|
||||
}
|
||||
|
||||
|
||||
int paramsLengthInBytes = (int)(nextParamsOffset - currentParamsOffset);
|
||||
cmd.Params = ReadParamValues(reader, currentParamsOffset, paramsLengthInBytes);
|
||||
script.Commands.Add(cmd);
|
||||
}
|
||||
script.TextData = ReadBytes(reader, textArrayOffset, endOfFileOffset);
|
||||
}
|
||||
return script;
|
||||
}
|
||||
|
||||
private List<ScriptCommand> ParseCmdListWithoutParams(BinaryReader reader, uint paramsListOffset)
|
||||
{
|
||||
var commands = new List<ScriptCommand>();
|
||||
while (reader.BaseStream.Position < paramsListOffset)
|
||||
{
|
||||
ScriptCommand cmd = new ScriptCommand
|
||||
{
|
||||
OpCode = reader.ReadUInt32() & 0xFFFF, //Cleaning to 16-bit command (May be some trash or what ???),
|
||||
ParamsOffset = reader.ReadUInt32()
|
||||
};
|
||||
commands.Add(cmd);
|
||||
}
|
||||
return commands;
|
||||
}
|
||||
|
||||
private int[] ReadParamValues(BinaryReader reader, uint startOffset, int lengthInBytes)
|
||||
{
|
||||
if (lengthInBytes <= 0) return new int[0];
|
||||
if (lengthInBytes % 4 != 0)
|
||||
{
|
||||
Debug.LogWarning($"Parameter block length ({lengthInBytes}) is not a multiple of 4. Truncating.");
|
||||
lengthInBytes = (lengthInBytes / 4) * 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4
|
||||
}
|
||||
|
||||
int paramCount = lengthInBytes / 4;
|
||||
int[] parameters = new int[paramCount];
|
||||
|
||||
reader.BaseStream.Position = startOffset;
|
||||
for (int i = 0; i < paramCount; i++)
|
||||
{
|
||||
parameters[i] = reader.ReadInt32();
|
||||
}
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
private byte[] ReadBytes(BinaryReader reader, uint startAddr, uint endAddr)
|
||||
{
|
||||
if (startAddr >= endAddr)
|
||||
return new byte[0];
|
||||
|
||||
int length = (int)(endAddr - startAddr);
|
||||
reader.BaseStream.Position = startAddr;
|
||||
return reader.ReadBytes(length);
|
||||
}
|
||||
|
||||
private Dictionary<ushort, Subroutine> ParseSubTable(BinaryReader reader, uint subCount, long baseOffset)
|
||||
{
|
||||
var table = new Dictionary<ushort, Subroutine>();
|
||||
|
||||
for (ushort id = 0; id < subCount; id++)
|
||||
{
|
||||
long entryOffset = baseOffset + (id * 72); // 72 bytes on each subroutine header
|
||||
reader.BaseStream.Position = entryOffset;
|
||||
|
||||
Subroutine sub = new Subroutine();
|
||||
sub.Id = id;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> (null-terminated string)
|
||||
List<byte> nameBytes = new List<byte>();
|
||||
byte b;
|
||||
while ((b = reader.ReadByte()) != 0)
|
||||
{
|
||||
nameBytes.Add(b);
|
||||
}
|
||||
sub.Name = System.Text.Encoding.UTF8.GetString(nameBytes.ToArray());
|
||||
|
||||
reader.BaseStream.Position = entryOffset + 64; //address always +64 byte offset from structure start
|
||||
sub.Address = reader.ReadUInt32();
|
||||
|
||||
table.Add(id, sub);
|
||||
}
|
||||
return table;
|
||||
}
|
||||
}
|
||||
|
||||
public class Script
|
||||
{
|
||||
public Dictionary<ushort, Subroutine> SubroutineTable { get; set; }
|
||||
public List<ScriptCommand> Commands { get; set; }
|
||||
public byte[] TextData { get; set; } // textBlob
|
||||
}
|
||||
|
||||
public class Subroutine
|
||||
{
|
||||
public ushort Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public uint Address { get; set; } // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Commands
|
||||
}
|
||||
|
||||
public class ScriptCommand
|
||||
{
|
||||
public uint OpCode { get; set; }
|
||||
public ushort executedStatus { get; set; } //For original engine compability (0 - not executed, 3 - parsed, may be other statuses - need to reverse)
|
||||
public uint ParamsOffset { get; set; }
|
||||
public int[] Params { get; set; } // command params array
|
||||
}
|
||||
2
Assets/Code/ScriptLoader.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 672baa445921734488f3285eb2525055
|
||||
807
Assets/Code/ScriptVM.cs
Normal file
@@ -0,0 +1,807 @@
|
||||
using NUnit.Framework.Internal;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
public class ScriptVM : MonoBehaviour
|
||||
{
|
||||
private Script _currentScript;
|
||||
private ExecutionContext _mainContext;
|
||||
private Dictionary<int, ExecutionContext> _activeSubroutines = new Dictionary<int, ExecutionContext>();
|
||||
private Dictionary<int, GameObject> _modelTempRegistry = new Dictionary<int, GameObject>();
|
||||
private Dictionary<int, GameObject> _objectRegistry = new Dictionary<int, GameObject>();
|
||||
|
||||
private int selectionVariable;
|
||||
|
||||
// Jump Table <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
private Dictionary<uint, Action<ExecutionContext, ScriptCommand>> _opCodeHandlers;
|
||||
|
||||
public bool IsRunning => _mainContext != null && !_mainContext.IsFinished;
|
||||
|
||||
//SCRIPT LOGGING
|
||||
void OnGUI()
|
||||
{
|
||||
GUILayout.BeginArea(new Rect(10, 10, 400, 600));
|
||||
|
||||
if (_mainContext != null)
|
||||
{
|
||||
GUILayout.Label($"MAIN: PC={_mainContext.ProgramCounter:X4} CMD=0x{GetCurrentCommand(_mainContext)?.OpCode:X4}");
|
||||
GUILayout.Label($"Status: {(IsRunning ? "Running" : "Stopped")}");
|
||||
GUILayout.Label($"Paused: {(_mainContext.IsPaused ? "+" : "-")} RemSec: -{_mainContext.PauseTimeRemaining}");
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
var currentCmd = GetCurrentCommand(_mainContext);
|
||||
if (currentCmd != null)
|
||||
{
|
||||
GUILayout.Label($"Params: {string.Join(", ", currentCmd.Params)}");
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GUILayout.Label($"Subroutines: {_activeSubroutines.Count}");
|
||||
foreach (var kvp in _activeSubroutines)
|
||||
{
|
||||
var context = kvp.Value;
|
||||
GUILayout.Label($"SUB[{kvp.Key:X2}] {context.ContextName}: PC={context.ProgramCounter:X4} CMD=0x{GetCurrentCommand(context)?.OpCode:X4}");
|
||||
GUILayout.Label($" Paused: {(context.IsPaused ? "+" : "-")} RemSec: -{context.PauseTimeRemaining}");
|
||||
}
|
||||
|
||||
GUILayout.EndArea();
|
||||
}
|
||||
|
||||
void Awake()
|
||||
{
|
||||
InitializeJumpTable();
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (_mainContext == null) return;
|
||||
|
||||
if (_mainContext.IsPaused && _mainContext.PauseTimeRemaining > 0)
|
||||
{
|
||||
_mainContext.PauseTimeRemaining -= Time.deltaTime;
|
||||
if (_mainContext.PauseTimeRemaining <= 0)
|
||||
{
|
||||
_mainContext.PauseTimeRemaining = 0;
|
||||
_mainContext.IsPaused = false;
|
||||
_mainContext.ProgramCounter++;
|
||||
MarkCurrentCommandCompleted(_mainContext); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (!_mainContext.IsWaiting && !_mainContext.IsPaused)
|
||||
{
|
||||
ExecuteStep(_mainContext);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
foreach (var context in _activeSubroutines.Values)
|
||||
{
|
||||
if (context.IsPaused && context.PauseTimeRemaining > 0)
|
||||
{
|
||||
context.PauseTimeRemaining -= Time.deltaTime;
|
||||
if (context.PauseTimeRemaining <= 0)
|
||||
{
|
||||
context.PauseTimeRemaining = 0;
|
||||
context.IsPaused = false;
|
||||
context.ProgramCounter++;
|
||||
MarkCurrentCommandCompleted(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
foreach (var context in _activeSubroutines.Values)
|
||||
{
|
||||
if (!context.IsWaiting && !context.IsPaused)
|
||||
{
|
||||
ExecuteStep(context);
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
_activeSubroutines = _activeSubroutines.Where(kvp => !kvp.Value.IsFinished).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
|
||||
}
|
||||
|
||||
public void LoadAndRunScript(Script script)
|
||||
{
|
||||
_currentScript = script;
|
||||
_mainContext = new ExecutionContext(0, "MAIN", null);
|
||||
_activeSubroutines.Clear();
|
||||
_objectRegistry.Clear();
|
||||
|
||||
Debug.Log($"Script loaded with {script.Commands.Count} commands");
|
||||
}
|
||||
|
||||
public void StartSubroutine(ushort subId)
|
||||
{
|
||||
if (_currentScript != null && _currentScript.SubroutineTable.TryGetValue(subId, out Subroutine sub))
|
||||
{
|
||||
var newContext = new ExecutionContext(sub.Address, sub.Name, new ScriptCommand {OpCode = 999});
|
||||
_activeSubroutines[subId] = newContext;
|
||||
Debug.Log($"Started independent subroutine {subId} at address {sub.Address:X4}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"Cannot start subroutine {subId}: script not loaded or subroutine not found");
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsCommandCompleted(uint commandId)
|
||||
{
|
||||
if (commandId < _currentScript.Commands.Count)
|
||||
{
|
||||
return _currentScript.Commands[(int)commandId].executedStatus == 3;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// WaitTo - stops thread and check command status at address
|
||||
private void Handle_WaitTo(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
uint targetCommandId = (uint)GetParam(cmd, 0);
|
||||
|
||||
if (IsCommandCompleted(targetCommandId))
|
||||
{
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void ExecuteStep(ExecutionContext context)
|
||||
{
|
||||
if (context.ProgramCounter >= _currentScript.Commands.Count)
|
||||
{
|
||||
context.IsFinished = true;
|
||||
if (context == _mainContext) Debug.Log("Main script finished");
|
||||
return;
|
||||
}
|
||||
|
||||
ScriptCommand cmd = _currentScript.Commands[(int)context.ProgramCounter];
|
||||
cmd.executedStatus = 0; //cleaning status for command restart and proper wait
|
||||
if (_opCodeHandlers.TryGetValue(cmd.OpCode, out var handler))
|
||||
{
|
||||
try
|
||||
{
|
||||
handler(context, cmd);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Error executing command 0x{cmd.OpCode:X8}: {ex.Message}");
|
||||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cmd.executedStatus = 3;
|
||||
context.ProgramCounter++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"Unknown OpCode: 0x{cmd.OpCode:X8} at PC={context.ProgramCounter:X4}");
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cmd.executedStatus = 3;
|
||||
context.ProgramCounter++;
|
||||
}
|
||||
}
|
||||
|
||||
private void InitializeJumpTable()
|
||||
{
|
||||
_opCodeHandlers = new Dictionary<uint, Action<ExecutionContext, ScriptCommand>>
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{ 0x00000007, Handle_JumpTo },
|
||||
{ 0x00000001, Handle_If1Go },
|
||||
{ 0x00000002, Handle_If0Go },
|
||||
{ 0x00000004, Handle_IfNotEqualGo },
|
||||
{ 0x0000000D, Handle_GoSub },
|
||||
{ 0x0000000E, Handle_Return },
|
||||
{ 0x00000012, Handle_WaitTo },
|
||||
|
||||
{ 0x0000001A, Handle_GetInput },
|
||||
|
||||
{ 0x0000002C, Handle_SetCamXY }, // Set Camera
|
||||
|
||||
//Characters commands
|
||||
{ 0x00000030, Handle_CharLoad }, // CharLoad
|
||||
{ 0x00000031, Handle_CharInit }, // CharInit
|
||||
{ 0x000000D0, Handle_CharInit }, // Another CharInit???
|
||||
{ 0x00000034, Handle_CharMoveTo }, // CanWait
|
||||
{ 0x00000037, Handle_CharAnimate }, // CanWait
|
||||
{ 0x00000038, Handle_CharAnimate2 }, // CanWait
|
||||
|
||||
{ 0x00000041, Handle_PlayerInit }, // Create player char at camera set
|
||||
|
||||
{ 0x000000D2, Handle_CharGlowShow }, // CharInitWithGlow
|
||||
|
||||
{ 0x0000003E, Handle_WaitCharAnimEnd }, // Wait by char id
|
||||
|
||||
{ 0x00000046, Handle_CharSetSubroutine }, // Set blockcharacter subroutine
|
||||
|
||||
|
||||
//Pause
|
||||
{ 0x0000005C, Handle_PausInit }, // PausInit
|
||||
{ 0x0000005D, Handle_PauseFr }, // PauseFr_
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{ 0x00000008, Handle_SetTemp },
|
||||
{ 0x00000009, Handle_CopyVar },
|
||||
{ 0x00000060, Handle_GetVar },
|
||||
{ 0x0000005E, Handle_VarTrue },
|
||||
{ 0x0000005F, Handle_VarFlse },
|
||||
{ 0x00000073, Handle_VarDec },
|
||||
{ 0x00000074, Handle_VarSet },
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{ 0x00000043, Handle_CtrlLock },
|
||||
{ 0x00000044, Handle_CtrUnlck },
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{ 0x00000051, Handle_DungLoad },
|
||||
{ 0x00000052, Handle_EventLoad },
|
||||
{ 0x00000053, Handle_CityLoad },
|
||||
{ 0x000000ED, Handle_BattleLoad },
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
{ 0x00000059, Handle_VideoPly },
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{ 0x00000092, Handle_ScrnFade },
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
{ 0x00000024, Handle_WindOpen },
|
||||
{ 0x00000013, Handle_TextShow },
|
||||
{ 0x00000025, Handle_WindClose }
|
||||
};
|
||||
}
|
||||
|
||||
// ========== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ==========
|
||||
|
||||
private void Handle_JumpTo(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
uint jumpAddress = (uint)GetParam(cmd, 0);
|
||||
ctx.ProgramCounter = jumpAddress;
|
||||
cmd.executedStatus = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
private void Handle_If1Go(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int varAddress = GetParam(cmd, 0);
|
||||
uint jumpAddress = (uint)GetParam(cmd, 1);
|
||||
|
||||
if (GetLocalVariable(ctx, varAddress) == 1)
|
||||
ctx.ProgramCounter = jumpAddress;
|
||||
else
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_If0Go(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int varAddress = GetParam(cmd, 0);
|
||||
uint jumpAddress = (uint)GetParam(cmd, 1);
|
||||
|
||||
if (GetLocalVariable(ctx, varAddress) == 0)
|
||||
ctx.ProgramCounter = jumpAddress;
|
||||
else
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_IfNotEqualGo(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int varAddress = GetParam(cmd, 0);
|
||||
int compareValue = GetParam(cmd, 1);
|
||||
uint jumpAddress = (uint)GetParam(cmd, 2);
|
||||
|
||||
if (GetLocalVariable(ctx, varAddress) != compareValue)
|
||||
ctx.ProgramCounter = jumpAddress;
|
||||
else
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_GoSub(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
ushort subId = (ushort)GetParam(cmd, 0);
|
||||
|
||||
if (_currentScript.SubroutineTable.TryGetValue(subId, out Subroutine sub))
|
||||
{
|
||||
var newContext = new ExecutionContext(sub.Address, sub.Name, cmd);
|
||||
_activeSubroutines[subId] = newContext;
|
||||
}
|
||||
ctx.ProgramCounter++;
|
||||
}
|
||||
|
||||
private void Handle_Return(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
if (ctx.ExecutedByCmd != null) //main thread has ExecutedByCmd = null
|
||||
{
|
||||
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ctx.ExecutedByCmd.executedStatus = 3;
|
||||
ctx.IsFinished = true;
|
||||
}
|
||||
|
||||
}
|
||||
private void Handle_GetInput(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int varAddress = GetParam(cmd, 0);
|
||||
SetLocalVariable(ctx, varAddress, selectionVariable);
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>:
|
||||
private void Handle_PausInit(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ctx.PauseTimeRemaining = 0;
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_PauseFr(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int framesToPause = GetParam(cmd, 0);
|
||||
|
||||
ctx.PauseTimeRemaining = ctx.PauseTimeRemaining = framesToPause * (1f / App.Ps1FPS); //Ps1 FPS Compability
|
||||
ctx.IsPaused = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
private void Handle_SetTemp(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int varAddress = GetParam(cmd, 0);
|
||||
int value = GetParam(cmd, 1);
|
||||
SetLocalVariable(ctx, varAddress, value);
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_CopyVar(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int srcAddress = GetParam(cmd, 0);
|
||||
int dstAddress = GetParam(cmd, 1);
|
||||
int value = GetLocalVariable(ctx, srcAddress);
|
||||
SetLocalVariable(ctx, dstAddress, value);
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_GetVar(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int localVarAddress = GetParam(cmd, 0);
|
||||
int globalVarAddress = GetParam(cmd, 1);
|
||||
int value = App.GameState.GetGlobalVariable(globalVarAddress);
|
||||
SetLocalVariable(ctx, localVarAddress, value);
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_VarTrue(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int globalVarAddress = GetParam(cmd, 0);
|
||||
App.GameState.SetGlobalVariable(globalVarAddress, 1);
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_VarFlse(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int globalVarAddress = GetParam(cmd, 0);
|
||||
App.GameState.SetGlobalVariable(globalVarAddress, 0);
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_VarSet(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int globalVarAddress = GetParam(cmd, 0);
|
||||
int value = GetParam(cmd, 1);
|
||||
App.GameState.SetGlobalVariable(globalVarAddress, value);
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_VarDec(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int globalVarAddress = GetParam(cmd, 0);
|
||||
int currentValue = App.GameState.GetGlobalVariable(globalVarAddress);
|
||||
App.GameState.SetGlobalVariable(globalVarAddress, currentValue - 1);
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_CtrlLock(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
Debug.Log("Controls Locked");
|
||||
App.GameState.IsPlayerControlLocked = true;
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_CtrUnlck(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
Debug.Log("Controls Unlocked");
|
||||
App.GameState.IsPlayerControlLocked = false;
|
||||
|
||||
if (_objectRegistry.TryGetValue(1, out GameObject playerObj))
|
||||
{
|
||||
ControlsController.Instance?.SetControlledObject(playerObj);
|
||||
}
|
||||
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_SetCamXY(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
uint rot = (uint)GetParam(cmd, 0);
|
||||
uint x = (uint)GetParam(cmd, 1);
|
||||
uint y = (uint)GetParam(cmd, 2);
|
||||
uint z = (uint)GetParam(cmd, 3);
|
||||
|
||||
App.CameraController.SetCamTargetXY(rot, x, y, z);
|
||||
Debug.Log($"Camera position set {x}.{y}.{z}. Rot - {rot}");
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_TextShow(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int textOffset = GetParam(cmd, 0);
|
||||
|
||||
var textTokens = TextUtils.ParseText(_currentScript.TextData, textOffset);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> UI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
App.TextManager.ShowText(textTokens, cmd);
|
||||
|
||||
ctx.ProgramCounter++;
|
||||
}
|
||||
|
||||
private void Handle_WindOpen(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
App.UI.ShowMessageWindow();
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_WindClose(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
App.UI.HideMessageWindow(ctx);
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
//CHARACTERS SECTION
|
||||
|
||||
private void Handle_CharLoad(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
//Old PS1 method for loading sprite sheet in VRAM
|
||||
//Now we simply creating disabled char model on scene
|
||||
int modelId = GetParam(cmd, 0);
|
||||
if (!_modelTempRegistry.ContainsKey(modelId))
|
||||
{
|
||||
GameObject model = App.ResourceManager.CharLoad(modelId);
|
||||
_modelTempRegistry[modelId] = model;
|
||||
}
|
||||
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_CharInit(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: id, model_id, x, y, z, turn, dummy
|
||||
int objectId = GetParam(cmd, 0);
|
||||
int modelId = GetParam(cmd, 1);
|
||||
uint posX = (uint)GetParam(cmd, 2);
|
||||
uint posY = (uint)GetParam(cmd, 3);
|
||||
uint posZ = (uint)GetParam(cmd, 4);
|
||||
uint rotation = (uint)GetParam(cmd, 5);
|
||||
int dummy = GetParam(cmd, 6); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
if (!_modelTempRegistry.TryGetValue(modelId, out GameObject templateModel))
|
||||
{
|
||||
Debug.LogWarning($"Model {modelId} not loaded, creating...");
|
||||
templateModel = App.ResourceManager.CharLoad(modelId);
|
||||
_modelTempRegistry[modelId] = templateModel;
|
||||
}
|
||||
|
||||
if (_objectRegistry.TryGetValue(objectId, out GameObject existingModel))
|
||||
{
|
||||
Destroy(existingModel);
|
||||
_objectRegistry.Remove(objectId);
|
||||
}
|
||||
|
||||
GameObject characterInstance = App.ResourceManager.CharInit(templateModel, objectId, posX, posY, posZ, rotation);
|
||||
|
||||
_objectRegistry[objectId] = characterInstance;
|
||||
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
// Activate player object at camera spot position and link controls
|
||||
private void Handle_PlayerInit(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int rotation = GetParam(cmd, 0);
|
||||
|
||||
if (!_modelTempRegistry.TryGetValue(1, out GameObject templateModel))
|
||||
{
|
||||
Debug.LogWarning($"Player Model not loaded, creating...");
|
||||
templateModel = App.ResourceManager.CharLoad(1);
|
||||
_modelTempRegistry[1] = templateModel;
|
||||
}
|
||||
|
||||
if (_objectRegistry.TryGetValue(1, out GameObject existingModel))
|
||||
{
|
||||
Destroy(existingModel);
|
||||
_objectRegistry.Remove(1);
|
||||
}
|
||||
|
||||
CameraController sceneCamera = App.CameraController;
|
||||
GameObject character = App.ResourceManager.CharInit(templateModel, 1, sceneCamera.sourceX, sceneCamera.sourceY, sceneCamera.sourceZ, (uint)rotation);
|
||||
|
||||
_objectRegistry[1] = character;
|
||||
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_CharGlowShow(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: id, x, y, z, glow, dummy
|
||||
int charId = GetParam(cmd, 0);
|
||||
uint posX = (uint)GetParam(cmd, 1);
|
||||
uint posY = (uint)GetParam(cmd, 2);
|
||||
uint posZ = (uint)GetParam(cmd, 3);
|
||||
uint glow = (uint)GetParam(cmd, 4);
|
||||
int dummy = GetParam(cmd, 5);
|
||||
|
||||
if (_objectRegistry.TryGetValue(charId, out GameObject characterObj))
|
||||
{
|
||||
|
||||
App.ResourceManager.CharInit(characterObj, charId, posX, posY, posZ, glow); //TODO: Async GLOW
|
||||
}
|
||||
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_CharMoveTo(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int charId = GetParam(cmd, 0);
|
||||
uint destX = (uint)GetParam(cmd, 1);
|
||||
uint destZ = (uint)GetParam(cmd, 2);
|
||||
uint endAction = (uint)GetParam(cmd, 3);
|
||||
uint speed = (uint)GetParam(cmd, 4);
|
||||
|
||||
if (_objectRegistry.TryGetValue(charId, out GameObject characterObj) && characterObj is GameObject character)
|
||||
{
|
||||
var controller = character.GetComponent<CharacterController>();
|
||||
if (controller != null)
|
||||
{
|
||||
//async move
|
||||
controller.MoveToGameCoordinates(destX, destZ, endAction, speed);
|
||||
}
|
||||
}
|
||||
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_CharAnimate(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int charId = GetParam(cmd, 0);
|
||||
uint animationId = (uint)GetParam(cmd, 1);
|
||||
uint repeatNum = (uint)GetParam(cmd, 2);
|
||||
|
||||
if (_objectRegistry.TryGetValue(charId, out GameObject characterObj) && characterObj is GameObject character)
|
||||
{
|
||||
var controller = character.GetComponent<CharacterController>();
|
||||
if (controller != null)
|
||||
{
|
||||
controller.PlayAnimation((int)animationId, (int)Mathf.Max(1, repeatNum));
|
||||
}
|
||||
}
|
||||
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
private void Handle_CharAnimate2(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
Handle_CharAnimate(ctx, cmd);
|
||||
}
|
||||
|
||||
private void Handle_WaitCharAnimEnd(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int charId = GetParam(cmd, 0);
|
||||
|
||||
if (_objectRegistry.TryGetValue(charId, out GameObject characterObj) && characterObj is GameObject character)
|
||||
{
|
||||
var controller = character.GetComponent<CharacterController>();
|
||||
if (controller != null && !controller.IsMoving)
|
||||
{
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
}
|
||||
|
||||
private void Handle_CharSetSubroutine(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int charId = GetParam(cmd, 0);
|
||||
int subId = GetParam(cmd, 1);
|
||||
|
||||
_objectRegistry.TryGetValue(charId, out GameObject characterObj);
|
||||
characterObj.GetComponent<CharacterController>().blockSubroutine = subId;
|
||||
Debug.Log($"Sub {subId} set to char {charId}");
|
||||
ctx.ProgramCounter++;
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
|
||||
|
||||
// SCENERY LOADERS
|
||||
private void Handle_CityLoad(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int districtId = GetParam(cmd, 0);
|
||||
int y = GetParam(cmd, 1);
|
||||
int x = GetParam(cmd, 2);
|
||||
App.SceneLoader.LoadCity(districtId, y, x);
|
||||
_mainContext = null; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
private void Handle_BattleLoad(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int battleId = GetParam(cmd, 0);
|
||||
App.SceneLoader.LoadBattle(battleId);
|
||||
_mainContext = null; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
private void Handle_DungLoad(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int dungeonId = GetParam(cmd, 0);
|
||||
App.SceneLoader.LoadDungeon(dungeonId);
|
||||
_mainContext = null; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
private void Handle_EventLoad(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int hzId = GetParam(cmd, 0);
|
||||
int eventId = GetParam(cmd, 1);
|
||||
App.SceneLoader.LoadEvent(eventId, hzId);
|
||||
_mainContext = null; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
private void Handle_VideoPly(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int videoId = GetParam(cmd, 0);
|
||||
App.VideoPlayer.PlayVideo(videoId, cmd);
|
||||
PauseContext(cmd);
|
||||
}
|
||||
|
||||
private void Handle_ScrnFade(ExecutionContext ctx, ScriptCommand cmd)
|
||||
{
|
||||
int fadeType = GetParam(cmd, 0);
|
||||
int duration = GetParam(cmd, 1);
|
||||
//App.UI.ScreenFade(fadeType, duration, () => {
|
||||
// ctx.ProgramCounter++;
|
||||
//});
|
||||
ctx.ProgramCounter++;
|
||||
}
|
||||
|
||||
public void PauseContext(ScriptCommand cmd)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (_mainContext != null && GetCurrentCommand(_mainContext) == cmd)
|
||||
{
|
||||
_mainContext.IsPaused = true;
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var context in _activeSubroutines.Values)
|
||||
{
|
||||
if (GetCurrentCommand(context) == cmd)
|
||||
{
|
||||
context.IsPaused = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ResumeContext(ScriptCommand cmd)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (_mainContext != null && GetCurrentCommand(_mainContext) == cmd)
|
||||
{
|
||||
_mainContext.IsPaused = false;
|
||||
_mainContext.ProgramCounter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var context in _activeSubroutines.Values)
|
||||
{
|
||||
if (GetCurrentCommand(context) == cmd)
|
||||
{
|
||||
context.IsPaused = false;
|
||||
context.ProgramCounter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ========== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ==========
|
||||
|
||||
private ScriptCommand GetCurrentCommand(ExecutionContext ctx)
|
||||
{
|
||||
if (ctx.ProgramCounter < _currentScript.Commands.Count)
|
||||
return _currentScript.Commands[(int)ctx.ProgramCounter];
|
||||
return null;
|
||||
}
|
||||
|
||||
private int GetParam(ScriptCommand cmd, int index)
|
||||
{
|
||||
return index < cmd.Params.Length ? cmd.Params[index] : 0;
|
||||
}
|
||||
|
||||
private int GetLocalVariable(ExecutionContext ctx, int address)
|
||||
{
|
||||
return ctx.LocalVariables.TryGetValue(address, out int value) ? value : 0;
|
||||
}
|
||||
|
||||
private void SetLocalVariable(ExecutionContext ctx, int address, int value)
|
||||
{
|
||||
ctx.LocalVariables[address] = value;
|
||||
}
|
||||
|
||||
|
||||
public void SetSelectionVariable(int value) //external after selection variable set
|
||||
{
|
||||
selectionVariable = value;
|
||||
}
|
||||
|
||||
public void MarkCommandCompleted(ScriptCommand cmd)
|
||||
{
|
||||
cmd.executedStatus = 3;
|
||||
ResumeContext(cmd);
|
||||
}
|
||||
|
||||
private void MarkCurrentCommandCompleted(ExecutionContext ctx)
|
||||
{
|
||||
if (ctx.ProgramCounter > 0 && ctx.ProgramCounter - 1 < _currentScript.Commands.Count)
|
||||
{
|
||||
ScriptCommand cmd = _currentScript.Commands[(int)(ctx.ProgramCounter - 1)];
|
||||
cmd.executedStatus = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ExecutionContext
|
||||
{
|
||||
public ScriptCommand ExecutedByCmd { get; set; }
|
||||
public string ContextName { get; set; }
|
||||
public uint ProgramCounter { get; set; }
|
||||
public Dictionary<int, int> LocalVariables { get; set; }
|
||||
public bool IsWaiting { get; set; }
|
||||
public bool IsPaused { get; set; }
|
||||
public bool IsFinished { get; set; }
|
||||
public float PauseTimeRemaining { get; set; }
|
||||
|
||||
public ExecutionContext(uint startAddress, string name, ScriptCommand cmd)
|
||||
{
|
||||
ContextName = name;
|
||||
ExecutedByCmd = cmd;
|
||||
ProgramCounter = startAddress;
|
||||
LocalVariables = new Dictionary<int, int>();
|
||||
PauseTimeRemaining = 0;
|
||||
}
|
||||
}
|
||||
2
Assets/Code/ScriptVM.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 86f75a68871eb8b4ab7a2df4c08a2841
|
||||
227
Assets/Code/TextManager.cs
Normal file
@@ -0,0 +1,227 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using TMPro;
|
||||
|
||||
public class TextManager : MonoBehaviour
|
||||
{
|
||||
public static TextManager Instance { get; private set; }
|
||||
|
||||
[Header("Text Settings")]
|
||||
public float defaultTypeSpeed = 0.01f;
|
||||
public Color defaultTextColor = Color.white;
|
||||
|
||||
private Coroutine currentTextCoroutine;
|
||||
private StringBuilder currentTextBuilder;
|
||||
private Vector2 currentTextPosition;
|
||||
private bool isTyping = false;
|
||||
private ScriptCommand currentCommand;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (Instance == null)
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
else
|
||||
{
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void ShowText(List<TextToken> tokens, ScriptCommand cmd)
|
||||
{
|
||||
currentCommand = cmd;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (currentTextCoroutine != null)
|
||||
{
|
||||
StopCoroutine(currentTextCoroutine);
|
||||
}
|
||||
|
||||
currentTextCoroutine = StartCoroutine(ProcessTokensCoroutine(tokens));
|
||||
}
|
||||
|
||||
private IEnumerator ProcessTokensCoroutine(List<TextToken> tokens)
|
||||
{
|
||||
isTyping = true;
|
||||
currentTextBuilder = new StringBuilder();
|
||||
App.UI.ClearText();
|
||||
|
||||
for (int a = 0; a < tokens.Count - 1; a++)
|
||||
{
|
||||
TextToken token = tokens[a];
|
||||
switch(token.Key)
|
||||
{
|
||||
case "text":
|
||||
yield return StartCoroutine(TypeText(token.Value));
|
||||
break;
|
||||
case "cmd":
|
||||
yield return StartCoroutine(ProcessCommand(token.Value));
|
||||
break;
|
||||
case "color":
|
||||
SetTextColor(token.Value);
|
||||
break;
|
||||
case "pause":
|
||||
yield return new WaitForSeconds(float.Parse(token.Value) / 60);
|
||||
break;
|
||||
case "user_selection":
|
||||
byte varCount = byte.Parse(token.Value); //preparing selection strings
|
||||
List<string> selectionList = new List<string>();
|
||||
for (byte x = 1; x <= varCount * 2; x += 2) //string and \n
|
||||
{
|
||||
selectionList.Add(tokens[a+x].Value);
|
||||
}
|
||||
|
||||
a += varCount * 2; //jump over selection strings (text + \n)
|
||||
App.UI.ShowSelection(selectionList);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
isTyping = false;
|
||||
}
|
||||
|
||||
private IEnumerator TypeText(string text)
|
||||
{
|
||||
foreach (char c in text)
|
||||
{
|
||||
currentTextBuilder.Append(c);
|
||||
App.UI.SetText(currentTextBuilder.ToString());
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if (App.UI.shadowText != null)
|
||||
{
|
||||
App.UI.shadowText.text = currentTextBuilder.ToString();
|
||||
}
|
||||
|
||||
yield return new WaitForSeconds(defaultTypeSpeed);
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator ProcessCommand(string command)
|
||||
{
|
||||
switch (command)
|
||||
{
|
||||
case "newline":
|
||||
currentTextBuilder.Append("\n");
|
||||
App.UI.AppendText("\n");
|
||||
break;
|
||||
|
||||
case "tab":
|
||||
currentTextBuilder.Append(" ");
|
||||
App.UI.AppendText(" ");
|
||||
break;
|
||||
|
||||
case "wait_input":
|
||||
App.UI.ShowCursor(true);
|
||||
yield return WaitForInput();
|
||||
App.UI.ShowCursor(false);
|
||||
break;
|
||||
|
||||
case "wait_selection":
|
||||
|
||||
yield return WaitForSelectionInput();
|
||||
App.VM.SetSelectionVariable(App.UI.userSelectionVariant); //TODO:
|
||||
App.UI.WipeSelection();
|
||||
break;
|
||||
|
||||
case "wipe":
|
||||
currentTextBuilder.Clear();
|
||||
App.UI.ClearText();
|
||||
break;
|
||||
|
||||
case "end":
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator WaitForInput()
|
||||
{
|
||||
bool inputReceived = false;
|
||||
|
||||
while (!inputReceived)
|
||||
{
|
||||
if (Input.GetButtonDown("Submit"))
|
||||
{
|
||||
inputReceived = true;
|
||||
}
|
||||
yield return null;
|
||||
}
|
||||
|
||||
if (currentCommand != null)
|
||||
{
|
||||
App.VM.MarkCommandCompleted(currentCommand);
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator WaitForSelectionInput()
|
||||
{
|
||||
bool acceptReceived = false;
|
||||
|
||||
while (!acceptReceived)
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.UpArrow))
|
||||
{
|
||||
//recieve input for
|
||||
}
|
||||
|
||||
if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.Return))
|
||||
{
|
||||
acceptReceived = true;
|
||||
}
|
||||
|
||||
yield return null;
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (currentCommand != null)
|
||||
{
|
||||
|
||||
App.VM.MarkCommandCompleted(currentCommand);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetTextColor(string colorCode)
|
||||
{
|
||||
int colorIndex;
|
||||
if (int.TryParse(colorCode, out colorIndex))
|
||||
{
|
||||
string colorTag = $"</color><color={GetColorByIndex(colorIndex)}>";
|
||||
currentTextBuilder.Append(colorTag);
|
||||
App.UI.AppendText(colorTag);
|
||||
}
|
||||
}
|
||||
|
||||
private string GetColorByIndex(int index)
|
||||
{
|
||||
switch (index)
|
||||
{
|
||||
case 1: return "white";
|
||||
case 3: return "gray";
|
||||
case 5: return "#D327F5"; //pink!
|
||||
case 7: return "#27F5D3"; //blue
|
||||
case 9: return "#27F56C"; //green
|
||||
case 11: return "yellow";
|
||||
case 13: return "#F56C27"; //orange
|
||||
default: return "white";
|
||||
}
|
||||
}
|
||||
|
||||
public void SkipTyping()
|
||||
{
|
||||
if (isTyping && currentTextCoroutine != null)
|
||||
{
|
||||
StopCoroutine(currentTextCoroutine);
|
||||
isTyping = false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsTyping()
|
||||
{
|
||||
return isTyping;
|
||||
}
|
||||
}
|
||||
2
Assets/Code/TextManager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 66658750d4cfa7a4f8a25f35ed8ec08b
|
||||
146
Assets/Code/TextUtils.cs
Normal file
@@ -0,0 +1,146 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
public static class TextUtils
|
||||
{
|
||||
public static List<TextToken> ParseText(byte[] textData, int startOffset)
|
||||
{
|
||||
List<TextToken> tokens = new List<TextToken>();
|
||||
int offset = startOffset;
|
||||
|
||||
while (offset < textData.Length && textData[offset] != 0)
|
||||
{
|
||||
ushort code = ReadUInt16(textData, ref offset);
|
||||
|
||||
if ((code & 0x1000) != 0) // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
ParseCommand(code, textData, ref offset, tokens);
|
||||
if (tokens.Last().Value == "end") return tokens; //If end of window
|
||||
}
|
||||
else if ((code & 0x2000) != 0) // My russian text
|
||||
{
|
||||
offset += 2;
|
||||
ParseText(code, textData, ref offset, tokens);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Japanese and other char
|
||||
offset += 2;
|
||||
string chr = (code <= 255 && code >= 32) ? "" + (char)code : $"[{code:X4}]";
|
||||
tokens.Add(new TextToken { Key = "text", Value = chr });
|
||||
}
|
||||
}
|
||||
|
||||
return tokens;
|
||||
}
|
||||
|
||||
private static void ParseCommand(ushort code, byte[] data, ref int offset, List<TextToken> tokens)
|
||||
{
|
||||
ushort commandType = (ushort)(code & 0x00FF);
|
||||
|
||||
TextToken token = new TextToken();
|
||||
|
||||
offset += 2;
|
||||
|
||||
switch (commandType)
|
||||
{
|
||||
case 0x1D: // color
|
||||
token.Key = "color";
|
||||
token.Value = ReadUInt16(data, ref offset).ToString();
|
||||
break;
|
||||
|
||||
case 0x12: // name
|
||||
token.Key = "text";
|
||||
token.Value = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"; //TODO: take from global vars
|
||||
break;
|
||||
|
||||
case 0x13: // surname
|
||||
token.Key = "text";
|
||||
token.Value = "<22><><EFBFBD><EFBFBD>"; //TODO: take from global vars
|
||||
break;
|
||||
|
||||
case 0x20: // tab
|
||||
token.Key = "cmd";
|
||||
token.Value = "tab";
|
||||
break;
|
||||
|
||||
case 0x02: // wipe text & reset coords
|
||||
token.Key = "cmd";
|
||||
token.Value = "wipe";
|
||||
break;
|
||||
|
||||
case 0x03: // end
|
||||
token.Key = "cmd";
|
||||
token.Value = "end";
|
||||
break;
|
||||
|
||||
case 0x05: // pause
|
||||
token.Key = "pause";
|
||||
token.Value = ReadUInt16(data, ref offset).ToString();
|
||||
break;
|
||||
|
||||
|
||||
case 0x06: // wait input
|
||||
token.Key = "cmd";
|
||||
token.Value = "wait_input";
|
||||
break;
|
||||
|
||||
case 0x08: // wait input
|
||||
token.Key = "user_selection";
|
||||
token.Value = ReadUInt16(data, ref offset).ToString();
|
||||
break;
|
||||
|
||||
case 0x09: // wait input
|
||||
token.Key = "cmd";
|
||||
token.Value = "wait_selection";
|
||||
break;
|
||||
|
||||
case 0x01: // newline
|
||||
token.Key = "cmd";
|
||||
token.Value = "newline";
|
||||
break;
|
||||
|
||||
default:
|
||||
token.Key = "unknown";
|
||||
token.Value = commandType.ToString("X4");
|
||||
break;
|
||||
}
|
||||
offset += (((code & 0x0F00) >> 8) - 1) * 2; //Original offset after command
|
||||
tokens.Add(token);
|
||||
}
|
||||
|
||||
private static void ParseText(ushort code, byte[] data, ref int offset, List<TextToken> tokens)
|
||||
{
|
||||
int length = code & 0x00FF;
|
||||
TextToken token = new TextToken
|
||||
{
|
||||
Key = "text",
|
||||
Value = Encoding.GetEncoding(1251).GetString(data, offset, length).Replace("~", "...")
|
||||
};
|
||||
|
||||
offset += length;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 2 <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
offset += length & 1;
|
||||
|
||||
|
||||
tokens.Add(token);
|
||||
}
|
||||
|
||||
private static ushort ReadUInt16(byte[] data, ref int offset)
|
||||
{
|
||||
ushort value = (ushort)(data[offset] | (data[offset + 1] << 8));
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
public class TextToken
|
||||
{
|
||||
public string Key { get; set; }
|
||||
public string Value { get; set; }
|
||||
|
||||
public override string ToString() => $"{Key}: {Value}";
|
||||
}
|
||||
2
Assets/Code/TextUtils.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f58cbe5b6f0d96c4686182ef95fd4b44
|
||||
243
Assets/Code/UIManager.cs
Normal file
@@ -0,0 +1,243 @@
|
||||
using UnityEngine;
|
||||
using TMPro;
|
||||
using UnityEngine.UI;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class UIManager : MonoBehaviour
|
||||
{
|
||||
[Header("UI Prefabs")]
|
||||
public GameObject messageWindowPrefab;
|
||||
|
||||
[Header("Message Window Settings")]
|
||||
public float slideDuration = 0.3f;
|
||||
public AnimationCurve slideCurve = AnimationCurve.EaseInOut(0, 0, 1, 1);
|
||||
public float cursorAnimationSpeed = 1f;
|
||||
public float cursorAnimationHeight = 10f;
|
||||
|
||||
private RectTransform messageWindow;
|
||||
public TMP_Text messageText;
|
||||
public TMP_Text shadowText;
|
||||
private RectTransform cursor;
|
||||
private RectTransform cursor2;
|
||||
private Vector2 cursorOriginalPosition;
|
||||
|
||||
private bool isMessageWindowVisible = false;
|
||||
private bool isWaitingForInput = false;
|
||||
private Coroutine cursorAnimationCoroutine;
|
||||
private Coroutine slideCoroutine;
|
||||
|
||||
public int userSelectionVariant;
|
||||
|
||||
private ExecutionContext currentContext;
|
||||
|
||||
private bool isInitialized = false;
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
if (isInitialized) return;
|
||||
|
||||
CreateMessageWindow();
|
||||
isInitialized = true;
|
||||
}
|
||||
|
||||
private void CreateMessageWindow()
|
||||
{
|
||||
if (messageWindowPrefab == null)
|
||||
{
|
||||
Debug.LogError("MessageWindow prefab is not assigned!");
|
||||
return;
|
||||
}
|
||||
|
||||
GameObject messageWindowGO = Instantiate(messageWindowPrefab, transform);
|
||||
messageWindow = messageWindowGO.GetComponent<RectTransform>();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
messageText = messageWindowGO.transform.Find("TextContainer/MessageText")?.GetComponent<TMP_Text>();
|
||||
shadowText = messageWindowGO.transform.Find("TextContainer/ShadowText")?.GetComponent<TMP_Text>();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Transform cursorTransform = messageWindowGO.transform.Find("Cursor");
|
||||
Transform cursor2Transform = messageWindowGO.transform.Find("Cursor2");
|
||||
if (cursorTransform != null)
|
||||
{
|
||||
cursor = cursorTransform.GetComponent<RectTransform>();
|
||||
cursorOriginalPosition = cursor.anchoredPosition;
|
||||
cursor.gameObject.SetActive(false);
|
||||
cursor2 = cursor2Transform.GetComponent<RectTransform>();
|
||||
cursor2.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
HideMessageWindowImmediate();
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MessageWindow
|
||||
public void ShowMessageWindow()
|
||||
{
|
||||
if (messageWindow != null && !isMessageWindowVisible)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
messageWindow.gameObject.SetActive(true);
|
||||
|
||||
if (slideCoroutine != null)
|
||||
StopCoroutine(slideCoroutine);
|
||||
|
||||
slideCoroutine = StartCoroutine(SlideWindow(true));
|
||||
}
|
||||
}
|
||||
|
||||
public void HideMessageWindow(ExecutionContext ctx)
|
||||
{
|
||||
if (messageWindow != null && isMessageWindowVisible)
|
||||
{
|
||||
currentContext = ctx;
|
||||
ctx.IsPaused = true;
|
||||
|
||||
if (slideCoroutine != null)
|
||||
StopCoroutine(slideCoroutine);
|
||||
|
||||
slideCoroutine = StartCoroutine(SlideWindow(false));
|
||||
} else
|
||||
{
|
||||
ctx.IsPaused = false;
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator SlideWindow(bool show)
|
||||
{
|
||||
float elapsed = 0f;
|
||||
float startOffset = show ? -messageWindow.rect.height : 0f;
|
||||
float targetOffset = show ? 0f : -messageWindow.rect.height;
|
||||
|
||||
while (elapsed < slideDuration)
|
||||
{
|
||||
elapsed += Time.deltaTime;
|
||||
float t = slideCurve.Evaluate(elapsed / slideDuration);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> offsetMin/offsetMax
|
||||
float currentOffset = Mathf.Lerp(startOffset, targetOffset, t);
|
||||
messageWindow.offsetMin = new Vector2(0f, currentOffset);
|
||||
messageWindow.offsetMax = new Vector2(0f, currentOffset);
|
||||
|
||||
yield return null;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float finalOffset = show ? 0f : -messageWindow.rect.height;
|
||||
messageWindow.offsetMin = new Vector2(0f, finalOffset);
|
||||
messageWindow.offsetMax = new Vector2(0f, finalOffset);
|
||||
|
||||
isMessageWindowVisible = show;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (!show)
|
||||
{
|
||||
messageWindow.gameObject.SetActive(false);
|
||||
|
||||
if (currentContext != null)
|
||||
{
|
||||
currentContext.IsPaused = false;
|
||||
currentContext = null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void HideMessageWindowImmediate()
|
||||
{
|
||||
if (messageWindow != null)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
messageWindow.offsetMin = new Vector2(0f, messageWindow.rect.height);
|
||||
messageWindow.offsetMax = new Vector2(0f, messageWindow.rect.height);
|
||||
|
||||
isMessageWindowVisible = false;
|
||||
messageWindow.gameObject.SetActive(false);
|
||||
|
||||
if (currentContext != null)
|
||||
{
|
||||
currentContext.IsPaused = false;
|
||||
currentContext = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
public void SetText(string text)
|
||||
{
|
||||
if (messageText != null) messageText.text = text;
|
||||
if (shadowText != null) shadowText.text = text;
|
||||
}
|
||||
|
||||
public void AppendText(string text)
|
||||
{
|
||||
if (messageText != null) messageText.text += text;
|
||||
if (shadowText != null) shadowText.text += text;
|
||||
}
|
||||
|
||||
public void ClearText()
|
||||
{
|
||||
if (messageText != null) messageText.text = "";
|
||||
if (shadowText != null) shadowText.text = "";
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
public void ShowCursor(bool show)
|
||||
{
|
||||
if (cursor != null)
|
||||
{
|
||||
cursor.gameObject.SetActive(show);
|
||||
cursor2.gameObject.SetActive(show);
|
||||
|
||||
isWaitingForInput = show;
|
||||
|
||||
if (show && cursorAnimationCoroutine == null)
|
||||
{
|
||||
cursorAnimationCoroutine = StartCoroutine(AnimateCursor());
|
||||
}
|
||||
else if (!show && cursorAnimationCoroutine != null)
|
||||
{
|
||||
StopCoroutine(cursorAnimationCoroutine);
|
||||
cursorAnimationCoroutine = null;
|
||||
cursor.anchoredPosition = cursorOriginalPosition;
|
||||
cursor2.anchoredPosition = cursorOriginalPosition;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator AnimateCursor()
|
||||
{
|
||||
while (isWaitingForInput)
|
||||
{
|
||||
float yOffset = Mathf.Sin(Time.time * cursorAnimationSpeed) * cursorAnimationHeight;
|
||||
float yOffset2 = Mathf.Sin((Time.time - 0.1f) * cursorAnimationSpeed) * cursorAnimationHeight;
|
||||
cursor.anchoredPosition = cursorOriginalPosition + new Vector2(0, yOffset);
|
||||
cursor2.anchoredPosition = cursorOriginalPosition + new Vector2(0, yOffset2);
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
// user dialog selection
|
||||
public void ShowSelection(List<string> variants)
|
||||
{
|
||||
switch (variants.Count)
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void WipeSelection()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public bool IsMessageWindowVisible => isMessageWindowVisible;
|
||||
public bool IsWaitingForInput => isWaitingForInput;
|
||||
}
|
||||
2
Assets/Code/UIManager.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 33033c46e8e99f845bfd7afb98f8a71c
|
||||
24
Assets/Code/VideoPlayer.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
public class VideoPlayer : MonoBehaviour
|
||||
{
|
||||
public void PlayVideo(int videoId, ScriptCommand cmd)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Debug.Log($"Playing video: {videoId}");
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> async <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
StartCoroutine(PlayVideoCoroutine(cmd));
|
||||
}
|
||||
|
||||
private IEnumerator PlayVideoCoroutine(ScriptCommand cmd)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
yield return new WaitForSeconds(2f);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
App.VM.MarkCommandCompleted(cmd);
|
||||
}
|
||||
}
|
||||
2
Assets/Code/VideoPlayer.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 93e0fc90cdd3b3a4f99ad2eb93de5f64
|
||||
8
Assets/Fonts.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 219b32e29ed00354aad260f75926ef19
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Fonts/Source.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2526186d4267cff45b03beb2a5e968c0
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Fonts/TMP.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e9aacb1a9732bae4a80a3288d9cab377
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Models.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f48555438aa9667429171005b77c3f8c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Models/Chars.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5b464426fe4ef8948a52f98e62e293fe
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Models/Chars/Risa.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 25aac9c9eb897404088229bfc4a75357
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_00.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
117
Assets/Models/Chars/Risa/texture_00.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ea316cff1e0b78845b461f6f822faa8e
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_01.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
117
Assets/Models/Chars/Risa/texture_01.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9e17ae641e703114089194c527471417
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_02.png
Normal file
|
After Width: | Height: | Size: 152 B |
117
Assets/Models/Chars/Risa/texture_02.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a83af60c03b62584886086a9c242dcf3
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_03.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
117
Assets/Models/Chars/Risa/texture_03.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a77ed73612b57aa4085fd7790401d293
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_04.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
117
Assets/Models/Chars/Risa/texture_04.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1f93296091a6d6a4a980fe1c47118c93
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_05.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
117
Assets/Models/Chars/Risa/texture_05.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 457029b5c9270a7459dc9fc26025442d
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_06.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
117
Assets/Models/Chars/Risa/texture_06.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9623d482ed9429140ab07535d94494ff
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_07.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
117
Assets/Models/Chars/Risa/texture_07.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7dec4280d6fe1d649884cfbe79c99c2d
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_08.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
117
Assets/Models/Chars/Risa/texture_08.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4b8437dc1b88d02418ff8aa499c3793e
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_09.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
117
Assets/Models/Chars/Risa/texture_09.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1259b25df6c79324c93704df67dc33c4
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_10.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
117
Assets/Models/Chars/Risa/texture_10.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 01363176e318849419653ad97ef2aceb
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_11.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
117
Assets/Models/Chars/Risa/texture_11.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 261908b624fa8b54ba2a5461734bbb37
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/texture_12.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
117
Assets/Models/Chars/Risa/texture_12.png.meta
Normal file
@@ -0,0 +1,117 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7bf0b6a078077f14cb00da06dd9fd0c1
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Models/Chars/Risa/tiaki.fbx
Normal file
110
Assets/Models/Chars/Risa/tiaki.fbx.meta
Normal file
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7b746ee1a35dcf8428400c6c7d48957c
|
||||
ModelImporter:
|
||||
serializedVersion: 24200
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
materials:
|
||||
materialImportMode: 2
|
||||
materialName: 0
|
||||
materialSearch: 1
|
||||
materialLocation: 1
|
||||
animations:
|
||||
legacyGenerateAnimations: 4
|
||||
bakeSimulation: 0
|
||||
resampleCurves: 1
|
||||
optimizeGameObjects: 0
|
||||
removeConstantScaleCurves: 0
|
||||
motionNodeName:
|
||||
animationImportErrors:
|
||||
animationImportWarnings:
|
||||
animationRetargetingWarnings:
|
||||
animationDoRetargetingWarnings: 0
|
||||
importAnimatedCustomProperties: 0
|
||||
importConstraints: 0
|
||||
animationCompression: 1
|
||||
animationRotationError: 0.5
|
||||
animationPositionError: 0.5
|
||||
animationScaleError: 0.5
|
||||
animationWrapMode: 0
|
||||
extraExposedTransformPaths: []
|
||||
extraUserProperties: []
|
||||
clipAnimations: []
|
||||
isReadable: 0
|
||||
meshes:
|
||||
lODScreenPercentages: []
|
||||
globalScale: 1
|
||||
meshCompression: 0
|
||||
addColliders: 0
|
||||
useSRGBMaterialColor: 1
|
||||
sortHierarchyByName: 1
|
||||
importPhysicalCameras: 1
|
||||
importVisibility: 1
|
||||
importBlendShapes: 1
|
||||
importCameras: 1
|
||||
importLights: 1
|
||||
nodeNameCollisionStrategy: 1
|
||||
fileIdsGeneration: 2
|
||||
swapUVChannels: 0
|
||||
generateSecondaryUV: 0
|
||||
useFileUnits: 1
|
||||
keepQuads: 0
|
||||
weldVertices: 1
|
||||
bakeAxisConversion: 0
|
||||
preserveHierarchy: 0
|
||||
skinWeightsMode: 0
|
||||
maxBonesPerVertex: 4
|
||||
minBoneWeight: 0.001
|
||||
optimizeBones: 1
|
||||
generateMeshLods: 0
|
||||
meshLodGenerationFlags: 0
|
||||
maximumMeshLod: -1
|
||||
meshOptimizationFlags: -1
|
||||
indexFormat: 0
|
||||
secondaryUVAngleDistortion: 8
|
||||
secondaryUVAreaDistortion: 15.000001
|
||||
secondaryUVHardAngle: 88
|
||||
secondaryUVMarginMethod: 1
|
||||
secondaryUVMinLightmapResolution: 40
|
||||
secondaryUVMinObjectScale: 1
|
||||
secondaryUVPackMargin: 4
|
||||
useFileScale: 1
|
||||
strictVertexDataChecks: 0
|
||||
tangentSpace:
|
||||
normalSmoothAngle: 60
|
||||
normalImportMode: 0
|
||||
tangentImportMode: 3
|
||||
normalCalculationMode: 4
|
||||
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
|
||||
blendShapeNormalImportMode: 1
|
||||
normalSmoothingSource: 0
|
||||
referencedClips: []
|
||||
importAnimation: 1
|
||||
humanDescription:
|
||||
serializedVersion: 3
|
||||
human: []
|
||||
skeleton: []
|
||||
armTwist: 0.5
|
||||
foreArmTwist: 0.5
|
||||
upperLegTwist: 0.5
|
||||
legTwist: 0.5
|
||||
armStretch: 0.05
|
||||
legStretch: 0.05
|
||||
feetSpacing: 0
|
||||
globalScale: 1
|
||||
rootMotionBoneName:
|
||||
hasTranslationDoF: 0
|
||||
hasExtraRoot: 0
|
||||
skeletonHasParents: 1
|
||||
lastHumanDescriptionAvatarSource: {instanceID: 0}
|
||||
autoGenerateAvatarMappingIfUnspecified: 1
|
||||
animationType: 2
|
||||
humanoidOversampling: 1
|
||||
avatarSetup: 0
|
||||
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
|
||||
importBlendShapeDeformPercent: 1
|
||||
remapMaterialsIfMaterialImportModeIsNone: 0
|
||||
additionalBone: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Prefabs.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 53bcbff827661704abd9005678599377
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Prefabs/UI.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 897e0ddf7b1f3e24e922de5408520ff2
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
1236
Assets/Prefabs/UI/MessageWindow.prefab
Normal file
7
Assets/Prefabs/UI/MessageWindow.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e57650a46dd5368409d1337a68cc6153
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Resources.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 70ee986bccd926945b99f4438d36200a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Resources/scripts.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fce989f26a348a040ba5d574221849da
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Scenes.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c747bff554eba5b4dbee45c6c7fb54a3
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
641
Assets/Scenes/MainApp.unity
Normal file
@@ -0,0 +1,641 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!29 &1
|
||||
OcclusionCullingSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_OcclusionBakeSettings:
|
||||
smallestOccluder: 5
|
||||
smallestHole: 0.25
|
||||
backfaceThreshold: 100
|
||||
m_SceneGUID: 00000000000000000000000000000000
|
||||
m_OcclusionCullingData: {fileID: 0}
|
||||
--- !u!104 &2
|
||||
RenderSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 10
|
||||
m_Fog: 0
|
||||
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
m_FogMode: 3
|
||||
m_FogDensity: 0.01
|
||||
m_LinearFogStart: 0
|
||||
m_LinearFogEnd: 300
|
||||
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
|
||||
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
|
||||
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
|
||||
m_AmbientIntensity: 1
|
||||
m_AmbientMode: 0
|
||||
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
|
||||
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_HaloStrength: 0.5
|
||||
m_FlareStrength: 1
|
||||
m_FlareFadeSpeed: 3
|
||||
m_HaloTexture: {fileID: 0}
|
||||
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_DefaultReflectionMode: 0
|
||||
m_DefaultReflectionResolution: 128
|
||||
m_ReflectionBounces: 1
|
||||
m_ReflectionIntensity: 1
|
||||
m_CustomReflection: {fileID: 0}
|
||||
m_Sun: {fileID: 705507994}
|
||||
m_UseRadianceAmbientProbe: 0
|
||||
--- !u!157 &3
|
||||
LightmapSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 13
|
||||
m_BakeOnSceneLoad: 0
|
||||
m_GISettings:
|
||||
serializedVersion: 2
|
||||
m_BounceScale: 1
|
||||
m_IndirectOutputScale: 1
|
||||
m_AlbedoBoost: 1
|
||||
m_EnvironmentLightingMode: 0
|
||||
m_EnableBakedLightmaps: 1
|
||||
m_EnableRealtimeLightmaps: 0
|
||||
m_LightmapEditorSettings:
|
||||
serializedVersion: 12
|
||||
m_Resolution: 2
|
||||
m_BakeResolution: 40
|
||||
m_AtlasSize: 1024
|
||||
m_AO: 0
|
||||
m_AOMaxDistance: 1
|
||||
m_CompAOExponent: 1
|
||||
m_CompAOExponentDirect: 0
|
||||
m_ExtractAmbientOcclusion: 0
|
||||
m_Padding: 2
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_LightmapsBakeMode: 1
|
||||
m_TextureCompression: 1
|
||||
m_ReflectionCompression: 2
|
||||
m_MixedBakeMode: 2
|
||||
m_BakeBackend: 1
|
||||
m_PVRSampling: 1
|
||||
m_PVRDirectSampleCount: 32
|
||||
m_PVRSampleCount: 500
|
||||
m_PVRBounces: 2
|
||||
m_PVREnvironmentSampleCount: 500
|
||||
m_PVREnvironmentReferencePointCount: 2048
|
||||
m_PVRFilteringMode: 2
|
||||
m_PVRDenoiserTypeDirect: 0
|
||||
m_PVRDenoiserTypeIndirect: 0
|
||||
m_PVRDenoiserTypeAO: 0
|
||||
m_PVRFilterTypeDirect: 0
|
||||
m_PVRFilterTypeIndirect: 0
|
||||
m_PVRFilterTypeAO: 0
|
||||
m_PVREnvironmentMIS: 0
|
||||
m_PVRCulling: 1
|
||||
m_PVRFilteringGaussRadiusDirect: 1
|
||||
m_PVRFilteringGaussRadiusIndirect: 5
|
||||
m_PVRFilteringGaussRadiusAO: 2
|
||||
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
|
||||
m_PVRFilteringAtrousPositionSigmaIndirect: 2
|
||||
m_PVRFilteringAtrousPositionSigmaAO: 1
|
||||
m_ExportTrainingData: 0
|
||||
m_TrainingDataDestination: TrainingData
|
||||
m_LightProbeSampleCountMultiplier: 4
|
||||
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_LightingSettings: {fileID: 0}
|
||||
--- !u!196 &4
|
||||
NavMeshSettings:
|
||||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
serializedVersion: 3
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
agentSlope: 45
|
||||
agentClimb: 0.4
|
||||
ledgeDropHeight: 0
|
||||
maxJumpAcrossDistance: 0
|
||||
minRegionArea: 2
|
||||
manualCellSize: 0
|
||||
cellSize: 0.16666667
|
||||
manualTileSize: 0
|
||||
tileSize: 256
|
||||
buildHeightMesh: 0
|
||||
maxJobWorkers: 0
|
||||
preserveTilesOutsideBounds: 0
|
||||
debug:
|
||||
m_Flags: 0
|
||||
m_NavMeshData: {fileID: 0}
|
||||
--- !u!1 &234746648
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 234746650}
|
||||
- component: {fileID: 234746649}
|
||||
m_Layer: 0
|
||||
m_Name: App
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &234746649
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 234746648}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3db5aef391bb2874c8afac0550553818, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::App
|
||||
startScript: 475
|
||||
--- !u!4 &234746650
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 234746648}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &705507993
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 705507995}
|
||||
- component: {fileID: 705507994}
|
||||
m_Layer: 0
|
||||
m_Name: Directional Light
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!108 &705507994
|
||||
Light:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 705507993}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 11
|
||||
m_Type: 1
|
||||
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
|
||||
m_Intensity: 1
|
||||
m_Range: 10
|
||||
m_SpotAngle: 30
|
||||
m_InnerSpotAngle: 21.80208
|
||||
m_CookieSize: 10
|
||||
m_Shadows:
|
||||
m_Type: 2
|
||||
m_Resolution: -1
|
||||
m_CustomResolution: -1
|
||||
m_Strength: 1
|
||||
m_Bias: 0.05
|
||||
m_NormalBias: 0.4
|
||||
m_NearPlane: 0.2
|
||||
m_CullingMatrixOverride:
|
||||
e00: 1
|
||||
e01: 0
|
||||
e02: 0
|
||||
e03: 0
|
||||
e10: 0
|
||||
e11: 1
|
||||
e12: 0
|
||||
e13: 0
|
||||
e20: 0
|
||||
e21: 0
|
||||
e22: 1
|
||||
e23: 0
|
||||
e30: 0
|
||||
e31: 0
|
||||
e32: 0
|
||||
e33: 1
|
||||
m_UseCullingMatrixOverride: 0
|
||||
m_Cookie: {fileID: 0}
|
||||
m_DrawHalo: 0
|
||||
m_Flare: {fileID: 0}
|
||||
m_RenderMode: 0
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_RenderingLayerMask: 1
|
||||
m_Lightmapping: 1
|
||||
m_LightShadowCasterMode: 0
|
||||
m_AreaSize: {x: 1, y: 1}
|
||||
m_BounceIntensity: 1
|
||||
m_ColorTemperature: 6570
|
||||
m_UseColorTemperature: 0
|
||||
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_UseBoundingSphereOverride: 0
|
||||
m_UseViewFrustumForShadowCasterCull: 1
|
||||
m_ForceVisible: 0
|
||||
m_ShadowRadius: 0
|
||||
m_ShadowAngle: 0
|
||||
m_LightUnit: 1
|
||||
m_LuxAtDistance: 1
|
||||
m_EnableSpotReflector: 1
|
||||
--- !u!4 &705507995
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 705507993}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
|
||||
m_LocalPosition: {x: 0, y: 3, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
|
||||
--- !u!1 &963194225
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 963194228}
|
||||
- component: {fileID: 963194227}
|
||||
- component: {fileID: 963194226}
|
||||
- component: {fileID: 963194229}
|
||||
m_Layer: 0
|
||||
m_Name: Main Camera
|
||||
m_TagString: MainCamera
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!81 &963194226
|
||||
AudioListener:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 963194225}
|
||||
m_Enabled: 1
|
||||
--- !u!20 &963194227
|
||||
Camera:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 963194225}
|
||||
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: 2000
|
||||
field of view: 70
|
||||
orthographic: 0
|
||||
orthographic size: 20
|
||||
m_Depth: -1
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
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!4 &963194228
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 963194225}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.1648186, y: 0.5728301, z: -0.118824564, w: -0.7940915}
|
||||
m_LocalPosition: {x: 71.3, y: 10, z: -3.85}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 40.1, y: 320.22, z: 0}
|
||||
--- !u!114 &963194229
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 963194225}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: c7a97f909cd8e0d4899d3988adde47a0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::CameraController
|
||||
cameraHeight: 1000
|
||||
cameraDistance: 1000
|
||||
rotationSpeed: 5
|
||||
cameraTargetPoint: {x: 0, y: 0, z: 0}
|
||||
sourceX: 0
|
||||
sourceY: 0
|
||||
sourceZ: 0
|
||||
currentCameraRotation: 0
|
||||
--- !u!1 &1706248201
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1706248206}
|
||||
- component: {fileID: 1706248205}
|
||||
- component: {fileID: 1706248204}
|
||||
- component: {fileID: 1706248203}
|
||||
- component: {fileID: 1706248202}
|
||||
m_Layer: 5
|
||||
m_Name: UIManager
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &1706248202
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1706248201}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 33033c46e8e99f845bfd7afb98f8a71c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::UIManager
|
||||
messageWindowPrefab: {fileID: 2822395652576896841, guid: e57650a46dd5368409d1337a68cc6153, type: 3}
|
||||
slideDuration: 0.3
|
||||
slideCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 1
|
||||
inSlope: 2
|
||||
outSlope: 2
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
cursorAnimationSpeed: 5
|
||||
cursorAnimationHeight: 10
|
||||
messageText: {fileID: 0}
|
||||
shadowText: {fileID: 0}
|
||||
userSelectionVariant: 0
|
||||
--- !u!114 &1706248203
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1706248201}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!114 &1706248204
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1706248201}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 1
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!223 &1706248205
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1706248201}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 0
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 25
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!224 &1706248206
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1706248201}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0, y: 0, z: 0}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
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: 0}
|
||||
m_Pivot: {x: 0, y: 0}
|
||||
--- !u!1 &2086735764
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2086735768}
|
||||
- component: {fileID: 2086735767}
|
||||
- component: {fileID: 2086735766}
|
||||
- component: {fileID: 2086735765}
|
||||
m_Layer: 0
|
||||
m_Name: Cube
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!65 &2086735765
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2086735764}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &2086735766
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2086735764}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!33 &2086735767
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2086735764}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!4 &2086735768
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2086735764}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1660057539 &9223372036854775807
|
||||
SceneRoots:
|
||||
m_ObjectHideFlags: 0
|
||||
m_Roots:
|
||||
- {fileID: 234746650}
|
||||
- {fileID: 1706248206}
|
||||
- {fileID: 963194228}
|
||||
- {fileID: 705507995}
|
||||
- {fileID: 2086735768}
|
||||
7
Assets/Scenes/MainApp.unity.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9fc0d4010bbf28b4594072e72b8655ab
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/StreamingAssets.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4cadfe5540b490945af6c8b705d326ce
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/StreamingAssets/Events.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ddc971b1d6187b64c8c395851162971e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/181.TRNSL
Normal file
7
Assets/StreamingAssets/Events/181.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 52ef54153b6d0b04a94c261ea48035a2
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/182.TRNSL
Normal file
7
Assets/StreamingAssets/Events/182.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 77fbf63e2e1c6c84b976ebdd3f8c03bd
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/183.TRNSL
Normal file
7
Assets/StreamingAssets/Events/183.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1825a1102e70ac04fa9d9c34ae50e247
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/184.TRNSL
Normal file
7
Assets/StreamingAssets/Events/184.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fb0f7816c1d67564083499463a66d9d4
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/185.TRNSL
Normal file
7
Assets/StreamingAssets/Events/185.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f58a0aacbd0511f4093fe458ccde19a2
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/186.TRNSL
Normal file
7
Assets/StreamingAssets/Events/186.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8f989cad34b23c443b67e48e7ca85143
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/187.TRNSL
Normal file
7
Assets/StreamingAssets/Events/187.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e8c68dbc53ace9d4ebaf0d9edaf12b4d
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/188.TRNSL
Normal file
7
Assets/StreamingAssets/Events/188.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 652ae68536c75ee43b416bbe4ab9e3f4
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/189.TRNSL
Normal file
7
Assets/StreamingAssets/Events/189.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9eb0eb7fc6d2def41845f4cf24d1d6f7
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/190.TRNSL
Normal file
7
Assets/StreamingAssets/Events/190.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7baa847ff0755e44ca0e3f220068ffcb
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/191.TRNSL
Normal file
7
Assets/StreamingAssets/Events/191.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5faaef2acc9bd434eb484cc638efd929
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/StreamingAssets/Events/192.TRNSL
Normal file
7
Assets/StreamingAssets/Events/192.TRNSL.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3f4684a9b6618804eab083809b210c93
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||