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

542 lines
20 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LevelComplete : WPFMonoBehaviour
{
private GameObject m_starOne;
private GameObject m_starTwo;
private GameObject m_starThree;
private List<Challenge> m_challenges = new List<Challenge>();
private ObjectiveSlot m_objectiveOne;
private ObjectiveSlot m_objectiveTwo;
private ObjectiveSlot m_objectiveThree;
private GameObject m_controlsPanel;
private Vector3 m_controlsPosition;
private Vector3 m_controlsHidePosition;
private GameObject m_starPanel;
private Vector3 m_starPanelPosition;
private Vector3 m_starPanelHidePosition;
private GameObject m_background;
private Vector3 m_backgroundPosition;
private Vector3 m_backgroundHidePosition;
private BasePart.PartType m_unlockedPart;
private string m_unlockedSandbox = string.Empty;
public void SetChallenges(List<Challenge> challenges)
{
m_challenges = challenges;
}
private void OnEnable()
{
if (BuildCustomizationLoader.Instance.IAPEnabled)
{
IapManager.onPurchaseSucceeded += HandleIapManageronPurchaseSucceeded;
}
}
private void OnDisable()
{
if (BuildCustomizationLoader.Instance.IAPEnabled)
{
IapManager.onPurchaseSucceeded -= HandleIapManageronPurchaseSucceeded;
}
}
private void HandleIapManageronPurchaseSucceeded(IapManager.InAppPurchaseItemType type)
{
if (type == IapManager.InAppPurchaseItemType.UnlockFullVersion)
{
GameManager.Instance.LoadNextLevel();
}
}
private void Start()
{
m_starPanel = base.transform.Find("StarPanel").gameObject;
m_starOne = m_starPanel.transform.FindChild("StarOne").gameObject;
m_starTwo = m_starPanel.transform.FindChild("StarTwo").gameObject;
m_starThree = m_starPanel.transform.FindChild("StarThree").gameObject;
m_objectiveOne = m_starPanel.transform.FindChild("ObjectiveSlot1").GetComponent<ObjectiveSlot>();
m_objectiveTwo = m_starPanel.transform.FindChild("ObjectiveSlot2").GetComponent<ObjectiveSlot>();
m_objectiveThree = m_starPanel.transform.FindChild("ObjectiveSlot3").GetComponent<ObjectiveSlot>();
m_controlsPanel = base.transform.FindChild("ControlsPanel").gameObject;
m_controlsPosition = m_controlsPanel.transform.position;
m_controlsHidePosition = m_controlsPosition + new Vector3(0f, -5f, 0f);
m_controlsPanel.transform.position = m_controlsHidePosition;
m_starPanelPosition = m_starPanel.transform.position;
m_starPanelHidePosition = m_starPanelPosition + new Vector3(0f, 12f, 0f);
m_starPanel.transform.position = m_starPanelHidePosition;
m_background = base.transform.FindChild("Background").gameObject;
m_backgroundPosition = m_background.transform.position;
m_backgroundHidePosition = m_backgroundPosition + new Vector3(0f, 12f, 0f);
m_background.transform.position = m_backgroundHidePosition;
m_starOne.active = false;
m_starTwo.active = false;
m_starThree.active = false;
AudioManager instance = AudioManager.Instance;
if (m_challenges.Count >= 2 && m_challenges[1].IsCompleted() && !m_challenges[0].IsCompleted())
{
Challenge value = m_challenges[0];
m_challenges[0] = m_challenges[1];
m_challenges[1] = value;
}
if (m_challenges.Count >= 1)
{
m_objectiveTwo.SetChallenge(m_challenges[0]);
}
if (m_challenges.Count >= 2)
{
m_objectiveThree.SetChallenge(m_challenges[1]);
}
StartCoroutine(ShowStarPanel(1.5f));
float num = 2f;
int num2 = GameProgress.GetInt(Application.loadedLevelName + "_stars");
string text = "{";
string text2 = "{";
if (GameProgress.IsLevelCompleted(Application.loadedLevelName))
{
StartCoroutine(PlayOldStarEffects(m_objectiveOne, m_starOne, num, true));
text += "1, ";
}
else
{
LevelCompletedForFirstTime();
num += 0.2f;
StartCoroutine(PlayStarEffects(m_objectiveOne, m_starOne, null, num, instance.CommonAudioCollection.oneStar));
GameProgress.SetLevelCompleted(Application.loadedLevelName);
text2 += "1, ";
num2++;
}
num += 0.7f;
if (GameProgress.GetInt(Application.loadedLevelName + "_challenge_" + m_challenges[0].Type) == 1)
{
StartCoroutine(PlayOldStarEffects(m_objectiveTwo, m_starTwo, num, m_challenges[0].IsCompleted()));
text += "2, ";
}
else if (m_challenges.Count >= 1 && m_challenges[0].IsCompleted())
{
StartCoroutine(PlayStarEffects(m_objectiveTwo, m_starTwo, m_challenges[0], num, instance.CommonAudioCollection.twoStar));
GameProgress.SetInt(Application.loadedLevelName + "_challenge_" + m_challenges[0].Type, 1);
text2 += "2 ";
num2++;
}
num += 0.7f;
if (GameProgress.GetInt(Application.loadedLevelName + "_challenge_" + m_challenges[1].Type) == 1)
{
StartCoroutine(PlayOldStarEffects(m_objectiveThree, m_starThree, num, m_challenges[1].IsCompleted()));
text += "3}";
}
else if (m_challenges.Count >= 2 && m_challenges[1].IsCompleted())
{
StartCoroutine(PlayStarEffects(m_objectiveThree, m_starThree, m_challenges[1], num, instance.CommonAudioCollection.threeStar));
GameProgress.SetInt(Application.loadedLevelName + "_challenge_" + m_challenges[1].Type, 1);
text2 += "3}";
num2++;
}
bool flag = GameManager.Instance.CurrentLevelRowThreeStarred();
GameProgress.SetInt(Application.loadedLevelName + "_stars", num2);
bool jokerLevelUnlocked = GameManager.Instance.CurrentLevelRowThreeStarred() && !flag;
StartCoroutine(ShowBackground(1.5f, num - 1.5f));
if (GameManager.Instance.IsLastLevelInEpisode())
{
SetCutsceneButton();
}
ShowRewards(ref num, jokerLevelUnlocked);
StartCoroutine(ShowControls(num));
if (BuildCustomizationLoader.Instance.Flurry)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("ID", Application.loadedLevelName);
dictionary.Add("PREVIOUS_STARS", text);
dictionary.Add("NEW_STARS", text2);
dictionary.Add("TIME", string.Empty + WPFMonoBehaviour.levelManager.TimeElapsed);
dictionary.Add("CONTRAPTION", string.Empty + WPFMonoBehaviour.levelManager.contraptionProto.GetContraptionID());
FlurryManager.Instance.FlurryDataHolder.Add("NEW_STARS", text2);
FlurryManager.Instance.FlurryDataHolder.Add("PREVIOUS_STARS", text);
FlurryManager.Instance.LogEventWithParameters("Complete Level", dictionary);
}
if (DeviceInfo.Instance.ActiveDeviceFamily == DeviceInfo.DeviceFamily.Ios && (bool)WPFMonoBehaviour.levelManager)
{
CheckLevelEndAchievements();
}
}
private void ShowRewards(ref float delay, bool jokerLevelUnlocked)
{
if (m_unlockedPart != 0)
{
delay += 0.5f;
StartCoroutine(ShowUnlockedPart(delay));
delay += 0.5f;
}
if (m_unlockedSandbox != string.Empty)
{
Button component = base.transform.FindChild("Rewards").FindChild("SandboxUnlock").FindChild("Open")
.FindChild("Sandbox")
.GetComponent<Button>();
component.MessageTargetObject = base.gameObject;
component.TargetComponent = "LevelComplete";
component.MethodToInvoke = "LoadSandboxLevel";
component.MessageParameter = m_unlockedSandbox;
component.EventToSend = UIEvent.Type.None;
Sprite sandboxTitle = WPFMonoBehaviour.gameData.GetSandboxTitle(m_unlockedSandbox);
if ((bool)sandboxTitle)
{
GameObject gameObject = (GameObject)Object.Instantiate(sandboxTitle.gameObject);
gameObject.renderer.enabled = false;
gameObject.transform.parent = base.transform.FindChild("Rewards").FindChild("SandboxUnlock").FindChild("Open");
gameObject.transform.localPosition = new Vector3(1.2f, 2.1f, -1f);
gameObject.transform.localScale = Vector3.one;
GameObject gameObject2 = (GameObject)Object.Instantiate(sandboxTitle.gameObject);
gameObject2.renderer.enabled = false;
gameObject2.transform.parent = base.transform.FindChild("Rewards").FindChild("SandboxUnlock").FindChild("Locked");
gameObject2.transform.localPosition = new Vector3(1.2f, 2.1f, -1f);
gameObject2.transform.localScale = Vector3.one;
}
StartCoroutine(ShowUnlockedSandbox(delay));
}
else if (jokerLevelUnlocked)
{
string currentRowJokerLevel = GameManager.Instance.GetCurrentRowJokerLevel();
Button component2 = base.transform.FindChild("Rewards").FindChild("BonusLevelUnlock").FindChild("Open")
.FindChild("JokerLevelButton")
.GetComponent<Button>();
component2.MessageTargetObject = base.gameObject;
component2.TargetComponent = "LevelComplete";
component2.MethodToInvoke = "LoadJokerLevel";
component2.MessageParameter = currentRowJokerLevel;
component2.EventToSend = UIEvent.Type.None;
component2.transform.FindChild("LevelNumber").GetComponent<TextMesh>().text = GameManager.Instance.GetCurrentRowJokerLevelNumber();
SendUnlockedBonusLevelFlurryEvent(currentRowJokerLevel);
StartCoroutine(ShowUnlockedLevel(delay));
}
}
private void CheckLevelEndAchievements()
{
if (GameManager.Instance.CurrentEpisode.CompareTo("Episode1LevelSelection") == 0 && GameManager.Instance.CurrentLevel == GameManager.Instance.LevelCount - 1)
{
SocialGameManager.Instance.ReportAchievementProgress("grp.GROUND_HOG_DAY", 100.0);
}
if (GameManager.Instance.CurrentEpisode.CompareTo("Episode2LevelSelection") == 0 && GameManager.Instance.CurrentLevel == GameManager.Instance.LevelCount - 1)
{
SocialGameManager.Instance.ReportAchievementProgress("grp.WHEN_PIGS_FLY", 100.0);
}
if (GameManager.Instance.CurrentEpisodeThreeStarredNormalLevels())
{
if (GameManager.Instance.CurrentEpisode.CompareTo("Episode1LevelSelection") == 0)
{
SocialGameManager.Instance.ReportAchievementProgress("grp.REALLY_LOW_TO_THE_GROUND", 100.0);
}
else if (GameManager.Instance.CurrentEpisode.CompareTo("Episode2LevelSelection") == 0)
{
SocialGameManager.Instance.ReportAchievementProgress("grp.BOY_DO_THEY_FLY", 100.0);
}
}
if (GameManager.Instance.CurrentEpisodeThreeStarredSpecialLevels())
{
if (GameManager.Instance.CurrentEpisode.CompareTo("Episode1LevelSelection") == 0)
{
SocialGameManager.Instance.ReportAchievementProgress("grp.GROUND_BREAKER", 100.0);
}
else if (GameManager.Instance.CurrentEpisode.CompareTo("Episode2LevelSelection") == 0)
{
SocialGameManager.Instance.ReportAchievementProgress("grp.PRETTY_FLY", 100.0);
}
}
if (WPFMonoBehaviour.levelManager.IsPartTransported(BasePart.PartType.KingPig))
{
int @int = GameProgress.GetInt("Transported_Kings");
@int++;
GameProgress.SetInt("Transported_Kings", @int);
if (@int >= 10)
{
SocialGameManager.Instance.ReportAchievementProgress("grp.HOGFFEUR", 100.0);
}
else if (@int >= 5)
{
SocialGameManager.Instance.ReportAchievementProgress("PIGSHAW", 100.0);
}
}
if (WPFMonoBehaviour.levelManager.contraptionRunning.Parts.Count == WPFMonoBehaviour.levelManager.contraptionProto.Parts.Count)
{
int int2 = GameProgress.GetInt("Perfect_Completions");
int2++;
GameProgress.SetInt("Perfect_Completions", int2);
if (int2 >= AchievementData.Instance.GetAchievementLimit("grp.SKILLED_PILOT"))
{
SocialGameManager.Instance.ReportAchievementProgress("grp.SKILLED_PILOT", 100.0);
}
}
int num = WPFMonoBehaviour.levelManager.TimesPartIsInContraptionProto(BasePart.PartType.EngineBig);
if (num > 5)
{
SocialGameManager.Instance.ReportAchievementProgress("grp.CRASH_COURSE", 100.0);
}
int num2 = WPFMonoBehaviour.levelManager.TimesPartIsInContraptionProto(BasePart.PartType.TNT);
int num3 = WPFMonoBehaviour.levelManager.TimesPartIsInContraptionProto(BasePart.PartType.Pig);
int num4 = WPFMonoBehaviour.levelManager.TimesPartIsInContraptionProto(BasePart.PartType.KingPig);
if (num2 + num3 + num4 >= WPFMonoBehaviour.levelManager.contraptionProto.Parts.Count)
{
SocialGameManager.Instance.ReportAchievementProgress("grp.PORCINE_CANNONBALL", 100.0);
}
if (WPFMonoBehaviour.levelManager.contraptionProto.FindPig().enclosedPart == null)
{
SocialGameManager.Instance.ReportAchievementProgress("grp.THINK_OUTSIDE_THE_BOX", 100.0);
}
Pig pig = WPFMonoBehaviour.levelManager.contraptionRunning.FindPig() as Pig;
float traveledDistance = pig.traveledDistance;
float rolledDistance = pig.rolledDistance;
GameProgress.SetFloat("traveledDistance", traveledDistance);
GameProgress.SetFloat("rolledDistance", rolledDistance);
if (traveledDistance > (float)AchievementData.Instance.GetAchievementLimit("grp.TOURIST_1"))
{
SocialGameManager.Instance.ReportAchievementProgress("grp.TOURIST_1", 100.0);
}
else if (traveledDistance > (float)AchievementData.Instance.GetAchievementLimit("grp.TOURIST_2"))
{
SocialGameManager.Instance.ReportAchievementProgress("grp.TOURIST_2", 100.0);
}
else if (traveledDistance > (float)AchievementData.Instance.GetAchievementLimit("grp.TOURIST_3"))
{
SocialGameManager.Instance.ReportAchievementProgress("grp.TOURIST_3", 100.0);
}
if (rolledDistance > (float)AchievementData.Instance.GetAchievementLimit("grp.ROLLING_LOW_1"))
{
SocialGameManager.Instance.ReportAchievementProgress("grp.ROLLING_LOW_1", 100.0);
}
else if (rolledDistance > (float)AchievementData.Instance.GetAchievementLimit("grp.ROLLING_LOW_2"))
{
SocialGameManager.Instance.ReportAchievementProgress("grp.ROLLING_LOW_2", 100.0);
}
else if (rolledDistance > (float)AchievementData.Instance.GetAchievementLimit("grp.ROLLING_LOW_3"))
{
SocialGameManager.Instance.ReportAchievementProgress("grp.ROLLING_LOW_3", 100.0);
}
}
private void LevelCompletedForFirstTime()
{
if ((bool)WPFMonoBehaviour.levelManager)
{
foreach (LevelManager.PartCount item in WPFMonoBehaviour.levelManager.m_partsToUnlockOnCompletion)
{
GameProgress.AddSandboxParts(item.type, item.count);
m_unlockedPart = item.type;
}
if (WPFMonoBehaviour.levelManager.unlockSandboxLevelOnCompletion != string.Empty)
{
GameProgress.SetBool(WPFMonoBehaviour.levelManager.unlockSandboxLevelOnCompletion + "_sandbox_unlocked", true);
m_unlockedSandbox = WPFMonoBehaviour.levelManager.unlockSandboxLevelOnCompletion;
}
}
if (BuildCustomizationLoader.Instance.Flurry)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
string value = GameManager.Instance.CurrentEpisode + "-" + Application.loadedLevel;
dictionary.Add("ID", Application.loadedLevelName);
dictionary.Add("POSITION", value);
FlurryManager.Instance.LogEventWithParameters("Level End Reached", dictionary);
}
}
private void OnDestroy()
{
if (BuildCustomizationLoader.Instance.Flurry)
{
if (FlurryManager.Instance.FlurryDataHolder.ContainsKey("NEW_STARS"))
{
FlurryManager.Instance.FlurryDataHolder.Remove("NEW_STARS");
}
if (FlurryManager.Instance.FlurryDataHolder.ContainsKey("PREVIOUS_STARS"))
{
FlurryManager.Instance.FlurryDataHolder.Remove("PREVIOUS_STARS");
}
}
}
private void SetCutsceneButton()
{
m_controlsPanel.transform.Find("NextLevelButton").gameObject.active = false;
m_controlsPanel.transform.Find("CutsceneButton").position -= Vector3.forward * 8f;
}
private IEnumerator ShowUnlockedLevel(float delay)
{
yield return new WaitForSeconds(delay);
RewardView part = GameObject.Find("Rewards").transform.FindChild("UnlockPart").GetComponent<RewardView>();
part.Hide();
RewardView reward = GameObject.Find("Rewards").transform.FindChild("BonusLevelUnlock").GetComponent<RewardView>();
if (reward.HasLocked())
{
reward.ShowLocked();
yield return new WaitForSeconds(0.75f);
}
reward.ShowOpen();
}
private IEnumerator ShowUnlockedSandbox(float delay)
{
yield return new WaitForSeconds(delay);
RewardView part = GameObject.Find("Rewards").transform.FindChild("UnlockPart").GetComponent<RewardView>();
part.Hide();
RewardView reward = GameObject.Find("Rewards").transform.FindChild("SandboxUnlock").GetComponent<RewardView>();
if (reward.HasLocked())
{
reward.ShowLocked();
yield return new WaitForSeconds(0.75f);
}
reward.ShowOpen();
}
private IEnumerator ShowUnlockedPart(float delay)
{
yield return new WaitForSeconds(delay);
RewardView reward = GameObject.Find("Rewards").transform.FindChild("UnlockPart").GetComponent<RewardView>();
reward.ShowOpen();
reward.SetPart(m_unlockedPart);
}
private IEnumerator ShowStarPanel(float delay)
{
yield return new WaitForSeconds(delay);
float t = 0f;
while (t < 1f)
{
t = Mathf.Min(t + Time.deltaTime / 0.3f, 1f);
m_starPanel.transform.position = Vector3.Slerp(m_starPanelHidePosition, m_starPanelPosition, t);
yield return 0;
}
}
private IEnumerator ShowBackground(float delay1, float delay2)
{
yield return new WaitForSeconds(delay1);
float t2 = 0f;
while (t2 < 1f)
{
t2 = Mathf.Min(t2 + Time.deltaTime / 0.3f, 1f);
m_background.transform.position = Vector3.Slerp(m_backgroundHidePosition, m_backgroundPosition, t2);
yield return 0;
}
yield return new WaitForSeconds(delay2);
m_backgroundHidePosition = m_backgroundPosition;
m_backgroundPosition.y -= 12.5f;
t2 = 0f;
while (t2 < 1f)
{
t2 = Mathf.Min(t2 + Time.deltaTime / 0.3f, 1f);
m_background.transform.position = Vector3.Slerp(m_backgroundHidePosition, m_backgroundPosition, t2);
yield return 0;
}
}
private IEnumerator ShowControls(float delay)
{
if ((GameManager.Instance.CurrentLevel + 1) % 5 == 0)
{
m_controlsPanel.transform.Find("NextLevelButton").gameObject.active = false;
m_controlsPanel.transform.Find("CutsceneButton").gameObject.active = false;
}
if (GameManager.Instance.CurrentLevel + 1 >= 29 && BuildCustomizationLoader.Instance.IsFreeVersion)
{
Button nextLevelButton = m_controlsPanel.transform.Find("NextLevelButton").GetComponent<Button>();
nextLevelButton.MessageTargetObject = base.gameObject;
nextLevelButton.TargetComponent = "LevelComplete";
nextLevelButton.MethodToInvoke = "OpenUnlockFullVersionPurchasePage";
nextLevelButton.MessageParameter = null;
nextLevelButton.EventToSend = UIEvent.Type.None;
}
yield return new WaitForSeconds(delay);
float t = 0f;
while (t < 1f)
{
t = Mathf.Min(t + Time.deltaTime / 0.25f, 1f);
m_controlsPanel.transform.position = Vector3.Slerp(m_controlsHidePosition, m_controlsPosition, t);
yield return 0;
}
}
private IEnumerator PlayStarEffects(ObjectiveSlot objective, GameObject star, Challenge challenge, float delay, AudioClip starAudio)
{
yield return new WaitForSeconds(delay);
objective.SetSucceeded();
StartCoroutine(PlayStarEffects(star, 0.25f, starAudio));
}
private IEnumerator PlayStarEffects(GameObject star, float delay, AudioClip starAudio)
{
yield return new WaitForSeconds(delay);
star.active = true;
ParticleSystem[] componentsInChildren = star.GetComponentsInChildren<ParticleSystem>();
foreach (ParticleSystem starEffect in componentsInChildren)
{
starEffect.Play();
}
AudioManager.Instance.Play2dEffect(starAudio);
}
private IEnumerator PlayOldStarEffects(ObjectiveSlot objective, GameObject star, float delay, bool completedInThisRun)
{
star.active = true;
yield return new WaitForSeconds(delay);
if (completedInThisRun)
{
objective.SetSucceeded();
}
star.animation.Play();
}
public void LoadJokerLevel(string levelName)
{
Loader.Instance.LoadLevel(levelName, true);
}
public void LoadSandboxLevel(string levelName)
{
Loader.Instance.LoadLevel(levelName, true);
}
public void LoadEndingCutscene()
{
GameManager.Instance.LoadEndingCutscene();
}
public void OpenUnlockFullVersionPurchasePage()
{
if (BuildCustomizationLoader.Instance.IAPEnabled)
{
IapManager.Instance.EnableUnlockFullVersionPurchasePage();
}
}
public void SendUnlockedBonusLevelFlurryEvent(string id)
{
if (BuildCustomizationLoader.Instance.Flurry)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("ID", id);
dictionary.Add("PLAYED_ID", Application.loadedLevelName);
FlurryManager.Instance.LogEventWithParameters("Pause Flight", dictionary);
}
}
}