Skip to content

Commit

Permalink
Reworked compound camera part
Browse files Browse the repository at this point in the history
Removed explicit Freecamera and added camera as parameters to Rigid part.
  • Loading branch information
treewyrm committed Jul 7, 2022
1 parent e3ff46e commit 2452119
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 106 deletions.
26 changes: 11 additions & 15 deletions macroscripts/MAXLancer-ExportRigid.mcr
Original file line number Diff line number Diff line change
Expand Up @@ -295,28 +295,24 @@ macroscript ExportRigid category:"MAXLancer" tooltip:"Export Rigid" buttontext:"
)

fn ListCamera part parent = (
local camera = MAXLancer.GetPartCamera part
local child = parent.Nodes.Add ("Camera")

if camera != undefined then (
local child = parent.Nodes.Add ("Camera")

child.Nodes.Add ("FovX: " + formattedPrint camera.fovX format:".2f")
child.Nodes.Add ("FovY: " + formattedPrint camera.fovY format:".2f")
child.Nodes.Add ("ZNear: " + formattedPrint camera.zNear format:".2f")
child.Nodes.Add ("ZFar: " + formattedPrint camera.zFar format:".2f")
)
child.Nodes.Add ("Fov X: " + formattedPrint part.fovX format:".2f")
child.Nodes.Add ("Fov Y: " + formattedPrint part.fovY format:".2f")
child.Nodes.Add ("zNear Clip: " + formattedPrint part.zNear format:".2f")
child.Nodes.Add ("zFar Clip: " + formattedPrint part.zFar format:".2f")

OK
)


fn ListPart part parent = (
partCount += 1

ListLevels part parent
ListHardpoints part parent
ListHulls part parent
ListCamera part parent
if part.isCamera then ListCamera part parent else (
ListLevels part parent
ListHardpoints part parent
ListHulls part parent
)

if compound then ListAnimations part parent

Expand Down Expand Up @@ -345,7 +341,7 @@ macroscript ExportRigid category:"MAXLancer" tooltip:"Export Rigid" buttontext:"
-- Check dmg_hp to be in part parent
if hardpoint.parent != part.parent then throw ("Damage hardpoint " + hardpoint.name + " has invalid parent object.")

parent.Nodes.Add ("Damage part: " + model.name)
parent.Nodes.Add ("Damage part: " + model.name)
ListPart model (treeBox.Nodes.Add (part.name + " (" + hardpoint.name + "): " + model.name))

append damageParts model
Expand Down
25 changes: 12 additions & 13 deletions macroscripts/MAXLancer-ImportRigid.mcr
Original file line number Diff line number Diff line change
Expand Up @@ -249,15 +249,13 @@ macroscript ImportRigid category:"MAXLancer" tooltip:"Import Rigid" buttontext:"
OK
)

