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

158 lines
3.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotationTutorial : WPFMonoBehaviour
{
private enum State
{
Initialized = 0,
Waiting = 1,
BringingIn = 2,
Playing = 3,
Stopped = 4
}
public GameObject m_pointerPrefab;
public GameObject m_clickIndicatorPrefab;
private State m_state;
private GameObject m_pointerVisual;
private GameObject m_clickIndicator;
private Tutorial.Pointer m_pointer;
private Tutorial.PointerTimeLine m_timeline;
private GameObject m_background;
private GameObject m_part;
private float m_bringInTimer;
private void Start()
{
EventManager.Connect<GameStateChanged>(ReceiveGameStateChanged);
m_pointerVisual = (GameObject)Object.Instantiate(m_pointerPrefab);
if ((bool)m_clickIndicatorPrefab)
{
m_clickIndicator = (GameObject)Object.Instantiate(m_clickIndicatorPrefab);
m_clickIndicator.SetActiveRecursively(false);
}
m_pointer = new Tutorial.Pointer(m_pointerVisual, m_clickIndicator);
m_pointer.SetPressHandler(OnPress);
m_background = base.transform.FindChild("Background").gameObject;
m_background.SetActiveRecursively(false);
m_part = m_background.transform.FindChild("Bottle").gameObject;
}
private void OnDestroy()
{
EventManager.Disconnect<GameStateChanged>(ReceiveGameStateChanged);
}
private void OnPress()
{
m_part.transform.Rotate(Vector3.forward, -90f);
}
private void Update()
{
if (m_state == State.Waiting)
{
if (WPFMonoBehaviour.levelManager.contraptionProto.HasPart(BasePart.PartType.CokeBottle))
{
m_state = State.BringingIn;
m_bringInTimer = 0f;
m_background.SetActiveRecursively(true);
m_background.transform.localScale = Vector3.zero;
}
}
else if (m_state == State.BringingIn)
{
m_bringInTimer += GameTime.RealTimeDelta;
if (m_bringInTimer < 0.75f)
{
float num = MathsUtil.EaseInOutQuad(m_bringInTimer, 0f, 1f, 0.75f);
m_background.transform.localScale = num * Vector3.one;
}
else
{
m_background.transform.localScale = Vector3.one;
m_timeline.Start();
m_state = State.Playing;
}
}
else if (m_state == State.Playing)
{
m_timeline.Update();
if (m_timeline.IsFinished())
{
m_timeline.Start();
}
if (WPFMonoBehaviour.levelManager.constructionUI.RotationCount > 0)
{
m_state = State.Stopped;
m_background.SetActiveRecursively(false);
m_pointer.Show(false);
}
}
}
private void SetupTutorial()
{
m_state = State.Waiting;
m_timeline = new Tutorial.PointerTimeLine(m_pointer);
List<Vector3> list = new List<Vector3>();
list.Add(m_background.transform.position + new Vector3(0.8f, -0.8f, 0f));
m_timeline.AddEvent(new Tutorial.PointerTimeLine.Move(list, 0.5f));
m_timeline.AddEvent(new Tutorial.PointerTimeLine.Press());
m_timeline.AddEvent(new Tutorial.PointerTimeLine.Wait(0.5f));
m_timeline.AddEvent(new Tutorial.PointerTimeLine.Release());
m_timeline.AddEvent(new Tutorial.PointerTimeLine.Wait(0.5f));
}
private void ReceiveGameStateChanged(GameStateChanged data)
{
if (data.state == LevelManager.GameState.Building)
{
if (m_state != State.Stopped)
{
StartCoroutine(StartTutorial());
}
}
else if (data.state == LevelManager.GameState.PreviewWhileBuilding)
{
if (m_state != State.Stopped)
{
m_state = State.Initialized;
}
m_background.SetActiveRecursively(false);
m_pointer.Show(false);
}
else if (data.state == LevelManager.GameState.Running)
{
m_state = State.Stopped;
m_background.SetActiveRecursively(false);
m_pointer.Show(false);
}
}
private IEnumerator StartTutorial()
{
Vector3 cameraPosition;
do
{
cameraPosition = WPFMonoBehaviour.ingameCamera.transform.position;
yield return new WaitForSeconds(0.2f);
}
while (!(Vector3.Distance(WPFMonoBehaviour.ingameCamera.transform.position, cameraPosition) < 0.05f));
if (WPFMonoBehaviour.levelManager.gameState == LevelManager.GameState.Building)
{
SetupTutorial();
}
}
}