예제 #1
0
        public override void Render(GameTime gameTime)
        {
            SystemCore.GraphicsDevice.Clear(Color.CornflowerBlue);

            DebugText.Write(SystemCore.GetSubsystem <FPSCounter>().FPS.ToString());
            base.Render(gameTime);
        }
예제 #2
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);
        }
예제 #3
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);
        }
예제 #4
0
        public override void Update(GameTime gameTime)
        {
            SystemCore.ActiveScene.SetDiffuseLightDir(0, Vector3.Normalize(Vector3.Zero - earth.CurrentCenterPosition));

            foreach (MiniPlanet miniPlanet in planets)
            {
                float distanceFromSurface =
                    (cameraGameObject.Transform.WorldMatrix.Translation - miniPlanet.CurrentCenterPosition).Length();

                miniPlanet.Update(gameTime, distanceFromSurface, cameraGameObject.Transform.WorldMatrix.Translation);
            }



            if (SystemCore.Input.KeyPress(Microsoft.Xna.Framework.Input.Keys.Enter))
            {
                GenerateSystem();
            }

            int currentIndex = 0;
            PlanetParameters currentParameter = null;

            foreach (KeyValuePair <string, PlanetParameters> pair in NoiseGenerator.miniPlanetParameters)
            {
                if (currentIndex == currentParameterIndex)
                {
                    currentParameter = pair.Value;
                    break;
                }
                currentIndex++;
            }

            DebugText.Write(currentParameter.Name + " : " + currentParameter.Value.ToString());

            if (SystemCore.Input.KeyPress(Keys.OemPlus))
            {
                currentParameterIndex++;
                if (currentParameterIndex >= NoiseGenerator.miniPlanetParameters.Count)
                {
                    currentParameterIndex = 0;
                }
            }
            if (SystemCore.Input.KeyPress(Keys.OemMinus))
            {
                currentParameterIndex--;
                if (currentParameterIndex < 0)
                {
                    currentParameterIndex = NoiseGenerator.miniPlanetParameters.Count - 1;
                }
            }

            //double
            if (SystemCore.Input.KeyPress(Keys.NumPad1))
            {
                currentParameter.Value *= 2;
                GenerateSystem();
            }
            //half
            if (SystemCore.Input.KeyPress(Keys.NumPad2))
            {
                currentParameter.Value /= 2f;
                GenerateSystem();
            }

            //
            if (SystemCore.Input.KeyPress(Keys.NumPad3))
            {
                currentTestLod--;
                planets[0].SetLOD(currentTestLod);
            }
            if (SystemCore.Input.KeyPress(Keys.NumPad4))
            {
                currentTestLod++;
                planets[0].SetLOD(currentTestLod);
            }



            base.Update(gameTime);
        }
예제 #5
0
        public override void Update(GameTime gameTime)
        {
            if (input.KeyPress(Microsoft.Xna.Framework.Input.Keys.Escape))
            {
                SystemCore.ScreenManager.AddAndSetActive(new MainMenuScreen());
            }

            if (input.KeyPress(Microsoft.Xna.Framework.Input.Keys.O))
            {
                heading -= 10;
                playerObj.GetComponent <DoomMovementComponent>().TurnRightToHeading(heading);
            }
            if (input.KeyPress(Microsoft.Xna.Framework.Input.Keys.P))
            {
                heading += 10;
                playerObj.GetComponent <DoomMovementComponent>().TurnRightToHeading(heading);
            }

            if (heading > 360)
            {
                heading = 0;
            }
            if (heading < 0)
            {
                heading = 360;
            }

            if (input.MouseLeftPress())
            {
                //PathToMousePoint();
            }


            UpdateCamera();

            if (!mapHandler.FloodFillComplete)
            {
                mapHandler.FloodFillStep();
            }

            if (mapHandler.FloodFillComplete && playerObj.GetComponent <DoomMovementComponent>().path == null && !doNothing)
            {
                playerObj.GetComponent <DoomMovementComponent>().PathToPoint(mapHandler.LevelEnd);
                endOfLevelSeeking = true;
            }

            //check if we can see anything. If so, path to it.
            if (!doNothing)
            {
                if (collectItems)
                {
                    PickUpObjects();
                }
            }


            apiHandler.Update();


            if (playerObj != null)
            {
                DebugText.Write(playerObj.Transform.AbsoluteTransform.Translation.ToString());
            }


            base.Update(gameTime);
        }
예제 #6
0
 public void WriteState(Side side)
 {
     DebugText.Write($"attackState: {this.state}", 1, 2, Color.red, side);
 }
예제 #7
0
        public void Update(GameTime gameTime)
        {
            if (path == null)
            {
                return;
            }

            if (path.Count > 0)
            {
                if (path.Count > 1)
                {
                    OptimisePath();
                }


                NavigationNode currentNode = path[0];

                //check we can still see our node. Sometimes we can't, after
                //applying an unexpectedly large move.
                if (!CanStillPathToNode(currentNode) && currentNode.WorldPosition != mapHandler.LevelEnd)
                {
                    PathToPoint(path[path.Count - 1].WorldPosition);
                }


                Vector3 toTarget = currentNode.WorldPosition - ParentObject.Transform.AbsoluteTransform.Translation;
                if (toTarget.Length() < minDistanceToNode)
                {
                    path.RemoveAt(0);
                    return;
                }

                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 spinAmount = angle * (105f / 360);


                float heading = MathHelper.ToDegrees(MonoMathHelper.GetHeadingFromVector((currentNode.WorldPosition - ParentObject.Transform.AbsoluteTransform.Translation).ToVector2XZ()));
                heading = (heading + 360) % 360;
                //DebugText.Write(dot.ToString());
                // DebugText.Write(angle.ToString());
                // DebugText.Write(spinAmount.ToString());
                DebugText.Write("Heading: " + heading.ToString());



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

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

                    if (!moving)
                    {
                        //we're likely stuck. Try moving back
                        if (movementAttemptsWithNoPositionChange > 50)
                        {
                            MoveBackward(4);
                            movementAttemptsWithNoPositionChange = 0;
                        }
                        else
                        {
                            MoveForward(4);
                        }
                    }
                }


                FeelForward();
            }
            else
            {
                path = null;
            }
        }
예제 #8
0
        public override void Render(GameTime gameTime)
        {
            DebugText.Write(SystemCore.ActiveCamera.Position.ToString());

            base.Render(gameTime);
        }
 public void WriteState(Side side)
 {
     DebugText.Write($"defenseState: {this.state}", 1, 3, Color.red, side);
 }
예제 #10
0
 public void WriteState(Side side)
 {
     DebugText.Write($"adState: {this.state}", 0, 1, Color.red, side);
     attackController.WriteState(side);
     defenseController.WriteState(side);
 }
예제 #11
0
 public void WriteState(Side side)
 {
     DebugText.Write($"movementState: {this.state}", 0, 0, Color.green, side);
 }