Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2835c514d8 | ||
|
|
56a5a82a8c |
@@ -1,27 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditor.SceneManagement;
|
||||
|
||||
// Tools -> Fix Camera & HUD: один раз исправить сцену и сохранить.
|
||||
// - HUD_Canvas -> Screen Space Overlay, отвязан от камеры
|
||||
// - с камеры убраны CameraZoom / CameraController / FlyCamera, добавлена CityCamera
|
||||
// - удалены компоненты с "Missing script" (скрипты, которых в проекте уже нет)
|
||||
public static class CameraHUDFixer
|
||||
{
|
||||
// [MenuItem("Tools/Fix Camera & HUD")] -- отключено, см. RestoreOldCamera
|
||||
public static void Fix()
|
||||
{
|
||||
int missing = 0;
|
||||
var hud = GameObject.Find("HUD_Canvas");
|
||||
if (hud != null) missing += GameObjectUtility.RemoveMonoBehavioursWithMissingScript(hud);
|
||||
if (Camera.main != null) missing += GameObjectUtility.RemoveMonoBehavioursWithMissingScript(Camera.main.gameObject);
|
||||
|
||||
int changes = HUDCameraSetup.Apply(true);
|
||||
|
||||
if (hud != null) EditorSceneManager.MarkSceneDirty(hud.scene);
|
||||
else if (Camera.main != null) EditorSceneManager.MarkSceneDirty(Camera.main.gameObject.scene);
|
||||
|
||||
Debug.Log("Камера и HUD исправлены: изменений " + changes + ", удалено пустых скриптов " + missing +
|
||||
". Сохрани сцену (Ctrl+S). Границы карты камеры: компонент CityCamera на Main Camera.");
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 43380bdc85562cc4abb95b707e06cfb6
|
||||
@@ -48,8 +48,7 @@ public class HUDPanelsBuilder
|
||||
if (canvasGO == null) { Debug.LogError("Не найден объект HUD_Canvas на сцене."); return; }
|
||||
|
||||
|
||||
// казармы: префаб + данные здания + в список стройки
|
||||
EnsureBarracks();
|
||||
|
||||
|
||||
// менеджер
|
||||
UIPanelManager manager = canvasGO.GetComponent<UIPanelManager>();
|
||||
@@ -139,93 +138,7 @@ public class HUDPanelsBuilder
|
||||
(missing.Length > 0 ? ". Не найдены:" + missing : "") + ". Не забудь сохранить сцену (Ctrl+S).");
|
||||
}
|
||||
|
||||
// ===================== КАЗАРМЫ =====================
|
||||
|
||||
const string BarracksPrefabPath = "Assets/Prefab/Buildings/Barracks.prefab";
|
||||
const string BarracksDataPath = "Assets/Prefab/Buildings/Data_Barracks.asset";
|
||||
|
||||
[MenuItem("Tools/Create Barracks")]
|
||||
public static void EnsureBarracks()
|
||||
{
|
||||
Sprite icon = LoadSprite("Assets/UI/HUD v2/Войска/v1.png");
|
||||
GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(BarracksPrefabPath);
|
||||
|
||||
if (prefab == null)
|
||||
{
|
||||
// берём готовое здание как шаблон: тот же масштаб, слой, материал, коллайдер
|
||||
string template = "Assets/Prefab/Buildings/Food.prefab";
|
||||
if (AssetDatabase.LoadAssetAtPath<GameObject>(template) == null)
|
||||
{
|
||||
var bmT = UnityEngine.Object.FindAnyObjectByType<BuildManager>();
|
||||
if (bmT != null)
|
||||
foreach (var b in bmT.allBuildings)
|
||||
if (b != null && b.prefab != null) { template = AssetDatabase.GetAssetPath(b.prefab); break; }
|
||||
}
|
||||
if (!AssetDatabase.CopyAsset(template, BarracksPrefabPath))
|
||||
{
|
||||
Debug.LogError("Не удалось создать префаб казарм из " + template);
|
||||
return;
|
||||
}
|
||||
|
||||
GameObject root = PrefabUtility.LoadPrefabContents(BarracksPrefabPath);
|
||||
root.name = "Barracks";
|
||||
foreach (var c in root.GetComponents<ResourceCollector>()) UnityEngine.Object.DestroyImmediate(c);
|
||||
foreach (var c in root.GetComponents<ResourceProducer>()) UnityEngine.Object.DestroyImmediate(c);
|
||||
foreach (var c in root.GetComponents<BuildingUI>()) UnityEngine.Object.DestroyImmediate(c);
|
||||
var kids = new System.Collections.Generic.List<GameObject>();
|
||||
foreach (Transform ch in root.transform) kids.Add(ch.gameObject); // полоска запаса ресурса -- не нужна
|
||||
foreach (var k in kids) UnityEngine.Object.DestroyImmediate(k);
|
||||
|
||||
var sr = root.GetComponent<SpriteRenderer>();
|
||||
if (sr != null)
|
||||
{
|
||||
if (icon != null)
|
||||
{
|
||||
Vector2 oldSize = sr.sprite != null ? (Vector2)sr.sprite.bounds.size : Vector2.one;
|
||||
sr.sprite = icon;
|
||||
sr.color = Color.white;
|
||||
float k = Mathf.Min(oldSize.x / icon.bounds.size.x, oldSize.y / icon.bounds.size.y);
|
||||
root.transform.localScale = Vector3.Scale(root.transform.localScale, new Vector3(k, k, 1));
|
||||
}
|
||||
else sr.color = new Color(1f, 0.6f, 0.6f); // нет иконки -- хотя бы отличаем цветом
|
||||
|
||||
var box = root.GetComponent<BoxCollider2D>();
|
||||
if (box != null && sr.sprite != null) { box.size = sr.sprite.bounds.size; box.offset = sr.sprite.bounds.center; }
|
||||
}
|
||||
if (root.GetComponent<Barracks>() == null) root.AddComponent<Barracks>();
|
||||
PrefabUtility.SaveAsPrefabAsset(root, BarracksPrefabPath);
|
||||
PrefabUtility.UnloadPrefabContents(root);
|
||||
prefab = AssetDatabase.LoadAssetAtPath<GameObject>(BarracksPrefabPath);
|
||||
Debug.Log("Создан префаб казарм: " + BarracksPrefabPath);
|
||||
}
|
||||
|
||||
BuildingData data = AssetDatabase.LoadAssetAtPath<BuildingData>(BarracksDataPath);
|
||||
if (data == null)
|
||||
{
|
||||
data = ScriptableObject.CreateInstance<BuildingData>();
|
||||
data.buildingName = "Казармы";
|
||||
data.icon = icon;
|
||||
data.prefab = prefab;
|
||||
data.requiredTownHallLevel = 1;
|
||||
data.cost = new[]
|
||||
{
|
||||
new ResourceCost { type = ResourceType.Wood, amount = 300 },
|
||||
new ResourceCost { type = ResourceType.Stone, amount = 200 },
|
||||
};
|
||||
AssetDatabase.CreateAsset(data, BarracksDataPath);
|
||||
AssetDatabase.SaveAssets();
|
||||
Debug.Log("Созданы данные здания: " + BarracksDataPath);
|
||||
}
|
||||
|
||||
var bm = UnityEngine.Object.FindAnyObjectByType<BuildManager>();
|
||||
if (bm != null && !bm.allBuildings.Contains(data))
|
||||
{
|
||||
bm.allBuildings.Add(data);
|
||||
EditorUtility.SetDirty(bm);
|
||||
EditorSceneManager.MarkSceneDirty(bm.gameObject.scene);
|
||||
Debug.Log("Казармы добавлены в список стройки (BuildManager)");
|
||||
}
|
||||
}
|
||||
// «Tools/Create Barracks» (префаб и данные Казарм 2D-города) удалён 06.11 вместе с 2D-городом: Казармы -- здание 3D-поселения
|
||||
|
||||
static Sprite LoadSprite(string path)
|
||||
{
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEditor;
|
||||
using UnityEditor.SceneManagement;
|
||||
|
||||
// HUD ПРИКРЕПЛЁН К КАМЕРЕ (Canvas: Screen Space - Camera):
|
||||
// - HUD рисуется камерой и всегда занимает экран одинаково -- при зуме и перемещении не плывёт и не масштабируется
|
||||
// - карту можно двигать и зумить (CameraController), клики по кнопкам HUD работают
|
||||
// - спрайты внутри HUD (например "Рамка в середине") рисуются правильно -- в этом режиме Canvas живёт в мире перед камерой
|
||||
// - CameraZoom больше не нужен (он масштабировал HUD вручную и делал это в обратную сторону)
|
||||
//
|
||||
// Применяется сам один раз после компиляции, если сцена ещё не в этом режиме. Вручную: Tools -> HUD: Attach To Camera.
|
||||
[InitializeOnLoad]
|
||||
public static class RestoreOldCamera
|
||||
{
|
||||
static readonly Vector2 DesignSize = new Vector2(2007.7732f, 1032.786f); // размер, под который собран HUD
|
||||
|
||||
static RestoreOldCamera() { EditorApplication.delayCall += Auto; }
|
||||
|
||||
static void Auto()
|
||||
{
|
||||
if (EditorApplication.isPlayingOrWillChangePlaymode) return;
|
||||
var hud = GameObject.Find("HUD_Canvas");
|
||||
var cam = Camera.main;
|
||||
if (hud == null || cam == null) return;
|
||||
var canvas = hud.GetComponent<Canvas>();
|
||||
var sc = hud.GetComponent<CanvasScaler>();
|
||||
bool ok = canvas != null && canvas.renderMode == RenderMode.ScreenSpaceCamera && canvas.worldCamera == cam
|
||||
&& cam.GetComponent<CameraZoom>() == null && cam.GetComponent<CityCamera>() == null
|
||||
&& sc != null && sc.enabled && sc.screenMatchMode == CanvasScaler.ScreenMatchMode.Expand;
|
||||
if (!ok) Apply();
|
||||
}
|
||||
|
||||
[MenuItem("Tools/HUD: Attach To Camera")]
|
||||
public static void Apply()
|
||||
{
|
||||
var cam = Camera.main;
|
||||
var hud = GameObject.Find("HUD_Canvas");
|
||||
if (cam == null || hud == null) { Debug.LogError("Нужны Main Camera и HUD_Canvas"); return; }
|
||||
|
||||
// ---- камера: только CameraController (перемещение + зум) ----
|
||||
foreach (var c in cam.GetComponents<CityCamera>()) Object.DestroyImmediate(c);
|
||||
foreach (var c in cam.GetComponents<CameraZoom>()) Object.DestroyImmediate(c);
|
||||
var ctrl = cam.GetComponent<CameraController>();
|
||||
if (ctrl == null)
|
||||
{
|
||||
ctrl = cam.gameObject.AddComponent<CameraController>();
|
||||
ctrl.moveSpeed = 5f; ctrl.zoomSpeed = 2f; ctrl.minOrthoSize = 2f; ctrl.maxOrthoSize = 50f;
|
||||
}
|
||||
ctrl.enabled = true;
|
||||
cam.orthographic = true;
|
||||
cam.transform.localScale = Vector3.one;
|
||||
cam.transform.rotation = Quaternion.identity;
|
||||
if (cam.orthographicSize < 2f || cam.orthographicSize > 50f) cam.orthographicSize = 10f;
|
||||
|
||||
// ---- HUD: Screen Space - Camera ----
|
||||
var canvas = hud.GetComponent<Canvas>();
|
||||
var rt = (RectTransform)hud.transform;
|
||||
if (rt.parent != null) rt.SetParent(null, false);
|
||||
canvas.renderMode = RenderMode.ScreenSpaceCamera;
|
||||
canvas.worldCamera = cam;
|
||||
canvas.planeDistance = 5f; // между камерой (z=-10) и картой (z=0)
|
||||
canvas.sortingOrder = 100; // поверх зданий
|
||||
rt.localRotation = Quaternion.identity;
|
||||
|
||||
var scaler = hud.GetComponent<CanvasScaler>();
|
||||
if (scaler == null) scaler = hud.AddComponent<CanvasScaler>();
|
||||
scaler.enabled = true;
|
||||
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
|
||||
scaler.referenceResolution = DesignSize;
|
||||
// Expand: весь HUD (2007x1032) всегда помещается на экран целиком -- и в узком окне, и на широком телефоне
|
||||
scaler.screenMatchMode = CanvasScaler.ScreenMatchMode.Expand;
|
||||
|
||||
// спрайты внутри HUD -- поверх карты
|
||||
foreach (var sr in hud.GetComponentsInChildren<SpriteRenderer>(true))
|
||||
{
|
||||
if (sr.sortingOrder < 100) sr.sortingOrder = 100;
|
||||
if (!sr.gameObject.activeSelf) sr.gameObject.SetActive(true);
|
||||
}
|
||||
|
||||
EditorSceneManager.MarkSceneDirty(hud.scene);
|
||||
Debug.Log("HUD прикреплён к камере (Screen Space - Camera), CameraZoom убран. Сохрани сцену: Ctrl+S.");
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f4f66fb7b626a0e41af6fe3fe793e917
|
||||
@@ -3,12 +3,10 @@ using UnityEditor;
|
||||
|
||||
// Следит, чтобы сцена карты мира (WorldMap, от Саши) была в Build Settings --
|
||||
// иначе переход город -> карта не работает. Срабатывает сам после каждой компиляции.
|
||||
// Стартовая сцена (05.11): 3D-поселение City3D, если оно есть в проекте, иначе 2D-город MVP1.
|
||||
// Выключенный в Build Settings MVP1 (06.11) скрипт не трогает и заново не добавляет.
|
||||
// Стартовая сцена -- 3D-поселение City3D (2D-город MVP1 удалён 06.11).
|
||||
[InitializeOnLoad]
|
||||
public static class SceneListFixer
|
||||
{
|
||||
const string CityScene = "Assets/Scenes/MVP1.unity";
|
||||
const string WorldScene = "Assets/Scenes/WorldMap.unity";
|
||||
const string City3DScene = "Assets/Scenes/City3D.unity";
|
||||
|
||||
@@ -18,8 +16,7 @@ public static class SceneListFixer
|
||||
{
|
||||
var scenes = new List<EditorBuildSettingsScene>(EditorBuildSettings.scenes);
|
||||
bool changed = false;
|
||||
string start = AssetDatabase.LoadAssetAtPath<SceneAsset>(City3DScene) != null ? City3DScene : CityScene;
|
||||
// 2D-город (MVP1) больше не развиваем (06.11): при 3D-поселении его в список не добавляем и не включаем
|
||||
string start = City3DScene;
|
||||
var wanted = new[] { start, WorldScene };
|
||||
foreach (var path in wanted)
|
||||
{
|
||||
|
||||
@@ -9,13 +9,13 @@ using UnityEngine.UI;
|
||||
|
||||
// Tools -> Build World Map Scene
|
||||
// 1. Создаёт сцену Assets/Scenes/WorldMap.unity: камера, EventSystem, UI карты, WorldMapController.
|
||||
// 2. Ставит MVP1 и WorldMap в Build Settings (иначе SceneManager.LoadScene их не найдёт).
|
||||
// 2. Ставит город (City3D) и WorldMap в Build Settings (иначе SceneManager.LoadScene их не найдёт).
|
||||
// 3. Проверяет, что на кнопке Nav_Battle в городе висит OpenBattleButton.
|
||||
// Можно запускать повторно -- сцена карты пересоздаётся заново.
|
||||
public static class WorldMapSceneBuilder
|
||||
{
|
||||
const string WorldMapScenePath = "Assets/Scenes/WorldMap.unity";
|
||||
const string CityScenePath = "Assets/Scenes/MVP1.unity";
|
||||
const string CityScenePath = "Assets/Scenes/City3D.unity"; // город -- 3D-поселение (MVP1 удалён 06.11)
|
||||
|
||||
[MenuItem("Tools/Build World Map Scene")]
|
||||
public static void Build()
|
||||
@@ -26,7 +26,7 @@ public static class WorldMapSceneBuilder
|
||||
UpdateBuildSettings();
|
||||
HookUpCityBattleButton();
|
||||
|
||||
Debug.Log("[КАРТА] Сцена карты мира создана, кнопка БОЙ в городе подключена. Запускай MVP1 и жми БОЙ.");
|
||||
Debug.Log("[КАРТА] Сцена карты мира создана, кнопка БОЙ в городе подключена. Запускай City3D и жми БОЙ.");
|
||||
}
|
||||
|
||||
// ---------------- СЦЕНА КАРТЫ ----------------
|
||||
@@ -408,7 +408,7 @@ public static class WorldMapSceneBuilder
|
||||
GameObject navBattle = GameObject.Find("Nav_Battle");
|
||||
if (navBattle == null)
|
||||
{
|
||||
Debug.LogWarning("[КАРТА] В сцене MVP1 не найден объект Nav_Battle -- повесь OpenBattleButton на кнопку БОЙ вручную.");
|
||||
Debug.LogWarning("[КАРТА] В сцене города не найден объект Nav_Battle -- повесь OpenBattleButton на кнопку БОЙ вручную.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5194b2d04b025424f97b0d83f0c6bdcc
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,154 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &8587519695404222676
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5056236775830869539}
|
||||
- component: {fileID: 7776370013680216338}
|
||||
- component: {fileID: 1708035113988781431}
|
||||
- component: {fileID: 2152423632773446457}
|
||||
m_Layer: 3
|
||||
m_Name: Barracks
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5056236775830869539
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8587519695404222676}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: -3.48, y: -1.22, z: 0}
|
||||
m_LocalScale: {x: 0.16310804, y: 0.15743585, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &7776370013680216338
|
||||
SpriteRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8587519695404222676}
|
||||
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: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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: 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: 2
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 1052350730647309974, guid: 555b437beb16a374ea82b63948439f4e, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
m_BlendShapeWeights: []
|
||||
--- !u!61 &1708035113988781431
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8587519695404222676}
|
||||
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_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 23.292307, y: 16.615385}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 20, y: 12.54}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!114 &2152423632773446457
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8587519695404222676}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 96f3807928801df4a840181e38da1317, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Barracks
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bd259e52fed42bc48a1352e78ce97819
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,23 +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: 6ce7334b9f0b4914ba6750d2a2d35155, type: 3}
|
||||
m_Name: Data_Barracks
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingData
|
||||
buildingName: "\u041A\u0430\u0437\u0430\u0440\u043C\u044B"
|
||||
icon: {fileID: 2801366364622282508, guid: b35488e828328a54f88edf516b780ea5, type: 3}
|
||||
prefab: {fileID: 8587519695404222676, guid: bd259e52fed42bc48a1352e78ce97819, type: 3}
|
||||
requiredTownHallLevel: 1
|
||||
cost:
|
||||
- type: 2
|
||||
amount: 300
|
||||
- type: 3
|
||||
amount: 200
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 16e55e952b334ec488bbee6b42448828
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,21 +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: 6ce7334b9f0b4914ba6750d2a2d35155, type: 3}
|
||||
m_Name: Data_Food
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingData
|
||||
buildingName: "\u0415\u0434\u0430"
|
||||
icon: {fileID: 0}
|
||||
prefab: {fileID: 8587519695404222676, guid: 995641ce1713f0543b5967de3a3b601c, type: 3}
|
||||
requiredTownHallLevel: 1
|
||||
cost:
|
||||
- type: 2
|
||||
amount: 100
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 22e88ea411e586447bbb5a7ef6dfca16
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,21 +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: 6ce7334b9f0b4914ba6750d2a2d35155, type: 3}
|
||||
m_Name: Data_GoldMine
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingData
|
||||
buildingName: "\u0417\u043E\u043B\u043E\u0442\u043E"
|
||||
icon: {fileID: 0}
|
||||
prefab: {fileID: 355219734635798756, guid: e150a7924d55dcb4b91a78e0830b419f, type: 3}
|
||||
requiredTownHallLevel: 2
|
||||
cost:
|
||||
- type: 3
|
||||
amount: 50
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9ff3668409f5d03459e5439bad8ab2c2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,21 +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: 6ce7334b9f0b4914ba6750d2a2d35155, type: 3}
|
||||
m_Name: Data_Kamenolomnia
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingData
|
||||
buildingName: "\u041A\u0430\u043C\u0435\u043D\u044C"
|
||||
icon: {fileID: 0}
|
||||
prefab: {fileID: 2201762762010450727, guid: 49403fe7cb5651a448b48615a085342c, type: 3}
|
||||
requiredTownHallLevel: 1
|
||||
cost:
|
||||
- type: 2
|
||||
amount: 50
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 455e55b6ce585c64798e6e92189eccbd
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,27 +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: 6ce7334b9f0b4914ba6750d2a2d35155, type: 3}
|
||||
m_Name: Data_Kristall
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingData
|
||||
buildingName: "\u041A\u0440\u0438\u0441\u0442\u0430\u043B\u043B"
|
||||
icon: {fileID: 0}
|
||||
prefab: {fileID: 7385155700126818636, guid: f24705ebbb7ea11458ddc9d7860aaf57, type: 3}
|
||||
requiredTownHallLevel: 6
|
||||
cost:
|
||||
- type: 2
|
||||
amount: 2000
|
||||
- type: 3
|
||||
amount: 3200
|
||||
- type: 5
|
||||
amount: 12000
|
||||
- type: 4
|
||||
amount: 1600
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fa9bf839732c77849aafecff9090a47c
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,19 +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: 6ce7334b9f0b4914ba6750d2a2d35155, type: 3}
|
||||
m_Name: Data_Lesopilka
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingData
|
||||
buildingName: "\u041B\u0435\u0441"
|
||||
icon: {fileID: 0}
|
||||
prefab: {fileID: 295848160926721670, guid: bf7bc0815d543dd47944d9157ef313e7, type: 3}
|
||||
requiredTownHallLevel: 1
|
||||
cost: []
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8b95b82532099bc488024991025a9cca
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,25 +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: 6ce7334b9f0b4914ba6750d2a2d35155, type: 3}
|
||||
m_Name: Data_People
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingData
|
||||
buildingName: "\u041D\u0430\u0441\u0435\u043B\u0435\u043D\u0438\u0435"
|
||||
icon: {fileID: 0}
|
||||
prefab: {fileID: 6959817872365076538, guid: d8aefa6e68bd204419ffaeb287dea407, type: 3}
|
||||
requiredTownHallLevel: 1
|
||||
cost:
|
||||
- type: 2
|
||||
amount: 100
|
||||
- type: 1
|
||||
amount: 200
|
||||
- type: 3
|
||||
amount: 150
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 184fe08ef84b141408ea8a5a1b2df34e
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,23 +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: 6ce7334b9f0b4914ba6750d2a2d35155, type: 3}
|
||||
m_Name: Data_Shaxta
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingData
|
||||
buildingName: "\u041C\u0435\u0442\u0430\u043B\u043B"
|
||||
icon: {fileID: 0}
|
||||
prefab: {fileID: 8005614407148533590, guid: 198e0c7292623ea4194c29ec7a96a148, type: 3}
|
||||
requiredTownHallLevel: 3
|
||||
cost:
|
||||
- type: 2
|
||||
amount: 600
|
||||
- type: 3
|
||||
amount: 550
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d532fc647f7aa5548ac381061942d96c
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,831 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &738263358134584207
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4002742518979284527}
|
||||
- component: {fileID: 8064382219512370799}
|
||||
- component: {fileID: 330444905078661864}
|
||||
m_Layer: 3
|
||||
m_Name: Fill
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4002742518979284527
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 738263358134584207}
|
||||
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: 1927015835945780662}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 10, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8064382219512370799
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 738263358134584207}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &330444905078661864
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 738263358134584207}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &1343612136204390768
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3793951204597816762}
|
||||
- component: {fileID: 5506546141177425958}
|
||||
- component: {fileID: 6781712769009624993}
|
||||
m_Layer: 3
|
||||
m_Name: Handle
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3793951204597816762
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1343612136204390768}
|
||||
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: 2872642912252838387}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5506546141177425958
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1343612136204390768}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &6781712769009624993
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1343612136204390768}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &3006475650658068385
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4156983239259992225}
|
||||
- component: {fileID: 2426570912027666968}
|
||||
- component: {fileID: 7793491659634111299}
|
||||
- component: {fileID: 3086347143011804087}
|
||||
- component: {fileID: 8366624895868613416}
|
||||
- component: {fileID: 4191623656792219752}
|
||||
m_Layer: 3
|
||||
m_Name: Canvas (2)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4156983239259992225
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3006475650658068385}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.01928367, y: 0.036809552, z: 0.019999897}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 3726670482220635953}
|
||||
m_Father: {fileID: 5056236775830869539}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: -0.06, y: 1.35}
|
||||
m_SizeDelta: {x: 213.4607, y: 61.0907}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!223 &2426570912027666968
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3006475650658068385}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 2
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_UseReflectionProbes: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!114 &7793491659634111299
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3006475650658068385}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 100
|
||||
m_PresetInfoIsWorld: 1
|
||||
--- !u!114 &3086347143011804087
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3006475650658068385}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!23 &8366624895868613416
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3006475650658068385}
|
||||
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 &4191623656792219752
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3006475650658068385}
|
||||
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: 0/100
|
||||
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: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 260
|
||||
m_fontSizeBase: 260
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
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.5778427, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
_SortingLayer: 0
|
||||
_SortingLayerID: 0
|
||||
_SortingOrder: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_renderer: {fileID: 8366624895868613416}
|
||||
m_maskType: 0
|
||||
--- !u!1 &3605793066128359476
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1927015835945780662}
|
||||
m_Layer: 3
|
||||
m_Name: Fill Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1927015835945780662
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3605793066128359476}
|
||||
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: 4002742518979284527}
|
||||
m_Father: {fileID: 3726670482220635953}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: -5, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &5347143667423215869
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8228770704062114076}
|
||||
- component: {fileID: 7921213300567708335}
|
||||
- component: {fileID: 3141608278938106867}
|
||||
m_Layer: 3
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8228770704062114076
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5347143667423215869}
|
||||
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: 3726670482220635953}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7921213300567708335
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5347143667423215869}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3141608278938106867
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5347143667423215869}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &5574349607421089541
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2872642912252838387}
|
||||
m_Layer: 3
|
||||
m_Name: Handle Slide Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2872642912252838387
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5574349607421089541}
|
||||
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: 3793951204597816762}
|
||||
m_Father: {fileID: 3726670482220635953}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &7095574789492268473
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3726670482220635953}
|
||||
- component: {fileID: 2968453288331483779}
|
||||
m_Layer: 3
|
||||
m_Name: Slider
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3726670482220635953
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7095574789492268473}
|
||||
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: 8228770704062114076}
|
||||
- {fileID: 1927015835945780662}
|
||||
- {fileID: 2872642912252838387}
|
||||
m_Father: {fileID: 4156983239259992225}
|
||||
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: 33.08, y: -2.425}
|
||||
m_SizeDelta: {x: 216.16, y: 24.85}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &2968453288331483779
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7095574789492268473}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Slider
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 6781712769009624993}
|
||||
m_FillRect: {fileID: 4002742518979284527}
|
||||
m_HandleRect: {fileID: 3793951204597816762}
|
||||
m_Direction: 0
|
||||
m_MinValue: 0
|
||||
m_MaxValue: 1
|
||||
m_WholeNumbers: 0
|
||||
m_Value: 0
|
||||
m_OnValueChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!1 &8587519695404222676
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5056236775830869539}
|
||||
- component: {fileID: 7776370013680216338}
|
||||
- component: {fileID: 1133597438062959687}
|
||||
- component: {fileID: 1471241643215355356}
|
||||
- component: {fileID: 1708035113988781431}
|
||||
- component: {fileID: 4191590240474693017}
|
||||
m_Layer: 3
|
||||
m_Name: Food
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5056236775830869539
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8587519695404222676}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: -3.48, y: -1.22, z: 0}
|
||||
m_LocalScale: {x: 1.1417562, y: 1.1020509, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4156983239259992225}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &7776370013680216338
|
||||
SpriteRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8587519695404222676}
|
||||
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: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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: 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: 2
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: -767853006991775525, guid: 0f4911df226c33e40975fb78c06568f5, type: 3}
|
||||
m_Color: {r: 0.8627452, g: 0.8627452, b: 0.8627452, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
m_BlendShapeWeights: []
|
||||
--- !u!114 &1133597438062959687
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8587519695404222676}
|
||||
m_Enabled: 0
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: eb8009d4824ec6f4392a50d60eead242, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ResourceProducer
|
||||
resourceType: 1
|
||||
amountPerTick: 3
|
||||
tickInterval: 4
|
||||
level: 1
|
||||
perLevelMultiplier: 1.2
|
||||
--- !u!114 &1471241643215355356
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8587519695404222676}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 836781aedea7fe547acba94b7fd9aabc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ResourceCollector
|
||||
resourceType: 1
|
||||
amountPerClick: 10
|
||||
maxCapacity: 100
|
||||
currentStock: 0
|
||||
level: 1
|
||||
perLevelMultiplier: 1.2
|
||||
--- !u!61 &1708035113988781431
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8587519695404222676}
|
||||
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_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 3.382857, y: 3.0857143}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 2.5, y: 2}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!114 &4191590240474693017
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8587519695404222676}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 03e94b2f819b2884eb838f4c768e5d17, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingUI
|
||||
building: {fileID: 1471241643215355356}
|
||||
stokText: {fileID: 4191623656792219752}
|
||||
progressBar: {fileID: 2968453288331483779}
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 995641ce1713f0543b5967de3a3b601c
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,813 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &355219734635798756
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4808484725654848156}
|
||||
- component: {fileID: 5186404306068258023}
|
||||
- component: {fileID: 5709127527925679652}
|
||||
- component: {fileID: 1072887893553875685}
|
||||
- component: {fileID: 5409824492356627158}
|
||||
m_Layer: 3
|
||||
m_Name: GoldMine
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4808484725654848156
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 355219734635798756}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: -16, y: -2.45, z: 0}
|
||||
m_LocalScale: {x: 2.0187285, y: 1.7424189, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 5749015153972777127}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &5186404306068258023
|
||||
SpriteRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 355219734635798756}
|
||||
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: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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: 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: 2
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 6491965565530788803, guid: 7eac2cc728cf1a54f962afb35703891e, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
m_BlendShapeWeights: []
|
||||
--- !u!114 &5709127527925679652
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 355219734635798756}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 836781aedea7fe547acba94b7fd9aabc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ResourceCollector
|
||||
resourceType: 5
|
||||
amountPerClick: 10
|
||||
maxCapacity: 100
|
||||
currentStock: 0
|
||||
level: 1
|
||||
perLevelMultiplier: 1.2
|
||||
--- !u!61 &1072887893553875685
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 355219734635798756}
|
||||
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_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 1.6914285, y: 1.5371429}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 1.2, y: 1.2}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!114 &5409824492356627158
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 355219734635798756}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 03e94b2f819b2884eb838f4c768e5d17, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingUI
|
||||
building: {fileID: 5709127527925679652}
|
||||
stokText: {fileID: 5676831441011161224}
|
||||
progressBar: {fileID: 2746946344350271564}
|
||||
--- !u!1 &1126231918971048261
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5749015153972777127}
|
||||
- component: {fileID: 3074505336809281977}
|
||||
- component: {fileID: 8582245639805834012}
|
||||
- component: {fileID: 3720488835216638398}
|
||||
- component: {fileID: 1210843985261880390}
|
||||
- component: {fileID: 5676831441011161224}
|
||||
m_Layer: 3
|
||||
m_Name: Canvas (2)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5749015153972777127
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1126231918971048261}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.010856532, y: 0.023091167, z: 0.02}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 5653634108450285178}
|
||||
m_Father: {fileID: 4808484725654848156}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: -0.31, y: 0.98}
|
||||
m_SizeDelta: {x: 213.4607, y: 61.0907}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!223 &3074505336809281977
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1126231918971048261}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 2
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_UseReflectionProbes: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!114 &8582245639805834012
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1126231918971048261}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 100
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!114 &3720488835216638398
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1126231918971048261}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!23 &1210843985261880390
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1126231918971048261}
|
||||
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 &5676831441011161224
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1126231918971048261}
|
||||
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: 0/100
|
||||
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: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 260
|
||||
m_fontSizeBase: 260
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
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.5778427, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
_SortingLayer: 0
|
||||
_SortingLayerID: 0
|
||||
_SortingOrder: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_renderer: {fileID: 1210843985261880390}
|
||||
m_maskType: 0
|
||||
--- !u!1 &1435064537008746086
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 577155313112453847}
|
||||
- component: {fileID: 5412168892413979765}
|
||||
- component: {fileID: 6009320542041345824}
|
||||
m_Layer: 3
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &577155313112453847
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1435064537008746086}
|
||||
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: 5653634108450285178}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5412168892413979765
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1435064537008746086}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &6009320542041345824
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1435064537008746086}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &1923220760602023216
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8624740838421467304}
|
||||
m_Layer: 3
|
||||
m_Name: Handle Slide Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8624740838421467304
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1923220760602023216}
|
||||
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: 900962119107375790}
|
||||
m_Father: {fileID: 5653634108450285178}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &3264413081520743742
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1484526957430814939}
|
||||
m_Layer: 3
|
||||
m_Name: Fill Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1484526957430814939
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3264413081520743742}
|
||||
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: 1806860104537654056}
|
||||
m_Father: {fileID: 5653634108450285178}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: -5, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &3301128183540283068
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5653634108450285178}
|
||||
- component: {fileID: 2746946344350271564}
|
||||
m_Layer: 3
|
||||
m_Name: Slider
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5653634108450285178
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3301128183540283068}
|
||||
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: 577155313112453847}
|
||||
- {fileID: 1484526957430814939}
|
||||
- {fileID: 8624740838421467304}
|
||||
m_Father: {fileID: 5749015153972777127}
|
||||
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: 33.08, y: -2.425}
|
||||
m_SizeDelta: {x: 216.16, y: 24.85}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &2746946344350271564
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3301128183540283068}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Slider
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 3205612178821969769}
|
||||
m_FillRect: {fileID: 1806860104537654056}
|
||||
m_HandleRect: {fileID: 900962119107375790}
|
||||
m_Direction: 0
|
||||
m_MinValue: 0
|
||||
m_MaxValue: 1
|
||||
m_WholeNumbers: 0
|
||||
m_Value: 0
|
||||
m_OnValueChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!1 &4906795694658300487
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1806860104537654056}
|
||||
- component: {fileID: 2796826311491354681}
|
||||
- component: {fileID: 5293240414597355417}
|
||||
m_Layer: 3
|
||||
m_Name: Fill
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1806860104537654056
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4906795694658300487}
|
||||
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: 1484526957430814939}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 10, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2796826311491354681
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4906795694658300487}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5293240414597355417
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4906795694658300487}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &6808632974895968247
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 900962119107375790}
|
||||
- component: {fileID: 3444417998701724978}
|
||||
- component: {fileID: 3205612178821969769}
|
||||
m_Layer: 3
|
||||
m_Name: Handle
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &900962119107375790
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6808632974895968247}
|
||||
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: 8624740838421467304}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3444417998701724978
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6808632974895968247}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3205612178821969769
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6808632974895968247}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e150a7924d55dcb4b91a78e0830b419f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,813 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &969884032122716155
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3969154243212091243}
|
||||
m_Layer: 3
|
||||
m_Name: Handle Slide Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3969154243212091243
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 969884032122716155}
|
||||
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: 310966372095626978}
|
||||
m_Father: {fileID: 8652593581461747968}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &1581342931589966566
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 310966372095626978}
|
||||
- component: {fileID: 1501310501853857812}
|
||||
- component: {fileID: 8858725208427347718}
|
||||
m_Layer: 3
|
||||
m_Name: Handle
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &310966372095626978
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1581342931589966566}
|
||||
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: 3969154243212091243}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &1501310501853857812
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1581342931589966566}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &8858725208427347718
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1581342931589966566}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &2201762762010450727
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1691270400269877361}
|
||||
- component: {fileID: 902405702411589216}
|
||||
- component: {fileID: 6081852666575568307}
|
||||
- component: {fileID: 6066509456273779269}
|
||||
- component: {fileID: 257481779865871796}
|
||||
m_Layer: 3
|
||||
m_Name: Kamenolomnia
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1691270400269877361
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2201762762010450727}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: -24.86, y: -0.2, z: 0}
|
||||
m_LocalScale: {x: 1.6223953, y: 1.9534804, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 6491323138505718067}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &902405702411589216
|
||||
SpriteRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2201762762010450727}
|
||||
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: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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: 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: 2
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 4535865847468002376, guid: 6aa747c9218e809439e10ede0685b401, type: 3}
|
||||
m_Color: {r: 0.8274511, g: 0.8274511, b: 0.8274511, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
m_BlendShapeWeights: []
|
||||
--- !u!114 &6081852666575568307
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2201762762010450727}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 836781aedea7fe547acba94b7fd9aabc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ResourceCollector
|
||||
resourceType: 3
|
||||
amountPerClick: 10
|
||||
maxCapacity: 100
|
||||
currentStock: 0
|
||||
level: 1
|
||||
perLevelMultiplier: 1.2
|
||||
--- !u!61 &6066509456273779269
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2201762762010450727}
|
||||
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.00000011920929, y: 0}
|
||||
m_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 1.622, y: 1.08}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 1.65, y: 1.1}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!114 &257481779865871796
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2201762762010450727}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 03e94b2f819b2884eb838f4c768e5d17, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingUI
|
||||
building: {fileID: 6081852666575568307}
|
||||
stokText: {fileID: 8911905189307943166}
|
||||
progressBar: {fileID: 8435780551198638127}
|
||||
--- !u!1 &3212626260908745787
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6856921113830922206}
|
||||
- component: {fileID: 7675630323752410891}
|
||||
- component: {fileID: 2351731012890206024}
|
||||
m_Layer: 3
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &6856921113830922206
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3212626260908745787}
|
||||
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: 8652593581461747968}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7675630323752410891
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3212626260908745787}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &2351731012890206024
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3212626260908745787}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &3340173628128296496
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8654331807705166329}
|
||||
m_Layer: 3
|
||||
m_Name: Fill Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8654331807705166329
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3340173628128296496}
|
||||
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: 582854950046736703}
|
||||
m_Father: {fileID: 8652593581461747968}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: -5, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &6192811279082683132
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 582854950046736703}
|
||||
- component: {fileID: 8249385852799821456}
|
||||
- component: {fileID: 7373747027848728310}
|
||||
m_Layer: 3
|
||||
m_Name: Fill
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &582854950046736703
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6192811279082683132}
|
||||
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: 8654331807705166329}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 10, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8249385852799821456
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6192811279082683132}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &7373747027848728310
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6192811279082683132}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &6363204751130955412
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8652593581461747968}
|
||||
- component: {fileID: 8435780551198638127}
|
||||
m_Layer: 3
|
||||
m_Name: Slider
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8652593581461747968
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6363204751130955412}
|
||||
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: 6856921113830922206}
|
||||
- {fileID: 8654331807705166329}
|
||||
- {fileID: 3969154243212091243}
|
||||
m_Father: {fileID: 6491323138505718067}
|
||||
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: 33.08, y: -2.425}
|
||||
m_SizeDelta: {x: 216.16, y: 24.85}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &8435780551198638127
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6363204751130955412}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Slider
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 8858725208427347718}
|
||||
m_FillRect: {fileID: 582854950046736703}
|
||||
m_HandleRect: {fileID: 310966372095626978}
|
||||
m_Direction: 0
|
||||
m_MinValue: 0
|
||||
m_MaxValue: 1
|
||||
m_WholeNumbers: 0
|
||||
m_Value: 0
|
||||
m_OnValueChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!1 &6484039534567758818
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6491323138505718067}
|
||||
- component: {fileID: 462060466348873135}
|
||||
- component: {fileID: 4402419616689163873}
|
||||
- component: {fileID: 3951695076526408292}
|
||||
- component: {fileID: 5237439105164938095}
|
||||
- component: {fileID: 8911905189307943166}
|
||||
m_Layer: 3
|
||||
m_Name: Canvas (2)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &6491323138505718067
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6484039534567758818}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.015614046, y: 0.022903124, z: 0.02}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 8652593581461747968}
|
||||
m_Father: {fileID: 1691270400269877361}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: -0.15474153, y: 0.7714305}
|
||||
m_SizeDelta: {x: 213.4607, y: 61.0907}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!223 &462060466348873135
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6484039534567758818}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 2
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_UseReflectionProbes: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!114 &4402419616689163873
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6484039534567758818}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 100
|
||||
m_PresetInfoIsWorld: 1
|
||||
--- !u!114 &3951695076526408292
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6484039534567758818}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!23 &5237439105164938095
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6484039534567758818}
|
||||
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 &8911905189307943166
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6484039534567758818}
|
||||
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: 0/100
|
||||
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: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 260
|
||||
m_fontSizeBase: 260
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
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.5778427, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
_SortingLayer: 0
|
||||
_SortingLayerID: 0
|
||||
_SortingOrder: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_renderer: {fileID: 5237439105164938095}
|
||||
m_maskType: 0
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 49403fe7cb5651a448b48615a085342c
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,831 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &308417238507269890
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4443656703844098059}
|
||||
- component: {fileID: 3578602112558971809}
|
||||
- component: {fileID: 6491125982777116289}
|
||||
- component: {fileID: 7428043993242197720}
|
||||
- component: {fileID: 8876229628118969147}
|
||||
- component: {fileID: 4809400745550651630}
|
||||
m_Layer: 3
|
||||
m_Name: Canvas (2)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4443656703844098059
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 308417238507269890}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.010077807, y: 0.022694908, z: 0.019999897}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4322642769442097139}
|
||||
m_Father: {fileID: 6428279736336967697}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: -0.034, y: 1}
|
||||
m_SizeDelta: {x: 213.4607, y: 61.0907}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!223 &3578602112558971809
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 308417238507269890}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 2
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_UseReflectionProbes: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!114 &6491125982777116289
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 308417238507269890}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 100
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!114 &7428043993242197720
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 308417238507269890}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!23 &8876229628118969147
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 308417238507269890}
|
||||
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 &4809400745550651630
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 308417238507269890}
|
||||
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: 0/100
|
||||
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: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 260
|
||||
m_fontSizeBase: 260
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
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.5778427, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
_SortingLayer: 0
|
||||
_SortingLayerID: 0
|
||||
_SortingOrder: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_renderer: {fileID: 8876229628118969147}
|
||||
m_maskType: 0
|
||||
--- !u!1 &718444822100953595
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2219371244321850613}
|
||||
m_Layer: 3
|
||||
m_Name: Handle Slide Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2219371244321850613
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 718444822100953595}
|
||||
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: 7131657856732036943}
|
||||
m_Father: {fileID: 4322642769442097139}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &1347052513874559717
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5394567590597037228}
|
||||
- component: {fileID: 5006164066123729041}
|
||||
- component: {fileID: 6956128874796247178}
|
||||
m_Layer: 3
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5394567590597037228
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1347052513874559717}
|
||||
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: 4322642769442097139}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5006164066123729041
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1347052513874559717}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &6956128874796247178
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1347052513874559717}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &1754615061363553275
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7131657856732036943}
|
||||
- component: {fileID: 5730540684975491652}
|
||||
- component: {fileID: 960580518922019974}
|
||||
m_Layer: 3
|
||||
m_Name: Handle
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7131657856732036943
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1754615061363553275}
|
||||
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: 2219371244321850613}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5730540684975491652
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1754615061363553275}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &960580518922019974
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1754615061363553275}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &2536985253622400011
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4322642769442097139}
|
||||
- component: {fileID: 4741032704856435982}
|
||||
m_Layer: 3
|
||||
m_Name: Slider
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4322642769442097139
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2536985253622400011}
|
||||
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: 5394567590597037228}
|
||||
- {fileID: 3406416985991052905}
|
||||
- {fileID: 2219371244321850613}
|
||||
m_Father: {fileID: 4443656703844098059}
|
||||
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: 33.08, y: -2.425}
|
||||
m_SizeDelta: {x: 216.16, y: 24.85}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &4741032704856435982
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2536985253622400011}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Slider
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 960580518922019974}
|
||||
m_FillRect: {fileID: 5352715714053848194}
|
||||
m_HandleRect: {fileID: 7131657856732036943}
|
||||
m_Direction: 0
|
||||
m_MinValue: 0
|
||||
m_MaxValue: 1
|
||||
m_WholeNumbers: 0
|
||||
m_Value: 0
|
||||
m_OnValueChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!1 &5502092000955230044
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3406416985991052905}
|
||||
m_Layer: 3
|
||||
m_Name: Fill Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3406416985991052905
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5502092000955230044}
|
||||
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: 5352715714053848194}
|
||||
m_Father: {fileID: 4322642769442097139}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: -5, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &7385155700126818636
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6428279736336967697}
|
||||
- component: {fileID: 1583778620634197361}
|
||||
- component: {fileID: 5959045861198059140}
|
||||
- component: {fileID: 3238156261450020092}
|
||||
- component: {fileID: 6835409609226383739}
|
||||
- component: {fileID: 6451544488071506654}
|
||||
m_Layer: 3
|
||||
m_Name: Kristall
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6428279736336967697
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7385155700126818636}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 1.6, y: 2.1, z: 0}
|
||||
m_LocalScale: {x: 2.0135546, y: 1.9665718, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4443656703844098059}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &1583778620634197361
|
||||
SpriteRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7385155700126818636}
|
||||
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: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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: 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: 2
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 4647002068681719999, guid: b59c87f910a58c5459dc08f48515abaa, type: 3}
|
||||
m_Color: {r: 0.8274511, g: 0.8274511, b: 0.8274511, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
m_BlendShapeWeights: []
|
||||
--- !u!114 &5959045861198059140
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7385155700126818636}
|
||||
m_Enabled: 0
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: eb8009d4824ec6f4392a50d60eead242, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ResourceProducer
|
||||
resourceType: 6
|
||||
amountPerTick: 3
|
||||
tickInterval: 4
|
||||
level: 1
|
||||
perLevelMultiplier: 1.2
|
||||
--- !u!114 &3238156261450020092
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7385155700126818636}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 836781aedea7fe547acba94b7fd9aabc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ResourceCollector
|
||||
resourceType: 6
|
||||
amountPerClick: 10
|
||||
maxCapacity: 100
|
||||
currentStock: 0
|
||||
level: 1
|
||||
perLevelMultiplier: 1.2
|
||||
--- !u!61 &6835409609226383739
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7385155700126818636}
|
||||
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_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 15.72, y: 10.8}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!114 &6451544488071506654
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7385155700126818636}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 03e94b2f819b2884eb838f4c768e5d17, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingUI
|
||||
building: {fileID: 3238156261450020092}
|
||||
stokText: {fileID: 4809400745550651630}
|
||||
progressBar: {fileID: 4741032704856435982}
|
||||
--- !u!1 &8091735289944365453
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5352715714053848194}
|
||||
- component: {fileID: 5999212797332437909}
|
||||
- component: {fileID: 858267319036784839}
|
||||
m_Layer: 3
|
||||
m_Name: Fill
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5352715714053848194
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8091735289944365453}
|
||||
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: 3406416985991052905}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 10, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5999212797332437909
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8091735289944365453}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &858267319036784839
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8091735289944365453}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f24705ebbb7ea11458ddc9d7860aaf57
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,817 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &295848160926721670
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8218986922259218719}
|
||||
- component: {fileID: 1626548957784810666}
|
||||
- component: {fileID: 5306320879243393515}
|
||||
- component: {fileID: 4347759638798865807}
|
||||
- component: {fileID: 8080049013686760202}
|
||||
m_Layer: 3
|
||||
m_Name: Lesopilka
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8218986922259218719
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 295848160926721670}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1.6224002, y: 2.837443, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 5579120603098066213}
|
||||
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: -19.849152, y: -0.30836427}
|
||||
m_SizeDelta: {x: 2.2826, y: 1.0159}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!212 &1626548957784810666
|
||||
SpriteRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 295848160926721670}
|
||||
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: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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: 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: 2
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: -2103617111491369785, guid: 73513117b87e55849b59b2a21a09cc71, type: 3}
|
||||
m_Color: {r: 0.8274511, g: 0.8274511, b: 0.8274511, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
m_BlendShapeWeights: []
|
||||
--- !u!114 &5306320879243393515
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 295848160926721670}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 836781aedea7fe547acba94b7fd9aabc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ResourceCollector
|
||||
resourceType: 2
|
||||
amountPerClick: 10
|
||||
maxCapacity: 100
|
||||
currentStock: 0
|
||||
level: 1
|
||||
perLevelMultiplier: 1.2
|
||||
--- !u!61 &4347759638798865807
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 295848160926721670}
|
||||
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_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 1.8461539, y: 1.6430769}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 1.5, y: 1.2}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!114 &8080049013686760202
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 295848160926721670}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 03e94b2f819b2884eb838f4c768e5d17, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingUI
|
||||
building: {fileID: 5306320879243393515}
|
||||
stokText: {fileID: 3881444792252716484}
|
||||
progressBar: {fileID: 8635198783164890612}
|
||||
--- !u!1 &763731568768391115
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7241778671202181995}
|
||||
- component: {fileID: 8635198783164890612}
|
||||
m_Layer: 3
|
||||
m_Name: Slider
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7241778671202181995
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 763731568768391115}
|
||||
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: 2782416422371965892}
|
||||
- {fileID: 3245991593120377230}
|
||||
- {fileID: 7246166311783535450}
|
||||
m_Father: {fileID: 5579120603098066213}
|
||||
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: 33.08, y: -2.239}
|
||||
m_SizeDelta: {x: 216.16, y: 25.223}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &8635198783164890612
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 763731568768391115}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Slider
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 167073955797870126}
|
||||
m_FillRect: {fileID: 6144247887862302617}
|
||||
m_HandleRect: {fileID: 5641726130355626710}
|
||||
m_Direction: 0
|
||||
m_MinValue: 0
|
||||
m_MaxValue: 1
|
||||
m_WholeNumbers: 0
|
||||
m_Value: 0
|
||||
m_OnValueChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!1 &1301949588430767328
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5579120603098066213}
|
||||
- component: {fileID: 1374701000118954752}
|
||||
- component: {fileID: 1557042209516711472}
|
||||
- component: {fileID: 6507110458437413086}
|
||||
- component: {fileID: 1583811796485460241}
|
||||
- component: {fileID: 3881444792252716484}
|
||||
m_Layer: 3
|
||||
m_Name: Canvas
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5579120603098066213
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1301949588430767328}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.02, y: 0.02, z: 0.02}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 7241778671202181995}
|
||||
m_Father: {fileID: 8218986922259218719}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0.95, y: 1.44}
|
||||
m_SizeDelta: {x: 213.4607, y: 61.0907}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!223 &1374701000118954752
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1301949588430767328}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 2
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_UseReflectionProbes: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!114 &1557042209516711472
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1301949588430767328}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 100
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!114 &6507110458437413086
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1301949588430767328}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!23 &1583811796485460241
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1301949588430767328}
|
||||
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 &3881444792252716484
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1301949588430767328}
|
||||
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: 0/100
|
||||
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: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 260
|
||||
m_fontSizeBase: 260
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
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.5778427, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
_SortingLayer: 0
|
||||
_SortingLayerID: 0
|
||||
_SortingOrder: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_renderer: {fileID: 1583811796485460241}
|
||||
m_maskType: 0
|
||||
--- !u!1 &1330858007547630774
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7246166311783535450}
|
||||
m_Layer: 3
|
||||
m_Name: Handle Slide Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7246166311783535450
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1330858007547630774}
|
||||
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: 5641726130355626710}
|
||||
m_Father: {fileID: 7241778671202181995}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &3939521458353665635
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5641726130355626710}
|
||||
- component: {fileID: 6219326034010900823}
|
||||
- component: {fileID: 167073955797870126}
|
||||
m_Layer: 3
|
||||
m_Name: Handle
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5641726130355626710
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3939521458353665635}
|
||||
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: 7246166311783535450}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6219326034010900823
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3939521458353665635}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &167073955797870126
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3939521458353665635}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &5249085410511434409
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3245991593120377230}
|
||||
m_Layer: 3
|
||||
m_Name: Fill Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &3245991593120377230
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5249085410511434409}
|
||||
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: 6144247887862302617}
|
||||
m_Father: {fileID: 7241778671202181995}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: -5, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &6355493401388111109
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2782416422371965892}
|
||||
- component: {fileID: 5314180381471706409}
|
||||
- component: {fileID: 8839952233946098354}
|
||||
m_Layer: 3
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2782416422371965892
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6355493401388111109}
|
||||
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: 7241778671202181995}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5314180381471706409
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6355493401388111109}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &8839952233946098354
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6355493401388111109}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &6985532879478739689
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6144247887862302617}
|
||||
- component: {fileID: 1418222646644384381}
|
||||
- component: {fileID: 6527831730433201755}
|
||||
m_Layer: 3
|
||||
m_Name: Fill
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &6144247887862302617
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6985532879478739689}
|
||||
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: 3245991593120377230}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 10, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &1418222646644384381
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6985532879478739689}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &6527831730433201755
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6985532879478739689}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bf7bc0815d543dd47944d9157ef313e7
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,813 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &888065131884256076
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2800474039428411781}
|
||||
- component: {fileID: 3946903823023915250}
|
||||
- component: {fileID: 4695968121406322393}
|
||||
m_Layer: 3
|
||||
m_Name: Handle
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2800474039428411781
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 888065131884256076}
|
||||
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: 5261766043013034418}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3946903823023915250
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 888065131884256076}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &4695968121406322393
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 888065131884256076}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &1515500894503721065
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 9128744184370430097}
|
||||
- component: {fileID: 7362341572727941915}
|
||||
- component: {fileID: 3253308405779028863}
|
||||
m_Layer: 3
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &9128744184370430097
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1515500894503721065}
|
||||
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: 5913247723073291300}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7362341572727941915
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1515500894503721065}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3253308405779028863
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1515500894503721065}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &1652417071818933787
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7368589938815255286}
|
||||
- component: {fileID: 2635063965737862624}
|
||||
- component: {fileID: 4856851583400535072}
|
||||
m_Layer: 3
|
||||
m_Name: Fill
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7368589938815255286
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1652417071818933787}
|
||||
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: 8808706617047054436}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 10, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2635063965737862624
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1652417071818933787}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &4856851583400535072
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1652417071818933787}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &1998845356432122333
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8808706617047054436}
|
||||
m_Layer: 3
|
||||
m_Name: Fill Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8808706617047054436
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1998845356432122333}
|
||||
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: 7368589938815255286}
|
||||
m_Father: {fileID: 5913247723073291300}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: -5, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &3804170935388087576
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1206898736526421615}
|
||||
- component: {fileID: 5452419515943717409}
|
||||
- component: {fileID: 3515853544020916043}
|
||||
- component: {fileID: 4109876596211566975}
|
||||
- component: {fileID: 6763315523887852349}
|
||||
- component: {fileID: 6446373148616658521}
|
||||
m_Layer: 3
|
||||
m_Name: Canvas (3)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1206898736526421615
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3804170935388087576}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.013578291, y: 0.023382349, z: 0.019999897}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 5913247723073291300}
|
||||
m_Father: {fileID: 8381781505187442674}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0.07, y: 0.86}
|
||||
m_SizeDelta: {x: 213.4607, y: 61.0907}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!223 &5452419515943717409
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3804170935388087576}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 2
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_UseReflectionProbes: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!114 &3515853544020916043
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3804170935388087576}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 100
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!114 &4109876596211566975
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3804170935388087576}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!23 &6763315523887852349
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3804170935388087576}
|
||||
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 &6446373148616658521
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3804170935388087576}
|
||||
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: 0/100
|
||||
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: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 260
|
||||
m_fontSizeBase: 260
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
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.5778427, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
_SortingLayer: 0
|
||||
_SortingLayerID: 0
|
||||
_SortingOrder: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_renderer: {fileID: 6763315523887852349}
|
||||
m_maskType: 0
|
||||
--- !u!1 &5869788358976099833
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5913247723073291300}
|
||||
- component: {fileID: 1065437750742842432}
|
||||
m_Layer: 3
|
||||
m_Name: Slider
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5913247723073291300
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5869788358976099833}
|
||||
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: 9128744184370430097}
|
||||
- {fileID: 8808706617047054436}
|
||||
- {fileID: 5261766043013034418}
|
||||
m_Father: {fileID: 1206898736526421615}
|
||||
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: 33.08, y: -2.425}
|
||||
m_SizeDelta: {x: 216.16, y: 24.85}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1065437750742842432
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5869788358976099833}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Slider
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 4695968121406322393}
|
||||
m_FillRect: {fileID: 7368589938815255286}
|
||||
m_HandleRect: {fileID: 2800474039428411781}
|
||||
m_Direction: 0
|
||||
m_MinValue: 0
|
||||
m_MaxValue: 1
|
||||
m_WholeNumbers: 0
|
||||
m_Value: 0
|
||||
m_OnValueChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!1 &6959817872365076538
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8381781505187442674}
|
||||
- component: {fileID: 4052048471279866}
|
||||
- component: {fileID: 7603893054635625423}
|
||||
- component: {fileID: 6686164845870214523}
|
||||
- component: {fileID: 8733527051286464462}
|
||||
m_Layer: 3
|
||||
m_Name: People
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8381781505187442674
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6959817872365076538}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 1.48, y: -2.44, z: 0}
|
||||
m_LocalScale: {x: 1.7595457, y: 2.1260598, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 1206898736526421615}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &4052048471279866
|
||||
SpriteRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6959817872365076538}
|
||||
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: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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: 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: 2
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: 9167447843336648964, guid: 62ae8b9f63d362c4883bd7909d40f2bf, type: 3}
|
||||
m_Color: {r: 0.9607844, g: 0.9607844, b: 0.9607844, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
m_BlendShapeWeights: []
|
||||
--- !u!114 &7603893054635625423
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6959817872365076538}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 836781aedea7fe547acba94b7fd9aabc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ResourceCollector
|
||||
resourceType: 0
|
||||
amountPerClick: 10
|
||||
maxCapacity: 100
|
||||
currentStock: 0
|
||||
level: 1
|
||||
perLevelMultiplier: 1.2
|
||||
--- !u!61 &6686164845870214523
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6959817872365076538}
|
||||
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_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 2.368, y: 2.16}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 2, y: 2}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!114 &8733527051286464462
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6959817872365076538}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 03e94b2f819b2884eb838f4c768e5d17, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingUI
|
||||
building: {fileID: 7603893054635625423}
|
||||
stokText: {fileID: 6446373148616658521}
|
||||
progressBar: {fileID: 1065437750742842432}
|
||||
--- !u!1 &7087647542009113485
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5261766043013034418}
|
||||
m_Layer: 3
|
||||
m_Name: Handle Slide Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &5261766043013034418
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7087647542009113485}
|
||||
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: 2800474039428411781}
|
||||
m_Father: {fileID: 5913247723073291300}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d8aefa6e68bd204419ffaeb287dea407
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,813 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3477693277770485176
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 9049021842245786191}
|
||||
- component: {fileID: 6798716856179431755}
|
||||
m_Layer: 3
|
||||
m_Name: Slider
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &9049021842245786191
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3477693277770485176}
|
||||
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: 7392134504014982642}
|
||||
- {fileID: 4877085052740413173}
|
||||
- {fileID: 4099470492338002646}
|
||||
m_Father: {fileID: 7767093088671555243}
|
||||
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: 33.08, y: -2.425}
|
||||
m_SizeDelta: {x: 216.16, y: 24.85}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &6798716856179431755
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3477693277770485176}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Slider
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 281306229817890815}
|
||||
m_FillRect: {fileID: 2773622439927167709}
|
||||
m_HandleRect: {fileID: 2500375828274013755}
|
||||
m_Direction: 0
|
||||
m_MinValue: 0
|
||||
m_MaxValue: 1
|
||||
m_WholeNumbers: 0
|
||||
m_Value: 0
|
||||
m_OnValueChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!1 &3910855990794239310
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2773622439927167709}
|
||||
- component: {fileID: 8619355614463974451}
|
||||
- component: {fileID: 5892695595717621851}
|
||||
m_Layer: 3
|
||||
m_Name: Fill
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2773622439927167709
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3910855990794239310}
|
||||
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: 4877085052740413173}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 10, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &8619355614463974451
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3910855990794239310}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5892695595717621851
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3910855990794239310}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &6031403639323220171
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4877085052740413173}
|
||||
m_Layer: 3
|
||||
m_Name: Fill Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4877085052740413173
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6031403639323220171}
|
||||
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: 2773622439927167709}
|
||||
m_Father: {fileID: 9049021842245786191}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: -5, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &7343233607063551713
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2500375828274013755}
|
||||
- component: {fileID: 6895100105936511138}
|
||||
- component: {fileID: 281306229817890815}
|
||||
m_Layer: 3
|
||||
m_Name: Handle
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2500375828274013755
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7343233607063551713}
|
||||
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: 4099470492338002646}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6895100105936511138
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7343233607063551713}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &281306229817890815
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7343233607063551713}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &8001413377479014276
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4099470492338002646}
|
||||
m_Layer: 3
|
||||
m_Name: Handle Slide Area
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4099470492338002646
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8001413377479014276}
|
||||
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: 2500375828274013755}
|
||||
m_Father: {fileID: 9049021842245786191}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: -20, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!1 &8005614407148533590
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 418225002888223939}
|
||||
- component: {fileID: 4598832958593301086}
|
||||
- component: {fileID: 2720790236691513585}
|
||||
- component: {fileID: 2564761440770285527}
|
||||
- component: {fileID: 2796556761884381038}
|
||||
m_Layer: 3
|
||||
m_Name: Shaxta
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &418225002888223939
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8005614407148533590}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: -24.91, y: -3.52, z: 0}
|
||||
m_LocalScale: {x: 1.671882, y: 1.7337389, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 7767093088671555243}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &4598832958593301086
|
||||
SpriteRenderer:
|
||||
serializedVersion: 3
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8005614407148533590}
|
||||
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: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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: 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: 2
|
||||
m_MaskInteraction: 0
|
||||
m_Sprite: {fileID: -7706097715734163884, guid: 7c124dd4bd789a24d95865fa9862169b, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 1, y: 1}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 1
|
||||
m_SpriteSortPoint: 0
|
||||
m_BlendShapeWeights: []
|
||||
--- !u!114 &2720790236691513585
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8005614407148533590}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 836781aedea7fe547acba94b7fd9aabc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ResourceCollector
|
||||
resourceType: 4
|
||||
amountPerClick: 10
|
||||
maxCapacity: 100
|
||||
currentStock: 0
|
||||
level: 1
|
||||
perLevelMultiplier: 1.2
|
||||
--- !u!61 &2564761440770285527
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8005614407148533590}
|
||||
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_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 2.6311111, y: 2.4}
|
||||
newSize: {x: 1, y: 1}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
adaptiveTiling: 0
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 2, y: 2}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!114 &2796556761884381038
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8005614407148533590}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 03e94b2f819b2884eb838f4c768e5d17, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::BuildingUI
|
||||
building: {fileID: 2720790236691513585}
|
||||
stokText: {fileID: 4777902828861520343}
|
||||
progressBar: {fileID: 6798716856179431755}
|
||||
--- !u!1 &8966666087013359468
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7392134504014982642}
|
||||
- component: {fileID: 625637881806047824}
|
||||
- component: {fileID: 6938675845369349677}
|
||||
m_Layer: 3
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7392134504014982642
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8966666087013359468}
|
||||
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: 9049021842245786191}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.25}
|
||||
m_AnchorMax: {x: 1, y: 0.75}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &625637881806047824
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8966666087013359468}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &6938675845369349677
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8966666087013359468}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
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_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &9167349175870114390
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7767093088671555243}
|
||||
- component: {fileID: 2239592075709300590}
|
||||
- component: {fileID: 4291138224655557414}
|
||||
- component: {fileID: 6923797281547489874}
|
||||
- component: {fileID: 4994502127451470438}
|
||||
- component: {fileID: 4777902828861520343}
|
||||
m_Layer: 3
|
||||
m_Name: Canvas (1)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7767093088671555243
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9167349175870114390}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.01424164, y: 0.02386495, z: 0.02}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 9049021842245786191}
|
||||
m_Father: {fileID: 418225002888223939}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: -0.30724525, y: 0.7990217}
|
||||
m_SizeDelta: {x: 213.4607, y: 61.0907}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!223 &2239592075709300590
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9167349175870114390}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_RenderMode: 2
|
||||
m_Camera: {fileID: 0}
|
||||
m_PlaneDistance: 100
|
||||
m_PixelPerfect: 0
|
||||
m_ReceivesEvents: 1
|
||||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_UseReflectionProbes: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
--- !u!114 &4291138224655557414
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9167349175870114390}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
|
||||
m_UiScaleMode: 0
|
||||
m_ReferencePixelsPerUnit: 100
|
||||
m_ScaleFactor: 1
|
||||
m_ReferenceResolution: {x: 800, y: 600}
|
||||
m_ScreenMatchMode: 0
|
||||
m_MatchWidthOrHeight: 0
|
||||
m_PhysicalUnit: 3
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 100
|
||||
m_PresetInfoIsWorld: 0
|
||||
--- !u!114 &6923797281547489874
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9167349175870114390}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster
|
||||
m_IgnoreReversedGraphics: 1
|
||||
m_BlockingObjects: 0
|
||||
m_BlockingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
--- !u!23 &4994502127451470438
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9167349175870114390}
|
||||
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 &4777902828861520343
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 9167349175870114390}
|
||||
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: 0/100
|
||||
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: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 260
|
||||
m_fontSizeBase: 260
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 1
|
||||
m_VerticalAlignment: 256
|
||||
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.5778427, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
_SortingLayer: 0
|
||||
_SortingLayerID: 0
|
||||
_SortingOrder: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_renderer: {fileID: 4994502127451470438}
|
||||
m_maskType: 0
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 198e0c7292623ea4194c29ec7a96a148
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: beae4025d64976c4f93af3b9233183da
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -570,9 +570,7 @@ public static class BuildingWindow
|
||||
static string UnlocksAt(int townHallLevel)
|
||||
{
|
||||
var names = new List<string>();
|
||||
if (BuildManager.Instance != null && BuildManager.Instance.allBuildings != null)
|
||||
foreach (var b in BuildManager.Instance.allBuildings)
|
||||
if (b != null && b.requiredTownHallLevel == townHallLevel) names.Add(b.buildingName);
|
||||
names.AddRange(City3DGameplay.TypesUnlockedAt(townHallLevel));
|
||||
foreach (var t in GameData.Troops)
|
||||
if (t.requiredTownHall == townHallLevel) names.Add(t.name);
|
||||
return string.Join(", ", names.ToArray());
|
||||
|
||||
@@ -17,9 +17,9 @@ public class CitySync : MonoBehaviour
|
||||
|
||||
public static CitySync Instance { get; private set; }
|
||||
|
||||
// Город открыт не в 2D-сцене, а в 3D (City3D): здания с PlacedBuildingId там тоже есть (05.11)
|
||||
// Город (3D-поселение, City3D) открыт -- задаёт City3DController
|
||||
public static bool ExternalCity;
|
||||
static bool CityOpen => BuildManager.Instance != null || ExternalCity;
|
||||
static bool CityOpen => ExternalCity;
|
||||
|
||||
float next;
|
||||
string pending; // замер, который ждёт подтверждения
|
||||
|
||||
@@ -212,17 +212,14 @@ public class DebugPanel : MonoBehaviour
|
||||
BuildCameraCard();
|
||||
}
|
||||
|
||||
// Отладочная сетка стройки (3D-поселение и 2D-город): видна всегда, ярче, каждая 5-я линия жёлтая (05.11, просьба Миши)
|
||||
// Отладочная сетка стройки 3D-поселения: видна всегда, ярче, каждая 5-я линия жёлтая (05.11, просьба Миши)
|
||||
void ToggleGrid()
|
||||
{
|
||||
bool on = !(City3DController.DebugGrid || BuildGrid.DebugVisible);
|
||||
City3DController.SetDebugGrid(on);
|
||||
bool building = BuildModeController.Instance != null && BuildModeController.Instance.IsActive;
|
||||
BuildGrid.SetDebugVisible(on, building);
|
||||
City3DController.SetDebugGrid(!City3DController.DebugGrid);
|
||||
if (gridButton != null) UIKit.SetButton(gridButton, GridLabel, true);
|
||||
}
|
||||
|
||||
static string GridLabel => City3DController.DebugGrid || BuildGrid.DebugVisible ? "Сетка: вкл" : "Сетка: выкл";
|
||||
static string GridLabel => City3DController.DebugGrid ? "Сетка: вкл" : "Сетка: выкл";
|
||||
|
||||
static void Btn(Transform row, string label, Color color, System.Action onClick)
|
||||
{
|
||||
|
||||
@@ -82,8 +82,6 @@ public static class GameModules
|
||||
GameServices.Register<IProduction>(production);
|
||||
SaveRegistry.Register(production);
|
||||
|
||||
// Склад и Амбар появляются в списке стройки кодом -- до восстановления зданий из сохранения
|
||||
EventBus.Subscribe<SettlementRestoringEvent>(_ => StorageBootstrap.Ensure());
|
||||
|
||||
// Тап по зданию -> окно здания и рабочих (статические события переживают Play в редакторе -- сначала отписка)
|
||||
ResourceCollector.Tapped -= BuildingWindow.OnWorkplaceTapped;
|
||||
@@ -123,15 +121,10 @@ public static class GameModules
|
||||
// Чат -- чистый C#; история живёт, пока открыта игра (между сценами тоже)
|
||||
GameServices.Register<IChat>(new ChatService(System.DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()));
|
||||
|
||||
// Казармы появляются в списке стройки кодом -- до восстановления зданий из сохранения
|
||||
EventBus.Subscribe<SettlementRestoringEvent>(_ => BarracksBootstrap.Ensure());
|
||||
|
||||
// Госпиталь (решения 31.10, п. 7): здание города даёт места для лечения Армии через контракт IHospital
|
||||
GameServices.Register<IHospital>(new HospitalBeds());
|
||||
EventBus.Subscribe<SettlementRestoringEvent>(_ => HospitalBootstrap.Ensure());
|
||||
|
||||
// Терем богатыря: дом героя, герой гуляет по городу (Meta/Build/HeroCastle, HeroWalker)
|
||||
EventBus.Subscribe<SettlementRestoringEvent>(_ => HeroCastleBootstrap.Ensure());
|
||||
|
||||
// Статистика для заданий (GameProgress) -- по событиям Мира
|
||||
EventBus.Subscribe<MarchStartedEvent>(OnMarchStarted);
|
||||
|
||||
@@ -39,6 +39,18 @@ public class IntelligenceConfig : ScriptableObject
|
||||
"Включено: неисследованная местность закрыта полностью вместе с объектами. Решения 31.10, п. 1: для М1 не требуется, оставлено переключателем")]
|
||||
public bool hideUnexploredObjects = false;
|
||||
|
||||
[Header("М3: тайные операции (ТЕСТ)")]
|
||||
[Tooltip("Технология «Шпион». Дерева технологий пока нет -- включено для проверки")]
|
||||
public bool spyTechnology = true;
|
||||
[Tooltip("Тайная группа: не больше стольких пехотинцев и лучников")]
|
||||
public int covertMaxSoldiers = 10;
|
||||
[Tooltip("Тайных операций одновременно")]
|
||||
public int covertMaxOps = 2;
|
||||
[Tooltip("Шанс обнаружения за проверку, %: поселение / зона башни / замок Круга")]
|
||||
public int detectSettlementPercent = 15, detectTowerPercent = 25, detectCircleCastlePercent = 35;
|
||||
[Tooltip("Проверка -- при входе в охраняемую область и потом каждые столько реальных минут")]
|
||||
public float detectIntervalMinutes = 5f;
|
||||
|
||||
static IntelligenceConfig cached;
|
||||
|
||||
public static IntelligenceConfig Load()
|
||||
@@ -65,7 +77,14 @@ public class IntelligenceConfig : ScriptableObject
|
||||
LastContactMs = (long)(Mathf.Max(0f, lastContactMinutes) * 60_000f),
|
||||
ApproxPercent = Mathf.Clamp(approxPercent, 0, 100),
|
||||
IdentifyPercent = Mathf.Clamp(identifyPercent, 0, 100),
|
||||
SampleStepMs = (long)(Mathf.Max(1f, sampleStepSeconds) * 1000f)
|
||||
SampleStepMs = (long)(Mathf.Max(1f, sampleStepSeconds) * 1000f),
|
||||
CovertEnabled = spyTechnology,
|
||||
CovertMaxSoldiers = Mathf.Max(1, covertMaxSoldiers),
|
||||
CovertMaxOps = Mathf.Max(1, covertMaxOps),
|
||||
DetectSettlementPercent = Mathf.Clamp(detectSettlementPercent, 0, 100),
|
||||
DetectTowerPercent = Mathf.Clamp(detectTowerPercent, 0, 100),
|
||||
DetectCircleCastlePercent = Mathf.Clamp(detectCircleCastlePercent, 0, 100),
|
||||
DetectIntervalMs = (long)(Mathf.Max(0.1f, detectIntervalMinutes) * 60_000f)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,85 +1,7 @@
|
||||
using UnityEngine;
|
||||
|
||||
// Добавляет "Склад" и "Амбар" в список стройки кодом -- как Казармы (Meta/Build/BarracksBootstrap).
|
||||
// Шаблон -- копия обычного здания без добычи; пока нет арта, отличаем цветом.
|
||||
// Вызывается при загрузке сцены и перед восстановлением города из сохранения (SettlementRestoringEvent),
|
||||
// иначе построенные Склады не нашлись бы при загрузке.
|
||||
// Имена зданий «Склад» и «Амбар». 2D-шаблоны удалены 06.11 вместе с 2D-городом; 3D-здания -- City3D/City3DGameplay,
|
||||
// цены и лимиты -- EconomyConfig (раздел «Склады и лимиты»)
|
||||
public static class StorageBootstrap
|
||||
{
|
||||
public const string WarehouseName = "Склад";
|
||||
public const string GranaryName = "Амбар";
|
||||
|
||||
static GameObject warehouseTemplate;
|
||||
static GameObject granaryTemplate;
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
|
||||
static void Init()
|
||||
{
|
||||
Ensure();
|
||||
UnityEngine.SceneManagement.SceneManager.sceneLoaded += (s, m) => Ensure();
|
||||
}
|
||||
|
||||
public static void Ensure()
|
||||
{
|
||||
var bm = BuildManager.Instance != null ? BuildManager.Instance : Object.FindAnyObjectByType<BuildManager>();
|
||||
if (bm == null || bm.allBuildings == null) return;
|
||||
|
||||
bool hasWarehouse = false, hasGranary = false;
|
||||
BuildingData template = null;
|
||||
foreach (var b in bm.allBuildings)
|
||||
{
|
||||
if (b == null) continue;
|
||||
if (b.buildingName == WarehouseName) hasWarehouse = true;
|
||||
if (b.buildingName == GranaryName) hasGranary = true;
|
||||
if (template == null && b.prefab != null && b.prefab.GetComponent<ResourceCollector>() != null) template = b;
|
||||
}
|
||||
if (hasWarehouse && hasGranary) return;
|
||||
if (template == null) { Debug.LogWarning("[СКЛАДЫ] Нет здания-шаблона в BuildManager"); return; }
|
||||
|
||||
var cfg = EconomyConfig.Load().storage;
|
||||
if (!hasWarehouse)
|
||||
{
|
||||
if (warehouseTemplate == null) warehouseTemplate = MakeTemplate(template.prefab, "Warehouse", StorageBuilding.Kind.Warehouse, new Color(0.85f, 0.7f, 0.5f));
|
||||
bm.allBuildings.Add(MakeData(WarehouseName, template, warehouseTemplate, cfg.warehouseWood, cfg.warehouseStone));
|
||||
}
|
||||
if (!hasGranary)
|
||||
{
|
||||
if (granaryTemplate == null) granaryTemplate = MakeTemplate(template.prefab, "Granary", StorageBuilding.Kind.Granary, new Color(1f, 0.92f, 0.55f));
|
||||
bm.allBuildings.Add(MakeData(GranaryName, template, granaryTemplate, cfg.granaryWood, cfg.granaryStone));
|
||||
}
|
||||
Debug.Log("[СКЛАДЫ] Склад и Амбар добавлены в список стройки");
|
||||
}
|
||||
|
||||
static GameObject MakeTemplate(GameObject source, string name, StorageBuilding.Kind kind, Color tint)
|
||||
{
|
||||
var t = Object.Instantiate(source);
|
||||
t.name = name;
|
||||
t.SetActive(false);
|
||||
Object.DontDestroyOnLoad(t);
|
||||
foreach (var c in t.GetComponents<ResourceCollector>()) Object.DestroyImmediate(c);
|
||||
foreach (var c in t.GetComponents<ResourceProducer>()) Object.DestroyImmediate(c);
|
||||
foreach (var c in t.GetComponents<BuildingUI>()) Object.DestroyImmediate(c);
|
||||
for (int i = t.transform.childCount - 1; i >= 0; i--)
|
||||
Object.DestroyImmediate(t.transform.GetChild(i).gameObject); // полоска над зданием не нужна
|
||||
var sr = t.GetComponent<SpriteRenderer>();
|
||||
if (sr != null) sr.color = tint;
|
||||
t.AddComponent<StorageBuilding>().kind = kind;
|
||||
return t;
|
||||
}
|
||||
|
||||
static BuildingData MakeData(string title, BuildingData template, GameObject prefab, float wood, float stone)
|
||||
{
|
||||
var data = ScriptableObject.CreateInstance<BuildingData>();
|
||||
data.name = "Data_" + prefab.name + "_Runtime";
|
||||
data.buildingName = title;
|
||||
data.icon = template.icon;
|
||||
data.prefab = prefab;
|
||||
data.requiredTownHallLevel = 1;
|
||||
data.cost = new[]
|
||||
{
|
||||
new ResourceCost { type = ResourceType.Wood, amount = wood },
|
||||
new ResourceCost { type = ResourceType.Stone, amount = stone },
|
||||
};
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class CameraZoom : MonoBehaviour
|
||||
{
|
||||
public Camera targetCamera;
|
||||
private float lastCameraSize;
|
||||
|
||||
void Start()
|
||||
{
|
||||
|
||||
if(targetCamera == null)
|
||||
targetCamera = Camera.main;
|
||||
|
||||
lastCameraSize = targetCamera.orthographicSize;
|
||||
UpdateCanvasScale();
|
||||
}
|
||||
void LateUpdate()
|
||||
{
|
||||
if (Mathf.Abs(targetCamera.orthographicSize - lastCameraSize) > 0.01f) {
|
||||
lastCameraSize = targetCamera.orthographicSize;
|
||||
UpdateCanvasScale();
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateCanvasScale()
|
||||
{
|
||||
float scaleFactor = 10f / targetCamera.orthographicSize;
|
||||
|
||||
transform.localScale = Vector3.one * scaleFactor;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 06759f249d7820c43a347cac857fc6d3
|
||||
@@ -1,161 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
// КАМЕРА ГОРОДА (как в мобильных стратегиях):
|
||||
// - перетаскивание одним пальцем / левой кнопкой мыши -- двигает карту
|
||||
// - щипок двумя пальцами / колёсико мыши -- приближение и отдаление (к точке под пальцем/курсором)
|
||||
// - камера не уезжает за границы карты (bounds)
|
||||
// - над интерфейсом (HUD, панели) ничего не делает
|
||||
// - без поворотов и наклонов: изометрия уже нарисована в спрайтах
|
||||
// Вешается на Main Camera вместо CameraController / CameraZoom / FlyCamera.
|
||||
[RequireComponent(typeof(Camera))]
|
||||
public class CityCamera : MonoBehaviour
|
||||
{
|
||||
[Header("Зум (orthographic size)")]
|
||||
public float minZoom = 3f;
|
||||
public float maxZoom = 14f;
|
||||
public float wheelZoomSpeed = 2.5f;
|
||||
public float zoomSmooth = 12f;
|
||||
|
||||
[Header("Границы карты (мировые координаты). Пусто = посчитать по объектам сцены")]
|
||||
public bool autoBounds = true;
|
||||
public Rect bounds = new Rect(-25, -15, 50, 30);
|
||||
[Tooltip("Запас за краем карты, чтобы край не прилипал к экрану")]
|
||||
public float boundsPadding = 4f;
|
||||
|
||||
[Header("Инерция после свайпа")]
|
||||
public float inertiaDamping = 6f;
|
||||
|
||||
Camera cam;
|
||||
float targetZoom;
|
||||
Vector3 lastWorld;
|
||||
bool dragging;
|
||||
Vector3 velocity;
|
||||
float lastPinchDist;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
cam = GetComponent<Camera>();
|
||||
cam.orthographic = true;
|
||||
transform.rotation = Quaternion.identity;
|
||||
transform.localScale = Vector3.one; // старый CameraZoom масштабировал камеру -- сбрасываем
|
||||
targetZoom = Mathf.Clamp(cam.orthographicSize, minZoom, maxZoom);
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
if (autoBounds) CalculateBounds();
|
||||
ClampPosition();
|
||||
}
|
||||
|
||||
// Границы по всем спрайтам и тайлмапам сцены (кроме UI)
|
||||
public void CalculateBounds()
|
||||
{
|
||||
bool any = false;
|
||||
Bounds b = new Bounds();
|
||||
foreach (var r in FindObjectsByType<Renderer>(FindObjectsSortMode.None))
|
||||
{
|
||||
string tn = r.GetType().Name;
|
||||
if (tn != "SpriteRenderer" && tn != "TilemapRenderer") continue; // только карта и здания
|
||||
if (r.gameObject.layer == 5) continue; // UI
|
||||
if (r.GetComponentInParent<Canvas>() != null) continue; // всё, что внутри интерфейса
|
||||
if (!any) { b = r.bounds; any = true; } else b.Encapsulate(r.bounds);
|
||||
}
|
||||
if (any) bounds = new Rect(b.min.x, b.min.y, b.size.x, b.size.y);
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
bool overUI = UIBlocker.IsPointerOverUI();
|
||||
|
||||
if (Input.touchCount >= 2) HandlePinch();
|
||||
else HandleDrag(overUI);
|
||||
|
||||
// колёсико мыши -- зум к курсору
|
||||
float wheel = Input.GetAxis("Mouse ScrollWheel");
|
||||
if (Mathf.Abs(wheel) > 0.001f && !overUI)
|
||||
ZoomTowards(Input.mousePosition, targetZoom - wheel * wheelZoomSpeed * 4f);
|
||||
|
||||
// плавный зум
|
||||
if (Mathf.Abs(cam.orthographicSize - targetZoom) > 0.001f)
|
||||
{
|
||||
Vector3 before = cam.ScreenToWorldPoint(zoomAnchor);
|
||||
cam.orthographicSize = Mathf.Lerp(cam.orthographicSize, targetZoom, Time.unscaledDeltaTime * zoomSmooth);
|
||||
Vector3 after = cam.ScreenToWorldPoint(zoomAnchor);
|
||||
transform.position += before - after; // точка под пальцем остаётся на месте
|
||||
}
|
||||
|
||||
// инерция
|
||||
if (!dragging && velocity.sqrMagnitude > 0.0001f)
|
||||
{
|
||||
transform.position += velocity * Time.unscaledDeltaTime;
|
||||
velocity = Vector3.Lerp(velocity, Vector3.zero, Time.unscaledDeltaTime * inertiaDamping);
|
||||
}
|
||||
|
||||
ClampPosition();
|
||||
}
|
||||
|
||||
Vector3 zoomAnchor;
|
||||
|
||||
void ZoomTowards(Vector3 screenPoint, float zoom)
|
||||
{
|
||||
zoomAnchor = screenPoint;
|
||||
targetZoom = Mathf.Clamp(zoom, minZoom, maxZoom);
|
||||
}
|
||||
|
||||
void HandleDrag(bool overUI)
|
||||
{
|
||||
if (Input.GetMouseButtonDown(0))
|
||||
{
|
||||
dragging = !overUI; // начали тащить на интерфейсе -- карту не двигаем
|
||||
velocity = Vector3.zero;
|
||||
lastWorld = cam.ScreenToWorldPoint(Input.mousePosition);
|
||||
}
|
||||
if (Input.GetMouseButtonUp(0)) dragging = false;
|
||||
if (!dragging || !Input.GetMouseButton(0)) return;
|
||||
|
||||
Vector3 now = cam.ScreenToWorldPoint(Input.mousePosition);
|
||||
Vector3 delta = lastWorld - now;
|
||||
delta.z = 0;
|
||||
transform.position += delta;
|
||||
if (Time.unscaledDeltaTime > 0) velocity = Vector3.Lerp(velocity, delta / Time.unscaledDeltaTime, 0.5f);
|
||||
lastWorld = cam.ScreenToWorldPoint(Input.mousePosition); // после сдвига камеры
|
||||
}
|
||||
|
||||
void HandlePinch()
|
||||
{
|
||||
dragging = false;
|
||||
velocity = Vector3.zero;
|
||||
Touch a = Input.GetTouch(0), b = Input.GetTouch(1);
|
||||
float dist = Vector2.Distance(a.position, b.position);
|
||||
if (a.phase == TouchPhase.Began || b.phase == TouchPhase.Began || lastPinchDist <= 0f)
|
||||
{
|
||||
lastPinchDist = dist;
|
||||
return;
|
||||
}
|
||||
if (dist > 1f)
|
||||
{
|
||||
float ratio = lastPinchDist / dist;
|
||||
ZoomTowards((a.position + b.position) * 0.5f, targetZoom * ratio);
|
||||
}
|
||||
lastPinchDist = dist;
|
||||
if (a.phase == TouchPhase.Ended || b.phase == TouchPhase.Ended) lastPinchDist = 0f;
|
||||
}
|
||||
|
||||
void ClampPosition()
|
||||
{
|
||||
float halfH = cam.orthographicSize;
|
||||
float halfW = halfH * cam.aspect;
|
||||
Rect r = new Rect(bounds.xMin - boundsPadding, bounds.yMin - boundsPadding,
|
||||
bounds.width + boundsPadding * 2, bounds.height + boundsPadding * 2);
|
||||
Vector3 p = transform.position;
|
||||
p.x = r.width > halfW * 2 ? Mathf.Clamp(p.x, r.xMin + halfW, r.xMax - halfW) : r.center.x;
|
||||
p.y = r.height > halfH * 2 ? Mathf.Clamp(p.y, r.yMin + halfH, r.yMax - halfH) : r.center.y;
|
||||
transform.position = p;
|
||||
}
|
||||
|
||||
void OnDrawGizmosSelected()
|
||||
{
|
||||
Gizmos.color = Color.cyan;
|
||||
Gizmos.DrawWireCube(bounds.center, bounds.size);
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d9530f2e8714d3746b25452c7fd56cd3
|
||||
@@ -1,130 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
// Отвязывает HUD от камеры и ставит одну нормальную камеру.
|
||||
//
|
||||
// Было: HUD_Canvas в режиме World Space был дочерним объектом камеры, а CameraZoom масштабировал
|
||||
// саму камеру, чтобы HUD не уменьшался при зуме. Поэтому HUD ехал, дрожал и масштабировался криво.
|
||||
// Стало: HUD_Canvas -- Screen Space Overlay (всегда приклеен к экрану, камера на него не влияет),
|
||||
// на камере -- только CityCamera (перетаскивание, щипок, колёсико, границы карты).
|
||||
//
|
||||
// Работает в двух местах:
|
||||
// - при запуске игры (автоматически), если сцену ещё не исправили в редакторе;
|
||||
// - Tools -> Fix Camera & HUD (или Build HUD Panels) -- исправляет и сохраняет сцену навсегда.
|
||||
public static class HUDCameraSetup
|
||||
{
|
||||
// ОТКЛЮЧЕНО по просьбе команды: камера и HUD вернулись к прежней схеме (Tools -> Restore Old Camera & HUD).
|
||||
// Автоисправление при запуске больше не выполняется.
|
||||
static void AutoFix()
|
||||
{
|
||||
// и при каждой следующей загрузке города (возврат с карты мира)
|
||||
UnityEngine.SceneManagement.SceneManager.sceneLoaded += (s, m) => Apply(false);
|
||||
|
||||
int changes = Apply(false);
|
||||
if (changes > 0)
|
||||
Debug.Log("[КАМЕРА/HUD] Исправлено при запуске: " + changes +
|
||||
". Чтобы сохранить в сцене навсегда -- Tools -> Fix Camera & HUD");
|
||||
}
|
||||
|
||||
// editMode = true -- вызывается из редактора: лишние компоненты удаляются, а не выключаются
|
||||
public static int Apply(bool editMode)
|
||||
{
|
||||
int changes = 0;
|
||||
|
||||
// ---------- HUD ----------
|
||||
var hudGO = GameObject.Find("HUD_Canvas");
|
||||
if (hudGO != null)
|
||||
{
|
||||
var canvas = hudGO.GetComponent<Canvas>();
|
||||
var rt = (RectTransform)hudGO.transform;
|
||||
if (canvas != null && canvas.renderMode != RenderMode.ScreenSpaceOverlay)
|
||||
{
|
||||
Vector2 designSize = rt.sizeDelta; // размер, под который дизайнер расставил HUD
|
||||
if (designSize.x < 100 || designSize.y < 100) designSize = new Vector2(1080, 1920);
|
||||
|
||||
if (hudGO.transform.parent != null) hudGO.transform.SetParent(null, false);
|
||||
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
|
||||
canvas.sortingOrder = 100;
|
||||
rt.localScale = Vector3.one;
|
||||
rt.localRotation = Quaternion.identity;
|
||||
|
||||
var scaler = hudGO.GetComponent<CanvasScaler>();
|
||||
if (scaler == null) scaler = hudGO.AddComponent<CanvasScaler>();
|
||||
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
|
||||
scaler.referenceResolution = designSize; // HUD выглядит так же, как его собрал дизайнер
|
||||
scaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight;
|
||||
scaler.matchWidthOrHeight = 1f; // как было в мире: высота HUD = высота экрана
|
||||
changes++;
|
||||
}
|
||||
// высота HUD = высота экрана (так HUD выглядел, пока был привязан к камере)
|
||||
var sc = hudGO.GetComponent<CanvasScaler>();
|
||||
if (sc != null && canvas != null && canvas.renderMode == RenderMode.ScreenSpaceOverlay && sc.matchWidthOrHeight != 1f)
|
||||
{ sc.matchWidthOrHeight = 1f; changes++; }
|
||||
changes += ConvertSpritesToImages(hudGO, editMode);
|
||||
changes += RemoveOrDisable(hudGO, "HUDWorldSpaceSync", editMode);
|
||||
}
|
||||
|
||||
// ---------- КАМЕРА ----------
|
||||
var cam = Camera.main;
|
||||
if (cam != null)
|
||||
{
|
||||
changes += RemoveOrDisable(cam.gameObject, "CameraZoom", editMode);
|
||||
changes += RemoveOrDisable(cam.gameObject, "CameraController", editMode);
|
||||
changes += RemoveOrDisable(cam.gameObject, "FlyCamera", editMode);
|
||||
if (cam.transform.localScale != Vector3.one) { cam.transform.localScale = Vector3.one; changes++; }
|
||||
if (cam.transform.rotation != Quaternion.identity) { cam.transform.rotation = Quaternion.identity; changes++; }
|
||||
if (cam.GetComponent<CityCamera>() == null) { cam.gameObject.AddComponent<CityCamera>(); changes++; }
|
||||
}
|
||||
return changes;
|
||||
}
|
||||
|
||||
// В экранном Canvas обычные SpriteRenderer не рисуются как часть интерфейса -- они улетают в мир
|
||||
// огромными картинками (отсюда белая "клетка" на весь экран). Переделываем их в UI Image того же размера.
|
||||
static int ConvertSpritesToImages(GameObject hud, bool editMode)
|
||||
{
|
||||
int n = 0;
|
||||
foreach (var sr in hud.GetComponentsInChildren<SpriteRenderer>(true))
|
||||
{
|
||||
if (sr.sprite == null) { sr.enabled = false; continue; }
|
||||
var t = sr.transform;
|
||||
var parent = t.parent as RectTransform;
|
||||
if (parent == null) { sr.enabled = false; continue; }
|
||||
|
||||
var go = new GameObject(t.name + "_UI", typeof(RectTransform), typeof(Image));
|
||||
var rt = (RectTransform)go.transform;
|
||||
rt.SetParent(parent, false);
|
||||
rt.SetSiblingIndex(t.GetSiblingIndex());
|
||||
rt.anchorMin = rt.anchorMax = parent.pivot; // localPosition считается от pivot родителя
|
||||
rt.pivot = new Vector2(0.5f, 0.5f);
|
||||
Vector2 size = Vector2.Scale(sr.sprite.bounds.size, new Vector2(Mathf.Abs(t.localScale.x), Mathf.Abs(t.localScale.y)));
|
||||
rt.sizeDelta = size;
|
||||
rt.localPosition = t.localPosition + (Vector3)Vector2.Scale(sr.sprite.bounds.center, t.localScale);
|
||||
rt.localRotation = t.localRotation;
|
||||
var img = go.GetComponent<Image>();
|
||||
img.sprite = sr.sprite;
|
||||
img.color = sr.color;
|
||||
img.raycastTarget = false;
|
||||
img.preserveAspect = false;
|
||||
|
||||
if (editMode) Object.DestroyImmediate(t.gameObject);
|
||||
else t.gameObject.SetActive(false);
|
||||
n++;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
// Компоненты ищем по имени класса: часть из них (FlyCamera, HUDWorldSpaceSync) в проекте уже нет
|
||||
static int RemoveOrDisable(GameObject go, string typeName, bool editMode)
|
||||
{
|
||||
int n = 0;
|
||||
foreach (var mb in go.GetComponents<MonoBehaviour>())
|
||||
{
|
||||
if (mb == null || mb.GetType().Name != typeName) continue;
|
||||
if (editMode) Object.DestroyImmediate(mb);
|
||||
else if (mb.enabled) mb.enabled = false;
|
||||
else continue;
|
||||
n++;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 256165dd8ffe7dc4490c9e5b9796b782
|
||||
@@ -38,6 +38,15 @@ public static class City3DGameplay
|
||||
return null;
|
||||
}
|
||||
|
||||
// Здания, которые открываются ровно на этом уровне Ратуши (окно Ратуши: «Откроется: …»)
|
||||
public static List<string> TypesUnlockedAt(int townHallLevel)
|
||||
{
|
||||
var names = new List<string>();
|
||||
foreach (var t in AllTypes3D)
|
||||
if (!IsTownHall(t) && RequiredTownHall(t) == townHallLevel) names.Add(t);
|
||||
return names;
|
||||
}
|
||||
|
||||
static readonly string[] AllTypes3D =
|
||||
{
|
||||
"Ратуша", "Дом", "Ферма", "Лесопилка", "Каменоломня", "Шахта", "Склад", "Амбар", "Казармы", "Госпиталь",
|
||||
|
||||
@@ -1,54 +1,10 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
using System.Collections.Generic;
|
||||
|
||||
// Заполняет меню стройки кнопками для каждого доступного здания.
|
||||
// Вешается на пустой объект-контейнер меню (например BuildMenuPanel).
|
||||
|
||||
|
||||
// Старое меню 2D-стройки. Компонент ещё висит в HUD_Canvas (BuildModeController прячет это меню), но ничего не делает:
|
||||
// 2D-стройка удалена 06.11, список зданий 3D-поселения рисует City3DController. Можно убрать из префаба.
|
||||
public class BuildMenuUi : MonoBehaviour
|
||||
{
|
||||
[Header("Ссылки")]
|
||||
public Transform buttonContainer; //Куда савить снопки
|
||||
public GameObject buildingButtonPrefab; //Преваб одной кнопки здания
|
||||
|
||||
void Start()
|
||||
{
|
||||
RefreshMenu();
|
||||
}
|
||||
void OnEnable()
|
||||
{
|
||||
if (BuildManager.Instance == null) return;
|
||||
RefreshMenu();
|
||||
}
|
||||
|
||||
public void RefreshMenu()
|
||||
{
|
||||
//Чистка старых кнопок перед сборкой списка
|
||||
foreach (Transform child in buttonContainer)
|
||||
{
|
||||
Destroy(child.gameObject);
|
||||
}
|
||||
List<BuildingData> available = BuildManager.Instance.GetAvailableBuildings();
|
||||
foreach (var building in available)
|
||||
{
|
||||
GameObject btnGO = Instantiate(buildingButtonPrefab, buttonContainer);
|
||||
|
||||
Transform iconT = btnGO.transform.Find("Icon");
|
||||
Transform nameT = btnGO.transform.Find("NameText");
|
||||
Transform costT = btnGO.transform.Find("CostText");
|
||||
|
||||
if (iconT != null) iconT.GetComponent<Image>().sprite = building.icon;
|
||||
if (nameT != null) nameT.GetComponent<TMP_Text>().text = building.buildingName;
|
||||
if (costT != null) costT.GetComponent<TMP_Text>().text = building.GetCostText();
|
||||
Button btn = btnGO.GetComponent<Button>();
|
||||
BuildingData capturedBuilding = building; // важно для замыкания в цикле
|
||||
btn.onClick.AddListener(() =>
|
||||
{
|
||||
BuildManager.Instance.StartPlacing(capturedBuilding);
|
||||
gameObject.SetActive(false); // закрываем меню после выбора, идём размещать здание
|
||||
});
|
||||
}
|
||||
}
|
||||
public Transform buttonContainer;
|
||||
public GameObject buildingButtonPrefab;
|
||||
}
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
|
||||
// Подпись над зданием -- больше не показывается: всё о здании теперь в его окне (App/BuildingWindow, тап по зданию).
|
||||
// Компонент оставлен, чтобы не перенастраивать префабы: при запуске он прячет свою подпись и полоску и выключается.
|
||||
public class BuildingUI : MonoBehaviour
|
||||
{
|
||||
[Header("Настройки")]
|
||||
public ResourceCollector building;
|
||||
public TMP_Text stokText;
|
||||
public Slider progressBar;
|
||||
|
||||
float next;
|
||||
|
||||
public static bool ShowLabels = false; // вернуть подписи над зданиями -- поставить true
|
||||
|
||||
void Start()
|
||||
{
|
||||
if (!ShowLabels)
|
||||
{
|
||||
HideLabel();
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
if (building == null)
|
||||
{
|
||||
Debug.LogError("Ошибка BuildingUI: не назначено здание (Building)!");
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
UpdateUI();
|
||||
}
|
||||
|
||||
// Прячем холст с подписью и полоской. Сам объект здания не трогаем: компонент висит на его корне
|
||||
void HideLabel()
|
||||
{
|
||||
foreach (Component c in new Component[] { stokText, progressBar })
|
||||
{
|
||||
if (c == null) continue;
|
||||
var canvas = c.GetComponentInParent<Canvas>(true);
|
||||
GameObject target = canvas != null && canvas.gameObject != gameObject ? canvas.gameObject : c.gameObject;
|
||||
if (target != gameObject) target.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (Time.unscaledTime < next) return;
|
||||
next = Time.unscaledTime + 0.5f;
|
||||
UpdateUI();
|
||||
}
|
||||
|
||||
void UpdateUI()
|
||||
{
|
||||
bool workplace = building.IsWorkplace;
|
||||
if (progressBar != null && progressBar.gameObject.activeSelf != workplace) progressBar.gameObject.SetActive(workplace);
|
||||
|
||||
if (!workplace)
|
||||
{
|
||||
if (stokText != null) stokText.text = building.IsHouse ? $"Дом {building.level} ур." : $"{building.level} ур.";
|
||||
return;
|
||||
}
|
||||
|
||||
float workers = building.GetCurrentStock();
|
||||
float slots = building.GetMaxCapacity();
|
||||
if (stokText != null) stokText.text = $"Рабочие {workers:0} / {slots:0}";
|
||||
if (progressBar != null) progressBar.value = slots > 0 ? Mathf.Clamp01(workers / slots) : 0f;
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 03e94b2f819b2884eb838f4c768e5d17
|
||||
@@ -1,67 +1,6 @@
|
||||
using UnityEngine;
|
||||
|
||||
// Добавляет "Казармы" в список стройки САМ при запуске сцены -- даже если никто не запускал
|
||||
// Tools -> Build HUD Panels. Если в BuildManager уже есть здание "Казармы" (из Data_Barracks.asset),
|
||||
// ничего не делает.
|
||||
//
|
||||
// Срабатывает после Awake всех объектов, но ДО Start -- то есть раньше, чем GameBootstrap загрузит
|
||||
// сохранение. Поэтому построенные казармы корректно восстанавливаются из save.json.
|
||||
// Имя здания «Казармы» (лимиты, сохранение, окна). 2D-шаблон удалён 06.11 вместе с 2D-городом;
|
||||
// 3D-здание -- City3D/City3DGameplay
|
||||
public static class BarracksBootstrap
|
||||
{
|
||||
public const string BarracksName = "Казармы";
|
||||
static GameObject runtimeTemplate;
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
|
||||
static void Init()
|
||||
{
|
||||
Ensure();
|
||||
// при каждом новом входе в город (например, возврат с карты мира) -- снова добавить в новый BuildManager
|
||||
UnityEngine.SceneManagement.SceneManager.sceneLoaded += (s, m) => Ensure();
|
||||
}
|
||||
|
||||
public static void Ensure()
|
||||
{
|
||||
var bm = BuildManager.Instance != null ? BuildManager.Instance : Object.FindAnyObjectByType<BuildManager>();
|
||||
if (bm == null || bm.allBuildings == null) return;
|
||||
|
||||
BuildingData template = null;
|
||||
foreach (var b in bm.allBuildings)
|
||||
{
|
||||
if (b == null) continue;
|
||||
if (b.buildingName == BarracksName) return; // уже есть
|
||||
if (template == null && b.prefab != null) template = b;
|
||||
}
|
||||
if (template == null) { Debug.LogWarning("[КАЗАРМЫ] Нет ни одного здания-шаблона в BuildManager"); return; }
|
||||
|
||||
// Префаб-шаблон в памяти: копия обычного здания без сбора ресурсов, с компонентом Barracks
|
||||
if (runtimeTemplate == null)
|
||||
{
|
||||
runtimeTemplate = Object.Instantiate(template.prefab);
|
||||
runtimeTemplate.name = "Barracks";
|
||||
runtimeTemplate.SetActive(false);
|
||||
Object.DontDestroyOnLoad(runtimeTemplate);
|
||||
foreach (var c in runtimeTemplate.GetComponents<ResourceCollector>()) Object.DestroyImmediate(c);
|
||||
foreach (var c in runtimeTemplate.GetComponents<ResourceProducer>()) Object.DestroyImmediate(c);
|
||||
foreach (var c in runtimeTemplate.GetComponents<BuildingUI>()) Object.DestroyImmediate(c);
|
||||
for (int i = runtimeTemplate.transform.childCount - 1; i >= 0; i--)
|
||||
Object.DestroyImmediate(runtimeTemplate.transform.GetChild(i).gameObject); // полоска запаса ресурса
|
||||
var sr = runtimeTemplate.GetComponent<SpriteRenderer>();
|
||||
if (sr != null) sr.color = new Color(1f, 0.55f, 0.55f); // пока нет арта -- отличаем цветом
|
||||
runtimeTemplate.AddComponent<Barracks>();
|
||||
}
|
||||
|
||||
var data = ScriptableObject.CreateInstance<BuildingData>();
|
||||
data.name = "Data_Barracks_Runtime";
|
||||
data.buildingName = BarracksName;
|
||||
data.icon = template.icon;
|
||||
data.prefab = runtimeTemplate;
|
||||
data.requiredTownHallLevel = 1;
|
||||
data.cost = new[]
|
||||
{
|
||||
new ResourceCost { type = ResourceType.Wood, amount = 300 },
|
||||
new ResourceCost { type = ResourceType.Stone, amount = 200 },
|
||||
};
|
||||
bm.allBuildings.Add(data);
|
||||
Debug.Log("[КАЗАРМЫ] Добавлены в список стройки");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,452 +1,51 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
|
||||
// СВОБОДНАЯ СТРОЙКА НА СЕТКЕ (игрок сам выбирает место):
|
||||
// 1. Кнопка "СТРОЙКА" включает режим: на земле появляется сетка (красные клетки заняты), сверху подсказка,
|
||||
// и сразу открывается список зданий.
|
||||
// 2. Выбрали здание -> появляется призрак: полупрозрачное здание и пятно его клеток.
|
||||
// Зелёное пятно -- можно ставить, красное -- занято или за границей сетки.
|
||||
// 3. Призрак двигают пальцем (тащить за само пятно) или тапом по земле -- он прыгает туда.
|
||||
// Камера в это время не ездит. Размер у зданий разный (BuildingData.footprint).
|
||||
// 4. Внизу панель: "Поставить" (если место свободно и хватает ресурсов), "Другое здание", "Отмена".
|
||||
// 5. После постройки режим остаётся включённым -- можно строить дальше. "Выйти" -- сетка прячется.
|
||||
//
|
||||
// 6. Лимит зданий по уровню Ратуши (EconomyConfig, ТЕСТ): в списке видно "2 / 3", сверх лимита строить нельзя.
|
||||
// 7. Стройка идёт по времени и занимает строителя (BuildTimer): все заняты -- поставить нельзя.
|
||||
// 8. Перенос (кнопка "Перенести" в окне здания): тот же призрак, но здание переезжает бесплатно.
|
||||
//
|
||||
// Вешается билдером (Tools -> Build HUD Panels) на HUD_Canvas, кнопка Nav_Build вызывает ToggleMode().
|
||||
[DefaultExecutionOrder(-50)] // раньше камеры: захват пальца призраком должен быть виден ей в том же кадре
|
||||
// Кнопка «СТРОЙКА» общего HUD (HUD_Canvas, кнопка Nav_Build вызывает ToggleMode) и «Перенести» в окне здания.
|
||||
// Стройку ведёт 3D-поселение: City3DController задаёт ExternalToggle / ExternalMove, пока сцена City3D открыта.
|
||||
// 2D-стройка на сетке (BuildManager, BuildGrid, призрак) удалена 06.11 вместе с 2D-городом.
|
||||
public class BuildModeController : MonoBehaviour
|
||||
{
|
||||
public static BuildModeController Instance { get; private set; }
|
||||
|
||||
[Tooltip("Кнопка HUD, которая включает/выключает режим (надпись меняется сама)")]
|
||||
[Tooltip("Кнопка HUD «СТРОЙКА»")]
|
||||
public Button modeButton;
|
||||
[Tooltip("Старое меню стройки -- прячем, оно больше не используется")]
|
||||
[Tooltip("Старое меню стройки -- прячется, не используется")]
|
||||
public GameObject legacyBuildMenu;
|
||||
|
||||
public bool IsActive { get; private set; }
|
||||
// Своего режима стройки больше нет (он в 3D-сцене) -- всегда false
|
||||
public bool IsActive => false;
|
||||
|
||||
// 3D-поселение (сцена City3D): своей 2D-стройки там нет -- кнопка "СТРОЙКА" общего HUD
|
||||
// открывает стройку 3D-сцены. Задаёт City3DController, пока сцена открыта (05.11).
|
||||
public static System.Action ExternalToggle;
|
||||
// То же для кнопки "Перенести" в окне здания: в 3D-сцене здание переносит сама сцена
|
||||
public static System.Action<GameObject> ExternalMove;
|
||||
static bool Has2DCity => BuildManager.Instance != null;
|
||||
|
||||
GameObject banner;
|
||||
GameObject chooser;
|
||||
GameObject placePanel;
|
||||
TextMeshProUGUI placeInfo;
|
||||
Button placeButton;
|
||||
|
||||
BuildGhost ghost;
|
||||
GameObject moving; // здание, которое переносим (null -- строим новое)
|
||||
bool dragging;
|
||||
Vector2 grabOffset;
|
||||
Vector2 downPos;
|
||||
bool downOverUI;
|
||||
bool downOnGhost;
|
||||
float nextPanelRefresh;
|
||||
|
||||
const float TapThreshold = 25f;
|
||||
|
||||
void Awake() { Instance = this; }
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
if (Instance == this) Instance = null;
|
||||
UIBlocker.WorldInputCaptured = false;
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
if (legacyBuildMenu != null) legacyBuildMenu.SetActive(false);
|
||||
SetMode(false);
|
||||
}
|
||||
|
||||
public void ToggleMode()
|
||||
{
|
||||
if (!Has2DCity && ExternalToggle != null) { ExternalToggle(); return; } // 3D-сцена: своя стройка
|
||||
SetMode(!IsActive);
|
||||
if (ExternalToggle != null) ExternalToggle();
|
||||
else UIKit.Toast("Стройка -- в городе");
|
||||
}
|
||||
|
||||
// Открыть стройку (например, «Построить Казармы» в окне войск)
|
||||
public void SetMode(bool active)
|
||||
{
|
||||
if (!Has2DCity) active = false; // в 3D-сцене 2D-стройки нет (и сетку 2D не создаём)
|
||||
IsActive = active;
|
||||
CloseChooser();
|
||||
CancelGhost();
|
||||
UpdateButtonLabel();
|
||||
if (Has2DCity) BuildGrid.Instance.ShowOverlay(active);
|
||||
|
||||
if (banner != null) { Destroy(banner); banner = null; }
|
||||
if (active)
|
||||
{
|
||||
if (UIPanelManager.Instance != null) UIPanelManager.Instance.CloseAll();
|
||||
banner = CreateBanner();
|
||||
OpenChooser();
|
||||
}
|
||||
if (active) ToggleMode();
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (!IsActive) return;
|
||||
// открыли любую панель HUD -- выходим из режима стройки
|
||||
if (UIPanelManager.Instance != null && UIPanelManager.Instance.CurrentId != "") { SetMode(false); return; }
|
||||
if (chooser != null || ghost == null) { StopDrag(); return; }
|
||||
|
||||
HandlePointer();
|
||||
|
||||
if (Time.unscaledTime >= nextPanelRefresh)
|
||||
{
|
||||
nextPanelRefresh = Time.unscaledTime + 0.3f;
|
||||
ghost.Recheck(); // клетки могли заняться (загрузка сохранения) или ресурсы -- прийти
|
||||
RefreshPlacePanel();
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------- палец: тащим призрак или тапаем по земле ----------------
|
||||
|
||||
void HandlePointer()
|
||||
{
|
||||
Vector2 world = PointerWorld();
|
||||
|
||||
if (Input.GetMouseButtonDown(0))
|
||||
{
|
||||
downPos = Input.mousePosition;
|
||||
downOverUI = UIBlocker.IsPointerOverUI();
|
||||
downOnGhost = !downOverUI && ghost.Contains(world);
|
||||
if (downOnGhost)
|
||||
{
|
||||
dragging = true;
|
||||
grabOffset = (Vector2)ghost.transform.position - world;
|
||||
UIBlocker.WorldInputCaptured = true; // камера не поедет
|
||||
}
|
||||
}
|
||||
|
||||
if (dragging && Input.GetMouseButton(0))
|
||||
{
|
||||
var before = ghost.Cell;
|
||||
ghost.MoveNear(world + grabOffset);
|
||||
if (ghost.Cell != before) RefreshPlacePanel();
|
||||
}
|
||||
|
||||
if (Input.GetMouseButtonUp(0))
|
||||
{
|
||||
bool wasDragging = dragging;
|
||||
StopDrag();
|
||||
if (wasDragging || downOverUI || UIBlocker.IsPointerOverUI()) return;
|
||||
if (((Vector2)Input.mousePosition - downPos).magnitude > TapThreshold) return; // тащили камеру
|
||||
ghost.MoveNear(world); // тап по земле -- призрак прыгает сюда
|
||||
RefreshPlacePanel();
|
||||
}
|
||||
}
|
||||
|
||||
void StopDrag()
|
||||
{
|
||||
dragging = false;
|
||||
UIBlocker.WorldInputCaptured = false;
|
||||
}
|
||||
|
||||
static Vector2 PointerWorld()
|
||||
{
|
||||
var cam = Camera.main;
|
||||
if (cam == null) return Vector2.zero;
|
||||
Vector3 w = cam.ScreenToWorldPoint(Input.mousePosition);
|
||||
return new Vector2(w.x, w.y);
|
||||
}
|
||||
|
||||
// ---------------- призрак ----------------
|
||||
|
||||
// Перенос построенного здания: призрак на его месте, "Сюда" -- переезжает бесплатно
|
||||
public void StartMove(GameObject building)
|
||||
{
|
||||
if (!Has2DCity && ExternalMove != null) { ExternalMove(building); return; } // 3D-сцена
|
||||
var id = building != null ? building.GetComponent<PlacedBuildingId>() : null;
|
||||
var data = id != null && BuildManager.Instance != null ? BuildManager.Instance.FindData(id.buildingName) : null;
|
||||
if (data == null) { UIKit.Toast("Это здание перенести нельзя"); return; }
|
||||
|
||||
if (!IsActive)
|
||||
{
|
||||
IsActive = true;
|
||||
UpdateButtonLabel();
|
||||
BuildGrid.Instance.ShowOverlay(true);
|
||||
if (UIPanelManager.Instance != null) UIPanelManager.Instance.CloseAll();
|
||||
if (banner == null) banner = CreateBanner();
|
||||
}
|
||||
CloseChooser();
|
||||
CancelGhost();
|
||||
|
||||
moving = building;
|
||||
BuildGrid.IgnoredBuilding = building; // его клетки считаются свободными, пока выбираем новое место
|
||||
BuildGrid.Instance.Refresh();
|
||||
ghost = BuildGhost.Create(data);
|
||||
ghost.MoveNear((Vector2)building.transform.position + ghost.Footprint.anchorOffset);
|
||||
CreatePlacePanel();
|
||||
}
|
||||
|
||||
void StartGhost(BuildingData data)
|
||||
{
|
||||
CancelGhost();
|
||||
CloseChooser();
|
||||
ghost = BuildGhost.Create(data);
|
||||
|
||||
// ставим в центр экрана, а если там занято -- на ближайшее свободное место
|
||||
var cam = Camera.main;
|
||||
Vector2 center = cam != null ? (Vector2)cam.transform.position : Vector2.zero;
|
||||
if (BuildGrid.Instance.FindFreeNear(center, ghost.Footprint.size, out var cell)) ghost.MoveToCell(cell);
|
||||
else
|
||||
{
|
||||
ghost.MoveNear(center);
|
||||
UIKit.Toast("Свободного места под это здание нет");
|
||||
}
|
||||
CreatePlacePanel();
|
||||
}
|
||||
|
||||
void CancelGhost()
|
||||
{
|
||||
StopDrag();
|
||||
if (moving != null || BuildGrid.IgnoredBuilding != null)
|
||||
{
|
||||
moving = null;
|
||||
BuildGrid.IgnoredBuilding = null; // здание остаётся на старом месте
|
||||
if (BuildGrid.Instance != null) BuildGrid.Instance.Refresh();
|
||||
}
|
||||
if (ghost != null) Destroy(ghost.gameObject);
|
||||
ghost = null;
|
||||
if (placePanel != null) Destroy(placePanel);
|
||||
placePanel = null;
|
||||
}
|
||||
|
||||
void Place()
|
||||
{
|
||||
if (ghost == null || BuildManager.Instance == null) return;
|
||||
var d = ghost.Data;
|
||||
ghost.Recheck();
|
||||
if (!ghost.CellsFree) { UIKit.Toast("Здесь строить нельзя: клетки заняты"); return; }
|
||||
|
||||
if (moving != null)
|
||||
{
|
||||
var building = moving;
|
||||
var id = building != null ? building.GetComponent<PlacedBuildingId>() : null;
|
||||
if (id == null || string.IsNullOrEmpty(id.buildingName)) { CancelGhost(); return; } // здания уже нет
|
||||
// Перенос бесплатный: меняется только место. Уровень, стройка и улучшение остаются у того же здания,
|
||||
// ресурсы не тратятся и не возвращаются (решения 04.11)
|
||||
building.transform.position = ghost.PrefabPosition;
|
||||
CancelGhost(); // снимает "игнор" клеток -- здание уже на новом месте
|
||||
UIKit.Toast("Перенесено: " + d.buildingName);
|
||||
return;
|
||||
}
|
||||
|
||||
string limit = LimitProblem(d);
|
||||
if (limit != null) { UIKit.Toast(limit); return; }
|
||||
if (BuildTimer.DurationMs(false, 1) > 0 && BuildTimer.FreeBuilders == 0) { UIKit.Toast("Все строители заняты"); return; }
|
||||
if (!d.CanAfford()) { UIKit.Toast(GameProgress.Instance.MissingText(ToRewards(d.cost))); return; }
|
||||
|
||||
if (BuildManager.Instance.BuildAt(d, ghost.Cell) != null)
|
||||
{
|
||||
UIKit.Toast(BuildTimer.DurationMs(false, 1) > 0 ? "Стройка началась: " + d.buildingName : "Построено: " + d.buildingName);
|
||||
CancelGhost(); // режим остаётся: "Здания" в подсказке сверху -- строить дальше
|
||||
}
|
||||
else UIKit.Toast("Не получилось построить");
|
||||
}
|
||||
|
||||
// ---------------- нижняя панель: Поставить / Другое здание / Отмена ----------------
|
||||
|
||||
void CreatePlacePanel()
|
||||
{
|
||||
if (placePanel != null) Destroy(placePanel);
|
||||
var bar = UIKit.Row(UIKit.Overlay, -1, 14, new Color(0.08f, 0.1f, 0.14f, 0.94f), 14);
|
||||
bar.name = "BuildPlacePanel";
|
||||
bar.anchorMin = new Vector2(0.04f, 0); bar.anchorMax = new Vector2(0.96f, 0);
|
||||
bar.pivot = new Vector2(0.5f, 0);
|
||||
bar.sizeDelta = new Vector2(0, 130); bar.anchoredPosition = new Vector2(0, 40);
|
||||
placePanel = bar.gameObject;
|
||||
|
||||
placeInfo = UIKit.Text(bar, "", 26, Color.white, TextAlignmentOptions.Left);
|
||||
UIKit.Size(placeInfo, -1, -1, 1);
|
||||
placeButton = UIKit.Button(bar, moving != null ? "Сюда" : "Поставить", UIKit.Theme.Green, Place, 230, 90, 28);
|
||||
if (moving == null) UIKit.Button(bar, "Другое", UIKit.Theme.Blue, OpenChooser, 180, 90, 26);
|
||||
UIKit.Button(bar, "Отмена", UIKit.Theme.Gray, CancelGhost, 180, 90, 26);
|
||||
RefreshPlacePanel();
|
||||
}
|
||||
|
||||
void RefreshPlacePanel()
|
||||
{
|
||||
if (ghost == null || placeInfo == null) return;
|
||||
var d = ghost.Data;
|
||||
string where = ghost.CellsFree ? "<color=#9be59b>место свободно</color>" : "<color=#ff7a7a>клетки заняты</color>";
|
||||
if (moving != null)
|
||||
{
|
||||
placeInfo.text = "<b>Перенос: " + d.buildingName + "</b> " + ghost.Footprint.size.x + "×" + ghost.Footprint.size.y +
|
||||
" кл. • " + where + "\nБесплатно";
|
||||
UIKit.SetButton(placeButton, ghost.CellsFree ? "Сюда" : "Занято", ghost.CellsFree);
|
||||
return;
|
||||
}
|
||||
bool afford = d.CanAfford();
|
||||
string limit = LimitProblem(d);
|
||||
bool builders = BuildTimer.DurationMs(false, 1) <= 0 || BuildTimer.FreeBuilders > 0;
|
||||
placeInfo.text = "<b>" + d.buildingName + "</b> " + ghost.Footprint.size.x + "×" + ghost.Footprint.size.y +
|
||||
" кл. • " + where + "\n" + CostText(d) + BuildTimeText();
|
||||
bool ok = ghost.CellsFree && afford && limit == null && builders;
|
||||
string label = ok ? "Поставить" : !ghost.CellsFree ? "Занято" : limit != null ? "Лимит" : !builders ? "Строители заняты" : "Мало ресурсов";
|
||||
UIKit.SetButton(placeButton, label, ok);
|
||||
}
|
||||
|
||||
// ---------------- окно выбора здания ----------------
|
||||
|
||||
void OpenChooser()
|
||||
{
|
||||
CloseChooser();
|
||||
StopDrag();
|
||||
var bm = BuildManager.Instance;
|
||||
if (bm == null) return;
|
||||
GameObject root;
|
||||
var card = UIKit.Modal("Что построить?", out root);
|
||||
chooser = root;
|
||||
|
||||
// окно фиксированного размера с прокруткой, чтобы влезало на любом экране
|
||||
var fit = card.GetComponent<ContentSizeFitter>();
|
||||
if (fit != null) DestroyImmediate(fit);
|
||||
card.anchorMin = new Vector2(0.08f, 0.08f); card.anchorMax = new Vector2(0.92f, 0.92f);
|
||||
card.offsetMin = Vector2.zero; card.offsetMax = Vector2.zero;
|
||||
|
||||
int th = TownHall.Instance != null ? TownHall.Instance.currentLevel : 1;
|
||||
UIKit.Text(card, "Ратуша " + th + " ур. • строителей свободно: " + BuildTimer.FreeBuilders + " из " + BuildTimer.Builders +
|
||||
"\nвыберите здание, потом место на сетке", 24, UIKit.Theme.TextDim, TextAlignmentOptions.Center);
|
||||
|
||||
var holder = UIKit.Make("ListHolder", card);
|
||||
UIKit.Size(holder, -1, -1).flexibleHeight = 1;
|
||||
ScrollRect scroll;
|
||||
var list = UIKit.ScrollList(holder, out scroll, 10);
|
||||
|
||||
// доступные сверху, закрытые по уровню Ратуши -- ниже
|
||||
var all = new List<BuildingData>(bm.allBuildings);
|
||||
all.RemoveAll(b => b == null || b.prefab == null);
|
||||
all.Sort((a, b) => a.requiredTownHallLevel.CompareTo(b.requiredTownHallLevel));
|
||||
|
||||
foreach (var data in all)
|
||||
{
|
||||
var d = data;
|
||||
int max = EconomyConfig.Load().BuildingLimitFor(d.buildingName, th);
|
||||
int have = CountBuilt(d.buildingName);
|
||||
bool full = max >= 0 && have >= max;
|
||||
bool locked = d.requiredTownHallLevel > th || full;
|
||||
bool afford = !locked && d.CanAfford();
|
||||
var size = BuildFootprint.Of(d).size;
|
||||
|
||||
var row = UIKit.Row(list, 120, 14, locked ? UIKit.Theme.CardDark : UIKit.Theme.Card, 10);
|
||||
var icon = UIKit.Box(row, d.icon != null ? Color.white : UIKit.Theme.Gray);
|
||||
if (d.icon != null) { icon.sprite = d.icon; icon.preserveAspect = true; }
|
||||
UIKit.Size(icon, 100, 100);
|
||||
|
||||
var info = UIKit.Card(row, new Color(0, 0, 0, 0), 0, 4);
|
||||
UIKit.Size(info, -1, -1, 1);
|
||||
string count = max >= 0 ? " <size=22><color=#aab>построено " + have + " / " + max + "</color></size>" : "";
|
||||
UIKit.Text(info, d.buildingName + " <size=22><color=#aab>" + size.x + "×" + size.y + " кл.</color></size>" + count, 30,
|
||||
locked ? UIKit.Theme.TextDim : UIKit.Theme.Text).fontStyle = FontStyles.Bold;
|
||||
string why = d.requiredTownHallLevel > th ? "Откроется на Ратуше " + d.requiredTownHallLevel + " уровня"
|
||||
: full ? NextLimitText(d.buildingName, th, have) : CostText(d);
|
||||
UIKit.Text(info, why, 24, locked ? UIKit.Theme.Gold : UIKit.Theme.TextDim);
|
||||
|
||||
// выбрать можно и без ресурсов: место присмотреть, а "Поставить" загорится, когда хватит
|
||||
string label = d.requiredTownHallLevel > th ? "Закрыто" : full ? "Лимит" : "Выбрать";
|
||||
var b = UIKit.Button(row, label, afford ? UIKit.Theme.Green : UIKit.Theme.Gray, () => StartGhost(d), 230, 90, 26);
|
||||
b.interactable = !locked;
|
||||
}
|
||||
|
||||
UIKit.Button(card, "Закрыть", UIKit.Theme.Gray, CloseChooser, -1, 90, 30);
|
||||
}
|
||||
|
||||
// ---------------- лимит зданий по Ратуше (EconomyConfig, ТЕСТ) ----------------
|
||||
|
||||
static int CountBuilt(string buildingName)
|
||||
{
|
||||
int n = 0;
|
||||
foreach (var id in FindObjectsByType<PlacedBuildingId>(FindObjectsSortMode.None))
|
||||
if (id.buildingName == buildingName) n++;
|
||||
return n;
|
||||
}
|
||||
|
||||
// null -- лимит позволяет; иначе текст для игрока
|
||||
static string LimitProblem(BuildingData d)
|
||||
{
|
||||
int th = TownHall.Instance != null ? TownHall.Instance.currentLevel : 1;
|
||||
int max = EconomyConfig.Load().BuildingLimitFor(d.buildingName, th);
|
||||
int have = CountBuilt(d.buildingName);
|
||||
if (max < 0 || have < max) return null;
|
||||
return NextLimitText(d.buildingName, th, have);
|
||||
}
|
||||
|
||||
static string NextLimitText(string buildingName, int th, int have)
|
||||
{
|
||||
var config = EconomyConfig.Load();
|
||||
for (int lvl = th + 1; lvl <= 10; lvl++)
|
||||
if (config.BuildingLimitFor(buildingName, lvl) > have)
|
||||
return "Лимит " + have + " / " + config.BuildingLimitFor(buildingName, th) + ": больше — на Ратуше " + lvl + " ур.";
|
||||
return "Достигнут лимит: " + have;
|
||||
}
|
||||
|
||||
static string BuildTimeText()
|
||||
{
|
||||
long ms = BuildTimer.DurationMs(false, 1);
|
||||
if (ms <= 0) return "";
|
||||
string free = BuildTimer.FreeBuilders > 0 ? "" : " <color=#ff7a7a>все строители заняты</color>";
|
||||
return " • стройка " + GameData.FormatTime(ms / 1000.0) + free;
|
||||
}
|
||||
|
||||
void CloseChooser()
|
||||
{
|
||||
if (chooser != null) Destroy(chooser);
|
||||
chooser = null;
|
||||
}
|
||||
|
||||
static RewardItem[] ToRewards(ResourceCost[] cost)
|
||||
{
|
||||
if (cost == null) return new RewardItem[0];
|
||||
var r = new RewardItem[cost.Length];
|
||||
for (int i = 0; i < cost.Length; i++) r[i] = new RewardItem(cost[i].type, Mathf.CeilToInt(cost[i].amount));
|
||||
return r;
|
||||
}
|
||||
|
||||
// Цена по-русски, красным -- чего не хватает
|
||||
static string CostText(BuildingData d)
|
||||
{
|
||||
if (d.cost == null || d.cost.Length == 0) return "Бесплатно";
|
||||
var parts = new List<string>();
|
||||
foreach (var c in d.cost)
|
||||
{
|
||||
bool ok = ResourceManager.Instance != null && ResourceManager.Instance.HasEnough(c.type, c.amount);
|
||||
parts.Add("<color=" + (ok ? "#9be59b" : "#ff7a7a") + ">" + GameData.Short(c.amount) + "</color> " + GameData.ResName(c.type));
|
||||
}
|
||||
return string.Join(", ", parts.ToArray());
|
||||
}
|
||||
|
||||
// ---------------- подсказка сверху и кнопка ----------------
|
||||
|
||||
GameObject CreateBanner()
|
||||
{
|
||||
// полоска сверху экрана (не модальная: остальной экран остаётся кликабельным)
|
||||
var bar = UIKit.Row(UIKit.Overlay, -1, 16, new Color(0.1f, 0.25f, 0.12f, 0.92f), 14);
|
||||
bar.name = "BuildModeBanner";
|
||||
bar.anchorMin = new Vector2(0.1f, 1); bar.anchorMax = new Vector2(0.9f, 1);
|
||||
bar.pivot = new Vector2(0.5f, 1);
|
||||
bar.sizeDelta = new Vector2(0, 110); bar.anchoredPosition = new Vector2(0, -150);
|
||||
var t = UIKit.Text(bar, "РЕЖИМ СТРОЙКИ: двигайте здание по сетке, красное -- занято", 26, Color.white, TextAlignmentOptions.Left);
|
||||
UIKit.Size(t, -1, -1, 1);
|
||||
UIKit.Button(bar, "Здания", UIKit.Theme.Green, OpenChooser, 180, 80, 28);
|
||||
UIKit.Button(bar, "Выйти", UIKit.Theme.Red, () => SetMode(false), 160, 80, 28);
|
||||
return bar.gameObject;
|
||||
}
|
||||
|
||||
void UpdateButtonLabel()
|
||||
{
|
||||
if (modeButton == null) return;
|
||||
var t = modeButton.GetComponentInChildren<TextMeshProUGUI>();
|
||||
if (t != null) t.text = IsActive ? "ГОТОВО" : "СТРОЙКА";
|
||||
if (ExternalMove != null) ExternalMove(building);
|
||||
else UIKit.Toast("Это здание перенести нельзя");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
// ТЕРЕМ БОГАТЫРЯ -- дом героя в городе.
|
||||
// - Пока Терем построен, у его ворот появляется герой и гуляет по свободным клеткам города (HeroWalker).
|
||||
// - Пока Терем построен, у его ворот появляется герой и гуляет по свободным клеткам города (City3D/City3DHero).
|
||||
// Тап по герою или по Терему -- окно героя (App/BuildingWindow): уровень, сила, бонус армии, навыки, улучшение.
|
||||
// - Механику героя не меняет: уровень, цена улучшения и бонусы те же, что в панели "Герой" (GameProgress).
|
||||
// Нужен ли Терем для улучшения героя, даёт ли уровни и сколько стоит -- решает Дима (сейчас ТЕСТ).
|
||||
@@ -24,16 +24,9 @@ public class HeroCastle : MonoBehaviour
|
||||
All.Remove(this);
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
// Герой-фигурка ходит по клеткам 2D-города (BuildGrid). В 3D-поселении сетки нет -- Терем работает без прогулки
|
||||
if (Main == this && BuildGrid.Instance != null) HeroWalker.Spawn(this);
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
All.Remove(this);
|
||||
HeroWalker.OnCastleRemoved(this);
|
||||
}
|
||||
|
||||
Vector3 downPos;
|
||||
|
||||
@@ -1,65 +1,8 @@
|
||||
using UnityEngine;
|
||||
|
||||
// Добавляет «Терем богатыря» в список стройки САМ при запуске сцены (как Казармы и Госпиталь).
|
||||
// Срабатывает до восстановления зданий из сохранения (SettlementRestoringEvent), поэтому построенный
|
||||
// Терем корректно восстанавливается из save.json. Цена -- ТЕСТ (согласовать с Димой).
|
||||
// «Терем богатыря»: имя и цена (ТЕСТ, согласовать с Димой). 2D-шаблон удалён 06.11 вместе с 2D-городом;
|
||||
// 3D-здание -- City3D/City3DGameplay, герой у Терема -- City3D/City3DHero
|
||||
public static class HeroCastleBootstrap
|
||||
{
|
||||
public const string CastleName = "Терем богатыря";
|
||||
public const int CostWood = 400; // ТЕСТ
|
||||
public const int CostStone = 300; // ТЕСТ
|
||||
static GameObject runtimeTemplate;
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
|
||||
static void Init()
|
||||
{
|
||||
Ensure();
|
||||
UnityEngine.SceneManagement.SceneManager.sceneLoaded += (s, m) => Ensure();
|
||||
}
|
||||
|
||||
public static void Ensure()
|
||||
{
|
||||
var bm = BuildManager.Instance != null ? BuildManager.Instance : Object.FindAnyObjectByType<BuildManager>();
|
||||
if (bm == null || bm.allBuildings == null) return;
|
||||
|
||||
BuildingData template = null;
|
||||
foreach (var b in bm.allBuildings)
|
||||
{
|
||||
if (b == null) continue;
|
||||
if (b.buildingName == CastleName) return; // уже есть
|
||||
if (template == null && b.prefab != null) template = b;
|
||||
}
|
||||
if (template == null) { Debug.LogWarning("[ТЕРЕМ] Нет ни одного здания-шаблона в BuildManager"); return; }
|
||||
|
||||
// Префаб-шаблон в памяти: копия обычного здания без сбора ресурсов, с компонентом HeroCastle
|
||||
if (runtimeTemplate == null)
|
||||
{
|
||||
runtimeTemplate = Object.Instantiate(template.prefab);
|
||||
runtimeTemplate.name = "HeroCastle";
|
||||
runtimeTemplate.SetActive(false);
|
||||
Object.DontDestroyOnLoad(runtimeTemplate);
|
||||
foreach (var c in runtimeTemplate.GetComponents<ResourceCollector>()) Object.DestroyImmediate(c);
|
||||
foreach (var c in runtimeTemplate.GetComponents<ResourceProducer>()) Object.DestroyImmediate(c);
|
||||
foreach (var c in runtimeTemplate.GetComponents<BuildingUI>()) Object.DestroyImmediate(c);
|
||||
for (int i = runtimeTemplate.transform.childCount - 1; i >= 0; i--)
|
||||
Object.DestroyImmediate(runtimeTemplate.transform.GetChild(i).gameObject); // полоска запаса ресурса
|
||||
var sr = runtimeTemplate.GetComponent<SpriteRenderer>();
|
||||
if (sr != null) sr.color = new Color(1f, 0.85f, 0.35f); // пока нет арта -- отличаем цветом (золотой)
|
||||
runtimeTemplate.AddComponent<HeroCastle>();
|
||||
}
|
||||
|
||||
var data = ScriptableObject.CreateInstance<BuildingData>();
|
||||
data.name = "Data_HeroCastle_Runtime";
|
||||
data.buildingName = CastleName;
|
||||
data.icon = template.icon;
|
||||
data.prefab = runtimeTemplate;
|
||||
data.requiredTownHallLevel = 1; // ТЕСТ
|
||||
data.cost = new[]
|
||||
{
|
||||
new ResourceCost { type = ResourceType.Wood, amount = CostWood },
|
||||
new ResourceCost { type = ResourceType.Stone, amount = CostStone },
|
||||
};
|
||||
bm.allBuildings.Add(data);
|
||||
Debug.Log("[ТЕРЕМ] Добавлен в список стройки");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,203 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
// ГЕРОЙ В ГОРОДЕ -- живёт у Терема богатыря и гуляет по свободным клеткам рядом с ним.
|
||||
// - Пока без арта: фигурка из простых форм (тело, голова, щит) цвета героя. Арт подставим в BuildFigure.
|
||||
// - Идёт к случайной свободной клетке в радиусе WalkRadius от Терема, стоит 1-3 с, идёт дальше.
|
||||
// - Тап по герою -- он отвечает фразой и открывается окно героя.
|
||||
// - В режиме стройки герой прячется, чтобы не мешать ставить здания.
|
||||
// Это только оживление города: на экономику, бой и сохранение не влияет.
|
||||
public class HeroWalker : MonoBehaviour
|
||||
{
|
||||
public static HeroWalker Instance { get; private set; }
|
||||
|
||||
const float Speed = 1.3f; // клеток в секунду
|
||||
const int WalkRadius = 6; // насколько далеко уходит от Терема
|
||||
const int SortingOrder = 40; // поверх зданий
|
||||
|
||||
static readonly string[] Phrases =
|
||||
{
|
||||
"Город под защитой!",
|
||||
"Веди, воевода, — не подведу.",
|
||||
"Силушка богатырская при мне.",
|
||||
"Дозором обхожу владения.",
|
||||
"Есть ли где ворог? Только скажи.",
|
||||
};
|
||||
|
||||
HeroCastle castle;
|
||||
Vector3 target;
|
||||
float waitLeft;
|
||||
Transform figure;
|
||||
Vector3 downPos;
|
||||
BoxCollider2D tapArea;
|
||||
|
||||
public static void Spawn(HeroCastle home)
|
||||
{
|
||||
if (Instance != null) { Instance.castle = home; return; }
|
||||
var go = new GameObject("Hero");
|
||||
var w = go.AddComponent<HeroWalker>();
|
||||
w.castle = home;
|
||||
w.BuildFigure();
|
||||
go.transform.position = w.Gate();
|
||||
w.target = go.transform.position;
|
||||
w.waitLeft = 1f;
|
||||
Instance = w;
|
||||
}
|
||||
|
||||
public static void OnCastleRemoved(HeroCastle removed)
|
||||
{
|
||||
if (Instance == null || Instance.castle != removed) return;
|
||||
var next = HeroCastle.Main;
|
||||
if (next != null) Instance.castle = next;
|
||||
else Destroy(Instance.gameObject);
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
if (Instance == this) Instance = null;
|
||||
}
|
||||
|
||||
// ---------------- Внешний вид (заглушка) ----------------
|
||||
|
||||
void BuildFigure()
|
||||
{
|
||||
figure = new GameObject("Figure").transform;
|
||||
figure.SetParent(transform, false);
|
||||
Part("Body", Square(), new Color(0.55f, 0.4f, 0.2f), new Vector2(0f, 0.28f), new Vector2(0.38f, 0.48f), 0);
|
||||
Part("Head", Circle(), new Color(1f, 0.85f, 0.7f), new Vector2(0f, 0.66f), new Vector2(0.3f, 0.3f), 1);
|
||||
Part("Helmet", Circle(), new Color(0.75f, 0.75f, 0.8f), new Vector2(0f, 0.76f), new Vector2(0.32f, 0.16f), 2);
|
||||
Part("Shield", Circle(), new Color(0.8f, 0.15f, 0.15f), new Vector2(0.2f, 0.28f), new Vector2(0.22f, 0.3f), 3);
|
||||
Part("Shadow", Circle(), new Color(0f, 0f, 0f, 0.3f), new Vector2(0f, 0.02f), new Vector2(0.45f, 0.14f), -1);
|
||||
|
||||
// Коллайдер для тапа -- чуть больше фигурки, ближе к камере, чем здания
|
||||
tapArea = gameObject.AddComponent<BoxCollider2D>();
|
||||
tapArea.size = new Vector2(0.7f, 1f);
|
||||
tapArea.offset = new Vector2(0f, 0.45f);
|
||||
var p = transform.position; p.z = -0.5f; transform.position = p;
|
||||
}
|
||||
|
||||
SpriteRenderer Part(string name, Sprite sprite, Color color, Vector2 pos, Vector2 size, int order)
|
||||
{
|
||||
var t = new GameObject(name).transform;
|
||||
t.SetParent(figure, false);
|
||||
t.localPosition = pos;
|
||||
t.localScale = new Vector3(size.x, size.y, 1f);
|
||||
var sr = t.gameObject.AddComponent<SpriteRenderer>();
|
||||
sr.sprite = sprite;
|
||||
sr.color = color;
|
||||
sr.sortingOrder = SortingOrder + order;
|
||||
return sr;
|
||||
}
|
||||
|
||||
static Sprite square, circle;
|
||||
|
||||
static Sprite Square()
|
||||
{
|
||||
if (square != null) return square;
|
||||
var tex = new Texture2D(4, 4, TextureFormat.RGBA32, false);
|
||||
var px = new Color32[16];
|
||||
for (int i = 0; i < px.Length; i++) px[i] = new Color32(255, 255, 255, 255);
|
||||
tex.SetPixels32(px); tex.Apply();
|
||||
square = Sprite.Create(tex, new Rect(0, 0, 4, 4), new Vector2(0.5f, 0.5f), 4);
|
||||
return square;
|
||||
}
|
||||
|
||||
static Sprite Circle()
|
||||
{
|
||||
if (circle != null) return circle;
|
||||
const int n = 64;
|
||||
var tex = new Texture2D(n, n, TextureFormat.RGBA32, false);
|
||||
var px = new Color32[n * n];
|
||||
float r = n * 0.5f;
|
||||
for (int y = 0; y < n; y++)
|
||||
for (int x = 0; x < n; x++)
|
||||
{
|
||||
float d = Mathf.Sqrt((x + 0.5f - r) * (x + 0.5f - r) + (y + 0.5f - r) * (y + 0.5f - r));
|
||||
byte a = (byte)(Mathf.Clamp01(r - d) * 255);
|
||||
px[y * n + x] = new Color32(255, 255, 255, a);
|
||||
}
|
||||
tex.SetPixels32(px); tex.Apply();
|
||||
circle = Sprite.Create(tex, new Rect(0, 0, n, n), new Vector2(0.5f, 0.5f), n);
|
||||
return circle;
|
||||
}
|
||||
|
||||
// ---------------- Прогулка ----------------
|
||||
|
||||
Vector3 Gate()
|
||||
{
|
||||
var c = castle != null ? castle.transform.position : Vector3.zero;
|
||||
var grid = BuildGrid.Instance;
|
||||
if (grid != null && grid.FindFreeNear(c, Vector2Int.one, out Vector2Int cell))
|
||||
{
|
||||
Vector2 p = grid.RectCenter(cell, Vector2Int.one);
|
||||
return new Vector3(p.x, p.y - 0.4f, -0.5f);
|
||||
}
|
||||
return new Vector3(c.x, c.y - 1f, -0.5f);
|
||||
}
|
||||
|
||||
Vector3 PickTarget()
|
||||
{
|
||||
var grid = BuildGrid.Instance;
|
||||
if (grid == null || castle == null) return transform.position;
|
||||
grid.Refresh();
|
||||
Vector2Int home = grid.WorldToCell(castle.transform.position);
|
||||
for (int attempt = 0; attempt < 20; attempt++)
|
||||
{
|
||||
int x = home.x + Random.Range(-WalkRadius, WalkRadius + 1);
|
||||
int y = home.y + Random.Range(-WalkRadius, WalkRadius + 1);
|
||||
if (grid.IsBusy(x, y)) continue;
|
||||
Vector2 p = grid.RectCenter(new Vector2Int(x, y), Vector2Int.one);
|
||||
return new Vector3(p.x, p.y - 0.4f, -0.5f);
|
||||
}
|
||||
return Gate();
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
bool building = BuildModeController.Instance != null && BuildModeController.Instance.IsActive;
|
||||
if (figure.gameObject.activeSelf == building)
|
||||
{
|
||||
figure.gameObject.SetActive(!building);
|
||||
if (tapArea != null) tapArea.enabled = !building;
|
||||
}
|
||||
if (building) return;
|
||||
|
||||
if (waitLeft > 0f) { waitLeft -= Time.deltaTime; return; }
|
||||
|
||||
Vector3 pos = transform.position;
|
||||
Vector3 delta = target - pos;
|
||||
delta.z = 0f;
|
||||
if (delta.magnitude < 0.05f)
|
||||
{
|
||||
target = PickTarget();
|
||||
waitLeft = Random.Range(1f, 3f);
|
||||
return;
|
||||
}
|
||||
Vector3 step = delta.normalized * Speed * Time.deltaTime;
|
||||
if (step.magnitude > delta.magnitude) step = delta;
|
||||
transform.position = pos + step;
|
||||
if (Mathf.Abs(delta.x) > 0.01f)
|
||||
{
|
||||
var s = figure.localScale;
|
||||
s.x = delta.x < 0 ? -1f : 1f; // смотрит туда, куда идёт
|
||||
figure.localScale = s;
|
||||
}
|
||||
// лёгкое покачивание при ходьбе
|
||||
figure.localPosition = new Vector3(0f, Mathf.Abs(Mathf.Sin(Time.time * 10f)) * 0.05f, 0f);
|
||||
}
|
||||
|
||||
// ---------------- Тап ----------------
|
||||
|
||||
void OnMouseDown()
|
||||
{
|
||||
downPos = Input.mousePosition;
|
||||
}
|
||||
|
||||
void OnMouseUpAsButton()
|
||||
{
|
||||
if (UIBlocker.IsPointerOverUI()) return;
|
||||
if ((Input.mousePosition - downPos).magnitude > 25f) return;
|
||||
UIKit.Toast("Богатырь: " + Phrases[Random.Range(0, Phrases.Length)]);
|
||||
waitLeft = 2f; // остановился поговорить
|
||||
if (castle != null) BuildingWindow.Open(castle.gameObject);
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: caa21d91fd476684ba0fd70c830fe04f
|
||||
@@ -1,65 +1,6 @@
|
||||
using UnityEngine;
|
||||
|
||||
// Добавляет «Госпиталь» в список стройки САМ при запуске сцены (как Казармы -- BarracksBootstrap).
|
||||
// Срабатывает до восстановления зданий из сохранения (SettlementRestoringEvent), поэтому построенный
|
||||
// госпиталь и его уровень корректно восстанавливаются из save.json.
|
||||
// Имя здания «Госпиталь». 2D-шаблон удалён 06.11 вместе с 2D-городом; 3D-здание -- City3D/City3DGameplay,
|
||||
// цена и уровень Ратуши -- HospitalConfig
|
||||
public static class HospitalBootstrap
|
||||
{
|
||||
public const string HospitalName = "Госпиталь";
|
||||
static GameObject runtimeTemplate;
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
|
||||
static void Init()
|
||||
{
|
||||
Ensure();
|
||||
// при каждом новом входе в город (например, возврат с карты мира) -- снова добавить в новый BuildManager
|
||||
UnityEngine.SceneManagement.SceneManager.sceneLoaded += (s, m) => Ensure();
|
||||
}
|
||||
|
||||
public static void Ensure()
|
||||
{
|
||||
var bm = BuildManager.Instance != null ? BuildManager.Instance : Object.FindAnyObjectByType<BuildManager>();
|
||||
if (bm == null || bm.allBuildings == null) return;
|
||||
|
||||
BuildingData template = null;
|
||||
foreach (var b in bm.allBuildings)
|
||||
{
|
||||
if (b == null) continue;
|
||||
if (b.buildingName == HospitalName) return; // уже есть
|
||||
if (template == null && b.prefab != null) template = b;
|
||||
}
|
||||
if (template == null) { Debug.LogWarning("[ГОСПИТАЛЬ] Нет ни одного здания-шаблона в BuildManager"); return; }
|
||||
|
||||
// Префаб-шаблон в памяти: копия обычного здания без сбора ресурсов, с компонентом Hospital
|
||||
if (runtimeTemplate == null)
|
||||
{
|
||||
runtimeTemplate = Object.Instantiate(template.prefab);
|
||||
runtimeTemplate.name = "Hospital";
|
||||
runtimeTemplate.SetActive(false);
|
||||
Object.DontDestroyOnLoad(runtimeTemplate);
|
||||
foreach (var c in runtimeTemplate.GetComponents<ResourceCollector>()) Object.DestroyImmediate(c);
|
||||
foreach (var c in runtimeTemplate.GetComponents<ResourceProducer>()) Object.DestroyImmediate(c);
|
||||
foreach (var c in runtimeTemplate.GetComponents<BuildingUI>()) Object.DestroyImmediate(c);
|
||||
for (int i = runtimeTemplate.transform.childCount - 1; i >= 0; i--)
|
||||
Object.DestroyImmediate(runtimeTemplate.transform.GetChild(i).gameObject); // полоска запаса ресурса
|
||||
var sr = runtimeTemplate.GetComponent<SpriteRenderer>();
|
||||
if (sr != null) sr.color = new Color(0.85f, 0.95f, 1f); // пока нет арта -- отличаем цветом (светло-голубой)
|
||||
runtimeTemplate.AddComponent<Hospital>();
|
||||
}
|
||||
|
||||
var config = HospitalConfig.Load();
|
||||
var data = ScriptableObject.CreateInstance<BuildingData>();
|
||||
data.name = "Data_Hospital_Runtime";
|
||||
data.buildingName = HospitalName;
|
||||
data.icon = template.icon;
|
||||
data.prefab = runtimeTemplate;
|
||||
data.requiredTownHallLevel = Mathf.Max(1, config.requiredTownHallLevel);
|
||||
data.cost = new[]
|
||||
{
|
||||
new ResourceCost { type = ResourceType.Wood, amount = config.buildWood },
|
||||
new ResourceCost { type = ResourceType.Stone, amount = config.buildStone },
|
||||
};
|
||||
bm.allBuildings.Add(data);
|
||||
Debug.Log("[ГОСПИТАЛЬ] Добавлен в список стройки");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,6 +154,35 @@ public sealed class ArmyService : IArmy, ISaveParticipant
|
||||
|
||||
public int AvailableForMarch => SoldiersAtHome - GarrisonTotal;
|
||||
|
||||
// Свободные воины по типам: в городе минус гарнизон
|
||||
public int[] AvailableUnits
|
||||
{
|
||||
get
|
||||
{
|
||||
var free = new int[Types];
|
||||
for (int i = 0; i < Types; i++) free[i] = Math.Max(0, troops[i] - garrison[i]);
|
||||
return free;
|
||||
}
|
||||
}
|
||||
|
||||
// Поход точного состава (тайная группа, Разведка М3): всё или ничего
|
||||
public bool TakeUnitsForMarch(int marchId, int[] units)
|
||||
{
|
||||
if (units == null || units.Length != Types || marches.Exists(m => m.marchId == marchId) || marches.Count >= MarchSlots) return false;
|
||||
int total = 0;
|
||||
var free = AvailableUnits;
|
||||
for (int i = 0; i < Types; i++)
|
||||
{
|
||||
if (units[i] < 0 || units[i] > free[i]) return false;
|
||||
total += units[i];
|
||||
}
|
||||
if (total <= 0) return false;
|
||||
for (int i = 0; i < Types; i++) troops[i] -= units[i];
|
||||
marches.Add(new MarchUnits { marchId = marchId, units = (int[])units.Clone() });
|
||||
Changed();
|
||||
return true;
|
||||
}
|
||||
|
||||
// Гарнизон набирается по составу армии в городе: 30 пехоты и 10 лучников, гарнизон 8 -> 6 пехоты и 2 лучника
|
||||
public int SetGarrison(int count)
|
||||
{
|
||||
|
||||
@@ -158,6 +158,10 @@ public interface IArmy
|
||||
// Забрать свободных воинов в поход (запоминает состав похода).
|
||||
// false -- ничего не взято: не хватает воинов, нет свободного слота или поход с таким номером уже есть.
|
||||
bool TakeForMarch(int marchId, int count);
|
||||
// Свободные воины по типам (в городе минус гарнизон) и поход точного состава -- тайная группа (Разведка М3):
|
||||
// только пехота и лучники. false -- столько таких воинов нет или слоты заняты
|
||||
int[] AvailableUnits { get; }
|
||||
bool TakeUnitsForMarch(int marchId, int[] units);
|
||||
// Вернуть выживших из похода по тем же типам войск.
|
||||
// Зачисляет только по известному походу и только один раз; false -- такого похода нет, никто не добавлен.
|
||||
bool ReturnFromMarch(int marchId, int survivors);
|
||||
@@ -255,6 +259,29 @@ public interface IWorldMap
|
||||
void GetArmies(long timeMs, List<ArmyOnMap> result);
|
||||
// Цель разведки: замок, поселение, лагерь (Разведка М2). false -- такой цели нет или её нельзя разведать
|
||||
bool TryGetReconTarget(string targetId, out ReconTarget target);
|
||||
// Разведка М3: охраняемые области (чужие поселения, башни, замок Круга) и где армия в момент t
|
||||
void GetGuardedZones(List<GuardedZone> result);
|
||||
bool TryGetArmyPosition(string armyId, long timeMs, out int x, out int y);
|
||||
}
|
||||
|
||||
// Охраняемая область (Разведка М3, ТЗ разведки, раздел 8): тайный отряд в ней проверяется на обнаружение.
|
||||
// Радиус и шанс по виду области -- правила Разведки
|
||||
public enum GuardedZoneKind { Settlement, Tower, CircleCastle }
|
||||
|
||||
public struct GuardedZone
|
||||
{
|
||||
public string Id;
|
||||
public int X, Y; // милли-единицы карты
|
||||
public GuardedZoneKind Kind;
|
||||
}
|
||||
|
||||
// Тайный отряд обнаружен (Разведка М3): миссия прервана, Мир разворачивает отряд домой с этого момента
|
||||
public struct CovertDetection
|
||||
{
|
||||
public string OpId; // "covert_<номер похода>"
|
||||
public string ArmyId; // "march_<номер похода>"
|
||||
public long TimeMs;
|
||||
public int Check; // номер проверки, на которой заметили
|
||||
}
|
||||
|
||||
// ---------------- Разведка (Bogatyri.Intelligence): туман войны, наблюдение ----------------
|
||||
@@ -301,6 +328,18 @@ public interface IIntelligence
|
||||
IReadOnlyList<KnownContact> Contacts { get; }
|
||||
void ObserveUntil(long nowMs); // досчитать наблюдение до момента (в том числе офлайн)
|
||||
|
||||
// ---- М3, тайные операции (ТЗ разведки, разделы 7-8) ----
|
||||
bool CovertEnabled { get; } // технология «Шпион» (пока -- переключатель IntelligenceConfig)
|
||||
int CovertMaxSoldiers { get; } // 10 пехотинцев / лучников (с героем-шпионом 20 -- позже)
|
||||
int ActiveCovertOps { get; } // идут сейчас (не больше CovertMaxOps)
|
||||
// Можно ли отправить тайно такой состав (по типам войск); null -- можно, иначе причина для игрока
|
||||
string CheckCovertGroup(int[] units, int activeCovertOps);
|
||||
void StartCovert(string opId, string armyId, long startMs);
|
||||
// Проверки обнаружения до момента: при входе в охраняемую область и каждые 5 реальных минут в ней.
|
||||
// Каждая проверка -- один раз (детерминированно по id операции и номеру проверки). Возвращает новые обнаружения
|
||||
List<CovertDetection> CheckCovertUntil(long nowMs);
|
||||
void EndCovert(string opId); // отряд вернулся домой
|
||||
|
||||
// ---- М2: целенаправленная разведка ----
|
||||
// Сколько разведчики наблюдают цель (мс часов игры): поселение 2 / 4, замок 3 / 6 игровых часов (уровень II / III).
|
||||
// 0 -- цель нельзя разведать с отчётом
|
||||
|
||||
@@ -224,6 +224,21 @@ public struct ReconCompletedEvent
|
||||
public long TimeMs;
|
||||
}
|
||||
|
||||
// Разведка М3: тайный отряд заметили (SpyDetected) и его миссия прервана -- отряд идёт домой (MissionAborted)
|
||||
public struct SpyDetectedEvent
|
||||
{
|
||||
public string EventId; // "covert_<номер похода>#<номер проверки>"
|
||||
public string ArmyId;
|
||||
public long TimeMs;
|
||||
}
|
||||
|
||||
public struct MissionAbortedEvent
|
||||
{
|
||||
public string EventId; // "covert_<номер похода>"
|
||||
public string ArmyId;
|
||||
public long TimeMs;
|
||||
}
|
||||
|
||||
public struct ArmyIdentifiedEvent // владелец чужой армии опознан
|
||||
{
|
||||
public string EventId;
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
// УСТАРЕЛО (этап 3). Раньше здание само добывало ресурс по таймеру (5 единиц раз в 3 секунды ~ 6000 в час).
|
||||
// Теперь добычу дают только рабочие (ProductionService), этот компонент ничего не делает.
|
||||
// Класс оставлен, чтобы на старых префабах не появилось "Missing Script". Новым зданиям не вешать.
|
||||
public class ResourceProducer : MonoBehaviour
|
||||
{
|
||||
public ResourceType resourceType;
|
||||
public float amountPerTick = 1f;
|
||||
public float tickInterval = 3f;
|
||||
public int level = 1;
|
||||
public float perLevelMultiplier = 1.2f;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
enabled = false;
|
||||
}
|
||||
|
||||
public void Upgrade()
|
||||
{
|
||||
level++;
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eb8009d4824ec6f4392a50d60eead242
|
||||
@@ -0,0 +1,157 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
// РАЗВЕДКА М3: ТАЙНЫЕ ОПЕРАЦИИ (ТЗ разведки, разделы 7-8). Документ: Docs/Modules/Intelligence.md, раздел «М3».
|
||||
//
|
||||
// - Тайный режим -- только с технологией «Шпион» (пока переключатель IntelligenceConfig).
|
||||
// - Группа: до CovertMaxSoldiers (10) пехотинцев и лучников, кавалерия и осадные -- нельзя. Герой-шпион (до 20) -- позже.
|
||||
// - Не больше CovertMaxOps (2) тайных операций одновременно; они занимают обычные слоты похода.
|
||||
// - Проверка обнаружения: при входе в охраняемую область и дальше каждые DetectIntervalMs (5 реальных минут), пока
|
||||
// отряд в ней. Шанс -- по самой опасной области под отрядом (пересечение -- максимум, не сумма), в пределах 5-75%.
|
||||
// - Бросок -- по id операции и номеру проверки: одна проверка -- один результат, загрузка его не меняет.
|
||||
// - Обнаружили -- миссия прервана (без отчёта), отряд физически идёт домой (это делает Мир). Казни, плена и
|
||||
// бесплатного боя нет.
|
||||
// Позиции отряда и охраняемые области -- от Мира (IWorldMap), сам модуль карты и маршей не хранит.
|
||||
public sealed partial class IntelligenceService
|
||||
{
|
||||
class CovertOp
|
||||
{
|
||||
public string opId, armyId;
|
||||
public long lastMs; // до какого момента посчитано
|
||||
public long nextCheckMs; // следующая проверка, пока отряд в области
|
||||
public bool inside; // отряд в охраняемой области (вход -- сразу проверка)
|
||||
public int checks; // сколько проверок было
|
||||
public bool detected;
|
||||
public long detectedMs;
|
||||
}
|
||||
|
||||
private readonly List<CovertOp> covert = new List<CovertOp>();
|
||||
private readonly List<GuardedZone> zones = new List<GuardedZone>();
|
||||
|
||||
public bool CovertEnabled => rules.CovertEnabled;
|
||||
public int CovertMaxSoldiers => rules.CovertMaxSoldiers;
|
||||
public int ActiveCovertOps => covert.FindAll(c => !c.detected).Count;
|
||||
|
||||
public string CheckCovertGroup(int[] units, int activeCovertOps)
|
||||
{
|
||||
if (!rules.CovertEnabled) return "Тайная разведка -- после изучения технологии «Шпион»";
|
||||
if (activeCovertOps >= rules.CovertMaxOps) return $"Тайных операций уже {activeCovertOps} из {rules.CovertMaxOps}";
|
||||
if (units == null || units.Length < TroopType.Count) return "Нет воинов для тайной группы";
|
||||
int total = 0;
|
||||
for (int i = 0; i < units.Length; i++)
|
||||
{
|
||||
if (units[i] <= 0) continue;
|
||||
if (i != TroopType.Infantry && i != TroopType.Archers) return "Тайно -- только пехота и лучники (без кавалерии и осадных)";
|
||||
total += units[i];
|
||||
}
|
||||
if (total <= 0) return "Нет свободных пехотинцев и лучников";
|
||||
if (total > rules.CovertMaxSoldiers) return $"Тайно -- не больше {rules.CovertMaxSoldiers} пехотинцев и лучников";
|
||||
return null;
|
||||
}
|
||||
|
||||
public void StartCovert(string opId, string armyId, long startMs)
|
||||
{
|
||||
if (string.IsNullOrEmpty(opId) || covert.Exists(c => c.opId == opId)) return;
|
||||
covert.Add(new CovertOp { opId = opId, armyId = armyId, lastMs = startMs });
|
||||
}
|
||||
|
||||
public void EndCovert(string opId) => covert.RemoveAll(c => c.opId == opId);
|
||||
|
||||
// Шанс за проверку по видам областей под отрядом: максимум (не сумма), герой-шпион -10, в пределах 5-75%. Нет областей -- 0
|
||||
public static int DetectChance(IntelligenceRules r, IEnumerable<GuardedZoneKind> kinds, bool heroSpy = false)
|
||||
{
|
||||
int best = -1;
|
||||
foreach (var k in kinds)
|
||||
{
|
||||
int c = k == GuardedZoneKind.CircleCastle ? r.DetectCircleCastlePercent : k == GuardedZoneKind.Tower ? r.DetectTowerPercent : r.DetectSettlementPercent;
|
||||
if (c > best) best = c;
|
||||
}
|
||||
if (best < 0) return 0;
|
||||
if (heroSpy) best -= r.DetectHeroSpyMinus;
|
||||
return Math.Max(r.DetectMinPercent, Math.Min(r.DetectMaxPercent, best));
|
||||
}
|
||||
|
||||
readonly List<GuardedZoneKind> kindsHere = new List<GuardedZoneKind>();
|
||||
|
||||
int ChanceAt(int x, int y)
|
||||
{
|
||||
kindsHere.Clear();
|
||||
foreach (var z in zones)
|
||||
{
|
||||
long r = z.Kind == GuardedZoneKind.Tower ? rules.TowerRadius : rules.SettlementRadius;
|
||||
long dx = x - z.X, dy = y - z.Y;
|
||||
if (dx * dx + dy * dy <= r * r) kindsHere.Add(z.Kind);
|
||||
}
|
||||
return kindsHere.Count == 0 ? 0 : DetectChance(rules, kindsHere);
|
||||
}
|
||||
|
||||
public List<CovertDetection> CheckCovertUntil(long nowMs)
|
||||
{
|
||||
var found = new List<CovertDetection>();
|
||||
IWorldMap map = worldMap();
|
||||
if (map == null || covert.Count == 0) return found;
|
||||
zones.Clear();
|
||||
map.GetGuardedZones(zones);
|
||||
long step = Math.Max(1000, rules.SampleStepMs);
|
||||
foreach (var op in covert)
|
||||
{
|
||||
if (op.detected || nowMs <= op.lastMs) continue;
|
||||
// Шаги -- по одной сетке от начала операции (lastMs всегда на ней): досчитали до середины шага, загрузили --
|
||||
// следующие проверки в те же моменты. Долгий офлайн -- не больше MaxCatchUpMs (по той же сетке)
|
||||
if (nowMs - op.lastMs > rules.MaxCatchUpMs) op.lastMs += (nowMs - op.lastMs - rules.MaxCatchUpMs) / step * step;
|
||||
for (long t = op.lastMs + step; t <= nowMs; t += step)
|
||||
{
|
||||
op.lastMs = t;
|
||||
if (map.TryGetArmyPosition(op.armyId, t, out int x, out int y))
|
||||
{
|
||||
int chance = ChanceAt(x, y);
|
||||
if (chance <= 0) op.inside = false;
|
||||
else
|
||||
{
|
||||
bool check = !op.inside || t >= op.nextCheckMs; // вход в область -- сразу, дальше по интервалу
|
||||
op.inside = true;
|
||||
if (check)
|
||||
{
|
||||
op.checks++;
|
||||
op.nextCheckMs = t + rules.DetectIntervalMs;
|
||||
if ((int)(Roll(op.opId, op.checks, 11) % 100) < chance)
|
||||
{
|
||||
op.detected = true;
|
||||
op.detectedMs = t;
|
||||
found.Add(new CovertDetection { OpId = op.opId, ArmyId = op.armyId, TimeMs = t, Check = op.checks });
|
||||
EventBus.Publish(new SpyDetectedEvent { EventId = op.opId + "#" + op.checks, ArmyId = op.armyId, TimeMs = t });
|
||||
EventBus.Publish(new MissionAbortedEvent { EventId = op.opId, ArmyId = op.armyId, TimeMs = t });
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return found;
|
||||
}
|
||||
|
||||
// ---------------- Сохранение: covert=<операция>|<армия>|<посчитано>|<след. проверка>|<в области>|<проверок>|<замечен>|<когда> ----------------
|
||||
|
||||
void CaptureCovert(StringBuilder sb)
|
||||
{
|
||||
foreach (var c in covert)
|
||||
sb.Append("covert=").Append(string.Join("|", new[]
|
||||
{
|
||||
Clean(c.opId), Clean(c.armyId), c.lastMs.ToString(CultureInfo.InvariantCulture), c.nextCheckMs.ToString(CultureInfo.InvariantCulture),
|
||||
c.inside ? "1" : "0", c.checks.ToString(CultureInfo.InvariantCulture), c.detected ? "1" : "0", c.detectedMs.ToString(CultureInfo.InvariantCulture)
|
||||
})).Append('\n');
|
||||
}
|
||||
|
||||
void RestoreCovert(string[] p)
|
||||
{
|
||||
if (p.Length < 8 || string.IsNullOrEmpty(p[0]) || covert.Exists(c => c.opId == p[0])) return;
|
||||
long.TryParse(p[2], NumberStyles.Integer, CultureInfo.InvariantCulture, out long last);
|
||||
long.TryParse(p[3], NumberStyles.Integer, CultureInfo.InvariantCulture, out long next);
|
||||
int.TryParse(p[5], NumberStyles.Integer, CultureInfo.InvariantCulture, out int checks);
|
||||
long.TryParse(p[7], NumberStyles.Integer, CultureInfo.InvariantCulture, out long when);
|
||||
covert.Add(new CovertOp { opId = p[0], armyId = p[1], lastMs = last, nextCheckMs = next, inside = p[4] == "1", checks = checks, detected = p[6] == "1", detectedMs = when });
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -1,11 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4342ee63e1ed441786fda6c36b2da960
|
||||
guid: 6b9e3d1f4a7c42e8b5d0f2a9c8e17d43
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -31,10 +31,22 @@ public sealed class IntelligenceRules
|
||||
public int ResourceEstimatePercent = 15; // уровень III: ресурсы -- оценочный диапазон ±15%
|
||||
public int MaxReports = 30; // храним последние отчёты
|
||||
|
||||
// М3, тайные операции (ТЗ разведки, разделы 7-8). Числа ТЕСТ
|
||||
public bool CovertEnabled = false; // технология «Шпион»: без неё тайного режима нет
|
||||
public int CovertMaxSoldiers = 10; // обычная группа: до 10 пехотинцев / лучников (с героем-шпионом 20 -- позже)
|
||||
public int CovertMaxOps = 2; // одновременно тайных операций на игрока
|
||||
public int DetectSettlementPercent = 15; // шанс за проверку: поселение
|
||||
public int DetectTowerPercent = 25; // зона сторожевой башни
|
||||
public int DetectCircleCastlePercent = 35; // замок Круга
|
||||
public int DetectHeroSpyMinus = 10; // герой со способностью «Шпион» (позже)
|
||||
public int DetectMinPercent = 5, DetectMaxPercent = 75; // итоговый шанс -- в этих пределах
|
||||
public long DetectIntervalMs = 5 * 60_000; // проверка при входе в зону и дальше каждые 5 РЕАЛЬНЫХ минут
|
||||
public int TowerRadius = 3000; // радиус охраны башни (поселение и замок -- SettlementRadius)
|
||||
|
||||
public static IntelligenceRules Default => new IntelligenceRules();
|
||||
}
|
||||
|
||||
public sealed class IntelligenceService : IIntelligence, ISaveParticipant
|
||||
public sealed partial class IntelligenceService : IIntelligence, ISaveParticipant
|
||||
{
|
||||
// Что игрок знает о чужой армии. Номер наблюдения -- для устойчивых событий и воспроизводимых бросков
|
||||
class Contact
|
||||
@@ -387,6 +399,7 @@ public sealed class IntelligenceService : IIntelligence, ISaveParticipant
|
||||
Csv(r.Units), r.Fortified ? "1" : "0", r.HasHero ? "1" : "0", Clean(r.Modifiers),
|
||||
string.Join(",", r.ResourceNames ?? Array.Empty<string>()), Csv(r.ResourceMin), Csv(r.ResourceMax)
|
||||
})).Append('\n');
|
||||
CaptureCovert(sb);
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
@@ -402,6 +415,7 @@ public sealed class IntelligenceService : IIntelligence, ISaveParticipant
|
||||
else if (line.StartsWith("grid=")) RestoreGrid(line.Substring(5));
|
||||
else if (line.StartsWith("contact=")) RestoreContact(line.Substring(8).Split('|'));
|
||||
else if (line.StartsWith("report=")) RestoreReport(line.Substring(7).Split('|'));
|
||||
else if (line.StartsWith("covert=")) RestoreCovert(line.Substring(7).Split('|'));
|
||||
}
|
||||
viewDirty = true;
|
||||
}
|
||||
@@ -410,6 +424,7 @@ public sealed class IntelligenceService : IIntelligence, ISaveParticipant
|
||||
{
|
||||
contacts.Clear();
|
||||
reports.Clear();
|
||||
covert.Clear();
|
||||
explored = Array.Empty<bool>();
|
||||
gridW = gridH = halfW = halfH = 0;
|
||||
lastTickMs = 0;
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
// МОДУЛЬ ПОСЕЛЕНИЯ. Документ: Docs/Modules/Settlement.md
|
||||
// Призрак здания в режиме стройки: полупрозрачная копия картинки здания и пятно его клеток под ней.
|
||||
// Пятно зелёное -- сюда можно ставить, красное -- клетки заняты или за границей.
|
||||
// Только картинка: скриптов и коллайдеров префаба у призрака нет, экономика его не видит.
|
||||
public class BuildGhost : MonoBehaviour
|
||||
{
|
||||
public BuildingData Data { get; private set; }
|
||||
public BuildFootprint Footprint { get; private set; }
|
||||
public Vector2Int Cell { get; private set; } // левая нижняя клетка на сетке
|
||||
public bool CellsFree { get; private set; }
|
||||
|
||||
public static readonly Color FreeColor = new Color(0.25f, 1f, 0.35f, 0.45f);
|
||||
public static readonly Color BlockedColor = new Color(1f, 0.2f, 0.2f, 0.5f);
|
||||
|
||||
SpriteRenderer pad;
|
||||
static Sprite white;
|
||||
|
||||
public static BuildGhost Create(BuildingData data)
|
||||
{
|
||||
var go = new GameObject("BuildGhost_" + data.buildingName);
|
||||
var g = go.AddComponent<BuildGhost>();
|
||||
g.Data = data;
|
||||
g.Footprint = BuildFootprint.Of(data);
|
||||
g.Build();
|
||||
return g;
|
||||
}
|
||||
|
||||
void Build()
|
||||
{
|
||||
// пятно клеток: белый квадрат 1×1, растянутый на размер здания
|
||||
var padGo = new GameObject("Cells");
|
||||
padGo.transform.SetParent(transform, false);
|
||||
pad = padGo.AddComponent<SpriteRenderer>();
|
||||
pad.sprite = WhiteSprite();
|
||||
pad.sortingOrder = 3;
|
||||
padGo.transform.localScale = new Vector3(Footprint.size.x, Footprint.size.y, 1f);
|
||||
|
||||
// копия картинки здания: позиция центра пятна = позиция префаба + anchorOffset
|
||||
var art = new GameObject("Art").transform;
|
||||
art.SetParent(transform, false);
|
||||
art.localPosition = -(Vector3)Footprint.anchorOffset;
|
||||
|
||||
var prefab = Data.prefab;
|
||||
if (prefab == null) return;
|
||||
Vector3 root = prefab.transform.position;
|
||||
int minOrder = int.MaxValue;
|
||||
var renderers = prefab.GetComponentsInChildren<SpriteRenderer>(true);
|
||||
foreach (var sr in renderers) if (sr.sprite != null) minOrder = Mathf.Min(minOrder, sr.sortingOrder);
|
||||
foreach (var sr in renderers)
|
||||
{
|
||||
if (sr.sprite == null) continue;
|
||||
var copy = new GameObject(sr.name).transform;
|
||||
copy.SetParent(art, false);
|
||||
copy.localPosition = sr.transform.position - root;
|
||||
copy.localRotation = sr.transform.rotation;
|
||||
copy.localScale = sr.transform.lossyScale;
|
||||
var r = copy.gameObject.AddComponent<SpriteRenderer>();
|
||||
r.sprite = sr.sprite;
|
||||
r.flipX = sr.flipX;
|
||||
r.flipY = sr.flipY;
|
||||
r.drawMode = sr.drawMode;
|
||||
if (sr.drawMode != SpriteDrawMode.Simple) r.size = sr.size;
|
||||
var c = sr.color; c.a *= 0.65f;
|
||||
r.color = c;
|
||||
r.sortingOrder = 4 + (sr.sortingOrder - minOrder);
|
||||
}
|
||||
}
|
||||
|
||||
static Sprite WhiteSprite()
|
||||
{
|
||||
if (white != null) return white;
|
||||
var tex = new Texture2D(4, 4, TextureFormat.RGBA32, false);
|
||||
var px = new Color32[16];
|
||||
for (int i = 0; i < px.Length; i++) px[i] = new Color32(255, 255, 255, 255);
|
||||
tex.SetPixels32(px);
|
||||
tex.Apply();
|
||||
white = Sprite.Create(tex, new Rect(0, 0, 4, 4), new Vector2(0.5f, 0.5f), 4);
|
||||
return white;
|
||||
}
|
||||
|
||||
// Поставить призрак на клетку (левая нижняя) и проверить, свободно ли
|
||||
public void MoveToCell(Vector2Int cell)
|
||||
{
|
||||
var grid = BuildGrid.Instance;
|
||||
Cell = cell;
|
||||
Vector2 center = grid.RectCenter(cell, Footprint.size);
|
||||
transform.position = new Vector3(center.x, center.y, 0f);
|
||||
Recheck();
|
||||
}
|
||||
|
||||
// Подвинуть так, чтобы центр пятна был ближе всего к точке мира
|
||||
public void MoveNear(Vector2 worldCenter)
|
||||
{
|
||||
MoveToCell(BuildGrid.Instance.SnapCell(worldCenter, Footprint.size));
|
||||
}
|
||||
|
||||
public void Recheck()
|
||||
{
|
||||
CellsFree = BuildGrid.Instance.CanPlace(Cell, Footprint.size);
|
||||
if (pad != null) pad.color = CellsFree ? FreeColor : BlockedColor;
|
||||
}
|
||||
|
||||
// Точка мира попадает в пятно призрака (с запасом под палец)
|
||||
public bool Contains(Vector2 world, float margin = 0.4f)
|
||||
{
|
||||
Vector2 c = transform.position;
|
||||
Vector2 half = (Vector2)Footprint.size * 0.5f + Vector2.one * margin;
|
||||
return Mathf.Abs(world.x - c.x) <= half.x && Mathf.Abs(world.y - c.y) <= half.y;
|
||||
}
|
||||
|
||||
// Куда ставить префаб, чтобы здание встало ровно на клетки призрака
|
||||
public Vector3 PrefabPosition => transform.position - (Vector3)Footprint.anchorOffset;
|
||||
}
|
||||
@@ -1,390 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
// МОДУЛЬ ПОСЕЛЕНИЯ. Документ: Docs/Modules/Settlement.md
|
||||
// Сетка свободной стройки: игрок сам выбирает, где поставить здание.
|
||||
//
|
||||
// - Клетка = 1 единица мира. Сетка прямоугольная (арт города не изометрический).
|
||||
// - Где можно строить: прямоугольник вокруг старых участков (BuildSlot) и Ратуши с запасом padding.
|
||||
// Можно задать руками: autoArea = false и areaMin / areaMax.
|
||||
// - Занятые клетки: под каждым построенным зданием (его размер на сетке, BuildingData.footprint) и под Ратушей.
|
||||
// Старые сохранения: здание стоит, где стояло, занятость считается по тому, какие клетки оно накрывает.
|
||||
// - В режиме стройки сетка рисуется поверх земли: свободные клетки -- светлые линии, занятые -- красные.
|
||||
// - Старые участки и площадки «Застройка» прячутся при запуске (свободная стройка их заменила).
|
||||
//
|
||||
// Объект создаётся сам (BuildGrid.Instance), руками на сцену ставить не нужно.
|
||||
// Если поставить руками -- можно настроить поля в инспекторе.
|
||||
public class BuildGrid : MonoBehaviour
|
||||
{
|
||||
static BuildGrid instance;
|
||||
|
||||
public static BuildGrid Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
instance = FindFirstObjectByType<BuildGrid>();
|
||||
if (instance == null) instance = new GameObject("BuildGrid").AddComponent<BuildGrid>();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
|
||||
[Header("Где можно строить")]
|
||||
[Tooltip("Посчитать область самому: старые участки + Ратуша + запас")]
|
||||
public bool autoArea = true;
|
||||
|
||||
// Отладка (05.11, просьба Миши): сетка видна всегда и ярче, каждая 5-я линия жирнее -- чтобы примерять
|
||||
// к ней размеры зданий и референсы. Включается кнопкой "Сетка" в панели DEV.
|
||||
public static bool DebugVisible { get; private set; }
|
||||
|
||||
public static void SetDebugVisible(bool on, bool buildModeActive)
|
||||
{
|
||||
DebugVisible = on;
|
||||
if (BuildManager.Instance == null) return; // 2D-город не открыт -- сетка появится, когда откроется
|
||||
var grid = Instance;
|
||||
if (grid == null) return;
|
||||
grid.lastOverlayKey = null;
|
||||
grid.ShowOverlay(on || buildModeActive);
|
||||
}
|
||||
|
||||
// Здание, которое сейчас переносят: его клетки считаются свободными (режим стройки, перенос)
|
||||
public static GameObject IgnoredBuilding;
|
||||
[Tooltip("Запас вокруг старых участков, клеток")]
|
||||
public int padding = 3;
|
||||
public Vector2 areaMin = new Vector2(-34, -10);
|
||||
public Vector2 areaMax = new Vector2(4, 12);
|
||||
|
||||
[Header("Вид сетки")]
|
||||
public int overlaySortingOrder = 1;
|
||||
public Color lineColor = new Color(1f, 1f, 1f, 0.28f);
|
||||
public Color freeColor = new Color(0.4f, 1f, 0.5f, 0.06f);
|
||||
public Color busyColor = new Color(1f, 0.15f, 0.15f, 0.38f);
|
||||
|
||||
[Tooltip("Спрятать старые участки и площадки «Застройка» при запуске")]
|
||||
public bool hideLegacySlots = true;
|
||||
|
||||
public Vector2Int Origin { get; private set; } // мировые координаты левого нижнего угла клетки (0, 0)
|
||||
public int Width { get; private set; }
|
||||
public int Height { get; private set; }
|
||||
|
||||
bool[,] busy;
|
||||
bool initialized;
|
||||
float nextRefresh;
|
||||
SpriteRenderer overlay;
|
||||
Texture2D overlayTex;
|
||||
string lastOverlayKey;
|
||||
|
||||
const int PixelsPerCell = 16;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (instance != null && instance != this) { Destroy(this); return; }
|
||||
instance = this;
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
if (instance == this) instance = null;
|
||||
if (overlayTex != null) Destroy(overlayTex);
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (overlay != null && overlay.enabled && Time.unscaledTime >= nextRefresh) Refresh();
|
||||
}
|
||||
|
||||
// ---------------- область ----------------
|
||||
|
||||
void EnsureInit()
|
||||
{
|
||||
if (initialized) return;
|
||||
initialized = true;
|
||||
|
||||
Rect area = autoArea ? AutoArea() : Rect.MinMaxRect(areaMin.x, areaMin.y, areaMax.x, areaMax.y);
|
||||
Origin = new Vector2Int(Mathf.FloorToInt(area.xMin), Mathf.FloorToInt(area.yMin));
|
||||
Width = Mathf.Max(1, Mathf.CeilToInt(area.xMax) - Origin.x);
|
||||
Height = Mathf.Max(1, Mathf.CeilToInt(area.yMax) - Origin.y);
|
||||
busy = new bool[Width, Height];
|
||||
|
||||
if (hideLegacySlots) HideLegacySlots();
|
||||
Debug.Log($"[СТРОЙКА] Сетка {Width}×{Height} клеток, левый нижний угол {Origin}");
|
||||
}
|
||||
|
||||
Rect AutoArea()
|
||||
{
|
||||
bool any = false;
|
||||
Bounds b = new Bounds();
|
||||
foreach (var slot in FindObjectsByType<BuildSlot>(FindObjectsInactive.Include, FindObjectsSortMode.None))
|
||||
{
|
||||
Bounds sb = new Bounds(slot.transform.position, Vector3.one);
|
||||
var col = slot.GetComponent<Collider2D>();
|
||||
if (col != null && col.enabled && col.gameObject.activeInHierarchy) sb.Encapsulate(col.bounds);
|
||||
if (!any) { b = sb; any = true; } else b.Encapsulate(sb);
|
||||
}
|
||||
if (TownHall.Instance != null)
|
||||
{
|
||||
Bounds tb = TownHallBounds();
|
||||
if (!any) { b = tb; b.Expand(new Vector3(24, 16, 0)); any = true; }
|
||||
else b.Encapsulate(tb);
|
||||
}
|
||||
if (!any) b = new Bounds(Vector3.zero, new Vector3(30, 20, 0));
|
||||
b.Expand(new Vector3(padding * 2, padding * 2, 0));
|
||||
return Rect.MinMaxRect(b.min.x, b.min.y, b.max.x, b.max.y);
|
||||
}
|
||||
|
||||
static Bounds TownHallBounds()
|
||||
{
|
||||
var th = TownHall.Instance;
|
||||
var col = th.GetComponent<Collider2D>();
|
||||
if (col != null && col.enabled) return col.bounds;
|
||||
var sr = th.GetComponentInChildren<SpriteRenderer>();
|
||||
return sr != null ? sr.bounds : new Bounds(th.transform.position, new Vector3(3, 3, 0));
|
||||
}
|
||||
|
||||
static void HideLegacySlots()
|
||||
{
|
||||
foreach (var slot in FindObjectsByType<BuildSlot>(FindObjectsInactive.Include, FindObjectsSortMode.None))
|
||||
{
|
||||
HideOn(slot.gameObject);
|
||||
var parent = slot.transform.parent;
|
||||
if (parent != null && parent.name.StartsWith("Застройка")) HideOn(parent.gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
// Прячем только сам объект (картинку и коллайдер), не детей -- и сцену не меняем
|
||||
static void HideOn(GameObject go)
|
||||
{
|
||||
foreach (var sr in go.GetComponents<SpriteRenderer>()) sr.enabled = false;
|
||||
foreach (var c in go.GetComponents<Collider2D>()) c.enabled = false;
|
||||
}
|
||||
|
||||
// ---------------- клетки ----------------
|
||||
|
||||
public bool InBounds(int x, int y) => x >= 0 && y >= 0 && x < Width && y < Height;
|
||||
|
||||
public bool IsBusy(int x, int y) { EnsureInit(); return !InBounds(x, y) || busy[x, y]; }
|
||||
|
||||
// Клетка мира -> индекс сетки
|
||||
public Vector2Int WorldToCell(Vector2 world)
|
||||
{
|
||||
EnsureInit();
|
||||
return new Vector2Int(Mathf.FloorToInt(world.x) - Origin.x, Mathf.FloorToInt(world.y) - Origin.y);
|
||||
}
|
||||
|
||||
// Центр прямоугольника клеток (x, y, w, h) в мире
|
||||
public Vector2 RectCenter(Vector2Int cell, Vector2Int size)
|
||||
{
|
||||
EnsureInit();
|
||||
return new Vector2(Origin.x + cell.x + size.x * 0.5f, Origin.y + cell.y + size.y * 0.5f);
|
||||
}
|
||||
|
||||
// Левая нижняя клетка для здания размера size, чей центр ближе всего к точке мира
|
||||
public Vector2Int SnapCell(Vector2 worldCenter, Vector2Int size)
|
||||
{
|
||||
EnsureInit();
|
||||
return new Vector2Int(Mathf.RoundToInt(worldCenter.x - Origin.x - size.x * 0.5f),
|
||||
Mathf.RoundToInt(worldCenter.y - Origin.y - size.y * 0.5f));
|
||||
}
|
||||
|
||||
// Можно ли поставить: все клетки внутри области и свободны
|
||||
public bool CanPlace(Vector2Int cell, Vector2Int size)
|
||||
{
|
||||
EnsureInit();
|
||||
for (int x = cell.x; x < cell.x + size.x; x++)
|
||||
for (int y = cell.y; y < cell.y + size.y; y++)
|
||||
if (!InBounds(x, y) || busy[x, y]) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Ближайшее свободное место для здания размера size рядом с точкой (по спирали). false -- места нет
|
||||
public bool FindFreeNear(Vector2 worldCenter, Vector2Int size, out Vector2Int cell)
|
||||
{
|
||||
Refresh();
|
||||
Vector2Int start = SnapCell(worldCenter, size);
|
||||
int maxR = Mathf.Max(Width, Height);
|
||||
for (int r = 0; r <= maxR; r++)
|
||||
{
|
||||
for (int dx = -r; dx <= r; dx++)
|
||||
for (int dy = -r; dy <= r; dy++)
|
||||
{
|
||||
if (Mathf.Max(Mathf.Abs(dx), Mathf.Abs(dy)) != r) continue; // только кольцо радиуса r
|
||||
var c = new Vector2Int(start.x + dx, start.y + dy);
|
||||
if (CanPlace(c, size)) { cell = c; return true; }
|
||||
}
|
||||
}
|
||||
cell = start;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Пересчитать занятые клетки по тому, что стоит в городе сейчас
|
||||
public void Refresh()
|
||||
{
|
||||
EnsureInit();
|
||||
nextRefresh = Time.unscaledTime + 0.3f;
|
||||
System.Array.Clear(busy, 0, busy.Length);
|
||||
|
||||
if (TownHall.Instance != null)
|
||||
{
|
||||
Bounds tb = TownHallBounds();
|
||||
MarkRect(new Rect(tb.min.x, tb.min.y, tb.size.x, tb.size.y));
|
||||
}
|
||||
|
||||
var bm = BuildManager.Instance;
|
||||
foreach (var id in FindObjectsByType<PlacedBuildingId>(FindObjectsSortMode.None))
|
||||
{
|
||||
if (string.IsNullOrEmpty(id.buildingName)) continue; // здание сносится в этом кадре
|
||||
if (IgnoredBuilding != null && id.gameObject == IgnoredBuilding) continue; // его переносят
|
||||
BuildingData data = bm != null ? bm.FindData(id.buildingName) : null;
|
||||
Rect r;
|
||||
if (data != null)
|
||||
{
|
||||
var fp = BuildFootprint.Of(data);
|
||||
Vector2 center = (Vector2)id.transform.position + fp.anchorOffset;
|
||||
r = new Rect(center.x - fp.size.x * 0.5f, center.y - fp.size.y * 0.5f, fp.size.x, fp.size.y);
|
||||
}
|
||||
else
|
||||
{
|
||||
var col = id.GetComponent<Collider2D>();
|
||||
if (col == null) continue;
|
||||
r = new Rect(col.bounds.min.x, col.bounds.min.y, col.bounds.size.x, col.bounds.size.y);
|
||||
}
|
||||
MarkRect(r);
|
||||
}
|
||||
|
||||
if (overlay != null && overlay.enabled) RedrawOverlay();
|
||||
}
|
||||
|
||||
// Отметить все клетки, которые прямоугольник мира накрывает (касание краем не считается)
|
||||
void MarkRect(Rect r)
|
||||
{
|
||||
const float eps = 0.05f;
|
||||
int x0 = Mathf.FloorToInt(r.xMin + eps) - Origin.x, x1 = Mathf.CeilToInt(r.xMax - eps) - Origin.x;
|
||||
int y0 = Mathf.FloorToInt(r.yMin + eps) - Origin.y, y1 = Mathf.CeilToInt(r.yMax - eps) - Origin.y;
|
||||
for (int x = Mathf.Max(0, x0); x < Mathf.Min(Width, x1); x++)
|
||||
for (int y = Mathf.Max(0, y0); y < Mathf.Min(Height, y1); y++)
|
||||
busy[x, y] = true;
|
||||
}
|
||||
|
||||
// ---------------- рисунок сетки ----------------
|
||||
|
||||
public void ShowOverlay(bool show)
|
||||
{
|
||||
EnsureInit();
|
||||
show |= DebugVisible; // отладочная сетка не прячется при выходе из режима стройки
|
||||
if (show && overlay == null) CreateOverlay();
|
||||
if (overlay == null) return;
|
||||
overlay.enabled = show;
|
||||
if (show) Refresh();
|
||||
}
|
||||
|
||||
void CreateOverlay()
|
||||
{
|
||||
overlayTex = new Texture2D(Width * PixelsPerCell, Height * PixelsPerCell, TextureFormat.RGBA32, false);
|
||||
overlayTex.filterMode = FilterMode.Point;
|
||||
overlayTex.wrapMode = TextureWrapMode.Clamp;
|
||||
var sprite = Sprite.Create(overlayTex, new Rect(0, 0, overlayTex.width, overlayTex.height), Vector2.zero, PixelsPerCell);
|
||||
|
||||
var go = new GameObject("BuildGridOverlay");
|
||||
go.transform.SetParent(transform, false);
|
||||
go.transform.position = new Vector3(Origin.x, Origin.y, 0f);
|
||||
overlay = go.AddComponent<SpriteRenderer>();
|
||||
overlay.sprite = sprite;
|
||||
overlay.sortingOrder = overlaySortingOrder;
|
||||
lastOverlayKey = null;
|
||||
}
|
||||
|
||||
void RedrawOverlay()
|
||||
{
|
||||
// перерисовываем только если занятость поменялась
|
||||
var key = new System.Text.StringBuilder(Width * Height + 1);
|
||||
key.Append(DebugVisible ? 'D' : 'n');
|
||||
for (int y = 0; y < Height; y++) for (int x = 0; x < Width; x++) key.Append(busy[x, y] ? '1' : '0');
|
||||
string k = key.ToString();
|
||||
if (k == lastOverlayKey) return;
|
||||
lastOverlayKey = k;
|
||||
|
||||
int w = overlayTex.width, h = overlayTex.height;
|
||||
var px = new Color32[w * h];
|
||||
Color32 line = DebugVisible ? new Color(1f, 1f, 1f, 0.7f) : lineColor, free = freeColor, bad = busyColor;
|
||||
Color32 major = new Color32(255, 230, 80, 230); // каждая 5-я клетка -- жёлтая линия (только в отладке)
|
||||
for (int y = 0; y < h; y++)
|
||||
{
|
||||
int cy = y / PixelsPerCell, iy = y % PixelsPerCell;
|
||||
for (int x = 0; x < w; x++)
|
||||
{
|
||||
int cx = x / PixelsPerCell, ix = x % PixelsPerCell;
|
||||
bool edge = ix == 0 || iy == 0 || x == w - 1 || y == h - 1;
|
||||
px[y * w + x] = busy[cx, cy] ? bad : (edge ? line : free);
|
||||
if (DebugVisible && ((ix == 0 && cx % 5 == 0) || (iy == 0 && cy % 5 == 0))) px[y * w + x] = major;
|
||||
if (busy[cx, cy] && edge) px[y * w + x] = new Color32(bad.r, bad.g, bad.b, (byte)Mathf.Min(255, bad.a + 50));
|
||||
}
|
||||
}
|
||||
overlayTex.SetPixels32(px);
|
||||
overlayTex.Apply(false);
|
||||
}
|
||||
}
|
||||
|
||||
// Размер здания на сетке и где его "пятно" относительно точки, в которую ставится префаб.
|
||||
// size -- BuildingData.footprint, а если там 0 × 0 -- коллайдер префаба (иначе картинка), округлённый до клеток.
|
||||
// anchorOffset -- центр пятна минус позиция префаба (у многих картинок точка привязки не в центре).
|
||||
public struct BuildFootprint
|
||||
{
|
||||
public Vector2Int size;
|
||||
public Vector2 anchorOffset;
|
||||
|
||||
static readonly Dictionary<BuildingData, BuildFootprint> cache = new Dictionary<BuildingData, BuildFootprint>();
|
||||
|
||||
public static BuildFootprint Of(BuildingData data)
|
||||
{
|
||||
if (data == null) return new BuildFootprint { size = Vector2Int.one };
|
||||
if (cache.TryGetValue(data, out var fp)) return fp;
|
||||
|
||||
Rect r = LocalRect(data.prefab);
|
||||
fp.anchorOffset = r.center;
|
||||
if (data.footprint.x > 0 && data.footprint.y > 0) fp.size = data.footprint;
|
||||
else fp.size = new Vector2Int(Mathf.Max(1, Mathf.RoundToInt(r.width)), Mathf.Max(1, Mathf.RoundToInt(r.height)));
|
||||
cache[data] = fp;
|
||||
return fp;
|
||||
}
|
||||
|
||||
// Прямоугольник префаба относительно его позиции, в единицах мира.
|
||||
// Считаем по трансформам руками: у выключенного шаблона collider.bounds не работает.
|
||||
static Rect LocalRect(GameObject prefab)
|
||||
{
|
||||
if (prefab == null) return new Rect(-0.5f, -0.5f, 1, 1);
|
||||
Vector3 root = prefab.transform.position;
|
||||
|
||||
var box = prefab.GetComponent<BoxCollider2D>();
|
||||
if (box == null) box = prefab.GetComponentInChildren<BoxCollider2D>(true);
|
||||
if (box != null)
|
||||
{
|
||||
Vector2 half = box.size * 0.5f;
|
||||
return Corners(box.transform, box.offset - half, box.offset + half, root);
|
||||
}
|
||||
|
||||
bool any = false;
|
||||
Rect result = new Rect();
|
||||
foreach (var sr in prefab.GetComponentsInChildren<SpriteRenderer>(true))
|
||||
{
|
||||
if (sr.sprite == null) continue;
|
||||
var b = sr.sprite.bounds;
|
||||
Rect one = Corners(sr.transform, b.min, b.max, root);
|
||||
if (!any) { result = one; any = true; }
|
||||
else result = Rect.MinMaxRect(Mathf.Min(result.xMin, one.xMin), Mathf.Min(result.yMin, one.yMin),
|
||||
Mathf.Max(result.xMax, one.xMax), Mathf.Max(result.yMax, one.yMax));
|
||||
}
|
||||
return any ? result : new Rect(-0.5f, -0.5f, 1, 1);
|
||||
}
|
||||
|
||||
static Rect Corners(Transform t, Vector2 min, Vector2 max, Vector3 root)
|
||||
{
|
||||
Vector3 a = t.TransformPoint(new Vector3(min.x, min.y)) - root;
|
||||
Vector3 b = t.TransformPoint(new Vector3(max.x, max.y)) - root;
|
||||
Vector3 c = t.TransformPoint(new Vector3(min.x, max.y)) - root;
|
||||
Vector3 d = t.TransformPoint(new Vector3(max.x, min.y)) - root;
|
||||
return Rect.MinMaxRect(Mathf.Min(a.x, b.x, c.x, d.x), Mathf.Min(a.y, b.y, c.y, d.y),
|
||||
Mathf.Max(a.x, b.x, c.x, d.x), Mathf.Max(a.y, b.y, c.y, d.y));
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1986efcb01c943548be8d0a24fbc56c9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,248 +0,0 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
// МОДУЛЬ ПОСЕЛЕНИЯ. Документ: Docs/Modules/Settlement.md
|
||||
// Список зданий и сама постройка.
|
||||
// Сейчас стройка свободная, на сетке: игрок сам выбирает место (BuildGrid, BuildGhost, BuildModeController),
|
||||
// а здание ставит BuildAt. Участки (BuildSlot) остались для старых сцен и сохранений -- BuildGrid их прячет.
|
||||
|
||||
public class BuildManager : MonoBehaviour
|
||||
{
|
||||
public static BuildManager Instance { get; private set; }
|
||||
|
||||
[Header("Все типы зданий в игре")]
|
||||
public List<BuildingData> allBuildings;
|
||||
|
||||
[Header("Поиск участков под застройку")]
|
||||
[Tooltip("Слой, на котором находятся объекты BuildSlot")]
|
||||
public LayerMask buildSlotsLayerMask;
|
||||
|
||||
[Header("Подсветка участка при наведении")]
|
||||
public Color highlightValidColor = new Color(1f, 1f, 1f, 0.9f); // белая -- можно строить
|
||||
public Color highlightInvalidColor = new Color(1f, 0.2f, 0.2f, 0.9f); // красная -- нельзя (не хватает ресурсов)
|
||||
|
||||
private BuildingData currentlyPlacing;
|
||||
private BuildSlot lastHighlightedSlot;
|
||||
private Camera mainCam;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (Instance != null && Instance != this)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
Instance = this;
|
||||
mainCam = Camera.main;
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
// Повторный вход в город (например, с карты мира): здания восстанавливаем из памяти модуля
|
||||
SettlementModule.ApplyToScene();
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (currentlyPlacing == null) return; // не в режиме строительства -- ничего не делаем
|
||||
|
||||
Vector3 worldPos = GetPointerWorldPosition();
|
||||
worldPos.z = 0;
|
||||
|
||||
BuildSlot slotUnderPointer = GetSlotAtPosition(worldPos);
|
||||
|
||||
// Убираем подсветку с предыдущего слота, если курсор ушёл с него
|
||||
if (lastHighlightedSlot != null && lastHighlightedSlot != slotUnderPointer)
|
||||
{
|
||||
lastHighlightedSlot.ClearHighlight();
|
||||
}
|
||||
|
||||
if (slotUnderPointer != null && !slotUnderPointer.isOccupied)
|
||||
{
|
||||
bool canAfford = currentlyPlacing.CanAfford();
|
||||
slotUnderPointer.SetHighlight(canAfford ? highlightValidColor : highlightInvalidColor);
|
||||
lastHighlightedSlot = slotUnderPointer;
|
||||
|
||||
if (Input.GetMouseButtonDown(0) && !UIBlocker.IsPointerOverUI())
|
||||
{
|
||||
TryConfirmPlacement(slotUnderPointer, canAfford);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lastHighlightedSlot = null;
|
||||
}
|
||||
|
||||
// Отмена по правой кнопке / Escape
|
||||
if (Input.GetMouseButtonDown(1) || Input.GetKeyDown(KeyCode.Escape))
|
||||
{
|
||||
CancelPlacement();
|
||||
}
|
||||
}
|
||||
|
||||
BuildSlot GetSlotAtPosition(Vector3 position)
|
||||
{
|
||||
Collider2D hit = Physics2D.OverlapPoint(position, buildSlotsLayerMask);
|
||||
if (hit == null) return null;
|
||||
return hit.GetComponent<BuildSlot>();
|
||||
}
|
||||
|
||||
// Список зданий, доступных для стройки ПРЯМО СЕЙЧАС (по уровню Ратуши)
|
||||
public List<BuildingData> GetAvailableBuildings()
|
||||
{
|
||||
List<BuildingData> available = new List<BuildingData>();
|
||||
int townHallLevel = TownHall.Instance != null ? TownHall.Instance.currentLevel : 1;
|
||||
|
||||
foreach (var b in allBuildings)
|
||||
{
|
||||
if (b.requiredTownHallLevel <= townHallLevel)
|
||||
available.Add(b);
|
||||
}
|
||||
return available;
|
||||
}
|
||||
|
||||
// Вызывается из UI-кнопки конкретного здания в меню стройки
|
||||
public void StartPlacing(BuildingData data)
|
||||
{
|
||||
currentlyPlacing = data;
|
||||
Debug.Log($"[СТРОЙКА] Выбрано здание: {data.buildingName}. Кликни на пустой участок.");
|
||||
}
|
||||
|
||||
void TryConfirmPlacement(BuildSlot slot, bool canAfford)
|
||||
{
|
||||
if (!canAfford)
|
||||
{
|
||||
Debug.Log("[СТРОЙКА] Не хватает ресурсов!");
|
||||
return;
|
||||
}
|
||||
|
||||
currentlyPlacing.PayCost();
|
||||
|
||||
GameObject built = Instantiate(currentlyPlacing.prefab, slot.transform.position, Quaternion.identity);
|
||||
if (!built.activeSelf) built.SetActive(true); // шаблон казарм хранится выключенным
|
||||
|
||||
PlacedBuildingId idMarker = built.AddComponent<PlacedBuildingId>();
|
||||
idMarker.buildingName = currentlyPlacing.buildingName;
|
||||
|
||||
slot.Occupy(built);
|
||||
|
||||
BuildingSlotLink link = built.AddComponent<BuildingSlotLink>();
|
||||
link.linkedSlot = slot;
|
||||
|
||||
Debug.Log($"[СТРОЙКА] Построено: {currentlyPlacing.buildingName} на участке {slot.name}");
|
||||
EventBus.Publish(new BuildingPlacedEvent { BuildingName = currentlyPlacing.buildingName });
|
||||
|
||||
currentlyPlacing = null;
|
||||
lastHighlightedSlot = null;
|
||||
}
|
||||
|
||||
void CancelPlacement()
|
||||
{
|
||||
if (lastHighlightedSlot != null)
|
||||
{
|
||||
lastHighlightedSlot.ClearHighlight();
|
||||
lastHighlightedSlot = null;
|
||||
}
|
||||
currentlyPlacing = null;
|
||||
Debug.Log("[СТРОЙКА] Размещение отменено.");
|
||||
}
|
||||
|
||||
// ===== Свободная стройка на сетке =====
|
||||
|
||||
// Данные здания по имени (имя хранится в PlacedBuildingId и в сохранении)
|
||||
public BuildingData FindData(string buildingName)
|
||||
{
|
||||
if (allBuildings == null || string.IsNullOrEmpty(buildingName)) return null;
|
||||
foreach (var b in allBuildings) if (b != null && b.buildingName == buildingName) return b;
|
||||
return null;
|
||||
}
|
||||
|
||||
// Можно ли поставить здание на клетки (левая нижняя cell): клетки свободны и ресурсов хватает
|
||||
public bool CanBuildAt(BuildingData data, Vector2Int cell)
|
||||
{
|
||||
if (data == null || data.prefab == null) return false;
|
||||
return BuildGrid.Instance.CanPlace(cell, BuildFootprint.Of(data).size) && data.CanAfford();
|
||||
}
|
||||
|
||||
// Построить здание на клетках сетки. Возвращает здание или null (занято / мало ресурсов).
|
||||
public GameObject BuildAt(BuildingData data, Vector2Int cell)
|
||||
{
|
||||
var grid = BuildGrid.Instance;
|
||||
grid.Refresh(); // занятость на этот момент, а не 0.3 с назад
|
||||
if (!CanBuildAt(data, cell)) return null;
|
||||
long buildMs = BuildTimer.DurationMs(false, 1);
|
||||
if (buildMs > 0 && BuildTimer.FreeBuilders == 0) return null; // все строители заняты
|
||||
|
||||
data.PayCost();
|
||||
|
||||
var fp = BuildFootprint.Of(data);
|
||||
Vector2 center = grid.RectCenter(cell, fp.size);
|
||||
Vector3 pos = new Vector3(center.x - fp.anchorOffset.x, center.y - fp.anchorOffset.y, 0f);
|
||||
|
||||
GameObject built = Instantiate(data.prefab, pos, Quaternion.identity);
|
||||
if (!built.activeSelf) built.SetActive(true); // шаблон казарм хранится выключенным
|
||||
built.AddComponent<PlacedBuildingId>().buildingName = data.buildingName;
|
||||
if (buildMs > 0)
|
||||
{
|
||||
long now = GameClock.UnixNowMs;
|
||||
BuildTimer.Begin(built, BuildTimer.Kind.Build, 1, now, now + buildMs); // стоит, но не работает, пока строится
|
||||
}
|
||||
|
||||
Debug.Log($"[СТРОЙКА] Построено: {data.buildingName}, клетки {cell} размер {fp.size}");
|
||||
EventBus.Publish(new BuildingPlacedEvent { BuildingName = data.buildingName });
|
||||
grid.Refresh();
|
||||
return built;
|
||||
}
|
||||
|
||||
// ===== Старая схема: тап по участку -> выбор здания (участки спрятаны, оставлено для совместимости) =====
|
||||
|
||||
// Построить здание сразу на указанном участке. true -- получилось.
|
||||
public bool BuildOnSlot(BuildingData data, BuildSlot slot)
|
||||
{
|
||||
if (data == null || slot == null || slot.isOccupied) return false;
|
||||
if (!data.CanAfford()) return false;
|
||||
currentlyPlacing = data;
|
||||
TryConfirmPlacement(slot, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Участок под точкой экрана (с допуском, чтобы попадать с первого раза пальцем)
|
||||
public BuildSlot SlotAtScreen(Vector2 screenPos, float tolerance = 0.35f)
|
||||
{
|
||||
if (mainCam == null) mainCam = Camera.main;
|
||||
if (mainCam == null) return null;
|
||||
Vector3 w = mainCam.ScreenToWorldPoint(screenPos);
|
||||
Vector2 p = new Vector2(w.x, w.y);
|
||||
// Перебираем все участки и берём ближайший: работает и с триггер-коллайдерами, и без настроенного слоя
|
||||
BuildSlot best = null;
|
||||
float bestDist = tolerance;
|
||||
foreach (var slot in FindObjectsByType<BuildSlot>(FindObjectsSortMode.None))
|
||||
{
|
||||
var col = slot.GetComponent<Collider2D>();
|
||||
Bounds b = col != null ? col.bounds : new Bounds(slot.transform.position, Vector3.one * 0.5f);
|
||||
b.center = new Vector3(b.center.x, b.center.y, 0f);
|
||||
float d = Mathf.Sqrt(b.SqrDistance(new Vector3(p.x, p.y, 0f)));
|
||||
if (d <= bestDist) { bestDist = d; best = slot; }
|
||||
}
|
||||
return best;
|
||||
}
|
||||
|
||||
// Найти пустой (свободный) BuildSlot по названию -- используется при восстановлении сохранения
|
||||
public BuildSlot FindSlotAtPosition(Vector3 position, float tolerance = 0.05f)
|
||||
{
|
||||
BuildSlot[] allSlots = FindObjectsByType<BuildSlot>(FindObjectsSortMode.None);
|
||||
foreach (var slot in allSlots)
|
||||
{
|
||||
if (Vector3.Distance(slot.transform.position, position) < tolerance)
|
||||
return slot;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Vector3 GetPointerWorldPosition()
|
||||
{
|
||||
Vector3 screenPos = Input.mousePosition;
|
||||
return mainCam.ScreenToWorldPoint(screenPos);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9de6545e2f73cd04f9d95334879c4fc4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 100
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,82 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
// Вешается на КАЖДЫЙ пустой участок земли, который ты вручную расставляешь
|
||||
// на карте вокруг Ратуши (или где угодно). На объекте обязательно должен
|
||||
// быть Collider2D (Box или Circle) для определения клика/наведения.
|
||||
//
|
||||
// НАСТРОЙКА В UNITY:
|
||||
// 1. GameObject -> Create Empty, назови "BuildSlot" (можно продублировать Ctrl+D под нужное число)
|
||||
// 2. Add Component -> Box Collider 2D, подгони размер под будущее здание
|
||||
// 3. Add Component -> Sprite Renderer -- поставь спрайт-заглушку "пустой участок"
|
||||
// (забор/колышки с верёвкой -- когда появится арт от дизайнеров)
|
||||
// 4. Add Component -> Build Slot (этот скрипт)
|
||||
// 5. Слой (Layer) объекта поставь "BuildSlot" -- используется BuildManager для поиска слотов
|
||||
|
||||
public class BuildSlot : MonoBehaviour
|
||||
{
|
||||
[Tooltip("Занят ли этот участок постройкой прямо сейчас")]
|
||||
public bool isOccupied = false;
|
||||
|
||||
[Tooltip("Ссылка на здание, которое сейчас стоит на этом участке (если занят)")]
|
||||
public GameObject occupyingBuilding;
|
||||
|
||||
private SpriteRenderer sr;
|
||||
private Color emptyColor;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
sr = GetComponent<SpriteRenderer>();
|
||||
if (sr != null) emptyColor = sr.color;
|
||||
}
|
||||
|
||||
public void Occupy(GameObject building)
|
||||
{
|
||||
isOccupied = true;
|
||||
occupyingBuilding = building;
|
||||
|
||||
// Прячем визуал пустого участка, раз на нём теперь стоит здание
|
||||
if (sr != null) sr.enabled = false;
|
||||
}
|
||||
|
||||
public void Free()
|
||||
{
|
||||
isOccupied = false;
|
||||
occupyingBuilding = null;
|
||||
|
||||
if (sr != null)
|
||||
{
|
||||
sr.enabled = true;
|
||||
sr.color = emptyColor;
|
||||
}
|
||||
}
|
||||
|
||||
// Подсветка при наведении -- вызывается из BuildManager во время режима строительства
|
||||
public void SetHighlight(Color color)
|
||||
{
|
||||
if (sr != null && !isOccupied)
|
||||
sr.color = color;
|
||||
}
|
||||
|
||||
public void ClearHighlight()
|
||||
{
|
||||
if (sr != null && !isOccupied)
|
||||
sr.color = emptyColor;
|
||||
}
|
||||
}
|
||||
|
||||
// Вешается АВТОМАТИЧЕСКИ на построенное здание (кодом, не руками).
|
||||
// Когда здание уничтожается любым способом (Destroy в коде, удаление
|
||||
// в редакторе Inspector/Hierarchy, снос при апгрейде и т.д.) --
|
||||
// OnDestroy сработает и освободит слот обратно.
|
||||
public class BuildingSlotLink : MonoBehaviour
|
||||
{
|
||||
public BuildSlot linkedSlot;
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
if (linkedSlot != null)
|
||||
{
|
||||
linkedSlot.Free();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9bc03f1a40fe14c4aaee52c88ea446a3
|
||||
@@ -140,7 +140,7 @@ public class BuildTimer : MonoBehaviour
|
||||
foreach (var mb in GetComponents<MonoBehaviour>())
|
||||
{
|
||||
if (mb == null || mb == this || !mb.enabled) continue;
|
||||
if (mb is PlacedBuildingId || mb is BuildingSlotLink) continue;
|
||||
if (mb is PlacedBuildingId) continue;
|
||||
mb.enabled = false;
|
||||
paused.Add(mb);
|
||||
}
|
||||
|
||||
@@ -1,58 +1,19 @@
|
||||
using UnityEngine;
|
||||
// Цена здания в старом формате (ResourceCost[]) и перевод в ResourceAmount[] для контракта IEconomy.
|
||||
// Сам BuildingData (ScriptableObject 2D-города: префаб, иконка, клетки сетки) удалён 06.11 вместе с 2D-городом:
|
||||
// здания 3D-поселения описывает City3D/City3DGameplay (цены, уровень Ратуши), лимиты -- EconomyConfig.
|
||||
[System.Serializable]
|
||||
public class ResourceCost
|
||||
{
|
||||
public ResourceType type;
|
||||
public float amount;
|
||||
public ResourceType type;
|
||||
public float amount;
|
||||
}
|
||||
[CreateAssetMenu(fileName = "NewBuilding", menuName = "Game/Building Data")]
|
||||
public class BuildingData : ScriptableObject
|
||||
|
||||
public static class BuildingData
|
||||
{
|
||||
[Header("Основное")]
|
||||
public string buildingName;
|
||||
public Sprite icon;
|
||||
public GameObject prefab;
|
||||
|
||||
[Header("Требования")]
|
||||
[Tooltip("Необходимый уровень ратуши")]
|
||||
public int requiredTownHallLevel = 1;
|
||||
|
||||
[Header("Размер на сетке стройки")]
|
||||
[Tooltip("Сколько клеток занимает здание (ширина × высота). 0 × 0 -- посчитать само по коллайдеру префаба")]
|
||||
public Vector2Int footprint;
|
||||
|
||||
[Header("Стоимость")]
|
||||
public ResourceCost[] cost;
|
||||
|
||||
// Проверка - хватает ли ресурсов? (только проверяет)
|
||||
// Ресурсы -- модуль Экономики, поэтому только через контракт IEconomy
|
||||
public bool CanAfford()
|
||||
{
|
||||
return GameServices.TryGet(out IEconomy economy) && economy.CanAfford(ToAmounts(cost));
|
||||
}
|
||||
|
||||
// Списывает стоимость постройки. Вызывать только после CanAfford() == true
|
||||
public void PayCost()
|
||||
{
|
||||
if (GameServices.TryGet(out IEconomy economy)) economy.TrySpend(ToAmounts(cost));
|
||||
}
|
||||
|
||||
public static ResourceAmount[] ToAmounts(ResourceCost[] costs)
|
||||
{
|
||||
var result = new ResourceAmount[costs?.Length ?? 0];
|
||||
for (int i = 0; i < result.Length; i++) result[i] = new ResourceAmount(costs[i].type, costs[i].amount);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Текст стоимости для UI, например "50 Wood, 20 Stone"
|
||||
public string GetCostText()
|
||||
{
|
||||
string result = "";
|
||||
for (int i = 0; i < cost.Length; i++)
|
||||
{
|
||||
result += $"{cost[i].amount} {cost[i].type}";
|
||||
if (i < cost.Length - 1) result += ", ";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
using UnityEngine;
|
||||
|
||||
// Небольшой "маркер", который автоматически ставится на КАЖДОЕ здание,
|
||||
// построенное через BuildManager. Хранит имя типа здания (совпадает с
|
||||
// BuildingData.buildingName), чтобы SaveManager знал, что именно это за постройка,
|
||||
// когда будет сохранять/восстанавливать сцену.
|
||||
//
|
||||
// НЕ добавляй этот компонент вручную -- BuildManager делает это сам при постройке.
|
||||
|
||||
// Маркер здания игры: имя типа ("Казармы", "Лес", "Склад"...). Его ставит 3D-поселение (City3DGameplay.Attach)
|
||||
// на каждое здание; по нему CitySync считает места, жильё и склады, а лимиты зданий -- по имени.
|
||||
public class PlacedBuildingId : MonoBehaviour
|
||||
{
|
||||
public string buildingName;
|
||||
|
||||
@@ -5,14 +5,15 @@ using UnityEngine;
|
||||
// МОДУЛЬ ПОСЕЛЕНИЯ: точка входа. Реализует ISettlement и сам сохраняет город (секция "settlement").
|
||||
// Документ: Docs/Modules/Settlement.md
|
||||
//
|
||||
// Город живёт на сцене MVP1, а сохраняться игра может и на карте мира. Поэтому модуль держит
|
||||
// последнее известное состояние города в памяти: на карте мира сохраняется оно, а не пустая сцена.
|
||||
// 2D-город (сцена MVP1) удалён 06.11: город -- 3D-поселение, его сохраняет City3D/City3DSave (секция "settlement3d").
|
||||
// Здесь -- контракт ISettlement (уровень Ратуши, число зданий) и старая секция "settlement": она читается и
|
||||
// сохраняется как есть, без изменений, -- по ней 3D-поселение один раз переносит здания игрока (MoveFrom2D).
|
||||
public static class SettlementModule
|
||||
{
|
||||
[Serializable]
|
||||
public class PlacedBuildingSaveEntry
|
||||
{
|
||||
public string buildingName; // совпадает с BuildingData.buildingName
|
||||
public string buildingName; // имя здания игры ("Казармы", "Лес"...) -- City3DGameplay.Type3DFor
|
||||
public float posX;
|
||||
public float posY;
|
||||
public int level;
|
||||
@@ -35,164 +36,31 @@ public static class SettlementModule
|
||||
public List<PlacedBuildingSaveEntry> placedBuildings = new List<PlacedBuildingSaveEntry>();
|
||||
}
|
||||
|
||||
static SettlementSaveData cached; // последнее состояние города (из сцены или из файла)
|
||||
static SettlementSaveData cached; // 2D-город из файла (сцены 2D-города больше нет)
|
||||
|
||||
// 2D-город из сохранения -- только для чтения: по нему 3D-поселение один раз переносит здания игрока (05.11).
|
||||
// null -- 2D-города в сохранении нет. Сами данные 2D не меняются и остаются в файле
|
||||
public static SettlementSaveData Saved2D => cached;
|
||||
static BuildManager appliedToBuildManager; // BuildManager сцены, для которой город уже восстановлен
|
||||
static readonly Service service = new Service();
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)]
|
||||
static void Init()
|
||||
{
|
||||
cached = null;
|
||||
appliedToBuildManager = null;
|
||||
lastTownHallLevel = 0;
|
||||
GameServices.Register<ISettlement>(service);
|
||||
SaveRegistry.Register(service);
|
||||
}
|
||||
|
||||
static bool CityLoaded => BuildManager.Instance != null;
|
||||
// Город открыт: в сцене есть Ратуша (3D-поселение вешает TownHall на свою Ратушу)
|
||||
static bool CityLoaded => TownHall.Instance != null;
|
||||
static int lastTownHallLevel; // уровень Ратуши последнего открытого города (0 -- ещё не открывали)
|
||||
|
||||
// ---------------- Сцена города <-> данные ----------------
|
||||
|
||||
static SettlementSaveData CaptureScene()
|
||||
{
|
||||
var data = new SettlementSaveData();
|
||||
if (TownHall.Instance != null)
|
||||
{
|
||||
data.townHallLevel = TownHall.Instance.currentLevel;
|
||||
var thTimer = BuildTimer.Of(TownHall.Instance.gameObject);
|
||||
if (thTimer != null && BuildTimer.All.Contains(thTimer))
|
||||
{
|
||||
data.townHallTimerStartMs = thTimer.startMs;
|
||||
data.townHallTimerEndMs = thTimer.endMs;
|
||||
data.townHallTimerTargetLevel = thTimer.targetLevel;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var placed in UnityEngine.Object.FindObjectsByType<PlacedBuildingId>(FindObjectsSortMode.None))
|
||||
{
|
||||
if (string.IsNullOrEmpty(placed.buildingName)) continue; // уже убрано, Destroy сработает в конце кадра
|
||||
var leveled = placed.GetComponent<ILeveledBuilding>();
|
||||
var timer = placed.GetComponent<BuildTimer>();
|
||||
bool timerOn = timer != null && BuildTimer.All.Contains(timer);
|
||||
data.placedBuildings.Add(new PlacedBuildingSaveEntry
|
||||
{
|
||||
buildingName = placed.buildingName,
|
||||
posX = placed.transform.position.x,
|
||||
posY = placed.transform.position.y,
|
||||
level = leveled != null ? leveled.Level : 1,
|
||||
timerKind = timerOn ? (int)timer.kind : 0,
|
||||
timerStartMs = timerOn ? timer.startMs : 0,
|
||||
timerEndMs = timerOn ? timer.endMs : 0,
|
||||
timerTargetLevel = timerOn ? timer.targetLevel : 0
|
||||
});
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
// Восстановить город на сцене из последнего известного состояния.
|
||||
// Без force -- один раз на каждую загрузку сцены города (BuildManager.Start и загрузка сохранения
|
||||
// могут прийти в любом порядке, повторное восстановление не нужно).
|
||||
public static void ApplyToScene(bool force = false)
|
||||
{
|
||||
if (cached == null || !CityLoaded) return;
|
||||
if (!force && appliedToBuildManager == BuildManager.Instance) return;
|
||||
appliedToBuildManager = BuildManager.Instance;
|
||||
|
||||
EventBus.Publish(new SettlementRestoringEvent()); // например, Казармы должны попасть в список стройки
|
||||
|
||||
if (TownHall.Instance != null)
|
||||
{
|
||||
TownHall.Instance.currentLevel = cached.townHallLevel;
|
||||
var oldTimer = BuildTimer.Of(TownHall.Instance.gameObject);
|
||||
if (oldTimer != null) oldTimer.Cancel();
|
||||
// Проверка таймера из файла: улучшение до уровня выше текущего, конец не раньше начала
|
||||
if (cached.townHallTimerEndMs > 0 && cached.townHallTimerTargetLevel > cached.townHallLevel)
|
||||
BuildTimer.Begin(TownHall.Instance.gameObject, BuildTimer.Kind.Upgrade, cached.townHallTimerTargetLevel,
|
||||
cached.townHallTimerStartMs, cached.townHallTimerEndMs);
|
||||
}
|
||||
|
||||
// Сначала убираем уже заспавненные здания, чтобы не задвоить постройки
|
||||
ClearPlacedBuildings();
|
||||
|
||||
int restored = 0;
|
||||
foreach (var entry in cached.placedBuildings)
|
||||
{
|
||||
BuildingData matchingData = FindBuildingDataByName(entry.buildingName);
|
||||
if (matchingData == null)
|
||||
{
|
||||
Debug.LogWarning($"[ПОСЕЛЕНИЕ] Не найден BuildingData для '{entry.buildingName}', здание пропущено.");
|
||||
continue;
|
||||
}
|
||||
|
||||
Vector3 pos = new Vector3(entry.posX, entry.posY, 0f);
|
||||
GameObject built = UnityEngine.Object.Instantiate(matchingData.prefab, pos, Quaternion.identity);
|
||||
if (!built.activeSelf) built.SetActive(true); // шаблон казарм хранится выключенным
|
||||
|
||||
built.AddComponent<PlacedBuildingId>().buildingName = entry.buildingName;
|
||||
|
||||
var leveled = built.GetComponent<ILeveledBuilding>();
|
||||
if (leveled != null) leveled.Level = entry.level;
|
||||
|
||||
// Стройка или улучшение продолжается (если время уже вышло -- закончится в первом же кадре)
|
||||
// Проверка таймера из файла: постройка -- только для 1 уровня, улучшение -- только до уровня выше текущего
|
||||
bool validBuild = entry.timerKind == (int)BuildTimer.Kind.Build && entry.level <= 1;
|
||||
bool validUpgrade = entry.timerKind == (int)BuildTimer.Kind.Upgrade && entry.timerTargetLevel > Mathf.Max(1, entry.level);
|
||||
if ((validBuild || validUpgrade) && entry.timerEndMs > 0)
|
||||
BuildTimer.Begin(built, (BuildTimer.Kind)entry.timerKind, Mathf.Max(1, entry.timerTargetLevel),
|
||||
entry.timerStartMs, entry.timerEndMs);
|
||||
|
||||
// Помечаем слот занятым, чтобы поверх нельзя было поставить ещё одно здание
|
||||
BuildSlot slot = BuildManager.Instance.FindSlotAtPosition(pos);
|
||||
if (slot != null)
|
||||
{
|
||||
slot.Occupy(built);
|
||||
built.AddComponent<BuildingSlotLink>().linkedSlot = slot;
|
||||
}
|
||||
restored++;
|
||||
}
|
||||
|
||||
Debug.Log($"[ПОСЕЛЕНИЕ] Город восстановлен. Построек: {restored}");
|
||||
}
|
||||
|
||||
// Убрать все постройки со сцены. Участок освобождаем сразу: Destroy срабатывает в конце кадра,
|
||||
// и иначе старое здание освободило бы участок, на который уже встало новое
|
||||
static void ClearPlacedBuildings()
|
||||
{
|
||||
foreach (var e in UnityEngine.Object.FindObjectsByType<PlacedBuildingId>(FindObjectsSortMode.None))
|
||||
{
|
||||
var link = e.GetComponent<BuildingSlotLink>();
|
||||
if (link != null && link.linkedSlot != null)
|
||||
{
|
||||
link.linkedSlot.Free();
|
||||
link.linkedSlot = null;
|
||||
}
|
||||
e.buildingName = null; // чтобы сохранение в этом же кадре уже не видело здание
|
||||
var timer = e.GetComponent<BuildTimer>();
|
||||
if (timer != null) timer.Discard(); // строитель свободен сразу, а не в конце кадра
|
||||
UnityEngine.Object.Destroy(e.gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
static BuildingData FindBuildingDataByName(string buildingName)
|
||||
{
|
||||
foreach (var b in BuildManager.Instance.allBuildings)
|
||||
{
|
||||
if (b != null && b.buildingName == buildingName) return b;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// ---------------- Контракты ----------------
|
||||
|
||||
class Service : ISettlement, ISaveParticipant
|
||||
{
|
||||
// Ратуша открытого города -- 2D или 3D. Вне города (карта мира) -- последнего открытого: в 3D-поселении
|
||||
// уровень Ратуши свой (секция settlement3d), и 2D-сохранение показывало бы на карте чужой уровень (05.11)
|
||||
// Ратуша открытого города. Вне города (карта мира) -- последнего открытого; ни разу не открывали -- из старого 2D-сохранения
|
||||
public int TownHallLevel
|
||||
{
|
||||
get
|
||||
@@ -211,36 +79,20 @@ public static class SettlementModule
|
||||
|
||||
public string SaveKey => "settlement";
|
||||
|
||||
public string Capture()
|
||||
{
|
||||
if (CityLoaded) cached = CaptureScene();
|
||||
// Город не открыт и ни разу не загружался -- не трогаем то, что уже лежит в файле
|
||||
return cached != null ? JsonUtility.ToJson(cached) : null;
|
||||
}
|
||||
// Старая секция 2D-города -- как есть (для переноса в 3D); нет её -- ничего не пишем
|
||||
public string Capture() => cached != null ? JsonUtility.ToJson(cached) : null;
|
||||
|
||||
// Новая игра: Ратуша 1 уровня, построек нет -- и на сцене, и в памяти модуля
|
||||
// Новая игра: старого 2D-города нет (3D-поселение сбрасывает City3DSave)
|
||||
public void ResetState()
|
||||
{
|
||||
cached = new SettlementSaveData();
|
||||
lastTownHallLevel = 0;
|
||||
if (!CityLoaded) return;
|
||||
|
||||
ClearPlacedBuildings();
|
||||
if (TownHall.Instance != null)
|
||||
{
|
||||
TownHall.Instance.currentLevel = 1;
|
||||
var thTimer = BuildTimer.Of(TownHall.Instance.gameObject);
|
||||
if (thTimer != null) thTimer.Cancel();
|
||||
}
|
||||
appliedToBuildManager = BuildManager.Instance; // город уже в состоянии новой игры
|
||||
EventBus.Publish(new TownHallLevelChangedEvent { Level = 1 });
|
||||
}
|
||||
|
||||
public void Restore(string json)
|
||||
{
|
||||
cached = JsonUtility.FromJson<SettlementSaveData>(json) ?? new SettlementSaveData();
|
||||
if (cached.placedBuildings == null) cached.placedBuildings = new List<PlacedBuildingSaveEntry>();
|
||||
ApplyToScene(force: true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1226,6 +1226,15 @@ public class ModuleTests
|
||||
public void GetArmies(long timeMs, List<ArmyOnMap> result) => result.AddRange(Armies(timeMs));
|
||||
public Dictionary<string, ReconTarget> Targets = new Dictionary<string, ReconTarget>();
|
||||
public bool TryGetReconTarget(string targetId, out ReconTarget target) => Targets.TryGetValue(targetId ?? "", out target);
|
||||
// М3: охраняемые области и позиция армии (по тем же Armies)
|
||||
public List<GuardedZone> Zones = new List<GuardedZone>();
|
||||
public void GetGuardedZones(List<GuardedZone> result) => result.AddRange(Zones);
|
||||
public bool TryGetArmyPosition(string armyId, long timeMs, out int x, out int y)
|
||||
{
|
||||
foreach (var a in Armies(timeMs)) if (a.Id == armyId) { x = a.X; y = a.Y; return true; }
|
||||
x = y = 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static ArmyOnMap Foreign(string id, int x, int y, int soldiers = 50) =>
|
||||
@@ -1526,6 +1535,21 @@ public class ModuleTests
|
||||
if (World.TryGetPositionAt(m, t, out int x, out int y, out int tx, out int ty, out int n))
|
||||
result.Add(new ArmyOnMap { Id = "march_" + m.id, OwnerId = m.ownerId, X = x, Y = y, ToX = tx, ToY = ty, Soldiers = n });
|
||||
}
|
||||
|
||||
public void GetGuardedZones(List<GuardedZone> result)
|
||||
{
|
||||
foreach (var n in World.Nodes)
|
||||
if (n.type == MapNodeType.NeighborCity) result.Add(new GuardedZone { Id = n.id, X = n.x, Y = n.y, Kind = GuardedZoneKind.Settlement });
|
||||
else if (n.type == MapNodeType.BossCastle) result.Add(new GuardedZone { Id = n.id, X = n.x, Y = n.y, Kind = GuardedZoneKind.CircleCastle });
|
||||
}
|
||||
|
||||
public bool TryGetArmyPosition(string armyId, long timeMs, out int x, out int y)
|
||||
{
|
||||
x = y = 0;
|
||||
if (armyId == null || !armyId.StartsWith("march_") || !int.TryParse(armyId.Substring(6), out int id)) return false;
|
||||
MarchData m = World.FindMarch(id);
|
||||
return m != null && World.TryGetPositionAt(m, timeMs, out x, out y, out _, out _, out _);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -2282,4 +2306,119 @@ public class ModuleTests
|
||||
Assert.IsFalse(events.Exists(e => e.March == m && e.Type == WorldEventType.ReconCompleted), "без отчёта");
|
||||
Assert.IsTrue(events.Exists(e => e.March == m && e.Type == WorldEventType.MarchReturned), "вернулись");
|
||||
}
|
||||
|
||||
// ---------------- Разведка М3: тайные операции (ТЗ разведки, разделы 7-8 и 11) ----------------
|
||||
|
||||
static IntelligenceService SpyIntel(IWorldMap map)
|
||||
{
|
||||
var rules = IntelligenceRules.Default;
|
||||
rules.CovertEnabled = true;
|
||||
return new IntelligenceService(rules, () => map);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Covert_GroupRules_10InfantryOrArchers_Max2Ops_NeedsSpyTech()
|
||||
{
|
||||
var intel = SpyIntel(new FakeMap());
|
||||
Assert.IsNull(intel.CheckCovertGroup(new[] { 10, 0, 0, 0 }, 0), "10 пехотинцев -- можно");
|
||||
Assert.IsNull(intel.CheckCovertGroup(new[] { 6, 4, 0, 0 }, 0), "смесь пехоты и лучников -- можно");
|
||||
Assert.IsNotNull(intel.CheckCovertGroup(new[] { 6, 5, 0, 0 }, 0), "11 обычных бойцов -- нельзя");
|
||||
Assert.IsNotNull(intel.CheckCovertGroup(new[] { 5, 0, 1, 0 }, 0), "кавалерия -- нельзя");
|
||||
Assert.IsNotNull(intel.CheckCovertGroup(new[] { 5, 0, 0, 1 }, 0), "осадные -- нельзя");
|
||||
Assert.IsNotNull(intel.CheckCovertGroup(new[] { 5, 0, 0, 0 }, 2), "третья тайная операция -- нельзя");
|
||||
Assert.IsNotNull(Intel(new FakeMap()).CheckCovertGroup(new[] { 5, 0, 0, 0 }, 0), "без технологии «Шпион» -- нельзя");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Covert_Chance_OverlapIsMax_NotSum_Clamped()
|
||||
{
|
||||
var r = IntelligenceRules.Default;
|
||||
Assert.AreEqual(15, IntelligenceService.DetectChance(r, new[] { GuardedZoneKind.Settlement }));
|
||||
Assert.AreEqual(35, IntelligenceService.DetectChance(r, new[] { GuardedZoneKind.Settlement, GuardedZoneKind.CircleCastle }), "пересечение -- максимум, не 50");
|
||||
Assert.AreEqual(25, IntelligenceService.DetectChance(r, new[] { GuardedZoneKind.Tower, GuardedZoneKind.Tower }), "две башни не складываются");
|
||||
Assert.AreEqual(5, IntelligenceService.DetectChance(r, new[] { GuardedZoneKind.Settlement }, heroSpy: true), "15 - 10 = 5");
|
||||
r.DetectCircleCastlePercent = 95;
|
||||
Assert.AreEqual(75, IntelligenceService.DetectChance(r, new[] { GuardedZoneKind.CircleCastle }), "не больше 75%");
|
||||
r.DetectSettlementPercent = 1;
|
||||
Assert.AreEqual(5, IntelligenceService.DetectChance(r, new[] { GuardedZoneKind.Settlement }), "не меньше 5%");
|
||||
Assert.AreEqual(0, IntelligenceService.DetectChance(r, new GuardedZoneKind[0]), "вне охраняемых областей -- проверки нет");
|
||||
}
|
||||
|
||||
// Отряд стоит в охраняемой области (замок + поселение) с t0
|
||||
static FakeMap GuardedMap(long t0, int x)
|
||||
{
|
||||
var map = new FakeMap();
|
||||
map.Zones.Add(new GuardedZone { Id = "castle", X = 0, Y = 0, Kind = GuardedZoneKind.CircleCastle });
|
||||
map.Zones.Add(new GuardedZone { Id = "city", X = 2000, Y = 0, Kind = GuardedZoneKind.Settlement });
|
||||
map.Armies = t => t >= t0 ? new List<ArmyOnMap> { new ArmyOnMap { Id = "march_9", OwnerId = LocalPlayer.Id, X = x, Y = 0, Soldiers = 8 } } : new List<ArmyOnMap>();
|
||||
return map;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Covert_Detection_OnEntryThenEvery5Min_Deterministic_SameAfterReload()
|
||||
{
|
||||
long t0 = 1_000_000_000_000;
|
||||
var rules = IntelligenceRules.Default;
|
||||
var a = SpyIntel(GuardedMap(t0, 1000));
|
||||
a.StartCovert("covert_9", "march_9", t0);
|
||||
var found = a.CheckCovertUntil(t0 + 4 * 3_600_000L);
|
||||
Assert.AreEqual(1, found.Count, "за 4 часа в области замка (35% за проверку) заметят");
|
||||
long first = t0 + rules.SampleStepMs; // вход в область -- первая проверка сразу
|
||||
Assert.AreEqual(0, (found[0].TimeMs - first) % rules.DetectIntervalMs, "проверки -- при входе и каждые 5 реальных минут");
|
||||
Assert.AreEqual(found[0].Check, (int)((found[0].TimeMs - first) / rules.DetectIntervalMs) + 1);
|
||||
Assert.AreEqual(0, a.ActiveCovertOps, "обнаруженная операция -- больше не тайная");
|
||||
Assert.AreEqual(0, a.CheckCovertUntil(t0 + 8 * 3_600_000L).Count, "второй раз не обнаруживается");
|
||||
|
||||
// Та же операция, но с сохранением и загрузкой посередине -- тот же результат
|
||||
var b = SpyIntel(GuardedMap(t0, 1000));
|
||||
b.StartCovert("covert_9", "march_9", t0);
|
||||
var early = b.CheckCovertUntil(found[0].TimeMs - 1);
|
||||
Assert.AreEqual(0, early.Count);
|
||||
var c = SpyIntel(GuardedMap(t0, 1000));
|
||||
c.Restore(b.Capture());
|
||||
var late = c.CheckCovertUntil(t0 + 4 * 3_600_000L);
|
||||
Assert.AreEqual(1, late.Count);
|
||||
Assert.AreEqual(found[0].TimeMs, late[0].TimeMs, "загрузка не перебрасывает проверки");
|
||||
Assert.AreEqual(found[0].Check, late[0].Check);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Covert_OutsideGuardedZones_NeverDetected()
|
||||
{
|
||||
long t0 = 1_000_000_000_000;
|
||||
var intel = SpyIntel(GuardedMap(t0, 40000)); // далеко от замка и поселения
|
||||
intel.StartCovert("covert_9", "march_9", t0);
|
||||
Assert.AreEqual(0, intel.CheckCovertUntil(t0 + 24 * 3_600_000L).Count);
|
||||
Assert.AreEqual(1, intel.ActiveCovertOps);
|
||||
intel.EndCovert("covert_9");
|
||||
Assert.AreEqual(0, intel.ActiveCovertOps, "вернулись -- операция закончена");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void World_AbortMission_ReturnsPhysically_NoReport_NoDuplicates()
|
||||
{
|
||||
long t0 = 1_000_000_000_000;
|
||||
var world = new WorldSimulation(WorldMapLayout.CreateDefault(), new BattleSystem());
|
||||
MarchData m = world.StartMarch(LocalPlayer.Id, WorldMapLayout.PlayerCityId, WorldMapLayout.BossCastleId, 8, t0, out _, scout: true);
|
||||
world.SetRecon(m, 2, 10 * 60_000);
|
||||
world.AssignUnits(m, new[] { 8, 0, 0, 0 });
|
||||
long mid = (m.departMs + m.arriveMs) / 2;
|
||||
world.TryGetPositionAt(m, mid, out int x, out int y, out _, out _, out _);
|
||||
|
||||
Assert.IsTrue(world.AbortMission(m, mid), "обнаружены в пути");
|
||||
Assert.IsFalse(world.AbortMission(m, mid + 1000), "второй раз не прерывается");
|
||||
Assert.AreEqual(MarchState.Returning, m.state);
|
||||
Assert.AreEqual(x, m.leaveX); Assert.AreEqual(y, m.leaveY);
|
||||
Assert.IsTrue(m.returnMs > mid, "домой -- пешком от места обнаружения");
|
||||
MapNode home = world.GetNode(WorldMapLayout.PlayerCityId);
|
||||
world.TryGetPositionAt(m, (mid + m.returnMs) / 2, out int hx, out int hy, out _, out _, out _);
|
||||
Assert.IsTrue(System.Math.Abs(hx - (x + home.x) / 2) <= 1 && System.Math.Abs(hy - (y + home.y) / 2) <= 1, "на полпути домой");
|
||||
|
||||
var events = new List<WorldEvent>();
|
||||
world.Advance(m.returnMs, events);
|
||||
Assert.IsFalse(events.Exists(e => e.Type == WorldEventType.ScoutArrived || e.Type == WorldEventType.ReconCompleted), "до цели не дошли, отчёта нет");
|
||||
Assert.AreEqual(1, events.FindAll(e => e.Type == WorldEventType.MarchReturned).Count, "вернулись один раз");
|
||||
Assert.AreEqual(8, m.survivors, "без казни, плена и боя -- все вернулись");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ public class MarchManager : MonoBehaviour, IWorld, IWorldMap, ISaveParticipant
|
||||
public event Action<MarchData> OnGatherStarted; // дошли до ресурсной точки (targetEmpty -- точки уже нет)
|
||||
public event Action<MarchData> OnScoutArrived; // разведка дошла до цели и повернула домой (или начала наблюдение)
|
||||
public event Action<MarchData> OnReconCompleted; // Разведка М2: наблюдение закончено, отчёт готов
|
||||
public event Action<MarchData> OnCovertDetected; // Разведка М3: тайный отряд заметили -- миссия прервана, идут домой
|
||||
|
||||
// Время мира -- по часам игры (GameClock): перемотка "+1 час" в отладочной панели проматывает и походы.
|
||||
// Миллисекунды берём от настоящих часов, чтобы отряды на карте двигались плавно. В мультиплеере -- время сервера.
|
||||
@@ -106,7 +107,11 @@ public class MarchManager : MonoBehaviour, IWorld, IWorldMap, ISaveParticipant
|
||||
// Мир досчитывается по событиям, перед каждым шагом Разведка досчитывает наблюдение до него:
|
||||
// походы ещё на карте и их выжившие уже известны (после офлайна обратный путь тоже виден)
|
||||
events.Clear();
|
||||
World.AdvanceInSteps(now, events, t => EventBus.Publish(new WorldAdvancingEvent { ToMs = t }));
|
||||
World.AdvanceInSteps(now, events, t =>
|
||||
{
|
||||
EventBus.Publish(new WorldAdvancingEvent { ToMs = t });
|
||||
ProcessCovert(t); // М3: проверки обнаружения тайных отрядов до этого момента -- до событий мира
|
||||
});
|
||||
|
||||
foreach (var e in events)
|
||||
{
|
||||
@@ -176,6 +181,53 @@ public class MarchManager : MonoBehaviour, IWorld, IWorldMap, ISaveParticipant
|
||||
}
|
||||
|
||||
// Цель разведки с отчётом (М2): замок, соседний город, лагерь -- гарнизон, стены, что можно взять
|
||||
// ---------------- Разведка М3: охраняемые области и тайные отряды ----------------
|
||||
|
||||
// Охраняемые области: чужие поселения и замок (как «замок Круга»). Своё поселение -- нет. Башен пока нет
|
||||
public void GetGuardedZones(List<GuardedZone> result)
|
||||
{
|
||||
foreach (var n in World.Nodes)
|
||||
{
|
||||
if (n.type == MapNodeType.NeighborCity) result.Add(new GuardedZone { Id = n.id, X = n.x, Y = n.y, Kind = GuardedZoneKind.Settlement });
|
||||
else if (n.type == MapNodeType.BossCastle) result.Add(new GuardedZone { Id = n.id, X = n.x, Y = n.y, Kind = GuardedZoneKind.CircleCastle });
|
||||
}
|
||||
}
|
||||
|
||||
public bool TryGetArmyPosition(string armyId, long timeMs, out int x, out int y)
|
||||
{
|
||||
x = y = 0;
|
||||
if (!TryParseArmyId(armyId, out int id)) return false;
|
||||
MarchData m = World.FindMarch(id);
|
||||
return m != null && World.TryGetPositionAt(m, timeMs, out x, out y, out _, out _, out _);
|
||||
}
|
||||
|
||||
static string CovertId(MarchData m) => "covert_" + m.id;
|
||||
|
||||
// Обнаруженные тайные отряды -- миссия прервана, домой от места обнаружения (физически, без отчёта)
|
||||
void ProcessCovert(long t)
|
||||
{
|
||||
if (!GameServices.TryGet(out IIntelligence intel)) return;
|
||||
foreach (var d in intel.CheckCovertUntil(t))
|
||||
{
|
||||
if (!TryParseArmyId(d.ArmyId, out int id)) continue;
|
||||
MarchData m = World.FindMarch(id);
|
||||
if (m == null || !World.AbortMission(m, d.TimeMs)) continue;
|
||||
Debug.Log($"[РАЗВЕДКА] Тайный отряд заметили у «{World.TargetName(m)}» (проверка {d.Check}) -- миссия прервана, идут домой");
|
||||
OnCovertDetected?.Invoke(m);
|
||||
}
|
||||
}
|
||||
|
||||
// Тайная группа из свободных: сначала пехота, потом лучники, не больше soldiers
|
||||
static int[] PickCovertUnits(int[] free, int soldiers)
|
||||
{
|
||||
var units = new int[TroopType.Count];
|
||||
if (free == null) return units;
|
||||
int inf = Math.Min(Math.Max(0, free[TroopType.Infantry]), soldiers);
|
||||
units[TroopType.Infantry] = inf;
|
||||
units[TroopType.Archers] = Math.Min(Math.Max(0, free[TroopType.Archers]), soldiers - inf);
|
||||
return units;
|
||||
}
|
||||
|
||||
public bool TryGetReconTarget(string targetId, out ReconTarget target)
|
||||
{
|
||||
target = default;
|
||||
@@ -234,13 +286,16 @@ public class MarchManager : MonoBehaviour, IWorld, IWorldMap, ISaveParticipant
|
||||
}
|
||||
|
||||
// Разведка с отчётом (Разведка М2): уровень II или III, наблюдение у цели -- время уровня из модуля Разведки
|
||||
public bool TryStartRecon(string targetId, int soldiers, int level, out string error)
|
||||
public bool TryStartRecon(string targetId, int soldiers, int level, out string error) => TryStartRecon(targetId, soldiers, level, false, out error);
|
||||
|
||||
// covert -- тайно (Разведка М3): группа до 10 пехоты / лучников, может быть обнаружена у чужих поселений и замка
|
||||
public bool TryStartRecon(string targetId, int soldiers, int level, bool covert, out string error)
|
||||
{
|
||||
if (level < 2 || level > 3) { error = "Уровень разведки -- II или III"; return false; }
|
||||
if (!GameServices.TryGet(out IIntelligence intel)) { error = "Модуль Разведки не подключён"; return false; }
|
||||
long hold = intel.ReconDurationMs(targetId, level);
|
||||
if (hold <= 0) { error = "Разведку с отчётом можно отправить на поселение, замок или лагерь"; return false; }
|
||||
return TryStart(targetId, soldiers, true, out error, level, hold);
|
||||
return TryStart(targetId, soldiers, true, out error, level, hold, 0, covert);
|
||||
}
|
||||
|
||||
public static bool TryParseArmyId(string id, out int marchId)
|
||||
@@ -255,14 +310,16 @@ public class MarchManager : MonoBehaviour, IWorld, IWorldMap, ISaveParticipant
|
||||
|
||||
// Разведка движущейся армии (Разведка М2, ТЗ раздел 6): отряд догоняет армию, идёт рядом время наблюдения,
|
||||
// приносит отчёт и возвращается. armyId -- как в GetArmies ("march_<номер>")
|
||||
public bool TryStartArmyRecon(string armyId, int soldiers, int level, out string error)
|
||||
public bool TryStartArmyRecon(string armyId, int soldiers, int level, out string error) => TryStartArmyRecon(armyId, soldiers, level, false, out error);
|
||||
|
||||
public bool TryStartArmyRecon(string armyId, int soldiers, int level, bool covert, out string error)
|
||||
{
|
||||
if (!TryParseArmyId(armyId, out int targetMarchId)) { error = "Это не армия"; return false; }
|
||||
if (level < 2 || level > 3) { error = "Уровень разведки -- II или III"; return false; }
|
||||
if (!GameServices.TryGet(out IIntelligence intel)) { error = "Модуль Разведки не подключён"; return false; }
|
||||
long hold = intel.ReconDurationMs(armyId, level);
|
||||
if (hold <= 0) { error = "Эту армию разведать нельзя"; return false; }
|
||||
return TryStart(armyId, soldiers, true, out error, level, hold, targetMarchId);
|
||||
return TryStart(armyId, soldiers, true, out error, level, hold, targetMarchId, covert);
|
||||
}
|
||||
|
||||
// План разведки армии без старта: когда догонят, когда отчёт, когда дома (как для пехоты -- состав ещё не выбран)
|
||||
@@ -275,13 +332,23 @@ public class MarchManager : MonoBehaviour, IWorld, IWorldMap, ISaveParticipant
|
||||
return World.TryPlanArmyRecon(WorldMapLayout.PlayerCityId, targetMarchId, NowMs, hold, out meetMs, out reportMs, out homeMs, out error);
|
||||
}
|
||||
|
||||
bool TryStart(string targetId, int soldiers, bool scout, out string error, int reconLevel = 0, long reconHoldMs = 0, int targetMarchId = 0)
|
||||
bool TryStart(string targetId, int soldiers, bool scout, out string error, int reconLevel = 0, long reconHoldMs = 0, int targetMarchId = 0, bool covert = false)
|
||||
{
|
||||
if (!GameServices.TryGet(out IArmy army))
|
||||
{
|
||||
error = "Нет данных о войске -- запусти игру из города";
|
||||
return false;
|
||||
}
|
||||
// Тайная группа (М3): только пехота и лучники, не больше 10, не больше 2 операций
|
||||
int[] covertUnits = null;
|
||||
if (covert)
|
||||
{
|
||||
if (!GameServices.TryGet(out IIntelligence spy)) { error = "Модуль Разведки не подключён"; return false; }
|
||||
covertUnits = PickCovertUnits(army.AvailableUnits, soldiers);
|
||||
error = spy.CheckCovertGroup(covertUnits, spy.ActiveCovertOps);
|
||||
if (error != null) return false;
|
||||
soldiers = Sum(covertUnits);
|
||||
}
|
||||
if (army.AvailableForMarch < soldiers)
|
||||
{
|
||||
error = army.GarrisonTotal > 0
|
||||
@@ -305,7 +372,7 @@ public class MarchManager : MonoBehaviour, IWorld, IWorldMap, ISaveParticipant
|
||||
|
||||
// Отправка целиком или никак: поход существует, только если Армия действительно забрала воинов.
|
||||
// Иначе поход откатывается -- он не должен вернуть домой воинов, которых не забирал.
|
||||
if (!army.TakeForMarch(march.id, soldiers))
|
||||
if (covertUnits != null ? !army.TakeUnitsForMarch(march.id, covertUnits) : !army.TakeForMarch(march.id, soldiers))
|
||||
{
|
||||
World.CancelMarch(march.id);
|
||||
error = "Не удалось собрать войско в поход";
|
||||
@@ -313,6 +380,11 @@ public class MarchManager : MonoBehaviour, IWorld, IWorldMap, ISaveParticipant
|
||||
}
|
||||
// Состав похода -- для боя с типами войск и для скорости: время прихода по средней скорости состава
|
||||
World.AssignUnits(march, army.GetMarchUnits(march.id));
|
||||
if (covertUnits != null && GameServices.TryGet(out IIntelligence intelCovert))
|
||||
{
|
||||
march.covert = true;
|
||||
intelCovert.StartCovert(CovertId(march), "march_" + march.id, march.departMs);
|
||||
}
|
||||
if (GameServices.TryGet(out ISaveSystem save)) save.SaveNow();
|
||||
|
||||
Debug.Log($"[ПОХОД] {soldiers} солдат выступили {(scout ? "в разведку" : "на")} {World.TargetName(march)}");
|
||||
@@ -379,6 +451,7 @@ public class MarchManager : MonoBehaviour, IWorld, IWorldMap, ISaveParticipant
|
||||
// Солдаты и добыча зачисляются, только когда войско дошло до дома
|
||||
void HandleMarchReturned(MarchData march)
|
||||
{
|
||||
if (march.covert && GameServices.TryGet(out IIntelligence spyIntel)) spyIntel.EndCovert(CovertId(march));
|
||||
IArmy army = GameServices.Get<IArmy>();
|
||||
bool returned = march.survivorUnits != null && march.survivorUnits.Length == TroopType.Count
|
||||
? army.ReturnUnits(march.id, march.survivorUnits, march.woundedUnits, march.returnMs) // по типам; раненые -- в госпиталь
|
||||
|
||||
@@ -156,6 +156,41 @@ namespace Bogatyri.World
|
||||
progress = 0;
|
||||
}
|
||||
|
||||
// ---------------- Разведка М3: миссия прервана ----------------
|
||||
// Тайный отряд обнаружен в момент t: миссия прервана (без отчёта и боя), отряд физически идёт домой от места,
|
||||
// где был в этот момент. Только для своих разведок, которые ещё не идут домой
|
||||
public bool AbortMission(MarchData m, long t)
|
||||
{
|
||||
if (m == null || !m.scout || m.aborted || !marches.Contains(m)) return false;
|
||||
if (m.state != MarchState.Outbound && m.state != MarchState.Gathering) return false;
|
||||
if (!TryGetPositionAt(m, t, out int x, out int y, out _, out _, out _)) return false;
|
||||
MapNode home = GetNode(m.fromNodeId);
|
||||
if (home == null) return false;
|
||||
int[] units = HasUnits(m) ? m.units : null;
|
||||
m.aborted = true;
|
||||
m.abortMs = t;
|
||||
m.leaveX = x; m.leaveY = y;
|
||||
m.targetEmpty = true; // отчёта не будет
|
||||
m.victory = false;
|
||||
m.survivors = m.soldiers;
|
||||
m.survivorUnits = units != null ? (int[])units.Clone() : null;
|
||||
m.loot = new System.Collections.Generic.List<RewardEntry>();
|
||||
m.state = MarchState.Returning;
|
||||
m.returnMs = t + TravelTimeMs(Point(x, y), home, units);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TryGetAbortedPositionAt(MarchData m, long t, out int x, out int y, out int toX, out int toY, out int soldiers)
|
||||
{
|
||||
x = y = toX = toY = 0;
|
||||
soldiers = m.soldiers;
|
||||
MapNode home = GetNode(m.fromNodeId);
|
||||
if (home == null || m.returnMs > 0 && t >= m.returnMs) return false; // дома
|
||||
LerpXY(m.leaveX, m.leaveY, home.x, home.y, m.abortMs, m.returnMs, t, out x, out y);
|
||||
toX = home.x; toY = home.y;
|
||||
return true;
|
||||
}
|
||||
|
||||
static MapNode Point(int x, int y) => new MapNode { id = "", x = x, y = y, displayName = "" };
|
||||
|
||||
static void LerpXY(int ax, int ay, int bx, int by, long start, long end, long t, out int x, out int y)
|
||||
|
||||
@@ -155,6 +155,7 @@ namespace Bogatyri.World
|
||||
public bool TryGetPositionAt(MarchData m, long t, out int x, out int y, out int toX, out int toY, out int soldiers)
|
||||
{
|
||||
x = y = toX = toY = soldiers = 0;
|
||||
if (m.aborted && t >= m.abortMs) return TryGetAbortedPositionAt(m, t, out x, out y, out toX, out toY, out soldiers);
|
||||
if (IsArmyRecon(m)) return TryGetArmyReconPositionAt(m, t, out x, out y, out toX, out toY, out soldiers);
|
||||
MapNode home = GetNode(m.fromNodeId), target = GetNode(m.targetNodeId);
|
||||
if (home == null || target == null || t < m.departMs) return false;
|
||||
|
||||
@@ -35,6 +35,9 @@ namespace Bogatyri.World
|
||||
public int targetMarchId; // Разведка М2: цель -- движущаяся армия (номер её похода); 0 -- цель -- узел карты
|
||||
public int meetX, meetY; // где отряд перехватит армию (милли-единицы карты)
|
||||
public int leaveX, leaveY; // где наблюдение кончится -- отсюда домой
|
||||
public bool covert; // Разведка М3: тайная операция (группа до 10 пехоты / лучников)
|
||||
public bool aborted; // миссию прервали (тайный отряд обнаружен): с abortMs идут домой от leaveX/leaveY
|
||||
public long abortMs;
|
||||
public long gatherEndMs; // когда сбор закончится (груз полон, точка истощена или исчезла)
|
||||
public int cargo; // сколько ресурса несёт войско (известно с начала сбора)
|
||||
public int defenders; // гарнизон цели в момент боя
|
||||
@@ -548,6 +551,14 @@ namespace Bogatyri.World
|
||||
// Где сейчас войско (для отрисовки). Возвращает долю пути 0..1 и точки начала/конца отрезка.
|
||||
public void GetMarchSegment(MarchData m, long nowMs, out MapNode segmentFrom, out MapNode segmentTo, out double progress)
|
||||
{
|
||||
if (m.aborted && nowMs >= m.abortMs)
|
||||
{
|
||||
// миссия прервана -- идут домой от места, где их заметили
|
||||
segmentFrom = Point(m.leaveX, m.leaveY);
|
||||
segmentTo = GetNode(m.fromNodeId);
|
||||
progress = m.returnMs > m.abortMs ? Math.Min(1.0, Math.Max(0.0, (nowMs - m.abortMs) / (double)(m.returnMs - m.abortMs))) : 1.0;
|
||||
return;
|
||||
}
|
||||
if (IsArmyRecon(m)) { GetArmyReconSegment(m, nowMs, out segmentFrom, out segmentTo, out progress); return; }
|
||||
MapNode home = GetNode(m.fromNodeId);
|
||||
MapNode target = GetNode(m.targetNodeId);
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b6bbf7a2c03f7634e98cbddcadb423da
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,60 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class UINavigation : MonoBehaviour
|
||||
{
|
||||
[Header("Родитель панелей (например, HUD_Canvas или PanelsContainer)")]
|
||||
[SerializeField] private Transform panelsRoot;
|
||||
|
||||
// Публичные методы для кнопок (вешаем в OnClick)
|
||||
public void OpenHome() => ShowPanel("Panel_Home");
|
||||
public void OpenHero() => ShowPanel("Panel_Hero");
|
||||
public void OpenArena() => ShowPanel("Panel_Arena");
|
||||
public void OpenBattle() => ShowPanel("Panel_Battle");
|
||||
public void OpenTroops() => ShowPanel("Panel_Troops");
|
||||
public void OpenShop() => ShowPanel("Panel_Shop");
|
||||
public void OpenMail() => ShowPanel("Panel_Mail");
|
||||
public void OpenMissions() => ShowPanel("Panel_Missions");
|
||||
public void OpenProfile() => ShowPanel("Panel_Profile");
|
||||
public void OpenReward() => ShowPanel("Panel_Reward");
|
||||
public void OpenEvents() => ShowPanel("Panel_Events");
|
||||
|
||||
private void ShowPanel(string panelName)
|
||||
{
|
||||
GameObject target = null; // Объявляем переменную ОДИН раз в начале метода
|
||||
|
||||
// Вариант 1: Если задан родитель, ищем только внутри него
|
||||
if (panelsRoot != null)
|
||||
{
|
||||
Transform found = panelsRoot.Find(panelName);
|
||||
if (found != null)
|
||||
target = found.gameObject;
|
||||
}
|
||||
// Вариант 2: Если родителя нет, ищем по всей сцене
|
||||
else
|
||||
{
|
||||
target = GameObject.Find(panelName);
|
||||
}
|
||||
|
||||
// Если панель найдена — показываем её
|
||||
if (target != null)
|
||||
{
|
||||
HideAllPanels();
|
||||
target.SetActive(true);
|
||||
Debug.Log("Открыта панель: " + panelName);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("Не удалось найти панель с именем: " + panelName + ". Проверь название!");
|
||||
}
|
||||
}
|
||||
|
||||
private void HideAllPanels()
|
||||
{
|
||||
if (panelsRoot == null) return;
|
||||
|
||||
foreach (Transform child in panelsRoot)
|
||||
{
|
||||
child.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 44d831ce8edf82d4393ffaae110a0ed2
|
||||
@@ -113,7 +113,7 @@ public static class ArmiesWindow
|
||||
switch (m.state)
|
||||
{
|
||||
case MarchState.Outbound:
|
||||
action = m.scout ? $"идёт в разведку: <b>{target}</b>"
|
||||
action = m.scout ? $"идёт в разведку{(m.covert ? " (тайно)" : "")}: <b>{target}</b>"
|
||||
: m.gather ? $"идёт на сбор: <b>{target}</b>" : $"идёт в бой: <b>{target}</b>";
|
||||
timer = $"до цели {Clock(m.arriveMs - now)}, вернётся примерно через {Clock(ExpectedReturn(m) - now)}";
|
||||
break;
|
||||
@@ -122,7 +122,7 @@ public static class ArmiesWindow
|
||||
timer = $"сбор ещё {Clock(m.gatherEndMs - now)}, вернётся через {Clock(ExpectedReturn(m) - now)}";
|
||||
break;
|
||||
default:
|
||||
action = (m.scout ? "возвращается из разведки: " : m.gather ? "возвращается со сбора: "
|
||||
action = (m.aborted ? "разведчиков заметили, возвращаются: " : m.scout ? "возвращается из разведки: " : m.gather ? "возвращается со сбора: "
|
||||
: m.victory ? "возвращается с победой: " : "возвращается: ") + $"<b>{target}</b>";
|
||||
timer = $"дома через {Clock(m.returnMs - now)}";
|
||||
break;
|
||||
|
||||
@@ -53,6 +53,9 @@ public static class ReconReportText
|
||||
// пойдёт рядом время наблюдения и вернётся с отчётом. Воинов -- до ArmyReconSoldiers из свободных
|
||||
public const int ArmyReconSoldiers = 10;
|
||||
|
||||
// Тайный режим разведки (Разведка М3): общий для окна атаки и окна чужой армии
|
||||
public static bool CovertMode;
|
||||
|
||||
public static void OpenArmyWindow(KnownContact army, System.Action<string> hint)
|
||||
{
|
||||
var card = UIKit.Modal("ЧУЖАЯ АРМИЯ", out GameObject root);
|
||||
@@ -64,6 +67,14 @@ public static class ReconReportText
|
||||
|
||||
int free = GameServices.TryGet(out IArmy myArmy) ? myArmy.AvailableForMarch : 0;
|
||||
int soldiers = Mathf.Min(ArmyReconSoldiers, free);
|
||||
bool spy = GameServices.TryGet(out IIntelligence spyIntel) && spyIntel.CovertEnabled;
|
||||
if (spy)
|
||||
UIKit.Button(card, CovertMode ? "Тайно: ВКЛ (до 10 пехоты и лучников)" : "Тайно: выкл", CovertMode ? UIKit.Theme.Green : UIKit.Theme.Gray, () =>
|
||||
{
|
||||
CovertMode = !CovertMode;
|
||||
Object.Destroy(root);
|
||||
OpenArmyWindow(army, hint);
|
||||
}, -1, 70, 24);
|
||||
UIKit.Text(card, soldiers > 0 ? $"Отправить {soldiers} воинов: догонят армию, пойдут рядом и вернутся с отчётом. Без боя."
|
||||
: "Нет свободных воинов для разведки", 22, UIKit.Theme.TextDim, TextAlignmentOptions.Center);
|
||||
for (int level = 2; level <= 3; level++)
|
||||
@@ -75,8 +86,9 @@ public static class ReconReportText
|
||||
UIKit.Text(card, $"Разведка {name}: {plan}", 22, ok ? UIKit.Theme.Text : UIKit.Theme.Gold, TextAlignmentOptions.Center);
|
||||
var b = UIKit.Button(card, $"Разведка {name}", ok && soldiers > 0 ? UIKit.Theme.Blue : UIKit.Theme.Gray, () =>
|
||||
{
|
||||
bool started = MarchManager.Instance.TryStartArmyRecon(army.ArmyId, soldiers, lv, out string err);
|
||||
hint?.Invoke(started ? $"Разведка {name}: {soldiers} воинов идут догонять армию" : "Разведка не начата: " + err);
|
||||
bool covert = spy && CovertMode;
|
||||
bool started = MarchManager.Instance.TryStartArmyRecon(army.ArmyId, soldiers, lv, covert, out string err);
|
||||
hint?.Invoke(started ? $"Разведка {name}{(covert ? " (тайно)" : "")}: воины идут догонять армию" : "Разведка не начата: " + err);
|
||||
Object.Destroy(root);
|
||||
}, -1, 80, 26);
|
||||
b.interactable = ok && soldiers > 0;
|
||||
|
||||
@@ -4,13 +4,11 @@ using UnityEngine.SceneManagement;
|
||||
// Переходы город <-> карта мира
|
||||
public static class SceneNavigator
|
||||
{
|
||||
// Город -- 3D-поселение (решение 05.11). Старый 2D-город (MVP1) исключён из сборки; если его открыть в редакторе,
|
||||
// с карты мира вернёт в него же (lastCityScene)
|
||||
// Город -- 3D-поселение (решение 05.11; 2D-город MVP1 удалён 06.11)
|
||||
public const string CitySceneName = "City3D";
|
||||
public const string OldCitySceneName = "MVP1";
|
||||
public const string WorldMapSceneName = "WorldMap";
|
||||
|
||||
// Из какого города ушли на карту мира: 2D (MVP1) или 3D (City3D) -- туда и возвращаемся (05.11)
|
||||
// Из какой сцены города ушли на карту мира -- туда и возвращаемся
|
||||
static string lastCityScene = CitySceneName;
|
||||
|
||||
public static void OpenWorldMap()
|
||||
@@ -33,8 +31,7 @@ public static class SceneNavigator
|
||||
public static void ReturnToCity()
|
||||
{
|
||||
if (SaveManager.Instance != null) SaveManager.Instance.SaveGame();
|
||||
string city = Application.CanStreamedLevelBeLoaded(lastCityScene) ? lastCityScene
|
||||
: Application.CanStreamedLevelBeLoaded(CitySceneName) ? CitySceneName : OldCitySceneName;
|
||||
string city = Application.CanStreamedLevelBeLoaded(lastCityScene) ? lastCityScene : CitySceneName;
|
||||
SceneManager.LoadScene(city);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,6 +131,7 @@ public class WorldMapController : MonoBehaviour
|
||||
MarchManager.Instance.OnGatherStarted += HandleGatherStarted;
|
||||
MarchManager.Instance.OnScoutArrived += HandleScoutArrived;
|
||||
MarchManager.Instance.OnReconCompleted += HandleReconCompleted;
|
||||
MarchManager.Instance.OnCovertDetected += HandleCovertDetected;
|
||||
MarchManager.Instance.OnMarchReturned += HandleMarchReturned;
|
||||
}
|
||||
|
||||
@@ -141,6 +142,7 @@ public class WorldMapController : MonoBehaviour
|
||||
MarchManager.Instance.OnGatherStarted -= HandleGatherStarted;
|
||||
MarchManager.Instance.OnScoutArrived -= HandleScoutArrived;
|
||||
MarchManager.Instance.OnReconCompleted -= HandleReconCompleted;
|
||||
MarchManager.Instance.OnCovertDetected -= HandleCovertDetected;
|
||||
MarchManager.Instance.OnMarchReturned -= HandleMarchReturned;
|
||||
}
|
||||
|
||||
@@ -200,6 +202,30 @@ public class WorldMapController : MonoBehaviour
|
||||
Place(scoutButton, -110f);
|
||||
Place(scout3Button, 110f);
|
||||
Place(sendButton, 330f);
|
||||
|
||||
// «Тайно» (Разведка М3) -- над кнопками разведки: группа до 10 пехоты / лучников, может быть обнаружена
|
||||
covertButton = CopyOfSend("CovertButton", CovertLabel, () =>
|
||||
{
|
||||
ReconReportText.CovertMode = !ReconReportText.CovertMode;
|
||||
RefreshCovertButton();
|
||||
});
|
||||
var crt = (RectTransform)covertButton.transform;
|
||||
var srt = (RectTransform)scoutButton.transform;
|
||||
crt.anchoredPosition = srt.anchoredPosition + new Vector2(110f, srt.rect.height + 12f);
|
||||
crt.sizeDelta = new Vector2(420f, srt.sizeDelta.y);
|
||||
RefreshCovertButton();
|
||||
}
|
||||
|
||||
private Button covertButton;
|
||||
static string CovertLabel => ReconReportText.CovertMode ? "Тайно: ВКЛ (до 10 пехоты и лучников)" : "Тайно: выкл";
|
||||
|
||||
void RefreshCovertButton()
|
||||
{
|
||||
if (covertButton == null) return;
|
||||
bool can = GameServices.TryGet(out IIntelligence intel) && intel.CovertEnabled;
|
||||
covertButton.gameObject.SetActive(can && selectedTarget != null && selectedTarget.type != MapNodeType.ResourcePoint);
|
||||
var label = covertButton.GetComponentInChildren<TMP_Text>();
|
||||
if (label != null) label.text = CovertLabel;
|
||||
}
|
||||
|
||||
Button CopyOfSend(string name, string text, UnityEngine.Events.UnityAction onClick)
|
||||
@@ -226,10 +252,13 @@ public class WorldMapController : MonoBehaviour
|
||||
if (selectedTarget == null) return;
|
||||
int soldiers = (int)soldiersSlider.value;
|
||||
bool point = selectedTarget.type == MapNodeType.ResourcePoint;
|
||||
// Тайно (М3) -- не больше 10: лишних с ползунка не берём
|
||||
if (!point && ReconReportText.CovertMode && GameServices.TryGet(out IIntelligence spyIntel) && spyIntel.CovertEnabled)
|
||||
soldiers = Mathf.Min(soldiers, spyIntel.CovertMaxSoldiers);
|
||||
string error;
|
||||
bool ok = point
|
||||
? MarchManager.Instance.TryStartScout(selectedTarget.id, soldiers, out error)
|
||||
: MarchManager.Instance.TryStartRecon(selectedTarget.id, soldiers, level, out error);
|
||||
: MarchManager.Instance.TryStartRecon(selectedTarget.id, soldiers, level, ReconReportText.CovertMode, out error);
|
||||
long hold = !point && GameServices.TryGet(out IIntelligence intel) ? intel.ReconDurationMs(selectedTarget.id, level) : 0;
|
||||
hintText.text = ok
|
||||
? point ? $"Разведка выступила: {soldiers} воинов идут к цели «{selectedTarget.displayName}» и вернутся без боя"
|
||||
@@ -596,6 +625,7 @@ public class WorldMapController : MonoBehaviour
|
||||
scout3Button.gameObject.SetActive(!pointTarget); // у точки отчёта нет -- только дойти и вернуться
|
||||
scout3Button.interactable = available > 0 && slotFree;
|
||||
}
|
||||
RefreshCovertButton();
|
||||
UpdateSoldiersToSendText();
|
||||
RefreshAttackConditions(); // путь -- по составу при выбранном числе воинов
|
||||
|
||||
@@ -858,6 +888,13 @@ public class WorldMapController : MonoBehaviour
|
||||
EnqueuePopup(title, body);
|
||||
}
|
||||
|
||||
// Разведка М3: тайный отряд заметили -- миссия прервана, отряд идёт домой (без отчёта, без боя)
|
||||
void HandleCovertDetected(MarchData march)
|
||||
{
|
||||
EnqueuePopup("РАЗВЕДЧИКОВ ЗАМЕТИЛИ",
|
||||
$"Тайный отряд ({march.soldiers} воинов) заметили у цели «{World.TargetName(march)}». Миссия прервана: разведчики возвращаются домой, отчёта не будет.");
|
||||
}
|
||||
|
||||
void HandleReconCompleted(MarchData march)
|
||||
{
|
||||
if (GameServices.TryGet(out IIntelligence intel) && intel.TryGetLatestReport(MarchManager.ReconTargetId(march), out var report))
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e828cbb532392fa40b505fcda926a1dd
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6f60de2605414fc4799142cbf40ae06d
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user