You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.3 KiB
79 lines
2.3 KiB
10 months ago
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.SceneManagement;
|
||
|
|
||
|
/// <summary>
|
||
|
/// This script is attached to "Zone" objects in the world scene. When the player collides with
|
||
|
/// the zone, there is a chance of a battle. This script will load that battle scene when a
|
||
|
/// battle occurs.
|
||
|
/// </summary>
|
||
|
public class RandomBattle : MonoBehaviour {
|
||
|
|
||
|
public int battleProbability;
|
||
|
int encounterChance = 100;
|
||
|
public int secondsBetweenBattles;
|
||
|
public string battleSceneName;
|
||
|
|
||
|
/// <summary>
|
||
|
/// When a player object enters the 'zone' there is a chance for a battle
|
||
|
/// </summary>
|
||
|
/// <param name="col"></param>
|
||
|
void OnTriggerEnter2D(Collider2D col)
|
||
|
{
|
||
|
// Prevents a loop condition between the world and the battle scene
|
||
|
if (!GameState.justExitedBattle)
|
||
|
{
|
||
|
// Roll the dice
|
||
|
encounterChance = Random.Range(1, 100);
|
||
|
// Check the DC :)
|
||
|
if (encounterChance > battleProbability)
|
||
|
{
|
||
|
StartCoroutine(RecalculateChance());
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
StartCoroutine(RecalculateChance());
|
||
|
GameState.justExitedBattle = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Continue to roll the dice for a random encounter while the player is in the zone
|
||
|
/// </summary>
|
||
|
/// <returns></returns>
|
||
|
IEnumerator RecalculateChance()
|
||
|
{
|
||
|
while (encounterChance > battleProbability)
|
||
|
{
|
||
|
yield return new WaitForSeconds(secondsBetweenBattles);
|
||
|
encounterChance = Random.Range(1, 100);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// As long as the player is in the zone, there is a chance of a battle. When
|
||
|
/// that chance hits, load the battle scene.
|
||
|
/// </summary>
|
||
|
/// <param name="col"></param>
|
||
|
void OnTriggerStay2D(Collider2D col)
|
||
|
{
|
||
|
if (encounterChance <= battleProbability)
|
||
|
{
|
||
|
Debug.Log("Battle");
|
||
|
SceneManager.LoadScene(battleSceneName);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// When the player leaves the zone, clean up.
|
||
|
/// </summary>
|
||
|
/// <param name="col"></param>
|
||
|
void OnTriggerExit2D(Collider2D col)
|
||
|
{
|
||
|
encounterChance = 100;
|
||
|
StopCoroutine(RecalculateChance());
|
||
|
}
|
||
|
}
|