Files
Lachlan Leone c3a5153a56 Initial Commit
2026-04-05 18:57:16 +10:00

82 lines
2.8 KiB
C#

using System.Collections.Generic;
using Easter2025.Components;
using Kitchen;
using Kitchen.Layouts;
using KitchenData;
using KitchenMods;
using Unity.Collections;
using Unity.Entities;
using UnityEngine;
using UnityEngine.AI;
namespace Easter2025.Systems
{
public class BunniesRoam : GameSystemBase, IModSystem
{
private EntityQuery _Bunnies;
private NavMeshPath Path = new NavMeshPath();
protected override void Initialise()
{
base.Initialise();
_Bunnies = GetEntityQuery(typeof(CBunny));
}
private float range = 5f;
protected override void OnUpdate()
{
List<Vector3> list = GetPostTiles(true);
using (NativeArray<Entity> Bunnies = _Bunnies.ToEntityArray(Allocator.Temp))
{
foreach (Entity Bunny in Bunnies)
{
if (Require(Bunny, out CPosition cPosition))
{
if (!Has<CMoveToLocation>(Bunny))
{
int num = 0;
Set(Bunny, new CMoveToLocation
{
Location = FindMovementLocation(cPosition),
StoppingDistance = 0.8f
});
}
if (Require(Bunny, out CMoveToLocation cMoveToLocation))
{
if (Random.value <= 0.1f * Time.DeltaTime || Input.GetKeyDown(KeyCode.L))
{
if (Vector3.Distance(cMoveToLocation.Location, cPosition) < 1f)
{
cMoveToLocation.Location = FindMovementLocation(cPosition);
Set(Bunny, cMoveToLocation);
}
}
}
}
}
}
}
private Vector3 FindMovementLocation(Vector3 startingPosition)
{
for (var i = 0; i < 50; i++)
{
Vector3 pos = startingPosition + new Vector3(Random.Range(-range, range), 0, Random.Range(-range, range));
if (TileManager.GetOccupant(pos) != default)
{
if (TileManager.GetTile(startingPosition).RoomID == TileManager.GetTile(pos).RoomID)
{
NavMesh.CalculatePath(startingPosition, pos, NavMesh.AllAreas, Path);
if (Path.status == NavMeshPathStatus.PathComplete)
{
return pos;
}
}
}
}
return startingPosition;
}
}
}