/// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            random = new Random();

            //Initialize Other Classes
            DebugShapeRenderer.Initialize(GraphicsDevice);
            MessageBus.Initialize();
            consoleWriter = new ConsoleWriter();
            ShipManager.Initialize();

            //HazardManager.Initialize();
            GenericManager <Hazard> .Initialize();

            Camera.Initialize(GraphicsDevice);
            skybox = new Skybox(Content);
            player1InputManager = new InputManager(Keys.Space, Keys.A, Keys.D, Keys.E, Keys.W, Keys.S, Keys.LeftShift, Keys.F1, Keys.F2);
            CollisionManager.Initialize();
            collidables = new List <ICollidable>();

            ExplosionManager.Initialize();

            ScoreManager.Initialize();

            MessageBus.InsertNewMessage(new ConsoleMessage("Game Initiated!"));

            base.Initialize();
        }
示例#2
0
        private void RenderFloodFill()
        {
            foreach (NavigationNode vec in floodFiller.positions)
            {
                Color colorOfSphere = Color.Orange;

                if (vec == floodFiller.next)
                {
                    colorOfSphere = Color.Blue;
                }

                if (floodFiller.justAdded.Contains(vec))
                {
                    colorOfSphere = Color.Red;
                }

                if (!vec.done)
                {
                    DebugShapeRenderer.AddBoundingSphere(new BoundingSphere(vec.WorldPosition, 0.2f), colorOfSphere);
                }

                foreach (NavigationNode neighbour in vec.Neighbours)
                {
                    DebugShapeRenderer.AddLine(vec.WorldPosition, neighbour.WorldPosition, Color.Green);
                }
            }
        }
示例#3
0
        public static void Render(GameTime gameTime)
        {
            if (Wireframe)
            {
                if (GraphicsDevice.RasterizerState.FillMode != FillMode.WireFrame)
                {
                    RasterizerState rasterizerState = new RasterizerState();
                    rasterizerState.FillMode       = FillMode.WireFrame;
                    GraphicsDevice.RasterizerState = rasterizerState;
                }
            }
            else
            {
                if (GraphicsDevice.RasterizerState.FillMode == FillMode.WireFrame)
                {
                    RasterizerState rasterizerState = new RasterizerState();
                    rasterizerState.FillMode       = FillMode.Solid;
                    GraphicsDevice.RasterizerState = rasterizerState;
                }
            }


            ShadowMapRenderer.PreDraw(gameTime);

            for (int i = 0; i < gameSubSystems.Count; i++)
            {
                if (gameSubSystems[i] is GUIManager)
                {
                    continue;
                }
                if (gameSubSystems[i] is FPSCounter)
                {
                    continue;
                }


                gameSubSystems[i].Render(gameTime);
            }


            ShadowMapRenderer.PostDraw(gameTime);


            for (int i = 0; i < gameSubSystems.Count; i++)
            {
                if (gameSubSystems[i] is GUIManager)
                {
                    continue;
                }

                gameSubSystems[i].Render(gameTime);
            }


            DebugShapeRenderer.Draw(gameTime, ActiveCamera.View, ActiveCamera.Projection);
            GUIManager.Render(gameTime);

            DebugText.Draw(gameTime);
            ScreenManager.RenderSprites(gameTime);
        }
示例#4
0
        public override void Render(GameTime gameTime)
        {
            SystemCore.GraphicsDevice.Clear(SystemCore.ActiveColorScheme.Color2);
            DebugShapeRenderer.VisualiseAxes(5f);

            base.Render(gameTime);
        }
示例#5
0
        protected override Entity Create()
        {
            if (shapeRenderer == null)
            {
                shapeRenderer = new DebugShapeRenderer(GraphicsDevice, ((EntityHierarchyEditorGame)Game).EditorScene);
            }

            return(base.Create());
        }
示例#6
0
 private void RenderPartition()
 {
     foreach (Bucket b in floodFiller.partition.buckets)
     {
         DebugShapeRenderer.AddLine(b.bottomLeft, b.topLeft, Color.Aqua);
         DebugShapeRenderer.AddLine(b.topLeft, b.topRight, Color.Aqua);
         DebugShapeRenderer.AddLine(b.topRight, b.bottomRight, Color.Aqua);
         DebugShapeRenderer.AddLine(b.bottomRight, b.bottomLeft, Color.Aqua);
     }
 }
