private bool SelectGametype(GametypeCategory ActiveCategory, ref int CurrentIndex, ref float DrawY)
        {
            if (CurrentIndex >= GametypeScrollbarValue)
            {
                DrawY += 20;
            }

            ++CurrentIndex;

            for (int G = 0; G < ActiveCategory.ArrayGametype.Length; ++G)
            {
                if (CurrentIndex >= GametypeScrollbarValue)
                {
                    if (MouseHelper.MouseStateCurrent.X >= LeftPanelX && MouseHelper.MouseStateCurrent.X < LeftPanelX + PanelWidth &&
                        MouseHelper.MouseStateCurrent.Y >= DrawY && MouseHelper.MouseStateCurrent.Y < DrawY + 20 &&
                        InputHelper.InputConfirmPressed())
                    {
                        SelectedGametype = ActiveCategory.ArrayGametype[G];
                        Room.RoomType    = SelectedGametype.Name;
                        Owner.OnGametypeUpdate();
                        return(true);
                    }

                    DrawY += 20;
                }

                ++CurrentIndex;
            }

            return(false);
        }
        /// <summary>
        /// Create a new Board
        /// </summary>
        /// <param name="colour1">The new black colour</param>
        /// <param name="colour2">The new White colour</param>
        /// <param name="mode">The new game mode</param>
        /// <param name="pieces">Use these pieces instead of creating new ones</param>
        private Board(Color colour1, Color colour2, Gametype mode, List <Piece> pieces)
        {
            // Assign Board properties
            _mode       = mode;
            WhiteColour = Color.FromArgb(colour1.ToArgb());
            BlackColour = Color.FromArgb(colour2.ToArgb());

            // Add all the pieces
            Pieces = pieces;
        }
示例#3
0
 public void Init(Gametype gameType, NetServer netServer)
 {
     GameType          = gameType;
     server            = netServer;
     gameEnded         = false;
     isInitialized     = false;
     shouldQuit        = false;
     randomGenerator   = new Random(Environment.TickCount);
     players           = new List <Player>(2);
     synchronizedQueue = new ConcurrentQueue <Action>();
     StateMgr          = new GameStateManager();
 }
示例#4
0
        public static Gametype GenerateDefaultZMSettings()
        {
            Gametype zm = new Gametype {
                Defaults = new Gametype.DefaultSettings(),
                Customs  = new Gametype.CustomSettings()
            };

            zm.Defaults.PointerAddress = 21021944;  // maps/mp/gametypes_zm/_clientids.gsc pointer
            zm.Defaults.BufferAddress  = 810181280; // maps/mp/gametypes_zm/_clientids.gsc buffer address
            zm.Customs.BufferAddress   = 13371337;
            zm.ScriptPath = "maps/mp/gametypes_zm/_clientids.gsc";

            return(zm);
        }
示例#5
0
        public static Gametype GenerateDefaultMPSettings()
        {
            Gametype mp = new Gametype {
                Defaults = new Gametype.DefaultSettings(),
                Customs  = new Gametype.CustomSettings()
            };

            mp.Defaults.PointerAddress = 21021896;  // maps/mp/gametypes/_clientids.gsc pointer
            mp.Defaults.BufferAddress  = 810181280; // maps/mp/gametypes/_clientids.gsc buffer address
            mp.Customs.BufferAddress   = 268697600;
            mp.ScriptPath = "maps/mp/gametypes/_clientids.gsc";

            return(mp);
        }
