示例#1
0
        private void CheckReinforcement()
        {
            float reinforcePercent = Graph.QuadraticFunction(Graph.Normalized(10, 200), -1f, 0, 1);
            bool  hasPermission    = UtilityMethod.PercentageGame(reinforcePercent);

            if (hasPermission)
            {
                if (WaveCombination >= WaveCombinationLength)
                {
                    int phaseIndex = ((int)currentPhase + 1) % _phaseDictLength;
                    currentPhase = (Phase)phaseIndex;
                    //Debug.Log(currentPhase.ToString("g"));

                    BuildWaveStructure(currentPhase);
                }

                else if (_UnitWave.phaseStructure != null)
                {
                    //Debug.Log(currentPhase.ToString("g") +", " + WaveCombination +", " + WaveCombinationLength );

                    if (OnCallReinforcement != null)
                    {
                        OnCallReinforcement(_UnitWave.phaseStructure[WaveCombination]);
                    }

                    PullingTimeRecord = (LevelDesignManager.Time) + (Random.Range(_UnitWave.phaseStructure[WaveCombination].timeToNextWave - PullingRange,
                                                                                  _UnitWave.phaseStructure[WaveCombination].timeToNextWave + PullingRange));

                    WaveCombination++;
                }
            }
        }
示例#2
0
    //TODO : Hard Code, should make it data-driven
    public void AssignAgentsInSingleRow(CA_Terrain.TerrainBuilder p_terrain)
    {
        if (p_terrain.GetType() != typeof(PlainBuilder) || unitSTPlist.Count <= 0)
        {
            return;
        }

        for (int i = 0; i < p_terrain.activate_size; i++)
        {
            int offsetIndex = i + p_terrain.activateStartXPos;

            Transform g_prefab = p_terrain.stored_prefabs[offsetIndex].transform;

            if (g_prefab.name.IndexOf("On") > 0 && p_terrain.grids[i].isWalkable)
            {
                if (UtilityMethod.PercentageGame(0.05f))
                {
                    Unit_STP unitSTP = unitSTPlist[Random.Range(0, unitSTPlist.Count)];

                    GameObject generateUnit = PoolManager.instance.ReuseObject(unitSTP._id);
                    AIAgent    aIAgent      = generateUnit.GetComponent <AIAgent>();
                    AddAgent(aIAgent);

                    generateUnit.transform.SetParent(unitHolder.transform);
                    generateUnit.transform.position = g_prefab.transform.position + (Vector3.up * 0.5f);

                    aIAgent.SetUp(_map);
                    generateUnit.SetActive(true);
                }
            }
        }
    }
示例#3
0
        private void GenerateRandomObstacle()
        {
            Plain_STP plain_stp = (Plain_STP)terrain_stp;

            for (int i = 0; i < activate_size; i++)
            {
                int offsetIndex = i + activateStartXPos;

                Transform g_prefab = stored_prefabs[offsetIndex].transform;

                if (g_prefab.name.IndexOf("On") > 0 && UtilityMethod.PercentageGame(obstacleDistribution))
                {
                    Obstacle_STP randomObstacle    = plain_stp.obstables[Random.Range(0, plain_stp.obstables.Count)];
                    GameObject   generate_obstacle = PoolManager.instance.ReuseObject(randomObstacle._id);
                    generate_obstacle.transform.SetParent(Obstacle.transform);
                    generate_obstacle.transform.position = g_prefab.transform.position + (Vector3.up * 0.5f);
                    generate_obstacle.SetActive(true);

                    runtimeObstacle.Add(generate_obstacle);
                    grids[i].mapComponent = generate_obstacle.GetComponent <ObstacleComponent>();
                }
            }
        }