253 lines
6.0 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|