controlled spawning with settings

main
Benjamin Kraft 1 year ago
parent 0148e46c92
commit a32a080740
  1. 4
      Assets/Prefabs/Collectables/Modifications/BorderBuff.asset
  2. 2
      Assets/Prefabs/Collectables/Modifications/BorderNerf.asset
  3. 4
      Assets/Prefabs/Collectables/Modifications/SpeedBuff.asset
  4. 2
      Assets/Prefabs/Collectables/Modifications/SpeedNerf.asset
  5. 4
      Assets/Prefabs/Collectables/Modifications/WidthBuff.asset
  6. 2
      Assets/Prefabs/Collectables/Modifications/WidthNerf.asset
  7. 33
      Assets/Scenes/Game.unity
  8. 54
      Assets/Scripts/Game/GameManager.cs
  9. 14
      Assets/Scripts/Game/Settings.cs

@ -14,6 +14,6 @@ MonoBehaviour:
m_EditorClassIdentifier:
type: 1
effect: 1
pickupDuration: 10
activeDuration: 10
pickupDuration: 15
activeDuration: 15
image: {fileID: 21300000, guid: 500c6690dd1efa237973d86a4232f5c0, type: 3}

@ -15,5 +15,5 @@ MonoBehaviour:
type: 0
effect: 1
pickupDuration: 10
activeDuration: 10
activeDuration: 5
image: {fileID: 21300000, guid: 555c4207622e3e429bea3c98ad8ae3f5, type: 3}

@ -14,6 +14,6 @@ MonoBehaviour:
m_EditorClassIdentifier:
type: 1
effect: 0
pickupDuration: 10
activeDuration: 10
pickupDuration: 15
activeDuration: 15
image: {fileID: 21300000, guid: c9633c24081701c6c9ce9884d6524530, type: 3}

@ -15,5 +15,5 @@ MonoBehaviour:
type: 0
effect: 0
pickupDuration: 10
activeDuration: 10
activeDuration: 5
image: {fileID: 21300000, guid: 24ca60336f20aee73b5b211b6f6e1a44, type: 3}

@ -14,6 +14,6 @@ MonoBehaviour:
m_EditorClassIdentifier:
type: 1
effect: 2
pickupDuration: 10
activeDuration: 10
pickupDuration: 15
activeDuration: 15
image: {fileID: 21300000, guid: f09eae8c0ea04254b90c5386a034a225, type: 3}

@ -15,5 +15,5 @@ MonoBehaviour:
type: 0
effect: 2
pickupDuration: 10
activeDuration: 10
activeDuration: 5
image: {fileID: 21300000, guid: f9161c6c9e06dc445ada3ee16d991f90, type: 3}

@ -1017,6 +1017,39 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 52712ba5190f247fcab14f6d688872ba, type: 3}
m_Name:
m_EditorClassIdentifier:
spawnRates:
- spawnable: 0
values:
- spawnRate: 1
baseSeconds: 20
- spawnRate: 2
baseSeconds: 10
- spawnRate: 3
baseSeconds: 5
- spawnable: 1
values:
- spawnRate: 1
baseSeconds: 30
- spawnRate: 2
baseSeconds: 20
- spawnRate: 3
baseSeconds: 10
- spawnable: 2
values:
- spawnRate: 1
baseSeconds: 10
- spawnRate: 2
baseSeconds: 7
- spawnRate: 3
baseSeconds: 3
- spawnable: 3
values:
- spawnRate: 1
baseSeconds: 40
- spawnRate: 2
baseSeconds: 30
- spawnRate: 3
baseSeconds: 15
ballPrefab: {fileID: 7041796185663956342, guid: d67d5f2db5f0b3d9d8298731f423a9b6, type: 3}
playerPrefab: {fileID: 5402279313309450415, guid: 32b3bb87d3699d314ace59ddb1674875, type: 3}
borderZonePrefab: {fileID: 4827788429173683660, guid: 50e7c76b45ba22fb18c0012e23b4b34c, type: 3}

