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.
		
		
		
		
		
			
		
			
	
	
		
			85 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
| 
											2 years ago
										 | using Entitas; | ||
|  | using UnityEngine; | ||
|  | using Game; | ||
|  | public class BulletSystem : IExecuteSystem, IInitializeSystem | ||
|  | { | ||
|  |     private IGroup<GameEntity> _entities; | ||
|  |     public void Initialize() | ||
|  |     { | ||
|  |         _entities = Util.GetGroup(GameMatcher.Bullet); | ||
|  |     } | ||
|  |     public void Execute() | ||
|  |     { | ||
|  |         foreach (var entity in _entities) | ||
|  |         { | ||
|  |             if (Util.IsPause(entity)) | ||
|  |             { | ||
|  |                 continue; | ||
|  |             } | ||
|  |             UpdateBulletViewRot(entity);    // 更新子弹旋转 | ||
|  |             // UpdateBullet(entity); | ||
|  |             UpdateBulletAlive(entity); //子弹销毁 | ||
|  |         } | ||
|  |     } | ||
|  |     public void UpdateBulletAlive(GameEntity entity) | ||
|  |     { | ||
|  |         if (!entity.timeline.IsRunning) | ||
|  |         { | ||
|  |             //时间轴跑完 | ||
|  |             Util.DestroyEntity(entity); | ||
|  |         } | ||
|  |         if (entity.move.IsAgainstWall) | ||
|  |         { | ||
|  |             //击中墙壁 | ||
|  |             Util.DestroyEntity(entity); | ||
|  |         } | ||
|  |         if (entity.skill.SkillHitInfo.Count > 0) | ||
|  |         { | ||
|  |             //命中 | ||
|  |             Util.DestroyEntity(entity); | ||
|  |         } | ||
|  |     } | ||
|  |     // public void UpdateBullet(GameEntity entity) | ||
|  |     // { | ||
|  |     //     var id = entity.iD; | ||
|  |     //     var bullet = entity.bullet; | ||
|  |     //     var cfg = id.data; | ||
|  |     //     var bp = cfg.blueprint; | ||
|  |     //     var view = entity.view; | ||
|  |     //     bullet.data.target = bullet.target; | ||
|  |     //     switch (bullet.state) | ||
|  |     //     { | ||
|  |     //         case EBpState.Enter: | ||
|  |     //             Util.RunBP(bp, GameConst.BP_ENTRANCE_Enter, bullet.data); | ||
|  |     //             bullet.state = EBpState.Update; | ||
|  |     //             break; | ||
|  |     //         case EBpState.Update: | ||
|  |     //             var timePast = Mathf.Min(Time.deltaTime, bullet.timeLeft); | ||
|  |     //             bullet.timeLeft -= timePast; | ||
|  |     //             if (bullet.timeLeft == 0) | ||
|  |     //             { | ||
|  |     //                 bullet.state = EBpState.Leave; | ||
|  |     //             } | ||
|  |     //             if (bullet.positionPre != Vector3.zero) | ||
|  |     //             { | ||
|  |     //                 Util.RunBP(bp, GameConst.BP_ENTRANCE_Update, bullet.data); | ||
|  |     //             } | ||
|  |     //             bullet.positionPre = entity.GetPos(); //刷新上一次位置 | ||
|  |     //             break; | ||
|  |     //         case EBpState.Leave: | ||
|  |     //             Util.RunBP(bp, GameConst.BP_ENTRANCE_Leave, bullet.data); | ||
|  |     //             Util.DestroyEntity(entity); | ||
|  |     //             break; | ||
|  |     //     } | ||
|  |     // } | ||
|  |     public void UpdateBulletViewRot(GameEntity entity) | ||
|  |     { | ||
|  |         var view = entity.view; | ||
|  |         var dir = entity.move.MoveDir; | ||
|  |         if (dir.magnitude > 0) | ||
|  |         { | ||
|  |             var rot = Quaternion.FromToRotation(Vector3.right, dir); | ||
|  |             view.TransformView.localRotation = rot; | ||
|  |         } | ||
|  |     } | ||
|  | } |