Exemplo n.º 1
0
        public override void setGameState(int currentRound,
                                          IEnumerable <GoE.GameLogic.Utils.CapturedObservation> O_d,
                                          List <GameLogic.Utils.PursuerPathObservation> O_p,
                                          IntrusionGameState s)
        {
            prevS   = s;
            prevO_p = O_p;
            prevO_d = O_d;

            foreach (var o in O_p)
            {
                accumObservationsPerEve[o.observer].Add(o);
            }

            foreach (Evader e in s.ActiveEvaders)
            {
                foreach (var obs in O_d)
                {
                    if (obs.who == e)
                    {
                        currentEvadersLocations[e] = new Location(Location.Type.Captured);
                    }
                }
            }

            Dictionary <string, List <Point> > markedLocations = new Dictionary <string, List <Point> >();

            List <Point> tmpPointList = new List <Point>();

            foreach (var p in O_p)
            {
                tmpPointList.AddRange(p.observedPursuerPath);
            }
            markedLocations.Add("Pursuer trail(O_p)", tmpPointList);

            tmpPointList = new List <Point>();
            foreach (var p in O_p)
            {
                tmpPointList.Add(p.observedPursuerPath.Last());
            }
            markedLocations.Add("Pursuer last pos", tmpPointList);

            tmpPointList = new List <Point>();
            foreach (var p in O_d)
            {
                tmpPointList.Add(p.where);
            }
            markedLocations.Add("Dead Evaders(O_d)", tmpPointList);


            List <Point> detectionArea = new List <Point>();

            foreach (Evader e in s.ActiveEvaders)
            {
                detectionArea.AddRange(
                    g.getNodesWithinDistance(currentEvadersLocations[e].nodeLocation, gm.r_es));
            }
            markedLocations.Add("Area within r_s(evaders detecting pursuers)", detectionArea);


            pgui.markLocations(markedLocations.toPointFMarkings());

            InputRequest         req = new InputRequest();
            IEnumerable <Evader> relevantEvaders;

            if (currentRound == 0)
            {
                relevantEvaders = gm.A_E;
            }
            else
            {
                relevantEvaders = s.ActiveEvaders;
            }

            foreach (Evader e in relevantEvaders)
            {
                if (currentEvadersLocations[e].locationType != Location.Type.Node ||
                    (currentEvadersLocations[e].nodeLocation.manDist(intrusionAreaCenter) > gm.r_e))
                {
                    req.addMovementOption(e, currentEvadersLocations[e], getPossibleNextLocations(currentEvadersLocations[e]));
                }

                prevChoiceKey = req.addComboChoice(e, "communicate", new string[] { "yes", "no" }, "no");
                //req.addComboChoice(e, "Noise/Data unit to transmit",
                //    s.M[s.MostUpdatedEvadersMemoryRound][e].ToList().Except(dataUnitsInSink).Union(new DataUnit[]{DataUnit.NIL, DataUnit.Flush}),
                //    DataUnit.NIL);

                //List<Point> relevantTargets = new List<Point>();
                //var relevantTargetsDummy = targets.Intersect(g.getNodesWithinDistance(currentEvadersLocations[e].nodeLocation, gm.r_e));
                //foreach (Point p in relevantTargetsDummy)
                //    relevantTargets.Add(p);

                //req.addComboChoice(e, "Target to eavesdrop (" + relevantTargets.Count.ToString() + " available)",
                //    GameLogic.Utils.pointsToLocations(relevantTargets),
                //    new Location(Location.Type.Undefined));
            }

            pgui.setInputRequest(req);
            nextEvadersToCommunicate.Clear();
        }