示例#7
0
        public override void Render(GameTime gameTime)
        {
            if (!SystemCore.ShadowMapRenderer.ShadowPass)
            {
                SystemCore.GraphicsDevice.Clear(Color.Black);
            }

            DebugShapeRenderer.VisualiseAxes(5f);

            base.Render(gameTime);
        }
示例#8
0
        public override void Render(GameTime gameTime)
        {
            SystemCore.GraphicsDevice.Clear(Color.Black);
            DebugShapeRenderer.VisualiseAxes(5f);

            RenderLineDefs();

            RenderFloodFill();

            RenderPath();

            //RenderPartition();

            if (playerObj != null)
            {
                DoomComponent playerDoomComponent = playerObj.GetComponent <DoomComponent>();

                Color forwardColor = Color.Red;
                Color leftColor    = Color.Red;
                Color rightColor   = Color.Red;

                if (playerDoomComponent.ForwardHitVector)
                {
                    forwardColor = Color.Blue;
                }
                if (playerDoomComponent.LeftHitVector)
                {
                    leftColor = Color.Blue;
                }
                if (playerDoomComponent.RightHightVector)
                {
                    rightColor = Color.Blue;
                }


                Vector3 pos        = playerObj.Transform.AbsoluteTransform.Translation;
                Vector3 forwardVec = playerObj.Transform.AbsoluteTransform.Translation + playerObj.Transform.AbsoluteTransform.Forward * playerDoomComponent.HitVectorSize;
                Vector3 rightVec   = MonoMathHelper.RotateAroundPoint(forwardVec, playerObj.Transform.AbsoluteTransform.Translation, Vector3.Up, MathHelper.PiOver4);
                Vector3 leftVec    = MonoMathHelper.RotateAroundPoint(forwardVec, playerObj.Transform.AbsoluteTransform.Translation, Vector3.Up, -MathHelper.PiOver4);

                DebugShapeRenderer.AddLine(pos, forwardVec, forwardColor);
                DebugShapeRenderer.AddLine(pos, leftVec, leftColor);
                DebugShapeRenderer.AddLine(pos, rightVec, rightColor);



                DebugText.Write(playerObj.Transform.AbsoluteTransform.Translation.ToString());
                DebugText.Write(playerAngle.ToString());
            }



            base.Render(gameTime);
        }
示例#9
0
        private void FeelForward()
        {
            DoomComponent playerDoomComponent = ParentObject.GetComponent <DoomComponent>();

            Vector3 pos        = ParentObject.Transform.AbsoluteTransform.Translation;
            Vector3 forwardVec = ParentObject.Transform.AbsoluteTransform.Translation + ParentObject.Transform.AbsoluteTransform.Forward * playerDoomComponent.HitVectorSize;
            Vector3 rightVec   = MonoMathHelper.RotateAroundPoint(forwardVec, ParentObject.Transform.AbsoluteTransform.Translation, Vector3.Up, MathHelper.PiOver4 / 2);
            Vector3 leftVec    = MonoMathHelper.RotateAroundPoint(forwardVec, ParentObject.Transform.AbsoluteTransform.Translation, Vector3.Up, -MathHelper.PiOver4 / 2);

            pos.Y        = 0;
            forwardVec.Y = 0;
            rightVec.Y   = 0;
            leftVec.Y    = 0;



            Color forwardColor = Color.Red;
            Color leftColor    = Color.Red;
            Color rightColor   = Color.Red;


            if (mapHandler.IntersectsLevel(pos, forwardVec))
            {
                forwardColor = Color.Blue;
            }
            if (mapHandler.IntersectsLevel(pos, rightVec))
            {
                rightColor = Color.Blue;

                var strafe = new RestRequest("player/actions", Method.POST);
                strafe.RequestFormat = DataFormat.Json;
                strafe.AddBody(new PlayerAction()
                {
                    type = "strafe-left", amount = 2
                });
                apiHandler.EnqueueCoolDownRequest("strafe-left", strafe, 400, x => { });
            }
            if (mapHandler.IntersectsLevel(pos, leftVec))
            {
                leftColor = Color.Blue;

                var strafe = new RestRequest("player/actions", Method.POST);
                strafe.RequestFormat = DataFormat.Json;
                strafe.AddBody(new PlayerAction()
                {
                    type = "strafe-right", amount = 2
                });
                apiHandler.EnqueueCoolDownRequest("strafe-right", strafe, 400, x => { });
            }

            DebugShapeRenderer.AddLine(pos, forwardVec, forwardColor);
            DebugShapeRenderer.AddLine(pos, leftVec, leftColor);
            DebugShapeRenderer.AddLine(pos, rightVec, rightColor);
        }
