public void TestSimpleInput() { var input = new[] { 1, 1, 3 }; //1/5, 1/5, 3/5 var indexPicker = new RandomIndexPicker(input); var result = new List <int>(); var numberOfSamples = 10_00000; var deviation = (int)Math.Sqrt(numberOfSamples) * 2; for (var _ = 0; _ < numberOfSamples; _++) { result.Add(indexPicker.PickIndex()); } var part = numberOfSamples / 5; using (var _ = new AssertionScope()) { var zeroIndexCount = result.Count(x => x == 0); var firstIndexCount = result.Count(x => x == 1); var secondIndexCount = result.Count(x => x == 2); Console.WriteLine($"{zeroIndexCount};{firstIndexCount};{secondIndexCount}"); zeroIndexCount.Should().BeInRange(part - deviation, part + deviation); firstIndexCount.Should().BeInRange(part - deviation, part + deviation); secondIndexCount.Should().BeInRange(part * 3 - deviation, part * 3 + deviation); } }
void SpawnPlayerAndEnd(Dungeon dungeon) { RandomIndexPicker <Room> roomPicker = new RandomIndexPicker <Room> (dungeon.rooms); Room startRoom = roomPicker.Pick(); Vector2 playerPos = startRoom.GetCenter(); SpawnPlayer(playerPos); Room endRoom = roomPicker.Pick(); Vector2 endPos = endRoom.GetCenter(); SpawnEnd(endPos); }
void InstantiateGuards(Dungeon dungeon) { RandomIndexPicker <Corridor> corridorPicker = new RandomIndexPicker <Corridor> (dungeon.corridors); int guardNum = Mathf.FloorToInt(difficulty * 5f * corridorPicker.Count()); for (int i = 0; i < guardNum; i++) { if (corridorPicker.IsEmpty()) { break; } // Generate random values int randomState = Random.Range(0, 10); //int randomState = 0; if (randomState > 2) { randomState = 0; } StartingState state = (StartingState)randomState; float idle = Random.value * Random.Range(1, 5) + 1f; Characteristics chara = Characteristics.random(difficulty); Corridor corridor = corridorPicker.Pick(); // Instantiate guard GameObject guard = Instantiate(guardPrefab, tile_size * new Vector3(corridor.start.x, corridor.start.y, 0), Quaternion.identity, transform); // Edit guardController values GuardController guardController = guard.GetComponent <GuardController> (); guardController.startingState = state; guardController.idleDuration = idle; guardController.innerState.characteristics = chara; // Patroling state if (state == StartingState.Patrol) { GuardBuildWaypoints(dungeon, guardController, corridor, tile_size); } // Absorb bar GameObject absorbBar = Instantiate(guardAbsorbBar, canvas.transform); AbsorbBar absorbScript = guard.GetComponent <AbsorbBar> (); absorbScript.bar = absorbBar.GetComponent <RectTransform> (); absorbScript.targetCanvas = canvas.GetComponent <RectTransform> (); absorbScript.maxAmout = 1; } }