Files
BITFALL/Assets/Plugins/FImpossible Creations/Plugins - Level Design/PGG/Demos - PGG/Demos Assets/Scripts/SimpleGameController.cs
CortexCore ba342d6627 1
2023-11-30 00:23:23 +08:00

90 lines
2.8 KiB
C#

using System.Collections;
using UnityEngine;
namespace FIMSpace.Generating
{
public class SimpleGameController : MonoBehaviour
{
public static SimpleGameController Instance { get; private set; }
public PGGPlanGeneratorBase GeneratedsSource;
public GameObject PlayerObject;
[Header("Gameplay Elements (Auto getted on start)")]
public SimpleGate BossKeyGate;
public SimpleGate FinishLevelGate;
private void Awake()
{
Instance = this;
}
private void Start()
{
StartCoroutine(NextLevel(GeneratedsSource.Generated.Count == 0));
}
public void StepToNextLevel()
{
if (!generatingLevel) StartCoroutine(NextLevel(true));
}
bool generatingLevel = false;
private IEnumerator NextLevel(bool regenerate )
{
PlayerObject.GetComponent<Rigidbody>().useGravity = false;
generatingLevel = true;
yield return new WaitForSeconds(0.25f);
if (regenerate)
{
GeneratedsSource.ClearGenerated();
GeneratedsSource.transform.position = PlayerObject.transform.position - new Vector3(2, 0, 2);
GeneratedsSource.transform.position = new Vector3(GeneratedsSource.transform.position.x, 0, GeneratedsSource.transform.position.z);
GeneratedsSource.PlanGuides[0].Start = Vector2Int.zero;
GeneratedsSource.PlanGuides[0].End = GeneratedsSource.PlanGuides[0].Start + new Vector2Int(FGenerators.GetRandom(28, 30), FGenerators.GetRandom(-16, 16));
GeneratedsSource.Seed += 1;
GeneratedsSource.SizeLimitX.Min = GeneratedsSource.PlanGuides[0].Start.x + 2;
GeneratedsSource.SizeLimitX.Max = GeneratedsSource.PlanGuides[0].End.x - 2;
GeneratedsSource.GenerateObjects();
yield return new WaitForSeconds(1f);
}
OnLevelStartReady();
PlayerObject.GetComponent<Rigidbody>().useGravity = true;
yield return new WaitForSeconds(1f);
generatingLevel = false;
}
public void OnLevelStartReady()
{
FieldSetup bossField = GeneratedsSource.BuildPlanPreset.GetFieldSetupOfRoom("Boss Room");
BossKeyGate = GeneratedsSource.GetComponentFromField<SimpleGate>(bossField);
FieldSetup corridorField = GeneratedsSource.BuildPlanPreset.RootChunkSetup.FieldSetup;
FinishLevelGate = GeneratedsSource.GetComponentFromField<SimpleGate>(corridorField);
}
public void OnKeyCollected()
{
BossKeyGate.OpenWithCamera();
}
public void OnBossDeath()
{
FinishLevelGate.OpenWithCamera();
}
void Update()
{
}
}
}