Ejemplo n.º 1
0
    void Start()
    {
        Initialise();

        clock        = GameMap.Instance.tickGenerator;
        playerScript = GameMap.Instance.playerGameObject.GetComponent <PlayerScript>();

        if (!GameMap.Instance.enemyList.Contains(gameObject))
        {
            GameMap.Instance.enemyList.Add(gameObject);                 // !!! Přiřazení se bude provádět odjinud
        }

        roundSpawned = GameMap.Instance.player.roundsAlive;
    }
        public async Task MultipleUnRegistrationsTest()
        {
            var tickGenerator = new TickGenerator(10);

            ISequencerUC sequencer =
                SequencerUC
                .Construct()
                .Register(Steps.Notify, new StrategyOneOnOneUC())
            ;

            Action action = () =>
            {
                sequencer.Point(SeqPointTypeUC.Notify, Steps.Notify);
            };

            Task t = await tickGenerator.RegisterAsync(action).WrapIntoTask();

            Assert.IsTrue(t.IsCompleted);
            Assert.IsFalse(t.IsCanceled);
            Assert.IsFalse(t.IsFaulted);

            for (int i = 0; i < 10; i++)
            {
                await sequencer.TestPointAsync(Steps.Notify);
            }

            t = await tickGenerator.UnRegisterAsync(action).WrapIntoTask();

            Assert.IsTrue(t.IsCompleted);
            Assert.IsFalse(t.IsCanceled);
            Assert.IsFalse(t.IsFaulted);

            t = await tickGenerator.UnRegisterAsync(action).WrapIntoTask();

            Assert.IsTrue(t.IsCompleted);
            Assert.IsFalse(t.IsCanceled);
            Assert.IsFalse(t.IsFaulted);

            await sequencer.WhenAll();

            sequencer.TryReThrowException();
        }
        public async Task DisposeBasicTest()
        {
            var tickGenerator = new TickGenerator(10);

            ISequencerUC sequencer =
                SequencerUC
                .Construct()
                .Register(Steps.Notify, new StrategyOneOnOneUC())
            ;

            Action action = () =>
            {
                sequencer.Point(SeqPointTypeUC.Notify, Steps.Notify);
            };

            tickGenerator.Dispose();
            Task t = await tickGenerator.Disposed.WrapIntoTask();

            Assert.IsTrue(t.IsCompleted);
            Assert.IsFalse(t.IsCanceled);
            Assert.IsFalse(t.IsFaulted);

            Assert.ThrowsAsync <ObjectDisposedException>(async() => t = await tickGenerator.RegisterAsync(action).WrapIntoTask());
            Assert.IsTrue(t.IsCompleted);
            Assert.IsFalse(t.IsCanceled);
            Assert.IsFalse(t.IsFaulted);

            Assert.ThrowsAsync <ObjectDisposedException>(async() => t = await tickGenerator.UnRegisterAsync(action).WrapIntoTask());
            Assert.IsTrue(t.IsCompleted);
            Assert.IsFalse(t.IsCanceled);
            Assert.IsFalse(t.IsFaulted);

            await sequencer.WhenAll();

            sequencer.TryReThrowException();
        }
        public async Task ConcurrentTest()
        {
            ISequencerUC sequencer =
                SequencerUC
                .Construct()
                .Register(Steps.Notify, new StrategyOneOnOneUC())

                .Register(TickGeneratorSequencer.RegisterStatus, new StrategyOneOnOneUC())
                .Register(TickGeneratorSequencer.RegisterActiveProcessing, new StrategyOneOnOneUC())
                .Register(TickGeneratorSequencer.UnRegisterStatus, new StrategyOneOnOneUC())
                .Register(TickGeneratorSequencer.UnRegisterActiveProcessing, new StrategyOneOnOneUC())

                .Register(TickGeneratorSequencer.Processing, new StrategyOneOnOneUC())
                .Register(TickGeneratorSequencer.ExclusiveProcessing, new StrategyOneOnOneUC())
                .Register(TickGeneratorSequencer.BeginActiveProcessing, new StrategyOneOnOneUC())
                .Register(TickGeneratorSequencer.EndActiveProcessing, new StrategyOneOnOneUC())
                .Register(TickGeneratorSequencer.ActionsProcessing, new StrategyOneOnOneUC())
                .Register(TickGeneratorSequencer.ActionsProcessingCount, new StrategyOneOnOneUC())

                .Register(TickGeneratorSequencer.TryUpdateTimerBegin, new StrategyOneOnOneUC())
                .Register(TickGeneratorSequencer.TryUpdateTimerEnd, new StrategyOneOnOneUC())

                .Register(TickGeneratorSequencer.CallBackProcessing, new StrategyOneOnOneUC())
                //.Register(TickGeneratorSequencer.CallBackProcessing, new StrategyOneOnOneUC())
                //.Register(TickGeneratorSequencer.CallBackProcessing, new StrategyOneOnOneUC())
                //.Register(TickGeneratorSequencer.CallBackProcessing, new StrategyOneOnOneUC())
            ;

            var tickGenerator = new TickGenerator(10, sequencer);

            Action action = () =>
            {
                sequencer.Point(SeqPointTypeUC.Notify, Steps.Notify);
            };

            Task <Task> tt = Task.Run(() => tickGenerator.RegisterAsync(action).WrapIntoTask());

            var rStatus = await sequencer.TestPointAsync(TickGeneratorSequencer.RegisterStatus);

            Assert.AreEqual(TickGeneratorStatus.Operating, rStatus.ProductionArg);
            var rActiveProcesing = await sequencer.TestPointAsync(TickGeneratorSequencer.RegisterActiveProcessing);

            Assert.AreEqual(false, rActiveProcesing.ProductionArg);

            var processing = await sequencer.TestPointAsync(TickGeneratorSequencer.Processing);

            var processingResult = (TickGenerator.ProcessingResult)processing.ProductionArg;

            Assert.AreEqual(TickGenerator.ProcessingResult.Processed, processingResult);

            var exclusiveProcessing = await sequencer.TestPointAsync(TickGeneratorSequencer.ExclusiveProcessing);

            exclusiveProcessing.Complete();

            var beginActiveProcessing = await sequencer.TestPointAsync(TickGeneratorSequencer.BeginActiveProcessing);

            beginActiveProcessing.Complete();

            var actionProcessing = await sequencer.TestPointAsync(TickGeneratorSequencer.ActionsProcessing);

            actionProcessing.Complete();
            Assert.AreEqual(false, actionProcessing.ProductionArg);

            var updateTimerBegin = await sequencer.TestPointAsync(TickGeneratorSequencer.TryUpdateTimerBegin);

            updateTimerBegin.Complete();
            Assert.AreEqual(TickGeneratorTimerStatus.None, updateTimerBegin.ProductionArg);

            var updateTimerEnd = await sequencer.TestPointAsync(TickGeneratorSequencer.TryUpdateTimerEnd);

            updateTimerEnd.Complete();
            Assert.AreEqual(TickGeneratorTimerStatus.Activate | TickGeneratorTimerStatus.IsActive | TickGeneratorTimerStatus.Changed, updateTimerEnd.ProductionArg);

            var endActiveProcessing = await sequencer.TestPointAsync(TickGeneratorSequencer.EndActiveProcessing);

            endActiveProcessing.Complete();
            Assert.AreEqual(TickGeneratorStatus.Operating, endActiveProcessing.ProductionArg);


            Task t = await tt;

            Assert.IsTrue(t.IsCompleted);
            Assert.IsFalse(t.IsCanceled);
            Assert.IsFalse(t.IsFaulted);


            for (int i = 0; i < 10; i++)
            {
                var callBackProcessing = await sequencer.TestPointAsync(TickGeneratorSequencer.CallBackProcessing);

                callBackProcessing.Complete();

                var processingCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.Processing);

                var processingCycleResult = (TickGenerator.ProcessingResult)processingCycle.ProductionArg;
                Assert.AreEqual(TickGenerator.ProcessingResult.Processed, processingCycleResult);

                var exclusiveProcessingCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.ExclusiveProcessing);

                exclusiveProcessingCycle.Complete();

                var beginActiveProcessingCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.BeginActiveProcessing);

                beginActiveProcessingCycle.Complete();

                var actionProcessingCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.ActionsProcessing);

                actionProcessingCycle.Complete();
                Assert.AreEqual(true, actionProcessingCycle.ProductionArg);

                var actionProcessingCountCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.ActionsProcessingCount);

                Assert.AreEqual(1, actionProcessingCountCycle.ProductionArg);
                for (int j = 0; j < (int)actionProcessingCountCycle.ProductionArg; j++)
                {
                    await sequencer.TestPointAsync(Steps.Notify);
                }

                var updateTimerBeginCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.TryUpdateTimerBegin);

                updateTimerBeginCycle.Complete();
                Assert.AreEqual(TickGeneratorTimerStatus.IsActive, updateTimerBeginCycle.ProductionArg);

                var updateTimerEndCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.TryUpdateTimerEnd);

                updateTimerEndCycle.Complete();
                Assert.AreEqual(TickGeneratorTimerStatus.Activate | TickGeneratorTimerStatus.IsActive, updateTimerEndCycle.ProductionArg);

                var endActiveProcessingCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.EndActiveProcessing);

                endActiveProcessingCycle.Complete();
                Assert.AreEqual(TickGeneratorStatus.Operating, endActiveProcessingCycle.ProductionArg);
            }

            for (int i = 0; i < 1; i++)
            {
                var callBackProcessing = await sequencer.TestPointAsync(TickGeneratorSequencer.CallBackProcessing);

                callBackProcessing.Complete();

                var processingCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.Processing);

                var processingCycleResult = (TickGenerator.ProcessingResult)processingCycle.ProductionArg;
                Assert.AreEqual(TickGenerator.ProcessingResult.Processed, processingCycleResult);

                var exclusiveProcessingCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.ExclusiveProcessing);

                exclusiveProcessingCycle.Complete();

                var beginActiveProcessingCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.BeginActiveProcessing);

                beginActiveProcessingCycle.Complete();

                //ActiveProcessing
                tt = Task.Run(() => tickGenerator.UnRegisterAsync(action).WrapIntoTask());

                var rStatusCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.UnRegisterStatus);

                Assert.AreEqual(TickGeneratorStatus.Operating, rStatusCycle.ProductionArg);
                var rActiveProcesingCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.UnRegisterActiveProcessing);

                Assert.AreEqual(true, rActiveProcesingCycle.ProductionArg);

                var actionProcessingCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.ActionsProcessing);

                actionProcessingCycle.Complete();
                Assert.AreEqual(true, actionProcessingCycle.ProductionArg);

                var actionProcessingCountCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.ActionsProcessingCount);

                Assert.AreEqual(1, actionProcessingCountCycle.ProductionArg);
                for (int j = 0; j < (int)actionProcessingCountCycle.ProductionArg; j++)
                {
                    await sequencer.TestPointAsync(Steps.Notify);
                }

                var updateTimerBeginCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.TryUpdateTimerBegin);

                updateTimerBeginCycle.Complete();
                Assert.AreEqual(TickGeneratorTimerStatus.IsActive, updateTimerBeginCycle.ProductionArg);

                var updateTimerEndCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.TryUpdateTimerEnd);

                updateTimerEndCycle.Complete();
                Assert.AreEqual(TickGeneratorTimerStatus.Changed, updateTimerEndCycle.ProductionArg);

                var endActiveProcessingCycle = await sequencer.TestPointAsync(TickGeneratorSequencer.EndActiveProcessing);

                endActiveProcessingCycle.Complete();
                Assert.AreEqual(TickGeneratorStatus.Operating, endActiveProcessingCycle.ProductionArg);
            }


            t = await tt;
            Assert.IsTrue(t.IsCompleted);
            Assert.IsFalse(t.IsCanceled);
            Assert.IsFalse(t.IsFaulted);

            await sequencer.WhenAll();

            sequencer.TryReThrowException();
        }
