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.
		
		
		
		
		
			
		
			
	
	
		
			80 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			80 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
| 
											2 years ago
										 | using Entitas; | ||
|  | using UnityEngine; | ||
|  | using Game; | ||
|  | public class PointSystem : IExecuteSystem, IInitializeSystem | ||
|  | { | ||
|  |     private IGroup<GameEntity> _entities; | ||
|  |     public void Initialize() | ||
|  |     { | ||
|  |         _entities = Util.GetGroup(GameMatcher.Point); | ||
|  |     } | ||
|  |     public void Execute() | ||
|  |     { | ||
|  |         foreach (var entity in _entities) | ||
|  |         { | ||
|  |             UpdatePoint(entity); | ||
|  |         } | ||
|  |     } | ||
|  |     public void UpdatePoint(GameEntity entity) | ||
|  |     { | ||
|  |         var point = entity.point; | ||
|  |         var move = entity.move; | ||
|  |         var master = Util.GetMaster(); | ||
|  |         switch (point.State) | ||
|  |         { | ||
|  |             case EPointState.Create: | ||
|  |                 move.Rigidbody.velocity = point.CastSpeed * 5; | ||
|  |                 point.State = EPointState.CreateWait; | ||
|  |                 point.TimeLeft = 1; | ||
|  |                 break; | ||
|  |             case EPointState.CreateWait: | ||
|  |                 point.TimeLeft -= Time.deltaTime; | ||
|  |                 if (point.TimeLeft <= 0) | ||
|  |                 { | ||
|  |                     point.TimeLeft = 0; | ||
|  |                     point.State = EPointState.Running; | ||
|  |                 } | ||
|  |                 break; | ||
|  |             case EPointState.Running: | ||
|  |                 var targetPos = master.Pos(); | ||
|  |                 var nowPos = entity.Pos(); | ||
|  |                 var distance = Vector3.Distance(targetPos, nowPos); | ||
|  |                 var view = entity.view; | ||
|  |                 var moveSpeed = 0f; | ||
|  |                 if (distance > 1.5) | ||
|  |                 { | ||
|  |                     Util.EntityStopMove(entity.ID()); | ||
|  |                 } | ||
|  |                 else | ||
|  |                 { | ||
|  |                     if (distance > 0.1f) | ||
|  |                     { | ||
|  |                         var moveDir = (targetPos - nowPos).normalized; | ||
|  |                         moveSpeed = 2 / distance; | ||
|  |                         entity.move.MoveParam.MoveSpeedMax = moveSpeed; | ||
|  |                         Util.EntityMove(entity.ID(), moveDir); | ||
|  |                     } | ||
|  |                     else | ||
|  |                     { | ||
|  |                         Util.EntityStopMove(entity.ID()); | ||
|  |                         point.State = EPointState.Destroy; | ||
|  |                     } | ||
|  | 
 | ||
|  |                 } | ||
|  |                 if (moveSpeed < 1) | ||
|  |                 { | ||
|  |                     // point.shakeTimeLeft -= Time.deltaTime; | ||
|  |                     // if (point.shakeTimeLeft < 0) | ||
|  |                     // { | ||
|  |                     //     point.shakeTimeLeft += 10; | ||
|  |                     // } | ||
|  |                     // var shakeDist = Mathf.Sin(point.shakeTimeLeft * ShakeRate) * ShakeDistance; | ||
|  |                     // view.localPositionShake = new Vector3(0, 0, shakeDist); | ||
|  |                 } | ||
|  |                 break; | ||
|  |             case EPointState.Destroy: | ||
|  |                 Util.DestroyEntity(entity); | ||
|  |                 break; | ||
|  |         } | ||
|  |     } | ||
|  | } |