Exemple #1
0
        public Rts(EventHandler callback, Lidgren.Network.NetPeer netpeer, short myTeam)
            : base(callback)
        {
            netPeer   = netpeer;
            iAmServer = netPeer is NetServer;

            Game1.Game.DebugMonitor.Position = Direction.NorthEast;
            //Game1.Game.Graphics.SynchronizeWithVerticalRetrace = false;
            //Game1.Game.IsFixedTimeStep = false;
            //Game1.Game.Graphics.ApplyChanges();
            //GameTimer.Restart();

            //map = new Map(@"Content/map1.muh");
            map        = new Map("C:\\rts maps\\map2.muh");
            pathFinder = new PathFinder(map);
            map.InstantiateMapResources();
            //Player.Me.Team = myTeam;
            Player.Me = Player.Players[myTeam];

            actualMapWidth  = map.Width * map.TileSize;
            actualMapHeight = map.Height * map.TileSize;

            Unit.UnitCollisionSweeper.Thread.Suspend();
            Unit.UnitCollisionSweeper.Thread.Resume();
            Rts.pathFinder.ResumeThread();

            uiViewport      = GraphicsDevice.Viewport;
            worldViewport   = GraphicsDevice.Viewport;
            minimapViewport = new Viewport(minimapBorderSize, uiViewport.Height - minimapSize - minimapBorderSize, minimapSize, minimapSize);
            //minimapViewport = new Viewport(0, 0, minimapSize, minimapSize);
            worldViewport.Height   -= (minimapSize + minimapBorderSize * 2);
            GraphicsDevice.Viewport = worldViewport;

            camera     = new Camera();
            camera.Pos = new Vector2(worldViewport.Width / 2, worldViewport.Height / 2);

            button1 = new BaseObject(new Rectangle(10, 25, 25, 25));
            button2 = new BaseObject(new Rectangle(10, 52, 25, 25));
            button3 = new BaseObject(new Rectangle(10, 79, 25, 25));
            button4 = new BaseObject(new Rectangle(10, 106, 25, 25));
            button5 = new BaseObject(new Rectangle(10, 133, 25, 25));

            if (!contentLoaded)
            {
                pauseFont             = Content.Load <SpriteFont>("spritefonts/pausefont");
                fpsFont               = Content.Load <SpriteFont>("spritefonts/fpsfont");
                unitInfoUnitNameFont  = Content.Load <SpriteFont>("spritefonts/UnitInfoUnitNameFont");
                unitInfoHpFont        = Content.Load <SpriteFont>("spritefonts/UnitInfoHpFont");
                unitInfoKillCountFont = Content.Load <SpriteFont>("spritefonts/UnitInfoKillCountFont");
                resourceCountFont     = Content.Load <SpriteFont>("spritefonts/ResourceCountFont");
                bigFont               = Content.Load <SpriteFont>("spritefonts/BigMessage");
                //brownGuyTexture = Content.Load<Texture2D>("unit textures/browncircleguy");
                //brownGuySelectingTexture = Content.Load<Texture2D>("unit textures/browncircleguyselected2");
                //brownGuySelectedTexture = Content.Load<Texture2D>("unit textures/browncircleguyselecting2");
                greenTeamIndicatorTexture        = Content.Load <Texture2D>("unit textures/green team indicator");
                redTeamIndicatorTexture          = Content.Load <Texture2D>("unit textures/red team indicator");
                buttonTexture                    = Content.Load <Texture2D>("titlebutton1");
                moveCommandShrinkerTexture       = Content.Load <Texture2D>("greencircle2");
                attackMoveCommandShrinkerTexture = Content.Load <Texture2D>("redcircle2");
                //normalCursorTexture = Content.Load<Texture2D>("greencursor2");
                //attackCommandCursorTexture = Content.Load<Texture2D>("crosshair");
                normalCursor            = Util.LoadCustomCursor(@"Content/cursors/SC2-cursor.cur");
                attackCursor            = Util.LoadCustomCursor(@"Content/cursors/SC2-target-none.cur");
                boulder1Texture         = Content.Load <Texture2D>("boulder1");
                tree1Texture            = Content.Load <Texture2D>("tree2");
                rallyFlagTexture        = Content.Load <Texture2D>("redflag");
                redCircleTexture        = Content.Load <Texture2D>("redcircle");
                transparentTexture      = Content.Load <Texture2D>("transparent");
                transparentGrayTexture  = Content.Load <Texture2D>("transparentgray");
                transparentBlackTexture = Content.Load <Texture2D>("transparentblack");
                whiteBoxTexture         = Content.Load <Texture2D>("whitebox");
                cogWheelTexture         = Content.Load <Texture2D>("cogwheel");
                rtsMusic         = Content.Load <Song>("music/58 - Weapons Factory");
                errorSoundEffect = Content.Load <SoundEffect>("sounds/Error");
                //Unit.BulletTexture = Content.Load<Texture2D>("bullet");
                Unit.Explosion1Textures      = Util.SplitTexture(Content.Load <Texture2D>("explosionsheet1"), 45, 45);
                Structure.Explosion1Textures = Util.SplitTexture(Content.Load <Texture2D>("explosionsheet1"), 45, 45);
                contentLoaded = true;
            }

            winForm = (Form)Form.FromHandle(Game1.Game.Window.Handle);
            //Cursor.Clip = new System.Drawing.Rectangle(winForm.Location, winForm.Size);
            winForm.Cursor = normalCursor;

            initializeMapTexture();
            initializeCommandCardArea();
            initializeSelectionInfoArea();
            line.Alpha = .75f;

            VisionUpdater = new VisionUpdater(map, Rts.pathFinder, Player.Me.Team);

            SelectBox.InitializeSelectBoxLine(GraphicsDevice, Color.Green);
            Initializeline(GraphicsDevice, Color.Yellow);

            minimapScreenIndicatorBoxLine        = new PrimitiveLine(GraphicsDevice, 1);
            minimapScreenIndicatorBoxLine.Colour = Color.White;

            for (int i = 0; i < HotkeyGroups.Length; i++)
            {
                HotkeyGroups[i] = new List <RtsObject>();
            }

            MediaPlayer.Play(rtsMusic);
            MediaPlayer.Volume      = MusicVolume;
            MediaPlayer.IsRepeating = true;

            /*new TownHall(map.StartingPoints[myTeam], myTeam);
             * camera.Pos = new Vector2(map.StartingPoints[myTeam].X * map.TileSize, map.StartingPoints[myTeam].Y * map.TileSize);
             * Player.Me.MaxSupply += StructureType.TownHall.Supply;*/
            initializeStartingPoints();

            //new Barracks(new Point(10, 14), 2);
            //new Roks(new Point(3, 3));
            //new Roks(new Point(3, 30));

            Player.Me.Roks = 25;

            clampCameraToMap();

            initialHandShake();
        }
