private void GenerateEnemyOrBarrier(double percent) { // 0 - barrier // 1 - enemy var splineResult = roadSpline.Evaluate(percent); var position = splineResult.position; var rotation = splineResult.rotation; var randomObject = new System.Random(DateTime.Now.Millisecond); var random = (randomObject.Next() + (int)(position.x * position.z)) % 2; // 2 is count of aviable entities to spawn var entityData = new RoadEntityData(); entityData.percentAtRoad = (float)percent; // if this is barrier if (random == 0) { var randomTypeId = Random.Range(0, barriers.Count); entityData.percentAtRoad = (float)percent; var barrier = GenerateBarrier(position, rotation, randomTypeId, entityData); var barrierType = barrier.barrierType; if (barrierType == BarrierType.Ground_FullRoad) { for (var i = 0; i < countOfRoads; i++) { GenerateRingsOnRoad((float)percent, 3, 10, i); } } else if (barrierType == BarrierType.Flying_FullRoad) { for (var i = 1; i < 3; i++) { GenerateRingsOnRoad((float)percent, 0, 10, i); } } } else if (random == 1) { GenerateEnemy(position, rotation, entityData); } }
private void CreateBarrierAtPosition(int barrierId, Vector3 position, Quaternion rotation, RoadEntityData entityData) { var barrierT = Instantiate(barriers[barrierId]).transform; barrierT.position = position; barrierT.rotation = rotation; barrierT.parent = barrierHolder; }
private Barrier GenerateBarrier(Vector3 position, Quaternion rotation, int randomTypeId, RoadEntityData entityData) { var barrier = barriers[randomTypeId].GetComponent <Barrier>(); if (barrier == null) { barrier = barriers[randomTypeId].GetComponentInChildren <Barrier>(); if (barrier == null) { Debug.LogError("Can't generate barries => Barrier component is null"); return(null); } } entityData.entityType = EntityType.Barrier; entityData.barrierType = barrier.barrierType; switch (barrier.barrierType) { case BarrierType.Ground_FullRoad: CreateBarrierAtPosition(randomTypeId, position, rotation, entityData); entityData.roadCount = 1; break; case BarrierType.Ground_SingePath: var random = new System.Random(DateTime.Now.Millisecond); var randomBarriersCount = random.Next(0, countOfRoads - 1); CreateMultipleBarriersAtPosition(randomTypeId, randomBarriersCount, position, rotation); entityData.roadCount = randomBarriersCount; break; case BarrierType.Flying_FullRoad: CreateBarrierAtPosition(randomTypeId, position, rotation, entityData); entityData.roadCount = 1; break; case BarrierType.Flying_SinglePath: var randomF = new System.Random(DateTime.Now.Millisecond); var randomBarriersCountF = randomF.Next(0, countOfRoads); CreateMultipleBarriersAtPosition(randomTypeId, randomBarriersCountF, position, rotation); entityData.roadCount = randomBarriersCountF; break; } AddData(entityData); return(barrier); }