Ejemplo n.º 5
0
 void Start()
 {
     clock = GameMap.Instance.tickGenerator;
     clock.PlayerScript = this;
 }
Ejemplo n.º 6
0
    void CreateScene()
    {
        Debug.Log("GameMap: Creating scene for level: " + level);
        System.Random rnd = new System.Random();

        // Tomuhle nerozumím, v exploreru se mi nějak kupí GameObjecty
        //if (Enviroment != null)
        //{
        //    Destroy(Enviroment);
        //}

        if (Enviroment == null)
        {
            Enviroment = (GameObject)Instantiate(new GameObject("Enviroment"), Vector3.zero, Quaternion.identity);  // Vytvoř GO Enviroment, který slouží spíše jako složka
        }

        mapa = new MapDungeon(width, height, Random.Range(8, 10), new Vector2(3, 3), new Vector2(9, 9));    // Vygeneruj mapu se zadanými parametry

        if (tickGenerator == null)                                                                          // Zkontroluj, jestli existuje ve scéně tickGenerator
        {
            if (GameObject.Find("TickGenerator") == null)                                                   // Pokud neexistuje, tak ho instancuj
            {
                GameObject TickGeneratorGameObject = Instantiate(tickGeneratorPrefab) as GameObject;
                TickGeneratorGameObject.name = "TickGenerator";
                tickGenerator = TickGeneratorGameObject.GetComponent <TickGenerator>();
            }
            else                                                                                            // Pokud existuje, tak ho najdi
            {
                tickGenerator = GameObject.Find("TickGenerator").GetComponent <TickGenerator>();
            }
        }


        corridorGroundDictionary = new Dictionary <Vector2, GameObject>();                                   // Instancuj slovníky
        dungeonGroundDictionary  = new Dictionary <Vector2, GameObject>();
        objectDictionary         = new Dictionary <Vector2, GameObject>();
        wallDictionary           = new Dictionary <Vector2, GameObject>();

        for (int x = 0; x < width; x++)                                                         // Zde probíhá instancování všech GameObjectů na základě dat z mapy
        {                                                                                       // Objekty se zrovna přidávají do slovníků
            for (int y = 0; y < height; y++)
            {
                switch (mapa.mapArray[x, y])
                {
                case 0:         // floors
                    GameObject fPrefab = Instantiate(floorPrefab[rnd.Next(0, floorPrefab.Length - 1)], new Vector3(x, y), Quaternion.identity) as GameObject;
                    fPrefab.transform.parent = Enviroment.transform;
                    dungeonGroundDictionary.Add(fPrefab.transform.position, fPrefab);
                    break;

                case 2:         // corridor
                    GameObject cPrefab = Instantiate(floorPrefab[rnd.Next(0, floorPrefab.Length - 1)], new Vector3(x, y), Quaternion.identity) as GameObject;
                    cPrefab.transform.parent = Enviroment.transform;
                    corridorGroundDictionary.Add(cPrefab.transform.position, cPrefab);
                    break;

                case 1:         // wall
                    int wallToInstantiate = 0;

                    if (d(100))
                    {
                        wallToInstantiate = rnd.Next(0, wallPrefab.Length - 1);
                    }

                    GameObject wPrefab = Instantiate(wallPrefab[wallToInstantiate], new Vector3(x, y), Quaternion.identity) as GameObject;
                    wPrefab.transform.parent = Enviroment.transform;
                    wallDictionary.Add(wPrefab.transform.position, wPrefab);
                    break;

                case 333:       // stairs
                    GameObject object_stairs = Instantiate(exitPrefab, new Vector2(x, y), Quaternion.identity) as GameObject;
                    object_stairs.transform.parent = Enviroment.transform;
                    object_stairs.name             = "object_stairs";
                    objectDictionary.Add(object_stairs.transform.position, object_stairs);
                    break;

                default:        // všechno ostatní
                    Debug.Log("The GameMap is trying to instantiate thing id " + mapa.mapArray[x, y] + " at x: " + x + " y: " + y + " but there is no prefab set.");
                    break;
                }
            }
        }

        for (int x = -4; x < (width + 4); x++)          // Nakresli spodní a horní okraje zdí
        {
            for (int y = -4; y < 0; y++)
            {
                GameObject wPrefab = Instantiate(wallPrefab[rnd.Next(0, wallPrefab.Length - 1)], new Vector3(x, y), Quaternion.identity) as GameObject;
                wPrefab.transform.parent = Enviroment.transform;
                wallDictionary.Add(wPrefab.transform.position, wPrefab);
            }
            for (int y = height; y < (height + 4); y++)
            {
                GameObject wPrefab = Instantiate(wallPrefab[rnd.Next(0, wallPrefab.Length - 1)], new Vector3(x, y), Quaternion.identity) as GameObject;
                wPrefab.transform.parent = Enviroment.transform;
                wallDictionary.Add(wPrefab.transform.position, wPrefab);
            }
        }

        for (int y = 0; y < (height); y++)              // Levý a pravý okraj
        {
            for (int x = -4; x < 0; x++)
            {
                GameObject wPrefab = Instantiate(wallPrefab[rnd.Next(0, wallPrefab.Length - 1)], new Vector3(x, y), Quaternion.identity) as GameObject;
                wPrefab.transform.parent = Enviroment.transform;
                wallDictionary.Add(wPrefab.transform.position, wPrefab);
            }
            for (int x = width; x < (width + 4); x++)
            {
                GameObject wPrefab = Instantiate(wallPrefab[rnd.Next(0, wallPrefab.Length - 1)], new Vector3(x, y), Quaternion.identity) as GameObject;
                wPrefab.transform.parent = Enviroment.transform;
                wallDictionary.Add(wPrefab.transform.position, wPrefab);
            }
        }


        if (player == null)
        {
            player = new Player(mapa.entrance);                                                                 // Spawni hráče, pokud neexistuje
        }
        playerGameObject = Instantiate(playerPrefab, mapa.entrance, Quaternion.identity) as GameObject;         // Instancuj hráčův GameObject
        playerGameObject.GetComponent <PlayerScript>().HumanPlayer = player;                                    // Přiřaď reference do hráčova skriptu
        player.position = mapa.entrance;
        playerGameObject.GetComponent <PlayerScript>().clock = tickGenerator;
        playerGameObject.name = "Player";                                                                       // Přejmenuj hráče na "Player"
        playerGameObject.GetComponent <PlayerScript>().HumanPlayer.PutWeaponInHand(player.equippedWeapon, playerGameObject.transform);
        playerGameObject.transform.position = mapa.entrance;                                                    // Přesuň hráčův GO na vchod
        Camera.main.transform.position      = new Vector3(player.position.x, player.position.y, -10);
        Camera.main.GetComponent <CameraHandler>().target = playerGameObject.transform;
    }