public virtual void Build(bool silent = false) { if (IsBuilt) { return; } IsBuilt = true; ToBuild.CompleteRoomImmediately(VoxelOrders.Select(o => o.Voxel).ToList()); if (!silent) { World.MakeAnnouncement(String.Format("{0} was built", ToBuild.Type.Name), null); SoundManager.PlaySound(ContentPaths.Audio.Oscar.sfx_gui_positive_generic, 0.15f); } foreach (GameComponent fence in WorkObjects) { fence.Die(); } }
public void CreateFences(ComponentManager components) { Voxel neighbor = new Voxel(); Vector3 half = Vector3.One * 0.5f; Vector3 off = half + Vector3.Up; foreach (BuildVoxelOrder order in VoxelOrders) { Voxel voxel = order.Voxel; if (voxel.GetNeighbor(new Vector3(0, 0, 1), ref neighbor) && !VoxelOrders.Any(o => o.Voxel.Equals(neighbor))) { WorkObjects.Add(new WorkFence(components, voxel.Position + off + new Vector3(0, 0, 0.45f), (float)Math.Atan2(0, 1))); } if (voxel.GetNeighbor(new Vector3(0, 0, -1), ref neighbor) && !VoxelOrders.Any(o => o.Voxel.Equals(neighbor))) { WorkObjects.Add(new WorkFence(components, voxel.Position + off + new Vector3(0, 0, -0.45f), (float)Math.Atan2(0, -1))); } if (voxel.GetNeighbor(new Vector3(1, 0, 0), ref neighbor) && !VoxelOrders.Any(o => o.Voxel.Equals(neighbor))) { WorkObjects.Add(new WorkFence(components, voxel.Position + off + new Vector3(0.45f, 0, 0.0f), (float)Math.Atan2(1, 0))); } if (voxel.GetNeighbor(new Vector3(-1, 0, 0), ref neighbor) && !VoxelOrders.Any(o => o.Voxel.Equals(neighbor))) { WorkObjects.Add(new WorkFence(components, voxel.Position + off + new Vector3(-0.45f, 0, 0.0f), (float)Math.Atan2(-1, 0))); } if (MathFunctions.RandEvent(0.1f)) { WorkObjects.Add(new WorkPile(components, voxel.Position + off)); } } }
public BoundingBox GetBoundingBox() { List <BoundingBox> components = VoxelOrders.Select(vox => vox.Voxel.GetBoundingBox()).ToList(); return(MathFunctions.GetBoundingBox(components)); }