255 lines
6.0 KiB
C#
255 lines
6.0 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;
|
|
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();
|
|
}
|
|
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("stone"))
|
|
{
|
|
foreach (GameObject stone in stones)
|
|
{
|
|
if (stone.name == name)
|
|
{
|
|
result = stone;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (GameObject tree in trees)
|
|
{
|
|
if (tree.name == name)
|
|
{
|
|
result = tree;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
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 "(Water)":
|
|
name = "SlimeWaterIdle";
|
|
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;
|
|
}
|
|
}
|