示例#6
0
        public void Init(Gametype gameType)
        {
            GameType            = gameType;
            stopUpdating        = false;
            gameEnded           = false;
            isGameInitialized   = false;
            userActionsDisabled = true;
            shouldQuit          = false;
            playerQuit          = false;
            objects             = new List <ISceneObject>();
            objectsToRemove     = new List <ISceneObject>();
            objectsToAdd        = new List <ISceneObject>();
            idsToRemove         = new List <long>();
            randomGenerator     = new Random(Environment.TickCount);
            players             = new List <Player>(2);
            statisticsTimer     = 0;
            totalTime           = 0;
            StateMgr            = new GameStateManager();

            clickListeners = new List <IMouseClickListener>();
            moveListeners  = new List <IMouseMoveListener>();
            keyListeners   = new List <IKeyPressListener>();

            currentPlayer = CreatePlayer();
            currentPlayer.Data.PlayerColor = Player.GetChosenColor();
            players.Add(currentPlayer);
            AttachStateManagers();

            Application.Current.Dispatcher.Invoke(new Action(() =>
            {
                currentPlayer.Data.Name   = App.Instance.PlayerName;
                currentPlayer.Data.HashId = App.Instance.PlayerHashId;
            }));

            if (gameType == Gametype.MULTIPLAYER_GAME)
            {
                SetMainInfoText(Strings.networking_waiting);
            }
            else if (area != null)
            {
                SetMainInfoText(String.Empty);
            }

            InitNetwork();
            ConnectToServer();
        }