示例#10
0
        public override void Render(GameTime gameTime)
        {
            SystemCore.GraphicsDevice.Clear(Color.Gray);

            DebugText.Write(cameraGameObject.Transform.WorldMatrix.Translation.ToString());

            DebugShapeRenderer.VisualiseAxes(5f);


            base.Render(gameTime);
        }
示例#11
0
        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            // TODO: Add your initialization logic here
            displaywidth  = graphics.GraphicsDevice.Viewport.Width;
            displayheight = graphics.GraphicsDevice.Viewport.Height;
            graphics.ToggleFullScreen();

            accelerometer1.Accelerometer.Initialize();
            gamecamera = new camera(new Vector3(0, 0, 0), new Vector3(0, 0, 0), displaywidth, displayheight, 45, Vector3.Up, 1000, 20000);

            // Initialises Debug shape renderer for drawing bounding boxes and spheres
            DebugShapeRenderer.Initialize(GraphicsDevice);

            base.Initialize();
        }
示例#12
0
        public void Render(GameTime gameTime)
        {
            Color xzColor = (ActivePlane == CurrentActivePlane.XZ) ? Color.OrangeRed : Color.DarkGray;
            Color yzColor = (ActivePlane == CurrentActivePlane.YZ) ? Color.CadetBlue : Color.DarkGray;
            Color xyColor = (ActivePlane == CurrentActivePlane.XY) ? Color.DarkGreen : Color.DarkGray;


            if (RenderGrid)
            {
                for (float i = -modellingAreaSize / 2; i <= modellingAreaSize / 2; i++)
                {
                    if (RenderActivePlaneOnly && i == CurrentZIndex)
                    {
                        DebugShapeRenderer.AddXYGrid(new Vector3(-modellingAreaSize / 2, -modellingAreaSize / 2, i),
                                                     modellingAreaSize,
                                                     modellingAreaSize, 1, (i == CurrentZIndex) ? xyColor : Color.DarkGray);
                    }


                    if (RenderActivePlaneOnly && i == CurrentYIndex)
                    {
                        DebugShapeRenderer.AddXZGrid(new Vector3(-modellingAreaSize / 2, i, -modellingAreaSize / 2),
                                                     modellingAreaSize,
                                                     modellingAreaSize, 1, (i == CurrentYIndex) ? xzColor : Color.DarkGray);
                    }

                    if (RenderActivePlaneOnly && i == CurrentXIndex)
                    {
                        DebugShapeRenderer.AddYZGrid(new Vector3(i, -modellingAreaSize / 2, -modellingAreaSize / 2),
                                                     modellingAreaSize, modellingAreaSize, 1,
                                                     (i == CurrentXIndex) ? yzColor : Color.DarkGray);
                    }
                }
            }


            if (CurrentMode == EditMode.Vertex)
            {
                if (currentVertices.Count > 0)
                {
                    for (int i = 0; i < currentVertices.Count - 1; i++)
                    {
                        DebugShapeRenderer.AddLine(currentVertices[i], currentVertices[i + 1], currentColour);
                    }
                    DebugShapeRenderer.AddLine(currentVertices[currentVertices.Count - 1], currentbuildPoint, currentColour);
                }
            }
        }
示例#13
0
        public void Draw(Matrix View, Matrix Projection)
        {
            foreach (ModelMesh mesh in HazardForm.Model.Meshes)
            {
                foreach (BasicEffect effect in mesh.Effects)
                {
                    effect.LightingEnabled = false;
                    effect.World           = Matrix.CreateScale(HazardForm.scale) * World;
                    effect.View            = View;
                    effect.Projection      = Projection;
                }
                mesh.Draw();
            }

            DebugShapeRenderer.AddBoundingSphere(boundingSphere, Color.Red);
        }
示例#14
0
        private void RaycastTest()
        {
            RayCastResult result;
            Matrix        camWorld = Matrix.Invert(SystemCore.ActiveCamera.View);

            BEPUutilities.Ray ray =
                new BEPUutilities.Ray(camWorld.Translation.ToBepuVector() + camWorld.Forward.ToBepuVector() * 3f,
                                      camWorld.Forward.ToBepuVector());

            if (SystemCore.PhysicsSimulation.RayCast(ray, out result))
            {
                hitPos = result.HitData.Location.ToXNAVector();
                DebugShapeRenderer.AddLine(hitPos,
                                           hitPos + Vector3.Normalize(result.HitData.Normal.ToXNAVector() * 5f), Color.Blue);
            }
        }
