// Start is called before the first frame update
    void Start()
    {
        PlayerInputManager[] playerSlots = GetComponentsInChildren <PlayerInputManager>(true);

        joinedPlayers = FindObjectOfType <JoinedPlayers>();

        const int joystickMax = 4;

        int joystickCount = Mathf.Clamp(Input.GetJoystickNames().Length, 0, joystickMax);

        if (playerSlots.Length < joystickMax + 1)
        {
            Debug.LogError("Not enough player slots");
            return;
        }

        for (int i = 0; i < playerSlots.Length; i++)
        {
            inputManagers.Add(playerSlots[i]);
            inputManagers[i].gameObject.GetComponentInChildren <Animator>(true).gameObject.SetActive(false);
            if (i > 0)
            {
                inputManagers[i].SetJoystickController(i);
            }
            else
            {
                inputManagers[i].SetKeyboardControlled();
            }
        }
    }
示例#2
0
        public override void Reward()
        {
            base.Reward();
            AlmostNoNpcsLeft -= LowGate_AlmostNoNpcsLeft;
            var randomInstance = RandomInstance.getInstance(this);
            var num            = randomInstance.NextDouble();

            foreach (var joined in JoinedPlayers.Values)
            {
                var currencyReward = new Reward(new Dictionary <RewardType, int> {
                    { RewardType.CREDITS, 1250000 }, { RewardType.URIDIUM, 12500 }
                });
                var ammoReward    = new Reward(RewardType.AMMO, Item.Find("ammunition_laser_ucb-100"), 12500);
                var specialReward = new characters.Reward(RewardType.ITEM, Item.Find("equipment_weapon_laser_lf-4"), 1);
                if (num < 0.03)
                {
                    specialReward.ParseRewards(joined);
                }
                //TODO
                MoveOut(joined);
                ammoReward.ParseRewards(joined);
                currencyReward.ParseRewards(joined);

                if (joined.OwnedGates.ContainsKey(Id))
                {
                    joined.OwnedGates.TryRemove(Id, out _);
                }
            }
            JoinedPlayers.Clear();
        }
示例#3
0
文件: Game.cs 项目: kgerde/Ven-Bowl
 /// <summary>
 /// Remove a list of players from the game.
 /// </summary>
 /// <param name="players">IEnumerable Players list to be removed from the game.</param>
 public void RemovePlayers(IEnumerable <Player> players)
 {
     if (CurrentPhase.CurrentPhase == Constant.FIRST_GAME_PHASE)
     {
         if (null == JoinedPlayers)
         {
             throw new PlayerNotInGameException("The player could not be Removed from the Game. No players are joined.");
         }
         try
         {
             foreach (Player player in players)
             {
                 JoinedPlayers.Remove(player);
             }
         }
         catch (Exception)
         {
             throw new PlayerNotInGameException("The player could not be Removed from the Game. The player was not joined.");
         }
     }
     else
     {
         throw new ActiveGameException("The game is active. Players may not be removed from the game once it has started.");
     }
 }
示例#4
0
        public override void Reward()
        {
            AlmostNoNpcsLeft -= LowGate_AlmostNoNpcsLeft;
            Finished          = true;

            var hit = Random.Next(0, 100);

            foreach (var joined in JoinedPlayers.Values)
            {
                var currencyReward = new Reward(new Dictionary <RewardType, int> {
                    { RewardType.CREDITS, 2500000 }, { RewardType.URIDIUM, 25000 }
                });
                var ammoReward    = new Reward(RewardType.AMMO, new Item(-1, "ammunition_laser_ucb-100", 25000), 25000);
                var specialReward = new characters.Reward(RewardType.ITEM, new Item(-1, "equipment_weapon_laser_lf-4", 1), 1);
                if (joined?.GetGameSession() == null)
                {
                    continue;
                }
                var joinedSession = joined.GetGameSession();
                if (hit == 15)
                {
                    //Packet.Builder.LegacyModule(joinedSession, "0|A|STD|You've won a LF4!");
                    specialReward.ParseRewards(joined);
                }
                //TODO
                MoveOut(joined);
                ammoReward.ParseRewards(joined);
                currencyReward.ParseRewards(joined);
            }
            JoinedPlayers.Clear();
        }
示例#5
0
文件: Game.cs 项目: kgerde/Ven-Bowl
 /// <summary>
 /// Add a list of players to the current game.
 /// </summary>
 /// <param name="players">IEnumerable of Players to add to the game.</param>
 /// <exception cref="ActiveGameException">ActiveGameException can be thrown if the game is already started.</exception>
 public void AddPlayers(IEnumerable <Player> players)
 {
     if (CurrentPhase.CurrentPhase == Constant.FIRST_GAME_PHASE)
     {
         JoinedPlayers.AddRange(players);
     }
     else
     {
         throw new ActiveGameException("The game has already been started. Players can only be added to games before they are started.");
     }
 }
示例#6
0
        public override void ParseFromNetworkMessage(NetworkMessage message)
        {
            ChannelId   = message.ReadUInt16();
            ChannelName = message.ReadString();

            JoinedPlayers.Capacity = message.ReadUInt16();
            for (var i = 0; i < JoinedPlayers.Capacity; ++i)
            {
                JoinedPlayers.Add(message.ReadString());
            }

            InvitedPlayers.Capacity = message.ReadUInt16();
            for (var i = 0; i < InvitedPlayers.Capacity; ++i)
            {
                InvitedPlayers.Add(message.ReadString());
            }
        }
