Пример #1
0
        /// <param name="notification">
        /// if client side send he missed his turn, or if it happened because of internal timout
        /// </param>
        private async Task RandomUserPlay(RoomUser roomUser, bool notification)
        {
            var randomCardIndex = StaticRandom.GetRandom(roomUser.Hand.Count);

            // await UserPlay(roomUser, randomCardIndex);

            if (notification)
            {
                _serverLoop.CancelTurnTimeout(roomUser);
            }

            var throwResult = PlayBase(roomUser, randomCardIndex);


            if (!roomUser.ActiveUser.IsDisconnected)
            {
                await _masterHub.SendOrderedAsync(roomUser.ActiveUser, "ForcePlay", throwResult);
            }

            //todo then you have to do the same assertion on this!

            await SendCurrentOppoThrow(roomUser, throwResult);


            await NextTurn(roomUser.Room);
        }
Пример #2
0
        //no test, you can test the "concurrent random"

        public async Task BotPlay(RoomBot roomBot)
        {
            //can happen with logic
            var randomCardIndex = StaticRandom.GetRandom(roomBot.Hand.Count);

            var throwResult = PlayBase(roomBot, randomCardIndex);

            await SendCurrentOppoThrow(roomBot, throwResult);

            await NextTurn(roomBot.Room);

            _logger.LogInformation($"bot {roomBot.Id} has played card {randomCardIndex}");
        } //no test, you can test the "concurrent random"
Пример #3
0
        /// <summary>
        /// called by timeout
        /// </summary>
        public async Task FillPendingRoomWithBots(Room room)
        {
            room.RoomBots = new();
            var botsCount = room.Capacity - room.RoomUsers.Count;

            var botIds = new List <string> {
                "999", "9999", "99999"
            };

            for (int i = 0; i < botsCount; i++)
            {
                var botId = botIds.Cut(StaticRandom.GetRandom(botIds.Count));
                room.RoomBots.Add(new RoomBot {
                    Id = botId, Room = room
                });
            }

            room.RoomActors.AddRange(room.RoomBots);

            await PrepareRoom(room);
        }
Пример #4
0
    // Unit functions
    public void AddUnit(UnitClass unitType, Vector3 addPosition, int unitTeam, bool is_ai, string unitInfoFromServer)
    {
        if (unitInfoFromServer == null)
        {
            // Instantiate unit and instantiate starting cooldown and player
            UnitClass newUnit = Instantiate(unitType, new Vector3(addPosition.x, TileArray[(int)addPosition.x, (int)addPosition.z].tile_elevation, addPosition.z), Quaternion.identity);

            // Point unit at center of map...
            newUnit.transform.LookAt(new Vector3(5, newUnit.transform.position.y, 5));

            newUnit.playerName = PLAYER_NAME;
            newUnit.playerTeam = unitTeam;

            // Create unitID and Cooldown
            newUnit.entityID = GameObjectID.CreateID(PLAYER_NAME);
            int initRandomCooldown = StaticRandom.GetRandom(1, newUnit.unitCooldownMax);
            newUnit.unitCooldown = initRandomCooldown;

            if (is_ai)
            {
                newUnit.IS_AI = true;
            }


            // Add to local unitList
            unitList.Add(newUnit);

            // Add to unit firebase unit list
            if (GAME_MODE == "multiplayer")
            {
                string unitJson = JsonUtility.ToJson(newUnit);
                gameDatabaseReference.Child("units").Push().SetRawJsonValueAsync(unitJson);
                turnManager.SendMoveToFirebase(PLAYER_TEAM + "|CADD|" + newUnit.playerName + "|" + newUnit.entityID + "|" + newUnit.entityName + "|" + addPosition.x + "|" + addPosition.z + "|" + newUnit.unitCooldown);
            }
        }
        else
        {
            string[] aData = unitInfoFromServer.Split('|');

            if (Convert.ToInt32(aData[0]) != PLAYER_TEAM)
            {
                string unitName = aData[4].Replace("(Clone)", "");

                // Determine unit type
                switch (unitName)
                {
                case "Cloud":
                    unitType = unitCloud;
                    break;

                case "Black Rook":
                    unitType = unitBlackRook;
                    break;

                case "Medic":
                    unitType = unitMedic;
                    break;

                case "Insektobot":
                    unitType = unitInsektobot;
                    break;

                case "Bad Robut":
                    unitType = unitBadRobut;
                    break;

                case "Sun Man":
                    unitType = unitSunMan;
                    break;
                }

                int xCoord = Convert.ToInt32(aData[5]);
                int zCoord = Convert.ToInt32(aData[6]);

                addPosition.x = xCoord;
                addPosition.y = TileArray[xCoord, zCoord].tile_elevation;
                addPosition.z = zCoord;

                // Instantiate unit and instantiate starting cooldown and player
                UnitClass newUnit = Instantiate(unitType, addPosition, Quaternion.identity);

                newUnit.playerName   = aData[2];
                newUnit.playerTeam   = Convert.ToInt32(aData[0]);
                newUnit.entityID     = aData[3];
                newUnit.unitCooldown = Convert.ToInt32(aData[7]);

                // Look at center of map...
                newUnit.transform.LookAt(new Vector3(5, transform.position.y, 5));

                // Add to local unitList
                unitList.Add(newUnit);
            }
        }
    }