示例#15
0
        private void RenderPath()
        {
            if (path == null)
            {
                return;
            }
            if (path.Count == 0)
            {
                return;
            }

            for (int i = 0; i < path.Count - 1; i++)
            {
                DebugShapeRenderer.AddLine(path[i].WorldPosition, path[i + 1].WorldPosition, Color.Purple);
            }
        }
示例#16
0
        public static void InitialiseGameSystems()
        {
            SystemCore.GraphicsDevice = SystemCore.GraphicsDeviceManager.GraphicsDevice;

            DebugShapeRenderer.Initialize(SystemCore.GraphicsDevice);
            SystemCore.GraphicsDeviceManager.ApplyChanges();



            InstantiateSystems();

            SystemCore.ContentManager.RootDirectory = "";

            SystemCore.Viewport          = SystemCore.GraphicsDevice.Viewport;
            SystemCore.ScreenManager     = GetSubsystem <ScreenManager>();
            SystemCore.GUIManager        = GetSubsystem <GUIManager>();
            SystemCore.GameObjectManager = GetSubsystem <GameObjectManager>();
            SystemCore.AudioManager      = GetSubsystem <AudioManager>();
            SystemCore.Input             = GetSubsystem <InputManager>();
            SystemCore.Game.Exiting     += (x, y) => { GameExiting = true; };

            PhysicsSimulation = new Space();

            if (PhysicsOnBackgroundThread)
            {
                PhysicsSimulation.SpaceObjectBuffer.Enabled = true;
                Thread t = new Thread(PhysicsUpdate);
                t.IsBackground = true;
                t.Start();
            }

            foreach (var gameSubSystem in gameSubSystems)
            {
                gameSubSystem.Initalise();
            }

            SystemCore.SetActiveCamera(new DummyCamera(MathHelper.PiOver4, GraphicsDevice.Viewport.AspectRatio, 0.3f,
                                                       1000.0f));

            DebugText.InjectDebugFont(GUIFonts.Fonts["test"]);
            DebugText.InjectGraphicsDevice(SystemCore.GraphicsDevice);


            EventManager = new EventManager();

            ShadowMapRenderer = new ShadowMapRenderer();
        }
示例#17
0
        public void Draw(GameTime gameTime)
        {
            //read render data from buffer.
            if (renderData == null)
            {
                RenderGeometryComponent renderGeometry = ParentObject.GetComponent <RenderGeometryComponent>();
                renderData = new VertexPositionColorTextureNormal[renderGeometry.VertexBuffer.VertexCount];
                renderGeometry.VertexBuffer.GetData <VertexPositionColorTextureNormal>(renderData);
            }

            for (int i = 0; i < renderData.Length; i++)
            {
                Vector3 transformedPosition = Vector3.Transform(renderData[i].Position, Matrix.CreateScale(ParentObject.Transform.Scale) * ParentObject.Transform.AbsoluteTransform);
                Vector3 transformedNormal   = Vector3.Transform(renderData[i].Normal, Matrix.CreateScale(ParentObject.Transform.Scale) * ParentObject.Transform.AbsoluteTransform);
                DebugShapeRenderer.AddLine(transformedPosition, transformedPosition + transformedNormal * 0.1f, Color.Red);
            }
        }
示例#18
0
        public override void Render(GameTime gameTime)
        {
            SystemCore.GraphicsDevice.Clear(Color.Black);


            foreach (DoomLine l in mapHandler.GetLevelOutline())
            {
                DebugShapeRenderer.AddLine(l.start, l.end, l.color);
            }
            foreach (DoomLine d in mapHandler.HazardLines)
            {
                DebugShapeRenderer.AddLine(d.start, d.end, d.color);
            }
            foreach (DoomLine d in mapHandler.Doors)
            {
                DebugShapeRenderer.AddLine(d.start, d.end, d.color);
            }
            foreach (DoomLine d in mapHandler.InternalLines)
            {
                DebugShapeRenderer.AddLine(d.start, d.end, d.color);
            }
            // if (!mapHandler.FloodFillComplete)
            //     RenderFloodFill();

            if (playerObj != null)
            {
                var moveComponent = playerObj.GetComponent <DoomMovementComponent>();

                if (moveComponent.path != null)
                {
                    if (moveComponent.path.Count > 0)
                    {
                        foreach (NavigationNode n in moveComponent.path)
                        {
                            DebugShapeRenderer.AddBoundingSphere(new BoundingSphere(n.WorldPosition, 0.3f), Color.Purple);
                        }
                    }
                }
            }

            DebugShapeRenderer.AddBoundingSphere(new BoundingSphere(mapHandler.LevelEnd, 1f), Color.Orange);

            base.Render(gameTime);
        }
