コード例 #1
0
    void CheckPerimeter()
    {
        if (!perimeter.upToDate)
        {
            perimeter.upToDate = ResetPerimeter();
        }

        // determine enemy heading range etc i.e disposition
        List <GameObject> bogieGOs = new List <GameObject>(bogies.Count);

        for (int i = 0; i < bogies.Count; i++)
        {
            bogieGOs[i] = bogies[i].bogieObject;
        }

        NTools.Slice enemyDisposition = NTools.AnalyseGroupDisposition(
            perimeter.center,
            perimeter.headingFloat,
            bogieGOs
            );

        // Adjust perimeter heading based on enemy positions center of weight

        // Determine green and nongreen population of sectors

        // Compare population to sector importance, compute importanceMet value
        // if needed, add problem of type perimeter
        // if there exists a problem with said sector, but is not relevant anymore, remove problem
    }
コード例 #2
0
    void CheckPerimeter()
    {
        if (!perimeter.upToDate)
        {
            perimeter.upToDate = ReassignSectorPriorities();
            if (!perimeter.upToDate)
            {
                Debug.Log("Reassigning sector priorities failed.");
            }
        }

        List <GameObject> bogieGOs = new List <GameObject>(bogies.Capacity);

        NTools.Disposition enemyDisposition;

        // determine enemy heading range etc i.e disposition
        if (bogies.Count != 0)
        {
            for (int i = 0; i < bogies.Count; i++)
            {
                if (bogies[i].bogieObject != null)
                {
                    bogieGOs.Add(bogies[i].bogieObject);
                }
            }


            enemyDisposition = NTools.AnalyseGroupDisposition(
                perimeter.center,
                perimeter.headingFloat,
                bogieGOs
                );

            enemyGeneralPosition = enemyDisposition.centerOfMass;
        }
        else
        {
            enemyGeneralPosition = new Vector3(0f, 0f, 0f);
        }


        //TODO Optimize - determines perimeter anchor, heading2D and headingFloat. Is gud.
        if (objective.objectiveSet)
        {
            // If this happens, the game is lost or won, which will be caught by CheckObjective method
            if (!objective.objectiveObject)
            {
                return;
            }

            if (objective.objectiveIsFriendly)
            {
                perimeter.perimeterAnchor = objective.objectiveObject;

                perimeter.heading2D = new Vector2(
                    enemyGeneralPosition.x - perimeter.perimeterAnchor.transform.position.x,
                    enemyGeneralPosition.y - perimeter.perimeterAnchor.transform.position.y
                    );
                perimeter.headingFloat = NTools.HeadingFromVector(perimeter.heading2D);
            }
            else if (!objective.objectiveIsFriendly)
            {
                perimeter.perimeterAnchor = DeterminePerimeterAnchor();
                if (perimeter.perimeterAnchor != null)
                {
                    perimeter.heading2D = new Vector2(
                        enemyGeneralPosition.x - perimeter.perimeterAnchor.transform.position.x,
                        enemyGeneralPosition.y - perimeter.perimeterAnchor.transform.position.y
                        );
                    perimeter.headingFloat = NTools.HeadingFromVector(perimeter.heading2D);
                }
                else
                {
                    missionState = MissionState.lost;
                }
            }
        }
        else
        {
            perimeter.perimeterAnchor = DeterminePerimeterAnchor();
            if (perimeter.perimeterAnchor != null)
            {
                perimeter.heading2D = new Vector2(
                    enemyGeneralPosition.x - perimeter.perimeterAnchor.transform.position.x,
                    enemyGeneralPosition.y - perimeter.perimeterAnchor.transform.position.y
                    );
                perimeter.headingFloat = NTools.HeadingFromVector(perimeter.heading2D);
            }
            else
            {
                missionState = MissionState.lost;
            }
        }
    }