void OnMapTerrainChanged(IntVector3 l) { if (!m_box.Contains(l)) { return; } NotifyTileTerrainChanges(); }
public void RemoveArea(IntGrid3 area) { var removes = m_map.Where(kvp => area.Contains(kvp.Key)).ToArray(); foreach (var kvp in removes) { RemoveDesignation(kvp.Key); } }
protected override JobStatus CheckProgress(ILivingObject worker) { if (m_dest.Contains(worker.Location)) { return(JobStatus.Done); } else { return(JobStatus.Ok); } }
void UpdateVertexBuffer() { if (m_env == null) { RemoveAndDispose(ref m_vertexBuffer); m_vertexList = null; return; } var envContents = m_env.Contents; if (m_vertexList != null && envContents.Count > m_vertexList.Count) { m_vertexList = null; } if (m_vertexList == null) { m_vertexList = new VertexList <SceneryVertex>(envContents.Count * 2); } IntGrid3 viewGrid = m_viewGridProvider.ViewGrid; m_vertexList.Clear(); foreach (var ob in envContents.OfType <ConcreteObject>()) { if (viewGrid.Contains(ob.Location) == false) { continue; } var c = ob.Color; if (c == GameColor.None) { c = ob.Material.Color; } m_vertexList.Add(new SceneryVertex(ob.Location.ToVector3(), ToColor(c), (uint)ob.SymbolID)); } if (m_vertexList.Count > 0) { if (m_vertexBuffer == null || m_vertexBuffer.ElementCount < m_vertexList.Count) { RemoveAndDispose(ref m_vertexBuffer); m_vertexBuffer = ToDispose(SharpDX.Toolkit.Graphics.Buffer.Vertex.New <SceneryVertex>(this.GraphicsDevice, m_vertexList.Count)); } m_vertexBuffer.SetData(m_vertexList.Data, 0, m_vertexList.Count); } }
public static bool PickVoxel(EnvironmentObject env, GameSurfaceView view, IntVector2 screenPos, IntGrid3 cropGrid, MapControlPickMode pickMode, out IntVector3 pos, out Direction face) { var camera = view.Camera; var ray = Ray.GetPickRay(screenPos.X, screenPos.Y, view.ViewPort, view.Camera.View * view.Camera.Projection); IntVector3 outpos = new IntVector3(); Direction outdir = Direction.None; var corner = cropGrid.Corner2; var size = new IntSize3(corner.X + 1, corner.Y + 1, corner.Z + 1); IntVector3 prevoutpos = new IntVector3(); Direction prevoutdir = Direction.None; VoxelRayCast.RunRayCast(size, ray.Position, ray.Direction, view.Camera.FarZ, (x, y, z, dir) => { var p = new IntVector3(x, y, z); if (cropGrid.Contains(p) == false) return false; var td = env.GetTileData(p); switch (pickMode) { case MapControlPickMode.Underground: if (!td.IsUndefined && !td.IsWall) return false; outpos = p; outdir = dir; return true; case MapControlPickMode.AboveGround: if (!td.IsUndefined && !td.IsWall) { prevoutpos = p; prevoutdir = dir; return false; } if (prevoutpos.IsNull) { outpos = p; outdir = dir; } else { outpos = prevoutpos; outdir = prevoutdir; } return true; case MapControlPickMode.Constant: if (p.Z > cropGrid.Z2) return false; outpos = p; outdir = dir; return true; default: throw new NotImplementedException(); } }); pos = outpos; face = outdir; return face != Direction.None; }
public void RemoveArea(IntGrid3 area) { var removes = m_map.Where(kvp => area.Contains(kvp.Key)).ToArray(); foreach (var kvp in removes) RemoveDesignation(kvp.Key); }
public static bool PickVoxel(EnvironmentObject env, GameSurfaceView view, IntVector2 screenPos, IntGrid3 cropGrid, MapControlPickMode pickMode, out IntVector3 pos, out Direction face) { var camera = view.Camera; var ray = Ray.GetPickRay(screenPos.X, screenPos.Y, view.ViewPort, view.Camera.View * view.Camera.Projection); IntVector3 outpos = new IntVector3(); Direction outdir = Direction.None; var corner = cropGrid.Corner2; var size = new IntSize3(corner.X + 1, corner.Y + 1, corner.Z + 1); IntVector3 prevoutpos = new IntVector3(); Direction prevoutdir = Direction.None; VoxelRayCast.RunRayCast(size, ray.Position, ray.Direction, view.Camera.FarZ, (x, y, z, dir) => { var p = new IntVector3(x, y, z); if (cropGrid.Contains(p) == false) { return(false); } var td = env.GetTileData(p); switch (pickMode) { case MapControlPickMode.Underground: if (!td.IsUndefined && !td.IsWall) { return(false); } outpos = p; outdir = dir; return(true); case MapControlPickMode.AboveGround: if (!td.IsUndefined && !td.IsWall) { prevoutpos = p; prevoutdir = dir; return(false); } if (prevoutpos.IsNull) { outpos = p; outdir = dir; } else { outpos = prevoutpos; outdir = prevoutdir; } return(true); case MapControlPickMode.Constant: if (p.Z > cropGrid.Z2) { return(false); } outpos = p; outdir = dir; return(true); default: throw new NotImplementedException(); } }); pos = outpos; face = outdir; return(face != Direction.None); }