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#
		
	
| 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;
 | |
|         }
 | |
|     }
 | |
| } |