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(1000, 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);
 | |
|             });
 | |
|         }
 | |
|     }
 | |
| } |