示例#19
0
        public void Render(GameTime gameTime)
        {
            var playerList = SystemCore.GameObjectManager.GetAllObjects().FindAll(x => x is Player && !((Player)x).Dead);

            foreach (Player p in playerList)
            {
                DebugShapeRenderer.AddUnitSphere(p.Transform.AbsoluteTransform.Translation, p.PlayerColor);

                DebugShapeRenderer.AddLine(p.Transform.AbsoluteTransform.Translation,
                                           p.Transform.AbsoluteTransform.Translation + p.Transform.AbsoluteTransform.Forward * 1.5f, p.PlayerColor);
            }

            foreach (GameTile t in gameTiles)
            {
                foreach (GameTile n in t.Neighbours)
                {
                    DebugShapeRenderer.AddLine(t.Center, n.Center, Color.Blue);
                }
            }
        }
示例#20
0
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.Black);
            Vector3 source = new Vector3(0, 0, 0);

            foreach (Vector3 v in routevectors)
            {
                DebugShapeRenderer.AddLine(source, v, Color.Red);
            }

            //  System.Console.WriteLine(latLong.Latitude.);

            //   latLong.GetCoordinate2D().ToString();
            // TODO: Add your drawing code here
            //  basicEffect.CurrentTechnique.Passes[0].Apply();
            //  var vertices = new[] { new VertexPositionColor(startPoint, Color.White), new VertexPositionColor(endPoint, Color.White) };
            //  GraphicsDevice.DrawUserPrimitives(PrimitiveType.LineList, vertices, 0, 1);
            // base.Draw(gameTime);
            //  scene.BackgroundColor = Color.Black;
            scene.Draw(gameTime.ElapsedGameTime, gameTime.IsRunningSlowly);
        }
示例#21
0
        private void RenderLineDefs()
        {
            foreach (DoomLine l in levelLines)
            {
                DebugShapeRenderer.AddLine(l.start, l.end, l.color);
            }

            //int numTriangles = tesselator.ElementCount;

            //for(int i = 0; i < numTriangles; i++)
            //{
            //    var v0 = tesselator.Vertices[tesselator.Elements[i * 3]].Position;
            //    var v1 = tesselator.Vertices[tesselator.Elements[i * 3 + 1]].Position;
            //    var v2 = tesselator.Vertices[tesselator.Elements[i * 3 + 2]].Position;

            //    DebugShapeRenderer.AddLine(new Vector3((float)v0.X,0,(float)v0.Y), new Vector3((float)v1.X, 0, (float)v1.Y),Color.Orange);
            //    DebugShapeRenderer.AddLine(new Vector3((float)v1.X, 0, (float)v1.Y), new Vector3((float)v2.X, 0, (float)v2.Y), Color.Orange);
            //    DebugShapeRenderer.AddLine(new Vector3((float)v2.X, 0, (float)v2.Y), new Vector3((float)v0.X, 0, (float)v0.Y), Color.Orange);

            //}
        }
示例#22
0
        private void RenderConnections(PlanetNode node)
        {
            List <NeighbourTracker.Connection> connections = neighbourTracker.GetConnections(node);
            Color nodeQuadrantColor = Color.Red;

            if (neighbourTracker.nodeDictionary.ContainsKey(node.GetKeyPoint()))
            {
                NeighbourTrackerNode trackerNode = neighbourTracker.nodeDictionary[node.GetKeyPoint()];

                if (trackerNode.quadrant == NeighbourTrackerNode.Quadrant.ne)
                {
                    nodeQuadrantColor = Color.White;
                }
                if (trackerNode.quadrant == NeighbourTrackerNode.Quadrant.nw)
                {
                    nodeQuadrantColor = Color.Green;
                }
                if (trackerNode.quadrant == NeighbourTrackerNode.Quadrant.se)
                {
                    nodeQuadrantColor = Color.Pink;
                }
                if (trackerNode.quadrant == NeighbourTrackerNode.Quadrant.sw)
                {
                    nodeQuadrantColor = Color.Yellow;
                }

                DebugShapeRenderer.AddBoundingSphere(new BoundingSphere(node.GetSurfaceMidPoint(), 100f / trackerNode.depth), nodeQuadrantColor);
            }


            foreach (NeighbourTracker.Connection conn in connections)
            {
                DebugShapeRenderer.AddLine(node.GetSurfaceMidPoint(),
                                           Vector3.Transform(Vector3.Normalize(conn.node.keyPoint) * radius, Transform.AbsoluteTransform), Color.Blue);
            }
        }
