campfire/Assets/Scripts/StickSpawner.cs

65 lines
2.1 KiB
C#
Raw Normal View History

2020-04-20 20:46:52 +02:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StickSpawner : MonoBehaviour {
public GameObject StickPrefab;
2020-04-21 02:11:11 +02:00
public GameObject CasettePrefab;
2020-04-20 20:46:52 +02:00
public float StickSpawnChance = 0.5f;
public float StickSpawnMinDistance = 5f;
public float StickSpawnAngle = 70f;
public float StickSpawnTimer = 2f;
2020-04-21 02:11:11 +02:00
public float CasetteChance = 0.2f;
2020-04-20 20:46:52 +02:00
private GameObject Player;
private float LastSpawn;
private bool CanSpawnNew = true;
2020-04-21 02:11:11 +02:00
private bool LastSpawnedWasCasette = false;
2020-04-20 20:46:52 +02:00
private Item SpawnedStick = null;
2020-04-21 02:11:11 +02:00
private CasettePickup SpawnedCasette = null;
2020-04-20 20:46:52 +02:00
void Awake() {
Player = GameObject.FindGameObjectWithTag("Player");
LastSpawn = Time.time + StickSpawnTimer * Random.value;
}
void Update() {
if (!CanSpawnNew) {
2020-04-21 02:11:11 +02:00
if ((LastSpawnedWasCasette && (SpawnedCasette == null || SpawnedCasette.PickedUp)) || (!LastSpawnedWasCasette && SpawnedStick.Grabbed)) {
2020-04-20 20:46:52 +02:00
CanSpawnNew = true;
} else {
return;
}
}
if (Time.time > LastSpawn + StickSpawnTimer) {
LastSpawn = Time.time;
} else {
return;
}
var dir = transform.position - Player.transform.position;
if ((Vector3.Angle(Player.transform.forward, dir) > StickSpawnAngle) || dir.magnitude > StickSpawnMinDistance && Random.value <= StickSpawnChance) {
2020-04-21 02:11:11 +02:00
var SpawnedThing = StickPrefab;
if (Random.value <= CasetteChance) {
SpawnedThing = CasettePrefab;
LastSpawnedWasCasette = true;
} else {
LastSpawnedWasCasette = false;
}
2020-04-20 20:46:52 +02:00
CanSpawnNew = false;
2020-04-23 13:30:09 +02:00
var Spawned = GameObject.Instantiate(SpawnedThing, transform.position + Vector3.up * 2, Random.rotation);
2020-04-21 02:11:11 +02:00
if (LastSpawnedWasCasette) {
2020-04-23 13:30:09 +02:00
SpawnedCasette = Spawned.GetComponent<CasettePickup>();
2020-04-21 02:11:11 +02:00
} else {
2020-04-23 13:30:09 +02:00
SpawnedStick = Spawned.GetComponent<Item>();
2020-04-21 02:11:11 +02:00
}
2020-04-20 20:46:52 +02:00
}
}
}