BITFALL/Assets/BITKit/UnityPluginsSupport/Cinemachine/CinemachineEntitiesGroup.cs

47 lines
1.2 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using BITKit.Entities;
using Cinemachine;
using UnityEngine;
namespace BITKit.Scene
{
public class CinemachineEntitiesGroup : MonoBehaviour
{
[SerializeField] private IEntitiesService _entitiesService;
[SerializeField] private CinemachineTargetGroup targetGroup;
[SerializeField] private Optional<Entity[]> initialEntities;
private void Update()
{
// foreach (var x in initialEntities.IfNotAllow(()=>_entitiesService.Query<IHealth>().Cast<Entity>().ToArray()))
// {
//
// }
targetGroup.m_Targets =
initialEntities.IfNotAllow(() => _entitiesService.Query<IHealth>().Cast<Entity>().ToArray())
.Select(x => new CinemachineTargetGroup.Target()
{
target = x.transform,
radius = 1,
weight = x.TryGetComponent<IHealth>(out var heal) ? heal.IsAlive ? 1 : 0 : 0
})
.ToArray();
if (targetGroup.m_Targets.Length is 0)
{
targetGroup.m_Targets = initialEntities.IfNotAllow(() => _entitiesService.Query<IHealth>().Cast<Entity>().ToArray()).Select(
x=>
new CinemachineTargetGroup.Target()
{
target = x.transform,
radius = 1,
weight = 1
}
).ToArray();
}
}
}
}