967 lines
29 KiB
Plaintext
Executable File
967 lines
29 KiB
Plaintext
Executable File
--//////////////////////////////////////////////////////////////////////////////
|
|
-- ogreExporter.cpp
|
|
-- Author : Doug Perkowski - OC3 Entertainment, Inc.
|
|
-- Start Date : December 10th, 2007
|
|
-- Copyright : (C) 2007 OC3 Entertainment, Inc.
|
|
--//////////////////////////////////////////////////////////////////////////////
|
|
--********************************************************************************
|
|
-- *
|
|
-- This script is released under the *
|
|
-- Creative Commons Attribution 3.0 United States License *
|
|
-- http://creativecommons.org/licenses/by/3.0/us/ *
|
|
-- *
|
|
--********************************************************************************
|
|
|
|
FxOgreMaxExporterDialog = newRolloutFloater "FxOgre" 400 800
|
|
|
|
FxOgreObject = FxOgre();
|
|
|
|
|
|
-- We have 3 identical animation GUIs, so abstract this functionality into functions
|
|
-- that can be used by all 3.
|
|
function animRefresh roll isEnabled =
|
|
(
|
|
roll.anims.selection = 0
|
|
roll.animName.text = ""
|
|
roll.sampleFrames.text = 1 as String
|
|
roll.sampleSeconds.text = (1.0 / frameRate ) as String
|
|
if roll.rangeType.state == 1 then
|
|
(
|
|
if roll.rangeUnit.state == 2 then
|
|
(
|
|
roll.start.text = ((animationRange.start as float) / 4800 ) as String
|
|
roll.stop.text = ((animationRange.end as float) / 4800 ) as String
|
|
)
|
|
else
|
|
(
|
|
roll.start.text = ((animationRange.start as integer) / TicksPerFrame ) as String
|
|
roll.stop.text = ((animationRange.end as integer) / TicksPerFrame ) as String
|
|
)
|
|
)
|
|
if isEnabled then
|
|
(
|
|
roll.grp1.enabled = true
|
|
roll.add.enabled = true
|
|
roll.delete.enabled = true
|
|
roll.rangeType.enabled = true
|
|
roll.rangeUnit.enabled = true
|
|
roll.sampleBy.enabled = true
|
|
roll.anims.enabled = true
|
|
roll.animName.enabled = true
|
|
if roll.rangeType.state == 2 then
|
|
(
|
|
roll.start.enabled = true
|
|
roll.stop.enabled = true
|
|
)
|
|
else
|
|
(
|
|
roll.start.enabled = false
|
|
roll.stop.enabled = false
|
|
)
|
|
if roll.sampleBy.state == 2 then
|
|
(
|
|
roll.sampleSeconds.enabled = true
|
|
roll.sampleFrames.enabled = false
|
|
)
|
|
else
|
|
(
|
|
roll.sampleSeconds.enabled = false
|
|
roll.sampleFrames.enabled = true
|
|
)
|
|
)
|
|
else
|
|
(
|
|
roll.grp1.enabled = false
|
|
roll.add.enabled = false
|
|
roll.delete.enabled = false
|
|
roll.rangeType.enabled = false
|
|
roll.rangeUnit.enabled = false
|
|
roll.sampleBy.enabled = false
|
|
roll.sampleFrames.enabled = false
|
|
roll.sampleSeconds.enabled = false
|
|
roll.anims.enabled = false
|
|
roll.animName.enabled = false
|
|
roll.start.enabled = false
|
|
roll.stop.enabled = false
|
|
)
|
|
)
|
|
function rangeTypeChange roll =
|
|
(
|
|
if roll.rangeType.state == 1 then
|
|
(
|
|
if roll.rangeUnit.state == 2 then
|
|
(
|
|
roll.start.text = ((animationRange.start as float) / 4800 ) as String
|
|
roll.stop.text = ((animationRange.end as float) / 4800 ) as String
|
|
)
|
|
else
|
|
(
|
|
roll.start.text = ((animationRange.start as integer) / TicksPerFrame ) as String
|
|
roll.stop.text = ((animationRange.end as integer) / TicksPerFrame ) as String
|
|
)
|
|
roll.start.enabled = false
|
|
roll.stop.enabled = false
|
|
)
|
|
else
|
|
(
|
|
roll.start.enabled = true
|
|
roll.stop.enabled = true
|
|
)
|
|
)
|
|
function rangeUnitChange roll =
|
|
(
|
|
tempStart = roll.start.text as float
|
|
tempStop = roll.stop.text as float
|
|
if roll.rangeUnit.state == 2 then
|
|
(
|
|
roll.start.text = (tempStart * TicksPerFrame / 4800 ) as String
|
|
roll.stop.text = (tempStop * TicksPerFrame / 4800 ) as String
|
|
)
|
|
else
|
|
(
|
|
roll.start.text = ((tempStart * 4800 / TicksPerFrame + .5) as integer )as String
|
|
roll.stop.text = ((tempStop * 4800 / TicksPerFrame + .5) as integer ) as String
|
|
)
|
|
)
|
|
function sampleByChange roll =
|
|
(
|
|
if roll.sampleBy.state == 1 then
|
|
(
|
|
roll.sampleFrames.enabled = true
|
|
roll.sampleSeconds.enabled = false
|
|
)
|
|
else
|
|
(
|
|
roll.sampleFrames.enabled = false
|
|
roll.sampleSeconds.enabled = true
|
|
)
|
|
)
|
|
function getSkelAnims =
|
|
(
|
|
animNames = #()
|
|
numClips = FxOgreObject.get_numClips_skelClipList()
|
|
for i = 0 to (numClips - 1) do
|
|
(
|
|
name = FxOgreObject.get_name_skelClipList(i)
|
|
append animNames name
|
|
)
|
|
return animNames
|
|
)
|
|
function getBSAnims =
|
|
(
|
|
animNames = #()
|
|
numClips = FxOgreObject.get_numClips_BSClipList()
|
|
for i = 0 to (numClips - 1) do
|
|
(
|
|
name = FxOgreObject.get_name_BSClipList(i)
|
|
append animNames name
|
|
)
|
|
return animNames
|
|
)
|
|
function getVertAnims =
|
|
(
|
|
animNames = #()
|
|
numClips = FxOgreObject.get_numClips_vertClipList()
|
|
for i = 0 to (numClips - 1) do
|
|
(
|
|
name = FxOgreObject.get_name_vertClipList(i)
|
|
append animNames name
|
|
)
|
|
return animNames
|
|
)
|
|
rollout MeshRollout "Mesh" width:350 height:215
|
|
(
|
|
checkbox exportVBA "Include vertex bone assignments" pos:[9,47] width:221 height:18
|
|
editText meshFilename "" pos:[3,137] width:328 height:22 enabled:false
|
|
label meshFilenameLabel "Mesh Filename" pos:[7,120] width:218 height:17
|
|
checkbox exportMesh "Export Mesh" pos:[9,11] width:159 height:18
|
|
checkbox useSharedGeom "Use Shared Geometry" pos:[9,29] width:159 height:18 checked:false
|
|
checkbox exportVertNorm "Include vertex normals" pos:[9,66] width:221 height:18
|
|
checkbox exportVertCol "Include diffuse vertex colors" pos:[9,84] width:221 height:18
|
|
checkbox exportTexCoord "Include texture coordinates" pos:[9,102] width:221 height:18
|
|
checkbox buildEdges "Build edges list (for shadows)" pos:[10,162] width:221 height:18
|
|
checkbox buildTangents "Build tangent vectors" pos:[10,180] width:221 height:18
|
|
fn refresh =
|
|
(
|
|
exportMesh.checked = FxOgreObject.get_exportMesh()
|
|
useSharedGeom.checked = FxOgreObject.get_useSharedGeom();
|
|
exportVBA.checked = FxOgreObject.get_exportVBA();
|
|
exportVertNorm.checked = FxOgreObject.get_exportVertNorm();
|
|
exportVertCol.checked = FxOgreObject.get_exportVertCol();
|
|
buildEdges.checked = FxOgreObject.get_buildEdges();
|
|
buildTangents.checked = FxOgreObject.get_buildTangents();
|
|
MeshFilename.text = FxOgreObject.get_meshFilename()
|
|
if exportMesh.checked then
|
|
(
|
|
useSharedGeom.enabled = true
|
|
exportVBA.enabled = true
|
|
exportVertNorm.enabled = true
|
|
exportVertCol.enabled = true
|
|
exportTexCoord.enabled = true
|
|
meshFilename.enabled = true
|
|
meshFilenameLabel.enabled = true
|
|
buildEdges.enabled = true
|
|
buildTangents.enabled = true
|
|
)
|
|
else
|
|
(
|
|
useSharedGeom.enabled = false
|
|
exportVBA.enabled = false
|
|
exportVertNorm.enabled = false
|
|
exportVertCol.enabled = false
|
|
exportTexCoord.enabled = false
|
|
meshFilename.enabled = false
|
|
meshFilenameLabel.enabled = false
|
|
buildEdges.enabled = false
|
|
buildTangents.enabled = false
|
|
)
|
|
)
|
|
on MeshRollout open do
|
|
(
|
|
refresh()
|
|
)
|
|
on exportVBA changed state do
|
|
(
|
|
if exportVBA.checked then
|
|
FxOgreObject.set_exportVBA("on");
|
|
else
|
|
FxOgreObject.set_exportVBA("off");
|
|
)
|
|
on exportMesh changed state do
|
|
(
|
|
if exportMesh.checked then
|
|
(
|
|
FxOgreObject.set_exportMesh("on");
|
|
useSharedGeom.enabled = true
|
|
exportVBA.enabled = true
|
|
exportVertNorm.enabled = true
|
|
exportVertCol.enabled = true
|
|
exportTexCoord.enabled = true
|
|
meshFilename.enabled = true
|
|
meshFilenameLabel.enabled = true
|
|
buildEdges.enabled = true
|
|
buildTangents.enabled = true
|
|
)
|
|
else
|
|
(
|
|
FxOgreObject.set_exportMesh("off");
|
|
useSharedGeom.enabled = false
|
|
exportVBA.enabled = false
|
|
exportVertNorm.enabled = false
|
|
exportVertCol.enabled = false
|
|
exportTexCoord.enabled = false
|
|
meshFilename.enabled = false
|
|
meshFilenameLabel.enabled = false
|
|
buildEdges.enabled = false
|
|
buildTangents.enabled = false
|
|
)
|
|
)
|
|
on useSharedGeom changed state do
|
|
(
|
|
if useSharedGeom.checked then
|
|
FxOgreObject.set_useSharedGeom("on");
|
|
else
|
|
FxOgreObject.set_useSharedGeom("off");
|
|
)
|
|
on exportVertNorm changed state do
|
|
(
|
|
if exportVertNorm.checked then
|
|
FxOgreObject.set_exportVertNorm("on");
|
|
else
|
|
FxOgreObject.set_exportVertNorm("off");
|
|
)
|
|
on exportVertCol changed state do
|
|
(
|
|
if exportVertCol.checked then
|
|
FxOgreObject.set_exportVertCol("on");
|
|
else
|
|
FxOgreObject.set_exportVertCol("off");
|
|
)
|
|
on exportTexCoord changed state do
|
|
(
|
|
if exportTexCoord.checked then
|
|
FxOgreObject.set_exportTexCoord("on");
|
|
|
|
else
|
|
FxOgreObject.set_exportTexCoord("off");
|
|
)
|
|
on buildEdges changed state do
|
|
(
|
|
if buildEdges.checked then
|
|
FxOgreObject.set_buildEdges("on");
|
|
else
|
|
FxOgreObject.set_buildEdges("off");
|
|
)
|
|
on buildTangents changed state do
|
|
(
|
|
if buildTangents.checked then
|
|
FxOgreObject.set_buildTangents("on");
|
|
else
|
|
FxOgreObject.set_buildTangents("off");
|
|
)
|
|
)
|
|
rollout MaterialsRollout "Materials" width:350 height:168
|
|
(
|
|
editText materialFilename "" pos:[11,49] width:328 height:22 enabled:false
|
|
label MaterialFilenameLabel "Material Filename" pos:[11,32] width:218 height:17 enabled:false
|
|
checkbox exportMaterial "Export Materials to Ogre .material file" pos:[11,10] width:284 height:18
|
|
editText matPrefix "" pos:[15,117] width:328 height:22 enabled:false
|
|
label matPrefixLabel "Material name prefix" pos:[20,96] width:218 height:17 enabled:false
|
|
checkbox copyTextures "Copy texture files to output dir" pos:[11,146] width:271 height:21
|
|
fn refresh =
|
|
(
|
|
exportMaterial.checked = FxOgreObject.get_exportMaterial()
|
|
copyTextures.checked = FxOgreObject.get_copyTextures()
|
|
MaterialFilename.text = FxOgreObject.get_materialFilename()
|
|
matPrefix.text = FxOgreObject.get_matPrefix()
|
|
if exportMaterial.checked then
|
|
(
|
|
MaterialFilename.enabled = true
|
|
MaterialFilenameLabel.enabled = true
|
|
copyTextures.enabled = true
|
|
matPrefix.enabled = true
|
|
matPrefixLabel.enabled = true
|
|
)
|
|
else
|
|
(
|
|
MaterialFilename.enabled = false
|
|
matPrefix.enabled = false
|
|
MaterialFilenameLabel.enabled = false
|
|
matPrefixLabel.enabled = false
|
|
copyTextures.enabled = false
|
|
)
|
|
|
|
)
|
|
on MaterialsRollout open do
|
|
(
|
|
refresh()
|
|
)
|
|
on exportMaterial changed state do
|
|
(
|
|
if exportMaterial.checked then
|
|
(
|
|
FxOgreObject.set_exportMaterial("on");
|
|
materialFilename.enabled = true;
|
|
materialFilenameLabel.enabled = true;
|
|
matPrefix.enabled = true;
|
|
matPrefixLabel.enabled = true;
|
|
copyTextures.enabled = true;
|
|
)
|
|
else
|
|
(
|
|
FxOgreObject.set_exportMaterial("off");
|
|
materialFilename.enabled = false;
|
|
materialFilenameLabel.enabled = false;
|
|
matPrefix.enabled = false;
|
|
matPrefixLabel.enabled = false;
|
|
copyTextures.enabled = false;
|
|
)
|
|
)
|
|
on copyTextures changed state do
|
|
(
|
|
if copyTextures.checked then
|
|
FxOgreObject.set_copyTextures("on");
|
|
else
|
|
FxOgreObject.set_copyTextures("off");
|
|
)
|
|
)
|
|
rollout ScenesRollout "Scene" width:350 height:168
|
|
(
|
|
editText sceneFilename "" pos:[11,49] width:328 height:22 enabled:false
|
|
label SceneFilenameLabel "Scene Filename" pos:[11,32] width:218 height:17 enabled:false
|
|
checkbox exportScene "Export mesh, cameras and lights to .scene file" pos:[11,10] width:300 height:18
|
|
fn refresh =
|
|
(
|
|
exportScene.checked = FxOgreObject.get_exportScene()
|
|
SceneFilename.text = FxOgreObject.get_sceneFilename()
|
|
if exportScene.checked then
|
|
(
|
|
SceneFilename.enabled = true
|
|
SceneFilenameLabel.enabled = true
|
|
)
|
|
else
|
|
(
|
|
SceneFilename.enabled = false
|
|
SceneFilenameLabel.enabled = false
|
|
)
|
|
|
|
)
|
|
on ScenesRollout open do
|
|
(
|
|
refresh()
|
|
)
|
|
on exportScene changed state do
|
|
(
|
|
if exportScene.checked then
|
|
(
|
|
FxOgreObject.set_exportScene("on");
|
|
sceneFilename.enabled = true;
|
|
sceneFilenameLabel.enabled = true;
|
|
)
|
|
else
|
|
(
|
|
FxOgreObject.set_exportScene("off");
|
|
sceneFilename.enabled = false;
|
|
sceneFilenameLabel.enabled = false;
|
|
)
|
|
)
|
|
)
|
|
rollout SkeletonRollout "Skeleton" width:400 height:367
|
|
(
|
|
checkbox exportSkeleton "Export skeleton" pos:[11,10] width:335 height:18
|
|
editText skeletonFilename "" pos:[28,63] width:292 height:25
|
|
label skeletonFilenameLabel "Skeleton Filename" pos:[28,46] width:183 height:17
|
|
checkbox exportSkelAnims "Export animations (requires export of skeleton)" pos:[28,93] width:335 height:18
|
|
checkbox skelBB "Include animations in bounding box" pos:[47,112] width:335 height:18
|
|
checkbox normalizeScale "Normalize scale" pos:[28,28] width:335 height:18
|
|
groupBox grp1 "Animation Clips" pos:[5,142] width:388 height:201
|
|
button add "Add / Edit" pos:[13,309] width:73 height:25
|
|
button delete "Delete" pos:[12,279] width:73 height:25
|
|
radioButtons rangeType "Time Range" pos:[217,157] width:166 height:30 labels:#("Timer", "Start/End") columns:2
|
|
radioButtons rangeUnit "" pos:[211,246] width:175 height:16 labels:#("Frames", "Seconds") columns:2
|
|
editText start "start" pos:[243,194] width:90 height:25
|
|
editText stop "stop" pos:[243,218] width:90 height:25
|
|
radioButtons sampleBy "Sample by:" pos:[201,277] width:175 height:30 labels:#("Frames", "Seconds") columns:2
|
|
editText sampleFrames "" pos:[205,311] width:58 height:25
|
|
editText sampleSeconds "" pos:[291,311] width:61 height:25
|
|
listBox anims "" pos:[19,164] width:158 height:6
|
|
editText animName "" pos:[93,312] width:88 height:25
|
|
fn refresh =
|
|
(
|
|
exportSkeleton.checked = FxOgreObject.get_exportSkeleton()
|
|
exportSkelAnims.checked = FxOgreObject.get_exportSkelAnims()
|
|
normalizeScale.checked = FxOgreObject.get_normalizeScale()
|
|
skeletonFilename.text = FxOgreObject.get_skeletonFilename()
|
|
skelBB.checked = FxOgreObject.get_skelBB()
|
|
shouldEnableAnimations = false
|
|
if exportSkeleton.checked then
|
|
(
|
|
skeletonFilename.enabled = true
|
|
skeletonFilenameLabel.enabled = true
|
|
exportSkelAnims.enabled = true
|
|
normalizeScale.enabled = true
|
|
if exportSkelAnims.checked then
|
|
(
|
|
shouldEnableAnimations = true
|
|
skelBB.enabled = true
|
|
)
|
|
)
|
|
else
|
|
(
|
|
skeletonFilename.enabled = false
|
|
skeletonFilenameLabel.enabled = false
|
|
exportSkelAnims.enabled = false
|
|
skelBB.enabled = false
|
|
normalizeScale.enabled = false
|
|
)
|
|
anims.items = getSkelAnims()
|
|
animRefresh SkeletonRollout shouldEnableAnimations
|
|
)
|
|
on SkeletonRollout open do
|
|
(
|
|
refresh()
|
|
)
|
|
on exportSkeleton changed state do
|
|
(
|
|
shouldEnableAnimations = false
|
|
if exportSkeleton.checked then
|
|
(
|
|
FxOgreObject.set_exportSkeleton("on");
|
|
skeletonFilename.enabled = true
|
|
skeletonFilenameLabel.enabled = true
|
|
exportSkelAnims.enabled = true
|
|
normalizeScale.enabled = true
|
|
if exportSkelAnims.checked then
|
|
(
|
|
shouldEnableAnimations = true
|
|
skelBB.enabled = true
|
|
)
|
|
)
|
|
else
|
|
(
|
|
FxOgreObject.set_exportSkeleton("off");
|
|
skeletonFilename.enabled = false
|
|
skeletonFilenameLabel.enabled = false
|
|
exportSkelAnims.enabled = false
|
|
normalizeScale.enabled = false
|
|
skelBB.enabled = false
|
|
)
|
|
animRefresh SkeletonRollout shouldEnableAnimations
|
|
)
|
|
on exportSkelAnims changed state do
|
|
(
|
|
if exportSkelAnims.checked then
|
|
(
|
|
FxOgreObject.set_exportSkelAnims("on");
|
|
skelBB.enabled = true
|
|
animRefresh SkeletonRollout true
|
|
)
|
|
else
|
|
(
|
|
skelBB.enabled = false
|
|
FxOgreObject.set_exportSkelAnims("off");
|
|
animRefresh SkeletonRollout false
|
|
)
|
|
)
|
|
on skelBB changed state do
|
|
(
|
|
if skelBB.checked then
|
|
FxOgreObject.set_skelBB("on");
|
|
else
|
|
FxOgreObject.set_skelBB("off");
|
|
)
|
|
on normalizeScale changed state do
|
|
(
|
|
if normalizeScale.checked then
|
|
FxOgreObject.set_normalizeScale("on");
|
|
else
|
|
FxOgreObject.set_normalizeScale("off");
|
|
)
|
|
on add pressed do
|
|
(
|
|
startTemp = start.text as float
|
|
stopTemp = stop.text as float
|
|
rateTemp = sampleSeconds.text as float
|
|
if rangeUnit.state == 1 then
|
|
(
|
|
startTemp = startTemp / frameRate
|
|
stopTemp = stopTemp / frameRate
|
|
)
|
|
if sampleBy.state == 1 then
|
|
(
|
|
rateTemp = (sampleFrames.text as float) / frameRate
|
|
)
|
|
FxOgreObject.add_skelClipList animName.text startTemp stopTemp rateTemp
|
|
anims.items = getSkelAnims()
|
|
anims.selection = 0
|
|
animName.text = ""
|
|
)
|
|
on delete pressed do
|
|
(
|
|
newIndex = anims.selection;
|
|
if newIndex == FxOgreObject.get_numClips_skelClipList() then
|
|
if newIndex > 0 then
|
|
newIndex = newIndex - 1
|
|
FxOgreObject.remove_skelClipList (anims.selection - 1)
|
|
anims.items = getSkelAnims()
|
|
anims.selection = 0
|
|
animName.text = ""
|
|
)
|
|
on rangeType changed stat do
|
|
(
|
|
rangeTypeChange SkeletonRollout
|
|
)
|
|
on rangeUnit changed stat do
|
|
(
|
|
rangeUnitChange SkeletonRollout
|
|
)
|
|
on sampleBy changed stat do
|
|
(
|
|
sampleByChange SkeletonRollout
|
|
)
|
|
on anims selected sel do
|
|
(
|
|
sampleBy.state = 1
|
|
rangeUnit.state = 2
|
|
rangeType.state = 2
|
|
start.enabled = true
|
|
stop.enabled = true
|
|
start.text = (FxOgreObject.get_start_skelClipList (anims.selection - 1) ) as String
|
|
stop.text = (FxOgreObject.get_stop_skelClipList (anims.selection - 1) ) as String
|
|
sampleSeconds.text = (FxOgreObject.get_rate_skelClipList (anims.selection - 1) ) as String
|
|
sampleFrames.text = ((FxOgreObject.get_rate_skelClipList (anims.selection - 1) * frameRate ) as Integer ) as String
|
|
animName.text = anims.selected
|
|
)
|
|
)
|
|
rollout BlendShapesRollout "Blend Shapes" width:350 height:130
|
|
(
|
|
checkbox exportBlendShapes "Export blend shapes (to mesh file)" pos:[10,10] width:335 height:18
|
|
checkbox exportBSAnims "Export animations" pos:[47,50] width:335 height:18
|
|
checkbox bsBB "Include blendshapes in bounding box" pos:[10,31] width:335 height:18
|
|
groupBox grp1 "Animation Clips" pos:[5,80] width:388 height:201
|
|
button add "Add / Edit" pos:[13,247] width:73 height:25
|
|
button delete "Delete" pos:[12,217] width:73 height:25
|
|
radioButtons rangeType "Time Range" pos:[217,95] width:166 height:30 labels:#("Timer", "Start/End") columns:2
|
|
radioButtons rangeUnit "" pos:[211,184] width:175 height:16 labels:#("Frames", "Seconds") columns:2
|
|
editText start "start" pos:[243,132] width:90 height:25
|
|
editText stop "stop" pos:[243,156] width:90 height:25
|
|
radioButtons sampleBy "Sample by:" pos:[201,215] width:175 height:30 labels:#("Frames", "Seconds") columns:2
|
|
editText sampleFrames "" pos:[205,250] width:60 height:25
|
|
editText sampleSeconds "" pos:[291,250] width:60 height:25
|
|
listBox anims "" pos:[19,102] width:158 height:6
|
|
editText animName "" pos:[93,250] width:88 height:25
|
|
fn refresh =
|
|
(
|
|
exportBlendShapes.checked = FxOgreObject.get_exportBlendShapes()
|
|
exportBSAnims.checked = FxOgreObject.get_exportBSAnims()
|
|
bsBB.checked = FxOgreObject.get_bsBB()
|
|
shouldEnableAnimations = false
|
|
if exportBlendShapes.checked then
|
|
(
|
|
exportBSAnims.enabled = true
|
|
bsBB.enabled = true
|
|
if exportBSAnims.checked then
|
|
shouldEnableAnimations = true
|
|
)
|
|
else
|
|
(
|
|
exportBSAnims.enabled = false
|
|
bsBB.enabled = false
|
|
)
|
|
anims.items = getBSAnims()
|
|
animRefresh BlendShapesRollout shouldEnableAnimations
|
|
)
|
|
on BlendShapesRollout open do
|
|
(
|
|
refresh()
|
|
)
|
|
on exportBlendShapes changed state do
|
|
(
|
|
shouldEnableAnimations = false
|
|
if exportBlendShapes.checked then
|
|
(
|
|
FxOgreObject.set_exportBlendShapes("on");
|
|
exportBSAnims.enabled = true
|
|
bsBB.enabled = true
|
|
if exportBSAnims.checked then
|
|
shouldEnableAnimations = true
|
|
)
|
|
else
|
|
(
|
|
FxOgreObject.set_exportBlendShapes("off");
|
|
exportBSAnims.enabled = false
|
|
bsBB.enabled = false
|
|
)
|
|
animRefresh BlendShapesRollout shouldEnableAnimations
|
|
)
|
|
on exportBSAnims changed state do
|
|
(
|
|
if exportBSAnims.checked then
|
|
(
|
|
FxOgreObject.set_exportBSAnims("on");
|
|
animRefresh BlendShapesRollout true
|
|
)
|
|
else
|
|
(
|
|
FxOgreObject.set_exportBSAnims("off");
|
|
animRefresh BlendShapesRollout false
|
|
)
|
|
)
|
|
on bsBB changed state do
|
|
(
|
|
if bsBB.checked then
|
|
FxOgreObject.set_bsBB("on");
|
|
else
|
|
FxOgreObject.set_bsBB("off");
|
|
)
|
|
on add pressed do
|
|
(
|
|
startTemp = start.text as float
|
|
stopTemp = stop.text as float
|
|
rateTemp = sampleSeconds.text as float
|
|
if rangeUnit.state == 1 then
|
|
(
|
|
startTemp = startTemp / frameRate
|
|
stopTemp = stopTemp / frameRate
|
|
)
|
|
if sampleBy.state == 1 then
|
|
(
|
|
rateTemp = (sampleFrames.text as float) / frameRate
|
|
)
|
|
FxOgreObject.add_BSClipList animName.text startTemp stopTemp rateTemp
|
|
anims.items = getBSAnims()
|
|
anims.selection = 0
|
|
animName.text = ""
|
|
)
|
|
on delete pressed do
|
|
(
|
|
newIndex = anims.selection;
|
|
if newIndex == FxOgreObject.get_numClips_BSClipList() then
|
|
if newIndex > 0 then
|
|
newIndex = newIndex - 1
|
|
FxOgreObject.remove_BSClipList (anims.selection - 1)
|
|
anims.items = getBSAnims()
|
|
anims.selection = 0
|
|
animName.text = ""
|
|
)
|
|
on rangeType changed stat do
|
|
(
|
|
rangeTypeChange BlendShapesRollout
|
|
)
|
|
on rangeUnit changed stat do
|
|
(
|
|
rangeUnitChange BlendShapesRollout
|
|
)
|
|
on sampleBy changed stat do
|
|
(
|
|
sampleByChange BlendShapesRollout
|
|
)
|
|
on anims selected sel do
|
|
(
|
|
sampleBy.state = 1
|
|
rangeUnit.state = 2
|
|
rangeType.state = 2
|
|
start.enabled = true
|
|
stop.enabled = true
|
|
start.text = (FxOgreObject.get_start_BSClipList (anims.selection - 1) ) as String
|
|
stop.text = (FxOgreObject.get_stop_BSClipList (anims.selection - 1) ) as String
|
|
sampleSeconds.text = (FxOgreObject.get_rate_BSClipList (anims.selection - 1) ) as String
|
|
sampleFrames.text = ((FxOgreObject.get_rate_BSClipList (anims.selection - 1) * frameRate ) as Integer ) as String
|
|
animName.text = anims.selected
|
|
)
|
|
)
|
|
rollout VertAnimsRollout "Vertex Animations" width:350 height:130
|
|
(
|
|
checkbox exportVertAnims "Export vertex animations to mesh file" pos:[10,10] width:340 height:18
|
|
checkbox vertBB "Include animations in bounding box" pos:[28,31] width:335 height:18
|
|
groupBox grp1 "Animation Clips" pos:[5,60] width:388 height:201
|
|
button add "Add / Edit" pos:[13,227] width:73 height:25
|
|
button delete "Delete" pos:[12,197] width:73 height:25
|
|
radioButtons rangeType "Time Range" pos:[217,75] width:166 height:30 labels:#("Timer", "Start/End") columns:2
|
|
radioButtons rangeUnit "" pos:[211,164] width:175 height:16 labels:#("Frames", "Seconds") columns:2
|
|
editText start "start" pos:[243,112] width:90 height:25
|
|
editText stop "stop" pos:[243,136] width:90 height:25
|
|
radioButtons sampleBy "Sample by:" pos:[201,195] width:175 height:30 labels:#("Frames", "Seconds") columns:2
|
|
editText sampleFrames "" pos:[205,230] width:60 height:25
|
|
editText sampleSeconds "" pos:[291,230] width:60 height:25
|
|
listBox anims "" pos:[19,82] width:158 height:6
|
|
editText animName "" pos:[93,230] width:88 height:25
|
|
fn refresh =
|
|
(
|
|
exportVertAnims.checked = FxOgreObject.get_exportVertAnims()
|
|
vertBB.checked = FxOgreObject.get_vertBB()
|
|
shouldEnableAnimations = false
|
|
if exportVertAnims.checked then
|
|
(
|
|
shouldEnableAnimations = true
|
|
vertBB.enabled = true
|
|
)
|
|
else
|
|
(
|
|
vertBB.enabled = false
|
|
)
|
|
anims.items = getVertAnims()
|
|
animRefresh VertAnimsRollout shouldEnableAnimations
|
|
)
|
|
on VertAnimsRollout open do
|
|
(
|
|
refresh()
|
|
)
|
|
on exportVertAnims changed state do
|
|
(
|
|
if exportVertAnims.checked then
|
|
(
|
|
FxOgreObject.set_exportVertAnims("on");
|
|
vertBB.enabled = true
|
|
animRefresh VertAnimsRollout true
|
|
)
|
|
else
|
|
(
|
|
vertBB.enabled = false
|
|
FxOgreObject.set_exportVertAnims("off");
|
|
animRefresh VertAnimsRollout false
|
|
)
|
|
)
|
|
on vertBB changed state do
|
|
(
|
|
if vertBB.checked then
|
|
FxOgreObject.set_vertBB("on");
|
|
else
|
|
FxOgreObject.set_vertBB("off");
|
|
)
|
|
on add pressed do
|
|
(
|
|
startTemp = start.text as float
|
|
stopTemp = stop.text as float
|
|
rateTemp = sampleSeconds.text as float
|
|
if rangeUnit.state == 1 then
|
|
(
|
|
startTemp = startTemp / frameRate
|
|
stopTemp = stopTemp / frameRate
|
|
)
|
|
if sampleBy.state == 1 then
|
|
(
|
|
rateTemp = (sampleFrames.text as float) / frameRate
|
|
)
|
|
FxOgreObject.add_vertClipList animName.text startTemp stopTemp rateTemp
|
|
anims.items = getVertAnims()
|
|
anims.selection = 0
|
|
animName.text = ""
|
|
)
|
|
on delete pressed do
|
|
(
|
|
newIndex = anims.selection;
|
|
if newIndex == FxOgreObject.get_numClips_vertClipList() then
|
|
if newIndex > 0 then
|
|
newIndex = newIndex - 1
|
|
FxOgreObject.remove_vertClipList (anims.selection - 1)
|
|
anims.items = getVertAnims()
|
|
anims.selection = 0
|
|
animName.text = ""
|
|
)
|
|
on rangeType changed stat do
|
|
(
|
|
rangeTypeChange VertAnimsRollout
|
|
)
|
|
on rangeUnit changed stat do
|
|
(
|
|
rangeUnitChange VertAnimsRollout
|
|
)
|
|
on sampleBy changed stat do
|
|
(
|
|
sampleByChange VertAnimsRollout
|
|
)
|
|
on anims selected sel do
|
|
(
|
|
sampleBy.state = 1
|
|
rangeUnit.state = 2
|
|
rangeType.state = 2
|
|
start.enabled = true
|
|
stop.enabled = true
|
|
start.text = (FxOgreObject.get_start_vertClipList (anims.selection - 1) ) as String
|
|
stop.text = (FxOgreObject.get_stop_vertClipList (anims.selection - 1) ) as String
|
|
sampleSeconds.text = (FxOgreObject.get_rate_vertClipList (anims.selection - 1) ) as String
|
|
sampleFrames.text = ((FxOgreObject.get_rate_vertClipList (anims.selection - 1) * frameRate ) as Integer ) as String
|
|
)
|
|
)
|
|
rollout CommonParametersRollout "Common Parameters" width:350 height:145
|
|
(
|
|
radioButtons exportAll "Export:" pos:[13,10] width:75 height:46 labels:#("all ", "selected") default:1 columns:1
|
|
radioButtons exportWorldCoords "Coordinate Space:" pos:[129,10] width:60 height:46 labels:#("world", "object") default:1 columns:1
|
|
radioButtons yUpAxis "UpAxis:" pos:[255,10] width:60 height:46 labels:#("Y", "Z") default:1 columns:1
|
|
editText lum "Scale All by: " pos:[18,64] width:275 height:21
|
|
dropDownList animType "" pos:[127,90] width:166 height:24 items:#("Skeleton / Blendshape", "Vertex")
|
|
label animTypeLabel "Animation Type:" pos:[16,90] width:101 height:20
|
|
fn refresh =
|
|
(
|
|
if FxOgreObject.get_exportWorldCoords() then
|
|
exportWorldCoords.state = 1
|
|
else
|
|
exportWorldCoords.state = 2
|
|
if FxOgreObject.get_yUpAxis() then
|
|
yUpAxis.state = 1
|
|
else
|
|
yUpAxis.state = 2
|
|
if FxOgreObject.get_exportAll() then
|
|
exportAll.state = 1
|
|
else
|
|
exportAll.state = 2
|
|
lum.text = FxOgreObject.get_lum() as string
|
|
if animType.text == "Vertex" then
|
|
(
|
|
FxOgreObject.set_exportSkeleton "off"
|
|
FxOgreObject.set_exportBlendShapes "off"
|
|
VertAnimsRollout.exportVertAnims.enabled = true
|
|
SkeletonRollout.exportSkeleton.enabled = false
|
|
BlendShapesRollout.exportBlendShapes.enabled = false
|
|
)
|
|
else
|
|
(
|
|
FxOgreObject.set_exportVertAnims "off"
|
|
VertAnimsRollout.exportVertAnims.enabled = false
|
|
SkeletonRollout.exportSkeleton.enabled = true
|
|
BlendShapesRollout.exportBlendShapes.enabled = true
|
|
)
|
|
SkeletonRollout.refresh()
|
|
BlendShapesRollout.refresh()
|
|
VertAnimsRollout.refresh()
|
|
)
|
|
on CommonParametersRollout open do
|
|
(
|
|
refresh()
|
|
)
|
|
on exportAll changed stat do
|
|
(
|
|
if exportAll.state == 1 then
|
|
FxOgreObject.set_exportAll("on")
|
|
else
|
|
FxOgreObject.set_exportAll("off")
|
|
)
|
|
on exportWorldCoords changed stat do
|
|
(
|
|
if exportWorldCoords.state == 1 then
|
|
FxOgreObject.set_exportWorldCoords("on")
|
|
else
|
|
FxOgreObject.set_exportWorldCoords("off")
|
|
)
|
|
on yUpAxis changed stat do
|
|
(
|
|
if yUpAxis.state == 1 then
|
|
FxOgreObject.set_yUpAxis("on")
|
|
else
|
|
FxOgreObject.set_yUpAxis("off")
|
|
)
|
|
on animType selected stat do
|
|
(
|
|
refresh()
|
|
)
|
|
on lum entered text do
|
|
FxOgreObject.set_lum(lum.text as float);
|
|
)
|
|
function refreshControls =
|
|
(
|
|
CommonParametersRollout.refresh()
|
|
MeshRollout.refresh()
|
|
MaterialsRollout.refresh()
|
|
SkeletonRollout.refresh()
|
|
BlendShapesRollout.refresh()
|
|
VertAnimsRollout.refresh()
|
|
ScenesRollout.refresh()
|
|
)
|
|
rollout MainRollout "Main"
|
|
(
|
|
button defaultButton "Default" pos:[20,10] width:110 height:25
|
|
button refreshButton "Refresh" pos:[140,10] width:110 height:25
|
|
button clearPathButton "Clear Paths" pos:[260,10] width:110 height:25
|
|
button exportButton "Export" pos:[140,40] width:110 height:25
|
|
on exportButton pressed do
|
|
(
|
|
exportString = MeshRollout.meshFilename.text
|
|
|
|
bIsLegal = pathConfig.isLegalPath exportString
|
|
if exportString == "" then
|
|
bIsLegal = false
|
|
if bIsLegal then
|
|
FxOgreObject.fxogremaxexport()
|
|
else
|
|
(
|
|
exportString = getSaveFileName caption:"Save Ogre .MESH File" types:"Mesh(*.MESH)|*.MESH|"
|
|
if exportString != undefined then
|
|
(
|
|
FxOgreObject.set_meshFilename exportString
|
|
FxOgreObject.fxogremaxexport()
|
|
)
|
|
)
|
|
refreshControls()
|
|
)
|
|
on clearPathButton pressed do
|
|
(
|
|
FxOgreObject.set_meshFilename ""
|
|
FxOgreObject.set_skeletonFilename ""
|
|
FxOgreObject.set_materialFilename ""
|
|
FxOgreObject.set_animFilename ""
|
|
FxOgreObject.set_camerasFilename ""
|
|
FxOgreObject.set_particlesFilename ""
|
|
FxOgreObject.set_matPrefix ""
|
|
FxOgreObject.set_texOutputDir ""
|
|
FxOgreObject.set_sceneFilename ""
|
|
refreshControls()
|
|
)
|
|
on refreshButton pressed do
|
|
refreshControls()
|
|
on defaultButton pressed do
|
|
(
|
|
FxOgreObject.reset_params()
|
|
refreshControls()
|
|
)
|
|
|
|
)
|
|
addrollout MainRollout FxOgreMaxExporterDialog
|
|
addrollout CommonParametersRollout FxOgreMaxExporterDialog
|
|
addrollout MeshRollout FxOgreMaxExporterDialog
|
|
addrollout MaterialsRollout FxOgreMaxExporterDialog
|
|
addrollout ScenesRollout FxOgreMaxExporterDialog
|
|
addrollout SkeletonRollout FxOgreMaxExporterDialog
|
|
addrollout BlendShapesRollout FxOgreMaxExporterDialog
|
|
addrollout VertAnimsRollout FxOgreMaxExporterDialog
|