private void TryToSwallow(ClosePlayerInfo closePlayer)
 {
     if (CanSwallow(closePlayer) && planet.DistanceTo(closePlayer.Planet) <= (closePlayer.Planet.Radius * -0.5f))
     {
         Swallow(closePlayer);
     }
 }
    private Vector3 CalculatePlayerMovementFor(ClosePlayerInfo otherPlayer)
    {
        var movement = Vector3.zero;

        var otherPlanet = otherPlayer.Planet;

        if (player.CanSwallow(otherPlayer))
        {
            if (canAttack) // move closer
            {
                if (otherPlayer.IsOccludedByBlackHole)
                {
                    movement += CalculateSphericalMovementTo(otherPlanet);
                }
                else
                {
                    movement += Vector3.Normalize(otherPlanet.Center - planet.Center);
                }
            }
        }
        else if (!otherPlayer.IsOccludedByBlackHole)
        {
            //if (planet.DistanceTo(otherPlanet) < Random.Range(1.0f, 4.0f) * otherPlanet.Radius)
            {
                // move away
                movement += Vector3.Normalize(planet.Center - otherPlanet.Center);
            }
        }

        return(movement);
    }
 public LearningState(Player player, Planet playerPlanet)
 {
     closestPlayer                 = player.GetClosestPlayer();
     distanceToClosestPlayer       = closestPlayer.Planet.DistanceTo(playerPlanet);
     playerCanSwallowClosestPlayer = player.CanSwallow(closestPlayer);
     distanceToTheBlackHole        = playerPlanet.GetDistanceToTheBlackHole();
 }
    private void Swallow(ClosePlayerInfo closePlayer)
    {
        if (!planet.IsBlackHole)
        {
            planet.TargetRadius += closePlayer.Planet.Radius; // grow this
            IncorporateColor(closePlayer.Planet);
        }

        score = CalculateScore() + closePlayer.Player.CalculateScore();

        SwallowedOther?.Invoke(this, EventArgs.Empty);
        closePlayer.Player.WasSwallowed?.Invoke(this, EventArgs.Empty);
    }
    public ClosePlayerInfo GetClosestPlayer()
    {
        ClosePlayerInfo result = null;

        var closePlanet = planet.GetClosestPlanet();

        if (closePlanet != null)
        {
            var closePlayer = closePlanet.GetComponentInParent <Player>();

            if (closePlayer != null)
            {
                result = new ClosePlayerInfo(closePlayer, closePlanet, closePlanet.IsOccludedByBlackHole(planet));;
            }
        }

        return(result);
    }
 public bool CanSwallow(ClosePlayerInfo closePlayer)
 {
     return(closePlayer != null &&
            !closePlayer.Planet.IsBlackHole &&
            CalculateScore() > closePlayer.Player.CalculateScore());
 }