mirror of
https://github.com/Leahnaya/TheKingsRace.git
synced 2026-03-26 11:44:44 -05:00
104 lines
3.3 KiB
C#
104 lines
3.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using MLAPI;
|
|
using MLAPI.Messaging;
|
|
|
|
public class HailArea : NetworkBehaviour
|
|
{
|
|
// Update is called once per frame
|
|
private float Xmax = 15f;
|
|
private float Xmin = -15f;
|
|
|
|
private float Zmax = -85f;
|
|
private float Zmin = -115f;
|
|
|
|
private int Ytop = 600;
|
|
int Lifetime = 0;
|
|
|
|
public GameObject Hail;
|
|
|
|
private GameObject spawnedHail;
|
|
|
|
int timer = 0;
|
|
int timeMax = 75;
|
|
|
|
RaycastHit hit;
|
|
[SerializeField] private LayerMask LayerMask;
|
|
float height = 0f;
|
|
// FixedUpdate is called once per .02 seconds (or 50 times a second)
|
|
void FixedUpdate()
|
|
{
|
|
if (timer == timeMax) {
|
|
timer = 0;
|
|
//Random diameter 4->8
|
|
float diameter = Random.Range(6, 10);
|
|
float radius = diameter / 2.0f;
|
|
//Random pos X Xmax-radius -> Xmin+radius
|
|
//Random pos Z Zmax-radius -> Zmin+radius
|
|
|
|
Vector3 position = new Vector3(Random.Range(Xmin + radius, Xmax - radius), Ytop, Random.Range(Zmin + radius, Zmax - radius));//Finds where the hail will spawn in the air
|
|
if (Physics.Raycast(position, transform.TransformDirection(Vector3.down), out hit, float.MaxValue, LayerMask)) {//Raycasts to find where the ground is
|
|
height = Ytop - hit.distance;
|
|
}
|
|
position = new Vector3(position.x, 100+height, position.z); //find ground and set y occordingly
|
|
|
|
SpawnHailServerRPC(diameter, position);
|
|
}
|
|
timer++;
|
|
|
|
Lifetime++;
|
|
if (Lifetime == 1000) {
|
|
DespawnMyselfServerRPC();
|
|
}
|
|
}
|
|
|
|
// Spawns a singular Hail piece
|
|
[ServerRpc(RequireOwnership = false)]
|
|
void SpawnHailServerRPC(float size, Vector3 pos) {
|
|
spawnedHail = Instantiate(Hail, pos, Quaternion.identity);
|
|
spawnedHail.GetComponent<NetworkObject>().Spawn(null, true);
|
|
ResizeHailClientRPC(spawnedHail.GetComponent<NetworkObject>().NetworkObjectId, size);
|
|
}
|
|
|
|
[ClientRpc]
|
|
private void ResizeHailClientRPC(ulong hailID, float size) {
|
|
GameObject[] hails = GameObject.FindGameObjectsWithTag("Hail");
|
|
|
|
foreach (GameObject hail in hails) {
|
|
if (hail.GetComponent<NetworkObject>().NetworkObjectId == hailID) {
|
|
hail.transform.localScale = new Vector3(size, size, size);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void SetArea(float LeftBound, float RightBound, float TopBound, float BottomBound) {
|
|
Xmin = LeftBound;
|
|
Xmax = RightBound;
|
|
Zmax = TopBound;
|
|
Zmin = BottomBound;
|
|
float distance = Mathf.Sqrt(Mathf.Pow((Xmax - Xmin), 2) - Mathf.Pow((Zmax - Zmin), 2)); //Finds the size of the box
|
|
//Converts it into a timer for spawing things properly
|
|
if(distance < 0) {
|
|
distance *= -1;
|
|
}
|
|
if(distance <= 60) {
|
|
timeMax = 60;
|
|
}
|
|
else if(distance > 60 && distance <= 250) {
|
|
timeMax = 70;
|
|
}
|
|
else if (distance > 250 && distance <= 500) {
|
|
timeMax = 80;
|
|
}
|
|
else if (distance > 500) {
|
|
timeMax = 160;
|
|
}
|
|
}
|
|
|
|
[ServerRpc(RequireOwnership = false)]
|
|
private void DespawnMyselfServerRPC() {
|
|
this.gameObject.GetComponent<NetworkObject>().Despawn(true);
|
|
}
|
|
}
|