TalesOfNovariel/Assets/Scripts/ContentGenerator.cs
2023-07-05 14:43:52 +02:00

288 lines
6.9 KiB
C#

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)
{
case "Plane":
return generateTileContent();
case "Mountain":
return generateStoneTileContent();
case "Forest":
return generateTreeTileContent();
case "River":
return generateRiverTileContent();
case "Lake":
return generateLakeTileContent();
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 stones[rand.Next(0, stones.Length)];
}
else if (chance >= 60 && chance < 90)
{
return trees[rand.Next(0, trees.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 generateRiverTileContent()
{
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 generateLakeTileContent()
{
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;
string name = json["enemyname"].ToString().Replace("(Clone)", "");
if (name.Split(' ').Length > 1)
{
name = name.Split(' ')[1];
}
if (name == "(Boss)")
{
result = boss;
}
else
{
switch (name)
{
case "Metal":
name = "SlimeMetalIdle";
break;
case "MiniBoss":
name = "SlimeMiniBossIdle";
break;
case "Forest":
name = "SlimeForestIdle";
break;
case "Mage":
name = "SlimeMageIdle";
break;
case "Warrior":
name = "SlimeWarriorIdle";
break;
default:
name = "SlimeBaseIdle";
break;
}
foreach (GameObject enemy in enemies)
{
if (enemy.name == name)
{
result = enemy;
break;
}
}
}
return result;
}
public GameObject generateCityTileContent(){
int chance = rand.Next(1, 101);
if (chance < 10)
{
return null;
}
else if (chance >= 10 && chance < 40)
{
return house;
}
else if (chance >= 40 && chance < 65)
{
return trees[rand.Next(0, trees.Length)];
}
else if (chance >= 65 && chance < 90)
{
return stones[rand.Next(0, stones.Length)];
}
else
{
return npc;
}
}
}