fn ListCamera part parent = (
if part.camera != undefined then (
local child = parent.Nodes.Add "Camera"

child.Nodes.Add ("FovX: " + formattedPrint part.camera.fovX format:".2f")
child.Nodes.Add ("FovY: " + formattedPrint part.camera.fovY format:".2f")
child.Nodes.Add ("ZNear: " + formattedPrint part.camera.zNear format:".2f")
child.Nodes.Add ("ZFar: " + formattedPrint part.camera.zFar format:".2f")
)
fn ListCamera camera parent = (
local child = parent.Nodes.Add "Camera"

child.Nodes.Add ("Fov X: " + formattedPrint camera.fovX format:".2f")
child.Nodes.Add ("Fov Y: " + formattedPrint camera.fovY format:".2f")
child.Nodes.Add ("zNear Clip: " + formattedPrint camera.zNear format:".2f")
child.Nodes.Add ("zFar Clip: " + formattedPrint camera.zFar format:".2f")

OK
)
Expand All @@ -266,10 +264,11 @@ macroscript ImportRigid category:"MAXLancer" tooltip:"Import Rigid" buttontext:"
fn ListPart part parent = (
partCount += 1

ListLevels part parent
ListHardpoints part parent
ListHulls part parent
ListCamera part parent
if part.camera != undefined then ListCamera part.camera parent else (
ListLevels part parent
ListHardpoints part parent
ListHulls part parent
)

if MAXLancer.IsRigidCompound model then ListAnimations part parent

Expand Down
49 changes: 2 additions & 47 deletions scripts/Compound.ms
Original file line number Diff line number Diff line change
Expand Up @@ -403,13 +403,13 @@ fn WriteCompound writer root constraints scaler: timestamps:true = (
if constraints.count > 0 then WriteConstraints writer constraints

-- Set filename in root
root.filename = GetFilenameFile writer.filename + suffix + ".3db"
root.filename = GetFilenameFile writer.filename + suffix + root.GetFilenameExtension()

local parts = #(root) -- Array of *Part (includes root)

-- Set filename in subparts
for constraint in constraints do (
constraint.child.filename = constraint.child.name + suffix + ".3db"
constraint.child.filename = constraint.child.name + suffix + constraint.child.GetFilenameExtension()
append parts constraint.child
)

Expand Down Expand Up @@ -635,49 +635,4 @@ struct CameraPart (
writer.WriteFileFloat "Zfar" zFar
OK
)
)

fn ReadCamera reader &camera = (
if classOf reader != UTFReader then throw "Invalid UTFReader object"

camera = undefined

if reader.OpenFolder "Camera" then (
(camera = CameraPart()).ReadUTF reader
reader.CloseFolder() -- Close Camera
)

OK
)

fn WriteCamera writer camera = (
if classOf writer != UTFWriter then throw "Invalid UTFWriter object"

-- Write wireframe
if classOf camera == CameraPart then (
if not writer.OpenFolder "Camera" then throw "Error writing Camera"

camera.WriteUTF writer
writer.CloseFolder() -- Close Camera
)

OK
)

fn BuildCamera target camera = (
if not isValidNode target then throw "Invalid target node."

local result = Freecamera parent:target transform:(rotateXMatrix 90 * target.transform) fov:camera.fovX clipManually:true nearclip:camera.zNear farclip:camera.zFar wireColor:target.wireColor
AddToLayer "Cameras" result

OK
)

fn ParseCamera target = (
if not isValidNode target then throw "Invalid target node."
if classOf target != Freecamera then throw "Invalid camera node."

local result = CameraPart fovX:target.fov zNear:target.nearclip zFar:target.farclip

result -- Return CameraPart
)
9 changes: 0 additions & 9 deletions scripts/MAXLancer.ms
Original file line number Diff line number Diff line change
Expand Up @@ -392,15 +392,6 @@ global MAXLancer = (
OK
),

-- Get rigid part helper camera object as CameraPart
fn GetPartCamera target = if IsRigidPartHelper target then (
local camera -- Freecamera

for child in target.children while camera == undefined where classOf child == Freecamera do camera = child

if camera != undefined then CameraPart fovX:camera.fov zNear:camera.nearclip zFar:camera.farclip
),

-- Collect names of parts and hardpoints into hashmap
fn GetModelHashes root names hashes parts:true hardpoints:true = (
local queue = #(root)
Expand Down
81 changes: 59 additions & 22 deletions scripts/Rigid.ms
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ plugin Helper RigidPartHelper classID:#(0x4C58414D, 0x74726170) name:"Rigid" cat
damageModel type:#node animatable:false
)

parameters CameraPartParameters rollout:CameraRollout (
isCamera type:#boolean animatable:false ui:isCameraCheckbox default:false
fovX type:#float animatable:false ui:fovXSpinner default:45.0
fovY type:#float animatable:false ui:fovYSpinner default:45.0
zNear type:#float animatable:false ui:zNearSpinner default:0.001
zFar type:#float animatable:false ui:zFarSpinner default:1000.0
)

fn filterRigidPart target = classOf target == RigidPartHelper
fn filterHardpoint target = classOf target == HardpointHelper

Expand Down Expand Up @@ -90,6 +98,15 @@ plugin Helper RigidPartHelper classID:#(0x4C58414D, 0x74726170) name:"Rigid" cat
*/
)

rollout CameraRollout "Camera Parameters" (
checkbox isCameraCheckbox "Is Camera?" tooltip:"If enabled this part is used for camera placement. Used by ship cockpit models."

spinner fovXSpinner "Fov X" type:#float range:[0, 180, 45]
spinner fovYSpinner "Fov Y" type:#float range:[0, 180, 45]
spinner zNearSpinner "Near Clip" type:#float range:[0, 3.4e38, 0]
spinner zFarSpinner "Far Clip" type:#float range:[0, 3.4e38, 1000]
)

on getDisplayMesh do (
if size != lastSize then (
local vertices = #([size, 0, 0], [0, size, 0], [0, 0, size], [-size, 0, 0], [0, -size, 0], [0, 0, -size])
Expand Down Expand Up @@ -123,6 +140,8 @@ struct RigidPart (
wireframe, -- HUD wireframe (VWireData)
camera, -- Cockpit camera

fn GetFilenameExtension = if classOf camera == CameraPart then ".cam" else ".3db",

fn GetHashList hashes names = (
if appendIfUnique hashes (MAXLancer.hash name) then append names name
for hardpoint in hardpoints where appendIfUnique hashes (MAXLancer.hash hardpoint.name) do append names hardpoint.name
Expand Down Expand Up @@ -178,10 +197,14 @@ struct RigidPart (

MAXLancer.WriteLog ("Reading rigid part: " + name)

ReadLevels reader &levels &ranges
ReadWireframe reader &wireframe
ReadHardpoints reader &hardpoints
ReadCamera reader &camera
if reader.OpenFolder "Camera" then (
(camera = CameraPart()).ReadUTF reader
reader.CloseFolder() -- Close Camera
) else (
ReadLevels reader &levels &ranges
ReadWireframe reader &wireframe
ReadHardpoints reader &hardpoints
)

OK
),
Expand All @@ -192,10 +215,16 @@ struct RigidPart (

MAXLancer.WriteLog ("Writing rigid part: " + name)

WriteLevels writer levels ranges
WriteWireframe writer wireframe
WriteHardpoints writer hardpoints
WriteCamera writer camera
if classOf camera == CameraPart then (
if not writer.OpenFolder "Camera" then throw "Error writing Camera"

camera.WriteUTF writer
writer.CloseFolder() -- Close Camera
) else (
WriteLevels writer levels ranges
WriteWireframe writer wireframe
WriteHardpoints writer hardpoints
)

OK
),
Expand All @@ -209,10 +238,17 @@ struct RigidPart (
local result = RigidPartHelper name:helperName size:size transform:origin
AddToLayer "Parts" result

if classOf camera == CameraPart then BuildCamera result this.camera
if hardpoints then BuildHardpoints result this.hardpoints
if classOf meshLib == VMeshLibrary then meshLib.BuildLevels result levels ranges wireframe wireframes:wireframes boundaries:boundaries materialLib:materialLib textureLib:textureLib progress:progress

if classOf camera == CameraPart then (
result.isCamera = true
result.fovX = camera.fovX
result.fovY = camera.fovY
result.zNear = camera.zNear
result.zFar = camera.zFar
) else (
if hardpoints then BuildHardpoints result this.hardpoints
if classOf meshLib == VMeshLibrary then meshLib.BuildLevels result levels ranges wireframe wireframes:wireframes boundaries:boundaries materialLib:materialLib textureLib:textureLib progress:progress
)

result -- Return RigidPartHelper
),

Expand All @@ -231,17 +267,18 @@ struct RigidPart (
* pass into function and only then set into properties.
*/

local partLevels -- Array of VMeshRef
local partRanges -- Array of Float
local partWireframe -- VWireData
if target.isCamera then camera = CameraPart fovX:target.fovX fovY:target.fovY zNear:target.zNear zFar:target.zFar else (
local partLevels -- Array of VMeshRef
local partRanges -- Array of Float
local partWireframe -- VWireData

if hardpoints then ParseHardpoints target &this.hardpoints
if classOf meshLib == VMeshLibrary then meshLib.ParseLevels target filename &partLevels &partRanges &partWireframe wireframes:wireframes materialLib:materialLib textureLib:textureLib progress:progress

levels = partLevels
ranges = partRanges
wireframe = partWireframe
camera = MAXLancer.GetPartCamera target
if hardpoints then ParseHardpoints target &this.hardpoints
if classOf meshLib == VMeshLibrary then meshLib.ParseLevels target filename &partLevels &partRanges &partWireframe wireframes:wireframes materialLib:materialLib textureLib:textureLib progress:progress
levels = partLevels
ranges = partRanges
wireframe = partWireframe
)

OK
),
Expand Down

0 comments on commit 2452119

Please sign in to comment.