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++; } } }
//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); } } } }
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>(); } } }