TalesOfNovariel/Assets/Scripts/ContentGenerator.cs
2024-10-05 11:53:34 +02:00

253 lines
6.0 KiB
C#

using Assets.Scripts.InteractableObjects;
using Newtonsoft.Json.Linq;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ContentGenerator : MonoBehaviour
{
public GameObject[] enemies;
public GameObject[] trees;
public GameObject[] stones;
public GameObject grass;
public GameObject boss;
public GameObject npc;
public GameObject house;
static System.Random rand = new System.Random();
public GameObject generateEnemy()
{
int index = rand.Next(0, enemies.Length);
return enemies[index];
}
public GameObject generateContent(string tiletype)
{
switch (tiletype.ToLower())
{
case "plain":
return generateTileContent();
case "mountains":
return generateStoneTileContent();
case "forest":
return generateTreeTileContent();
case "hills":
return generateHillTileContent();
case "desert":
return generateDesertTileContent();
case "city":
return generateCityTileContent();
}
return null;
}
public GameObject generateTileContent()
{
int chance = rand.Next(1, 101);
if (chance < 50)
{
return null;
}
else if (chance >= 50 && chance < 90)
{
if (rand.Next(0, 2) == 0)
{
return trees[rand.Next(0, trees.Length)];
}
else
{
return stones[rand.Next(0, stones.Length)];
}
}
else if (chance >= 90 && chance < 95)
{
return generateEnemy();
}
else if (chance >= 95 && chance < 99)
{
return boss;
}
else
{
return npc;
}
}
public GameObject generateStoneTileContent()
{
int chance = rand.Next(1, 101);
if (chance < 60)
{
return null;
}
else if (chance >= 60 && chance < 90)
{
return stones[rand.Next(0, stones.Length)];
}
else if (chance >= 90 && chance < 95)
{
return generateEnemy();
}
else if (chance >= 95 && chance < 99)
{
return boss;
}
else
{
return npc;
}
}
public GameObject generateTreeTileContent()
{
int chance = rand.Next(1, 101);
if (chance < 60)
{
return trees[rand.Next(0, trees.Length)];
}
else if (chance >= 60 && chance < 90)
{
return stones[rand.Next(0, stones.Length)];
}
else if (chance >= 90 && chance < 95)
{
return generateEnemy();
}
else if (chance >= 95 && chance < 99)
{
return boss;
}
else
{
return npc;
}
}
public GameObject generateDesertTileContent()
{
int chance = rand.Next(1, 101);
if (chance < 50)
{
return null;
}
else if (chance >= 50 && chance < 90)
{
return stones[rand.Next(0, stones.Length)];
}
else if (chance >= 90 && chance < 95)
{
return generateEnemy();
}
else if (chance >= 95 && chance < 99)
{
return boss;
}
else
{
return npc;
}
}
public GameObject generateHillTileContent()
{
int chance = rand.Next(1, 101);
if (chance < 75)
{
return null;
}
else if (chance >= 75 && chance < 90)
{
return stones[rand.Next(0, stones.Length)];
}
else if (chance >= 90 && chance < 95)
{
return generateEnemy();
}
else if (chance >= 95 && chance < 99)
{
return boss;
}
else
{
return npc;
}
}
public GameObject loadObject(JToken json)
{
GameObject result = gameObject;
string name = json["objectname"].ToString().Replace("(Clone)", "");
if (name.ToLower().Contains("rock") || name.ToLower().Contains("ore"))
{
foreach (GameObject stone in stones)
{
if (stone.name == name)
{
result = stone;
break;
}
}
}
else if (name.ToLower().Contains("tree"))
{
foreach (GameObject tree in trees)
{
if (tree.name == name)
{
result = tree;
break;
}
}
}
else if (name.ToLower().Contains("npc"))
{
result = npc;
}
else if (name.ToLower().Contains("house"))
{
result = house;
}
return result;
}
public GameObject loadEnemy(JToken json)
{
GameObject result = gameObject;
SlimeType slimeType = (SlimeType)System.Enum.Parse(typeof(SlimeType), json["enemytype"].ToString().ToUpper());
foreach (GameObject enemy in enemies)
{
if (enemy.GetComponent<Enemy>().slimeType == slimeType)
{
result = enemy;
break;
}
}
return result;
}
public GameObject generateCityTileContent()
{
int chance = rand.Next(1, 101);
if (chance < 10)
{
return null;
}
else if (chance >= 10 && chance < 25)
{
return house;
}
else if (chance >= 25 && chance < 55)
{
return trees[rand.Next(0, trees.Length)];
}
else if (chance >= 55 && chance < 85)
{
return stones[rand.Next(0, stones.Length)];
}
else
{
return npc;
}
}
}