Beispiel #1
0
        public void ShouldHandleBattleOfTwoRandomMinionFacePlayers()
        {
            var container = new UnityContainer();

            Dto.UnityConfig.Register(container);
            UnityConfig.Register(container);
            Services.UnityConfig.Register(container);

            var deckParser    = container.Resolve <IDeckPlainTextParser>();
            var deckConverter = container.Resolve <IDeckConverter>();
            var deckDto       = deckParser.ParseDeck(File.ReadAllText(Deck1Path));
            var deck          = deckConverter.Convert(deckDto);

            var playerInitializer1 = new PlayerInitializer()
            {
                Class = CardClass.Hunter,
                Deck  = deck,
                Name  = "Player 1"
            };

            var playerInitializer2 = new PlayerInitializer()
            {
                Class = CardClass.Hunter,
                Deck  = deck,
                Name  = "Player 2"
            };

            var arbiter    = container.Resolve <IGameArbiter>();
            var gameResult = arbiter.HostTheGame(playerInitializer1, playerInitializer2, new DummyMinionFacePlayer(), new DummyMinionFacePlayer());

            gameResult.IsOk.Should().Be(true);
            var playerOneTurns = gameResult.FinalState.Me.Events.Last().Key;

            playerOneTurns.Should().BeGreaterThan(5);
        }
        internal Initializer(Controllers controller, GameData gameData)
        {
            var inputInitialized = new InputController(new PCInput());

            controller.AddController(inputInitialized);

            ServiceLocator.SetService(new ShipProviderPool(gameData.Ship.Provider));

            var shipWeaponFactory = new ShipWeaponFactory(
                gameData.ShipWeapon,
                new ShipWeaponBulletsPool(gameData.ShipWeapon.Bullet));

            var shipFactory = new ShipInitializer(
                gameData.Ship,
                ServiceLocator.Resolve <ShipProviderPool>(),
                shipWeaponFactory.GetShipWeapon);

            controller.AddController(shipFactory.CreateShipFromData(gameData.Ship));

            var playerInitialized = new PlayerInitializer(shipFactory.GetShip, gameData.Player, inputInitialized.Input);

            controller.AddController(playerInitialized.PlayerController);

            var cameraInitialized = new CameraInitializer(gameData.Camera, shipFactory.GetShip);

            controller.AddController(cameraInitialized.CameraController);

            IEnemyFactory factory = new AsteroidFactory();

            factory.Create(new Health(100.0f, 100.0f));
        }
Beispiel #3
0
        public void Initialize_spawns_a_paddle_at_slot_spawn_position()
        {
            var paddle     = Stub <IPaddle>();
            var playerSlot = Stub <IPlayerSlot>();

            PaddleFactory.Setup(p => p.Create(playerSlot.Object)).Returns(paddle.Object);
            var player = Stub <IPlayer>();

            player.Setup(p => p.Slot).Returns(playerSlot.Object);
            player.SetupSet(p => p.Paddle = paddle.Object);
            PlayerInitializer.Initialize(player.Object);
        }
Beispiel #4
0
    // Use this for initialization
    void Start()
    {
        bullets = ScriptableObject.CreateInstance <BulletDepot>();
        bullets.Load();

        playerFactory         = GetComponent <PlayerInitializer>();
        playerFactory.bullets = bullets;
        #if DEV
        player1 = playerFactory.CreatePlayer(CreateControlScheme(0), character, player1Pos, 0);
        playerFactory.CreatePlayer(CreateControlScheme(1), Character.Orpheus, new Vector3(10, 0, 0), 1);
                #endif
    }
    public static void InitializeSystemWorkflow()
    {
        GameVariables.EntityManager = World.DefaultGameObjectInjectionWorld.EntityManager;

        //GameVariables.PlayerVars.Default.PlayerAudioSource = MonoGameVariables.instance.playerAudioSource;
        //Game Initializer?

        UIManager.Initialize();
        PlayerInitializer.Initialize();
        WeaponInitializer.Initialize();
        MapEvents.Initialize();

        InitializeSystems();
    }
