Skip to content
Snippets Groups Projects
Commit 200b660f authored by Nigel Sahl's avatar Nigel Sahl
Browse files

feat: update enemy controller

parent d1811ce2
Branches
Tags
No related merge requests found
......@@ -11,6 +11,7 @@ public class EnemyController : MonoBehaviour
public GameObject EnemyGeneralRef;
public GameObject EnemyKingRef;
public GameObject PlayerRef;
public Vector3 defaultSpawnPosition = new Vector3(40f, 84f, 10f);
private Transform PlayerTransform;
private int kerocoCount = 0;
private int kepalaKerocoCount = 0;
......@@ -31,9 +32,32 @@ public class EnemyController : MonoBehaviour
StartCoroutine(KingDrop());
}
Vector3 RandomPosition()
Vector3 RandomPosition(Vector3 owner, int randomRange, Vector3 defaultSpawn)
{
return new Vector3(Random.Range(-25, 25), 0, Random.Range(-25, 25));
//// Maybe buggy because can't get terrain height
//float xPosMobs = PlayerTransform.position.x + Random.Range(-25, 25);
//float zPosMobs = PlayerTransform.position.z + Random.Range(-25, 25);
//float yPosMobs = PlayerTransform.position.y + 3;
// Get a random position near the player
Vector3 randomDirection = Random.insideUnitSphere * randomRange;
randomDirection += owner;
// Sample a position on the NavMesh
if (NavMesh.SamplePosition(randomDirection, out NavMeshHit hit, randomRange, NavMesh.AllAreas))
{
Vector3 finalPosition = hit.position;
// increase the y position to avoid spawning under the terrain and spawn the enemy from little above the ground
finalPosition.y += 2.7f;
return finalPosition;
}
else
{
// default spawn position
return defaultSpawn;
}
}
IEnumerator KerocoDrop()
......@@ -44,28 +68,10 @@ public class EnemyController : MonoBehaviour
if (kerocoCount < kerocoCountMax)
{
Debug.Log("Create Keroco");
// Get a random position near the player
Vector3 randomDirection = Random.insideUnitSphere * 25;
randomDirection += PlayerTransform.position;
// Sample a position on the NavMesh
if (NavMesh.SamplePosition(randomDirection, out NavMeshHit hit, 25, NavMesh.AllAreas))
{
Vector3 finalPosition = hit.position;
// increase the y position to avoid spawning under the terrain and spawn the enemy from little above the ground
finalPosition.y += 2.5f;
// Spawn the enemy at the sampled position
GameObject newKeroco = Instantiate(EnemyKerocoRef, finalPosition, Quaternion.identity);
newKeroco.SetActive(true);
newKeroco.GetComponent<CombatBehavior>().health = 50;
kerocoCount++;
}
// else maybe make a default spawn position
GameObject newKeroco = Instantiate(EnemyKerocoRef, RandomPosition(PlayerTransform.position, 25, defaultSpawnPosition), Quaternion.identity);
newKeroco.SetActive(true);
newKeroco.GetComponent<CombatBehavior>().health = 50;
kerocoCount++;
}
yield return new WaitForSeconds(0.1f);
}
......@@ -79,12 +85,7 @@ public class EnemyController : MonoBehaviour
{
if (kepalaKerocoCount < kepalaKerocoMax)
{
// Maybe buggy because can't get terrain height
float xPosMobs = PlayerTransform.position.x + Random.Range(-25, 25);
float zPosMobs = PlayerTransform.position.z + Random.Range(-25, 25);
float yPosMobs = PlayerTransform.position.y + 3;
GameObject newKepalaKeroco = Instantiate(EnemyKepalaKerocoRef, new Vector3(xPosMobs, yPosMobs, zPosMobs), Quaternion.identity);
GameObject newKepalaKeroco = Instantiate(EnemyKepalaKerocoRef, RandomPosition(PlayerTransform.position, 25, defaultSpawnPosition), Quaternion.identity);
newKepalaKeroco.SetActive(true);
newKepalaKeroco.GetComponent<CombatBehavior>().health = 200;
kepalaKerocoCount++;
......@@ -100,12 +101,7 @@ public class EnemyController : MonoBehaviour
{
if (generalCount < generalCountMax)
{
// Maybe buggy because can't get terrain height
float xPosMobs = PlayerTransform.position.x + Random.Range(-25, 25);
float zPosMobs = PlayerTransform.position.z + Random.Range(-25, 25);
float yPosMobs = PlayerTransform.position.y + 3;
GameObject newGeneral = Instantiate(EnemyGeneralRef, new Vector3(xPosMobs, yPosMobs, zPosMobs), Quaternion.identity);
GameObject newGeneral = Instantiate(EnemyGeneralRef, RandomPosition(PlayerTransform.position, 25, defaultSpawnPosition), Quaternion.identity);
newGeneral.SetActive(true);
newGeneral.GetComponent<CombatBehavior>().health = 500;
generalCount++;
......@@ -121,12 +117,7 @@ public class EnemyController : MonoBehaviour
{
if (kingCount < kingCountMax)
{
// Maybe buggy because can't get terrain height
float xPosMobs = PlayerTransform.position.x + Random.Range(-25, 25);
float zPosMobs = PlayerTransform.position.z + Random.Range(-25, 25);
float yPosMobs = PlayerTransform.position.y + 3;
GameObject newKing = Instantiate(EnemyKingRef, new Vector3(xPosMobs, yPosMobs, zPosMobs), Quaternion.identity);
GameObject newKing = Instantiate(EnemyKingRef, RandomPosition(PlayerTransform.position, 25, defaultSpawnPosition), Quaternion.identity);
newKing.SetActive(true);
newKing.GetComponent<CombatBehavior>().health = 1000;
kingCount++;
......@@ -137,11 +128,9 @@ public class EnemyController : MonoBehaviour
public void KerocoDropByOtherMob(Transform ownerTransform)
{
float xPosMobs = ownerTransform.position.x + Random.Range(-5, 5);
float zPosMobs = ownerTransform.position.z + Random.Range(-5, 5);
float yPosMobs = ownerTransform.position.y + 2;
GameObject newSlaveKeroco = Instantiate(EnemyKerocoRef, new Vector3(xPosMobs, yPosMobs, zPosMobs), Quaternion.identity);
// default spawn is on the front of the owner
Vector3 defaultSpawnKeroco = ownerTransform.position + new Vector3(0, 3, 1);
GameObject newSlaveKeroco = Instantiate(EnemyKerocoRef, RandomPosition(ownerTransform.position, 5, defaultSpawnKeroco), Quaternion.identity);
newSlaveKeroco.GetComponent<KerocoBehaviour>().haveOwner = true;
newSlaveKeroco.SetActive(true);
newSlaveKeroco.GetComponent<CombatBehavior>().health = 50;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment