void NeighborAttackedAction(ref AbstractPlanet planet) { foreach (AbstractPlanet neigh in planet.adjacentPlanet) { if (actionHappened) { continue; } if (neigh.isContested && planet.planetOwnership == AbstractPlanet.Ownership.Enemy) //Is my neighbor planet being attacked { if (ValidPlanetForTraining(ref planet)) { planet.TrainSoldiers(true); } planet.isFeeding = true; float totalUnits = neigh.enemySoldiers + neigh.playerSoldiers; if (neigh.playerSoldiers / totalUnits > 0.50f) { ship = planet.CreateShip(AbstractPlanet.Ownership.Enemy); if (ship.soldiersOnBoard == ship.soldierCapacity || (!CanNewUnitsBeCreated() && ship.soldiersOnBoard > 0)) { LaunchShip(planet, neigh, planet.adjacentPaths, ship); } else if (!ship.GetIsLoading()) { ship.StartLoadingSoldiersToShip(planet); } } action++; actionHappened = true; } } }
//helper function public void PlayerCreateShip() { Debug.Log("create ship for player"); ShipScript ship = planetScript.CreateShip(AbstractPlanet.Ownership.Player); if (ship != null) { ManagerScript.Instance.audioManager.PlaySound("ButtonClick"); planetScript.LoadSoldiersToShip(ship); } }
void NeighborNeedsSoldiersAction(ref AbstractPlanet planet) { foreach (AbstractPlanet neigh in planet.adjacentPlanet) { if (actionHappened) { continue; } AbstractPlanet target = null; if (neigh.planetOwnership == AbstractPlanet.Ownership.Enemy && neigh.isRequestingSoldiers) { if (ValidPlanetForTraining(ref planet)) { planet.TrainSoldiers(true); } planet.isFeeding = true; planet.planetRequesting = neigh; target = neigh; } else if (neigh.planetOwnership == AbstractPlanet.Ownership.Enemy && neigh.isFeeding) { if (PlanetInPath(neigh, neigh.planetRequesting) && neigh != neigh.planetRequesting) { if (ValidPlanetForTraining(ref planet)) { planet.TrainSoldiers(true); } planet.isFeeding = true; planet.planetRequesting = neigh.planetRequesting; target = neigh; } } if (target) { ship = planet.CreateShip(AbstractPlanet.Ownership.Enemy); if (ship.soldiersOnBoard >= ship.soldierCapacity * 0.1f || (!CanNewUnitsBeCreated() && ship.soldiersOnBoard > 0)) { LaunchShip(planet, target, planet.adjacentPaths, ship); } else if (!ship.GetIsLoading()) { ship.StartLoadingSoldiersToShip(planet); } action++; actionHappened = true; } } }
void PlanetActions(AbstractPlanet planet) { //Always create units CreateUnits(planet); //Always send units to neighboring planets once ship capacity is met //Create ship planet.CreateShip(AbstractPlanet.Ownership.Enemy); //Load Units to ship planet.LoadSoldiersToShip(planet.ships[Indices.SHIP_ENEMY]); //Load Soldiers Units until ship capacity is met if ((planet.enemySoldiers == 0 && planet.ships[Indices.SHIP_ENEMY].soldiersOnBoard > 0) || planet.ships[Indices.SHIP_ENEMY].soldiersOnBoard >= planet.ships [Indices.SHIP_ENEMY].soldierCapacity) { //Send units to a neighboring planet neighboringPlanet = ChoosePlanet(planet); //Launch Ship to neighboring planet LaunchShip(planet, neighboringPlanet, planet.adjacentPaths, planet.ships [Indices.SHIP_ENEMY]); } }
void ExpandAction(ref AbstractPlanet planet) { foreach (AbstractPlanet neigh in planet.adjacentPlanet) { if (actionHappened) { continue; } if (neigh.planetOwnership == AbstractPlanet.Ownership.Neutral && neigh.isContested == false) { if (planet.GetPlanetType() != AbstractPlanet.PlanetType.Hybrid && planet.GetPlanetType() != AbstractPlanet.PlanetType.Soldier && planet.enemySoldiers == 0) { planet.isRequestingSoldiers = true; } else { planet.isRequestingSoldiers = false; planet.planetRequesting = null; if (ValidPlanetForTraining(ref planet)) { planet.TrainSoldiers(true); } } ship = planet.CreateShip(AbstractPlanet.Ownership.Enemy); if (ship.soldiersOnBoard >= 1 || (!CanNewUnitsBeCreated() && ship.soldiersOnBoard > 0)) { LaunchShip(planet, neigh, planet.adjacentPaths, ship); planet.TrainSoldiers(false); } else if (!ship.GetIsLoading()) { ship.StartLoadingSoldiersToShip(planet); } action++; actionHappened = true; } } }
void PlayerNearAction(ref AbstractPlanet planet) { foreach (AbstractPlanet neigh in planet.adjacentPlanet) { if (actionHappened) { continue; } if (neigh.planetOwnership == AbstractPlanet.Ownership.Player) //Is there an enemy next to me { if (ValidPlanetForTraining(ref planet)) { planet.TrainSoldiers(true); } planet.isRequestingSoldiers = true; //Am I stronger then the enemy, then attack int estimatedUnits = (int)Mathf.Max(neigh.rankingScript.currentRank * 50 - 25, 0); ship = planet.CreateShip(AbstractPlanet.Ownership.Enemy); if ((ship.soldiersOnBoard + planet.enemySoldiers) > (estimatedUnits)) { if (ship.soldiersOnBoard == ship.soldierCapacity || ship.soldiersOnBoard > estimatedUnits) { LaunchShip(planet, neigh, planet.adjacentPaths, ship); } else if (!ship.GetIsLoading()) { ship.StartLoadingSoldiersToShip(planet); } } else { ship.StopLoadingSoldiersToShip(); } action++; actionHappened = true; } } }