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