45 lines
1.8 KiB
C#
45 lines
1.8 KiB
C#
using System;
|
|
using Actions;
|
|
using UnityEngine;
|
|
|
|
public class CameraManager : MonoBehaviour {
|
|
[SerializeField] private GameObject actionCameraGameObject;
|
|
private void Awake() => HideActionCamera();
|
|
private const float shoulderOffsetAmount = .5f;
|
|
private readonly Vector3 cameraCharacterHeight = Vector3.up * 1.7f;
|
|
|
|
private void Start() {
|
|
BaseAction.OnAnyActionStarted += BaseAction_OnAnyActionStarted;
|
|
BaseAction.OnAnyActionEnded += BaseAction_OnAnyActionEnded;
|
|
}
|
|
|
|
private void BaseAction_OnAnyActionStarted(object sender, EventArgs e) {
|
|
switch (sender) {
|
|
case ShootAction shootAction:
|
|
Unit shooterUnit = shootAction.Unit;
|
|
Unit targetUnit = shootAction.TargetUnit;
|
|
|
|
Vector3 shootDir = (targetUnit.GetWorldPosition() - shooterUnit.GetWorldPosition()).normalized;
|
|
Vector3 shoulderOffset = Quaternion.Euler(0, 90, 0) * shootDir * shoulderOffsetAmount;
|
|
Vector3 actionCameraPosition = shooterUnit.GetWorldPosition() + cameraCharacterHeight + shoulderOffset + (shootDir * -1);
|
|
|
|
actionCameraGameObject.transform.position = actionCameraPosition;
|
|
actionCameraGameObject.transform.LookAt(targetUnit.GetWorldPosition() + cameraCharacterHeight);
|
|
|
|
ShowActionCamera();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void BaseAction_OnAnyActionEnded(object sender, EventArgs e) {
|
|
switch (sender) {
|
|
case ShootAction:
|
|
HideActionCamera();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void ShowActionCamera() => actionCameraGameObject.SetActive(true);
|
|
private void HideActionCamera() => actionCameraGameObject.SetActive(false);
|
|
}
|