using Entitas; using UnityEngine; using Game; public class PointSystem : IExecuteSystem, IInitializeSystem { private IGroup _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; } } }