add: now enemies properly spawn on deploy
This commit is contained in:
@@ -57,3 +57,6 @@ MonoBehaviour:
|
|||||||
hp: 0
|
hp: 0
|
||||||
maxHp: 100
|
maxHp: 100
|
||||||
factory: 2
|
factory: 2
|
||||||
|
enemies:
|
||||||
|
- prefab: {fileID: 3602081654026665026, guid: 7ab59219438e4a241affd5e9441d9d9f, type: 3}
|
||||||
|
weight: 1
|
||||||
|
|||||||
@@ -44,4 +44,5 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 67f50dd8d32d83d4891b1a18fd12ec38, type: 3}
|
m_Script: {fileID: 11500000, guid: 67f50dd8d32d83d4891b1a18fd12ec38, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
enemies: []
|
deployScene: {fileID: 102900000, guid: 3dbb8dbb9a7a2f2a0bd1311c83d35a6a, type: 3}
|
||||||
|
spawnPoints: []
|
||||||
|
|||||||
@@ -355,6 +355,75 @@ Transform:
|
|||||||
m_CorrespondingSourceObject: {fileID: 4357511284367880818, guid: 73c9d3d3ea6065747956699e5d1f5392, type: 3}
|
m_CorrespondingSourceObject: {fileID: 4357511284367880818, guid: 73c9d3d3ea6065747956699e5d1f5392, type: 3}
|
||||||
m_PrefabInstance: {fileID: 506206182}
|
m_PrefabInstance: {fileID: 506206182}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
--- !u!1001 &512102627
|
||||||
|
PrefabInstance:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Modification:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TransformParent: {fileID: 0}
|
||||||
|
m_Modifications:
|
||||||
|
- target: {fileID: 626889921843831083, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: spawnPoints.Array.size
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 626889921843831083, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: spawnPoints.Array.data[0].radius
|
||||||
|
value: 3
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 626889921843831083, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: spawnPoints.Array.data[0].transform
|
||||||
|
value:
|
||||||
|
objectReference: {fileID: 1573607468}
|
||||||
|
- target: {fileID: 4174800862365466133, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4174800862365466133, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4174800862365466133, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: m_LocalPosition.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4174800862365466133, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.w
|
||||||
|
value: 1
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4174800862365466133, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4174800862365466133, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4174800862365466133, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: m_LocalRotation.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4174800862365466133, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.x
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4174800862365466133, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.y
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 4174800862365466133, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: m_LocalEulerAnglesHint.z
|
||||||
|
value: 0
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
- target: {fileID: 8523789084967070956, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
|
propertyPath: m_Name
|
||||||
|
value: LevelController
|
||||||
|
objectReference: {fileID: 0}
|
||||||
|
m_RemovedComponents: []
|
||||||
|
m_RemovedGameObjects: []
|
||||||
|
m_AddedGameObjects: []
|
||||||
|
m_AddedComponents: []
|
||||||
|
m_SourcePrefab: {fileID: 100100000, guid: 235b3ad8eb2fc6b43b3296d18a8a9d06, type: 3}
|
||||||
--- !u!4 &578107310 stripped
|
--- !u!4 &578107310 stripped
|
||||||
Transform:
|
Transform:
|
||||||
m_CorrespondingSourceObject: {fileID: 6025933111829980118, guid: ca28c894d7e3a8e4d8feb70b9a8bb1c4, type: 3}
|
m_CorrespondingSourceObject: {fileID: 6025933111829980118, guid: ca28c894d7e3a8e4d8feb70b9a8bb1c4, type: 3}
|
||||||
@@ -755,6 +824,38 @@ PrefabInstance:
|
|||||||
m_AddedGameObjects: []
|
m_AddedGameObjects: []
|
||||||
m_AddedComponents: []
|
m_AddedComponents: []
|
||||||
m_SourcePrefab: {fileID: 100100000, guid: 7ab59219438e4a241affd5e9441d9d9f, type: 3}
|
m_SourcePrefab: {fileID: 100100000, guid: 7ab59219438e4a241affd5e9441d9d9f, type: 3}
|
||||||
|
--- !u!1 &1311630985
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 1311630986}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Spawn Points
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &1311630986
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1311630985}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children:
|
||||||
|
- {fileID: 1573607468}
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1001 &1341570327
|
--- !u!1001 &1341570327
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -1064,6 +1165,37 @@ MonoBehaviour:
|
|||||||
m_LightCookieSize: {x: 1, y: 1}
|
m_LightCookieSize: {x: 1, y: 1}
|
||||||
m_LightCookieOffset: {x: 0, y: 0}
|
m_LightCookieOffset: {x: 0, y: 0}
|
||||||
m_SoftShadowQuality: 0
|
m_SoftShadowQuality: 0
|
||||||
|
--- !u!1 &1573607467
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 1573607468}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Spawn1
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &1573607468
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 1573607467}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 3, z: 27}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 1311630986}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1001 &1653938973
|
--- !u!1001 &1653938973
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -1727,3 +1859,5 @@ SceneRoots:
|
|||||||
- {fileID: 1259296367}
|
- {fileID: 1259296367}
|
||||||
- {fileID: 887070209}
|
- {fileID: 887070209}
|
||||||
- {fileID: 1481837882}
|
- {fileID: 1481837882}
|
||||||
|
- {fileID: 512102627}
|
||||||
|
- {fileID: 1311630986}
|
||||||
|
|||||||
@@ -3,6 +3,11 @@ using UnityEngine.SceneManagement;
|
|||||||
|
|
||||||
public class DeployController : MonoBehaviour
|
public class DeployController : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
public void Start() {
|
||||||
|
Cursor.lockState = CursorLockMode.None;
|
||||||
|
Cursor.visible = true;
|
||||||
|
}
|
||||||
|
|
||||||
public void Deploy(string sceneName) {
|
public void Deploy(string sceneName) {
|
||||||
LevelInfo level = GameController.i.GetLevel(sceneName);
|
LevelInfo level = GameController.i.GetLevel(sceneName);
|
||||||
SceneManager.LoadScene(level.scene.name);
|
SceneManager.LoadScene(level.scene.name);
|
||||||
|
|||||||
@@ -1,30 +1,42 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using Random = UnityEngine.Random;
|
||||||
|
|
||||||
public class GameController : MonoBehaviour
|
public class GameController : MonoBehaviour
|
||||||
{
|
{
|
||||||
public static GameController i;
|
public static GameController i;
|
||||||
public List<LevelInfo> levels;
|
public List<LevelInfo> levels;
|
||||||
|
public List<EnemyInfo> enemies;
|
||||||
|
|
||||||
public void Start() {
|
public void Start() {
|
||||||
if (i) { Destroy(gameObject); return; }
|
if (i) { Destroy(gameObject); return; }
|
||||||
i = gameObject.GetComponent<GameController>();
|
i = GetComponent<GameController>();
|
||||||
DontDestroyOnLoad(gameObject);
|
DontDestroyOnLoad(gameObject);
|
||||||
|
levels = levels.Select(li => {
|
||||||
|
li.hp = li.maxHp;
|
||||||
|
li.enemies = new();
|
||||||
|
return li;
|
||||||
|
}).ToList();
|
||||||
|
levels.ForEach(li => {
|
||||||
|
AddEnemyInLevel(SelectEnemyWeighted().prefab, li.scene.name);
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dictionary<GameObject, int> PopEnemies(string sceneName) {
|
public Dictionary<GameObject, int> PopEnemies(string sceneName) {
|
||||||
LevelInfo li = levels.Find(x => x.scene.name == sceneName);
|
LevelInfo li = levels.Find(x => x.scene.name == sceneName);
|
||||||
Dictionary<GameObject, int> enemies = li.enemies;
|
Dictionary<GameObject, int> levelEnemies = new(li.enemies);
|
||||||
li.enemies.Clear();
|
li.enemies.Clear();
|
||||||
return enemies;
|
return levelEnemies;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddEnemyInLevel(GameObject enemy, string sceneName) {
|
public void AddEnemyInLevel(GameObject enemy, string sceneName) {
|
||||||
Dictionary<GameObject, int> enemies = levels.Find(x => x.scene.name == sceneName).enemies;
|
Dictionary<GameObject, int> levelEnemies = levels.Find(x => x.scene.name == sceneName).enemies;
|
||||||
if (enemies.ContainsKey(enemy)) enemies[enemy] += 1;
|
if (levelEnemies.ContainsKey(enemy)) levelEnemies[enemy] += 1;
|
||||||
else enemies[enemy] = 1;
|
else levelEnemies[enemy] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LevelInfo GetLevel(string sceneName) {
|
public LevelInfo GetLevel(string sceneName) {
|
||||||
@@ -34,6 +46,17 @@ public class GameController : MonoBehaviour
|
|||||||
public void OnLevelClear(string sceneName, float timeSpent) {
|
public void OnLevelClear(string sceneName, float timeSpent) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EnemyInfo SelectEnemyWeighted() {
|
||||||
|
float sumWeights = enemies.Sum(enemy => enemy.weight);
|
||||||
|
float r = Random.Range(0, sumWeights);
|
||||||
|
float curSum = 0;
|
||||||
|
foreach (EnemyInfo en in enemies) {
|
||||||
|
curSum += en.weight;
|
||||||
|
if (curSum >= r) return en;
|
||||||
|
}
|
||||||
|
return enemies[^1];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
@@ -52,3 +75,9 @@ public enum FactoryType {
|
|||||||
Minigun,
|
Minigun,
|
||||||
Railgun
|
Railgun
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
public struct EnemyInfo {
|
||||||
|
public GameObject prefab;
|
||||||
|
public float weight;
|
||||||
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public class LevelController : MonoBehaviour
|
|||||||
enemies[enemy] -= 1;
|
enemies[enemy] -= 1;
|
||||||
if (enemies[enemy] <= 0) enemies.Remove(enemy);
|
if (enemies[enemy] <= 0) enemies.Remove(enemy);
|
||||||
SpawnPointInfo spawnPointInfo = spawnPoints[Random.Range(0, spawnPoints.Count)];
|
SpawnPointInfo spawnPointInfo = spawnPoints[Random.Range(0, spawnPoints.Count)];
|
||||||
Vector2 circle = Random.insideUnitCircle;
|
Vector2 circle = Random.insideUnitCircle * spawnPointInfo.radius;
|
||||||
Vector3 spawnVector = spawnPointInfo.transform.position + new Vector3(circle.x, 0, circle.y);
|
Vector3 spawnVector = spawnPointInfo.transform.position + new Vector3(circle.x, 0, circle.y);
|
||||||
Enemy spawnedEnemy = Instantiate(enemy, spawnVector, spawnPointInfo.transform.rotation).GetComponent<Enemy>();
|
Enemy spawnedEnemy = Instantiate(enemy, spawnVector, spawnPointInfo.transform.rotation).GetComponent<Enemy>();
|
||||||
aliveEnemies.Add(spawnedEnemy);
|
aliveEnemies.Add(spawnedEnemy);
|
||||||
|
|||||||
Reference in New Issue
Block a user