Arena can spawn diff gladiators w/ x ratio each

This commit is contained in:
Soulaha Balde 2022-04-03 18:33:50 -04:00
parent f78582aac8
commit 9d51ed4cfd
5 changed files with 56 additions and 7 deletions

View File

@ -62349,10 +62349,13 @@ MonoBehaviour:
- position: {x: 10, y: -10}
direction: {x: 0, y: 1}
stats: {fileID: 11400000, guid: fe319ad8c9a37b84e8b45268c913d54c, type: 2}
entityPrefab: {fileID: 2004725698506461420, guid: f75821098c495cb43a0bff5d9ef0a671, type: 3}
lightGladiator: {fileID: 2004725698506461419, guid: f75821098c495cb43a0bff5d9ef0a671, type: 3}
regularGladiator: {fileID: 2004725698506461419, guid: f75821098c495cb43a0bff5d9ef0a671, type: 3}
heavyGladiator: {fileID: 1373848176550804357, guid: 99423d7c9a753554e87e6bb7e555018b, type: 3}
<gladiatorParent>k__BackingField: {fileID: 793317230}
<minionParent>k__BackingField: {fileID: 1787272690}
<graveyard>k__BackingField: {fileID: 1550580935}
currWaveSize: 0
--- !u!114 &1359990806
MonoBehaviour:
m_ObjectHideFlags: 0

View File

@ -113,6 +113,10 @@ PrefabInstance:
propertyPath: m_Enabled
value: 0
objectReference: {fileID: 0}
- target: {fileID: 161084746864990857, guid: b25a487d193f24049b6a791adf592b2e, type: 3}
propertyPath: m_RootOrder
value: 3
objectReference: {fileID: 0}
- target: {fileID: 197677485360569561, guid: b25a487d193f24049b6a791adf592b2e, type: 3}
propertyPath: m_Name
value: Big Knight Variant
@ -161,10 +165,30 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 197677485360569566, guid: b25a487d193f24049b6a791adf592b2e, type: 3}
propertyPath: attackCooldown
value: 5
objectReference: {fileID: 0}
- target: {fileID: 197677485360569566, guid: b25a487d193f24049b6a791adf592b2e, type: 3}
propertyPath: <cost>k__BackingField
value: 15
objectReference: {fileID: 0}
- target: {fileID: 197677485360569566, guid: b25a487d193f24049b6a791adf592b2e, type: 3}
propertyPath: <Health>k__BackingField
value: 80
objectReference: {fileID: 0}
- target: {fileID: 197677485360569566, guid: b25a487d193f24049b6a791adf592b2e, type: 3}
propertyPath: <renderer>k__BackingField
value:
objectReference: {fileID: 1594628713}
- target: {fileID: 197677485360569566, guid: b25a487d193f24049b6a791adf592b2e, type: 3}
propertyPath: <attackDmg>k__BackingField
value: 40
objectReference: {fileID: 0}
- target: {fileID: 197677485360569566, guid: b25a487d193f24049b6a791adf592b2e, type: 3}
propertyPath: <movementSpeed>k__BackingField
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1378753993384522801, guid: b25a487d193f24049b6a791adf592b2e, type: 3}
propertyPath: m_AnchorMax.x
value: 0

View File

@ -14,4 +14,9 @@ MonoBehaviour:
m_EditorClassIdentifier:
secondsBetweenSpawners: 15
initWaitToSpawn: 3
waveSize: 3
initWaveSize: 3
maxWaveSize: 10
waveIncrease: 1
increaseWaveStep: 3
lightRatio: 0.25
heavyRatio: 0.1

View File

@ -21,7 +21,11 @@ public class Arena : MonoBehaviour {
[SerializeField] [Required]
ArenaStats stats = null!;
[SerializeField] [Required]
GameObject entityPrefab = null!;
public AIEntity lightGladiator = null!;
[SerializeField] [Required]
public AIEntity regularGladiator = null!;
[SerializeField] [Required]
public AIEntity heavyGladiator = null!;
[field: SerializeField] [field: Required]
public Transform gladiatorParent { get; private set; } = null!;
@ -39,7 +43,7 @@ public class Arena : MonoBehaviour {
void Start() => StartCoroutine(SpawnEnemies());
void SpawnEnemy(int spawnerIndex) {
void SpawnEnemy(int spawnerIndex, AIEntity entityPrefab) {
if (!gameFlowManager.CanDoAction)
return;
@ -56,18 +60,30 @@ public class Arena : MonoBehaviour {
yield return new WaitForSeconds(stats.initWaitToSpawn);
currWaveSize = stats.initWaveSize;
int currentSpawner = 0;
int lightAmountSpawned = 0;
int heavyAmountSpawned = 0;
int amountSpawned = 0;
int wave = 1;
while(true){
while (amountSpawned < currWaveSize) {
currentSpawner = Random.Range(0, spawners.Length);
SpawnEnemy(currentSpawner);
amountSpawned++;
if(currWaveSize >= .5*stats.maxWaveSize && lightAmountSpawned <= stats.maxWaveSize * stats.lightRatio){
SpawnEnemy(currentSpawner, lightGladiator);
lightAmountSpawned++;
}else if(currWaveSize >= .8*stats.maxWaveSize && heavyAmountSpawned <= stats.maxWaveSize * stats.heavyRatio){
SpawnEnemy(currentSpawner, heavyGladiator);
heavyAmountSpawned++;
}else{
SpawnEnemy(currentSpawner, regularGladiator);
}
amountSpawned++;
}
if(wave++ >= stats.increaseWaveStep){
if((currWaveSize += stats.waveIncrease) > stats.maxWaveSize) currWaveSize=stats.maxWaveSize;
}
amountSpawned = 0;
lightAmountSpawned = 0;
heavyAmountSpawned = 0;
yield return new WaitForSeconds(stats.secondsBetweenSpawners);
}

View File

@ -8,5 +8,6 @@ public class ArenaStats : ScriptableObject {
[Min(0f)] public int maxWaveSize = 10;
[Min(0f), Tooltip("The amount of gladiator to add to wave")] public int waveIncrease = 1;
[Min(0f), Tooltip("How many waves before we increase by WaveIncrease")] public int increaseWaveStep = 3;
[Range(0f, 1f), Tooltip("Percentage of gladiator who are light")] public float lightRatio = 0.25f;
[Range(0f, 1f), Tooltip("Percentage of gladiator who are heavy")] public float heavyRatio = 0.1f;
}