281 lines
6.7 KiB
C#
281 lines
6.7 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.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;
|
|
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;
|
|
}
|
|
}
|
|
}
|