Beispiel #6
0
        public ServerPlayerState Initialize(PlayerInitializer playerInitializer)
        {
            var state = new ServerPlayerState()
            {
                OriginalDeck      = playerInitializer.Deck,
                Deck              = playerInitializer.Deck.Init(),
                Hand              = new List <CardBase>(),
                Minions           = new List <Minion>(),
                Player            = new Player(playerInitializer.Name, playerInitializer.Class, ruleSet.PlayerStartingHealth),
                Mana              = new ManaStorage(ruleSet.ManaStorageCrystalsAtStart),
                MinionOrderNumber = 0,
                Triggers          = new TriggerStorage(),
                Events            = new Dictionary <int, List <EventBase> >()
            };

            return(state);
        }
Beispiel #7
0
    public void rpc_UnspawnPlayerAvatar(PhotonPlayer player)
    {
        if (!PhotonNetwork.inRoom || !player.GetAttribute <bool>(PlayerAttributes.HASSPAWNED, false))
        {
            return;
        }

        //RESET DE LAA CAMERA UNIQUEMENT CHEZ LE CLIENT CONCERNEE
        if (PhotonNetwork.player == player)
        {
            ResetCameraTransform();
            //DESTROY AVATAR UNIQUEMENT PAR LE MASTERCLIENT
            //PhotonNetwork.DestroyPlayerObjects(player);
            DestroyPlayerCharacters(player);
            PlayerAvatar = null;
            player.SetAttribute(PlayerAttributes.HASSPAWNED, false);
        }
    }
    // Use this for initialization
    void Start()
    {
        p1LifeBar   = GameObject.Find("P1LifeBar");
        p1BufferBar = GameObject.Find("P1BufferBarSegments");
        p2LifeBar   = GameObject.Find("P2LifeBar");
        p2BufferBar = GameObject.Find("P2BufferBarSegments");
        UIElements  = GameObject.Find("InGameUIElements");
        ToggleUI(false);

        victoryText = GameObject.FindGameObjectWithTag("VictoryText").GetComponent <Text>();

        //bullets = new BulletDepot(); // clearing a warning w/next line - ski
        bullets = ScriptableObject.CreateInstance <BulletDepot>();
        bullets.Load();

        playerFactory         = GetComponent <PlayerInitializer>();
        playerFactory.bullets = bullets;
        player1Controls       = CreateControlScheme(0);
        player2Controls       = CreateControlScheme(1);
        background            = GameObject.FindGameObjectWithTag("Background").GetComponent <SpriteRenderer>();

        characterSelectManager = GetComponent <CharacterSelectManager>();
        int numCharacters = System.Enum.GetNames(typeof(Character)).Length;

        AnalyticsEngine.Initialize(new string[] { "LoholtBulletsFired", "OrpheusBulletsFired", "HirukoBulletsFired" });
        characterSelectManager.Reset();
        currentUpdateFunction = CharacterSelect;
        menuController        = GameObject.Find("Canvas").GetComponent <MenuController>();
        player1Controller     = InputManager.ActiveDevice;
        foreach (InputDevice controller in InputManager.Devices)
        {
            if (controller != InputManager.ActiveDevice)
            {
                player2Controller = controller;
            }
        }
        characterSelectManager.SetControllers(player1Controller, player2Controller);
        //menuController.Toggle();
    }
