metahunt/Assets/Scripts/BulletImpactReceiver.cs
2024-02-11 13:53:18 +05:30

66 lines
1.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using Photon.Pun;
using UnityEngine;
public class BulletImpactReceiver : MonoBehaviourPunCallbacks
{
Rigidbody rb;
public float impactMultiplier = 1;
private float dev_impactMultiplier=1;
public float maxDist = 20;
public float curVelocity;
public float freezeVelocity = 0.1f;
void Awake(){
transform.tag = "BulletImpactReceiver";
rb= GetComponent<Rigidbody>();
}
void Start(){
SettingsManager.instance.OnSettingsChanged.AddListener(OnSettingsChanged);
}
void OnSettingsChanged(){
dev_impactMultiplier = SettingsManager.instance.ballBounceSlider.value;
}
public void OnHit(Vector3? point, Vector3? normal, Vector3 shooterPos){
rb.isKinematic = false;
if(point == null || normal == null){return;}
float dist = Vector3.Distance(shooterPos, (Vector3)point);
Vector3 force = ((Vector3)normal) *( dev_impactMultiplier*impactMultiplier * (maxDist / dist));
if(photonView.IsMine){
OnImpact((Vector3)point, force);
}else{
photonView.RPC("RpcOnImpact", RpcTarget.All, point, force);
}
}
void Update(){
curVelocity = rb.velocity.sqrMagnitude;
if(rb.velocity.sqrMagnitude < freezeVelocity && !rb.isKinematic){
rb.isKinematic = true;
}
}
[PunRPC]
void RpcOnImpact(Vector3 point, Vector3 force){
if(photonView.IsMine){
OnImpact(point, force);
}
}
void OnImpact(Vector3 point, Vector3 force){
rb.AddForceAtPosition(force, (Vector3)point);
}
void OnCollisionEnter(Collision collision){
Debug.Log("Pool ball collided with " + collision.collider.name);
if(collision.collider.tag == "Player"){
rb.AddForce(-collision.impulse, ForceMode.Impulse);
}
}
}