Files
Vampyrslaktaren/Assets/Scripts/GameController.cs
2026-04-20 13:09:07 +02:00

118 lines
3.2 KiB
C#

using TMPro;
using UnityEngine;
using UnityEngine.UI;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class GameController : MonoBehaviour {
public GameObject prefab; // Dra in din prefab i Inspector
public int numberOfPrefabs = 100; // Antal att skapa
public Vector2 spawnAreaMin = new Vector2(-25f, -20f);
public Vector2 spawnAreaMax = new Vector2(25f, 20f);
public float minDistanceFromPlayer = 5f; // Minsta avstånd från spelaren
public TMP_Text enemysLeftText, WinText, LooseText;
public Slider healthBar;
public Image barColor;
int enemyLeft;
int currentHealth = 100;
private AudioSource audioSource;
public AudioClip backgroundMusic;
public AudioClip explosion;
void Start() {
audioSource = GetComponent<AudioSource>();
audioSource.PlayOneShot(backgroundMusic);
WinText.enabled = false;
LooseText.enabled = false;
SpawnPrefabs();
enemyLeft = GameObject.FindGameObjectsWithTag("Enemy").Length;
UpdateUI();
}
void SpawnPrefabs() {
int spawned = 0;
while (spawned < numberOfPrefabs) {
float randomX = Random.Range(spawnAreaMin.x, spawnAreaMax.x);
float randomY = Random.Range(spawnAreaMin.y, spawnAreaMax.y);
Vector2 randomPosition = new Vector2(randomX, randomY);
// Kontrollera avstånd till spelaren (0,0)
if (Vector2.Distance(randomPosition, Vector2.zero) >= minDistanceFromPlayer) {
Instantiate(prefab, randomPosition, Quaternion.identity);
spawned++;
}
}
}
void Update() {
if (currentHealth <= 0) {
LooseText.enabled = true;
RemoveAllEnemies();
RemovePlayer();
Time.timeScale = 0;
}
if(enemyLeft <= 0) {
WinText.enabled = true;
RemoveAllEnemies();
RemovePlayer();
Time.timeScale = 0;
}
if (Input.GetKeyDown(KeyCode.Q))
{
QuitGame();
}
}
public static void QuitGame()
{
#if UNITY_EDITOR
// Stoppar Play Mode i Editor
EditorApplication.isPlaying = false;
#else
// Avslutar applikationen i build
Application.Quit();
#endif
}
void RemoveAllEnemies() {
GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
foreach (GameObject enemy in enemies) {
Destroy(enemy);
}
}
void RemovePlayer() {
GameObject player = GameObject.FindGameObjectWithTag("Player");
if (player != null) {
player.SetActive(false);
}
}
public void KilledAnemy() {
enemyLeft--;
audioSource.PlayOneShot(explosion, 0.65f);
UpdateUI();
}
void UpdateUI() {
enemysLeftText.text = "LEFT: " + enemyLeft.ToString();
healthBar.value = currentHealth;
}
public void DrawHealth() {
currentHealth -= 15;
if (currentHealth <= 60) {
barColor.color = Color.orange;
}
else if (currentHealth <= 20) {
barColor.color = Color.red;
}
UpdateUI();
}
}