示例#7
0
        private void StartGame(Gametype type, int serverId = 0)
        {
            SoundManager.Instance.StopAllSounds();
            SoundManager.Instance.StartPlayingInfinite(SharedDef.MUSIC_BACKGROUND_ACTION);

            StartGameThread();

            if (type != Gametype.MULTIPLAYER_GAME)
            {
                mainWindow.GameRunning = true;
            }

            sceneMgr.Enqueue(new Action(() =>
            {
                sceneMgr.RemoteServerId = serverId;
                sceneMgr.Init(type);
            }));
        }
        private bool FindAvailableServerManager(NetConnection netConnection, Gametype type, int serverId)
        {
            if (connections.Count == 0)
            {
                return(false);
            }

            // vzdycky vytvorit novy manager pro solo hru
            if (type == Gametype.SOLO_GAME)
            {
                return(false);
            }

            foreach (KeyValuePair <NetConnection, ServerMgr> pair in connections)
            {
                if (type == Gametype.MULTIPLAYER_GAME)
                {
                    Logger.Info("quick game mgr plr count: " + pair.Value.GetPlayerCount());
                    if (pair.Value.GameType == Gametype.MULTIPLAYER_GAME && pair.Value.GetPlayerCount() == 1)
                    {
                        mgr = pair.Value;
                        return(true);
                    }
                }
                else // Tournament
                {
                    // TODO: nahlasit uzivateli chybu kdyz je pozadovany manager uz zaplneny
                    if (pair.Value.GameType == Gametype.TOURNAMENT_GAME && pair.Value.GetPlayerCount() < SharedDef.MAX_TOURNAMENT_PLAYERS)
                    {
                        if (serverId == pair.Value.Id && !pair.Value.IsGameRunning() && pair.Value.TournamentSettings.PlayedMatches <= 0)
                        {
                            mgr = pair.Value;
                            return(true);
                        }
                    }
                }
            }

            // nenalezen zadny vhodny manager
            return(false);
        }
        /// <summary>
        /// Create a new Board
        /// </summary>
        /// <param name="colour1">The new black colour</param>
        /// <param name="colour2">The new white colour</param>
        /// <param name="mode">The new game mode</param>
        public Board(Color colour1, Color colour2, Gametype mode)
        {
            // Assign Board properties
            _mode         = mode;
            PlayerOneTurn = true;
            WhiteColour   = Color.FromArgb(colour1.ToArgb());
            BlackColour   = Color.FromArgb(colour2.ToArgb());

            // Setup the board based on Game type
            CreateBoard();

            // Get all the moves for the pieces
            if (Pieces == null)
            {
                return;
            }
            foreach (var piece in Pieces.Where(piece => piece != null))
            {
                piece.GetMoves(this, true);
            }
        }
        private void CreateNewServerMgr(Gametype type)
        {
            mgr = new ServerMgr();
            mgr.Init(type, server);

            if (GameStartedCallback != null)
            {
                GameStartedCallback(type == Gametype.TOURNAMENT_GAME);
            }

            mgr.CloseCallback = ManagerClosed;

            Thread serverThread = new Thread(new ThreadStart(mgr.Run));

            serverThread.IsBackground = false;
            serverThread.Name         = "Server Thread";
            serverThread.Start();

            switch (type)
            {
            case Gametype.SOLO_GAME:
                // v solo se nastavi tournament settings primo pres herni aplikaci
                break;

            case Gametype.MULTIPLAYER_GAME:
            {
                TournamentSettings s = new TournamentSettings();
                s.MMType     = MatchManagerType.QUICK_GAME;
                s.Level      = GameLevel.BASIC_MAP;
                s.RoundCount = 1;
                s.BotCount   = 0;
                mgr.Enqueue(new Action(() => mgr.TournamentSettings = s));
            }
            break;

            case Gametype.TOURNAMENT_GAME:
                // v tournamentu se poslou setting pozdeji, az je hrac potvrdi
                break;
            }
        }
        public override void Load()
        {
            fntText = Content.Load <SpriteFont>("Fonts/Arial10");

            Gametype GametypeCampaign    = new Gametype("Campaign", "Classic mission based mode, no respawn.", null);
            Gametype GametypeHorde       = new Gametype("Horde", "Wave survival mode, respawn at the start of each wave.", null);
            Gametype GametypeBaseDefense = new Gametype("Base Defense", "Wave survival mode, respawn at the start of each wave. Must defend a base by building turrets.", null);

            Gametype GametypeDeathmatch    = new Gametype("Deathmatch", "Gain points for kills and assists, respawn on death.", null);
            Gametype GametypeObjective     = new Gametype("Objective", "One team must complete objectives while another prevent them.", null);
            Gametype GametypeAssault       = new Gametype("Assault", "Team deathmatch with limited respawns.", null);
            Gametype GametypeConquest      = new Gametype("Conquest", "Teams must fight to capture respawn bases that give them points. The starting base may or may not be capturable.", null);
            Gametype GametypeOnslaught     = new Gametype("Onslaught", "Teams must fight to capture respawn bases that give them access to the enemy base's core. Last team with a core win.", null);
            Gametype GametypeKingOfTheHill = new Gametype("King Of The Hill", "Hold a position without enemies to win points.", null);
            Gametype GametypeBunny         = new Gametype("Bunny", "Unit that holds the flag become the bunny and gets points for kills, everyone else try to kill the bunny.", null);
            Gametype GametypeFreezeTag     = new Gametype("Freeze Tag", "Killing an enemy freeze him, when every enemies are frozen you win. Teamates can unfreeze allie by staying next to them for 2 turns.", null);
            Gametype GametypeJailbreak     = new Gametype("Jailbreak", "Killing an enemy send him to your prison, capture everyone to win. Teamates can be freed by standing on a switch.", null);
            Gametype GametypeMutant        = new Gametype("Mutant", "First kill transform you into the mutant, a unit with overpowered stats and attacks. Only the Mutant can kill or be killed.", null);
            Gametype GametypeKaiju         = new Gametype("Kaiju", "One player controls giant monsters while the other players use their units.", null);

            SelectedGametype         = GametypeCampaign;
            ArrayGametypeCategory    = new GametypeCategory[2];
            ArrayGametypeCategory[0] = new GametypeCategory("PVE", new Gametype[] { GametypeCampaign, GametypeHorde });
            ArrayGametypeCategory[1] = new GametypeCategory("PVP", new Gametype[]
            {
                GametypeDeathmatch, GametypeObjective, GametypeAssault, GametypeConquest,
                GametypeOnslaught, GametypeKingOfTheHill, GametypeBunny, GametypeFreezeTag,
                GametypeJailbreak, GametypeMutant, GametypeKaiju,
            });

            int PanelY      = (int)(Constants.Height * 0.15);
            int PanelWidth  = (int)(Constants.Width * 0.4);
            int PanelHeight = (int)(Constants.Height * 0.75);

            int LeftPanelX = (int)(Constants.Width * 0.03);

            GametypeScrollbar = new BoxScrollbar(new Vector2(LeftPanelX + PanelWidth - 20, PanelY), PanelHeight, 10, OnGametypeScrollbarChange);
        }
示例#12
0
 public Configuration(Gametype multiplayer, Gametype zombies)
 {
     MP = multiplayer;
     ZM = zombies;
 }
 public GameHandle(Game game, Gametype type)
 {
     this.Game = game;
     this.Type = type;
 }
