3D: камера в пределах открытых зон, при отдалении видна вся зона, плавный зум, без тапа после щипка; MVP1 не возвращается в сборку; навыки героя без символа, которого нет в шрифте
This commit is contained in:
@@ -199,6 +199,7 @@ public class City3DController : MonoBehaviour, City3DSave.ILive
|
||||
if (d == null) MoveFrom2D(); // 3D-города в сохранении ещё нет, а 2D есть -- перенести постройки игрока
|
||||
}
|
||||
else if (pendingFrom2D.Count > 0) PlacePendingFrom2D(); // здания из 2D, которые ждали места
|
||||
UpdateCameraArea();
|
||||
UpdateGrass();
|
||||
RefreshGround();
|
||||
if (CitySync.Instance != null) CitySync.Instance.SyncNow();
|
||||
@@ -349,6 +350,7 @@ public class City3DController : MonoBehaviour, City3DSave.ILive
|
||||
cameraRig = cam.GetComponent<City3DCamera>() ?? cam.gameObject.AddComponent<City3DCamera>();
|
||||
cameraRig.bounds = new Rect(2, 2, City3DLayout.Size - 4, City3DLayout.Size - 4);
|
||||
cameraRig.target = new Vector3(City3DLayout.Size / 2f, 0, City3DLayout.Size / 2f);
|
||||
UpdateCameraArea();
|
||||
cameraRig.Apply();
|
||||
|
||||
Map3D.SetUpLook(cam, 30f, 85f); // солнце, небо, дымка вдали
|
||||
@@ -696,8 +698,7 @@ public class City3DController : MonoBehaviour, City3DSave.ILive
|
||||
{
|
||||
ghostX = fx; ghostY = fy; ghostRot = frot;
|
||||
// камера плавно подъезжает к месту, не меняя приближения
|
||||
float size = cameraRig.distance / 1.15f;
|
||||
cameraRig.FocusOn(new Rect(fx + t.W / 2f - size / 2f, fy + t.H / 2f - size / 2f, size, size));
|
||||
cameraRig.MoveTo(new Vector3(fx + t.W / 2f, 0, fy + t.H / 2f));
|
||||
}
|
||||
EnsureFootprint();
|
||||
RefreshGround();
|
||||
@@ -830,7 +831,9 @@ public class City3DController : MonoBehaviour, City3DSave.ILive
|
||||
Vector3 pos;
|
||||
if (Input.touchCount > 0)
|
||||
{
|
||||
if (Input.touchCount > 1) { cameraRig.EndPan(); draggingGhost = false; return; } // два пальца -- зум камеры
|
||||
// два пальца -- зум камеры. Касание считается перетаскиванием: когда пальцы отпустят, это не тап
|
||||
// (иначе после щипка открывалось окно здания под оставшимся пальцем) (06.11)
|
||||
if (Input.touchCount > 1) { cameraRig.EndPan(); draggingGhost = false; pointerMoved = true; return; }
|
||||
Touch touch = Input.GetTouch(0);
|
||||
pos = touch.position;
|
||||
down = touch.phase == TouchPhase.Began;
|
||||
@@ -974,6 +977,7 @@ public class City3DController : MonoBehaviour, City3DSave.ILive
|
||||
int before = townHallLevel;
|
||||
townHallLevel = Mathf.Clamp(level, 1, 5);
|
||||
if (townHallLevel == before) return;
|
||||
UpdateCameraArea();
|
||||
RefreshGround();
|
||||
if (ghost != null) UpdateGhost();
|
||||
if (townHallLevel > before)
|
||||
@@ -986,6 +990,14 @@ public class City3DController : MonoBehaviour, City3DSave.ILive
|
||||
}
|
||||
}
|
||||
|
||||
// Камера: центр кадра -- только над открытой зоной, при самом дальнем отдалении видна вся зона (06.11)
|
||||
void UpdateCameraArea()
|
||||
{
|
||||
if (cameraRig == null) return;
|
||||
int half = City3DLayout.ZoneHalfSize(townHallLevel), c = City3DLayout.Size / 2;
|
||||
cameraRig.SetOpenArea(new Rect(c - half, c - half, half * 2, half * 2));
|
||||
}
|
||||
|
||||
void Say(string text)
|
||||
{
|
||||
message = text;
|
||||
|
||||
Reference in New Issue
Block a user