optimized level, updated shooting system, and fixed enemy death still causing damage bug

This commit is contained in:
2023-05-17 00:15:44 -04:00
parent d0ea8b29ac
commit b934212301
19 changed files with 833 additions and 369 deletions

View File

@ -25,9 +25,11 @@ public class PistolComponent : MonoBehaviour
private float firePower = 20f;
[SerializeField]
private float maxProjectileDuration = 5f;
[SerializeField]
private float maxTargetObjDistance = 15f;
private bool hasCloseTarget = false;
//private Dictionary<int,float> projectiles = new Dictionary<int, float>();
@ -59,16 +61,41 @@ public class PistolComponent : MonoBehaviour
}
private void FixedUpdate()
{
if (this.IsEnabled)
{
Ray ray = new Ray(transform.position, transform.up);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 50))
{
targetObject.gameObject.transform.position = hit.point;
float drop = CalculateDrop(this.bulletSpawnPoint.position, hit.point, this.transform.up * this.firePower);
//print(drop);
float hitDist = Vector3.Distance(hit.point, transform.position);
if (hitDist < maxTargetObjDistance)
{
targetObject.gameObject.transform.position = hit.point;
targetObject.gameObject.GetComponent<MeshRenderer>().materials[0].SetColor("_EmissiveColor", new Color(255, 0,0));
//Track if we have a close target
hasCloseTarget = true;
}
else
{
targetObject.gameObject.transform.position = transform.position + (ray.direction * maxTargetObjDistance);
targetObject.gameObject.GetComponent<MeshRenderer>().materials[0].SetColor("_EmissiveColor", new Color(255, 255,255));
//Track if we have a close target
hasCloseTarget = false;
}
//float drop = CalculateDrop(this.bulletSpawnPoint.position, hit.point, this.transform.up * this.firePower);
//print(drop);
}
else
{
targetObject.gameObject.transform.position = transform.position + (ray.direction * maxTargetObjDistance);
targetObject.gameObject.GetComponent<MeshRenderer>().materials[0].SetColor("_EmissiveColor", new Color(255,255,255));
hasCloseTarget = false;
}
}
@ -77,6 +104,10 @@ public class PistolComponent : MonoBehaviour
}
public void Fire()
{
Fire(!hasCloseTarget);
}
public void Fire(bool offsetWithTargetBall)
{
GameObject projectile = Instantiate(projectilePrefab, this.bulletSpawnPoint);
@ -84,7 +115,29 @@ public class PistolComponent : MonoBehaviour
projectile.transform.localEulerAngles = Vector3.zero;
projectile.transform.localScale = Vector3.one;
Rigidbody pRigid = projectile.GetComponent<Rigidbody>();
pRigid.AddForce(pRigid.transform.up*this.firePower, ForceMode.Impulse);
/*Modified targeting system
1. Since aim direction is vector from camera to ball (where player thinks its gonna go), raycast forward there, till hit. If no hit,
then set target distance to ~50.
2. Modify launch vector apply modified force
*/
Vector3 launchVector = pRigid.transform.up * this.firePower;
if(offsetWithTargetBall)
{
Vector3 ballCamVector = targetObject.transform.position - this.GetComponentInParent<PlayerMovementController>().cam.transform.position;
Ray r = new Ray();
r.origin = targetObject.transform.position;
r.direction = ballCamVector.normalized;
RaycastHit hit;
if (Physics.Raycast(r,out hit))
{
launchVector = (hit.point - pRigid.transform.position).normalized;
launchVector *= this.firePower;
}
}
pRigid.AddForce(launchVector, ForceMode.Impulse);
projectile.transform.parent = null;