示例#23
0
        public void drawgame(GameTime gameTime)
        {
            // Draw the in-game graphics
            sfunctions3d.resetgraphics(GraphicsDevice);

            // Draw the ground & walls
            for (int i = 0; i < numberofgrounds; i++)
            {
                ground[i].drawme(gamecamera, false);
            }

            for (int i = 0; i < numberofbullets; i++)
            {
                playerbullet[i].drawme(gamecamera, true);
            }

            for (int i = 0; i < numberofwalls; i++)
            {
                leftwall[i].drawme(gamecamera, false);
                rightwall[i].drawme(gamecamera, false);
            }

            // Draw the robot
            playerchar.drawme(gamecamera, true);

            // Draw the Zombies
            for (int i = 0; i < numberofzombs; i++)
            {
                if (Math.Abs(playerchar.position.Z - zombies[i].position.Z) < 10000)
                {
                    zombies[i].drawme(gamecamera, true);
                }
            }



            DebugShapeRenderer.Draw(gameTime, gamecamera.getview(), gamecamera.getproject());


            spriteBatch.Begin();
            //Draw the arrows for controls
            up.drawme(ref spriteBatch);
            down.drawme(ref spriteBatch);
            left.drawme(ref spriteBatch);
            right.drawme(ref spriteBatch);

            if (bulletcount <= 0)
            {
                firebut.drawme(ref spriteBatch);
            }


            //spriteBatch.DrawString(mainfont, "Res " + displaywidth.ToString() + " " + displayheight.ToString() + " Pos X:" + uservehicle.position.X.ToString("00000") + " Y:" + uservehicle.position.Y.ToString("00000") + " Z:" + uservehicle.position.Z.ToString("00000"),
            //    new Vector2(20, 60), Color.Yellow, MathHelper.ToRadians(0), new Vector2(0, 0), 0.5f, SpriteEffects.None, 0);

            //spriteBatch.DrawString(mainfont, "Accelerometer X:" + acc.X.ToString("0.00") + " Y:" + acc.Y.ToString("0.00") + " Z:" + acc.Z.ToString("0.00") + " Game Time:" + (gameruntime / 1000).ToString("0"),
            //    new Vector2(20, 80), Color.Yellow, MathHelper.ToRadians(0), new Vector2(0, 0), 0.5f, SpriteEffects.None, 0);

            spriteBatch.DrawString(mainfont, "Score: " + score.ToString(), new Vector2(625, 10),
                                   Color.LightGreen, MathHelper.ToRadians(0), new Vector2(0, 0), 0.75f, SpriteEffects.None, 0);

            spriteBatch.DrawString(mainfont, "Health: " + health.ToString(), new Vector2(10, 10),
                                   Color.LightGreen, MathHelper.ToRadians(0), new Vector2(0, 0), 0.75f, SpriteEffects.None, 0);


            spriteBatch.DrawString(mainfont, "Survive for as long as possible!", new Vector2((displaywidth / 2) - 200, displayheight - 35),
                                   Color.LightGreen, MathHelper.ToRadians(0), new Vector2(0, 0), 0.75f, SpriteEffects.None, 0);

            if (gameover)
            {
                backgroundGO.drawme(ref spriteBatch);
            }

            spriteBatch.End();
        }
