2
0
Fork 0
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#

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