Files
gtav-src/tools_ng/wildwest/script/3dsMax/Maps/SunkenOcclusionCreator.ms
T
2025-09-29 00:52:08 +02:00

92 lines
2.8 KiB
Plaintext
Executable File

try(DestroyDialog SunkenOcclusionBoxUI)catch()
rollout SunkenOcclusionBoxUI "Create Sunken Occlusion Box"
(
--UI
dotNetControl rsBannerPanel "Panel" pos:[0,0] height:32 width:SunkenOcclusionBoxUI.width
local banner = makeRsBanner dn_Panel:rsBannerPanel wiki:"SunkenOcclusionCreator" filename:(getThisScriptFilename())
group ""
(
spinner spnNegZExtent "Negative Z: " range:[1, 100, 10]
button btnCreate "Create" width:210
)
--FUNctions
--//////////////////////////////////////////////////////
--
--//////////////////////////////////////////////////////
fn convertToOcclusion o =
(
if ( Box == classof o ) then
(
occlBox = RsOcclusionBox()
occlBox.Box2.Length = o.Length
occlBox.Box2.Width = o.Width
occlBox.Box2.Height = o.Height
occlBox.Box2.LengthSegments = o.LengthSegments
occlBox.Box2.WidthSegments = o.WidthSegments
occlBox.Box2.HeightSegments = o.HeightSegments
occlBox.Box2.GenerateUVs = false
occlBox.Box2.Front = true
occlBox.Box2.Top = true
occlBox.Box2.Left = true
occlBox.Box2.Back = true
occlBox.Box2.Bottom = true
occlBox.Box2.Right = true
occlBox.transform = o.transform
occlBox.name = o.name
occlBox
)
else
(
format "Couldn't copy parameters from %:% to %:% as they aren't both the required type (box2Geometry and RsPopZone or \
RsMapZone)\n" box2Obj (classof box2Obj) newZoneObj (classof newZoneObj)
)
)
--//////////////////////////////////////////////////////
--Events dear boy
--//////////////////////////////////////////////////////
--//////////////////////////////////////////////////////
--
--//////////////////////////////////////////////////////
on SunkenOcclusionBoxUI open do
(
banner.setup()
)
--//////////////////////////////////////////////////////
--
--//////////////////////////////////////////////////////
on btnCreate pressed do
(
local sel = for obj in $selection where superClassOf obj == GeometryClass collect obj
if sel.count == 0 then return false
local zPad = spnNegZExtent.value
local geo = RsCreateCollisionGeometry objs:sel collClass:#box padding:[0.0, 0.0, zPad] createAsGeometry:true \
createPerElement:false longCyl:true rotZ:true rotYZ:false wideRamp:false longRamp:false inaccuracy:0.05 minSize:RsMinCollSize showProgress:true
--rename
geo.name = sel[1].name + "_Occlusion"
geo_bbox = nodegetBoundingBox geo[1] geo[1].transform
geo_bboxZMag = abs(geo_bbox[2].z - geo_bbox[1].z)
sel_bbox = nodegetBoundingBox sel[1] sel[1].transform
sel_bboxZMag = abs(sel_bbox[2].z - sel_bbox[1].z)
move geo [0, 0, -geo_bboxZMag + sel_bboxZMag]
--create occlusion box
occBox = convertToOcclusion geo[1]
centerPivot occBox
--delete collisionbox
delete geo[1]
)
)
createDialog SunkenOcclusionBoxUI width:230