示例#24
0
        private void OptimisePath()
        {
            //tries to look ahead and skip nodes we have clear unobstructed path to already

            Vector3 pos = ParentObject.Transform.AbsoluteTransform.Translation;

            pos.Y = 0;
            int indexToRemove = -1;

            for (int i = 1; i < path.Count; i++)
            {
                NavigationNode nodeToExamine = path[i];


                bool centerClear = false;
                bool leftClear   = false;
                bool rightClear  = false;

                Vector3 toNode = nodeToExamine.WorldPosition - pos;

                Vector3 perpendicularVec = Vector3.Cross(toNode, Vector3.Up);
                perpendicularVec.Y = 0;
                //width
                perpendicularVec *= 0.01f;

                //don't optimize route when we cross a hazard line boundary
                if (mapHandler.IntersectsHazardLine(pos, nodeToExamine.WorldPosition))
                {
                    continue;
                }


                //if we pass all 3 of these tests, this means we have clear LOS
                //to this node, wide enough to squeeze through. So we can skip prior nodes.
                if (!mapHandler.IntersectsLevel(pos, nodeToExamine.WorldPosition))
                {
                    centerClear = true;
                    if (!mapHandler.IntersectsLevel(pos + perpendicularVec, nodeToExamine.WorldPosition + perpendicularVec))
                    {
                        leftClear = true;
                        if (!mapHandler.IntersectsLevel(pos - perpendicularVec, nodeToExamine.WorldPosition - perpendicularVec))
                        {
                            rightClear    = true;
                            indexToRemove = i;
                        }
                        else
                        {
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }



                DebugShapeRenderer.AddLine(pos, nodeToExamine.WorldPosition, rightClear ? Color.Blue : Color.Red);
                DebugShapeRenderer.AddLine(pos + perpendicularVec, nodeToExamine.WorldPosition + perpendicularVec, leftClear ? Color.Blue : Color.Red);
                DebugShapeRenderer.AddLine(pos - perpendicularVec, nodeToExamine.WorldPosition - perpendicularVec, rightClear ? Color.Blue : Color.Red);
            }

            if (indexToRemove != -1)
            {
                path.RemoveRange(0, indexToRemove);
            }
        }
示例#25
0
        /// <summary>
        /// This is the very first method that needs to be called before using any of the Goblin
        /// XNA framework.
        /// </summary>
        /// <param name="graphics">GraphicsDeviceManager object from the main Game class</param>
        /// <param name="content">ContentManager object from the main Game class</param>
        /// <param name="settingFile">
        /// The full path of the setting file in XML format. Setting file is used, for example,
        /// to specify where the model files are stored if not directly under "Content" directory.
        /// You can also add your own setting variable with certain value, and retrieve the value
        /// using GetSettingVariable method.
        ///
        /// Can be an empty string, in which case, a template setting file (template_setting.xml)
        /// that contains all of the setting variables used in Goblin XNA will be generated.
        /// If you don't specify the setting file, then all of the resource files (e.g., models,
        /// textures, spritefonts, etc) should be directly stored under the "Content" directory,
        /// so Goblin XNA can figure out where to load those resources.
        /// </param>
        /// <see cref="GetSettingVariable"/>
        /// <exception cref="GoblinException"></exception>
        public static void InitGoblin(IGraphicsDeviceService graphics, ContentManager content,
                                      String settingFile)
        {
            if (graphics == null || content == null)
            {
                throw new GoblinException("graphics or content can not be null");
            }

            _graphics              = graphics;
            _device                = graphics.GraphicsDevice;
            _graphics.DeviceReset += new EventHandler <EventArgs>(graphics_DeviceReset);
            _content               = content;
            initialized            = true;
            spriteBatch            = new SpriteBatch(_device);
            // creates a blank texture for 2D primitive drawing when texture is not needed
            blankTexture = new Texture2D(_device, 1, 1, false, SurfaceFormat.Bgra5551);

            // puts a white pixel in this blank texture to make a 1x1 blank texture
            ushort[] texData = new ushort[1];
            texData[0] = (ushort)0xFFFF;
            blankTexture.SetData(texData);
            viewMatrix = Matrix.Identity;
            projMatrix = Matrix.Identity;

            // bounding box color for drawing 3D models' bounding box
            boundingBoxColor = Color.Red;

            DebugShapeRenderer.Initialize();

            settings = new Dictionary <string, string>();

            if (settingFile.Length != 0)
            {
                LoadSettings(settingFile);
            }
#if WINDOWS
            else
            {
                try
                {
                    WriteSettingTemplate();
                }
                catch (Exception) { }
            }
#endif

            printLevel = Log.LogLevel.Error;
            nextNodeID = 0;

            showFPS           = false;
            showNotifications = false;
            showTriangleCount = false;
            debugTextColor    = Color.White;

            enableNetworking  = false;
            isServer          = false;
            numWaitForClients = 0;

            cameraTransform = Matrix.Identity;

            threadOption = 0;
        }
示例#26
0
        public void Update(GameTime gameTime)
        {
            ParentObject.GetComponent <DoomMovementComponent>().Enabled = true;

            //when in combat, get much more frequent updates on enemy movements.
            apiHandler.frequentRequests.Find(x => x.Request.Resource.Contains("world")).Fequency = 4000;

            //check LOS to monsters. If
            if (worldObjects == null)
            {
                shotsFired = 0;
                return;
            }
            if (worldObjects.Count == 0)
            {
                shotsFired = 0;
                return;
            }



            //get all the monsters from the world object list.
            //monsters are ALL IN CAPS
            var monsters = worldObjects.Values.Where(x => IsAllUpper(x.GetComponent <DoomComponent>().DoomType)).ToList();

            //forget about the dead ones.
            monsters.RemoveAll(x => x.GetComponent <DoomComponent>().Health <= 0);

            //can we see any of these guys?
            List <GameObject> visibleMonsters = new List <GameObject>();

            foreach (GameObject monster in monsters)
            {
                if (!mapHandler.IntersectsLevel(ParentObject.Transform.AbsoluteTransform.Translation, monster.Transform.AbsoluteTransform.Translation, true))
                {
                    //we can see it.
                    visibleMonsters.Add(monster);

                    foreach (DoomLine door in mapHandler.Doors)
                    {
                        if (MonoMathHelper.LineIntersection(ParentObject.Transform.AbsoluteTransform.Translation.ToVector2XZ(),
                                                            monster.Transform.AbsoluteTransform.Translation.ToVector2XZ(),
                                                            door.start.ToVector2XZ(), door.end.ToVector2XZ()))
                        {
                            //there's a door between us and the monster. remove it
                            if (visibleMonsters.Contains(monster))
                            {
                                visibleMonsters.Remove(monster);
                            }
                        }
                    }
                }
            }

            if (visibleMonsters.Count == 0)
            {
                shotsFired = 0;
                return;
            }


            //when in combat, get much more frequent updates on enemy movements.
            apiHandler.frequentRequests.Find(x => x.Request.Resource.Contains("world")).Fequency = 500;


            GameObject target      = null;
            float      closestDist = float.MaxValue;

            foreach (GameObject vm in visibleMonsters)
            {
                Vector3 toMonsterVec = ParentObject.Transform.AbsoluteTransform.Translation - vm.Transform.AbsoluteTransform.Translation;

                if (toMonsterVec.Length() < closestDist)
                {
                    target      = vm;
                    closestDist = toMonsterVec.Length();
                }
            }

            if (closestDist > minimumCombatDistance)
            {
                shotsFired = 0;
                return;
            }

            //disable movement.
            ParentObject.GetComponent <DoomMovementComponent>().Enabled = false;

            DebugShapeRenderer.AddLine(ParentObject.Transform.AbsoluteTransform.Translation,
                                       target.Transform.AbsoluteTransform.Translation, Color.OrangeRed);


            Vector3 targetPosition = target.Transform.AbsoluteTransform.Translation;

            Vector3 toTarget = targetPosition - ParentObject.Transform.AbsoluteTransform.Translation;

            toTarget.Y = 0;
            toTarget.Normalize();


            Vector3 rightV = ParentObject.Transform.AbsoluteTransform.Right;

            rightV.Y = 0;
            rightV.Normalize();

            Vector3 forwardVec = ParentObject.Transform.AbsoluteTransform.Forward;

            forwardVec.Y = 0;
            forwardVec.Normalize();

            float dot = Vector3.Dot(toTarget, rightV);

            //game units are roughly 105 in a circle.
            //so 1 unit = 360 / 105 degrees
            //1 degree = 105 / 360
            var angle = MathHelper.ToDegrees(MonoMathHelper.GetAngleBetweenVectors(toTarget, forwardVec));

            float heading = MathHelper.ToDegrees(MonoMathHelper.GetHeadingFromVector((toTarget).ToVector2XZ()));

            heading = (heading + 360) % 360;

            if (dot > 0.05f)
            {
                if (!turning)
                {
                    //TurnLeft(2);
                    TurnLeftToHeading(heading);
                }
            }
            if (dot < -0.05f)
            {
                if (!turning)
                {
                    //TurnRight(2);
                    TurnRightToHeading(heading);
                }
            }

            if (dot > -0.3f && dot < 0.3f)
            {
                //the node we need is right behind us. Instigate a turn.
                if (MonoMathHelper.AlmostEquals(180d, angle, 10))
                {
                    TurnLeftToHeading(heading);
                    return;
                }

                Shoot();

                if (shotsFired > 8)
                {
                    //we keep missing. shift the aim a bit.
                    bool left = RandomHelper.CoinToss();
                    if (left)
                    {
                        TurnLeft(1);
                    }
                    else
                    {
                        TurnRight(1);
                    }
                    shotsFired = 0;
                }
            }
        }