Beispiel #9
0
        public GameLogic(NetServer server)
        {
            this.server = server;
            hub         = Hub.Default;

            hub.Subscribe <PurchaseRerollRequested>(this, PurchaseReroll);
            hub.Subscribe <PurchaseUnitRequested>(this, PurchaseUnit);
            hub.Subscribe <MoveUnitRequested>(this, MoveUnit);
            hub.Subscribe <PurchaseXPRequested>(this, PurchaseXP);
            hub.Subscribe <UnitPurchased>(this, UnitPurchased);
            hub.Subscribe <UnitLeveledUp>(this, UnitLeveledUp);

            state = GameState.Idle;

            shop = new Shop();

            playerIntializer = new PlayerInitializer();
            playerIntializer.PlayerDatasCreated += HandlePlayerDatasCreated;

            timeline             = new GameTimeline();
            timeline.Finished   += () => hub.Publish(new GameFinished());
            timeline.Changed    += HandleTimelineChanged;
            timeline.RoundStart += HandleRoundStart;
        }
 /// <summary>
 /// Initializes references to the respective player script
 /// </summary>
 /// <param name="playerType">The type of player this component belongs to</param>
 /// <param name="player">The respective PlayerInitializer script</param>
 public void InitMemberFields(PlayerType playerType, PlayerInitializer player)
 {
     this.playerType = playerType;
     this.player     = player;
 }
        public GameResult HostTheGame(
            PlayerInitializer playerInitializer1,
            PlayerInitializer playerInitializer2,
            IUserInteractor playerInteractor1,
            IUserInteractor playerInteractor2)
        {
            logger.Log(LogType.Arbiter, LogSeverity.Info, "Game started");

            this.playerInteractor1 = playerInteractor1;
            this.playerInteractor2 = playerInteractor2;
            var deckValidation1 = deckValidator.ValidateDeck(playerInitializer1.Deck, playerInitializer1.Class);
            var deckValidation2 = deckValidator.ValidateDeck(playerInitializer2.Deck, playerInitializer2.Class);

            if (!deckValidation1.IsOk || !deckValidation2.IsOk)
            {
                //TODO: figure out where to log the validator messages
                return(new GameResult()
                {
                    IsOk = false
                });
            }

            player1State = gameStatePreparator.Initialize(playerInitializer1);
            player2State = gameStatePreparator.Initialize(playerInitializer2);

            //TODO: gamble the right of first turn.
            //TODO: implement mulligan and initial draw here
            //TODO: add service for draws and fatigue
            for (int i = 0; i < ruleSet.HandStartingSize; i++)
            {
                var randomCardIndex = new Random().Next(0, player1State.Deck.Count);
                var card            = player1State.Deck[randomCardIndex];
                player1State.Deck.RemoveAt(randomCardIndex);
                player1State.Hand.Add(card);

                var randomCardIndex2 = new Random().Next(0, player2State.Deck.Count);
                var card2            = player2State.Deck[randomCardIndex2];
                player2State.Deck.RemoveAt(randomCardIndex2);
                player2State.Hand.Add(card);
            }

            isPlayerOneActive = true;
            var internalTurnNumber = 1;

            while (internalTurnNumber++ < ruleSet.TurnMaxCountPerGame)
            {
                var state = new ServerGameState()
                {
                    Me  = ActivePlayerState,
                    Opp = PassivePlayerState
                };

                state.Me.Events.Add(internalTurnNumber, new List <EventBase>());

                logger.Log(LogType.Arbiter, LogSeverity.Info, $"Turn {internalTurnNumber / 2} started for {state.Me.Player.Name}");

                // Add new non-empty mana crystal
                if (state.Me.Mana.PermanentManaCrystals < ruleSet.ManaStorageMaxCrystals)
                {
                    state.Me.Mana.AddManaCrystals(1, false);
                }

                // Refresh Permanent Mana Crystals
                state.Me.Mana.RefreshPermanentManaCrystals();

                //TODO: draw the card from the deck
                var randomCardIndex = new Random().Next(0, state.Me.Deck.Count);
                var card            = state.Me.Deck[randomCardIndex];
                state.Me.Deck.RemoveAt(randomCardIndex);
                state.Me.Hand.Add(card);

                //TODO: start of turn events here
                //TODO: update the state to both users
                //TODO: send the events
                var stateForActiveUser = gameStatePreparator.PrepareGameState(state);
                ActivePlayerInteractor.Update(stateForActiveUser);

                //TODO: add time limit for a user to interact
                while (true)
                {
                    var interaction           = ActivePlayerInteractor.Interact();
                    var interactionValidation = userInteractionProcessor.ValidateInteraction(stateForActiveUser, interaction);
                    if (!interactionValidation.IsOk)
                    {
                        //TODO: figure out where to log the validator messages
                        return(new GameResult()
                        {
                            IsOk = false
                        });
                    }

                    if (interaction is InteractionEndTurn)
                    {
                        break;
                    }

                    //TODO: send the events to other user
                    userInteractionProcessor.ProcessInteraction(state, interaction);
                    if (state.Me.LastTurnEvents.Any(x => x is EventCharacterDied && (x as EventCharacterDied).DiedCharacter == state.Opp.Player.Id))
                    {
                        logger.Log(LogType.Arbiter, LogSeverity.Info, $"{state.Me.Player.Name} Won");
                        logger.Log(LogType.Arbiter, LogSeverity.Info, $"After Game State: {JsonConvert.SerializeObject(state)}");

                        // TODO: find a more approriate way to stop the game
                        return(new GameResult()
                        {
                            IsOk = true,
                            IsFirstPlayerWon = isPlayerOneActive,
                            FinalState = state
                        });
                    }

                    stateForActiveUser = gameStatePreparator.PrepareGameState(state);
                    ActivePlayerInteractor.Update(stateForActiveUser);
                }

                // Burn Unused Mana
                state.Me.Mana.BurnTemporaryCrystals();

                //TODO: end of turn events here
                isPlayerOneActive = !isPlayerOneActive;
            }

            return(null);
        }
