/// <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(); }
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); } } }
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); }
public override void Render(GameTime gameTime) { SystemCore.GraphicsDevice.Clear(SystemCore.ActiveColorScheme.Color2); DebugShapeRenderer.VisualiseAxes(5f); base.Render(gameTime); }
protected override Entity Create() { if (shapeRenderer == null) { shapeRenderer = new DebugShapeRenderer(GraphicsDevice, ((EntityHierarchyEditorGame)Game).EditorScene); } return(base.Create()); }
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); } }
public override void Render(GameTime gameTime) { if (!SystemCore.ShadowMapRenderer.ShadowPass) { SystemCore.GraphicsDevice.Clear(Color.Black); } DebugShapeRenderer.VisualiseAxes(5f); base.Render(gameTime); }
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); }
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); }
public override void Render(GameTime gameTime) { SystemCore.GraphicsDevice.Clear(Color.Gray); DebugText.Write(cameraGameObject.Transform.WorldMatrix.Translation.ToString()); DebugShapeRenderer.VisualiseAxes(5f); base.Render(gameTime); }
/// <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(); }
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); } } }
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); }
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); } }
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); } }
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(); }
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); } }
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); }
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); } } }
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); }
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); //} }
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); } }
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(); }
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); } }
/// <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; }
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; } } }