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