Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b18c59450c | |||
| 01e27bde2c | |||
| 16e6328aa1 |
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a3b8c1d9e2f4a5b6c7d8e9f0a1b2c3d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,20 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 8cd851b86da394b9ca06595f889a49b3, type: 3}
|
||||
m_Name: CozyCollectorSpriteLibrary
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.CozyCollectorSpriteLibrary
|
||||
background: {fileID: 21300000, guid: e8139865590c408789e137275b78e239, type: 3}
|
||||
player: {fileID: 21300000, guid: 695606af95a0452790cf9228c0cc9f76, type: 3}
|
||||
moonberry: {fileID: 21300000, guid: 8b3f9a4a409e412780aa51d52bfdb7b0, type: 3}
|
||||
acorn: {fileID: 21300000, guid: ca0ac79e8cb24691b33208b45e68fe13, type: 3}
|
||||
star: {fileID: 21300000, guid: b0d70332788c4ff7831161da4a2e71ff, type: 3}
|
||||
snack: {fileID: 21300000, guid: c41fcc3b35c944ffa18a34b6c4dc2cd6, type: 3}
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 06fcf2ebf537145de9bab548922829e1
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,60 +0,0 @@
|
||||
using LiveOpsExamples;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace LiveOpsExamples.Editor
|
||||
{
|
||||
/// <summary>
|
||||
/// Bakes the Cozy Collector ScriptableObject assets. Idempotent: writes to
|
||||
/// fixed asset paths and overwrites whatever is already there.
|
||||
/// </summary>
|
||||
public static partial class CozyCollectorBake
|
||||
{
|
||||
private const string SpriteLibraryAssetPath = "Assets/LiveOpsExamples/CozyCollectorSpriteLibrary.asset";
|
||||
private const string SpriteFolderPath = "Assets/LiveOpsExamples/Sprites";
|
||||
|
||||
[MenuItem("Tools/LiveOps/Bake Cozy Collector Assets")]
|
||||
public static void BakeAssets()
|
||||
{
|
||||
var library = AssetDatabase.LoadAssetAtPath<CozyCollectorSpriteLibrary>(SpriteLibraryAssetPath);
|
||||
if (library == null)
|
||||
{
|
||||
library = ScriptableObject.CreateInstance<CozyCollectorSpriteLibrary>();
|
||||
AssetDatabase.CreateAsset(library, SpriteLibraryAssetPath);
|
||||
}
|
||||
|
||||
var serialized = new SerializedObject(library);
|
||||
AssignLibrarySprite(serialized, "background", "cozy-camp-bg.png");
|
||||
AssignLibrarySprite(serialized, "player", "player.png");
|
||||
AssignLibrarySprite(serialized, "moonberry", "moonberry.png");
|
||||
AssignLibrarySprite(serialized, "acorn", "acorn.png");
|
||||
AssignLibrarySprite(serialized, "star", "star.png");
|
||||
AssignLibrarySprite(serialized, "snack", "snack.png");
|
||||
serialized.ApplyModifiedPropertiesWithoutUndo();
|
||||
|
||||
EditorUtility.SetDirty(library);
|
||||
AssetDatabase.SaveAssets();
|
||||
Debug.Log($"Cozy Collector sprite library baked: {SpriteLibraryAssetPath}");
|
||||
}
|
||||
|
||||
private static void AssignLibrarySprite(SerializedObject serialized, string fieldName, string fileName)
|
||||
{
|
||||
var spritePath = $"{SpriteFolderPath}/{fileName}";
|
||||
var sprite = AssetDatabase.LoadAssetAtPath<Sprite>(spritePath);
|
||||
if (sprite == null)
|
||||
{
|
||||
Debug.LogError($"CozyCollectorBake: sprite not found at {spritePath}");
|
||||
return;
|
||||
}
|
||||
|
||||
var property = serialized.FindProperty(fieldName);
|
||||
if (property == null)
|
||||
{
|
||||
Debug.LogError($"CozyCollectorBake: field '{fieldName}' not found on {nameof(CozyCollectorSpriteLibrary)}");
|
||||
return;
|
||||
}
|
||||
|
||||
property.objectReferenceValue = sprite;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 640a29c33f5384caebacc7de21235ab8
|
||||
@@ -1,166 +0,0 @@
|
||||
using System.IO;
|
||||
using LiveOpsExamples;
|
||||
using TMPro;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace LiveOpsExamples.Editor
|
||||
{
|
||||
/// <summary>
|
||||
/// Bakes the Cozy Collector gameplay prefabs. Idempotent: every prefab is
|
||||
/// rebuilt from code and saved over the same fixed asset path.
|
||||
/// </summary>
|
||||
public static partial class CozyCollectorBake
|
||||
{
|
||||
private const string PrefabFolderPath = "Assets/LiveOpsExamples/Prefabs";
|
||||
private const string SnackSpritePath = "Assets/LiveOpsExamples/Sprites/snack.png";
|
||||
|
||||
private static readonly Color AccentColor = ParseHexColor("#FFD27D");
|
||||
|
||||
[MenuItem("Tools/LiveOps/Bake Cozy Collector Prefabs")]
|
||||
public static void BakePrefabs()
|
||||
{
|
||||
EnsureAssetFolder(PrefabFolderPath);
|
||||
|
||||
SaveBakedPrefab(BuildSnackPrefab(), $"{PrefabFolderPath}/Snack.prefab");
|
||||
SaveBakedPrefab(BuildScorePopupPrefab(), $"{PrefabFolderPath}/ScorePopup.prefab");
|
||||
SaveBakedPrefab(BuildCollectBurstPrefab(), $"{PrefabFolderPath}/CollectBurst.prefab");
|
||||
|
||||
AssetDatabase.SaveAssets();
|
||||
Debug.Log($"Cozy Collector prefabs baked under {PrefabFolderPath}");
|
||||
}
|
||||
|
||||
private static GameObject BuildSnackPrefab()
|
||||
{
|
||||
var go = new GameObject("Snack");
|
||||
|
||||
var collider = go.AddComponent<CircleCollider2D>();
|
||||
collider.isTrigger = true;
|
||||
collider.radius = 0.3f;
|
||||
|
||||
var renderer = go.AddComponent<SpriteRenderer>();
|
||||
var sprite = AssetDatabase.LoadAssetAtPath<Sprite>(SnackSpritePath);
|
||||
if (sprite == null)
|
||||
{
|
||||
Debug.LogError($"CozyCollectorBake: sprite not found at {SnackSpritePath}");
|
||||
}
|
||||
else
|
||||
{
|
||||
renderer.sprite = sprite;
|
||||
// Phaser setDisplaySize(52, 52) at 100 PPU -> 0.52 x 0.52 world units.
|
||||
var scale = new Vector3(
|
||||
0.52f / sprite.bounds.size.x,
|
||||
0.52f / sprite.bounds.size.y,
|
||||
1f);
|
||||
go.transform.localScale = scale;
|
||||
// Phaser pickup radius = 0.42 * 52px ~= 0.22 world units; a circle
|
||||
// collider's world radius scales by the largest transform axis.
|
||||
collider.radius = 0.22f / Mathf.Max(scale.x, scale.y);
|
||||
}
|
||||
|
||||
go.AddComponent<Snack>();
|
||||
return go;
|
||||
}
|
||||
|
||||
private static GameObject BuildScorePopupPrefab()
|
||||
{
|
||||
var go = new GameObject("ScorePopup");
|
||||
|
||||
var label = go.AddComponent<TextMeshPro>();
|
||||
AssignDefaultFont(label);
|
||||
label.text = "+10";
|
||||
label.fontSize = 2.5f;
|
||||
label.alignment = TextAlignmentOptions.Center;
|
||||
label.color = Color.white;
|
||||
|
||||
var view = go.AddComponent<ScorePopupView>();
|
||||
WireObjectFields(view, ("label", label));
|
||||
return go;
|
||||
}
|
||||
|
||||
private static GameObject BuildCollectBurstPrefab()
|
||||
{
|
||||
var go = new GameObject("CollectBurst");
|
||||
var particles = go.AddComponent<ParticleSystem>();
|
||||
|
||||
var main = particles.main;
|
||||
main.duration = 0.5f;
|
||||
main.loop = false;
|
||||
main.playOnAwake = true;
|
||||
main.startLifetime = 0.45f;
|
||||
main.startSpeed = 2f;
|
||||
main.startSize = 0.15f;
|
||||
main.gravityModifier = 0f;
|
||||
main.startColor = AccentColor;
|
||||
main.stopAction = ParticleSystemStopAction.Destroy;
|
||||
|
||||
var emission = particles.emission;
|
||||
emission.rateOverTime = 0f;
|
||||
emission.SetBursts(new[] { new ParticleSystem.Burst(0f, 9) });
|
||||
|
||||
var shape = particles.shape;
|
||||
shape.shapeType = ParticleSystemShapeType.Sphere;
|
||||
shape.radius = 0.1f;
|
||||
|
||||
var renderer = particles.GetComponent<ParticleSystemRenderer>();
|
||||
renderer.renderMode = ParticleSystemRenderMode.Billboard;
|
||||
var material = AssetDatabase.GetBuiltinExtraResource<Material>("Default-Particle.mat");
|
||||
if (material == null)
|
||||
material = AssetDatabase.GetBuiltinExtraResource<Material>("Sprites-Default.mat");
|
||||
if (material == null)
|
||||
Debug.LogWarning("CozyCollectorBake: no builtin particle material resolved, assign one manually.");
|
||||
else
|
||||
renderer.sharedMaterial = material;
|
||||
|
||||
return go;
|
||||
}
|
||||
|
||||
private static Color ParseHexColor(string hex)
|
||||
{
|
||||
return ColorUtility.TryParseHtmlString(hex, out var color) ? color : Color.magenta;
|
||||
}
|
||||
|
||||
private static void EnsureAssetFolder(string folderPath)
|
||||
{
|
||||
if (AssetDatabase.IsValidFolder(folderPath))
|
||||
return;
|
||||
|
||||
var parent = Path.GetDirectoryName(folderPath)?.Replace('\\', '/');
|
||||
if (!string.IsNullOrEmpty(parent))
|
||||
EnsureAssetFolder(parent);
|
||||
AssetDatabase.CreateFolder(parent, Path.GetFileName(folderPath));
|
||||
}
|
||||
|
||||
private static void SaveBakedPrefab(GameObject go, string path)
|
||||
{
|
||||
PrefabUtility.SaveAsPrefabAsset(go, path);
|
||||
Object.DestroyImmediate(go);
|
||||
}
|
||||
|
||||
private static void WireObjectFields(Object component, params (string Field, Object Value)[] fields)
|
||||
{
|
||||
var serialized = new SerializedObject(component);
|
||||
foreach (var (field, value) in fields)
|
||||
{
|
||||
var property = serialized.FindProperty(field);
|
||||
if (property == null)
|
||||
{
|
||||
Debug.LogError($"CozyCollectorBake: field '{field}' not found on {component.GetType().Name}");
|
||||
continue;
|
||||
}
|
||||
|
||||
property.objectReferenceValue = value;
|
||||
}
|
||||
|
||||
serialized.ApplyModifiedPropertiesWithoutUndo();
|
||||
}
|
||||
|
||||
private static void AssignDefaultFont(TMP_Text text)
|
||||
{
|
||||
if (TMP_Settings.defaultFontAsset != null)
|
||||
text.font = TMP_Settings.defaultFontAsset;
|
||||
else
|
||||
Debug.LogWarning("CozyCollectorBake: TMP default font asset is not set, assign a font manually.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5d0f038b4a90c45a8a95bf4f37221e78
|
||||
@@ -1,258 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using RudderSdk.Unity;
|
||||
using UnityEditor;
|
||||
using UnityEditor.SceneManagement;
|
||||
using UnityEngine;
|
||||
|
||||
namespace LiveOpsExamples.Editor
|
||||
{
|
||||
/// <summary>
|
||||
/// Bakes the Cozy Collector demo scene (world + camera + game setup) and saves it
|
||||
/// to <see cref="ScenePath"/>. UI is built by the CozyCollectorBake.Ui part.
|
||||
/// Re-running overwrites the same scene asset.
|
||||
/// </summary>
|
||||
public static partial class CozyCollectorBake
|
||||
{
|
||||
private const string ScenePath = "Assets/LiveOpsExamples/LiveOpsCozyCollector.unity";
|
||||
private const string BackgroundSpritePath = "Assets/LiveOpsExamples/Sprites/cozy-camp-bg.png";
|
||||
private const string PlayerSpritePath = "Assets/LiveOpsExamples/Sprites/player.png";
|
||||
private const string ConfigurationPath = "Assets/LiveOpsLocal.asset";
|
||||
private const string SpriteLibraryPath = "Assets/LiveOpsExamples/CozyCollectorSpriteLibrary.asset";
|
||||
private const string SnackPrefabPath = "Assets/LiveOpsExamples/Prefabs/Snack.prefab";
|
||||
private const string ScorePopupPrefabPath = "Assets/LiveOpsExamples/Prefabs/ScorePopup.prefab";
|
||||
private const string CollectBurstPrefabPath = "Assets/LiveOpsExamples/Prefabs/CollectBurst.prefab";
|
||||
|
||||
// The Phaser field is 1280x720 px at 100 PPU -> 12.8x7.2 world units.
|
||||
private const float FieldWidthUnits = 12.8f;
|
||||
private const float FieldHeightUnits = 7.2f;
|
||||
|
||||
private static readonly Color CameraBackgroundColor = new Color(0.10f, 0.08f, 0.13f);
|
||||
|
||||
[MenuItem("Tools/LiveOps/Bake Cozy Collector (All)")]
|
||||
public static void BakeAll()
|
||||
{
|
||||
BakeAssets();
|
||||
BakePrefabs();
|
||||
BakeScene();
|
||||
AssetDatabase.SaveAssets();
|
||||
}
|
||||
|
||||
[MenuItem("Tools/LiveOps/Bake Cozy Collector Scene")]
|
||||
public static void BakeScene()
|
||||
{
|
||||
var scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single);
|
||||
|
||||
BuildSceneCamera();
|
||||
BuildSceneBackground();
|
||||
|
||||
var world = BuildSceneWorld(out var playerRenderer, out var spawner, out var snacksParent);
|
||||
var controller = BuildSceneGameSetup(world);
|
||||
|
||||
WireSceneWorld(world, playerRenderer, spawner, controller);
|
||||
WireSceneSpawner(spawner, snacksParent);
|
||||
|
||||
BuildUi(controller, world);
|
||||
|
||||
EditorSceneManager.SaveScene(scene, ScenePath);
|
||||
AddSceneToBuildSettings();
|
||||
AssetDatabase.SaveAssets();
|
||||
|
||||
Debug.Log($"[CozyCollectorBake] Scene saved to {ScenePath}.");
|
||||
}
|
||||
|
||||
private static void BuildSceneCamera()
|
||||
{
|
||||
var cameraGo = new GameObject("Main Camera");
|
||||
cameraGo.tag = "MainCamera";
|
||||
cameraGo.transform.position = new Vector3(0f, 0f, -10f);
|
||||
|
||||
var camera = cameraGo.AddComponent<Camera>();
|
||||
camera.orthographic = true;
|
||||
camera.orthographicSize = FieldHeightUnits / 2f;
|
||||
camera.clearFlags = CameraClearFlags.SolidColor;
|
||||
camera.backgroundColor = CameraBackgroundColor;
|
||||
// Game field occupies the left 75% of the screen; the right side hosts the UI rail.
|
||||
camera.rect = new Rect(0f, 0f, 0.75f, 1f);
|
||||
}
|
||||
|
||||
private static void BuildSceneBackground()
|
||||
{
|
||||
var backgroundGo = new GameObject("Background");
|
||||
var renderer = backgroundGo.AddComponent<SpriteRenderer>();
|
||||
renderer.sortingOrder = -10;
|
||||
|
||||
var sprite = AssetDatabase.LoadAssetAtPath<Sprite>(BackgroundSpritePath);
|
||||
if (sprite == null)
|
||||
{
|
||||
Debug.LogError($"[CozyCollectorBake] Background sprite not found at {BackgroundSpritePath}.");
|
||||
return;
|
||||
}
|
||||
|
||||
renderer.sprite = sprite;
|
||||
var size = sprite.bounds.size;
|
||||
backgroundGo.transform.localScale = new Vector3(
|
||||
size.x > 0f ? FieldWidthUnits / size.x : 1f,
|
||||
size.y > 0f ? FieldHeightUnits / size.y : 1f,
|
||||
1f);
|
||||
}
|
||||
|
||||
private static GameWorld BuildSceneWorld(
|
||||
out SpriteRenderer playerRenderer,
|
||||
out SnackSpawner spawner,
|
||||
out Transform snacksParent)
|
||||
{
|
||||
var worldGo = new GameObject("World");
|
||||
var world = worldGo.AddComponent<GameWorld>();
|
||||
|
||||
var playerGo = new GameObject("Player");
|
||||
playerGo.transform.SetParent(worldGo.transform, false);
|
||||
playerRenderer = playerGo.AddComponent<SpriteRenderer>();
|
||||
playerRenderer.sprite = AssetDatabase.LoadAssetAtPath<Sprite>(PlayerSpritePath);
|
||||
|
||||
var colliderRadius = 0.3f;
|
||||
if (playerRenderer.sprite == null)
|
||||
{
|
||||
Debug.LogError($"[CozyCollectorBake] Player sprite not found at {PlayerSpritePath}.");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Phaser setDisplaySize(82, 108) at 100 PPU -> 0.82 x 1.08 world units.
|
||||
var bounds = playerRenderer.sprite.bounds.size;
|
||||
var scale = new Vector3(0.82f / bounds.x, 1.08f / bounds.y, 1f);
|
||||
playerGo.transform.localScale = scale;
|
||||
// Phaser body is ~0.45x0.55 world units; a circle collider's world
|
||||
// radius scales by the largest transform axis.
|
||||
colliderRadius = 0.24f / Mathf.Max(scale.x, scale.y);
|
||||
}
|
||||
|
||||
var body = playerGo.AddComponent<Rigidbody2D>();
|
||||
body.bodyType = RigidbodyType2D.Kinematic;
|
||||
body.simulated = true;
|
||||
body.gravityScale = 0f;
|
||||
|
||||
// Non-trigger collider so the snacks' trigger colliders fire OnTriggerEnter2D.
|
||||
var collider = playerGo.AddComponent<CircleCollider2D>();
|
||||
collider.radius = colliderRadius;
|
||||
collider.isTrigger = false;
|
||||
|
||||
var snacksGo = new GameObject("Snacks");
|
||||
snacksGo.transform.SetParent(worldGo.transform, false);
|
||||
snacksParent = snacksGo.transform;
|
||||
|
||||
var spawnerGo = new GameObject("Spawner");
|
||||
spawnerGo.transform.SetParent(worldGo.transform, false);
|
||||
spawner = spawnerGo.AddComponent<SnackSpawner>();
|
||||
|
||||
return world;
|
||||
}
|
||||
|
||||
private static CozyCollectorController BuildSceneGameSetup(GameWorld world)
|
||||
{
|
||||
var setupGo = new GameObject("GameSetup");
|
||||
|
||||
var rudder = setupGo.AddComponent<Rudder>();
|
||||
var configuration = AssetDatabase.LoadAssetAtPath<RudderConfiguration>(ConfigurationPath);
|
||||
if (configuration == null)
|
||||
{
|
||||
Debug.LogError($"[CozyCollectorBake] RudderConfiguration not found at {ConfigurationPath}.");
|
||||
}
|
||||
else
|
||||
{
|
||||
SetSceneReference(rudder, "_configuration", configuration);
|
||||
}
|
||||
|
||||
var controller = setupGo.AddComponent<CozyCollectorController>();
|
||||
SetSceneReference(controller, "world", world);
|
||||
return controller;
|
||||
}
|
||||
|
||||
private static void WireSceneWorld(
|
||||
GameWorld world,
|
||||
SpriteRenderer playerRenderer,
|
||||
SnackSpawner spawner,
|
||||
CozyCollectorController controller)
|
||||
{
|
||||
SetSceneReference(world, "player", playerRenderer);
|
||||
SetSceneReference(world, "spawner", spawner);
|
||||
SetSceneReference(world, "controller", controller);
|
||||
// moveMin/moveMax keep the component defaults (-6,-3.2)/(6,3.2).
|
||||
|
||||
var scorePopupPrefab = LoadScenePrefabComponent<ScorePopupView>(ScorePopupPrefabPath);
|
||||
if (scorePopupPrefab != null)
|
||||
{
|
||||
SetSceneReference(world, "scorePopupPrefab", scorePopupPrefab);
|
||||
}
|
||||
|
||||
var collectBurstPrefab = LoadScenePrefabComponent<ParticleSystem>(CollectBurstPrefabPath);
|
||||
if (collectBurstPrefab != null)
|
||||
{
|
||||
SetSceneReference(world, "collectBurstPrefab", collectBurstPrefab);
|
||||
}
|
||||
}
|
||||
|
||||
private static void WireSceneSpawner(SnackSpawner spawner, Transform snacksParent)
|
||||
{
|
||||
var snackPrefab = LoadScenePrefabComponent<Snack>(SnackPrefabPath);
|
||||
if (snackPrefab != null)
|
||||
{
|
||||
SetSceneReference(spawner, "prefab", snackPrefab);
|
||||
}
|
||||
|
||||
var library = AssetDatabase.LoadAssetAtPath<CozyCollectorSpriteLibrary>(SpriteLibraryPath);
|
||||
if (library == null)
|
||||
{
|
||||
Debug.LogError($"[CozyCollectorBake] Sprite library not found at {SpriteLibraryPath}. " +
|
||||
"Run Tools/LiveOps/Bake Cozy Collector (All) first.");
|
||||
}
|
||||
else
|
||||
{
|
||||
SetSceneReference(spawner, "library", library);
|
||||
}
|
||||
|
||||
SetSceneReference(spawner, "parent", snacksParent);
|
||||
// spawnMin/spawnMax keep the component defaults.
|
||||
}
|
||||
|
||||
private static void AddSceneToBuildSettings()
|
||||
{
|
||||
var scenes = new List<EditorBuildSettingsScene>(EditorBuildSettings.scenes);
|
||||
foreach (var entry in scenes)
|
||||
{
|
||||
if (entry.path == ScenePath)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
scenes.Add(new EditorBuildSettingsScene(ScenePath, true));
|
||||
EditorBuildSettings.scenes = scenes.ToArray();
|
||||
}
|
||||
|
||||
private static T LoadScenePrefabComponent<T>(string path) where T : Component
|
||||
{
|
||||
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(path);
|
||||
var component = prefab != null ? prefab.GetComponent<T>() : null;
|
||||
if (component == null)
|
||||
{
|
||||
Debug.LogError($"[CozyCollectorBake] Prefab with {typeof(T).Name} not found at {path}. " +
|
||||
"Run Tools/LiveOps/Bake Cozy Collector (All) first; the scene is saved with empty references.");
|
||||
}
|
||||
|
||||
return component;
|
||||
}
|
||||
|
||||
private static void SetSceneReference(Object target, string propertyName, Object value)
|
||||
{
|
||||
var serialized = new SerializedObject(target);
|
||||
var property = serialized.FindProperty(propertyName);
|
||||
if (property == null)
|
||||
{
|
||||
Debug.LogError($"[CozyCollectorBake] Property '{propertyName}' not found on {target.GetType().Name}.");
|
||||
return;
|
||||
}
|
||||
|
||||
property.objectReferenceValue = value;
|
||||
serialized.ApplyModifiedPropertiesWithoutUndo();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9b06747933b8c458b8262e8516634b14
|
||||
@@ -1,144 +0,0 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using LiveOpsExamples;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace LiveOpsExamples.Editor
|
||||
{
|
||||
/// <summary>
|
||||
/// Builds the Cozy Collector UI: a GameObject with a PanelRenderer (PanelSettings +
|
||||
/// CozyCollectorUI.uxml) and all panel components wired through serialized
|
||||
/// references. The PanelSettings asset is created programmatically when missing.
|
||||
/// Called from <see cref="CozyCollectorBake.BakeScene"/>.
|
||||
/// </summary>
|
||||
public static partial class CozyCollectorBake
|
||||
{
|
||||
private const string UiFolderPath = "Assets/LiveOpsExamples/UI";
|
||||
private const string UiPanelSettingsPath = UiFolderPath + "/CozyCollectorPanelSettings.asset";
|
||||
private const string UiDocumentAssetPath = UiFolderPath + "/CozyCollectorUI.uxml";
|
||||
private const string UiLogRowTemplatePath = UiFolderPath + "/LogRow.uxml";
|
||||
private const string UiToastTemplatePath = UiFolderPath + "/ToastRow.uxml";
|
||||
private const string UiShopOfferRowTemplatePath = UiFolderPath + "/ShopOfferRow.uxml";
|
||||
private const string UiBackpackItemRowTemplatePath = UiFolderPath + "/BackpackItemRow.uxml";
|
||||
private const string UiLeaderboardRowTemplatePath = UiFolderPath + "/LeaderboardRow.uxml";
|
||||
|
||||
private static void BuildUi(CozyCollectorController controller, GameWorld world)
|
||||
{
|
||||
var panelSettings = GetOrCreatePanelSettings();
|
||||
var visualTree = LoadUiAsset<VisualTreeAsset>(UiDocumentAssetPath);
|
||||
|
||||
var uiGo = new GameObject("UI");
|
||||
var panelRenderer = uiGo.AddComponent<PanelRenderer>();
|
||||
panelRenderer.panelSettings = panelSettings;
|
||||
if (visualTree != null)
|
||||
{
|
||||
panelRenderer.visualTreeAsset = visualTree;
|
||||
}
|
||||
|
||||
WirePanel(uiGo.AddComponent<SessionCardPanel>(), panelRenderer, controller);
|
||||
WirePanel(uiGo.AddComponent<RemoteConfigPanel>(), panelRenderer, controller);
|
||||
|
||||
var eventInspector = uiGo.AddComponent<EventInspectorPanel>();
|
||||
WirePanel(eventInspector, panelRenderer, controller);
|
||||
WireTemplate(eventInspector, "logRowTemplate", UiLogRowTemplatePath);
|
||||
|
||||
var hud = uiGo.AddComponent<HudPanel>();
|
||||
WirePanel(hud, panelRenderer, controller);
|
||||
SetSceneReference(hud, "world", world);
|
||||
|
||||
var toasts = uiGo.AddComponent<ToastsPanel>();
|
||||
WirePanel(toasts, panelRenderer, controller);
|
||||
WireTemplate(toasts, "toastTemplate", UiToastTemplatePath);
|
||||
|
||||
WirePanel(uiGo.AddComponent<BootOverlayPanel>(), panelRenderer, controller);
|
||||
WirePanel(uiGo.AddComponent<SetupOverlayPanel>(), panelRenderer, controller);
|
||||
|
||||
var shop = uiGo.AddComponent<ShopModalPanel>();
|
||||
WirePanel(shop, panelRenderer, controller);
|
||||
WireTemplate(shop, "shopOfferRowTemplate", UiShopOfferRowTemplatePath);
|
||||
|
||||
var backpack = uiGo.AddComponent<BackpackModalPanel>();
|
||||
WirePanel(backpack, panelRenderer, controller);
|
||||
WireTemplate(backpack, "backpackItemRowTemplate", UiBackpackItemRowTemplatePath);
|
||||
var spriteLibrary = AssetDatabase.LoadAssetAtPath<CozyCollectorSpriteLibrary>(SpriteLibraryPath);
|
||||
if (spriteLibrary == null)
|
||||
{
|
||||
Debug.LogError($"[CozyCollectorBake] Sprite library not found at {SpriteLibraryPath}. " +
|
||||
"Run Tools/LiveOps/Bake Cozy Collector (All) first.");
|
||||
}
|
||||
else
|
||||
{
|
||||
SetSceneReference(backpack, "spriteLibrary", spriteLibrary);
|
||||
}
|
||||
|
||||
WirePanel(uiGo.AddComponent<OfferModalPanel>(), panelRenderer, controller);
|
||||
|
||||
var roundResult = uiGo.AddComponent<RoundResultModalPanel>();
|
||||
WirePanel(roundResult, panelRenderer, controller);
|
||||
WireTemplate(roundResult, "leaderboardRowTemplate", UiLeaderboardRowTemplatePath);
|
||||
}
|
||||
|
||||
private static void WirePanel(MonoBehaviour panel, PanelRenderer panelRenderer, CozyCollectorController controller)
|
||||
{
|
||||
SetSceneReference(panel, "panelRenderer", panelRenderer);
|
||||
SetSceneReference(panel, "controller", controller);
|
||||
}
|
||||
|
||||
private static void WireTemplate(MonoBehaviour panel, string fieldName, string templatePath)
|
||||
{
|
||||
var template = LoadUiAsset<VisualTreeAsset>(templatePath);
|
||||
if (template != null)
|
||||
{
|
||||
SetSceneReference(panel, fieldName, template);
|
||||
}
|
||||
}
|
||||
|
||||
private static T LoadUiAsset<T>(string path) where T : Object
|
||||
{
|
||||
var asset = AssetDatabase.LoadAssetAtPath<T>(path);
|
||||
if (asset == null)
|
||||
{
|
||||
Debug.LogError($"[CozyCollectorBake] {typeof(T).Name} not found at {path}. " +
|
||||
"The scene is saved with an empty reference.");
|
||||
}
|
||||
|
||||
return asset;
|
||||
}
|
||||
|
||||
private static PanelSettings GetOrCreatePanelSettings()
|
||||
{
|
||||
var settings = AssetDatabase.LoadAssetAtPath<PanelSettings>(UiPanelSettingsPath);
|
||||
if (settings != null)
|
||||
{
|
||||
return settings;
|
||||
}
|
||||
|
||||
EnsureAssetFolder(UiFolderPath);
|
||||
|
||||
settings = ScriptableObject.CreateInstance<PanelSettings>();
|
||||
settings.scaleMode = PanelScaleMode.ScaleWithScreenSize;
|
||||
settings.referenceResolution = new Vector2Int(1600, 900);
|
||||
settings.screenMatchMode = PanelScreenMatchMode.MatchWidthOrHeight;
|
||||
settings.match = 0.5f;
|
||||
|
||||
var defaultTheme = LoadDefaultRuntimeTheme();
|
||||
if (defaultTheme != null)
|
||||
{
|
||||
settings.themeStyleSheet = defaultTheme;
|
||||
}
|
||||
|
||||
AssetDatabase.CreateAsset(settings, UiPanelSettingsPath);
|
||||
return settings;
|
||||
}
|
||||
|
||||
private static ThemeStyleSheet LoadDefaultRuntimeTheme()
|
||||
{
|
||||
var themeUtility = Type.GetType("UnityEditor.UIElements.ThemeUtility, UnityEditor.UIElementsModule");
|
||||
var property = themeUtility?.GetProperty("builtInDefaultRuntimeTheme", BindingFlags.Static | BindingFlags.NonPublic);
|
||||
return property?.GetValue(null) as ThemeStyleSheet;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4ffeef7dc98af46a8b8bf186f4e2073b
|
||||
@@ -1,950 +0,0 @@
|
||||
%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: 0}
|
||||
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: 2
|
||||
m_PVRSampling: 1
|
||||
m_PVRDirectSampleCount: 32
|
||||
m_PVRSampleCount: 512
|
||||
m_PVRBounces: 2
|
||||
m_PVREnvironmentSampleCount: 256
|
||||
m_PVREnvironmentReferencePointCount: 2048
|
||||
m_PVRFilteringMode: 1
|
||||
m_PVRDenoiserTypeDirect: 1
|
||||
m_PVRDenoiserTypeIndirect: 1
|
||||
m_PVRDenoiserTypeAO: 1
|
||||
m_PVRFilterTypeDirect: 0
|
||||
m_PVRFilterTypeIndirect: 0
|
||||
m_PVRFilterTypeAO: 0
|
||||
m_PVREnvironmentMIS: 1
|
||||
m_PVRCulling: 1
|
||||
m_PVRFilteringGaussRadiusDirect: 1
|
||||
m_PVRFilteringGaussRadiusIndirect: 1
|
||||
m_PVRFilteringGaussRadiusAO: 1
|
||||
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 &329179444
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 329179445}
|
||||
m_Layer: 0
|
||||
m_Name: Snacks
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &329179445
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 329179444}
|
||||
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: 616881063}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &616881061
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 616881063}
|
||||
- component: {fileID: 616881062}
|
||||
m_Layer: 0
|
||||
m_Name: World
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &616881062
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 616881061}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 952f52af0af8546eeab332b11e2e4bb7, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.GameWorld
|
||||
player: {fileID: 1781499121}
|
||||
spawner: {fileID: 1544944037}
|
||||
controller: {fileID: 853162496}
|
||||
scorePopupPrefab: {fileID: 2163815420330336319, guid: 77687e92645dc450d8f79fbb91face30,
|
||||
type: 3}
|
||||
collectBurstPrefab: {fileID: 4700352299658891627, guid: 9f08d0082395f4a36b1a41e5e929c33f,
|
||||
type: 3}
|
||||
moveMin: {x: -6, y: -3.2}
|
||||
moveMax: {x: 6, y: 3.2}
|
||||
--- !u!4 &616881063
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 616881061}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1781499118}
|
||||
- {fileID: 329179445}
|
||||
- {fileID: 1544944038}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &853162495
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 853162498}
|
||||
- component: {fileID: 853162497}
|
||||
- component: {fileID: 853162496}
|
||||
m_Layer: 0
|
||||
m_Name: GameSetup
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &853162496
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 853162495}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 05ab47060c2ef4476800002c4a956b85, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.CozyCollectorController
|
||||
world: {fileID: 616881062}
|
||||
--- !u!114 &853162497
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 853162495}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: efb778515f4ca44289f365faa2acecd7, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Rudder.Unity::RudderSdk.Unity.Rudder
|
||||
_configuration: {fileID: 11400000, guid: 98d531126f0d748ceacfb85bdd959e81, type: 2}
|
||||
--- !u!4 &853162498
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 853162495}
|
||||
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 &865861683
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 865861685}
|
||||
- component: {fileID: 865861684}
|
||||
m_Layer: 0
|
||||
m_Name: Main Camera
|
||||
m_TagString: MainCamera
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!20 &865861684
|
||||
Camera:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 865861683}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
m_ClearFlags: 2
|
||||
m_BackGroundColor: {r: 0.1, g: 0.08, b: 0.13, a: 1}
|
||||
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: 0.75
|
||||
height: 1
|
||||
near clip plane: 0.3
|
||||
far clip plane: 1000
|
||||
field of view: 60
|
||||
orthographic: 1
|
||||
orthographic size: 3.6
|
||||
m_Depth: 0
|
||||
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 &865861685
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 865861683}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -10}
|
||||
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 &1077348680
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1077348682}
|
||||
- component: {fileID: 1077348681}
|
||||
m_Layer: 0
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!212 &1077348681
|
||||
SpriteRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1077348680}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
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: 10754, 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: 0
|
||||
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: -10
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 21300000, guid: e8139865590c408789e137275b78e239, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 16.72, y: 9.41}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
m_BlendShapeWeights: []
|
||||
--- !u!4 &1077348682
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1077348680}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.76555026, y: 0.76514345, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1544944036
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1544944038}
|
||||
- component: {fileID: 1544944037}
|
||||
m_Layer: 0
|
||||
m_Name: Spawner
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &1544944037
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1544944036}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: ec58b83d93d5b435abaaa64ecc05fe1a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.SnackSpawner
|
||||
prefab: {fileID: 1945811876929841169, guid: b6f2ca858be534f3ab055e0b878ae13f, type: 3}
|
||||
library: {fileID: 11400000, guid: 06fcf2ebf537145de9bab548922829e1, type: 2}
|
||||
spawnMin: {x: -5.25, y: -2.65}
|
||||
spawnMax: {x: 5.25, y: 2.42}
|
||||
parent: {fileID: 329179445}
|
||||
--- !u!4 &1544944038
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1544944036}
|
||||
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: 616881063}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1764811299
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1764811312}
|
||||
- component: {fileID: 1764811311}
|
||||
- component: {fileID: 1764811310}
|
||||
- component: {fileID: 1764811309}
|
||||
- component: {fileID: 1764811308}
|
||||
- component: {fileID: 1764811307}
|
||||
- component: {fileID: 1764811306}
|
||||
- component: {fileID: 1764811305}
|
||||
- component: {fileID: 1764811304}
|
||||
- component: {fileID: 1764811303}
|
||||
- component: {fileID: 1764811302}
|
||||
- component: {fileID: 1764811301}
|
||||
- component: {fileID: 1764811300}
|
||||
- component: {fileID: 1764811313}
|
||||
m_Layer: 0
|
||||
m_Name: UI
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &1764811300
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6f3916e69e6ce4c78b909c659160ad95, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.RoundResultModalPanel
|
||||
uiDocument: {fileID: 1764811311}
|
||||
controller: {fileID: 853162496}
|
||||
leaderboardRowTemplate: {fileID: 9197481963319205126, guid: e171bce5673384061b0cb20cbe5082d1,
|
||||
type: 3}
|
||||
--- !u!114 &1764811301
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b996708622cc54d328cac546b893e111, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.OfferModalPanel
|
||||
uiDocument: {fileID: 1764811311}
|
||||
controller: {fileID: 853162496}
|
||||
--- !u!114 &1764811302
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0c73aae57f5c749b88f5bf2c22538af5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.BackpackModalPanel
|
||||
uiDocument: {fileID: 1764811311}
|
||||
controller: {fileID: 853162496}
|
||||
backpackItemRowTemplate: {fileID: 9197481963319205126, guid: 29a6c5a5b6bb94220b5c2378923d4047,
|
||||
type: 3}
|
||||
spriteLibrary: {fileID: 11400000, guid: 06fcf2ebf537145de9bab548922829e1, type: 2}
|
||||
--- !u!114 &1764811303
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 36789e549043d400a92f3a84849b4038, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.ShopModalPanel
|
||||
uiDocument: {fileID: 1764811311}
|
||||
controller: {fileID: 853162496}
|
||||
shopOfferRowTemplate: {fileID: 9197481963319205126, guid: 85424ff7d38f94ed08f809972c61617c,
|
||||
type: 3}
|
||||
--- !u!114 &1764811304
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6de014257693b4ced830566d18e49444, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.SetupOverlayPanel
|
||||
uiDocument: {fileID: 1764811311}
|
||||
controller: {fileID: 853162496}
|
||||
--- !u!114 &1764811305
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f54172384bff5402686bb558e2abb5b7, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.BootOverlayPanel
|
||||
uiDocument: {fileID: 1764811311}
|
||||
controller: {fileID: 853162496}
|
||||
--- !u!114 &1764811306
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 57e0ed949960344bd80072dd54a52c4f, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.ToastsPanel
|
||||
uiDocument: {fileID: 1764811311}
|
||||
controller: {fileID: 853162496}
|
||||
toastTemplate: {fileID: 9197481963319205126, guid: 3a2038228118b4a09a3a242b8a1fc1d4,
|
||||
type: 3}
|
||||
--- !u!114 &1764811307
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2e5e5cb2ad54545a6847ad8c90d1f7d8, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.HudPanel
|
||||
uiDocument: {fileID: 1764811311}
|
||||
controller: {fileID: 853162496}
|
||||
world: {fileID: 616881062}
|
||||
--- !u!114 &1764811308
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a134e625b6e114c4b80b9f55a14e48b3, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.EventInspectorPanel
|
||||
uiDocument: {fileID: 1764811311}
|
||||
controller: {fileID: 853162496}
|
||||
logRowTemplate: {fileID: 9197481963319205126, guid: 94171891e540744b3a0f55b254cbe18b,
|
||||
type: 3}
|
||||
--- !u!114 &1764811309
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 1d57e6a031317461cb98e41f6940c8d3, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.RemoteConfigPanel
|
||||
uiDocument: {fileID: 1764811311}
|
||||
controller: {fileID: 853162496}
|
||||
--- !u!114 &1764811310
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 900b9e31987914b56a3bba037e2a830c, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.SessionCardPanel
|
||||
uiDocument: {fileID: 1764811311}
|
||||
controller: {fileID: 853162496}
|
||||
--- !u!114 &1764811311
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
|
||||
m_PanelSettings: {fileID: 11400000, guid: 728073018ae96457c9d67e8cc2652ac8, type: 2}
|
||||
m_ParentUI: {fileID: 0}
|
||||
sourceAsset: {fileID: 9197481963319205126, guid: 766f5cae1f4354e20b4043cf1c6756bf,
|
||||
type: 3}
|
||||
m_SortingOrder: 0
|
||||
m_Position: 0
|
||||
m_WorldSpaceSizeMode: 1
|
||||
m_WorldSpaceWidth: 1920
|
||||
m_WorldSpaceHeight: 1080
|
||||
m_PivotReferenceSize: 0
|
||||
m_Pivot: 0
|
||||
m_WorldSpaceCollider: {fileID: 0}
|
||||
--- !u!4 &1764811312
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
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!1931382934 &1764811313
|
||||
PanelRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1764811299}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 0
|
||||
m_ReflectionProbeUsage: 0
|
||||
m_RayTracingMode: 0
|
||||
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: 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_MaskInteraction: 0
|
||||
serializedVersion: 1
|
||||
m_PanelSettings: {fileID: 11400000, guid: 728073018ae96457c9d67e8cc2652ac8, type: 2}
|
||||
sourceAsset: {fileID: 9197481963319205126, guid: 766f5cae1f4354e20b4043cf1c6756bf,
|
||||
type: 3}
|
||||
m_ParentUI: {fileID: 0}
|
||||
m_WorldSpaceSizeMode: 1
|
||||
m_WorldSpaceWidth: 1920
|
||||
m_WorldSpaceHeight: 1080
|
||||
m_PivotReferenceSize: 0
|
||||
m_Pivot: 0
|
||||
m_Position: 0
|
||||
--- !u!1 &1781499117
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1781499118}
|
||||
- component: {fileID: 1781499121}
|
||||
- component: {fileID: 1781499120}
|
||||
- component: {fileID: 1781499119}
|
||||
m_Layer: 0
|
||||
m_Name: Player
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1781499118
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1781499117}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.23768115, y: 0.24053454, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 616881063}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!58 &1781499119
|
||||
CircleCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1781499117}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 0
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 0
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Radius: 0.99777764
|
||||
--- !u!50 &1781499120
|
||||
Rigidbody2D:
|
||||
serializedVersion: 5
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1781499117}
|
||||
m_BodyType: 1
|
||||
m_Simulated: 1
|
||||
m_UseFullKinematicContacts: 0
|
||||
m_UseAutoMass: 0
|
||||
m_Mass: 1
|
||||
m_LinearDamping: 0
|
||||
m_AngularDamping: 0.05
|
||||
m_GravityScale: 0
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_Interpolate: 0
|
||||
m_SleepingMode: 1
|
||||
m_CollisionDetection: 0
|
||||
m_Constraints: 0
|
||||
--- !u!212 &1781499121
|
||||
SpriteRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1781499117}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
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: 10754, 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: 0
|
||||
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_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 21300000, guid: 695606af95a0452790cf9228c0cc9f76, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 3.45, y: 4.49}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
m_BlendShapeWeights: []
|
||||
--- !u!1660057539 &9223372036854775807
|
||||
SceneRoots:
|
||||
m_ObjectHideFlags: 0
|
||||
m_Roots:
|
||||
- {fileID: 865861685}
|
||||
- {fileID: 1077348682}
|
||||
- {fileID: 616881063}
|
||||
- {fileID: 853162498}
|
||||
- {fileID: 1764811312}
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c8998a66d411a4e8d9ef54b6f261d320
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9f08d0082395f4a36b1a41e5e929c33f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,197 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &4320980148611362106
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3111624587611009095}
|
||||
- component: {fileID: 593893284932781451}
|
||||
- component: {fileID: 1452460269697210593}
|
||||
- component: {fileID: 2163815420330336319}
|
||||
m_Layer: 0
|
||||
m_Name: ScorePopup
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3111624587611009095
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4320980148611362106}
|
||||
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}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 20, y: 5}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!23 &593893284932781451
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4320980148611362106}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
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: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
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_MaskInteraction: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!114 &1452460269697210593
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4320980148611362106}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshPro
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: +10
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: 0
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 2.5
|
||||
m_fontSizeBase: 2.5
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_characterHorizontalScale: 1
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_TextWrappingMode: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 0
|
||||
m_ActiveFontFeatures: 6e72656b
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_EmojiFallbackSupport: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 0
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
_SortingLayer: 0
|
||||
_SortingLayerID: 0
|
||||
_SortingOrder: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_renderer: {fileID: 593893284932781451}
|
||||
m_maskType: 0
|
||||
--- !u!114 &2163815420330336319
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4320980148611362106}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b1db4bf03192148bf95ea374d128f349, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.ScorePopupView
|
||||
label: {fileID: 1452460269697210593}
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 77687e92645dc450d8f79fbb91face30
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,144 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &4123410791617310354
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5962299478407506369}
|
||||
- component: {fileID: 2996539449734302674}
|
||||
- component: {fileID: 5031039985352295968}
|
||||
- component: {fileID: 1945811876929841169}
|
||||
m_Layer: 0
|
||||
m_Name: Snack
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5962299478407506369
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4123410791617310354}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.16149068, y: 0.12807882, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!58 &2996539449734302674
|
||||
CircleCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4123410791617310354}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Density: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ForceSendLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ForceReceiveLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_ContactCaptureLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_CallbackLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_IsTrigger: 1
|
||||
m_UsedByEffector: 0
|
||||
m_CompositeOperation: 0
|
||||
m_CompositeOrder: 0
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Radius: 1.3623077
|
||||
--- !u!212 &5031039985352295968
|
||||
SpriteRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4123410791617310354}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 0
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 0
|
||||
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: 10754, 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: 0
|
||||
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_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 21300000, guid: c41fcc3b35c944ffa18a34b6c4dc2cd6, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 3.22, y: 4.06}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
m_BlendShapeWeights: []
|
||||
--- !u!114 &1945811876929841169
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4123410791617310354}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 36b117cefc78541b9b42188266102562, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::LiveOpsExamples.Snack
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b6f2ca858be534f3ab055e0b878ae13f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,63 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
/// <summary>
|
||||
/// Shared constants for the Cozy Collector demo: remote config keys with their
|
||||
/// defaults, LiveOps slugs, and the inspector capability palette.
|
||||
/// Mirrors liveops-phaser-demo/src/config.ts.
|
||||
/// </summary>
|
||||
public static class CozyCollectorConsts
|
||||
{
|
||||
// Remote config keys (mirror DemoRemoteConfig in the Phaser demo).
|
||||
public const string ConfigRoundSeconds = "demo_round_seconds";
|
||||
public const string ConfigPlayerSpeed = "demo_player_speed";
|
||||
public const string ConfigSpawnIntervalMs = "demo_spawn_interval_ms";
|
||||
public const string ConfigCollectibleScore = "demo_collectible_score";
|
||||
|
||||
public const float DefaultRoundSeconds = 150f;
|
||||
public const float DefaultPlayerSpeed = 260f;
|
||||
public const float DefaultSpawnIntervalMs = 900f;
|
||||
public const float DefaultCollectibleScore = 10f;
|
||||
|
||||
public const string LeaderboardSlug = "cozy-collector-score";
|
||||
public const string StoreSlug = "cozy-camp-shop";
|
||||
public const string OfferId = "moonberry-boost";
|
||||
public const string QuestMetricCollectibles = "cozy_collectibles";
|
||||
public const string StorageType = "cozy_fantasy_save";
|
||||
public const string StorageId = "main";
|
||||
public const string NicknamePrefsKey = "rudder_demo_nickname";
|
||||
public const string Region = "global";
|
||||
public const string Language = "en";
|
||||
|
||||
// Inspector capability tags (same tags as the Phaser demo).
|
||||
public const string CapabilityAuth = "auth";
|
||||
public const string CapabilityConfig = "config";
|
||||
public const string CapabilityScenario = "scenario";
|
||||
public const string CapabilityStore = "store";
|
||||
public const string CapabilityLeaderboard = "leaderboard";
|
||||
public const string CapabilityStorage = "storage";
|
||||
public const string CapabilityInventory = "inventory";
|
||||
public const string CapabilityWallet = "wallet";
|
||||
public const string CapabilityQuests = "quests";
|
||||
public const string CapabilitySystem = "system";
|
||||
|
||||
/// <summary>Color used by the event inspector to tag a capability line.</summary>
|
||||
public static Color CapabilityColor(string capability)
|
||||
{
|
||||
switch (capability)
|
||||
{
|
||||
case CapabilityAuth: return new Color(0.55f, 0.76f, 1.00f);
|
||||
case CapabilityConfig: return new Color(0.61f, 0.90f, 0.69f);
|
||||
case CapabilityScenario: return new Color(0.85f, 0.68f, 1.00f);
|
||||
case CapabilityStore: return new Color(1.00f, 0.82f, 0.51f);
|
||||
case CapabilityLeaderboard: return new Color(1.00f, 0.72f, 0.58f);
|
||||
case CapabilityStorage: return new Color(0.56f, 0.87f, 0.87f);
|
||||
case CapabilityInventory: return new Color(0.78f, 0.86f, 0.55f);
|
||||
case CapabilityWallet: return new Color(1.00f, 0.88f, 0.63f);
|
||||
case CapabilityQuests: return new Color(0.71f, 0.80f, 1.00f);
|
||||
default: return new Color(0.75f, 0.75f, 0.75f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f0f8000a396a64ea7890de20a70265ce
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 05ab47060c2ef4476800002c4a956b85
|
||||
@@ -1,42 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
/// <summary>
|
||||
/// Baked sprite references for the Cozy Collector demo. Mirrors the Phaser
|
||||
/// texture keys; <see cref="ForSlug"/> falls back to the star sprite for
|
||||
/// unknown slugs, same as the Phaser backpack icon mapping.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(menuName = "LiveOps Examples/Cozy Collector Sprite Library")]
|
||||
public class CozyCollectorSpriteLibrary : ScriptableObject
|
||||
{
|
||||
[SerializeField] private Sprite background;
|
||||
[SerializeField] private Sprite player;
|
||||
[SerializeField] private Sprite moonberry;
|
||||
[SerializeField] private Sprite acorn;
|
||||
[SerializeField] private Sprite star;
|
||||
[SerializeField] private Sprite snack;
|
||||
|
||||
public Sprite Background => background;
|
||||
public Sprite Player => player;
|
||||
public Sprite Moonberry => moonberry;
|
||||
public Sprite Acorn => acorn;
|
||||
public Sprite Star => star;
|
||||
public Sprite Snack => snack;
|
||||
|
||||
public Sprite ForSlug(string slug)
|
||||
{
|
||||
switch (slug)
|
||||
{
|
||||
case "background":
|
||||
case "camp-bg": return background;
|
||||
case "player": return player;
|
||||
case "moonberry": return moonberry;
|
||||
case "acorn": return acorn;
|
||||
case "snack": return snack;
|
||||
case "star":
|
||||
default: return star;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8cd851b86da394b9ca06595f889a49b3
|
||||
@@ -1,149 +0,0 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
/// <summary>
|
||||
/// Gameplay world for the Cozy Collector demo — the Unity port of the Phaser
|
||||
/// GameScene.ts. Renders only the game world: player movement (WASD/arrows),
|
||||
/// round timer, spawn cadence and pickups. All chrome lives in the UI panels,
|
||||
/// all SDK calls in <see cref="CozyCollectorController"/>.
|
||||
///
|
||||
/// The Phaser field is 1280×720 px at 100 PPU, i.e. 12.8×7.2 world units
|
||||
/// centered on the origin; tuning speeds/intervals stay in Phaser units
|
||||
/// (px/s, ms) and are converted here.
|
||||
/// </summary>
|
||||
public class GameWorld : MonoBehaviour
|
||||
{
|
||||
private const float PixelsPerUnit = 100f;
|
||||
|
||||
[SerializeField] private SpriteRenderer player;
|
||||
[SerializeField] private SnackSpawner spawner;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
[SerializeField] private ScorePopupView scorePopupPrefab;
|
||||
[SerializeField] private ParticleSystem collectBurstPrefab;
|
||||
[SerializeField] private Vector2 moveMin = new Vector2(-6.0f, -3.2f);
|
||||
[SerializeField] private Vector2 moveMax = new Vector2(6.0f, 3.2f);
|
||||
|
||||
private bool _paused;
|
||||
private float _spawnElapsedMs;
|
||||
private int _lastSecond = -1;
|
||||
private bool _finishRaised;
|
||||
|
||||
public int Score { get; private set; }
|
||||
public int Collected { get; private set; }
|
||||
public float TimeLeftSeconds { get; private set; }
|
||||
public bool RoundActive { get; private set; }
|
||||
|
||||
public event Action StateChanged;
|
||||
public event Action<int, int> RoundFinished;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
spawner.Player = player;
|
||||
spawner.Collected += OnSnackCollected;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
spawner.Collected -= OnSnackCollected;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
MovePlayer(_paused || !RoundActive);
|
||||
|
||||
if (!RoundActive || _paused)
|
||||
return;
|
||||
|
||||
TimeLeftSeconds = Mathf.Max(0f, TimeLeftSeconds - Time.deltaTime);
|
||||
_spawnElapsedMs += Time.deltaTime * 1000f;
|
||||
|
||||
if (_spawnElapsedMs >= controller.Tuning.SpawnIntervalMs)
|
||||
{
|
||||
_spawnElapsedMs = 0f;
|
||||
spawner.Spawn();
|
||||
}
|
||||
|
||||
var second = Mathf.CeilToInt(TimeLeftSeconds);
|
||||
if (second != _lastSecond)
|
||||
{
|
||||
_lastSecond = second;
|
||||
StateChanged?.Invoke();
|
||||
}
|
||||
|
||||
if (TimeLeftSeconds <= 0f)
|
||||
FinishRound();
|
||||
}
|
||||
|
||||
public void SetPaused(bool paused)
|
||||
{
|
||||
_paused = paused;
|
||||
}
|
||||
|
||||
public void RestartRound()
|
||||
{
|
||||
Score = 0;
|
||||
Collected = 0;
|
||||
TimeLeftSeconds = controller.Tuning.RoundSeconds;
|
||||
_spawnElapsedMs = 0f;
|
||||
_lastSecond = -1;
|
||||
_finishRaised = false;
|
||||
spawner.Clear();
|
||||
RoundActive = true;
|
||||
spawner.Spawn();
|
||||
StateChanged?.Invoke();
|
||||
}
|
||||
|
||||
private void MovePlayer(bool frozen)
|
||||
{
|
||||
if (frozen)
|
||||
return;
|
||||
|
||||
var vx = (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A) ? -1 : 0) +
|
||||
(Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D) ? 1 : 0);
|
||||
var vy = (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S) ? -1 : 0) +
|
||||
(Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W) ? 1 : 0);
|
||||
|
||||
if (vx == 0 && vy == 0)
|
||||
return;
|
||||
|
||||
var direction = new Vector2(vx, vy).normalized;
|
||||
var speed = controller.Tuning.PlayerSpeed / PixelsPerUnit;
|
||||
var position = player.transform.position;
|
||||
position += (Vector3)(direction * speed * Time.deltaTime);
|
||||
position.x = Mathf.Clamp(position.x, moveMin.x, moveMax.x);
|
||||
position.y = Mathf.Clamp(position.y, moveMin.y, moveMax.y);
|
||||
player.transform.position = position;
|
||||
|
||||
if (vx != 0)
|
||||
player.flipX = vx < 0;
|
||||
}
|
||||
|
||||
private void OnSnackCollected(Snack snack)
|
||||
{
|
||||
var position = snack.transform.position;
|
||||
var gain = Mathf.RoundToInt(controller.Tuning.CollectibleScore);
|
||||
Score += gain;
|
||||
Collected += 1;
|
||||
|
||||
var popup = Instantiate(scorePopupPrefab, position, Quaternion.identity);
|
||||
popup.Set(gain);
|
||||
Instantiate(collectBurstPrefab, position, Quaternion.identity);
|
||||
|
||||
StateChanged?.Invoke();
|
||||
}
|
||||
|
||||
private void FinishRound()
|
||||
{
|
||||
if (_finishRaised)
|
||||
return;
|
||||
|
||||
_finishRaised = true;
|
||||
RoundActive = false;
|
||||
spawner.Clear();
|
||||
StateChanged?.Invoke();
|
||||
RoundFinished?.Invoke(Score, Collected);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 952f52af0af8546eeab332b11e2e4bb7
|
||||
@@ -1,43 +0,0 @@
|
||||
using System.Collections;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
/// <summary>
|
||||
/// World-space "+N" score popup. Floats up ~0.5 world units and fades out over
|
||||
/// 0.7 s (Cubic.easeOut, like the Phaser floatScore tween), then destroys itself.
|
||||
/// </summary>
|
||||
public class ScorePopupView : MonoBehaviour
|
||||
{
|
||||
private const float FloatDistance = 0.5f;
|
||||
private const float LifetimeSeconds = 0.7f;
|
||||
|
||||
[SerializeField] private TextMeshPro label;
|
||||
|
||||
public void Set(int gain)
|
||||
{
|
||||
label.text = "+" + gain;
|
||||
StartCoroutine(Animate());
|
||||
}
|
||||
|
||||
private IEnumerator Animate()
|
||||
{
|
||||
var start = transform.position;
|
||||
var color = label.color;
|
||||
var elapsed = 0f;
|
||||
|
||||
while (elapsed < LifetimeSeconds)
|
||||
{
|
||||
elapsed += Time.deltaTime;
|
||||
var t = Mathf.Clamp01(elapsed / LifetimeSeconds);
|
||||
var eased = 1f - Mathf.Pow(1f - t, 3f);
|
||||
transform.position = start + new Vector3(0f, FloatDistance * eased, 0f);
|
||||
label.color = new Color(color.r, color.g, color.b, color.a * (1f - eased));
|
||||
yield return null;
|
||||
}
|
||||
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b1db4bf03192148bf95ea374d128f349
|
||||
@@ -1,45 +0,0 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
/// <summary>
|
||||
/// A collectible snack. Bobs gently (sine, 0.08 world units amplitude, 650 ms
|
||||
/// half-period — mirrors the Phaser yoyo tween) and raises <see cref="Collected"/>
|
||||
/// when the player overlaps its trigger, then destroys itself.
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(SpriteRenderer))]
|
||||
public class Snack : MonoBehaviour
|
||||
{
|
||||
private const float BobAmplitude = 0.08f;
|
||||
private const float BobHalfPeriodSeconds = 0.65f;
|
||||
|
||||
public SpriteRenderer Player { get; set; }
|
||||
|
||||
public event Action<Snack> Collected;
|
||||
|
||||
private Vector3 _basePosition;
|
||||
private float _elapsed;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
_basePosition = transform.position;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
_elapsed += Time.deltaTime;
|
||||
var offset = Mathf.Sin(_elapsed * Mathf.PI / BobHalfPeriodSeconds) * BobAmplitude;
|
||||
transform.position = _basePosition + new Vector3(0f, offset, 0f);
|
||||
}
|
||||
|
||||
private void OnTriggerEnter2D(Collider2D other)
|
||||
{
|
||||
if (Player == null || other.gameObject != Player.gameObject)
|
||||
return;
|
||||
|
||||
Collected?.Invoke(this);
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 36b117cefc78541b9b42188266102562
|
||||
@@ -1,76 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
/// <summary>
|
||||
/// Spawns collectible snacks at random positions inside the configured bounds,
|
||||
/// picking a random collectible slug (moonberry/acorn/star/snack) and applying
|
||||
/// its sprite from the library. Mirrors GameScene.spawnCollectible.
|
||||
///
|
||||
/// Phaser spawn margins x∈[115,1165], y∈[118,625] px on a 1280×720 field at
|
||||
/// 100 PPU map to x∈[-5.25,5.25], y∈[-2.65,2.42] world units (y is flipped).
|
||||
/// </summary>
|
||||
public class SnackSpawner : MonoBehaviour
|
||||
{
|
||||
private static readonly string[] CollectibleSlugs = { "moonberry", "acorn", "star", "snack" };
|
||||
|
||||
[SerializeField] private Snack prefab;
|
||||
[SerializeField] private CozyCollectorSpriteLibrary library;
|
||||
[SerializeField] private Vector2 spawnMin = new Vector2(-5.25f, -2.65f);
|
||||
[SerializeField] private Vector2 spawnMax = new Vector2(5.25f, 2.42f);
|
||||
[SerializeField] private Transform parent;
|
||||
|
||||
private readonly List<Snack> _spawned = new List<Snack>();
|
||||
|
||||
public SpriteRenderer Player { get; set; }
|
||||
|
||||
public event Action<Snack> Collected;
|
||||
|
||||
public Snack Spawn()
|
||||
{
|
||||
var slug = CollectibleSlugs[UnityEngine.Random.Range(0, CollectibleSlugs.Length)];
|
||||
var position = new Vector3(
|
||||
UnityEngine.Random.Range(spawnMin.x, spawnMax.x),
|
||||
UnityEngine.Random.Range(spawnMin.y, spawnMax.y),
|
||||
0f);
|
||||
|
||||
var snack = Instantiate(prefab, position, Quaternion.identity, parent);
|
||||
var sprite = library.ForSlug(slug);
|
||||
snack.GetComponent<SpriteRenderer>().sprite = sprite;
|
||||
// Phaser setDisplaySize(52, 52) at 100 PPU -> 0.52 x 0.52 world units.
|
||||
var spriteBounds = sprite.bounds.size;
|
||||
var scale = new Vector3(0.52f / spriteBounds.x, 0.52f / spriteBounds.y, 1f);
|
||||
snack.transform.localScale = scale;
|
||||
// The prefab collider radius is tuned to snack.png; a circle collider's
|
||||
// world radius scales by the largest transform axis, so retune per sprite.
|
||||
snack.GetComponent<CircleCollider2D>().radius = 0.22f / Mathf.Max(scale.x, scale.y);
|
||||
snack.Player = Player;
|
||||
snack.Collected += OnSnackCollected;
|
||||
_spawned.Add(snack);
|
||||
return snack;
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
foreach (var snack in _spawned)
|
||||
{
|
||||
if (snack == null)
|
||||
continue;
|
||||
|
||||
snack.Collected -= OnSnackCollected;
|
||||
Destroy(snack.gameObject);
|
||||
}
|
||||
|
||||
_spawned.Clear();
|
||||
}
|
||||
|
||||
private void OnSnackCollected(Snack snack)
|
||||
{
|
||||
snack.Collected -= OnSnackCollected;
|
||||
_spawned.Remove(snack);
|
||||
Collected?.Invoke(snack);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ec58b83d93d5b435abaaa64ecc05fe1a
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c21c943a5e1bd4f79a2d6bcb2e3f30fb
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,81 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class BackpackModalPanel : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private PanelRenderer panelRenderer;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
[SerializeField] private VisualTreeAsset backpackItemRowTemplate;
|
||||
[SerializeField] private CozyCollectorSpriteLibrary spriteLibrary;
|
||||
|
||||
private VisualElement _root;
|
||||
private ScrollView _itemsScroll;
|
||||
private VisualElement _emptyNote;
|
||||
private Button _closeButton;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
controller.ModalChanged += ApplyVisibility;
|
||||
controller.BackpackChanged += Rebuild;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
controller.ModalChanged -= ApplyVisibility;
|
||||
controller.BackpackChanged -= Rebuild;
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
_root = root.Q<VisualElement>("backpack-modal");
|
||||
_itemsScroll = _root.Q<ScrollView>("backpack-items-scroll");
|
||||
_emptyNote = _root.Q<VisualElement>("backpack-empty");
|
||||
_closeButton = _root.Q<Button>("backpack-close-button");
|
||||
|
||||
_closeButton.clicked -= HandleCloseClicked;
|
||||
_closeButton.clicked += HandleCloseClicked;
|
||||
|
||||
ApplyVisibility();
|
||||
Rebuild();
|
||||
}
|
||||
|
||||
private void ApplyVisibility()
|
||||
{
|
||||
_root.style.display = controller.ActiveModal == CozyModal.Backpack ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
}
|
||||
|
||||
private void Rebuild()
|
||||
{
|
||||
_itemsScroll.contentContainer.Clear();
|
||||
|
||||
var items = controller.BackpackItems;
|
||||
_emptyNote.style.display = items == null || items.Count == 0 ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
if (items == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var item in items)
|
||||
{
|
||||
var rowRoot = backpackItemRowTemplate.CloneTree();
|
||||
_itemsScroll.contentContainer.Add(rowRoot);
|
||||
|
||||
var row = new BackpackItemRowView(rowRoot);
|
||||
row.Set(
|
||||
spriteLibrary.ForSlug(item.Slug),
|
||||
string.IsNullOrEmpty(item.Name) ? item.Slug : item.Name,
|
||||
item.Slug,
|
||||
item.Amount);
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleCloseClicked()
|
||||
{
|
||||
controller.CloseModal();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0c73aae57f5c749b88f5bf2c22538af5
|
||||
@@ -1,70 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class BootOverlayPanel : MonoBehaviour
|
||||
{
|
||||
private const float SpinnerDegreesPerSecond = 180f;
|
||||
|
||||
[SerializeField] private PanelRenderer panelRenderer;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
|
||||
private VisualElement _overlay;
|
||||
private Label _statusLabel;
|
||||
private VisualElement _spinner;
|
||||
private IVisualElementScheduledItem _spinSchedule;
|
||||
private float _angle;
|
||||
private float _lastTick;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
controller.PhaseChanged += ApplyVisibility;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
controller.PhaseChanged -= ApplyVisibility;
|
||||
_spinSchedule?.Pause();
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
_overlay = root.Q<VisualElement>("boot-overlay");
|
||||
_statusLabel = root.Q<Label>("boot-status");
|
||||
_spinner = root.Q<VisualElement>("boot-spinner");
|
||||
_spinSchedule = _spinner.schedule.Execute(Spin).Every(16);
|
||||
ApplyVisibility();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
_statusLabel.text = controller.StatusMessage;
|
||||
}
|
||||
|
||||
private void Spin()
|
||||
{
|
||||
var now = Time.unscaledTime;
|
||||
_angle = (_angle + SpinnerDegreesPerSecond * (now - _lastTick)) % 360f;
|
||||
_lastTick = now;
|
||||
_spinner.style.rotate = new Rotate(Angle.Degrees(_angle));
|
||||
}
|
||||
|
||||
private void ApplyVisibility()
|
||||
{
|
||||
var visible = controller.Phase == CozyPhase.Booting || controller.Phase == CozyPhase.Connecting;
|
||||
_overlay.style.display = visible ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
if (visible)
|
||||
{
|
||||
_lastTick = Time.unscaledTime;
|
||||
_spinSchedule.Resume();
|
||||
}
|
||||
else
|
||||
{
|
||||
_spinSchedule.Pause();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f54172384bff5402686bb558e2abb5b7
|
||||
@@ -1,91 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class EventInspectorPanel : MonoBehaviour
|
||||
{
|
||||
private static readonly Dictionary<string, Color> CapabilityColors = new Dictionary<string, Color>
|
||||
{
|
||||
{ "auth", new Color(0.486f, 0.769f, 1f) },
|
||||
{ "config", new Color(0.945f, 0.776f, 0.490f) },
|
||||
{ "scenario", new Color(0.769f, 0.635f, 1f) },
|
||||
{ "store", new Color(1f, 0.698f, 0.490f) },
|
||||
{ "leaderboard", new Color(0.482f, 0.878f, 0.690f) },
|
||||
{ "storage", new Color(0.624f, 0.690f, 0.769f) },
|
||||
{ "inventory", new Color(0.898f, 0.604f, 0.796f) },
|
||||
{ "wallet", new Color(1f, 0.831f, 0.475f) },
|
||||
{ "quests", new Color(0.710f, 0.800f, 1f) },
|
||||
{ "system", new Color(0.667f, 0.706f, 0.635f) },
|
||||
};
|
||||
|
||||
private static readonly Dictionary<string, string> CapabilityLabels = new Dictionary<string, string>
|
||||
{
|
||||
{ "auth", "Auth" },
|
||||
{ "config", "Config" },
|
||||
{ "scenario", "Scenario" },
|
||||
{ "store", "Store" },
|
||||
{ "leaderboard", "Board" },
|
||||
{ "storage", "Storage" },
|
||||
{ "inventory", "Items" },
|
||||
{ "wallet", "Wallet" },
|
||||
{ "quests", "Quests" },
|
||||
{ "system", "System" },
|
||||
};
|
||||
|
||||
private static readonly Color FallbackColor = new Color(0.667f, 0.706f, 0.635f);
|
||||
|
||||
[SerializeField] private PanelRenderer panelRenderer;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
[SerializeField] private VisualTreeAsset logRowTemplate;
|
||||
|
||||
private ScrollView _scroll;
|
||||
private VisualElement _emptyNote;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
controller.LogAdded += Rebuild;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
controller.LogAdded -= Rebuild;
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
_scroll = root.Q<ScrollView>("event-log-scroll");
|
||||
_emptyNote = root.Q("event-log-empty");
|
||||
|
||||
Rebuild();
|
||||
}
|
||||
|
||||
private void Rebuild()
|
||||
{
|
||||
var container = _scroll.contentContainer;
|
||||
container.Clear();
|
||||
|
||||
var entries = controller.LogEntries;
|
||||
_emptyNote.style.display = entries == null || entries.Count == 0 ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
if (entries == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var entry in entries)
|
||||
{
|
||||
var rowRoot = logRowTemplate.CloneTree();
|
||||
container.Add(rowRoot);
|
||||
|
||||
string key = entry.Capability == null ? string.Empty : entry.Capability.ToLowerInvariant();
|
||||
string label = CapabilityLabels.TryGetValue(key, out var known) ? known : entry.Capability;
|
||||
Color color = CapabilityColors.TryGetValue(key, out var knownColor) ? knownColor : FallbackColor;
|
||||
string detail = string.IsNullOrEmpty(entry.Detail) ? string.Empty : $" — {entry.Detail}";
|
||||
new LogRowView(rowRoot).Set(entry.Timestamp.ToString("HH:mm:ss"), label, color, entry.Message, detail);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a134e625b6e114c4b80b9f55a14e48b3
|
||||
@@ -1,119 +0,0 @@
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class HudPanel : MonoBehaviour
|
||||
{
|
||||
private const string TimerLowClass = "timer-low";
|
||||
|
||||
[SerializeField] private PanelRenderer panelRenderer;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
[SerializeField] private GameWorld world;
|
||||
|
||||
private Label _scoreLabel;
|
||||
private Label _bestLabel;
|
||||
private Label _timeLeftLabel;
|
||||
private VisualElement _timerFill;
|
||||
private Label _walletLabel;
|
||||
private Button _shopButton;
|
||||
private Button _backpackButton;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
world.StateChanged += Refresh;
|
||||
world.RoundFinished += HandleRoundFinished;
|
||||
controller.WalletsChanged += RefreshWallet;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
world.StateChanged -= Refresh;
|
||||
world.RoundFinished -= HandleRoundFinished;
|
||||
controller.WalletsChanged -= RefreshWallet;
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
_scoreLabel = root.Q<Label>("hud-score");
|
||||
_bestLabel = root.Q<Label>("hud-best");
|
||||
_timeLeftLabel = root.Q<Label>("hud-time-left");
|
||||
_timerFill = root.Q("hud-timer-fill");
|
||||
_walletLabel = root.Q<Label>("hud-wallet");
|
||||
_shopButton = root.Q<Button>("hud-shop-button");
|
||||
_backpackButton = root.Q<Button>("hud-backpack-button");
|
||||
|
||||
_shopButton.clicked -= HandleShopClicked;
|
||||
_shopButton.clicked += HandleShopClicked;
|
||||
_backpackButton.clicked -= HandleBackpackClicked;
|
||||
_backpackButton.clicked += HandleBackpackClicked;
|
||||
|
||||
Refresh();
|
||||
RefreshWallet();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
RefreshTimer();
|
||||
}
|
||||
|
||||
private void Refresh()
|
||||
{
|
||||
_scoreLabel.text = world.Score.ToString();
|
||||
_bestLabel.text = controller.Save != null ? controller.Save.BestScore.ToString() : "0";
|
||||
RefreshTimer();
|
||||
}
|
||||
|
||||
private void RefreshTimer()
|
||||
{
|
||||
float roundSeconds = controller.Tuning != null ? Mathf.Max(1f, controller.Tuning.RoundSeconds) : 1f;
|
||||
float fraction = Mathf.Clamp01(world.TimeLeftSeconds / roundSeconds);
|
||||
_timeLeftLabel.text = $"{Mathf.CeilToInt(Mathf.Max(0f, world.TimeLeftSeconds))}s";
|
||||
_timerFill.style.width = Length.Percent(fraction * 100f);
|
||||
_timerFill.EnableInClassList(TimerLowClass, fraction <= 0.2f);
|
||||
}
|
||||
|
||||
private void RefreshWallet()
|
||||
{
|
||||
_walletLabel.text = WalletLabel();
|
||||
}
|
||||
|
||||
private string WalletLabel()
|
||||
{
|
||||
var wallets = controller.Wallets;
|
||||
if (wallets == null || wallets.Count == 0)
|
||||
{
|
||||
return "—";
|
||||
}
|
||||
|
||||
var builder = new StringBuilder();
|
||||
foreach (var wallet in wallets)
|
||||
{
|
||||
if (builder.Length > 0)
|
||||
{
|
||||
builder.Append(" · ");
|
||||
}
|
||||
builder.Append($"{wallet.Balance:0.##} {wallet.Currency}".TrimEnd());
|
||||
}
|
||||
return builder.ToString();
|
||||
}
|
||||
|
||||
private void HandleRoundFinished(int score, int collected)
|
||||
{
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void HandleShopClicked()
|
||||
{
|
||||
controller.OpenModal(CozyModal.Shop);
|
||||
}
|
||||
|
||||
private void HandleBackpackClicked()
|
||||
{
|
||||
controller.OpenModal(CozyModal.Backpack);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2e5e5cb2ad54545a6847ad8c90d1f7d8
|
||||
@@ -1,102 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class OfferModalPanel : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private PanelRenderer panelRenderer;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
|
||||
private VisualElement root;
|
||||
private Label titleLabel;
|
||||
private Label nameLabel;
|
||||
private Label priceLabel;
|
||||
private Button buyButton;
|
||||
private Button declineButton;
|
||||
private Button closeButton;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
controller.ModalChanged += ApplyVisibility;
|
||||
controller.OfferChanged += Refresh;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
controller.ModalChanged -= ApplyVisibility;
|
||||
controller.OfferChanged -= Refresh;
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
this.root = root.Q<VisualElement>("offer-modal");
|
||||
titleLabel = this.root.Q<Label>("offer-title");
|
||||
nameLabel = this.root.Q<Label>("offer-name");
|
||||
priceLabel = this.root.Q<Label>("offer-price");
|
||||
buyButton = this.root.Q<Button>("offer-buy-button");
|
||||
declineButton = this.root.Q<Button>("offer-decline-button");
|
||||
closeButton = this.root.Q<Button>("offer-close-button");
|
||||
|
||||
buyButton.clicked -= HandleBuyClicked;
|
||||
buyButton.clicked += HandleBuyClicked;
|
||||
declineButton.clicked -= HandleDeclineClicked;
|
||||
declineButton.clicked += HandleDeclineClicked;
|
||||
closeButton.clicked -= HandleCloseClicked;
|
||||
closeButton.clicked += HandleCloseClicked;
|
||||
|
||||
ApplyVisibility();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void ApplyVisibility()
|
||||
{
|
||||
root.style.display = controller.ActiveModal == CozyModal.Offer ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
}
|
||||
|
||||
private void Refresh()
|
||||
{
|
||||
var offerInfo = controller.CurrentOffer;
|
||||
if (offerInfo == null)
|
||||
{
|
||||
titleLabel.text = "Offer";
|
||||
nameLabel.text = "—";
|
||||
priceLabel.text = string.Empty;
|
||||
buyButton.SetEnabled(false);
|
||||
return;
|
||||
}
|
||||
|
||||
titleLabel.text = string.IsNullOrEmpty(offerInfo.StoreName) ? offerInfo.StoreSlug : offerInfo.StoreName;
|
||||
|
||||
var offer = offerInfo.Offers != null && offerInfo.Offers.Count > 0 ? offerInfo.Offers[0] : null;
|
||||
if (offer == null)
|
||||
{
|
||||
nameLabel.text = "—";
|
||||
priceLabel.text = string.Empty;
|
||||
buyButton.SetEnabled(false);
|
||||
return;
|
||||
}
|
||||
|
||||
nameLabel.text = string.IsNullOrEmpty(offer.Name) ? offer.OfferId : offer.Name;
|
||||
priceLabel.text = ShopModalPanel.PriceLabel(offer.Price, offer.Currency);
|
||||
buyButton.SetEnabled(true);
|
||||
}
|
||||
|
||||
private void HandleBuyClicked()
|
||||
{
|
||||
controller.BuyScenarioOffer();
|
||||
}
|
||||
|
||||
private void HandleDeclineClicked()
|
||||
{
|
||||
controller.DeclineScenarioOffer();
|
||||
}
|
||||
|
||||
private void HandleCloseClicked()
|
||||
{
|
||||
controller.CloseModal();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b996708622cc54d328cac546b893e111
|
||||
@@ -1,92 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class RemoteConfigPanel : MonoBehaviour
|
||||
{
|
||||
private const string FlashClass = "flash";
|
||||
private const long FlashMilliseconds = 600;
|
||||
|
||||
[SerializeField] private PanelRenderer panelRenderer;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
|
||||
private Label _playerSpeedValue;
|
||||
private Label _spawnIntervalValue;
|
||||
private Label _collectibleScoreValue;
|
||||
private Label _roundSecondsValue;
|
||||
private VisualElement _playerSpeedRow;
|
||||
private VisualElement _spawnIntervalRow;
|
||||
private VisualElement _collectibleScoreRow;
|
||||
private VisualElement _roundSecondsRow;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
controller.TuningChanged += HandleTuningChanged;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
controller.TuningChanged -= HandleTuningChanged;
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
_playerSpeedValue = root.Q<Label>("rc-value-player-speed");
|
||||
_spawnIntervalValue = root.Q<Label>("rc-value-spawn-interval");
|
||||
_collectibleScoreValue = root.Q<Label>("rc-value-collectible-score");
|
||||
_roundSecondsValue = root.Q<Label>("rc-value-round-seconds");
|
||||
_playerSpeedRow = root.Q("rc-row-player-speed");
|
||||
_spawnIntervalRow = root.Q("rc-row-spawn-interval");
|
||||
_collectibleScoreRow = root.Q("rc-row-collectible-score");
|
||||
_roundSecondsRow = root.Q("rc-row-round-seconds");
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void Refresh()
|
||||
{
|
||||
var tuning = controller.Tuning;
|
||||
if (tuning == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_playerSpeedValue.text = $"{Mathf.RoundToInt(tuning.PlayerSpeed)}";
|
||||
_spawnIntervalValue.text = $"{Mathf.RoundToInt(tuning.SpawnIntervalMs)} ms";
|
||||
_collectibleScoreValue.text = $"+{Mathf.RoundToInt(tuning.CollectibleScore)}";
|
||||
_roundSecondsValue.text = $"{Mathf.RoundToInt(tuning.RoundSeconds)} s";
|
||||
}
|
||||
|
||||
private void HandleTuningChanged(string key)
|
||||
{
|
||||
Refresh();
|
||||
|
||||
string normalized = key == null ? string.Empty : key.ToLowerInvariant().Replace("_", string.Empty).Replace("-", string.Empty).Replace(" ", string.Empty);
|
||||
if (normalized.Contains("playerspeed"))
|
||||
{
|
||||
Flash(_playerSpeedRow);
|
||||
}
|
||||
else if (normalized.Contains("spawninterval"))
|
||||
{
|
||||
Flash(_spawnIntervalRow);
|
||||
}
|
||||
else if (normalized.Contains("collectiblescore"))
|
||||
{
|
||||
Flash(_collectibleScoreRow);
|
||||
}
|
||||
else if (normalized.Contains("roundseconds"))
|
||||
{
|
||||
Flash(_roundSecondsRow);
|
||||
}
|
||||
}
|
||||
|
||||
private static void Flash(VisualElement row)
|
||||
{
|
||||
row.AddToClassList(FlashClass);
|
||||
row.schedule.Execute(() => row.RemoveFromClassList(FlashClass)).StartingIn(FlashMilliseconds);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1d57e6a031317461cb98e41f6940c8d3
|
||||
@@ -1,117 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class RoundResultModalPanel : MonoBehaviour
|
||||
{
|
||||
private const int MaxLeaderboardRows = 10;
|
||||
|
||||
[SerializeField] private PanelRenderer panelRenderer;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
[SerializeField] private VisualTreeAsset leaderboardRowTemplate;
|
||||
|
||||
private VisualElement root;
|
||||
private Label scoreLabel;
|
||||
private Label bestLabel;
|
||||
private Label collectedLabel;
|
||||
private ScrollView leaderboardScroll;
|
||||
private VisualElement emptyNote;
|
||||
private Button playAgainButton;
|
||||
private Button claimButton;
|
||||
private Button endButton;
|
||||
private Button closeButton;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
controller.ModalChanged += ApplyVisibility;
|
||||
controller.RoundResultChanged += Refresh;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
controller.ModalChanged -= ApplyVisibility;
|
||||
controller.RoundResultChanged -= Refresh;
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
this.root = root.Q<VisualElement>("round-result-modal");
|
||||
scoreLabel = this.root.Q<Label>("rr-score");
|
||||
bestLabel = this.root.Q<Label>("rr-best");
|
||||
collectedLabel = this.root.Q<Label>("rr-collected");
|
||||
leaderboardScroll = this.root.Q<ScrollView>("rr-leaderboard-scroll");
|
||||
emptyNote = this.root.Q<VisualElement>("rr-empty");
|
||||
playAgainButton = this.root.Q<Button>("rr-play-again-button");
|
||||
claimButton = this.root.Q<Button>("rr-claim-button");
|
||||
endButton = this.root.Q<Button>("rr-end-button");
|
||||
closeButton = this.root.Q<Button>("rr-close-button");
|
||||
|
||||
playAgainButton.clicked -= HandlePlayAgainClicked;
|
||||
playAgainButton.clicked += HandlePlayAgainClicked;
|
||||
claimButton.clicked -= HandleClaimClicked;
|
||||
claimButton.clicked += HandleClaimClicked;
|
||||
endButton.clicked -= HandleEndClicked;
|
||||
endButton.clicked += HandleEndClicked;
|
||||
closeButton.clicked -= HandleCloseClicked;
|
||||
closeButton.clicked += HandleCloseClicked;
|
||||
|
||||
ApplyVisibility();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void ApplyVisibility()
|
||||
{
|
||||
root.style.display = controller.ActiveModal == CozyModal.RoundResult ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
}
|
||||
|
||||
private void Refresh()
|
||||
{
|
||||
var result = controller.RoundResult;
|
||||
scoreLabel.text = result != null ? result.Score.ToString() : "0";
|
||||
bestLabel.text = result != null ? result.Best.ToString() : "0";
|
||||
collectedLabel.text = result != null ? result.Collected.ToString() : "0";
|
||||
|
||||
leaderboardScroll.Clear();
|
||||
|
||||
var entries = result != null ? result.TopEntries : null;
|
||||
emptyNote.style.display = entries == null || entries.Count == 0 ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
if (entries == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int count = Mathf.Min(entries.Count, MaxLeaderboardRows);
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var entry = entries[i];
|
||||
var rowRoot = leaderboardRowTemplate.CloneTree();
|
||||
var row = new LeaderboardRowView(rowRoot);
|
||||
row.Set(entry.Rank, string.IsNullOrEmpty(entry.PlayerName) ? "player" : entry.PlayerName, entry.Score);
|
||||
leaderboardScroll.Add(rowRoot);
|
||||
}
|
||||
}
|
||||
|
||||
private void HandlePlayAgainClicked()
|
||||
{
|
||||
controller.PlayAgain();
|
||||
}
|
||||
|
||||
private void HandleClaimClicked()
|
||||
{
|
||||
controller.ClaimScenarioLeaderboardReward();
|
||||
}
|
||||
|
||||
private void HandleEndClicked()
|
||||
{
|
||||
controller.EndScenarioLeaderboard();
|
||||
}
|
||||
|
||||
private void HandleCloseClicked()
|
||||
{
|
||||
controller.CloseModal();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6f3916e69e6ce4c78b909c659160ad95
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cde562fa676ee420795c27bd66549cab
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,29 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class BackpackItemRowView
|
||||
{
|
||||
private readonly VisualElement _icon;
|
||||
private readonly Label _nameLabel;
|
||||
private readonly Label _metaLabel;
|
||||
private readonly Label _amountLabel;
|
||||
|
||||
public BackpackItemRowView(VisualElement root)
|
||||
{
|
||||
_icon = root.Q<VisualElement>("item-icon");
|
||||
_nameLabel = root.Q<Label>("item-name");
|
||||
_metaLabel = root.Q<Label>("item-meta");
|
||||
_amountLabel = root.Q<Label>("item-amount");
|
||||
}
|
||||
|
||||
public void Set(Sprite icon, string itemName, string slug, int amount)
|
||||
{
|
||||
_icon.style.backgroundImage = new StyleBackground(icon);
|
||||
_nameLabel.text = itemName;
|
||||
_metaLabel.text = slug;
|
||||
_amountLabel.text = $"×{amount}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d7a25568da97f48f3b07abf321ad2f82
|
||||
@@ -1,25 +0,0 @@
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class LeaderboardRowView
|
||||
{
|
||||
private readonly Label rankLabel;
|
||||
private readonly Label playerLabel;
|
||||
private readonly Label scoreLabel;
|
||||
|
||||
public LeaderboardRowView(VisualElement root)
|
||||
{
|
||||
rankLabel = root.Q<Label>("lb-rank");
|
||||
playerLabel = root.Q<Label>("lb-player");
|
||||
scoreLabel = root.Q<Label>("lb-score");
|
||||
}
|
||||
|
||||
public void Set(int rank, string playerName, int score)
|
||||
{
|
||||
rankLabel.text = rank > 0 ? $"#{rank}" : "—";
|
||||
playerLabel.text = playerName;
|
||||
scoreLabel.text = score.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 29788c49080d642ff919c1d25b5dd979
|
||||
@@ -1,31 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class LogRowView
|
||||
{
|
||||
private readonly Label _timeLabel;
|
||||
private readonly Label _tagLabel;
|
||||
private readonly Label _messageLabel;
|
||||
private readonly Label _detailLabel;
|
||||
|
||||
public LogRowView(VisualElement root)
|
||||
{
|
||||
_timeLabel = root.Q<Label>("log-time");
|
||||
_tagLabel = root.Q<Label>("log-tag");
|
||||
_messageLabel = root.Q<Label>("log-message");
|
||||
_detailLabel = root.Q<Label>("log-detail");
|
||||
}
|
||||
|
||||
public void Set(string time, string tag, Color tagColor, string message, string detail)
|
||||
{
|
||||
_timeLabel.text = time;
|
||||
_tagLabel.text = tag;
|
||||
_tagLabel.style.color = tagColor;
|
||||
_tagLabel.style.backgroundColor = new Color(tagColor.r, tagColor.g, tagColor.b, 0.18f);
|
||||
_messageLabel.text = message;
|
||||
_detailLabel.text = detail;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ffa213acafee84d818a3cf631f0bb01b
|
||||
@@ -1,26 +0,0 @@
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class ShopOfferRowView
|
||||
{
|
||||
private readonly Label _nameLabel;
|
||||
private readonly Label _priceLabel;
|
||||
private readonly Button _buyButton;
|
||||
|
||||
public Button BuyButton => _buyButton;
|
||||
|
||||
public ShopOfferRowView(VisualElement root)
|
||||
{
|
||||
_nameLabel = root.Q<Label>("offer-name");
|
||||
_priceLabel = root.Q<Label>("offer-price");
|
||||
_buyButton = root.Q<Button>("offer-buy-button");
|
||||
}
|
||||
|
||||
public void Set(string offerName, string price)
|
||||
{
|
||||
_nameLabel.text = offerName;
|
||||
_priceLabel.text = price;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 94bf1e4d6fb50418487ed96aa4d65d4b
|
||||
@@ -1,32 +0,0 @@
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class ToastView
|
||||
{
|
||||
private const string ToneInfoClass = "tone-info";
|
||||
private const string ToneSuccessClass = "tone-success";
|
||||
private const string ToneErrorClass = "tone-error";
|
||||
|
||||
private readonly Label _titleLabel;
|
||||
private readonly Label _messageLabel;
|
||||
|
||||
public ToastView(VisualElement root)
|
||||
{
|
||||
Root = root;
|
||||
_titleLabel = root.Q<Label>("toast-title");
|
||||
_messageLabel = root.Q<Label>("toast-message");
|
||||
}
|
||||
|
||||
public VisualElement Root { get; }
|
||||
|
||||
public void Set(string title, string message, CozyToastTone tone)
|
||||
{
|
||||
_titleLabel.text = title;
|
||||
_messageLabel.text = message;
|
||||
Root.EnableInClassList(ToneInfoClass, tone == CozyToastTone.Info);
|
||||
Root.EnableInClassList(ToneSuccessClass, tone == CozyToastTone.Success);
|
||||
Root.EnableInClassList(ToneErrorClass, tone == CozyToastTone.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5d468efab7b7645f78186c03b82f5d32
|
||||
@@ -1,87 +0,0 @@
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class SessionCardPanel : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private PanelRenderer panelRenderer;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
|
||||
private Label _nicknameLabel;
|
||||
private Label _playerIdLabel;
|
||||
private Label _deviceIdLabel;
|
||||
private Label _regionLabel;
|
||||
private Label _projectKeyLabel;
|
||||
private Label _walletsLabel;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
controller.PhaseChanged += Refresh;
|
||||
controller.WalletsChanged += RefreshWallets;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
controller.PhaseChanged -= Refresh;
|
||||
controller.WalletsChanged -= RefreshWallets;
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
_nicknameLabel = root.Q<Label>("session-nickname");
|
||||
_playerIdLabel = root.Q<Label>("session-player-id");
|
||||
_deviceIdLabel = root.Q<Label>("session-device-id");
|
||||
_regionLabel = root.Q<Label>("session-region");
|
||||
_projectKeyLabel = root.Q<Label>("session-project-key");
|
||||
_walletsLabel = root.Q<Label>("session-wallets");
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void Refresh()
|
||||
{
|
||||
var identity = controller.Identity;
|
||||
if (identity == null)
|
||||
{
|
||||
_nicknameLabel.text = "—";
|
||||
_playerIdLabel.text = "—";
|
||||
_deviceIdLabel.text = "—";
|
||||
_regionLabel.text = "—";
|
||||
_projectKeyLabel.text = "—";
|
||||
}
|
||||
else
|
||||
{
|
||||
_nicknameLabel.text = string.IsNullOrEmpty(identity.Nickname)
|
||||
? $"Player {identity.PlayerId.Substring(0, Mathf.Min(6, identity.PlayerId.Length))}"
|
||||
: identity.Nickname;
|
||||
_playerIdLabel.text = identity.PlayerId;
|
||||
_deviceIdLabel.text = identity.DeviceId;
|
||||
_regionLabel.text = string.IsNullOrEmpty(identity.Region) ? "global" : identity.Region;
|
||||
_projectKeyLabel.text = identity.ProjectKey;
|
||||
}
|
||||
|
||||
RefreshWallets();
|
||||
}
|
||||
|
||||
private void RefreshWallets()
|
||||
{
|
||||
var wallets = controller.Wallets;
|
||||
if (wallets == null || wallets.Count == 0)
|
||||
{
|
||||
_walletsLabel.text = "No wallets";
|
||||
return;
|
||||
}
|
||||
|
||||
var builder = new StringBuilder();
|
||||
foreach (var wallet in wallets)
|
||||
{
|
||||
builder.AppendLine($"{wallet.Balance:0.##} {wallet.Currency}".TrimEnd());
|
||||
}
|
||||
_walletsLabel.text = builder.ToString().TrimEnd();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 900b9e31987914b56a3bba037e2a830c
|
||||
@@ -1,43 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class SetupOverlayPanel : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private PanelRenderer panelRenderer;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
|
||||
private VisualElement _overlay;
|
||||
private Label _errorLabel;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
controller.PhaseChanged += ApplyVisibility;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
controller.PhaseChanged -= ApplyVisibility;
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
_overlay = root.Q<VisualElement>("setup-overlay");
|
||||
_errorLabel = root.Q<Label>("setup-error");
|
||||
ApplyVisibility();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
_errorLabel.text = controller.SetupError;
|
||||
}
|
||||
|
||||
private void ApplyVisibility()
|
||||
{
|
||||
_overlay.style.display = controller.Phase == CozyPhase.Setup ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6de014257693b4ced830566d18e49444
|
||||
@@ -1,115 +0,0 @@
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class ShopModalPanel : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private PanelRenderer panelRenderer;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
[SerializeField] private VisualTreeAsset shopOfferRowTemplate;
|
||||
|
||||
private VisualElement _root;
|
||||
private Label _walletLabel;
|
||||
private ScrollView _offersScroll;
|
||||
private VisualElement _emptyNote;
|
||||
private Button _closeButton;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
controller.ModalChanged += ApplyVisibility;
|
||||
controller.ShopChanged += Rebuild;
|
||||
controller.WalletsChanged += RefreshWallet;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
controller.ModalChanged -= ApplyVisibility;
|
||||
controller.ShopChanged -= Rebuild;
|
||||
controller.WalletsChanged -= RefreshWallet;
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
_root = root.Q<VisualElement>("shop-modal");
|
||||
_walletLabel = _root.Q<Label>("shop-wallet");
|
||||
_offersScroll = _root.Q<ScrollView>("shop-offers-scroll");
|
||||
_emptyNote = _root.Q<VisualElement>("shop-empty");
|
||||
_closeButton = _root.Q<Button>("shop-close-button");
|
||||
|
||||
_closeButton.clicked -= HandleCloseClicked;
|
||||
_closeButton.clicked += HandleCloseClicked;
|
||||
|
||||
ApplyVisibility();
|
||||
RefreshWallet();
|
||||
Rebuild();
|
||||
}
|
||||
|
||||
private void ApplyVisibility()
|
||||
{
|
||||
_root.style.display = controller.ActiveModal == CozyModal.Shop ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
}
|
||||
|
||||
private void RefreshWallet()
|
||||
{
|
||||
var wallets = controller.Wallets;
|
||||
if (wallets == null || wallets.Count == 0)
|
||||
{
|
||||
_walletLabel.text = "Wallet: —";
|
||||
return;
|
||||
}
|
||||
|
||||
var builder = new StringBuilder("Wallet: ");
|
||||
foreach (var wallet in wallets)
|
||||
{
|
||||
if (builder.Length > "Wallet: ".Length)
|
||||
{
|
||||
builder.Append(" · ");
|
||||
}
|
||||
builder.Append($"{wallet.Balance:0.##} {wallet.Currency}".TrimEnd());
|
||||
}
|
||||
_walletLabel.text = builder.ToString();
|
||||
}
|
||||
|
||||
private void Rebuild()
|
||||
{
|
||||
_offersScroll.contentContainer.Clear();
|
||||
|
||||
var offers = controller.ShopOffers;
|
||||
_emptyNote.style.display = offers == null || offers.Count == 0 ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
if (offers == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var offer in offers)
|
||||
{
|
||||
var rowRoot = shopOfferRowTemplate.CloneTree();
|
||||
_offersScroll.contentContainer.Add(rowRoot);
|
||||
|
||||
var row = new ShopOfferRowView(rowRoot);
|
||||
row.Set(string.IsNullOrEmpty(offer.Name) ? offer.OfferId : offer.Name, PriceLabel(offer.Price, offer.Currency));
|
||||
|
||||
string offerId = offer.OfferId;
|
||||
row.BuyButton.clicked += () => controller.BuyShopOffer(offerId);
|
||||
}
|
||||
}
|
||||
|
||||
internal static string PriceLabel(double price, string currency)
|
||||
{
|
||||
if (price <= 0)
|
||||
{
|
||||
return "Free";
|
||||
}
|
||||
return $"{price:0.##} {currency}".TrimEnd();
|
||||
}
|
||||
|
||||
private void HandleCloseClicked()
|
||||
{
|
||||
controller.CloseModal();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 36789e549043d400a92f3a84849b4038
|
||||
@@ -1,78 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public class ToastsPanel : MonoBehaviour
|
||||
{
|
||||
private const float ToastLifetimeSeconds = 4.2f;
|
||||
|
||||
[SerializeField] private PanelRenderer panelRenderer;
|
||||
[SerializeField] private CozyCollectorController controller;
|
||||
[SerializeField] private VisualTreeAsset toastTemplate;
|
||||
|
||||
private readonly List<ToastView> _toasts = new List<ToastView>();
|
||||
private readonly List<float> _dismissAt = new List<float>();
|
||||
|
||||
private VisualElement _container;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
controller.ToastRequested += HandleToastRequested;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
controller.ToastRequested -= HandleToastRequested;
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
_container = root.Q("toasts");
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
for (int i = _toasts.Count - 1; i >= 0; i--)
|
||||
{
|
||||
if (Time.unscaledTime >= _dismissAt[i])
|
||||
{
|
||||
Dismiss(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleToastRequested(string title, string message, CozyToastTone tone)
|
||||
{
|
||||
var root = toastTemplate.CloneTree();
|
||||
_container.Add(root);
|
||||
|
||||
var toast = new ToastView(root);
|
||||
toast.Set(title, message, tone);
|
||||
toast.Root.RegisterCallback<ClickEvent>(_ => Dismiss(toast));
|
||||
|
||||
_toasts.Add(toast);
|
||||
_dismissAt.Add(Time.unscaledTime + ToastLifetimeSeconds);
|
||||
}
|
||||
|
||||
private void Dismiss(ToastView toast)
|
||||
{
|
||||
int index = _toasts.IndexOf(toast);
|
||||
if (index >= 0)
|
||||
{
|
||||
Dismiss(index);
|
||||
}
|
||||
}
|
||||
|
||||
private void Dismiss(int index)
|
||||
{
|
||||
var toast = _toasts[index];
|
||||
_toasts.RemoveAt(index);
|
||||
_dismissAt.RemoveAt(index);
|
||||
toast.Root.RemoveFromHierarchy();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 57e0ed949960344bd80072dd54a52c4f
|
||||
@@ -1,134 +0,0 @@
|
||||
using System.Collections;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace LiveOpsExamples
|
||||
{
|
||||
public static class UiDebugProbe
|
||||
{
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
|
||||
private static void Install()
|
||||
{
|
||||
new GameObject("UiDebugProbe").AddComponent<Probe>();
|
||||
}
|
||||
|
||||
private sealed class Probe : MonoBehaviour
|
||||
{
|
||||
private PanelRenderer _panelRenderer;
|
||||
private VisualElement _root;
|
||||
|
||||
private IEnumerator Start()
|
||||
{
|
||||
yield return null;
|
||||
yield return null;
|
||||
|
||||
_panelRenderer = FindFirstObjectByType<PanelRenderer>();
|
||||
if (_panelRenderer == null)
|
||||
{
|
||||
Debug.Log("[UiProbe] PanelRenderer: NOT FOUND");
|
||||
}
|
||||
else
|
||||
{
|
||||
_panelRenderer.RegisterUIReloadCallback(OnUIReload);
|
||||
}
|
||||
|
||||
if (_root == null)
|
||||
{
|
||||
Dump("after-scene-load");
|
||||
}
|
||||
|
||||
while (true)
|
||||
{
|
||||
yield return new WaitForSecondsRealtime(10f);
|
||||
Dump("periodic");
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (_panelRenderer != null)
|
||||
{
|
||||
_panelRenderer.UnregisterUIReloadCallback(OnUIReload);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnUIReload(PanelRenderer renderer, VisualElement root)
|
||||
{
|
||||
_root = root;
|
||||
Dump("ui-reload");
|
||||
}
|
||||
|
||||
private void Dump(string tag)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine($"[UiProbe] --- {tag} ---");
|
||||
sb.AppendLine($"screen={Screen.width}x{Screen.height}");
|
||||
|
||||
if (_panelRenderer == null)
|
||||
{
|
||||
sb.AppendLine("PanelRenderer: NOT FOUND");
|
||||
Debug.Log(sb.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
var ps = _panelRenderer.panelSettings;
|
||||
sb.AppendLine(ps == null
|
||||
? "panelSettings: NULL"
|
||||
: $"panelSettings={ps.name} scaleMode={ps.scaleMode} ref={ps.referenceResolution.x}x{ps.referenceResolution.y} match={ps.match} scale={ps.scale}");
|
||||
|
||||
if (_root == null)
|
||||
{
|
||||
sb.AppendLine("root: NULL (reload callback not fired yet)");
|
||||
Debug.Log(sb.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
sb.AppendLine($"root worldBound={_root.worldBound} children={_root.childCount}");
|
||||
var uiRoot = _root.childCount > 0 ? _root[0] : null;
|
||||
sb.AppendLine($"uiRoot={uiRoot?.name} children={uiRoot?.childCount}");
|
||||
if (uiRoot != null)
|
||||
{
|
||||
foreach (var child in uiRoot.Children())
|
||||
{
|
||||
Describe(sb, child);
|
||||
}
|
||||
}
|
||||
|
||||
var renderers = FindObjectsByType<PanelRenderer>(FindObjectsSortMode.None);
|
||||
sb.AppendLine($"panelRenderers={renderers.Length} panel={(_root.panel == null ? "null" : "ok")}");
|
||||
|
||||
Describe(sb, _root.Q("hud-score"));
|
||||
Describe(sb, _root.Q("hud-timer-fill"));
|
||||
Describe(sb, _root.Q("session-card"));
|
||||
Describe(sb, _root.Q("remote-config"));
|
||||
Describe(sb, _root.Q("event-log-scroll"));
|
||||
|
||||
var controller = FindFirstObjectByType<CozyCollectorController>();
|
||||
sb.AppendLine(controller == null
|
||||
? "controller: NOT FOUND"
|
||||
: $"controller phase={controller.Phase} activeModal={controller.ActiveModal} status='{controller.StatusMessage}'");
|
||||
|
||||
var cam = Camera.main;
|
||||
sb.AppendLine(cam == null
|
||||
? "camera: NOT FOUND"
|
||||
: $"camera rect={cam.rect} targetTexture={(cam.targetTexture == null ? "null" : cam.targetTexture.name)} enabled={cam.enabled} clearFlags={cam.clearFlags} time={Time.time:0.#} timeScale={Time.timeScale}");
|
||||
|
||||
Debug.Log(sb.ToString());
|
||||
}
|
||||
|
||||
private static void Describe(StringBuilder sb, VisualElement element)
|
||||
{
|
||||
if (element == null)
|
||||
{
|
||||
sb.AppendLine(" <element not found>");
|
||||
return;
|
||||
}
|
||||
|
||||
var r = element.resolvedStyle;
|
||||
sb.AppendLine($" {element.name}: display={r.display} visibility={r.visibility} opacity={r.opacity} " +
|
||||
$"size={r.width:0.#}x{r.height:0.#} worldBound={element.worldBound} classes='{string.Join(",", element.GetClasses())}'");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b70a6370f0b8b48aabebe030ae087adf
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e55519d1fbcf4d9e92a3d9a8f7e3b00d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 135 KiB |
@@ -1,181 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ca0ac79e8cb24691b33208b45e68fe13
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 21300000
|
||||
second: acorn
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
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: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
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: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 1
|
||||
swizzle: 50462976
|
||||
cookieLightType: 1
|
||||
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: 1
|
||||
- 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: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: acorn
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 309
|
||||
height: 392
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: e5cb0c22ba074776864e34d6364f01a5
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.3 MiB |
@@ -1,181 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e8139865590c408789e137275b78e239
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 21300000
|
||||
second: cozy-camp-bg
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
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: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
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: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 1
|
||||
swizzle: 50462976
|
||||
cookieLightType: 1
|
||||
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: 1
|
||||
- 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: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: cozy-camp-bg
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1672
|
||||
height: 941
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: d9ccce1352584530bd1d45ff1476f485
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 156 KiB |
@@ -1,181 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8b3f9a4a409e412780aa51d52bfdb7b0
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 21300000
|
||||
second: moonberry
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
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: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
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: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 1
|
||||
swizzle: 50462976
|
||||
cookieLightType: 1
|
||||
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: 1
|
||||
- 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: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: moonberry
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 360
|
||||
height: 354
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 07b3b8253d5a40d497c0328a18a5f9c6
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 189 KiB |
@@ -1,181 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 695606af95a0452790cf9228c0cc9f76
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 21300000
|
||||
second: player
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
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: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
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: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 1
|
||||
swizzle: 50462976
|
||||
cookieLightType: 1
|
||||
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: 1
|
||||
- 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: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: player
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 345
|
||||
height: 449
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: a72427bf101a4b6a84301acd98db55a3
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 182 KiB |
@@ -1,181 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c41fcc3b35c944ffa18a34b6c4dc2cd6
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 21300000
|
||||
second: snack
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
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: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
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: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 1
|
||||
swizzle: 50462976
|
||||
cookieLightType: 1
|
||||
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: 1
|
||||
- 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: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: snack
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 322
|
||||
height: 406
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: 8a1e24f0bfe74ef28116f0b8735cca60
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 140 KiB |
@@ -1,181 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b0d70332788c4ff7831161da4a2e71ff
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 21300000
|
||||
second: star
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
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: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
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: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 1
|
||||
swizzle: 50462976
|
||||
cookieLightType: 1
|
||||
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: 1
|
||||
- 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: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 1
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: star
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 363
|
||||
height: 366
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: 0
|
||||
bones: []
|
||||
spriteID: bbed52f8ed774bafafcd92dfe58ab093
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,10 +0,0 @@
|
||||
<UXML xmlns="UnityEngine.UIElements">
|
||||
<VisualElement name="backpack-item-row" class="row" style="flex-direction: row; align-items: center; padding-left: 10px; padding-right: 10px; padding-top: 6px; padding-bottom: 6px;">
|
||||
<VisualElement name="item-icon" style="width: 40px; height: 40px; border-top-left-radius: 9px; border-top-right-radius: 9px; border-bottom-left-radius: 9px; border-bottom-right-radius: 9px; background-color: rgb(30, 51, 44); margin-right: 10px; flex-shrink: 0;" />
|
||||
<VisualElement name="item-body" style="flex-grow: 1; flex-shrink: 1;">
|
||||
<Label name="item-name" text="Item name" style="font-size: 14px; -unity-font-style: bold;" />
|
||||
<Label name="item-meta" text="slug" class="label-muted" style="font-size: 11px;" />
|
||||
</VisualElement>
|
||||
<Label name="item-amount" text="×1" class="value-accent value-mono" style="width: 48px; font-size: 14px; -unity-text-align: middle-right; flex-shrink: 0;" />
|
||||
</VisualElement>
|
||||
</UXML>
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 29a6c5a5b6bb94220b5c2378923d4047
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -1,320 +0,0 @@
|
||||
#ui-root {
|
||||
--bg: #0c1512;
|
||||
--bg-2: #0f1c18;
|
||||
--panel: #16241f;
|
||||
--panel-2: #1b2c26;
|
||||
--row: #1e332c;
|
||||
--stroke: #2c463d;
|
||||
--stroke-soft: #24382f;
|
||||
--backdrop: rgba(6, 16, 14, 0.62);
|
||||
--accent: #f1c67d;
|
||||
--accent-bright: #ffe0a0;
|
||||
--text: #f6f1e0;
|
||||
--text-2: #c7cdba;
|
||||
--muted: #8f9a86;
|
||||
--primary: #c8863c;
|
||||
--primary-hover: #dd9a44;
|
||||
--primary-press: #a96f30;
|
||||
--primary-fg: #211406;
|
||||
--danger: #c85a3c;
|
||||
--danger-hover: #d96f4f;
|
||||
--success: #6fae5f;
|
||||
--radius: 14px;
|
||||
--radius-sm: 9px;
|
||||
--radius-pill: 999px;
|
||||
color: var(--text);
|
||||
font-size: 14px;
|
||||
flex-grow: 1;
|
||||
background-color: var(--bg);
|
||||
}
|
||||
|
||||
.panel-fill {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.card {
|
||||
background-color: var(--panel);
|
||||
border-color: var(--stroke-soft);
|
||||
border-width: 1px;
|
||||
border-radius: var(--radius);
|
||||
padding: 14px;
|
||||
}
|
||||
|
||||
.card-title {
|
||||
font-size: 12px;
|
||||
-unity-font-style: bold;
|
||||
letter-spacing: 1.3px;
|
||||
color: var(--accent);
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.card-hint {
|
||||
font-size: 11px;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.btn {
|
||||
border-radius: var(--radius-sm);
|
||||
border-width: 0;
|
||||
padding: 10px 18px;
|
||||
font-size: 14px;
|
||||
-unity-font-style: bold;
|
||||
-unity-text-align: middle-center;
|
||||
transition-property: background-color;
|
||||
transition-duration: 0.12s;
|
||||
transition-timing-function: ease;
|
||||
}
|
||||
|
||||
.btn:disabled {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: var(--primary);
|
||||
color: var(--primary-fg);
|
||||
}
|
||||
|
||||
.btn-primary:hover {
|
||||
background-color: var(--primary-hover);
|
||||
}
|
||||
|
||||
.btn-primary:active {
|
||||
background-color: var(--primary-press);
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background-color: var(--panel-2);
|
||||
color: var(--text);
|
||||
border-color: var(--stroke);
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
.btn-secondary:hover {
|
||||
background-color: var(--stroke-soft);
|
||||
}
|
||||
|
||||
.btn-secondary:active {
|
||||
background-color: var(--panel);
|
||||
}
|
||||
|
||||
.btn-ghost {
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
color: var(--text-2);
|
||||
border-color: var(--stroke);
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
.btn-ghost:hover {
|
||||
background-color: rgba(255, 255, 255, 0.06);
|
||||
}
|
||||
|
||||
.btn-ghost:active {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
background-color: var(--danger);
|
||||
color: #2a0f06;
|
||||
}
|
||||
|
||||
.btn-danger:hover {
|
||||
background-color: var(--danger-hover);
|
||||
}
|
||||
|
||||
.btn-danger:active {
|
||||
background-color: var(--danger);
|
||||
}
|
||||
|
||||
.row {
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
background-color: var(--panel-2);
|
||||
border-color: var(--stroke-soft);
|
||||
border-width: 1px;
|
||||
border-radius: var(--radius-sm);
|
||||
padding: 11px 12px;
|
||||
margin-bottom: 8px;
|
||||
transition-property: background-color, border-color;
|
||||
transition-duration: 0.6s;
|
||||
transition-timing-function: ease;
|
||||
}
|
||||
|
||||
.pill {
|
||||
border-radius: var(--radius-pill);
|
||||
border-color: var(--stroke);
|
||||
border-width: 1px;
|
||||
background-color: var(--panel);
|
||||
padding: 5px 12px;
|
||||
font-size: 12px;
|
||||
-unity-font-style: bold;
|
||||
color: var(--text-2);
|
||||
}
|
||||
|
||||
.tag {
|
||||
border-radius: var(--radius-pill);
|
||||
padding: 2px 6px;
|
||||
font-size: 10px;
|
||||
-unity-font-style: bold;
|
||||
letter-spacing: 0.6px;
|
||||
-unity-text-align: middle-center;
|
||||
color: var(--bg);
|
||||
}
|
||||
|
||||
.chip {
|
||||
flex-direction: column;
|
||||
background-color: rgba(14, 26, 22, 0.78);
|
||||
border-color: var(--stroke);
|
||||
border-width: 1px;
|
||||
border-radius: var(--radius-sm);
|
||||
padding: 7px 14px;
|
||||
}
|
||||
|
||||
.label-muted {
|
||||
font-size: 10px;
|
||||
letter-spacing: 1px;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.value-mono {
|
||||
font-size: 13px;
|
||||
color: var(--text-2);
|
||||
}
|
||||
|
||||
.value-accent {
|
||||
font-size: 16px;
|
||||
-unity-font-style: bold;
|
||||
color: var(--accent-bright);
|
||||
}
|
||||
|
||||
.modal-overlay {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 24px;
|
||||
background-color: var(--backdrop);
|
||||
transition-property: opacity;
|
||||
transition-duration: 0.15s;
|
||||
transition-timing-function: ease-out;
|
||||
}
|
||||
|
||||
.modal-window {
|
||||
width: 600px;
|
||||
max-height: 90%;
|
||||
background-color: var(--panel);
|
||||
border-color: var(--stroke);
|
||||
border-width: 1px;
|
||||
border-radius: var(--radius);
|
||||
transition-property: opacity, scale;
|
||||
transition-duration: 0.18s;
|
||||
transition-timing-function: ease-out;
|
||||
}
|
||||
|
||||
.modal-title {
|
||||
font-size: 24px;
|
||||
-unity-font-style: bold;
|
||||
color: var(--accent-bright);
|
||||
}
|
||||
|
||||
.modal-subtitle {
|
||||
margin-top: 3px;
|
||||
font-size: 13px;
|
||||
color: var(--text-2);
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
flex-direction: row;
|
||||
justify-content: flex-end;
|
||||
padding: 14px 20px 18px;
|
||||
}
|
||||
|
||||
.scroll-list {
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
}
|
||||
|
||||
.empty-note {
|
||||
color: var(--text-2);
|
||||
font-size: 14px;
|
||||
-unity-text-align: middle-center;
|
||||
padding: 24px 8px;
|
||||
}
|
||||
|
||||
.stat-tile {
|
||||
flex-grow: 1;
|
||||
flex-basis: 0;
|
||||
align-items: center;
|
||||
padding: 10px;
|
||||
border-radius: var(--radius-sm);
|
||||
border-color: var(--stroke-soft);
|
||||
border-width: 1px;
|
||||
background-color: var(--panel-2);
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 24px;
|
||||
-unity-font-style: bold;
|
||||
color: var(--accent-bright);
|
||||
}
|
||||
|
||||
.stat-label {
|
||||
font-size: 10px;
|
||||
letter-spacing: 0.8px;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
#hud-timer-fill {
|
||||
background-color: var(--accent);
|
||||
transition-property: background-color;
|
||||
transition-duration: 0.25s;
|
||||
}
|
||||
|
||||
#hud-timer-fill.timer-low {
|
||||
background-color: var(--danger);
|
||||
}
|
||||
|
||||
.flash {
|
||||
background-color: rgba(241, 198, 125, 0.32);
|
||||
border-color: var(--accent);
|
||||
transition-property: background-color, border-color;
|
||||
transition-duration: 0.6s;
|
||||
transition-timing-function: ease-out;
|
||||
}
|
||||
|
||||
.tone-info #toast-accent {
|
||||
background-color: var(--accent);
|
||||
}
|
||||
|
||||
.tone-success #toast-accent {
|
||||
background-color: var(--success);
|
||||
}
|
||||
|
||||
.tone-error #toast-accent {
|
||||
background-color: var(--danger);
|
||||
}
|
||||
|
||||
.kv-row {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
padding: 4px 0;
|
||||
transition-property: background-color, border-color;
|
||||
transition-duration: 0.6s;
|
||||
transition-timing-function: ease;
|
||||
}
|
||||
|
||||
.kv-key {
|
||||
font-size: 12px;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.kv-value {
|
||||
font-size: 12px;
|
||||
color: var(--text-2);
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 35fd0b224430d4ac698ff605ce89eb27
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
unsupportedSelectorAction: 0
|
||||
@@ -1,55 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 19101, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_Name: CozyCollectorPanelSettings
|
||||
m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.PanelSettings
|
||||
themeUss: {fileID: 6688696115612101803, guid: 0000000000000000d000000000000000,
|
||||
type: 0}
|
||||
m_DisableNoThemeWarning: 0
|
||||
m_TargetTexture: {fileID: 0}
|
||||
m_RenderMode: 0
|
||||
m_ColliderUpdateMode: 0
|
||||
m_ColliderIsTrigger: 1
|
||||
m_ScaleMode: 2
|
||||
m_ReferenceSpritePixelsPerUnit: 100
|
||||
m_PixelsPerUnit: 100
|
||||
m_Scale: 1
|
||||
m_ReferenceDpi: 96
|
||||
m_FallbackDpi: 96
|
||||
m_ReferenceResolution: {x: 1600, y: 900}
|
||||
m_ScreenMatchMode: 0
|
||||
m_Match: 0.5
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
m_BindingLogLevel: 0
|
||||
m_ClearDepthStencil: 1
|
||||
m_ClearColor: 0
|
||||
m_ColorClearValue: {r: 0, g: 0, b: 0, a: 0}
|
||||
m_VertexBudget: 0
|
||||
m_TextureSlotCount: 8
|
||||
m_DynamicAtlasSettings:
|
||||
m_MinAtlasSize: 64
|
||||
m_MaxAtlasSize: 4096
|
||||
m_MaxSubTextureSize: 64
|
||||
m_ActiveFilters: -1
|
||||
m_AtlasBlitShader: {fileID: 9101, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_DefaultShader: {fileID: 9100, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_RuntimeGaussianBlurShader: {fileID: 20300, guid: 0000000000000000f000000000000000,
|
||||
type: 0}
|
||||
m_RuntimeColorEffectShader: {fileID: 20301, guid: 0000000000000000f000000000000000,
|
||||
type: 0}
|
||||
m_SDFShader: {fileID: 19011, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_BitmapShader: {fileID: 9001, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_SpriteShader: {fileID: 19012, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ICUDataAsset: {fileID: 20204, guid: 0000000000000000f000000000000000, type: 0}
|
||||
forceGammaRendering: 0
|
||||
textSettings: {fileID: 0}
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 728073018ae96457c9d67e8cc2652ac8
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,190 +0,0 @@
|
||||
<UXML xmlns="UnityEngine.UIElements">
|
||||
<VisualElement name="ui-root" style="flex-grow: 1;">
|
||||
<Style src="CozyCollector.uss" />
|
||||
|
||||
<VisualElement name="hud" style="position: absolute; left: 0; top: 0; bottom: 0; width: 1200px; padding: 16px; flex-direction: column; justify-content: space-between;">
|
||||
<VisualElement style="flex-direction: row; justify-content: space-between; align-items: flex-start;">
|
||||
<VisualElement style="flex-direction: row;">
|
||||
<VisualElement class="chip" style="margin-right: 10px;">
|
||||
<Label class="label-muted" text="Score" />
|
||||
<Label name="hud-score" class="value-accent" text="0" />
|
||||
</VisualElement>
|
||||
<VisualElement class="chip">
|
||||
<Label class="label-muted" text="Best" />
|
||||
<Label name="hud-best" class="value-mono" text="0" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
<VisualElement class="chip" style="min-width: 140px;">
|
||||
<Label class="label-muted" text="Time left" />
|
||||
<Label name="hud-time-left" class="value-mono" text="60s" />
|
||||
<VisualElement name="hud-timer-bar" style="height: 5px; margin-top: 5px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; background-color: rgba(0, 0, 0, 0.35); overflow: hidden;">
|
||||
<VisualElement name="hud-timer-fill" style="height: 100%; width: 100%; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px;" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
<VisualElement style="flex-direction: row; justify-content: space-between; align-items: flex-end;">
|
||||
<VisualElement style="flex-direction: row;">
|
||||
<Button name="hud-shop-button" class="btn btn-secondary" text="Shop" style="margin-right: 10px;" />
|
||||
<Button name="hud-backpack-button" class="btn btn-secondary" text="Backpack" />
|
||||
</VisualElement>
|
||||
<VisualElement class="chip">
|
||||
<Label class="label-muted" text="Wallet" />
|
||||
<Label name="hud-wallet" class="value-accent" text="—" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
|
||||
<VisualElement name="right-rail" style="position: absolute; right: 0; top: 0; bottom: 0; width: 400px; padding: 14px; flex-direction: column; background-color: #0c1512; border-left-width: 1px; border-left-color: #2c463d;">
|
||||
<VisualElement name="session-card" class="card" style="margin-bottom: 12px;">
|
||||
<VisualElement style="flex-direction: row; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||
<Label class="card-title" text="Session" />
|
||||
<Label class="card-hint" text="device login" />
|
||||
</VisualElement>
|
||||
<Label name="session-nickname" class="value-accent" text="—" style="font-size: 16px; margin-bottom: 8px;" />
|
||||
<VisualElement class="kv-row">
|
||||
<Label class="kv-key" text="Player" />
|
||||
<Label name="session-player-id" class="kv-value" text="—" />
|
||||
</VisualElement>
|
||||
<VisualElement class="kv-row">
|
||||
<Label class="kv-key" text="Device" />
|
||||
<Label name="session-device-id" class="kv-value" text="—" />
|
||||
</VisualElement>
|
||||
<VisualElement class="kv-row">
|
||||
<Label class="kv-key" text="Region" />
|
||||
<Label name="session-region" class="kv-value" text="—" />
|
||||
</VisualElement>
|
||||
<VisualElement class="kv-row">
|
||||
<Label class="kv-key" text="Project" />
|
||||
<Label name="session-project-key" class="kv-value" text="—" />
|
||||
</VisualElement>
|
||||
<Label name="session-wallets" class="label-muted" text="No wallets" style="margin-top: 8px;" />
|
||||
</VisualElement>
|
||||
|
||||
<VisualElement name="remote-config" class="card" style="margin-bottom: 12px;">
|
||||
<VisualElement style="flex-direction: row; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||
<Label class="card-title" text="Remote Config" />
|
||||
<Label class="card-hint" text="live · no client build" />
|
||||
</VisualElement>
|
||||
<VisualElement name="rc-row-player-speed" class="row" style="flex-direction: row; justify-content: space-between; align-items: center; margin-bottom: 6px;">
|
||||
<Label class="label-muted" text="player speed" />
|
||||
<Label name="rc-value-player-speed" class="value-accent" text="—" />
|
||||
</VisualElement>
|
||||
<VisualElement name="rc-row-spawn-interval" class="row" style="flex-direction: row; justify-content: space-between; align-items: center; margin-bottom: 6px;">
|
||||
<Label class="label-muted" text="spawn interval" />
|
||||
<Label name="rc-value-spawn-interval" class="value-accent" text="—" />
|
||||
</VisualElement>
|
||||
<VisualElement name="rc-row-collectible-score" class="row" style="flex-direction: row; justify-content: space-between; align-items: center; margin-bottom: 6px;">
|
||||
<Label class="label-muted" text="collectible score" />
|
||||
<Label name="rc-value-collectible-score" class="value-accent" text="—" />
|
||||
</VisualElement>
|
||||
<VisualElement name="rc-row-round-seconds" class="row" style="flex-direction: row; justify-content: space-between; align-items: center;">
|
||||
<Label class="label-muted" text="round seconds" />
|
||||
<Label name="rc-value-round-seconds" class="value-accent" text="—" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
|
||||
<VisualElement name="event-inspector" class="card panel-fill" style="flex-grow: 1; flex-shrink: 1;">
|
||||
<VisualElement style="flex-direction: row; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||
<Label class="card-title" text="Event Inspector" />
|
||||
<Label class="card-hint" text="live" />
|
||||
</VisualElement>
|
||||
<ScrollView name="event-log-scroll" class="scroll-list" style="flex-grow: 1; flex-shrink: 1;" />
|
||||
<Label name="event-log-empty" class="empty-note" text="No events yet" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
|
||||
<VisualElement name="toasts" style="position: absolute; left: 864px; bottom: 16px; width: 320px;" />
|
||||
|
||||
<VisualElement name="boot-overlay" style="position: absolute; left: 0; right: 0; top: 0; bottom: 0; align-items: center; justify-content: center; background-color: rgba(6, 16, 14, 0.62);">
|
||||
<VisualElement class="card" style="width: 420px; padding: 30px; align-items: center;">
|
||||
<VisualElement name="boot-spinner" style="width: 22px; height: 22px; margin-bottom: 14px; border-top-left-radius: 11px; border-top-right-radius: 11px; border-bottom-left-radius: 11px; border-bottom-right-radius: 11px; border-left-width: 3px; border-right-width: 3px; border-top-width: 3px; border-bottom-width: 3px; border-left-color: rgba(241, 198, 125, 0.28); border-right-color: rgba(241, 198, 125, 0.28); border-bottom-color: rgba(241, 198, 125, 0.28); border-top-color: #f1c67d;" />
|
||||
<Label class="modal-title" text="Cozy Collector" />
|
||||
<Label name="boot-status" class="label-muted" text="Starting…" style="margin-top: 8px;" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
|
||||
<VisualElement name="setup-overlay" style="position: absolute; left: 0; right: 0; top: 0; bottom: 0; align-items: center; justify-content: center; background-color: rgba(6, 16, 14, 0.62);">
|
||||
<VisualElement class="card" style="width: 480px; padding: 30px; align-items: center;">
|
||||
<Label class="modal-title" text="Setup required" />
|
||||
<Label name="setup-error" class="label-muted" text="—" style="margin-top: 12px;" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
|
||||
<VisualElement name="shop-modal" class="modal-overlay">
|
||||
<VisualElement class="modal-window" style="max-height: 80%;">
|
||||
<VisualElement style="padding: 18px; padding-bottom: 8px;">
|
||||
<Label class="modal-title" text="Camp Shop" />
|
||||
<Label name="shop-wallet" class="modal-subtitle" text="Wallet: —" />
|
||||
</VisualElement>
|
||||
<ScrollView name="shop-offers-scroll" class="scroll-list" style="flex-grow: 1; flex-shrink: 1; padding-left: 18px; padding-right: 18px;" />
|
||||
<Label name="shop-empty" class="empty-note" text="No offers available" />
|
||||
<VisualElement class="modal-footer">
|
||||
<Button name="shop-close-button" class="btn btn-secondary" text="Close" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
|
||||
<VisualElement name="backpack-modal" class="modal-overlay">
|
||||
<VisualElement class="modal-window" style="max-height: 80%;">
|
||||
<VisualElement style="padding: 18px; padding-bottom: 8px;">
|
||||
<Label class="modal-title" text="Backpack" />
|
||||
<Label class="modal-subtitle" text="Server-owned player inventory" />
|
||||
</VisualElement>
|
||||
<ScrollView name="backpack-items-scroll" class="scroll-list" style="flex-grow: 1; flex-shrink: 1; padding-left: 18px; padding-right: 18px;" />
|
||||
<Label name="backpack-empty" class="empty-note" text="Backpack is empty" />
|
||||
<VisualElement class="modal-footer">
|
||||
<Button name="backpack-close-button" class="btn btn-secondary" text="Close" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
|
||||
<VisualElement name="offer-modal" class="modal-overlay">
|
||||
<VisualElement class="modal-window" style="width: 480px;">
|
||||
<VisualElement style="padding: 18px; padding-bottom: 8px;">
|
||||
<Label name="offer-title" class="modal-title" text="Special Offer" />
|
||||
<Label class="modal-subtitle" text="Delivered by a scenario store-offer node" />
|
||||
</VisualElement>
|
||||
<VisualElement style="padding-left: 18px; padding-right: 18px; padding-bottom: 8px;">
|
||||
<Label name="offer-name" class="value-accent" text="—" style="font-size: 16px;" />
|
||||
<Label name="offer-price" class="label-muted" text="—" style="margin-top: 4px;" />
|
||||
</VisualElement>
|
||||
<VisualElement class="modal-footer">
|
||||
<Button name="offer-decline-button" class="btn btn-danger" text="Decline" style="margin-right: 10px;" />
|
||||
<Button name="offer-buy-button" class="btn btn-primary" text="Buy" style="margin-right: 10px;" />
|
||||
<Button name="offer-close-button" class="btn btn-ghost" text="Close" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
|
||||
<VisualElement name="round-result-modal" class="modal-overlay">
|
||||
<VisualElement class="modal-window" style="max-height: 80%;">
|
||||
<VisualElement style="padding: 18px; padding-bottom: 8px;">
|
||||
<Label class="modal-title" text="Round Result" />
|
||||
<Label class="modal-subtitle" text="scenario leaderboard" />
|
||||
</VisualElement>
|
||||
<VisualElement style="flex-direction: row; padding-left: 18px; padding-right: 18px; padding-bottom: 12px;">
|
||||
<VisualElement class="stat-tile" style="flex-grow: 1; margin-right: 10px;">
|
||||
<Label name="rr-score" class="stat-value" text="0" />
|
||||
<Label class="stat-label" text="Score" />
|
||||
</VisualElement>
|
||||
<VisualElement class="stat-tile" style="flex-grow: 1; margin-right: 10px;">
|
||||
<Label name="rr-best" class="stat-value" text="0" />
|
||||
<Label class="stat-label" text="Best" />
|
||||
</VisualElement>
|
||||
<VisualElement class="stat-tile" style="flex-grow: 1;">
|
||||
<Label name="rr-collected" class="stat-value" text="0" />
|
||||
<Label class="stat-label" text="Collected" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
<ScrollView name="rr-leaderboard-scroll" class="scroll-list" style="flex-grow: 1; flex-shrink: 1; padding-left: 18px; padding-right: 18px;" />
|
||||
<Label name="rr-empty" class="empty-note" text="No leaderboard entries" />
|
||||
<VisualElement class="modal-footer">
|
||||
<Button name="rr-claim-button" class="btn btn-primary" text="Claim" style="margin-right: 10px;" />
|
||||
<Button name="rr-play-again-button" class="btn btn-secondary" text="Play Again" style="margin-right: 10px;" />
|
||||
<Button name="rr-end-button" class="btn btn-ghost" text="End" style="margin-right: 10px;" />
|
||||
<Button name="rr-close-button" class="btn btn-ghost" text="Close" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
</UXML>
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 766f5cae1f4354e20b4043cf1c6756bf
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -1,7 +0,0 @@
|
||||
<UXML xmlns="UnityEngine.UIElements">
|
||||
<VisualElement name="leaderboard-row" class="row" style="flex-direction: row; align-items: center; padding-left: 10px; padding-right: 10px; padding-top: 6px; padding-bottom: 6px;">
|
||||
<Label name="lb-rank" text="#1" class="value-accent value-mono" style="width: 44px; font-size: 14px; -unity-font-style: bold; flex-shrink: 0;" />
|
||||
<Label name="lb-player" text="Player" style="flex-grow: 1; flex-shrink: 1; font-size: 14px;" />
|
||||
<Label name="lb-score" text="0" class="value-accent value-mono" style="width: 76px; font-size: 14px; -unity-text-align: middle-right; flex-shrink: 0;" />
|
||||
</VisualElement>
|
||||
</UXML>
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e171bce5673384061b0cb20cbe5082d1
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -1,10 +0,0 @@
|
||||
<UXML xmlns="UnityEngine.UIElements">
|
||||
<VisualElement name="log-row" class="row" style="flex-direction: row; align-items: center; padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;">
|
||||
<Label name="log-time" text="12:00:00" class="label-muted value-mono" style="width: 64px; font-size: 11px; flex-shrink: 0;" />
|
||||
<Label name="log-tag" text="TAG" class="tag" style="width: 90px; margin-left: 8px; margin-right: 8px; font-size: 10px; -unity-font-style: bold; -unity-text-align: middle-center; flex-shrink: 0;" />
|
||||
<VisualElement name="log-body" style="flex-grow: 1; flex-shrink: 1;">
|
||||
<Label name="log-message" text="event_name" style="font-size: 12px;" />
|
||||
<Label name="log-detail" text="{ }" class="label-muted value-mono" style="font-size: 10px;" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
</UXML>
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 94171891e540744b3a0f55b254cbe18b
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -1,7 +0,0 @@
|
||||
<UXML xmlns="UnityEngine.UIElements">
|
||||
<VisualElement name="shop-offer-row" class="row" style="flex-direction: row; align-items: center; padding-left: 12px; padding-right: 8px; padding-top: 6px; padding-bottom: 6px;">
|
||||
<Label name="offer-name" text="Offer name" style="flex-grow: 1; flex-shrink: 1; font-size: 14px;" />
|
||||
<Label name="offer-price" text="$0.99" class="value-accent" style="width: 72px; font-size: 13px; -unity-text-align: middle-right; flex-shrink: 0;" />
|
||||
<Button name="offer-buy-button" text="Buy" class="btn btn-primary" style="width: 72px; height: 32px; margin-left: 12px; flex-shrink: 0;" />
|
||||
</VisualElement>
|
||||
</UXML>
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 85424ff7d38f94ed08f809972c61617c
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
@@ -1,9 +0,0 @@
|
||||
<UXML xmlns="UnityEngine.UIElements">
|
||||
<VisualElement name="toast-row" class="row tone-info" style="flex-direction: row; align-items: stretch; width: 320px;">
|
||||
<VisualElement name="toast-accent" style="width: 4px; flex-shrink: 0;" />
|
||||
<VisualElement name="toast-body" style="flex-grow: 1; flex-shrink: 1; padding-left: 12px; padding-right: 8px; padding-top: 8px; padding-bottom: 8px;">
|
||||
<Label name="toast-title" text="Toast title" style="font-size: 14px; -unity-font-style: bold;" />
|
||||
<Label name="toast-message" text="Toast message" class="label-muted" style="font-size: 12px; white-space: normal; margin-top: 2px;" />
|
||||
</VisualElement>
|
||||
</VisualElement>
|
||||
</UXML>
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3a2038228118b4a09a3a242b8a1fc1d4
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user