void IReactiveExecuteSystem.Execute(List<Entity> entities)
{
if (pool.isGameOver
|| pool.isLevelTransitionDelay
|| !pool.hasMoveInput
|| !pool.isControllable
|| !pool.controllableEntity.isActiveTurnBased)
{
// ignore input
return;
}
var controllable = pool.controllableEntity;
pool.ReplaceFoodBag(pool.foodBag.points - 1);
var movement = pool.moveInput.movement;
var movementPos = ToVector(movement);
var currentPos = controllable.position;
int newX = currentPos.x + (int)movementPos.x;
int newY = currentPos.y + (int)movementPos.y;
ICollection<Entity> existing;
bool canMove = pool.IsGameBoardPositionOpen(newX, newY, out existing);
if (existing != null)
{
canMove = PrepareMove(controllable, existing);
}
if (canMove)
{
pool.PlayAudio(controllable.audioWalkSource);
controllable.ReplacePosition(newX, newY);
}
controllable.isActiveTurnBased = false;
}