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.
92 lines
2.4 KiB
C#
92 lines
2.4 KiB
C#
using Entitas;
|
|
using UnityEngine;
|
|
using Game;
|
|
|
|
//死亡流程控制
|
|
public class DieSystem : IExecuteSystem, IInitializeSystem
|
|
{
|
|
private IGroup<GameEntity> _entities;
|
|
|
|
public void Initialize()
|
|
{
|
|
_entities = Util.GetGroup(GameMatcher.Hp);
|
|
}
|
|
|
|
public void Execute()
|
|
{
|
|
foreach (var entity in _entities)
|
|
{
|
|
UpdateDie(entity);
|
|
}
|
|
}
|
|
|
|
private void UpdateDie(GameEntity entity)
|
|
{
|
|
var hp = entity.hp;
|
|
if (hp.IsAlive)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (Util.IsPause(entity))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (hp.IsDying)
|
|
{
|
|
hp.DyingTime -= Time.deltaTime;
|
|
if (hp.DyingTime <= 0)
|
|
{
|
|
hp.DyingTime = 0;
|
|
hp.IsDying = false;
|
|
if (entity.IsMaster())
|
|
{
|
|
UIManager.Instance.Open(EuiPage.Die);
|
|
}
|
|
else
|
|
{
|
|
//创建尸体特效
|
|
entity.CastShadow(2000, ECastShadowType.DeadBody);
|
|
//掉落pt
|
|
CreatePt(entity.Pos());
|
|
//死亡事件通知
|
|
entity.OnDie();
|
|
Util.DestroyEntity(entity);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (entity.hasMove && !entity.move.IsGround)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//死亡动画
|
|
entity.animation.DieMsg = true;
|
|
//浮空
|
|
entity.move.Velocity = new Vector3((entity.move.Velocity.x > 0 ? 1 : -1) * 3, 3, 0);
|
|
hp.DyingTime = GameConst.DyingTime;
|
|
hp.IsDying = true;
|
|
entity.view.GameObjectLogic.SetActive(false);
|
|
}
|
|
}
|
|
|
|
private void CreatePt(Vector3 pos)
|
|
{
|
|
pos = new Vector3(pos.x, 0, pos.z);
|
|
var count = GameRandom.Randint(0, 4);
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
var pointPos = pos + GameRandom.RandomVector3(-0.2f, 0.2f);
|
|
var dir = pointPos - pos;
|
|
var cfgId = GameRandom.Roll(0.7f) ? GameConst.PtRedId : GameConst.PtBlueId;
|
|
Util.CreateEntity(cfgId, (entity) =>
|
|
{
|
|
entity.point.CastSpeed = dir;
|
|
Util.SetEntityPos(entity, pointPos);
|
|
});
|
|
}
|
|
}
|
|
} |