Files
2025-05-21 20:40:04 +02:00

272 lines
8.7 KiB
C#

using System;
using System.Collections;
using UnityEngine;
// Token: 0x020000F9 RID: 249
public class LandingSpot : MonoBehaviour
{
// Token: 0x06001597 RID: 5527 RVA: 0x0019A913 File Offset: 0x00198B13
private void Awake()
{
if (this._transformCache == null)
{
this._transformCache = base.transform;
}
this.landingPoint = this._transformCache.position;
this.landingRot = this._transformCache.rotation;
}
// Token: 0x06001598 RID: 5528 RVA: 0x0019A954 File Offset: 0x00198B54
public void Start()
{
if (this._transformCache == null)
{
this._transformCache = base.transform;
}
if (this._controller == null)
{
this._controller = this._transformCache.parent.GetComponent<LandingSpotController>();
}
if (this._controller._autoCatchDelay.x > 0f)
{
base.StartCoroutine(this.GetFlockChild(this._controller._autoCatchDelay.x, this._controller._autoCatchDelay.y));
}
if (this._controller._randomRotate && this._controller._parentBirdToSpot)
{
LandingSpotController controller = this._controller;
Debug.LogWarning(((controller != null) ? controller.ToString() : null) + "\nEnabling random rotate and parent bird to spot is not yet available, disabling random rotate");
this._controller._randomRotate = false;
}
this.landingPoint = this._transformCache.position;
this.landingRot = this._transformCache.rotation;
}
// Token: 0x06001599 RID: 5529 RVA: 0x0019AA4C File Offset: 0x00198C4C
public IEnumerator GetFlockChild(float minDelay, float maxDelay)
{
yield return new WaitForSeconds(Random.Range(minDelay, maxDelay));
if (this._controller._flock.gameObject.activeInHierarchy && this._landingChild == null)
{
FlockChild flockChild = null;
for (int i = 0; i < this._controller._flock._roamers.Count; i++)
{
FlockChild flockChild2 = this._controller._flock._roamers[i];
if (flockChild2 != null && !flockChild2._landing && flockChild2.gameObject.activeInHierarchy)
{
flockChild2._landingSpot = this;
this._distance = Vector3.Distance(flockChild2._thisT.position, this._transformCache.position);
if (!this._controller._onlyBirdsAbove)
{
if (flockChild == null && this._controller._maxBirdDistance > this._distance && this._controller._minBirdDistance < this._distance)
{
flockChild = flockChild2;
if (!this._controller._takeClosest)
{
break;
}
}
else if (flockChild != null && Vector3.Distance(flockChild._thisT.position, this._transformCache.position) > this._distance)
{
flockChild = flockChild2;
}
}
else if (flockChild == null && flockChild2._thisT.position.y > this._transformCache.position.y && this._controller._maxBirdDistance > this._distance && this._controller._minBirdDistance < this._distance)
{
flockChild = flockChild2;
if (!this._controller._takeClosest)
{
break;
}
}
else if (flockChild != null && flockChild2._thisT.position.y > this._transformCache.position.y && Vector3.Distance(flockChild._thisT.position, this._transformCache.position) > this._distance)
{
flockChild = flockChild2;
}
}
}
if (flockChild != null)
{
if (this._controller._abortLanding)
{
base.Invoke("ReleaseFlockChild", this._controller._abortLandingTimer);
}
this._landingChild = flockChild;
if (this._controller._parentBirdToSpot)
{
this._landingChild.transform.SetParent(base.transform);
}
this._landing = true;
this._landingChild._landing = true;
if (this._controller._autoDismountDelay.x > 0f)
{
base.Invoke("ReleaseFlockChild", Random.Range(this._controller._autoDismountDelay.x, this._controller._autoDismountDelay.y));
}
this._controller._activeLandingSpots++;
this.RandomRotate();
}
else if (this._controller._autoCatchDelay.x > 0f)
{
base.StartCoroutine(this.GetFlockChild(this._controller._autoCatchDelay.x, this._controller._autoCatchDelay.y));
}
}
yield break;
}
// Token: 0x0600159A RID: 5530 RVA: 0x0019AA6C File Offset: 0x00198C6C
public void InstantLand()
{
if (this._controller._flock.gameObject.activeInHierarchy && this._landingChild == null)
{
FlockChild flockChild = null;
for (int i = 0; i < this._controller._flock._roamers.Count; i++)
{
FlockChild flockChild2 = this._controller._flock._roamers[i];
if (!flockChild2._landing)
{
flockChild = flockChild2;
}
}
if (flockChild != null)
{
this._landingChild = flockChild;
if (this._controller._parentBirdToSpot)
{
this._landingChild.transform.SetParent(base.transform);
}
this._landingChild._move = false;
flockChild._speed = 0f;
flockChild._targetSpeed = 0f;
flockChild._landingSpot = this;
this._landing = true;
this._controller._activeLandingSpots++;
this._landingChild._landing = true;
this._landingChild._thisT.position = this._landingChild.GetLandingSpotPosition();
if (this._controller._randomRotate)
{
this._landingChild._thisT.Rotate(Vector3.up, Random.Range(0f, 360f));
}
else
{
this._landingChild._thisT.rotation = this._transformCache.rotation;
}
if (!this._landingChild._animationIsBaked)
{
if (!this._landingChild._animator)
{
this._landingChild._modelAnimation.Play(this._landingChild._spawner._idleAnimation);
}
else
{
this._landingChild._animator.Play(this._landingChild._spawner._idleAnimation);
}
}
else
{
this._landingChild._bakedAnimator.SetAnimation(2, -1);
}
if (this._controller._autoDismountDelay.x > 0f)
{
base.Invoke("ReleaseFlockChild", Random.Range(this._controller._autoDismountDelay.x, this._controller._autoDismountDelay.y));
return;
}
}
else if (this._controller._autoCatchDelay.x > 0f)
{
base.StartCoroutine(this.GetFlockChild(this._controller._autoCatchDelay.x, this._controller._autoCatchDelay.y));
}
}
}
// Token: 0x0600159B RID: 5531 RVA: 0x0019ACD8 File Offset: 0x00198ED8
public void ReleaseFlockChild()
{
if (this._controller._flock.gameObject.activeInHierarchy && this._landingChild != null)
{
this.EmitFeathers();
this._landingChild._modelT.localEulerAngles = new Vector3(0f, 0f, 0f);
this._landing = false;
this._landingChild._avoid = true;
this._landingChild._closeToSpot = false;
this._landingChild._damping = this._landingChild._spawner._maxDamping;
this._landingChild._targetSpeed = Random.Range(this._landingChild._spawner._minSpeed, this._landingChild._spawner._maxSpeed);
this._landingChild._move = true;
this._landingChild._landing = false;
this._landingChild.currentAnim = -1;
this._landingChild.Flap(0.1f);
if (this._controller._parentBirdToSpot)
{
this._landingChild._spawner.AddChildToParent(this._landingChild._thisT);
}
this._landingChild._wayPoint = new Vector3(this._landingChild._wayPoint.x + 5f, this._transformCache.position.y + 5f, this._landingChild._wayPoint.z + 5f);
this._landingChild._damping = 0.1f;
if (this._controller._autoCatchDelay.x > 0f)
{
base.StartCoroutine(this.GetFlockChild(this._controller._autoCatchDelay.x + 0.1f, this._controller._autoCatchDelay.y + 0.1f));
}
this._controller._activeLandingSpots--;
if (this._controller._abortLanding)
{
base.CancelInvoke("ReleaseFlockChild");
if (this._landingChild.currentAnim != 2)
{
this._landingChild.FindWaypoint();
}
}
this._landingChild = null;
}
}
// Token: 0x0600159C RID: 5532 RVA: 0x0019AF00 File Offset: 0x00199100
public void RandomRotate()
{
if (this._controller._randomRotate)
{
Quaternion rotation = this._transformCache.rotation;
Vector3 eulerAngles = rotation.eulerAngles;
eulerAngles.y = (float)Random.Range(-180, 180);
rotation.eulerAngles = eulerAngles;
this._transformCache.rotation = rotation;
}
}
// Token: 0x0600159D RID: 5533 RVA: 0x0019AF5C File Offset: 0x0019915C
public void EmitFeathers()
{
if (this._controller._featherPS == null)
{
return;
}
this._controller._featherPS.position = this._landingChild._thisT.position;
if (this._controller._featherParticles)
{
this._controller._featherParticles.Emit(Random.Range(0, 3));
}
}
// Token: 0x040025AE RID: 9646
[HideInInspector]
public FlockChild _landingChild;
// Token: 0x040025AF RID: 9647
[HideInInspector]
public bool _landing;
// Token: 0x040025B0 RID: 9648
public LandingSpotController _controller;
// Token: 0x040025B1 RID: 9649
public Transform _transformCache;
// Token: 0x040025B2 RID: 9650
public Vector3 _preLandWaypoint;
// Token: 0x040025B3 RID: 9651
public float _distance;
// Token: 0x040025B4 RID: 9652
public Vector3 landingPoint;
// Token: 0x040025B5 RID: 9653
public Quaternion landingRot;
}