init new repos

This commit is contained in:
sShemet
2025-10-19 19:04:50 +05:00
commit 3d8e1e80cd
868 changed files with 103076 additions and 0 deletions

View File

@@ -0,0 +1,131 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
[Header("Camera Settings")]
public float cameraHeight = 600f; // Высота камеры над целью
public float cameraDistance = 700f; // Расстояние от камеры до цели
public float rotationSpeed = 5f; // Скорость плавного поворота
public Vector3 cameraTargetPoint; // Точка, на которую смотрит камера
public uint sourceX;
public uint sourceY;
public uint sourceZ;
public int currentCameraRotation = 0; // Текущий угол вращения (0-7)
private bool isCameraRotating = false;
private Quaternion targetCameraRotation;
public void SetCamTargetXY(uint rotate, uint xx, uint yy, uint zz)
{
sourceX = xx;
sourceY = yy;
sourceZ = zz;
float targetX = (int)xx;
float targetY = (int)yy;
float targetZ = (int)zz;
// Устанавливаем целевую точку
cameraTargetPoint = new Vector3(targetX, targetY, targetZ);
// Преобразуем вращение (0-7 в 0-315 градусов с шагом 45)
float targetAngle = ResourceManager.ConvertGameRotation(rotate);
// Обновляем текущее вращение
currentCameraRotation = (int)rotate;
// Немедленно устанавливаем позицию и вращение камеры
UpdateCameraPositionImmediate(targetAngle);
//Debug.Log($"Camera target: {cameraTargetPoint}, Rotation: {targetAngle}° (index: {rotate})");
}
// Немедленное обновление позиции камеры
private void UpdateCameraPositionImmediate(float angle)
{
// Преобразуем угол в радианы
float radAngle = angle * Mathf.Deg2Rad;
// Вычисляем смещение камеры от целевой точки
Vector3 cameraOffset = new Vector3(
Mathf.Sin(radAngle) * cameraDistance,
cameraHeight, // Фиксированная высота над целью
Mathf.Cos(radAngle) * cameraDistance
);
// Устанавливаем позицию камеры
transform.position = cameraTargetPoint + cameraOffset;
// Камера всегда смотрит на целевую точку
transform.LookAt(cameraTargetPoint);
}
// Метод для плавного поворота камеры на заданный угол (если понадобится)
public void RotateCameraSmoothly(int targetRotationIndex)
{
if (isCameraRotating) return;
targetRotationIndex = targetRotationIndex % 8;
if (targetRotationIndex == currentCameraRotation) return;
StartCoroutine(SmoothRotationCoroutine(targetRotationIndex));
}
// Корутина для плавного вращения
private IEnumerator SmoothRotationCoroutine(int targetRotationIndex)
{
isCameraRotating = true;
float startAngle = currentCameraRotation * 45f;
float targetAngle = targetRotationIndex * 45f;
float progress = 0f;
// Корректируем для кратчайшего пути вращения
float angleDifference = Mathf.DeltaAngle(startAngle, targetAngle);
if (Mathf.Abs(angleDifference) > 180f)
{
targetAngle = startAngle + (angleDifference > 0 ? angleDifference - 360f : angleDifference + 360f);
}
Vector3 startPosition = transform.position;
while (progress < 1f)
{
progress += Time.deltaTime * rotationSpeed;
float currentAngle = Mathf.Lerp(startAngle, targetAngle, progress);
// Обновляем позицию камеры
float radAngle = currentAngle * Mathf.Deg2Rad;
Vector3 cameraOffset = new Vector3(
Mathf.Sin(radAngle) * cameraDistance,
cameraHeight,
Mathf.Cos(radAngle) * cameraDistance
);
transform.position = cameraTargetPoint + cameraOffset;
transform.LookAt(cameraTargetPoint);
yield return null;
}
// Финализируем позицию
currentCameraRotation = targetRotationIndex;
UpdateCameraPositionImmediate(targetRotationIndex * 45f);
isCameraRotating = false;
}
// Update is called once per frame
void Update()
{
}
}