示例#1
0
    /**
     * Initialize the Player techs with the tech store
     */
    public void init(Player player, TechStore techStore)
    {
        engines           = new List <TechEngine>();
        scanners          = new List <TechHullComponent>();
        shields           = new List <TechHullComponent>();
        armor             = new List <TechHullComponent>();
        torpedos          = new List <TechHullComponent>();
        beamWeapons       = new List <TechHullComponent>();
        hulls             = new List <TechHull>();
        starbases         = new List <TechHull>();
        planetaryScanners = new List <TechPlanetaryScanner>();
        defenses          = new List <TechDefence>();
        techsForCategory  = new Dictionary <TechCategory, List <Tech> >();
        hullComponents    = new List <TechHullComponent>();

        bestEngine           = addPlayerTechs(player, techStore.getAllEngines(), engines);
        bestScanner          = addPlayerTechs(player, techStore.getAllScanners(), scanners);
        bestShield           = addPlayerTechs(player, techStore.getAllShields(), shields);
        bestArmor            = addPlayerTechs(player, techStore.getAllArmor(), armor);
        bestTorpedo          = addPlayerTechs(player, techStore.getAllTorpedos(), torpedos);
        bestBeamWeapon       = addPlayerTechs(player, techStore.getAllBeamWeapons(), beamWeapons);
        bestHull             = addPlayerTechs(player, techStore.getAllHulls(), hulls);
        bestStarbase         = addPlayerTechs(player, techStore.getAllStarbases(), starbases);
        bestPlanetaryScanner = addPlayerTechs(player, techStore.getAllPlanetaryScanners(), planetaryScanners);
        bestDefense          = addPlayerTechs(player, techStore.getAllDefenses(), defenses);

        foreach (TechCategory category in Enum.GetValues(typeof(TechCategory)))
        {
            techsForCategory.Add(category, new List <Tech>());
        }

        foreach (Tech tech in techStore.getAll())
        {
            if (player.hasTech(tech))
            {
                List <Tech> t = techsForCategory[tech.getCategory()];
                t.Add(tech);
                if (tech is TechHullComponent)
                {
                    hullComponents.Add((TechHullComponent)tech);
                }
            }
        }

        foreach (TechCategory category in Enum.GetValues(typeof(TechCategory)))
        {
            techsForCategory[category] = techsForCategory[category].OrderBy(t => t.getRanking()).ToList <Tech>();
        }

        hullComponents = hullComponents.OrderBy(t => t.getRanking()).ToList <TechHullComponent>();
    }
示例#2
0
    /**
     * Perform scanning for a player
     */
    private void scanPlayer(Player player)
    {
        TechPlanetaryScanner planetaryScanner = player.getTechs().getBestPlanetaryScanner();
        int planetScanRange    = (int)Mathf.Pow(planetaryScanner.getScanRange(), 2);
        int planetScanRangePen = (int)Mathf.Pow(planetaryScanner.getScanRangePen(), 2);

        List <Fleet>   fleets   = new List <Fleet>();
        List <Planet>  planets  = new List <Planet>();
        List <Scanner> scanners = new List <Scanner>();

        foreach (Fleet fleet in game.getFleets())
        {
            if (fleet.getOwner().getID() == player.getID())
            {
                fleet.discover(player, true);
                if (fleet.canScan())
                {
                    scanners.Add(new Scanner(fleet, (int)Mathf.Pow(fleet.getAggregate().getScanRange(), 2), (int)Mathf.Pow(fleet.getAggregate()
                                                                                                                           .getScanRangePen(), 2)));
                }
            }
            else
            {
                fleets.Add(fleet);
            }
        }

        foreach (Planet planet in game.getPlanets())
        {
            if (planet.getOwner() != null && planet.getOwner().getID() == player.getID())
            {
                player.discover(game, planet);
                if (planet.isScanner())
                {
                    scanners.Add(new Scanner(planet, planetScanRange, planetScanRangePen));
                }
            }
            else
            {
                planets.Add(planet);
            }
        }

        foreach (Scanner scanner in scanners)
        {
            int index = 0;
            while (index < planets.Count)
            {
                Planet planetToScan = planets[index];

                if (scanner.getMapObject().dist(planetToScan) <= scanner.getScanRangePen())
                {
                    player.discover(game, planetToScan);

                    foreach (Fleet fleet in planetToScan.getOrbitingFleets())
                    {
                        Debug.Log("Fleet: " + fleet.getName());
                        Debug.Log("Fleet Owner: " + fleet.getOwner().getID());
                        if (fleet.getOwner().getID() != player.getID())
                        {
                            fleet.discover(player, true);
                            fleets.Remove(fleet);
                        }
                    }
                    planets.RemoveAt(index);
                    index--;
                }
                index++;
            }

            index = 0;
            while (index < fleets.Count)
            {
                Fleet fleetToScan = fleets[index];

                if (scanner.getMapObject().dist(fleetToScan) <= scanner.getScanRangePen())
                {
                    fleetToScan.discover(player, true);

                    fleets.RemoveAt(index);
                    index--;
                }
                index++;
            }

            index = 0;
            while (index < fleets.Count)
            {
                Fleet fleetToScan = fleets[index];

                if (scanner.getMapObject().dist(fleetToScan) <= scanner.getScanRange())
                {
                    fleetToScan.discover(player, false);

                    fleets.RemoveAt(index);
                    index--;
                }
                index++;
            }
        }
    }
示例#3
0
 public void setBestPlanetaryScanner(TechPlanetaryScanner bestPlanetaryScanner)
 {
     this.bestPlanetaryScanner = bestPlanetaryScanner;
 }