bad-piggies-0.1.3-porting/Assets/Scripts/Assembly-CSharp/WindArea.cs
2024-02-24 22:40:44 -05:00

108 lines
2.1 KiB
C#

using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class WindArea : MonoBehaviour
{
[SerializeField]
public Vector3 windDirectionHandle = Vector3.up;
public float m_windPowerFactor = 1f;
public bool m_calculateParticleValues = true;
private List<BasePart> affectedParts = new List<BasePart>();
private bool windEnabled;
private void Awake()
{
EventManager.Connect<GameStateChanged>(ReceiveGameStateChangeEvent);
}
private void OnDestroy()
{
EventManager.Disconnect<GameStateChanged>(ReceiveGameStateChangeEvent);
}
private void Start()
{
}
private void ReceiveGameStateChangeEvent(GameStateChanged newState)
{
if (newState.state == LevelManager.GameState.Running)
{
windEnabled = true;
}
else
{
windEnabled = false;
}
if (newState.state == LevelManager.GameState.Building)
{
ResetToInitialState();
}
}
private void OnTriggerEnter(Collider other)
{
BasePart component = other.GetComponent<BasePart>();
if ((bool)component)
{
affectedParts.Add(component);
}
}
private void OnTriggerExit(Collider other)
{
BasePart component = other.GetComponent<BasePart>();
if ((bool)component)
{
affectedParts.Remove(component);
}
}
private void FixedUpdate()
{
if (!windEnabled)
{
return;
}
Vector3 vector = WindDirection();
foreach (BasePart affectedPart in affectedParts)
{
if ((bool)affectedPart)
{
Rigidbody component = affectedPart.GetComponent<Rigidbody>();
if ((bool)component)
{
component.rigidbody.AddForce(vector * m_windPowerFactor);
}
affectedPart.WindVelocity = 4f * vector.normalized * m_windPowerFactor;
}
}
}
private void ResetToInitialState()
{
affectedParts.Clear();
}
private Vector3 WindDirection()
{
return windDirectionHandle - base.transform.position;
}
private void OnDrawGizmos()
{
Bounds bounds = GetComponent<BoxCollider>().bounds;
for (float num = bounds.min.y; num <= bounds.max.y; num += 8f)
{
for (float num2 = bounds.min.x; num2 <= bounds.max.x; num2 += 8f)
{
GizmoUtils.DrawArrow(new Vector3(num2, num, base.transform.position.z), WindDirection());
}
}
}
}