示例#14
0
        public override System.Drawing.Bitmap drawTextOnImage(SmashOverlayGenerator form)
        {
            //IF FONT IS NOT INSTALLED WE INSTALL IT

            GenFcns.installFonts(form, "EARTHQUAKE.TTF", pfc);
            GenFcns.installFonts(form, "FLAPHEAD.TTF", pfc);

            //fontsInstalled(form, "EARTHQUAKE");
            //fontsInstalled(form, "FLAPHEAD");
            //fontsInstalled(form, "zekton rg");

            setFontSizes(form.ResourceType, form.MatchupCompetitor1, form.MatchupCompetitor2);
            if (!GenFcns.isNullOrEmpty(Gametype) && Gametype.Equals("doubles"))
            {
                setFontSizes(form.ResourceType, Competitor3, Competitor4);
            }

            TournamentName  = form.TournamentName;
            TournamentRound = form.TournamentRound;
            Competitor1     = form.MatchupCompetitor1;
            Competitor2     = form.MatchupCompetitor2;

            StringFormat nameFormat       = new StringFormat();
            StringFormat tournamentFormat = new StringFormat();
            Bitmap       image            = base.getImage();
            Graphics     g = Graphics.FromImage(image);

            nameFormat.LineAlignment   = StringAlignment.Center;
            nameFormat.Alignment       = StringAlignment.Center;
            tournamentFormat.Alignment = StringAlignment.Center;

            //DRAW CHARACTERS
            drawCharactersOnImage(g, Character1Path, Character1Point, Character2Path, Character2Point);


            //DRAW BANNER
            Pen        p       = new Pen(Color.LightCyan, (float)50.0);
            SolidBrush b       = new SolidBrush(Color.MediumPurple);
            SolidBrush bBorder = new SolidBrush(Color.White);
            Rectangle  r       = new Rectangle(new Point(0, 800), new Size(1920, 200));
            Rectangle  rBorder = new Rectangle(new Point(0, 780), new Size(1920, 240));

            g.FillRectangle(bBorder, rBorder);
            g.FillRectangle(b, r);

            FontFamily earthquakeFamily = pfc.Families[0];
            FontFamily flapheadFamily   = pfc.Families[1];
            Font       earthquake       = new Font(earthquakeFamily, 120);
            Font       flaphead         = new Font(flapheadFamily, 120);

            //DRAW COMPETITOR INFORMATION
            g.DrawString(form.MatchupCompetitor1, earthquake, Brushes.White, Competitor1Point.getPoint(), nameFormat);
            g.DrawString(form.MatchupCompetitor2, earthquake, Brushes.White, Competitor2Point.getPoint(), nameFormat);
            //g.DrawString("THIS IS A TEST", f1, Brushes.Yellow, new Point(0, 0), nameFormat);
            //g.DrawString(form.TournamentName, TournamentFont, Brushes.White, TournamentPoint.getPoint(), tournamentFormat);


            //DRAW TOURNAMENT STUFFS
            string tournamentLogoPath = ListBoxFcns.getResourcePath(form.ProductName, "tournament", "*****@*****.**");
            Image  logoImage          = base.getImage(tournamentLogoPath);

            g.DrawImage(logoImage, TournamentPoint.getPoint());
            g.DrawString(form.TournamentRound, flaphead, Brushes.White, TournamentRoundPoint.getPoint(), tournamentFormat);


            Image  img      = (Image)image;
            Bitmap newImage = new Bitmap(img, new Size(640, 400));

            return(newImage);
        }
        private void GotMessage(object peer)
        {
            server = peer as NetServer;
            NetIncomingMessage msg = server.ReadMessage();

            switch (msg.MessageType)
            {
            case NetIncomingMessageType.VerboseDebugMessage:
            case NetIncomingMessageType.DebugMessage:
            case NetIncomingMessageType.WarningMessage:
            case NetIncomingMessageType.ErrorMessage:
                Logger.Debug(msg.ReadString());
                break;

            case NetIncomingMessageType.UnconnectedData:
                PacketType packetType = (PacketType)msg.ReadInt32();
                switch (packetType)
                {
                case PacketType.AVAILABLE_TOURNAMENTS_REQUEST:
                    if (!CheckVersion(msg.ReadString(), msg.SenderEndPoint))
                    {
                        break;
                    }

                    SendAvailableTournamentsResponse(msg.SenderEndPoint);
                    break;

                case PacketType.AVAILABLE_RECONNECT_REQUEST:
                    CheckAvailableReconnect(msg.SenderEndPoint, msg.ReadString());
                    break;
                }
                break;

            case NetIncomingMessageType.ConnectionApproval:
                if (msg.ReadInt32() != (int)PacketType.PLAYER_CONNECT)
                {
                    break;
                }

                string clientVersion = msg.ReadString();
                if (!CheckVersion(clientVersion, msg.SenderEndPoint))
                {
                    msg.SenderConnection.Deny("version mismatch");
                    break;
                }

                Gametype type         = (Gametype)msg.ReadByte();
                int      serverId     = msg.ReadInt32();
                string   name         = msg.ReadString();
                string   playerHashId = msg.ReadString();

                // v pripade ze jeho connection je uz prirazene k nejakemu manageru
                if (connections.TryGetValue(msg.SenderConnection, out mgr))
                {
                    mgr.Enqueue(new Action(() => mgr.PlayerConnectionApproval(msg, name, playerHashId)));
                    Logger.Info("Player " + name + " has manager assigned already (during ConnectionApproval)");
                    return;
                }

                if (PlayerConnectedCallback != null)
                {
                    PlayerConnectedCallback();
                }

                mgr = GetServerForReconnectionIfAny(playerHashId);

                // novy manager se vytvori pokud je zakladan novy turnaj (id 0) nebo pokud neni nalezen vhodny server
                if (mgr == null && ((type == Gametype.TOURNAMENT_GAME && serverId == 0) ||
                                    !FindAvailableServerManager(msg.SenderConnection, type, serverId)))
                {
                    CreateNewServerMgr(type);
                }

                connections.Add(msg.SenderConnection, mgr);
                mgr.Enqueue(new Action(() => mgr.PlayerConnectionApproval(msg, name, playerHashId)));
                return;     //musi se provest return, jinak je zprava zrecyklovana jeste pred zpracovanim, o recyklaci se stara ServerMgr

            case NetIncomingMessageType.Data:
                if (!connections.TryGetValue(msg.SenderConnection, out mgr))
                {
                    Logger.Warn("received data message from unknown connection -> skipped: " + msg.SenderConnection);
                    break;
                }
                mgr.EnqueueReceivedMessage(msg);
                return;     //musi se provest return, jinak je zprava zrecyklovana jeste pred zpracovanim, o recyklaci se stara ServerMgr

            case NetIncomingMessageType.StatusChanged:
                switch (msg.SenderConnection.Status)
                {
                case NetConnectionStatus.None:
                case NetConnectionStatus.InitiatedConnect:
                case NetConnectionStatus.RespondedAwaitingApproval:
                case NetConnectionStatus.RespondedConnect:
                    break;

                case NetConnectionStatus.Disconnected:
                case NetConnectionStatus.Disconnecting:
                    if (PlayerDisconnectedCallback != null)
                    {
                        PlayerDisconnectedCallback();
                    }

                    ServerMgr tempMgr = null;
                    if (!connections.TryGetValue(msg.SenderConnection, out tempMgr))
                    {
                        Logger.Warn("disconnecting unknown connection -> skipped: " + msg.SenderConnection);
                        break;
                    }

                    long uid = msg.SenderConnection.RemoteUniqueIdentifier;
                    tempMgr.Enqueue(new Action(() => tempMgr.PlayerDisconnected(uid)));
                    connections.Remove(msg.SenderConnection);
                    //msg.SenderConnection.Disconnect("x");
                    break;

                case NetConnectionStatus.Connected:
                    break;
                }

                // NOTE: Disconnecting and Disconnected are not instant unless client is shutdown with disconnect()
                //Logger.Debug(msg.SenderConnection.ToString() + " status changed to: " + msg.SenderConnection.Status);
                break;

            default:
                Logger.Debug("non-handled message type: " + msg.MessageType);
                break;
            }
            server.Recycle(msg);
        }