Exemple #2
0
        public override void Update(GameTime gameTime)
        {
            int i = Player.Me.UnitArray.Length;

            // check for exit

            /*if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
             *  Game1.Game.Exit();
             * if (Keyboard.GetState(PlayerIndex.One).IsKeyDown(Keys.Escape))
             * {
             *  //Graphics.ToggleFullScreen();
             *  cleanup();
             *  returnControl("exit");
             *  return;
             * }*/

            //Cursor.Clip = new System.Drawing.Rectangle(winForm.Location, winForm.Size);
            Rts.gameTime = gameTime;

            if (!waitingForMessage)
            {
                GameClock += (float)gameTime.ElapsedGameTime.TotalSeconds * GameSpeed;
            }

            // count down
            if (doCountDown())
            {
                return;
            }

            // send time sync message if server
            checkToSync(gameTime);
            // just checkup if not server
            checkToCheckup(gameTime);

            // receive and process network messages
            receiveData(gameTime);

            // mute check
            checkForMute();

            // update mouse and keyboard state
            mouseState    = Mouse.GetState();
            keyboardState = Keyboard.GetState();

            // pause check

            /*if (Keyboard.GetState(PlayerIndex.One).IsKeyUp(Keys.P))
             *  allowPause = true;
             * if (allowPause && Keyboard.GetState(PlayerIndex.One).IsKeyDown(Keys.P))
             * {
             *  paused ^= true;
             *  allowPause = false;
             *  if (paused)
             *  {
             *      MediaPlayer.Volume /= 4;
             *      //GameTimer.Stop();
             *  }
             *  else
             *  {
             *      MediaPlayer.Volume *= 4;
             *      //GameTimer.Start();
             *  }
             * }*/

            // do cleanup of player unit/structure arrays
            Player.SetNullIDS();

            // pathfinding performance info
            if (Game1.DEBUG)
            {
                timeForPathFindingProfiling += gameTime.ElapsedGameTime.TotalMilliseconds;
                if (timeForPathFindingProfiling >= 500)
                {
                    double pathFindingTime;
                    lock (Rts.pathFinder.TimeSpentPathFindingLock)
                    {
                        pathFindingTime = Rts.pathFinder.TimeSpentPathFinding.TotalMilliseconds;
                        Rts.pathFinder.TimeSpentPathFinding = TimeSpan.Zero;
                    }
                    pathFindingPercentage       = pathFindingTime / timeForPathFindingProfiling * 100;
                    timeForPathFindingProfiling = 0;

                    lock (PathFindRequest.HighPriorityPathFindRequests)
                    {
                        pathFindQueueSize = PathFindRequest.HighPriorityPathFindRequests.Count;
                    }
                }
            }

            //update fps
            fpsElapsedTime += gameTime.ElapsedGameTime;
            if (fpsElapsedTime > TimeSpan.FromSeconds(1))
            {
                //Game1.Game.Window.Title = "FPS: " + (frameCounter > 2 ? frameCounter.ToString() : "COOL");
                fpsMessage = "FPS: " + (frameCounter > 2 ? frameCounter.ToString() : "COOL");
                if (Game1.DEBUG)
                {
                    fpsMessage += " - Unit count: " + Unit.Units.Count;
                }
                fpsElapsedTime -= TimeSpan.FromSeconds(1);
                frameCounter    = 0;
            }

            // do nothing else if paused
            if (paused)
            {
                return;
            }

            // input processing
            checkForShift(gameTime);
            checkForCommands();
            SimpleButton.UpdateAll(mouseState, keyboardState);
            checkHotKeyGroups(gameTime);

            checkForLeftClick(gameTime);
            checkForRightClick();
            checkForTab();

            checkForMouseCameraScroll(gameTime);
            checkForCameraZoom(gameTime);
            checkForCameraRotate(gameTime);
            if (keyboardState.IsKeyDown(Keys.Space))
            {
                centerCameraOnSelectedUnits();
            }
            clampCameraToMap();

            updatePlacingStructure();
            updatePlacedStructures();

            if (!placingStructure)
            {
                SelectBox.Update(worldViewport, camera);
            }

            Shrinker.UpdateShrinkers(gameTime);

            // do nothing else if waiting for message
            if (waitingForMessage)
            {
                return;
            }

            doScheduledActions();

            checkForUnitStatusUpdates(gameTime);
            checkForStructureStatusUpdates(gameTime);

            //update stats
            updateStats(gameTime);

            map.UpdateBoundingBoxes();

            updateCogWheels(gameTime);

            RtsBullet.UpdateAll(gameTime);

            Resource.UpdateResources(gameTime);
            Structure.UpdateStructures(gameTime);
            Unit.UpdateUnits(gameTime, netPeer, connection);
            UnitAnimation.UpdateAll(gameTime);

            removeDeadUnitsFromSelections();

            applyVisibilityToMap();
        }