using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
using StarterAssets;
using UnityEngine.InputSystem;
using Unity.VisualScripting;
using TMPro;
public class TPPController : MonoBehaviour
{
[SerializeField]
private CinemachineVirtualCamera aimVirtualCamera;
[SerializeField]
private float normalSensitivity;
[SerializeField]
private float aimSensitivity;
[SerializeField]
private LayerMask aimColliderLayermask = new LayerMask();
[SerializeField]
private Transform pfBulletProjectile;
[SerializeField]
private Transform firePoint;
public bool hitTarget;
[SerializeField]
private float damage;
TargetManager targetManager;
private int shots = 1;
private int accurateShot = 1;
[SerializeField]
private TextMeshProUGUI percentage;
[SerializeField]
private GameObject targetPf;
[SerializeField]
private Transform vfxGreen;
[SerializeField]
private Transform vfxRed;
private StarterAssetsInputs starterAssetsInputs;
private ThirdPersonController thirdPersonController;
private Animator animator;
private void Awake()
{
starterAssetsInputs = GetComponent<StarterAssetsInputs>();
thirdPersonController = GetComponent<ThirdPersonController>();
animator = GetComponent<Animator>();
targetManager = GetComponent<TargetManager>();
}
private void Update()
{
//lifeTime += Time.deltaTime;
//TargetLife();
Vector3 mouseWorldPosition = Vector3.zero;
Vector2 screenCenterPoint = new Vector2(Screen.width / 2f, Screen.height / 2f);
Ray hitInfo = Camera.main.ScreenPointToRay(screenCenterPoint);
Transform hitTransform = null;
if (Physics.Raycast(hitInfo, out RaycastHit rayCastHit, 999f, aimColliderLayermask))
{
//debugTransform.position = rayCastHit.point;
mouseWorldPosition = rayCastHit.point;
hitTransform = rayCastHit.transform;
}
if(starterAssetsInputs.aim)
{
aimVirtualCamera.gameObject.SetActive(true);
thirdPersonController.SetSensitivity(aimSensitivity);
thirdPersonController.SetRotateOnMove(false);
animator.SetLayerWeight(1, Mathf.Lerp(animator.GetLayerWeight(1),1f,Time.deltaTime * 13f));
Vector3 worldAimTarget = mouseWorldPosition;
worldAimTarget.y = transform.position.y;
Vector3 aimDirection = (worldAimTarget - transform.position).normalized;
transform.forward = Vector3.Lerp(transform.forward, aimDirection, Time.deltaTime * 20f);
}
else
{
aimVirtualCamera.gameObject.SetActive(false);
thirdPersonController.SetSensitivity(normalSensitivity);
thirdPersonController.SetRotateOnMove(true);
animator.SetLayerWeight(1, Mathf.Lerp(animator.GetLayerWeight(1), 0f, Time.deltaTime * 13f));
}
if(starterAssetsInputs.shoot)
{
shots++;
if (hitTransform != null)
{
if (hitTransform.GetComponent<BulletTarget>() != null)
{
Instantiate(vfxGreen, mouseWorldPosition, Quaternion.identity);
hitTarget = true;
targetManager.TargetLife(targetPf,hitTarget,damage);
accurateShot++;
}
else
{
Instantiate(vfxRed, mouseWorldPosition, Quaternion.identity);
//HitTarget=false;
}
}
//Projectile
/*
Vector3 aimDirection = (mouseWorldPosition - firePoint.position).normalized;
Instantiate(pfBulletProjectile, firePoint.position, Quaternion.LookRotation(aimDirection,Vector3.up));
*/
starterAssetsInputs.shoot = false;
}
Accuracy();
}
public void Accuracy() {
float ratio = (accurateShot * 100) / shots;
percentage.text = string.Format("{0}%",ratio);
}
}