You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.9 KiB
C#
69 lines
1.9 KiB
C#
using Entitas;
|
|
using UnityEngine;
|
|
using Game;
|
|
using Vector3 = UnityEngine.Vector3;
|
|
|
|
// view的3d转2d的表现在此处理
|
|
public class ViewSystem : IExecuteSystem, IInitializeSystem
|
|
{
|
|
private IGroup<GameEntity> _entities;
|
|
|
|
public void Initialize()
|
|
{
|
|
_entities = Util.GetGroup(GameMatcher.View);
|
|
}
|
|
|
|
public void Execute()
|
|
{
|
|
foreach (var entity in _entities)
|
|
{
|
|
UpdateShake(entity); //更新抖动
|
|
UpdateViewPos(entity); //更新位置
|
|
if (Util.IsPause(entity))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
UpdateActive(entity); //更新显示
|
|
}
|
|
}
|
|
|
|
private static void UpdateActive(GameEntity entity)
|
|
{
|
|
var view = entity.view;
|
|
var entityItem = view.EntityPoolItem;
|
|
if (entityItem.IsAlive && !entityItem.GameObject.activeSelf)
|
|
{
|
|
entityItem.GameObject.SetActive(true);
|
|
}
|
|
}
|
|
|
|
private static void UpdateShake(GameEntity entity)
|
|
{
|
|
var view = entity.view;
|
|
if (view.ShakeTimeLeft == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
view.ShakeTimeLeft -= Time.unscaledDeltaTime;
|
|
if (view.ShakeTimeLeft < 0)
|
|
{
|
|
view.ShakeTimeLeft = 0;
|
|
view.LocalPositionShake = Vector3.zero;
|
|
return;
|
|
}
|
|
|
|
var shakeDist = Mathf.Sin(view.ShakeTimeLeft * GameConst.ShakeRate) * GameConst.ShakeDistance;
|
|
view.LocalPositionShake = new Vector3(shakeDist, 0, 0);
|
|
}
|
|
|
|
private static void UpdateViewPos(GameEntity entity)
|
|
{
|
|
var view = entity.view;
|
|
view.PositionPre = entity.Pos();
|
|
var transView = view.TransformViewMain;
|
|
transView.localPosition = view.LocalPositionShake + view.LocalPositionOrder;
|
|
view.PosView.Value = transView.position;
|
|
}
|
|
} |