123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- using System.Collections.Generic;
- using UnityEngine;
- namespace HQFPSWeapons
- {
- public class WaterBarrel : MonoBehaviour, IDamageable
- {
- [SerializeField]
- private AudioSource m_AudioSource = null;
- [SerializeField]
- private Rigidbody m_Rigidbody = null;
- [SerializeField]
- private float m_MassWithoutWater = 15f;
- [SerializeField]
- private ParticleSystem m_WaterFX = null;
- [SerializeField]
- private float m_WaterQuantity = 10f;
- [SerializeField]
- private float m_DefaultStartSpeed = 2f;
- private List<ParticleSystem> m_WaterLeaks = new List<ParticleSystem>();
- private float m_CurrentWaterQuantity;
- private float m_InitialMass;
- public void TakeDamage(HealthEventData damage)
- {
- if(m_CurrentWaterQuantity > 0f && damage.HitPoint != Vector3.zero && damage.HitDirection != Vector3.zero)
- {
- ParticleSystem waterLeak = (ParticleSystem)Instantiate(m_WaterFX, damage.HitPoint, Quaternion.LookRotation(damage.HitNormal == Vector3.zero ? -damage.HitDirection : damage.HitNormal));
- waterLeak.transform.SetParent(transform);
- m_WaterLeaks.Add(waterLeak);
- if(m_WaterLeaks.Count == 1)
- m_AudioSource.Play();
- }
- }
- public LivingEntity GetEntity()
- {
- return null;
- }
- private void Start()
- {
- m_CurrentWaterQuantity = m_WaterQuantity;
- m_InitialMass = m_Rigidbody.mass;
- }
- private void Update()
- {
- if(m_CurrentWaterQuantity <= 0 || m_WaterLeaks.Count == 0)
- return;
- m_CurrentWaterQuantity -= Time.deltaTime * m_WaterLeaks.Count;
- for(int i = 0;i < m_WaterLeaks.Count;i ++)
- {
- var currentSpeed = Mathf.Clamp(m_DefaultStartSpeed * (m_CurrentWaterQuantity / m_WaterQuantity), 0f, m_DefaultStartSpeed);
- var main = m_WaterLeaks[i].main;
- main.startSpeedMultiplier = currentSpeed;
- if(currentSpeed <= 0f)
- {
- m_WaterLeaks[i].Stop();
- m_AudioSource.Stop();
- }
- }
- m_Rigidbody.mass = m_MassWithoutWater + (m_InitialMass - m_MassWithoutWater) * (m_CurrentWaterQuantity / m_WaterQuantity);
- }
- }
- }
|