campfire/Assets/Scripts/StickSpawner.cs

65 lines
2.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StickSpawner : MonoBehaviour {
public GameObject StickPrefab;
public GameObject CasettePrefab;
public float StickSpawnChance = 0.5f;
public float StickSpawnMinDistance = 5f;
public float StickSpawnAngle = 70f;
public float StickSpawnTimer = 2f;
public float CasetteChance = 0.2f;
private GameObject Player;
private float LastSpawn;
private bool CanSpawnNew = true;
private bool LastSpawnedWasCasette = false;
private Item SpawnedStick = null;
private CasettePickup SpawnedCasette = null;
void Awake() {
Player = GameObject.FindGameObjectWithTag("Player");
LastSpawn = Time.time + StickSpawnTimer * Random.value;
}
void Update() {
if (!CanSpawnNew) {
if ((LastSpawnedWasCasette && (SpawnedCasette == null || SpawnedCasette.PickedUp)) || (!LastSpawnedWasCasette && SpawnedStick.Grabbed)) {
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) {
var SpawnedThing = StickPrefab;
if (Random.value <= CasetteChance) {
SpawnedThing = CasettePrefab;
LastSpawnedWasCasette = true;
} else {
LastSpawnedWasCasette = false;
}
CanSpawnNew = false;
var Stick = GameObject.Instantiate(SpawnedThing, transform.position + Vector3.up * 2, Random.rotation);
if (LastSpawnedWasCasette) {
} else {
SpawnedStick = Stick.GetComponent<Item>();
}
}
}
}