示例#7
0
        public override void Reward()
        {
            base.Reward();
            var currencyReward = new Reward(new Dictionary<RewardType, int> { { RewardType.CREDITS, 40000000 }, { RewardType.URIDIUM, 40000 }, { RewardType.EXPERIENCE, 8000000 }, { RewardType.HONOR, 200000 } });
            var ammoReward = new Reward(RewardType.AMMO, Item.Find("ammunition_laser_ucb-100"), 42500);
            MoveOut(Owner);
            ammoReward.ParseRewards(Owner);
            currencyReward.ParseRewards(Owner);

            if (Owner.OwnedGates.ContainsKey(Id))
            {
                Owner.OwnedGates.TryRemove(Id, out _);
            }
            Owner.Gates.BetaComplete++;
            Owner.Gates.BetaReady = false;
            Owner.Gates.Save();
            JoinedPlayers.Clear();
            Owner.RefreshPlayersView();
        }
示例#8
0
        public Launcher(bool startServers)
        {
            DataContext = this;

            InitializeComponent();

            CanResize = false;

            if (startServers)
            {
                //GameServer
                _serverThread = new Thread(() =>
                {
                    try
                    {
                        _logger.Info($"Running game server..");
                        _manager.StartServer();
                        _logger.Info($"Game server stopped.");
                    }
                    catch (Exception e)
                    {
                        _logger.Error(e, $"A critical error occurred on the game server.");
                    }
                });
                _serverThread.Start();

                //CoordServer
                _coordServer.OnPlayerJoin += (player) =>
                {
                    _logger.Info($"Played joined {player.Name} from address {player.Address}.");

                    var existing = Player.GetPlayerByAddressOrCreate(player.Address);
                    player.Player.Address = player.Address;
                    player.Player.ReIndex();
                    existing.ReplaceWith(player.Player);

                    JoinedPlayers.Add(player);
                    Dispatcher.UIThread.InvokeAsync(() =>
                    {
                        ShowHosting();
                    });
                };
                _coordServer.OnPlayerLeave += (player) =>
                {
                    _logger.Info($"Played left {player.Name} from address {player.Address}.");

                    JoinedPlayers.Remove(player);
                    if (JoinedPlayers.Count == 0)
                    {
                        Dispatcher.UIThread.InvokeAsync(() =>
                        {
                            ShowJoin();
                        });
                    }
                };
                _coordThread = new Thread(() =>
                {
                    try
                    {
                        _logger.Info($"Starting coordination server..");
                        _coordServer.Start();
                    }
                    catch (Exception e)
                    {
                        _logger.Error(e, $"A critical error occurred on the coordination server.");
                    }
                });
                _coordThread.Start();

                Closed += (a, b) =>
                {
                    _manager.StopServer();
                    _logger.Info($"Stopped game server.");
                    _coordServer.Stop();
                    _logger.Info($"Stopped coordination server.");
                    if (_serverThread != null)
                    {
                        _serverThread.Join();
                    }

                    if (_coordThread != null)
                    {
                        _coordThread.Join();
                    }
                };
            }
        }
        public GameTableState()
        {
            On((TableCreated e) =>
            {
                TableId       = e.Id;
                SmallBlind    = e.SmallBlind;
                BuyIn         = e.BuyIn;
                Dealer        = null;
                JoinedPlayers = new Dictionary <string, TablePlayer>();
                Players       = new Dictionary <int, GamePlayer>();
            });
            On((GameFinished e) =>
            {
                GameId         = null;
                MaxBid         = 0;
                CurrentBidding = null;

                foreach (var winner in e.Winners)
                {
                    JoinedPlayers[winner.UserId].Cash += winner.Amount;
                }
            });

            On((GameCreated e) =>
            {
                GameId = e.GameId;
                Pack   = new Pack(e.Cards);
                Deck   = new List <Card>();
                SitPlayers(e.Players);
                CurrentBidding = new BiddingInfo(e.Players.Count);
                MaxRaisedValue = 0;
            });
            On((DealerAssigned e) =>
            {
                Dealer = e.Dealer.Position;
            });
            On((PlayerJoined e) => JoinedPlayers.Add(e.UserId, new TablePlayer()
            {
                Cash     = e.Cash,
                Position = e.Position,
                UserId   = e.UserId,
            }));
            On((CardsDealed e) =>
            {
                foreach (var playerCard in e.Cards)
                {
                    Pack.Remove(playerCard.Card);
                    Players[playerCard.Position].Cards.Add(playerCard.Card);
                }
            });
            On((BidMade e) => AddBidEvent(e.Bid));
            On((BiddingFinished e) =>
            {
                MaxRaisedValue = 0;
            });
            On((NextPlayerTurned e) =>
            {
                CurrentPlayer  = e.Player.Position;
                MaxRaisedValue = e.MaxRaisedValue;
            });
            On((DeckDealed e) =>
            {
                foreach (var card in e.Cards)
                {
                    Pack.Remove(card);
                    Deck.Add(card);
                }
                CurrentBidding.NextStage();
            });
        }
 public bool HasUser(string userId)
 {
     return(JoinedPlayers.ContainsKey(userId));
 }