add ckg
plantilla base para movimiento básico
This commit is contained in:
173
Assets/Game Kit Controller/Scripts/Vehicles/vehicleLaser.cs
Normal file
173
Assets/Game Kit Controller/Scripts/Vehicles/vehicleLaser.cs
Normal file
@@ -0,0 +1,173 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class vehicleLaser : laser
|
||||
{
|
||||
[Space]
|
||||
[Header ("Main Settings")]
|
||||
[Space]
|
||||
|
||||
public float laserDamage = 0.3f;
|
||||
public float laserDamageRate = 0.5f;
|
||||
public bool ignoreShield;
|
||||
|
||||
public int damageTypeID = -1;
|
||||
|
||||
public bool damageCanBeBlocked = true;
|
||||
|
||||
public bool usingCustomRayPosition;
|
||||
|
||||
[Space]
|
||||
[Header ("Components")]
|
||||
[Space]
|
||||
|
||||
public LayerMask layer;
|
||||
public GameObject hitParticles;
|
||||
public GameObject hitSparks;
|
||||
public GameObject vehicle;
|
||||
public GameObject vehicleCamera;
|
||||
|
||||
[Space]
|
||||
|
||||
public Transform mainCameraTransform;
|
||||
|
||||
public vehicleCameraController vehicleCameraManager;
|
||||
public vehicleHUDManager vehicleHUD;
|
||||
|
||||
public GameObject currentDriver;
|
||||
|
||||
|
||||
RaycastHit hit;
|
||||
bool laserActive;
|
||||
|
||||
Vector3 laserPosition;
|
||||
|
||||
float lastTimeDamageActive;
|
||||
|
||||
Vector3 customRayPosition;
|
||||
|
||||
Vector3 customRayDirection;
|
||||
|
||||
bool vehicleCameraManagerLocated;
|
||||
|
||||
|
||||
|
||||
|
||||
void Start ()
|
||||
{
|
||||
changeLaserState (false);
|
||||
}
|
||||
|
||||
void Update ()
|
||||
{
|
||||
if (laserActive) {
|
||||
//check the hit collider of the raycast
|
||||
if (vehicleCameraManagerLocated) {
|
||||
mainCameraTransform = vehicleCameraManager.getCurrentCameraTransform ();
|
||||
}
|
||||
|
||||
Vector3 raycastPosition = mainCameraTransform.position;
|
||||
Vector3 raycastDirection = mainCameraTransform.forward;
|
||||
|
||||
if (usingCustomRayPosition) {
|
||||
raycastPosition = customRayPosition - customRayDirection * 0.2f;
|
||||
raycastDirection = customRayDirection;
|
||||
}
|
||||
|
||||
if (Physics.Raycast (raycastPosition, raycastDirection, out hit, Mathf.Infinity, layer)) {
|
||||
// Debug.DrawRay (transform.position, hit.distance * raycastDirection, Color.red);
|
||||
|
||||
Vector3 surfacePoint = hit.point;
|
||||
|
||||
// if (usingCustomRayPosition) {
|
||||
// surfacePoint = customRayPosition;
|
||||
// }
|
||||
|
||||
transform.LookAt (surfacePoint);
|
||||
|
||||
if (Time.time > laserDamageRate + lastTimeDamageActive) {
|
||||
applyDamage.checkHealth (gameObject, hit.collider.gameObject, laserDamage, -transform.forward, (surfacePoint - (hit.normal / 4)),
|
||||
currentDriver, true, true, ignoreShield, false, damageCanBeBlocked, false, -1, damageTypeID);
|
||||
|
||||
lastTimeDamageActive = Time.time;
|
||||
}
|
||||
|
||||
//set the sparks and .he smoke in the hit point
|
||||
laserDistance = hit.distance;
|
||||
|
||||
if (!hitSparks.activeSelf) {
|
||||
hitSparks.SetActive (true);
|
||||
}
|
||||
|
||||
if (!hitParticles.activeSelf) {
|
||||
hitParticles.SetActive (true);
|
||||
}
|
||||
|
||||
hitParticles.transform.position = surfacePoint + 0.02f * (transform.position - surfacePoint);
|
||||
hitParticles.transform.rotation = Quaternion.identity;
|
||||
hitSparks.transform.rotation = Quaternion.LookRotation (hit.normal, transform.up);
|
||||
laserPosition = surfacePoint;
|
||||
} else {
|
||||
//if the laser does not hit anything, disable the particles and set the hit point
|
||||
if (hitSparks.activeSelf) {
|
||||
hitSparks.SetActive (false);
|
||||
}
|
||||
|
||||
if (hitParticles.activeSelf) {
|
||||
hitParticles.SetActive (false);
|
||||
}
|
||||
|
||||
laserDistance = 1000;
|
||||
|
||||
Quaternion lookDir = Quaternion.LookRotation (raycastDirection);
|
||||
|
||||
transform.rotation = lookDir;
|
||||
laserPosition = (laserDistance * transform.forward);
|
||||
}
|
||||
|
||||
usingCustomRayPosition = false;
|
||||
|
||||
//set the size of the laser, according to the hit position
|
||||
lRenderer.positionCount = 2;
|
||||
lRenderer.SetPosition (0, transform.position);
|
||||
lRenderer.SetPosition (1, laserPosition);
|
||||
|
||||
animateLaser ();
|
||||
}
|
||||
}
|
||||
|
||||
//enable or disable the vehicle laser
|
||||
public void changeLaserState (bool state)
|
||||
{
|
||||
lRenderer.enabled = state;
|
||||
|
||||
laserActive = state;
|
||||
|
||||
if (state) {
|
||||
StartCoroutine (laserAnimation ());
|
||||
|
||||
lastTimeDamageActive = 0;
|
||||
} else {
|
||||
hitSparks.SetActive (false);
|
||||
hitParticles.SetActive (false);
|
||||
}
|
||||
|
||||
vehicleCameraManagerLocated = vehicleCameraManager != null;
|
||||
|
||||
if (state) {
|
||||
if (vehicleHUD != null) {
|
||||
currentDriver = vehicleHUD.getCurrentDriver ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void updateCustomRayPosition (Vector3 newPosition, Vector3 newDirection)
|
||||
{
|
||||
usingCustomRayPosition = true;
|
||||
|
||||
customRayPosition = newPosition;
|
||||
|
||||
customRayDirection = newDirection;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user