@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Unity.Netcode;
using Unity.VisualScripting;
using UnityEngine;
@ -10,6 +11,19 @@ using Random = UnityEngine.Random;
namespace Game {
public class GameManager : NetworkBehaviour {
[Serializable]
public struct SpawnRatesValue {
public SpawnRate spawnRate;
public float baseSeconds;
}
[Serializable]
public struct SpawnableSpawnRates {
public Spawnable spawnable;
public SpawnRatesValue[] values;
}
public SpawnableSpawnRates[] spawnRates;
public Object ballPrefab;
public Object playerPrefab;
public Object borderZonePrefab;
@ -28,7 +42,6 @@ namespace Game {
private void Awake() {
SetupPlayers();
SpawnBall(Player1, true);
}
private void OnEnable() {
@ -39,17 +52,38 @@ namespace Game {
QualitySettings.vSyncCount = 0;
}
private IEnumerator Start() {
private IEnumerator SpawnLoop(Spawnable spawnable) {
SpawnRate required = SpawnRate.Normal; //Settings.SpawnRates[spawnable];
if (required == SpawnRate.Never)
yield break;
float baseSeconds = spawnRates.First(s => s.spawnable == spawnable).values.First(v => v.spawnRate == required).baseSeconds;
while (Application.isPlaying) {
yield return new WaitForSeconds(1);
SpawnModification();
yield return new WaitForSeconds(2);
SpawnWormhole();
yield return new WaitForSeconds(1);
SpawnNewBall();
yield return new WaitForSeconds(baseSeconds);
switch (spawnable) {
case Spawnable.NewBallTemporary:
SpawnNewBall(false);
break;
case Spawnable.NewBallPermanent:
SpawnNewBall(true);
break;
case Spawnable.Modification:
SpawnModification();
break;
case Spawnable.Wormhole:
SpawnWormhole();
break;
}
}
}
private void Start() {
SpawnBall(Player1, true);
StartCoroutine(SpawnLoop(Spawnable.NewBallTemporary));
StartCoroutine(SpawnLoop(Spawnable.NewBallPermanent));
StartCoroutine(SpawnLoop(Spawnable.Modification));
StartCoroutine(SpawnLoop(Spawnable.Wormhole));
}
private void SetupPlayers() {
Settings.Type = Type.Hybrid;
Settings.AIDifficulty = Difficulty.VeryHard;
@ -95,9 +129,9 @@ namespace Game {
p1.borderZonePrefab = p2.borderZonePrefab = borderZonePrefab;
}
private void SpawnNewBall() {
private void SpawnNewBall(bool permanent) {
var pos = new Vector2(Random.Range(0, Dimensions.Singleton.PlaySize.x) - Dimensions.Singleton.PlaySize.x / 2, Random.Range(-5, 5));
Instantiate(newBallPrefab, pos, Quaternion.identity).GetComponent<NewBall>().IsPermanent = Random.value > 0.8f;
Instantiate(newBallPrefab, pos, Quaternion.identity).GetComponent<NewBall>().IsPermanent = permanent;
}
private void SpawnWormhole() {

@ -1,10 +1,20 @@
using System;
using System.Collections.Generic;
namespace Game {
public enum Type { RealOnline, RealOffline, Hybrid, AI }
public enum Type { RealOnline, RealOffline, Hybrid, AI, RealOnlineRanked }
public enum Difficulty { VeryEasy, Easy, Medium, Hard, VeryHard }
[Serializable]
public enum SpawnRate {Never, Few, Normal, Many}
[Serializable]
public enum Spawnable {NewBallTemporary, NewBallPermanent, Modification, Wormhole}
public enum WinScore {Default, Custom}
public struct Settings {
public static Type Type;
public static Difficulty AIDifficulty;
public static Dictionary<Spawnable, SpawnRate> SpawnRates;
public static WinScore WinScore;
public static int CustomWinScore;
}
}

Loading…
Cancel
Save