示例#1
0
        private int GetFallDistance()
        {
            var fallDistance        = 100;
            var objectsProfile      = Room.Instance.ObjectsVolume.GetHighProfile();
            var furnitureLowProfile = _target.Volume.GetLowProfile();

            foreach (var kvp in furnitureLowProfile)
            {
                var voxelFurniture     = new Vector3Int(kvp.Key.x, kvp.Value, kvp.Key.y);
                var voxelWorldFuniture = VoxelSpace.GetWorldVoxelFromLocalVoxel(_target.transform.position,
                                                                                voxelFurniture - _target.Volume.Pivot);

                var voxelLocalRoom = VoxelSpace.GetLocalVoxelFromWorldVoxel(Room.Instance.transform.position,
                                                                            voxelWorldFuniture + Room.Instance.ObjectsVolume.Pivot);
                var roomXz = new Vector2Int(voxelLocalRoom.x, voxelLocalRoom.z);
                if (objectsProfile.ContainsKey(roomXz))
                {
                    Debug.DrawRay(VoxelSpace.GetWorldPositionCenter(voxelWorldFuniture), Vector3.up, Color.red, 1f);
                    var localH         = objectsProfile[roomXz];
                    var voxelWorldRoom = VoxelSpace.GetWorldVoxelFromLocalVoxel(Room.Instance.transform.position,
                                                                                new Vector3Int(roomXz.x, localH, roomXz.y) - Room.Instance.ObjectsVolume.Pivot);

                    fallDistance = Mathf.Min(Mathf.Abs(voxelWorldRoom.y - voxelWorldFuniture.y) - 1, fallDistance);
                    fallDistance = Mathf.Max(fallDistance, 0);
                }

                fallDistance = Mathf.Min(voxelWorldFuniture.y, fallDistance);
            }

            if (fallDistance == 100)
            {
                return(0);
            }
            return(fallDistance);
        }
示例#2
0
        public void PlaceFurniture(VoxelFurniture furniture)
        {
            //furniture.FinishMovement();
            foreach (var kvp in furniture.Volume.Data)
            {
                var worldVoxel = VoxelSpace.GetWorldVoxelFromLocalVoxel(furniture.transform.position,
                                                                        kvp.Key - furniture.Volume.Pivot);
                var localVoxel =
                    VoxelSpace.GetLocalVoxelFromWorldVoxel(transform.position, worldVoxel + ObjectsVolume.Pivot);
                ObjectsVolume.SetAt(localVoxel, kvp.Value);
            }

            _placedFurniture.Add(furniture);
        }