示例#1
0
        private DestroyZoneTool DestroyZoneTool; // I should probably be fired for this.

        public override void OnVoxelsSelected(List <VoxelHandle> voxels, InputManager.MouseButton button)
        {
            if (button == InputManager.MouseButton.Left)
            {
                Player.Faction.RoomBuilder.VoxelsSelected(voxels, button);
            }
            else
            {
                DestroyZoneTool.OnVoxelsSelected(voxels, button);
            }
        }
示例#2
0
        private DestroyZoneTool DestroyZoneTool; // I should probably be fired for this.

        public override void OnVoxelsSelected(List <VoxelHandle> voxels, InputManager.MouseButton button)
        {
            if (button == InputManager.MouseButton.Left)
            {
                foreach (BuildZoneOrder order in World.PersistentData.BuildDesignations)
                {
                    order.SetTint(Color.White);
                }

                foreach (var room in World.EnumerateZones())
                {
                    room.SetTint(Color.White);
                }

                if (CurrentZoneType == null)
                {
                    return;
                }

                if (button == InputManager.MouseButton.Left)
                {
                    if (CurrentZoneType.CanBuildHere(voxels, World))
                    {
                        if (Library.CreateZone(CurrentZoneType.Name, World).HasValue(out var toBuild))
                        {
                            var order = new BuildZoneOrder(toBuild, World);
                            World.PersistentData.BuildDesignations.Add(order);
                            World.PersistentData.Zones.Add(toBuild);

                            foreach (var v in voxels.Where(v => v.IsValid && !v.IsEmpty))
                            {
                                order.VoxelOrders.Add(new BuildVoxelOrder(order, order.ToBuild, v));
                            }

                            order.WorkObjects.AddRange(Fence.CreateFences(World.ComponentManager,
                                                                          ContentPaths.Entities.DwarfObjects.constructiontape,
                                                                          order.VoxelOrders.Select(o => o.Voxel),
                                                                          true));
                            foreach (var obj in order.WorkObjects)
                            {
                                obj.Manager.RootComponent.AddChild(obj);
                            }

                            World.TaskManager.AddTask(new BuildZoneTask(order));
                        }
                    }
                }
            }
            else
            {
                DestroyZoneTool.OnVoxelsSelected(voxels, button);
            }
        }