Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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));
                }
            }
        }
Esempio n. 3
0
        public BoundingBox GetBoundingBox()
        {
            List <BoundingBox> components = VoxelOrders.Select(vox => vox.Voxel.GetBoundingBox()).ToList();

            return(MathFunctions.GetBoundingBox(components));
        }