- Золотой рудник, Кристалл, Терем: цены, уровни Ратуши и компоненты как в 2D - Перенос: нет 3D-города в сохранении, есть 2D -- Ратуша с уровнем и улучшением, здания с уровнями и стройками; секция settlement не меняется - Камера перспективная (City3DCamera.perspective, поле зрения 40 -- ТЕСТ) - Город -- City3D; MVP1 выключена в Build Settings, код и сцена 2D остаются - Меню стройки в два столбца Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
54 lines
2.2 KiB
C#
54 lines
2.2 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
// ТЕРЕМ БОГАТЫРЯ -- дом героя в городе.
|
|
// - Пока Терем построен, у его ворот появляется герой и гуляет по свободным клеткам города (HeroWalker).
|
|
// Тап по герою или по Терему -- окно героя (App/BuildingWindow): уровень, сила, бонус армии, навыки, улучшение.
|
|
// - Механику героя не меняет: уровень, цена улучшения и бонусы те же, что в панели "Герой" (GameProgress).
|
|
// Нужен ли Терем для улучшения героя, даёт ли уровни и сколько стоит -- решает Дима (сейчас ТЕСТ).
|
|
// - Терем один на город: второй ничего не добавляет, герой живёт у первого.
|
|
// Вешается на копию обычного здания (HeroCastleBootstrap).
|
|
public class HeroCastle : MonoBehaviour
|
|
{
|
|
public static readonly List<HeroCastle> All = new List<HeroCastle>();
|
|
public static int Count => All.Count;
|
|
public static HeroCastle Main => All.Count > 0 ? All[0] : null;
|
|
|
|
void OnEnable()
|
|
{
|
|
if (!All.Contains(this)) All.Add(this);
|
|
}
|
|
|
|
void OnDisable()
|
|
{
|
|
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;
|
|
|
|
void OnMouseDown()
|
|
{
|
|
downPos = Input.mousePosition;
|
|
}
|
|
|
|
// Тап (а не перетаскивание камеры) -- окно героя
|
|
void OnMouseUpAsButton()
|
|
{
|
|
if (UIBlocker.IsPointerOverUI()) return;
|
|
if ((Input.mousePosition - downPos).magnitude > 25f) return;
|
|
BuildingWindow.Open(gameObject);
|
|
}
|
|
}
|