Beispiel #12
0
 public void SetUp()
 {
     PaddleFactory     = Mock <IPaddleFactory>();
     PlayerInitializer = new PlayerInitializer(PaddleFactory.Object);
 }
Beispiel #13
0
    // Use this for initialization
    void Start()
    {
        GameObject[] HorusWinsIcons;
        GameObject[] SetWinsIcons;

        SetWinsIcons     = GameObject.FindGameObjectsWithTag("SetWinsIcon");
        HorusWinsIcons   = GameObject.FindGameObjectsWithTag("HorusWinsIcon");
        HorusWinsIconsSR = new SpriteRenderer[HorusWinsIcons.Length];
        SetWinsIconsSR   = new SpriteRenderer[SetWinsIcons.Length];
        p1LifeBar        = GameObject.Find("P1LifeBar");
        p1BufferBar      = GameObject.Find("P1BufferBarSegments");
        p2LifeBar        = GameObject.Find("P2LifeBar");
        p2BufferBar      = GameObject.Find("P2BufferBarSegments");
        UIElements       = GameObject.Find("InGameUIElements");
        ToggleUI(false);
        player1Wins = 0;
        player2Wins = 0;
        roundsToWin = 2;

        int j = 0;

        for (int i = 1; i >= 0; i--)
        {
            HorusWinsIconsSR[j] = HorusWinsIcons[i].GetComponent <SpriteRenderer>();
            SetWinsIconsSR[j]   = SetWinsIcons[i].GetComponent <SpriteRenderer>();
            j++;
        }

        timerStarted = false;

        //bullets = new BulletDepot(); // clearing a warning w/next line - ski
        bullets = ScriptableObject.CreateInstance <BulletDepot>();
        bullets.Load();

        playerFactory         = GetComponent <PlayerInitializer>();
        playerFactory.bullets = bullets;
        player1Controls       = CreateControlScheme(0);
        player2Controls       = CreateControlScheme(1);
        currentRoundTime      = roundTime;
        titleLogo             = GameObject.FindGameObjectWithTag("TitleLogo").GetComponent <SpriteRenderer>();
        pressStart            = titleLogo.GetComponent <Text>();
        infoScreen            = GameObject.FindGameObjectWithTag("InfoScreen").GetComponent <SpriteRenderer>();
        background            = GameObject.FindGameObjectWithTag("Background").GetComponent <SpriteRenderer>();
        roundTimer            = GameObject.FindGameObjectWithTag("RoundTimer").GetComponent <Text>();
        victoryText           = GameObject.FindGameObjectWithTag("VictoryText").GetComponent <Text>();

        titleLogo.enabled     = true;
        pressStart.enabled    = true;
        currentUpdateFunction = TitleScreen;

        characterSelectManager = GetComponent <CharacterSelectManager>();
        int numCharacters = System.Enum.GetNames(typeof(Character)).Length;

        string[,] bulletDescriptions = new string[numCharacters, numCharacters];
        for (int i = 0; i < numCharacters; i++)
        {
            bulletDescriptions[i, 0] = bullets.types[i].projectileTypes[1].bulletDescription;
            bulletDescriptions[i, 1] = bullets.types[i].projectileTypes[2].bulletDescription;
            bulletDescriptions[i, 2] = bullets.types[i].projectileTypes[0].bulletDescription;
        }

        AnalyticsEngine.Initialize(new string[] { "LoholtBulletsFired", "OrpheusBulletsFired", "HirukoBulletsFired" });
    }