using System;
using System.Collections;
using Pathfinding;
using UnityEngine;

// Token: 0x02000055 RID: 85
public class TimedBreakable : MonoBehaviour
{
	// Token: 0x06000AF9 RID: 2809 RVA: 0x000DAC80 File Offset: 0x000D8E80
	private void Update()
	{
		if (this.breakable.destroyed && !this.falling)
		{
			if (!this.destroying)
			{
				this.destroying = true;
				bool kicked = this.breakable.kicked;
				base.StartCoroutine(this.DestroyWait(kicked));
				return;
			}
		}
		else if (!this.finishing && this.startSeconds > 0f && !this.falling && Links.x.gameplay.seconds > this.startSeconds + this.gameSecondsBeforeBreak && base.gameObject.name.Contains("Egg"))
		{
			this.finishing = true;
			this.breakable.ClickToBreak(null, true, false);
			this.breakable.HoverOut();
			base.StartCoroutine(this.Egg());
		}
	}

	// Token: 0x06000AFA RID: 2810 RVA: 0x000DAD4E File Offset: 0x000D8F4E
	public void Fall()
	{
		this.falling = true;
		base.StartCoroutine(this.Falling());
	}

	// Token: 0x06000AFB RID: 2811 RVA: 0x000DAD64 File Offset: 0x000D8F64
	private IEnumerator Falling()
	{
		float timeToLerp = 0.5f;
		float percentage = 0f;
		float startTime = Time.time;
		Transform tr = base.gameObject.transform;
		Vector3 startPoint = tr.position;
		while (percentage < 1f)
		{
			percentage = (Time.time - startTime) / timeToLerp;
			tr.position = Vector3.Lerp(startPoint, (Vector3)this.node.position, percentage);
			tr.localScale = Vector3.Lerp(Vector3.one * 0.25f, Vector3.one, percentage);
			yield return null;
		}
		this.falling = false;
		this.startSeconds = Links.x.gameplay.seconds;
		yield break;
	}

	// Token: 0x06000AFC RID: 2812 RVA: 0x000DAD73 File Offset: 0x000D8F73
	private IEnumerator Egg()
	{
		this.animator.Play("HatchOpen");
		float timeToLerp = 0.5f;
		float percentage = 0f;
		float startTime = Time.time;
		while (percentage < 1f)
		{
			percentage = (Time.time - startTime) / timeToLerp;
			yield return null;
		}
		while (Records.x.paused || Records.x.removeControls)
		{
			yield return null;
		}
		Quaternion quaternion = Quaternion.Euler(new Vector3(0f, Random.Range(-360f, 360f), 0f));
		this.node.Walkable = true;
		bool flag = true;
		if (this.source.npc)
		{
			flag = false;
		}
		CreatureActions creatureActions = Links.x.gaia.CreateCreature(base.gameObject.transform.position, quaternion, "ShroomerFlyer", flag, 0f, 1);
		Character summon = creatureActions.GetFirstCharacter();
		summon.FirstPosition(this.node);
		summon.downed = true;
		summon.PlayAnimation("HitDown", 0f);
		yield return new WaitForSeconds(0.5f);
		summon.downed = false;
		summon.PlayAnimation("GetUp", 0f);
		Links.x.cellar.RemoveCombatBreakable(this);
		Object.Destroy(base.gameObject);
		yield break;
	}

	// Token: 0x06000AFD RID: 2813 RVA: 0x000DAD82 File Offset: 0x000D8F82
	private IEnumerator DestroyWait(bool kicked)
	{
		if (kicked)
		{
			yield return new WaitForSeconds(0.5f);
		}
		this.animator.Play("BreakOpen");
		Links.x.cellar.RemoveCombatBreakable(this);
		float timeToLerp = 1.15f;
		float percentage = 0f;
		float startTime = Time.time;
		while (percentage < 1f)
		{
			percentage = (Time.time - startTime) / timeToLerp;
			yield return null;
		}
		Object.Destroy(base.gameObject);
		yield break;
	}

	// Token: 0x06000AFE RID: 2814 RVA: 0x000DAD98 File Offset: 0x000D8F98
	private void OnDisable()
	{
		if (Links.x && Links.x.cellar)
		{
			Links.x.cellar.RemoveCombatBreakable(this);
		}
	}

	// Token: 0x04000FC9 RID: 4041
	public float gameSecondsBeforeBreak;

	// Token: 0x04000FCA RID: 4042
	private float startSeconds;

	// Token: 0x04000FCB RID: 4043
	public BreakableActions breakable;

	// Token: 0x04000FCC RID: 4044
	public Animator animator;

	// Token: 0x04000FCD RID: 4045
	private bool destroying;

	// Token: 0x04000FCE RID: 4046
	private bool finishing;

	// Token: 0x04000FCF RID: 4047
	public GraphNode node;

	// Token: 0x04000FD0 RID: 4048
	private bool falling;

	// Token: 0x04000FD1 RID: 4049
	public Character source;
}
