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(); }
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(); }