Esempio n. 1
0
        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;
        }
    }