From a77f0c9ee95b808dc6e24b473c9c560c45fbc0f7 Mon Sep 17 00:00:00 2001 From: DavidSM64 Date: Tue, 30 Jan 2018 09:36:16 -0600 Subject: [PATCH] v0.2 (Beta build 2) Beta build 2 changelog: * Finished script dumps window * Added new menu to select behavior for object (Edit -> Behavior) * You can now change the names of object combos (Edit -> Object Combo Name) * Added a filter box in the select item window. (Idea from aglab2, but I used a simpler approach) * Texture parsing should be a lot faster now * Fixed RGBA32 texture error * Other minor bug fixes --- Quad64.csproj | 39 +- data/BehaviorNames.json | 2076 ++++ data/ObjectCombos_EU.json | 2 +- data/ObjectCombos_JP.json | 2 +- data/ObjectCombos_JS.json | 2 +- data/ObjectCombos_NA.json | 2 +- src/COLLADA/DumpModel.cs | 446 + src/COLLADA/collada_schema_1_4.cs | 9977 +++++++++++++++++ src/Forms/MainForm.Designer.cs | 139 +- src/Forms/MainForm.cs | 146 +- src/Forms/RenameObjectCombo.Designer.cs | 90 + src/Forms/RenameObjectCombo.cs | 44 + src/Forms/RenameObjectCombo.resx | 635 ++ src/Forms/ScriptDumps.Designer.cs | 267 +- src/Forms/ScriptDumps.cs | 98 +- .../ScriptDumps_Tabs/Level/LevelTab_Fast3D.cs | 2 - .../Objects/ObjectsTab_Behavior.cs | 182 + .../Objects/ObjectsTab_Fast3D.cs | 36 + .../Objects/ObjectsTab_GeoLayout.cs | 191 + src/Forms/SelectBehavior.Designer.cs | 143 + src/Forms/SelectBehavior.cs | 126 + src/Forms/SelectBehavior.resx | 635 ++ src/Forms/SelectComboPreset.Designer.cs | 33 +- src/Forms/SelectComboPreset.cs | 118 +- src/Forms/TextureEditor.cs | 4 +- .../TabEditOtherTextures.cs | 7 +- src/Globals.cs | 38 +- src/JSON/BehaviorNameEntry.cs | 27 + src/JSON/BehaviorNameFile.cs | 81 + src/JSON/ObjectComboEntry.cs | 7 +- src/LevelInfo/Level.cs | 52 +- src/LevelInfo/Object3D.cs | 60 +- src/ROM.cs | 20 +- src/Scripts/BehaviorScripts.cs | 267 + src/Scripts/CollisionMap.cs | 18 +- src/Scripts/Fast3DScripts.cs | 30 +- src/Scripts/GeoScripts.cs | 4 +- src/Scripts/LevelScripts.cs | 112 +- src/Scripts/ModelBuilder.cs | 27 +- src/Scripts/TextureFormats.cs | 180 +- src/Viewer/ContentPipe.cs | 5 +- src/Viewer/Model3D.cs | 94 +- 42 files changed, 16218 insertions(+), 246 deletions(-) create mode 100644 data/BehaviorNames.json create mode 100644 src/COLLADA/DumpModel.cs create mode 100644 src/COLLADA/collada_schema_1_4.cs create mode 100644 src/Forms/RenameObjectCombo.Designer.cs create mode 100644 src/Forms/RenameObjectCombo.cs create mode 100644 src/Forms/RenameObjectCombo.resx create mode 100644 src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_Behavior.cs create mode 100644 src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_Fast3D.cs create mode 100644 src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_GeoLayout.cs create mode 100644 src/Forms/SelectBehavior.Designer.cs create mode 100644 src/Forms/SelectBehavior.cs create mode 100644 src/Forms/SelectBehavior.resx create mode 100644 src/JSON/BehaviorNameEntry.cs create mode 100644 src/JSON/BehaviorNameFile.cs create mode 100644 src/Scripts/BehaviorScripts.cs diff --git a/Quad64.csproj b/Quad64.csproj index 5e5bead..1ecbc06 100644 --- a/Quad64.csproj +++ b/Quad64.csproj @@ -33,9 +33,9 @@ AnyCPU true full - false + true bin\Debug\ - TRACE;DEBUG + DEBUG;TRACE prompt 4 true @@ -79,10 +79,18 @@ + + Component + + Form + + + RenameObjectCombo.cs + Form @@ -104,6 +112,21 @@ Form + + Form + + + Form + + + Form + + + Form + + + SelectBehavior.cs + Form @@ -143,7 +166,9 @@ Form + + @@ -158,6 +183,7 @@ + @@ -195,12 +221,18 @@ True + + RenameObjectCombo.cs + ROMInfoForm.cs ScriptDumps.cs + + SelectBehavior.cs + SelectComboPreset.cs @@ -213,6 +245,9 @@ TextureEditor.cs + + PreserveNewest + PreserveNewest diff --git a/data/BehaviorNames.json b/data/BehaviorNames.json new file mode 100644 index 0000000..e98c053 --- /dev/null +++ b/data/BehaviorNames.json @@ -0,0 +1,2076 @@ +{ + "BehaviorNames": [ + { + "Name": "Sliding star door", + "Behavior": "0x13000000" + }, + { + "Name": "Mr. I (grouped object)", + "Behavior": "0x13000054" + }, + { + "Name": "Mr. I pupil", + "Behavior": "0x1300008C" + }, + { + "Name": "Mr. I particle", + "Behavior": "0x130000AC" + }, + { + "Name": "Piranha Plant particle", + "Behavior": "0x130000F8" + }, + { + "Name": "Giant Pole (Whomp's Fortress)", + "Behavior": "0x13000118" + }, + { + "Name": "Pole (scalable by parameter 2)", + "Behavior": "0x13000144" + }, + { + "Name": "Disable if behavior 0x13000194 is pounded", + "Behavior": "0x13000174" + }, + { + "Name": "Explode when pounded, disable behavior 0x13000174", + "Behavior": "0x13000194" + }, + { + "Name": "Cap Switch (grouped object)", + "Behavior": "0x130001CC" + }, + { + "Name": "King Bob-omb", + "Behavior": "0x130001F4" + }, + { + "Name": "Anchor Mario (King Bob-omb)", + "Behavior": "0x13000254" + }, + { + "Name": "Bubble (Mario)", + "Behavior": "0x130002B8" + }, + { + "Name": "Small water wave (Mario)", + "Behavior": "0x13000338" + }, + { + "Name": "Bubbles spawn (Mario)", + "Behavior": "0x13000398" + }, + { + "Name": "Water particles", + "Behavior": "0x13000400" + }, + { + "Name": "Water waves", + "Behavior": "0x13000428" + }, + { + "Name": "Snow particle", + "Behavior": "0x13000444" + }, + { + "Name": "Snow particle", + "Behavior": "0x1300046C" + }, + { + "Name": "Fish group (in Aquarium)", + "Behavior": "0x13000494" + }, + { + "Name": "Open cannon (grouped object)", + "Behavior": "0x130004A8" + }, + { + "Name": "Cannon barrel", + "Behavior": "0x130004E4" + }, + { + "Name": "Cannon base", + "Behavior": "0x13000500" + }, + { + "Name": "Chuckya", + "Behavior": "0x13000528" + }, + { + "Name": "Anchor Mario (Chuckya)", + "Behavior": "0x13000584" + }, + { + "Name": "Rotating platform (param1 = speed, param2 = collision", + "Behavior": "0x130005B4" + }, + { + "Name": "Solid object (Whomp's Fortress tower)", + "Behavior": "0x130005D8" + }, + { + "Name": "Solid object (Bullet Bill cannon collision)", + "Behavior": "0x13000600" + }, + { + "Name": "Breakable Wall Corner (plays \"correct solution\" track", + "Behavior": "0x13000624" + }, + { + "Name": "Breakable Wall Corner", + "Behavior": "0x13000638" + }, + { + "Name": "Wall corner in Whomp's Fortress", + "Behavior": "0x13000644" + }, + { + "Name": "Kickable Giant Wooden Board", + "Behavior": "0x1300066C" + }, + { + "Name": "Explodes when punched (Whomp's Fortress tower door)", + "Behavior": "0x130006A4" + }, + { + "Name": "Rotating counter-clockwise (bridge in Whomp's Fortress)", + "Behavior": "0x130006D8" + }, + { + "Name": "Rotating counter-clockwise (bridge in Whomp's Fortress)", + "Behavior": "0x130006E0" + }, + { + "Name": "Koopa Shell", + "Behavior": "0x13000708" + }, + { + "Name": "Tall Tall Slide Exit Podium", + "Behavior": "0x13000720" + }, + { + "Name": "Warp (Fading)", + "Behavior": "0x1300075C" + }, + { + "Name": "Warp Hole", + "Behavior": "0x13000780" + }, + { + "Name": "Warp Pipe", + "Behavior": "0x130007A0" + }, + { + "Name": "White puffs spawn (from ground-pound, clamshells etc.)", + "Behavior": "0x130007DC" + }, + { + "Name": "Spawned star (no coordinates)", + "Behavior": "0x130007F8" + }, + { + "Name": "Sparkles (from stars, etc.)", + "Behavior": "0x13000814" + }, + { + "Name": "Blue coin from Mr.I", + "Behavior": "0x13000830" + }, + { + "Name": "Coin inside of Boo", + "Behavior": "0x13000888" + }, + { + "Name": "Coin group (param2 = formation type)", + "Behavior": "0x130008EC" + }, + { + "Name": "Coin (type 1)", + "Behavior": "0x1300090C" + }, + { + "Name": "Coin (type 2)", + "Behavior": "0x1300091C" + }, + { + "Name": "Coin (type 3)", + "Behavior": "0x13000920" + }, + { + "Name": "Three coins spawn", + "Behavior": "0x13000964" + }, + { + "Name": "Peach (awakening)", + "Behavior": "0x1300097C" + }, + { + "Name": "Ten coins spawn", + "Behavior": "0x13000984" + }, + { + "Name": "One coin spawn", + "Behavior": "0x130009A4" + }, + { + "Name": "Sparkles (from all types of coins)", + "Behavior": "0x130009E0" + }, + { + "Name": "Sparkles (from golden coins)", + "Behavior": "0x13000A14" + }, + { + "Name": "Tiny star particle (when Mario bumps a wall)", + "Behavior": "0x13000A34" + }, + { + "Name": "Tiny star particle spawn (when Mario bumps a wall)", + "Behavior": "0x13000A54" + }, + { + "Name": "Tiny star particle (from ground pound)", + "Behavior": "0x13000A78" + }, + { + "Name": "Tiny star particle spawn (from ground pound)", + "Behavior": "0x13000A98" + }, + { + "Name": "Tiny triangle (punching something)", + "Behavior": "0x13000ABC" + }, + { + "Name": "Tiny triangle spawn (punching something)", + "Behavior": "0x13000AD8" + }, + { + "Name": "Door", + "Behavior": "0x13000AFC" + }, + { + "Name": "Door", + "Behavior": "0x13000B0C" + }, + { + "Name": "Door (warping)", + "Behavior": "0x13000B14" + }, + { + "Name": "Grindel", + "Behavior": "0x13000B58" + }, + { + "Name": "Twhomp 2", + "Behavior": "0x13000B8C" + }, + { + "Name": "Twhomp", + "Behavior": "0x13000BC8" + }, + { + "Name": "Used by all tumbling bridge platforms", + "Behavior": "0x13000C04" + }, + { + "Name": "Tumbling platform group (Whomp's Fortress)", + "Behavior": "0x13000C28" + }, + { + "Name": "Tumbling platform group (Big Boo's Haunt)", + "Behavior": "0x13000C44" + }, + { + "Name": "Tumbling platform", + "Behavior": "0x13000C64" + }, + { + "Name": "Flame (static)", + "Behavior": "0x13000C84" + }, + { + "Name": "Another elevator (re-check)", + "Behavior": "0x13000CC8" + }, + { + "Name": "Elevator platform in RR (param2 = track#)", + "Behavior": "0x13000CFC" + }, + { + "Name": "Elevator platform in HMC (param2 = track#)", + "Behavior": "0x13000D30" + }, + { + "Name": "White puff ??", + "Behavior": "0x13000D6C" + }, + { + "Name": "Spawn behavior 0x13000D6C", + "Behavior": "0x13000D98" + }, + { + "Name": "Particles (stars, triangles, dirt, etc.)", + "Behavior": "0x13000DB4" + }, + { + "Name": "Animated water mist (Castle Grounds waterfall)", + "Behavior": "0x13000DD8" + }, + { + "Name": "Unknown", + "Behavior": "0x13000DFC" + }, + { + "Name": "White puffs (from ground pound)", + "Behavior": "0x13000E24" + }, + { + "Name": "Sand (from ground)", + "Behavior": "0x13000E3C" + }, + { + "Name": "Snow (from ground)", + "Behavior": "0x13000E58" + }, + { + "Name": "Wind (from collision mapped areas)", + "Behavior": "0x13000E70" + }, + { + "Name": "Toad at end", + "Behavior": "0x13000E88" + }, + { + "Name": "Peach at end", + "Behavior": "0x13000EAC" + }, + { + "Name": "Unknown", + "Behavior": "0x13000ED0" + }, + { + "Name": "Ukiki the monkey", + "Behavior": "0x13000F08" + }, + { + "Name": "Little Cage", + "Behavior": "0x13000F48" + }, + { + "Name": "Sinking Platforms (Bowser's Fire Sea)", + "Behavior": "0x13000F9C" + }, + { + "Name": "Sinking Cage Platform (Bowser's Fire Sea)", + "Behavior": "0x13000FC8" + }, + { + "Name": "Moving pole (Dire, Dire Docks)", + "Behavior": "0x13001000" + }, + { + "Name": "Tilting Inverted Pyramid", + "Behavior": "0x13001030" + }, + { + "Name": "Squishable Platform", + "Behavior": "0x13001064" + }, + { + "Name": "Unknown", + "Behavior": "0x13001098" + }, + { + "Name": "Flame moving back and forth (unused)", + "Behavior": "0x130010B8" + }, + { + "Name": "Rotating platform with fire (Rainbow Ride) (param2 = red/blue flame)", + "Behavior": "0x130010D8" + }, + { + "Name": "Flame Thrower", + "Behavior": "0x13001108" + }, + { + "Name": "Flame (from flame thrower)", + "Behavior": "0x13001124" + }, + { + "Name": "Flame (jumping fireball)", + "Behavior": "0x13001168" + }, + { + "Name": "Flame (from jumping fireballs)", + "Behavior": "0x13001184" + }, + { + "Name": "Bowser shock wave", + "Behavior": "0x130011D0" + }, + { + "Name": "Flame (from Mario)", + "Behavior": "0x130011EC" + }, + { + "Name": "Black smoke (from Mario)", + "Behavior": "0x13001214" + }, + { + "Name": "Black smoke (from Bowser flames)", + "Behavior": "0x13001254" + }, + { + "Name": "Black smoke (moving upward)", + "Behavior": "0x1300127C" + }, + { + "Name": "Coins", + "Behavior": "0x13001298" + }, + { + "Name": "Spindrift", + "Behavior": "0x130012B4" + }, + { + "Name": "Tower Platform Group (also disables collision type 0x65 camera settings)", + "Behavior": "0x130012F4" + }, + { + "Name": "Whomp's Fortress sliding platforms", + "Behavior": "0x13001318" + }, + { + "Name": "Whomp's Fortress elevator platform", + "Behavior": "0x13001340" + }, + { + "Name": "Whomp's Fortress solid platform", + "Behavior": "0x13001368" + }, + { + "Name": "Unknown", + "Behavior": "0x13001390" + }, + { + "Name": "Snow from tree", + "Behavior": "0x130013A8" + }, + { + "Name": "Leaves from tree", + "Behavior": "0x130013C4" + }, + { + "Name": "Another tilting platform", + "Behavior": "0x130013DC" + }, + { + "Name": "Moving Pyramid Platform", + "Behavior": "0x13001408" + }, + { + "Name": "Bubble from Piranha Plant", + "Behavior": "0x1300142C" + }, + { + "Name": "Bubbles (after waking Piranha Plant)", + "Behavior": "0x13001448" + }, + { + "Name": "Purple switch (Bowser staircase)", + "Behavior": "0x13001468" + }, + { + "Name": "Purple switch (grills)", + "Behavior": "0x13001478" + }, + { + "Name": "Purple switch", + "Behavior": "0x13001484" + }, + { + "Name": "Floor Switch (hidden objects)", + "Behavior": "0x130014AC" + }, + { + "Name": "Hidden object (param2 = object#)", + "Behavior": "0x130014BC" + }, + { + "Name": "Breakable Box (Big)", + "Behavior": "0x130014E0" + }, + { + "Name": "Pushable Metal Box", + "Behavior": "0x13001518" + }, + { + "Name": "Heave-Ho", + "Behavior": "0x13001548" + }, + { + "Name": "Unknown, GFX 78/64?", + "Behavior": "0x130015A4" + }, + { + "Name": "Cabin Door?", + "Behavior": "0x130015C0" + }, + { + "Name": "Explodes when pounded (unused ice square in Snowman's Land)", + "Behavior": "0x130015E4" + }, + { + "Name": "Beta trampoline", + "Behavior": "0x13001608" + }, + { + "Name": "Beta trampoline child animation", + "Behavior": "0x13001634" + }, + { + "Name": "Jumping Box", + "Behavior": "0x13001650" + }, + { + "Name": "Cage (inside of Boo)", + "Behavior": "0x1300167C" + }, + { + "Name": "Unknown", + "Behavior": "0x130016AC" + }, + { + "Name": "Igloo Thing", + "Behavior": "0x130016B8" + }, + { + "Name": "Key from Bowser", + "Behavior": "0x130016E4" + }, + { + "Name": "Giant Star from Bowser", + "Behavior": "0x13001714" + }, + { + "Name": "Beta Boo key (inside of Boo)", + "Behavior": "0x13001744" + }, + { + "Name": "Beta Boo key (outside of Boo)", + "Behavior": "0x13001778" + }, + { + "Name": "Bullet Bill generator", + "Behavior": "0x1300179C" + }, + { + "Name": "White puff / smoke type", + "Behavior": "0x130017F4" + }, + { + "Name": "Bowser tail anchor", + "Behavior": "0x13001828" + }, + { + "Name": "Bowser", + "Behavior": "0x13001850" + }, + { + "Name": "Bowser body anchor", + "Behavior": "0x130018CC" + }, + { + "Name": "Bowser flame spawn", + "Behavior": "0x13001904" + }, + { + "Name": "Bowser Battle 2 platform", + "Behavior": "0x13001920" + }, + { + "Name": "Bowser Platform Part (falls when Bowser jumps)", + "Behavior": "0x13001958" + }, + { + "Name": "Blue flame (from Bowser)", + "Behavior": "0x13001984" + }, + { + "Name": "Flame (floating and landing)", + "Behavior": "0x130019C8" + }, + { + "Name": "Blue flames group (x3)", + "Behavior": "0x13001A0C" + }, + { + "Name": "Flame (bouncing) unused?", + "Behavior": "0x13001A30" + }, + { + "Name": "Flame (moving forward growing)", + "Behavior": "0x13001A74" + }, + { + "Name": "Flame (from Bowser)", + "Behavior": "0x13001AA4" + }, + { + "Name": "Flame (large and burning out)", + "Behavior": "0x13001AE8" + }, + { + "Name": "Blue fish", + "Behavior": "0x13001B2C" + }, + { + "Name": "Fish groups in castle tanks", + "Behavior": "0x13001B54" + }, + { + "Name": "Checkerboard elevators group", + "Behavior": "0x13001B70" + }, + { + "Name": "Rotating checkered platform (unused?)", + "Behavior": "0x13001B88" + }, + { + "Name": "Bowser key (going into hole and turning) 1", + "Behavior": "0x13001BB4" + }, + { + "Name": "Bowser key (going into hole and turning) 2", + "Behavior": "0x13001BD4" + }, + { + "Name": "Invisible object underneath castle bridge ??", + "Behavior": "0x13001BF4" + }, + { + "Name": "Water Level Pillar", + "Behavior": "0x13001C04" + }, + { + "Name": "Dire, Dire Docks warp", + "Behavior": "0x13001C34" + }, + { + "Name": "Moat grills (disable if water is drained)", + "Behavior": "0x13001C58" + }, + { + "Name": "Clock Big Arm", + "Behavior": "0x13001C7C" + }, + { + "Name": "Clock Small Arm", + "Behavior": "0x13001C8C" + }, + { + "Name": "Sparkle (from golden coin)", + "Behavior": "0x13001C94" + }, + { + "Name": "Ukiki the monkey (opens cage)", + "Behavior": "0x13001CB0" + }, + { + "Name": "Unknown", + "Behavior": "0x13001D0C" + }, + { + "Name": "Y-rotation (LLL hexagonal platform)", + "Behavior": "0x13001D14" + }, + { + "Name": "Sinking Lava Rock Block", + "Behavior": "0x13001D40" + }, + { + "Name": "Unknown", + "Behavior": "0x13001D70" + }, + { + "Name": "Moving platform (LLL mesh rafts)", + "Behavior": "0x13001D78" + }, + { + "Name": "Snow Ball", + "Behavior": "0x13001DA4" + }, + { + "Name": "Rotating Hexa Block With Fire Bars", + "Behavior": "0x13001DA8" + }, + { + "Name": "Flame (on rotating hexagon in LLL)", + "Behavior": "0x13001DCC" + }, + { + "Name": "Piece of wood (LLL)", + "Behavior": "0x13001E04" + }, + { + "Name": "Floating wood bridge (LLL)", + "Behavior": "0x13001E30" + }, + { + "Name": "Flames (from volcano)", + "Behavior": "0x13001E4C" + }, + { + "Name": "Rotating platform (stops and produces fire if stepped on) (LLL)", + "Behavior": "0x13001E6C" + }, + { + "Name": "Slow and minimal tilting movement (LLL)", + "Behavior": "0x13001E94" + }, + { + "Name": "Slow and minimal up-down movement (LLL)", + "Behavior": "0x13001EC4" + }, + { + "Name": "Tilts if Mario is stepping on it (LLL)", + "Behavior": "0x13001EF8" + }, + { + "Name": "Koopa shell", + "Behavior": "0x13001F3C" + }, + { + "Name": "Flame (Koopa shell in lava)", + "Behavior": "0x13001F68" + }, + { + "Name": "Tox Box", + "Behavior": "0x13001F90" + }, + { + "Name": "Piranha Plant", + "Behavior": "0x13001FBC" + }, + { + "Name": "Solid object (LLL hexagonal mesh)", + "Behavior": "0x13002018" + }, + { + "Name": "Bowser puzzle piece", + "Behavior": "0x13002038" + }, + { + "Name": "Bowser Puzzle (Only in Lethal Lava Land)", + "Behavior": "0x13002068" + }, + { + "Name": "Penguin mother", + "Behavior": "0x13002088" + }, + { + "Name": "Unknown", + "Behavior": "0x130020D8" + }, + { + "Name": "Penguin baby", + "Behavior": "0x130020E8" + }, + { + "Name": "Fish 2", + "Behavior": "0x1300213C" + }, + { + "Name": "Fish 3", + "Behavior": "0x1300214C" + }, + { + "Name": "Fish", + "Behavior": "0x1300215C" + }, + { + "Name": "Large group of fish", + "Behavior": "0x13002160" + }, + { + "Name": "Group of fish", + "Behavior": "0x13002178" + }, + { + "Name": "Moves down when stepped on, and then back to initial position (WDW \"express elevators\")", + "Behavior": "0x13002194" + }, + { + "Name": "Solid object (WDW express elevator platform)", + "Behavior": "0x130021C0" + }, + { + "Name": "Chirp Chirp (In Water Levels only)", + "Behavior": "0x130021E4" + }, + { + "Name": "Group of fish", + "Behavior": "0x130021F4" + }, + { + "Name": "Cheep-cheep", + "Behavior": "0x1300220C" + }, + { + "Name": "[!] Box", + "Behavior": "0x13002250" + }, + { + "Name": "Rotating exclamation mark", + "Behavior": "0x1300227C" + }, + { + "Name": "Called by some spawned objects", + "Behavior": "0x1300229C" + }, + { + "Name": "Solid object (JRB rocks)", + "Behavior": "0x130022B8" + }, + { + "Name": "Disable if first star is complete (Bowser Sub Door)", + "Behavior": "0x130022D8" + }, + { + "Name": "Disable if first star is complete (Bowser Sub)", + "Behavior": "0x13002308" + }, + { + "Name": "Sushi the shark", + "Behavior": "0x13002338" + }, + { + "Name": "Sushi the shark collision child", + "Behavior": "0x13002388" + }, + { + "Name": "Sliding box (Jolly Roger Bay)", + "Behavior": "0x130023A4" + }, + { + "Name": "Ship Half", + "Behavior": "0x130023D0" + }, + { + "Name": "In Sunken Ship 3?", + "Behavior": "0x130023EC" + }, + { + "Name": "Sunken Ship", + "Behavior": "0x1300241C" + }, + { + "Name": "Unknown", + "Behavior": "0x1300243C" + }, + { + "Name": "Sunken Ship Half", + "Behavior": "0x1300244C" + }, + { + "Name": "In Sunken Ship?", + "Behavior": "0x1300246C" + }, + { + "Name": "In Sunken Ship 2?", + "Behavior": "0x13002480" + }, + { + "Name": "Warp to inside of sunken ship", + "Behavior": "0x1300248C" + }, + { + "Name": "White puff generator", + "Behavior": "0x130024AC" + }, + { + "Name": "White puff (from Mario)", + "Behavior": "0x130024DC" + }, + { + "Name": "White puff from Mario 2", + "Behavior": "0x13002500" + }, + { + "Name": "White puff / smoke type", + "Behavior": "0x13002528" + }, + { + "Name": "Purple switch (for hidden boxes)", + "Behavior": "0x13002558" + }, + { + "Name": "Blue Coins Switch", + "Behavior": "0x13002568" + }, + { + "Name": "Coin (Blue)", + "Behavior": "0x13002588" + }, + { + "Name": "Cage door (BOB & HMC)", + "Behavior": "0x130025C0" + }, + { + "Name": "Openable Grills", + "Behavior": "0x130025E0" + }, + { + "Name": "Crystal Tap (modifies water level in WDW)", + "Behavior": "0x130025F8" + }, + { + "Name": "Initialize behavior 0x130025F8", + "Behavior": "0x13002620" + }, + { + "Name": "Sand particle from Tweester", + "Behavior": "0x13002634" + }, + { + "Name": "Tweester", + "Behavior": "0x13002650" + }, + { + "Name": "Spawn ghosts (spawn Big Boo when all are destroyed)", + "Behavior": "0x13002684" + }, + { + "Name": "Animated texture ??", + "Behavior": "0x1300269C" + }, + { + "Name": "Boo in Castle", + "Behavior": "0x130026D4" + }, + { + "Name": "Boo Buddy With Cage", + "Behavior": "0x13002710" + }, + { + "Name": "Boo Buddy", + "Behavior": "0x13002768" + }, + { + "Name": "Boo Buddy", + "Behavior": "0x13002790" + }, + { + "Name": "Big Boo on balcony", + "Behavior": "0x13002794" + }, + { + "Name": "Boo Buddy group (x3)", + "Behavior": "0x130027D0" + }, + { + "Name": "Boo Buddy 3", + "Behavior": "0x130027E4" + }, + { + "Name": "Boo Buddy 2", + "Behavior": "0x13002804" + }, + { + "Name": "Hidden Staircase Step", + "Behavior": "0x1300286C" + }, + { + "Name": "Unknown", + "Behavior": "0x13002898" + }, + { + "Name": "Tilts on z-axis when stepped on (Haunted House floor platforms)", + "Behavior": "0x130028CC" + }, + { + "Name": "Bookshelf", + "Behavior": "0x130028FC" + }, + { + "Name": "Mesh Elevator", + "Behavior": "0x1300292C" + }, + { + "Name": "Merry-Go-Round", + "Behavior": "0x13002968" + }, + { + "Name": "Plays music track when touched (used along with penguin shortcut)", + "Behavior": "0x13002998" + }, + { + "Name": "Inside Cannon", + "Behavior": "0x130029B0" + }, + { + "Name": "Static checkered platform (unused?)", + "Behavior": "0x130029E4" + }, + { + "Name": "Billboarded object ??", + "Behavior": "0x13002A10" + }, + { + "Name": "Star ??", + "Behavior": "0x13002A20" + }, + { + "Name": "Unknown", + "Behavior": "0x13002A38" + }, + { + "Name": "Static object", + "Behavior": "0x13002A48" + }, + { + "Name": "Castle Floor Trap", + "Behavior": "0x13002A5C" + }, + { + "Name": "Floor trap in castle", + "Behavior": "0x13002A7C" + }, + { + "Name": "Tree", + "Behavior": "0x13002AA4" + }, + { + "Name": "Sparkles (power-ups)", + "Behavior": "0x13002AD0" + }, + { + "Name": "Sparkles (power-ups)", + "Behavior": "0x13002AF0" + }, + { + "Name": "Sparkles (from special triple jump)", + "Behavior": "0x13002B08" + }, + { + "Name": "Scuttlebug", + "Behavior": "0x13002B5C" + }, + { + "Name": "Scuttlebug spawn", + "Behavior": "0x13002BA0" + }, + { + "Name": "Whomp King", + "Behavior": "0x13002BB8" + }, + { + "Name": "Small Whomp", + "Behavior": "0x13002BCC" + }, + { + "Name": "Whomp King", + "Behavior": "0x13002BD4" + }, + { + "Name": "Water splash", + "Behavior": "0x13002C14" + }, + { + "Name": "Water drops", + "Behavior": "0x13002C64" + }, + { + "Name": "White wave on water surface", + "Behavior": "0x13002C7C" + }, + { + "Name": "Unknown", + "Behavior": "0x13002CB0" + }, + { + "Name": "Waves on surface", + "Behavior": "0x13002CE0" + }, + { + "Name": "White wave on water surface 2", + "Behavior": "0x13002D28" + }, + { + "Name": "Waves generator", + "Behavior": "0x13002D50" + }, + { + "Name": "Wave on surface (shrinking)", + "Behavior": "0x13002D7C" + }, + { + "Name": "Wave type", + "Behavior": "0x13002DB0" + }, + { + "Name": "Wave trail on surface", + "Behavior": "0x13002DC0" + }, + { + "Name": "Unknown", + "Behavior": "0x13002DD0" + }, + { + "Name": "Tiny white particles from wind generators", + "Behavior": "0x13002E04" + }, + { + "Name": "Wind particle (blows Mario away)", + "Behavior": "0x13002E20" + }, + { + "Name": "Wind Blowing", + "Behavior": "0x13002E3C" + }, + { + "Name": "Penguin Crossing Bridge", + "Behavior": "0x13002E58" + }, + { + "Name": "Yellow Ball (Pole in WF)", + "Behavior": "0x13002EA8" + }, + { + "Name": "Mario", + "Behavior": "0x13002EC0" + }, + { + "Name": "Toad", + "Behavior": "0x13002EF8" + }, + { + "Name": "Star (held up when opening a sealed door)", + "Behavior": "0x13002F40" + }, + { + "Name": "Warp 12128", + "Behavior": "0x13002F60" + }, + { + "Name": "Warp (Mario Start 2)", + "Behavior": "0x13002F64" + }, + { + "Name": "Warp 12136", + "Behavior": "0x13002F68" + }, + { + "Name": "Warp (Mario Start 3)", + "Behavior": "0x13002F6C" + }, + { + "Name": "Warp (Level Exit Recovering Life)", + "Behavior": "0x13002F70" + }, + { + "Name": "Warp (Mario Start 1)", + "Behavior": "0x13002F74" + }, + { + "Name": "Warp (Mario Start 5)", + "Behavior": "0x13002F78" + }, + { + "Name": "Warp Painting Exit (Success)", + "Behavior": "0x13002F7C" + }, + { + "Name": "Warp Painting Exit (Failure)", + "Behavior": "0x13002F80" + }, + { + "Name": "Warp 12164", + "Behavior": "0x13002F84" + }, + { + "Name": "Warp (Level Exit Ceiling)", + "Behavior": "0x13002F88" + }, + { + "Name": "Warp (Level Exit)", + "Behavior": "0x13002F8C" + }, + { + "Name": "Warp (Level Exit From Hole)", + "Behavior": "0x13002F90" + }, + { + "Name": "Warp (to level)", + "Behavior": "0x13002F94" + }, + { + "Name": "Yellow background", + "Behavior": "0x13002FC0" + }, + { + "Name": "Growing button (as in, after it is selected)", + "Behavior": "0x13002FE4" + }, + { + "Name": "Gray button", + "Behavior": "0x13003008" + }, + { + "Name": "Star", + "Behavior": "0x1300302C" + }, + { + "Name": "Star selector", + "Behavior": "0x13003048" + }, + { + "Name": "Coin inside of formation", + "Behavior": "0x13003068" + }, + { + "Name": "Moving Blue Coin", + "Behavior": "0x130030A4" + }, + { + "Name": "Blue coin (sliding)", + "Behavior": "0x130030D4" + }, + { + "Name": "Blue coin (jumping)", + "Behavior": "0x13003104" + }, + { + "Name": "Seaweed", + "Behavior": "0x13003134" + }, + { + "Name": "Bubbles?", + "Behavior": "0x13003158" + }, + { + "Name": "Bob-Omb", + "Behavior": "0x13003174" + }, + { + "Name": "Smoke spawned from Bob-omb", + "Behavior": "0x130031AC" + }, + { + "Name": "Pink Bob-omb (Generates Message)", + "Behavior": "0x130031DC" + }, + { + "Name": "Pink Bob-omb (Opens Cannons)", + "Behavior": "0x13003228" + }, + { + "Name": "Cannon (Closed)", + "Behavior": "0x13003274" + }, + { + "Name": "Whirlpool death", + "Behavior": "0x130032A8" + }, + { + "Name": "Bubbles", + "Behavior": "0x130032C8" + }, + { + "Name": "Wooden Signpost", + "Behavior": "0x130032E0" + }, + { + "Name": "Sign On Wall", + "Behavior": "0x13003324" + }, + { + "Name": "Amp 2", + "Behavior": "0x13003354" + }, + { + "Name": "Amp", + "Behavior": "0x13003388" + }, + { + "Name": "Butterfly", + "Behavior": "0x130033BC" + }, + { + "Name": "Hoot the Owl", + "Behavior": "0x130033EC" + }, + { + "Name": "Can be picked up (unused)", + "Behavior": "0x13003420" + }, + { + "Name": "Unknown", + "Behavior": "0x13003454" + }, + { + "Name": "Water wave ??", + "Behavior": "0x130034C4" + }, + { + "Name": "Explosion", + "Behavior": "0x13003510" + }, + { + "Name": "Large white smoke cloud", + "Behavior": "0x13003558" + }, + { + "Name": "Smoke from Bob-omb", + "Behavior": "0x13003588" + }, + { + "Name": "White particle / water drop", + "Behavior": "0x130035B0" + }, + { + "Name": "Unkown", + "Behavior": "0x13003600" + }, + { + "Name": "Small Bully", + "Behavior": "0x1300362C" + }, + { + "Name": "Big Bully Boss", + "Behavior": "0x13003660" + }, + { + "Name": "Bully group (spawn Big Bully when all 3 are destroyed)", + "Behavior": "0x13003694" + }, + { + "Name": "Small Chill Bully (unused)", + "Behavior": "0x130036C8" + }, + { + "Name": "Big Chill Bully", + "Behavior": "0x13003700" + }, + { + "Name": "Manta Rings (In Water Levels only)", + "Behavior": "0x13003738" + }, + { + "Name": "Water rings", + "Behavior": "0x13003750" + }, + { + "Name": "Water rings", + "Behavior": "0x13003798" + }, + { + "Name": "Unknown", + "Behavior": "0x130037E0" + }, + { + "Name": "Spikey Bowser bomb", + "Behavior": "0x130037EC" + }, + { + "Name": "Explosion (from spikey bombs) pt.1", + "Behavior": "0x1300381C" + }, + { + "Name": "Explosion (from spikey bombs) pt.2", + "Behavior": "0x13003840" + }, + { + "Name": "Star (held up after collecting star)", + "Behavior": "0x13003868" + }, + { + "Name": "Sparkles (when Mario grabs a key)", + "Behavior": "0x13003888" + }, + { + "Name": "White puff type", + "Behavior": "0x130038B0" + }, + { + "Name": "Bascule Bridge", + "Behavior": "0x130038D0" + }, + { + "Name": "Tilting bridge part (LLL)", + "Behavior": "0x130038E8" + }, + { + "Name": "Rock Formation with eyes", + "Behavior": "0x13003910" + }, + { + "Name": "Large Rock With Eyes", + "Behavior": "0x13003940" + }, + { + "Name": "Sliding Brick Platform", + "Behavior": "0x13003970" + }, + { + "Name": "Moneybag transforming", + "Behavior": "0x130039A0" + }, + { + "Name": "Moneybag (with coin)", + "Behavior": "0x130039D4" + }, + { + "Name": "Metal Balls", + "Behavior": "0x13003A08" + }, + { + "Name": "Rolling metal ball", + "Behavior": "0x13003A30" + }, + { + "Name": "Tiny metal ball", + "Behavior": "0x13003A58" + }, + { + "Name": "Metal Ball Generator 2", + "Behavior": "0x13003A80" + }, + { + "Name": "Metal Ball Generator", + "Behavior": "0x13003AA4" + }, + { + "Name": "Mini Metal Balls Generator", + "Behavior": "0x13003AC8" + }, + { + "Name": "Flying Ship Wing", + "Behavior": "0x13003AE0" + }, + { + "Name": "Spindel", + "Behavior": "0x13003B00" + }, + { + "Name": "Moving up and down (pyramid platforms)", + "Behavior": "0x13003B30" + }, + { + "Name": "Pyramid Elevator Case", + "Behavior": "0x13003B60" + }, + { + "Name": "Metal balls for pyramid elevator", + "Behavior": "0x13003B98" + }, + { + "Name": "Pyramid Top", + "Behavior": "0x13003BB4" + }, + { + "Name": "Pyramid top explosion", + "Behavior": "0x13003BEC" + }, + { + "Name": "Unknown", + "Behavior": "0x13003C0C" + }, + { + "Name": "PlaySound loop (waterfall)", + "Behavior": "0x13003C30" + }, + { + "Name": "PlaySound loop (volcano)", + "Behavior": "0x13003C44" + }, + { + "Name": "Castle Flag", + "Behavior": "0x13003C58" + }, + { + "Name": "PlaySound loop (birds)", + "Behavior": "0x13003C7C" + }, + { + "Name": "Ambient Sounds?", + "Behavior": "0x13003C90" + }, + { + "Name": "PlaySound loop (sand)", + "Behavior": "0x13003CA4" + }, + { + "Name": "Cannon Grill (disable if stars == 120)", + "Behavior": "0x13003CB8" + }, + { + "Name": "Big snowman bottom", + "Behavior": "0x13003CE4" + }, + { + "Name": "Big snowman head", + "Behavior": "0x13003D0C" + }, + { + "Name": "Checkpoint for big snowman's body", + "Behavior": "0x13003D34" + }, + { + "Name": "Big snowman (whole body)", + "Behavior": "0x13003D4C" + }, + { + "Name": "Big boulder", + "Behavior": "0x13003D74" + }, + { + "Name": "Boulder spawn (Hazy Maze Cave)", + "Behavior": "0x13003DA0" + }, + { + "Name": "Wing Cap", + "Behavior": "0x13003DB8" + }, + { + "Name": "Metal Cap", + "Behavior": "0x13003DD8" + }, + { + "Name": "Normal Cap", + "Behavior": "0x13003DF8" + }, + { + "Name": "Vanish Cap", + "Behavior": "0x13003E1C" + }, + { + "Name": "Star", + "Behavior": "0x13003E3C" + }, + { + "Name": "Star spawn (with coordinates)", + "Behavior": "0x13003E64" + }, + { + "Name": "Star For Red Coins (Hidden)", + "Behavior": "0x13003E8C" + }, + { + "Name": "Coin (Red)", + "Behavior": "0x13003EAC" + }, + { + "Name": "Wind?", + "Behavior": "0x13003EE4" + }, + { + "Name": "Star (Hidden)", + "Behavior": "0x13003EFC" + }, + { + "Name": "Secret numbers (touch 5 to get a star)", + "Behavior": "0x13003F1C" + }, + { + "Name": "Rolling Wooden Log", + "Behavior": "0x13003F40" + }, + { + "Name": "Falling block inside volcano", + "Behavior": "0x13003F78" + }, + { + "Name": "Rolling log", + "Behavior": "0x13003FA4" + }, + { + "Name": "1-up spawn (from box)", + "Behavior": "0x13003FDC" + }, + { + "Name": "1-up spawn (moving away)", + "Behavior": "0x13004010" + }, + { + "Name": "1-up (Sliding)", + "Behavior": "0x13004044" + }, + { + "Name": "1-up mushroom", + "Behavior": "0x1300407C" + }, + { + "Name": "1-up (jumps when approached)", + "Behavior": "0x130040B4" + }, + { + "Name": "1-up mushroom (enable when behavior 0x13004124 is touched)", + "Behavior": "0x130040EC" + }, + { + "Name": "Trigger for hidden 1-up", + "Behavior": "0x13004124" + }, + { + "Name": "1-up (hidden in tree/pole)", + "Behavior": "0x13004148" + }, + { + "Name": "Unused collectible item", + "Behavior": "0x13004180" + }, + { + "Name": "1-up (hidden in tree or pole)", + "Behavior": "0x130041A4" + }, + { + "Name": "Hovering Metal Platform", + "Behavior": "0x130041BC" + }, + { + "Name": "Unknown", + "Behavior": "0x130041F0" + }, + { + "Name": "Breakable Box (Small)", + "Behavior": "0x13004218" + }, + { + "Name": "Sliding snow mound", + "Behavior": "0x13004244" + }, + { + "Name": "Snow mound spawn (Only in Snow Man's Land)", + "Behavior": "0x13004270" + }, + { + "Name": "Platform floating on water (square)", + "Behavior": "0x13004284" + }, + { + "Name": "Platform floating on water (rectangular)", + "Behavior": "0x130042B4" + }, + { + "Name": "Platform floating on water (Jolly Roger Bay)", + "Behavior": "0x130042E4" + }, + { + "Name": "Arrow Lift", + "Behavior": "0x13004314" + }, + { + "Name": "Orange number", + "Behavior": "0x13004348" + }, + { + "Name": "Manta Ray", + "Behavior": "0x13004370" + }, + { + "Name": "Falling Pillar", + "Behavior": "0x130043A0" + }, + { + "Name": "Unknown", + "Behavior": "0x130043C4" + }, + { + "Name": "Falling Pillar Base", + "Behavior": "0x130043E0" + }, + { + "Name": "Floating Jolly Roger box (unused)", + "Behavior": "0x13004400" + }, + { + "Name": "Clock Pendulum", + "Behavior": "0x1300442C" + }, + { + "Name": "Treasure chest group (sunken ship)", + "Behavior": "0x1300444C" + }, + { + "Name": "Star (Hidden for Treasure Chests?)", + "Behavior": "0x13004470" + }, + { + "Name": "Treasure chest group (DDD)", + "Behavior": "0x13004494" + }, + { + "Name": "Treasure chest", + "Behavior": "0x130044B8" + }, + { + "Name": "Unknown", + "Behavior": "0x130044E0" + }, + { + "Name": "MIPS the Rabbit", + "Behavior": "0x130044FC" + }, + { + "Name": "Yoshi", + "Behavior": "0x13004538" + }, + { + "Name": "Koopa", + "Behavior": "0x13004580" + }, + { + "Name": "Koopa Flag (Only in Levels with Koopas)", + "Behavior": "0x130045D0" + }, + { + "Name": "Koopa flag (not actual goal)", + "Behavior": "0x130045F8" + }, + { + "Name": "Pokey (Only use in SSL)", + "Behavior": "0x13004634" + }, + { + "Name": "Pokey head", + "Behavior": "0x13004668" + }, + { + "Name": "Swoop (Bat)", + "Behavior": "0x13004698" + }, + { + "Name": "Fly Guy", + "Behavior": "0x130046DC" + }, + { + "Name": "Goomba", + "Behavior": "0x1300472C" + }, + { + "Name": "Goomba group (x3)", + "Behavior": "0x13004770" + }, + { + "Name": "Chain Chomp", + "Behavior": "0x1300478C" + }, + { + "Name": "Chain-Chomp chains", + "Behavior": "0x130047E4" + }, + { + "Name": "Poundable Wooden Log", + "Behavior": "0x1300481C" + }, + { + "Name": "Explodes when Chain-Chomp is freed", + "Behavior": "0x13004868" + }, + { + "Name": "Wiggler Boss", + "Behavior": "0x13004898" + }, + { + "Name": "Wiggler body parts", + "Behavior": "0x130048E0" + }, + { + "Name": "Lakitu (throws Spinies)", + "Behavior": "0x13004918" + }, + { + "Name": "Lakitu (behind mirror)", + "Behavior": "0x13004954" + }, + { + "Name": "Fwoosh (cloud enemy)", + "Behavior": "0x13004988" + }, + { + "Name": "Fwoosh (cloud enemy) face", + "Behavior": "0x130049AC" + }, + { + "Name": "Spiny", + "Behavior": "0x130049C8" + }, + { + "Name": "Monty Mole", + "Behavior": "0x13004A00" + }, + { + "Name": "Monty Mole in Hole", + "Behavior": "0x13004A58" + }, + { + "Name": "Monty Mole rock", + "Behavior": "0x13004A78" + }, + { + "Name": "Platform on tracks (param1 = collision pointer, param2 = track#)", + "Behavior": "0x13004AB0" + }, + { + "Name": "Metal Balls for elevators (not actual paths)", + "Behavior": "0x13004AF4" + }, + { + "Name": "Tilting Bridge", + "Behavior": "0x13004B1C" + }, + { + "Name": "Four Rotating Platforms", + "Behavior": "0x13004B44" + }, + { + "Name": "Ferris Wheel Platform", + "Behavior": "0x13004B6C" + }, + { + "Name": "Water Bubble Drop", + "Behavior": "0x13004B8C" + }, + { + "Name": "Water bomb", + "Behavior": "0x13004BA8" + }, + { + "Name": "Water bomb shadow", + "Behavior": "0x13004BD4" + }, + { + "Name": "Rotating Cube", + "Behavior": "0x13004BF0" + }, + { + "Name": "Pendulum", + "Behavior": "0x13004C24" + }, + { + "Name": "Metal Platform", + "Behavior": "0x13004C5C" + }, + { + "Name": "Moving Platforms", + "Behavior": "0x13004C94" + }, + { + "Name": "Rotating Platforms", + "Behavior": "0x13004CCC" + }, + { + "Name": "Box Platform", + "Behavior": "0x13004CF8" + }, + { + "Name": "Clock Platform", + "Behavior": "0x13004D28" + }, + { + "Name": "Clock Big Hand Rotating", + "Behavior": "0x13004D64" + }, + { + "Name": "Rotating Clockwork Gear", + "Behavior": "0x13004D90" + }, + { + "Name": "Mr. Blizzard", + "Behavior": "0x13004DBC" + }, + { + "Name": "Snowball from Snowman", + "Behavior": "0x13004E08" + }, + { + "Name": "Sliding back and forth (param1 = collision pointer, param2 = movement length)", + "Behavior": "0x13004E4C" + }, + { + "Name": "Octogonal Platform Rotating", + "Behavior": "0x13004E78" + }, + { + "Name": "Pyramidal Platforms", + "Behavior": "0x13004EA0" + }, + { + "Name": "Climbable Cage", + "Behavior": "0x13004ECC" + }, + { + "Name": "Recovery Heart", + "Behavior": "0x13004EF8" + }, + { + "Name": "Cannon", + "Behavior": "0x13004F10" + }, + { + "Name": "Cannon barrel (shoots bubbles)", + "Behavior": "0x13004F28" + }, + { + "Name": "Unagi the eel (swimming)", + "Behavior": "0x13004F40" + }, + { + "Name": "Unknown", + "Behavior": "0x13004F78" + }, + { + "Name": "Dorrie", + "Behavior": "0x13004F90" + }, + { + "Name": "Haunted Chair", + "Behavior": "0x13004FD4" + }, + { + "Name": "Mad Piano", + "Behavior": "0x13005024" + }, + { + "Name": "Bookend", + "Behavior": "0x1300506C" + }, + { + "Name": "BookShelf Check?", + "Behavior": "0x130050B4" + }, + { + "Name": "Bookshelf Thing", + "Behavior": "0x130050D4" + }, + { + "Name": "Book switch (Big Boo's Haunt)", + "Behavior": "0x130050F4" + }, + { + "Name": "Piranha Plant", + "Behavior": "0x13005120" + }, + { + "Name": "Flame (spawned from small Piranha Plant)", + "Behavior": "0x13005158" + }, + { + "Name": "Fire Spewer", + "Behavior": "0x1300518C" + }, + { + "Name": "Flame (spawned from Fly Guys)", + "Behavior": "0x130051AC" + }, + { + "Name": "Snufit", + "Behavior": "0x130051E0" + }, + { + "Name": "Snufit bullet", + "Behavior": "0x1300521C" + }, + { + "Name": "Grindel", + "Behavior": "0x1300525C" + }, + { + "Name": "Eyerok Boss", + "Behavior": "0x130052B4" + }, + { + "Name": "Eyerok hand", + "Behavior": "0x130052D0" + }, + { + "Name": "Klepto", + "Behavior": "0x13005310" + }, + { + "Name": "Bird Flock", + "Behavior": "0x13005354" + }, + { + "Name": "Penguin (Racing)", + "Behavior": "0x13005380" + }, + { + "Name": "Finishing Line Check", + "Behavior": "0x130053C4" + }, + { + "Name": "Shortcut Check (penguin won't give a star if touched)", + "Behavior": "0x130053DC" + }, + { + "Name": "Haunted Room Check?", + "Behavior": "0x130053F4" + }, + { + "Name": "Unknown", + "Behavior": "0x13005414" + }, + { + "Name": "Clam Shell", + "Behavior": "0x13005440" + }, + { + "Name": "Skeeter", + "Behavior": "0x13005468" + }, + { + "Name": "Water wave type?", + "Behavior": "0x130054A0" + }, + { + "Name": "Pendulum Platform", + "Behavior": "0x130054B8" + }, + { + "Name": "Donut platform group", + "Behavior": "0x130054EC" + }, + { + "Name": "Donut platform (falls and explodes when stepped on)", + "Behavior": "0x13005504" + }, + { + "Name": "Yellow Poles (Dire, Dire Docks)", + "Behavior": "0x13005528" + }, + { + "Name": "Flat blue star for red coins", + "Behavior": "0x1300556C" + }, + { + "Name": "Three butterflies group (2 turn into bombs, 1 gives a mushroom)", + "Behavior": "0x13005598" + }, + { + "Name": "Bubba", + "Behavior": "0x130055DC" + }, + { + "Name": "Lakitu at the beginning", + "Behavior": "0x13005610" + }, + { + "Name": "Peach at the beginning", + "Behavior": "0x13005638" + }, + { + "Name": "Birds at end 1", + "Behavior": "0x1300565C" + }, + { + "Name": "Birds at end 2", + "Behavior": "0x13005680" + }, + { + "Name": "Calls intro scene stuff (Lakitu, Peach, etc.)", + "Behavior": "0x130056A4" + } + ] +} \ No newline at end of file diff --git a/data/ObjectCombos_EU.json b/data/ObjectCombos_EU.json index 0bb30b1..b1770c9 100644 --- a/data/ObjectCombos_EU.json +++ b/data/ObjectCombos_EU.json @@ -2711,7 +2711,7 @@ "Behavior": "0x13002F78" }, { - "Name": "Warp (to level)", + "Name": "Warp (Mario Start in water)", "ModelID": "0x00", "ModelAddress": "0x00000000", "Behavior": "0x13002F94" diff --git a/data/ObjectCombos_JP.json b/data/ObjectCombos_JP.json index 61f9a68..976b0c8 100644 --- a/data/ObjectCombos_JP.json +++ b/data/ObjectCombos_JP.json @@ -2633,7 +2633,7 @@ "Behavior": "0x13002F58" }, { - "Name": "Warp (to level)", + "Name": "Warp (Mario Start in water)", "ModelID": "0x00", "ModelAddress": "0x00000000", "Behavior": "0x13002F74" diff --git a/data/ObjectCombos_JS.json b/data/ObjectCombos_JS.json index 0bb30b1..b1770c9 100644 --- a/data/ObjectCombos_JS.json +++ b/data/ObjectCombos_JS.json @@ -2711,7 +2711,7 @@ "Behavior": "0x13002F78" }, { - "Name": "Warp (to level)", + "Name": "Warp (Mario Start in water)", "ModelID": "0x00", "ModelAddress": "0x00000000", "Behavior": "0x13002F94" diff --git a/data/ObjectCombos_NA.json b/data/ObjectCombos_NA.json index 0bb30b1..b1770c9 100644 --- a/data/ObjectCombos_NA.json +++ b/data/ObjectCombos_NA.json @@ -2711,7 +2711,7 @@ "Behavior": "0x13002F78" }, { - "Name": "Warp (to level)", + "Name": "Warp (Mario Start in water)", "ModelID": "0x00", "ModelAddress": "0x00000000", "Behavior": "0x13002F94" diff --git a/src/COLLADA/DumpModel.cs b/src/COLLADA/DumpModel.cs new file mode 100644 index 0000000..7d0c9e9 --- /dev/null +++ b/src/COLLADA/DumpModel.cs @@ -0,0 +1,446 @@ +using Collada141; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; + +namespace Quad64 +{ + class DumpModel + { + private static double _scale = 1.0; + + private static param MakeParam(string name, string type) + { + param p = new param(); + p.name = name; + p.type = type; + return p; + } + + public static accessor MakePosAccessor(ulong count, string source) + { + accessor acc = new accessor(); + acc.stride = 3; + acc.count = count; + acc.source = "#" + source; + acc.param = new param[] { + MakeParam("X", "float"), + MakeParam("Y", "float"), + MakeParam("Z", "float") + }; + return acc; + } + + public static accessor MakeTexCoordAccessor(ulong count, string source) + { + accessor acc = new accessor(); + acc.stride = 2; + acc.count = count; + acc.source = "#" + source; + acc.param = new param[] { + MakeParam("S", "float"), + MakeParam("T", "float") + }; + return acc; + } + + public static accessor MakeColorAccessor(ulong count, string source) + { + accessor acc = new accessor(); + acc.stride = 3; + acc.count = count; + acc.source = "#" + source; + acc.param = new param[] { + MakeParam("R", "float"), + MakeParam("G", "float"), + MakeParam("B", "float") + }; + return acc; + } + + public static source makePositionsSource(ref Model3D mdl) + { + source src = new source(); + src.id = "positions_source"; + float_array fa = new float_array(); + fa.id = "positions"; + + List values = new List(); + for (int id_num = 0; id_num < mdl.meshes.Count; id_num++) + { + int len = mdl.meshes[id_num].vertices.Length; + for (int i = 0; i < len; i++) + { + values.Add(mdl.meshes[id_num].vertices[i].X * _scale); + values.Add(mdl.meshes[id_num].vertices[i].Y * _scale); + values.Add(mdl.meshes[id_num].vertices[i].Z * _scale); + } + } + fa.Values = values.ToArray(); + fa.count = (ulong)fa.Values.LongLength; + + src.technique_common = new sourceTechnique_common(); + src.technique_common.accessor = MakePosAccessor(fa.count / 3, fa.id); + src.Item = fa; + return src; + } + + public static source makeTexCoordSource(ref Model3D mdl) + { + + source src = new source(); + src.id = "texCoord_source"; + float_array fa = new float_array(); + fa.id = "texCoord"; + + List values = new List(); + for (int id_num = 0; id_num < mdl.meshes.Count; id_num++) + { + bool clampX = mdl.meshes[id_num].texture.TextureParamS == 33071; + bool clampY = mdl.meshes[id_num].texture.TextureParamT == 33071; + int len = mdl.meshes[id_num].colors.Length; + for (int i = 0; i < len; i++) + { + float X = mdl.meshes[id_num].texCoord[i].X; + float Y = mdl.meshes[id_num].texCoord[i].Y; + if (clampX) + X = (X > 1.0f ? 1.0f : (X < 0.0f ? 0.0f : X)); + if (clampY) + Y = (Y > 1.0f ? 1.0f : (Y < 0.0f ? 0.0f : Y)); + + values.Add(X); + values.Add(-Y); + } + } + fa.Values = values.ToArray(); + fa.count = (ulong)fa.Values.LongLength; + + src.technique_common = new sourceTechnique_common(); + src.technique_common.accessor = MakeTexCoordAccessor(fa.count / 2, fa.id); + src.Item = fa; + return src; + } + + public static source makeColorSource(ref Model3D mdl) + { + source src = new source(); + src.id = "color_source"; + float_array fa = new float_array(); + fa.id = "color"; + + List values = new List(); + for (int id_num = 0; id_num < mdl.meshes.Count; id_num++) + { + int len = mdl.meshes[id_num].colors.Length; + for (int i = 0; i < len; i++) + { + values.Add(mdl.meshes[id_num].colors[i].X); + values.Add(mdl.meshes[id_num].colors[i].Y); + values.Add(mdl.meshes[id_num].colors[i].Z); + } + } + fa.Values = values.ToArray(); + fa.count = (ulong)fa.Values.LongLength; + + src.technique_common = new sourceTechnique_common(); + src.technique_common.accessor = MakeColorAccessor(fa.count / 3, fa.id); + src.Item = fa; + return src; + } + + public static InputLocal makeInput(string source, string semantic) + { + InputLocal input = new InputLocal(); + input.source = "#" + source; + input.semantic = semantic; + return input; + } + + public static InputLocalOffset makeInputOffset(string source, string semantic, + ulong offset, bool setSpecified, ulong set) + { + InputLocalOffset input = new InputLocalOffset(); + input.source = "#" + source; + input.semantic = semantic; + input.offset = offset; + input.set = set; + input.setSpecified = setSpecified; + return input; + } + + public static vertices MakeVertices() + { + vertices verts = new vertices(); + verts.id = "vertices"; + verts.input = new InputLocal[] { makeInput("positions_source", "POSITION") }; + return verts; + } + + public static polylist MakePolyList(ulong id_num, uint[] indices, ref uint largest_offset) + { + polylist plist = new polylist(); + plist.material = "MaterialInstance_" + id_num; + plist.input = new InputLocalOffset[] { + makeInputOffset("vertices", "VERTEX", 0, false, 0), + makeInputOffset("texCoord_source", "TEXCOORD", 1, true, 0), + makeInputOffset("color_source", "COLOR", 2, true, 0) + }; + string p = "", vcount = ""; + long len = indices.LongLength; + uint largest = largest_offset; + for (long i = 0; i < len; i++) + { + if(i % 3 == 0) + vcount += "3 "; + uint index = indices[i] + largest_offset; + largest = Math.Max(largest, indices[i] + largest_offset); + p += index.ToString() + " " + index.ToString() + " " + index.ToString(); + if (i < len - 1) + p += " "; + } + largest_offset = largest + 1; + + plist.vcount = vcount; + plist.count = (ulong)(indices.LongLength / 3); + plist.p = p; + + return plist; + } + + public static library_geometries MakeGeometryLibrary(ref Model3D mdl) + { + library_geometries lib_geo = new library_geometries(); + //lib_geo.id = "lib_geo"; + ulong len = (ulong)mdl.builder.TextureImages.Count; + + geometry geo = new geometry(); + + //for (ulong i = 0; i < len; i++) + //{ + geo = new geometry(); + geo.id = "geometry"; + mesh m = new mesh(); + + m.source = new source[] { + makePositionsSource(ref mdl), + makeTexCoordSource(ref mdl), + makeColorSource(ref mdl) + }; + + m.vertices = MakeVertices(); + List polyLists = new List(); + uint indices_offset = 0; + for (ulong i = 0; i < len; i++) + { + polyLists.Add(MakePolyList(i, mdl.meshes[(int)i].indices, ref indices_offset)); + //indices_offset += (uint)mdl.meshes[(int)i].indices.LongLength; + } + m.Items = polyLists.ToArray(); + geo.Item = m; + + lib_geo.geometry = new geometry[] { geo }; + return lib_geo; + } + + private static image MakeImage(ulong id_num, string modelName) + { + image img = new image(); + img.id = "image_"+id_num; + img.Item = modelName + "/" + id_num + ".png"; + return img; + } + + private static library_images MakeImagesLibrary(ref Model3D mdl, string modelName) + { + library_images lib_img = new library_images(); + int len = mdl.builder.TextureImages.Count; + + image[] imgs = new image[len]; + for (ulong i = 0; i < (ulong)imgs.LongLength; i++) + imgs[i] = MakeImage(i, modelName); + lib_img.image = imgs; + return lib_img; + } + + private static common_newparam_type MakeNewParamForEffect(ulong id_num, bool isSampler2D) + { + common_newparam_type newparam = new common_newparam_type(); + if (isSampler2D) + { + fx_sampler2D_common sampler2D = new fx_sampler2D_common(); + sampler2D.source = "surface_" + id_num; + newparam.Item = sampler2D; + newparam.ItemElementName = ItemChoiceType.sampler2D; + newparam.sid = "sampler2D_" + id_num; + } + else + { + fx_surface_init_from_common initFrom = new fx_surface_init_from_common(); + fx_surface_common surface = new fx_surface_common(); + initFrom.Value = "image_" + id_num; + surface.type = fx_surface_type_enum.Item2D; + surface.init_from = new fx_surface_init_from_common[] { + initFrom + }; + newparam.Item = surface; + newparam.ItemElementName = ItemChoiceType.surface; + newparam.sid = "surface_" + id_num; + } + return newparam; + } + + private static effectFx_profile_abstractProfile_COMMON MakeProfileCOMMON(ulong id_num) + { + effectFx_profile_abstractProfile_COMMON proCom = new effectFx_profile_abstractProfile_COMMON(); + proCom.technique = new effectFx_profile_abstractProfile_COMMONTechnique(); + effectFx_profile_abstractProfile_COMMONTechniqueLambert lambert = new effectFx_profile_abstractProfile_COMMONTechniqueLambert(); + common_color_or_texture_type diffuse = new common_color_or_texture_type(); + common_color_or_texture_typeTexture tex = new common_color_or_texture_typeTexture(); + tex.texture = "sampler2D_"+ id_num; + diffuse.Item = tex; + lambert.diffuse = diffuse; + proCom.Items = new object[] { + MakeNewParamForEffect(id_num, false), + MakeNewParamForEffect(id_num, true) + }; + proCom.technique.Item = lambert; + return proCom; + } + + private static effect MakeEffect(ulong id_num) + { + effect eff = new effect(); + eff.id = "effect_" + id_num; + eff.Items = new effectFx_profile_abstractProfile_COMMON[] + { + MakeProfileCOMMON(id_num) + }; + return eff; + } + + private static library_effects MakeEffectsLibrary(ref Model3D mdl, string modelName) + { + library_effects lib_eff = new library_effects(); + + int len = mdl.builder.TextureImages.Count; + + effect[] effects = new effect[len]; + for (ulong i = 0; i < (ulong)effects.LongLength; i++) + effects[i] = MakeEffect(i); + + lib_eff.effect = effects; + return lib_eff; + } + + private static material MakeMaterial(ulong id_num) + { + material mat = new material(); + mat.name = "Material_" + id_num; + mat.id = "material_" + id_num; + instance_effect ieffect = new instance_effect(); + ieffect.url = "#effect_" + id_num; + mat.instance_effect = ieffect; + return mat; + } + + private static library_materials MakeMaterialsLibrary(ref Model3D mdl) + { + library_materials lib_mats = new library_materials(); + + int len = mdl.builder.TextureImages.Count; + + material[] materials = new material[len]; + for (ulong i = 0; i < (ulong)materials.LongLength; i++) + materials[i] = MakeMaterial(i); + + lib_mats.material = materials; + return lib_mats; + } + + private static bind_material MakeBindedMaterial(ref Model3D mdl) + { + bind_material bm = new bind_material(); + instance_material[] materials = new instance_material[mdl.builder.TextureImages.Count]; + for (int id_num = 0; id_num < materials.Length; id_num++) + { + materials[id_num] = new instance_material(); + materials[id_num].symbol = "MaterialInstance_" + id_num; + materials[id_num].target = "#material_" + id_num; + } + + bm.technique_common = materials; + return bm; + } + + private static library_visual_scenes MakeVisualScenesLibrary(ref Model3D mdl) + { + library_visual_scenes lib_visuals = new library_visual_scenes(); + visual_scene vs = new visual_scene(); + vs.id = "scene"; + node geo_node = new node(); + geo_node.id = "node"; + geo_node.name = "node"; + geo_node.type = NodeType.NODE; + matrix transform_matrix = new matrix(); + transform_matrix.Values = new double[] { + 1, 0, 0, 0, + 0, 0,-1, 0, + 0, 1, 0, 0, + 0, 0, 0, 1 + }; + geo_node.Items = new object[] { + transform_matrix + }; + geo_node.ItemsElementName = new ItemsChoiceType2[] { + ItemsChoiceType2.matrix + }; + transform_matrix.sid = "transform"; + int len = mdl.builder.TextureImages.Count; + + instance_geometry geo = new instance_geometry(); + geo.url = "#geometry"; + geo.bind_material = MakeBindedMaterial(ref mdl); + + geo_node.instance_geometry = new instance_geometry[] { geo }; + + vs.node = new node[] { geo_node }; + lib_visuals.visual_scene = new visual_scene[] { vs }; + return lib_visuals; + } + + private static void WriteAllTextures(List textures, string modelName) + { + for(int img_index = 0; img_index < textures.Count; img_index++) + { + string filepath = Directory.GetCurrentDirectory() + "\\" + modelName + "\\" + img_index + ".png"; + (new FileInfo(filepath)).Directory.Create(); + textures[img_index].Save(filepath, System.Drawing.Imaging.ImageFormat.Png); + } + } + + public static void dumpModelToCOLLADA(Model3D mdl, float scale) + { + _scale = scale; + COLLADA model = new COLLADA(); + model.scene = new COLLADAScene(); + model.scene.instance_visual_scene = new InstanceWithExtra(); + model.scene.instance_visual_scene.url = "#scene"; + model.asset = new asset(); + model.asset.unit = new assetUnit(); + model.asset.unit.meter = 1.0; + model.asset.unit.name = "meter"; + model.asset.up_axis = UpAxisType.Z_UP; + + model.Items = new object[] { + MakeImagesLibrary(ref mdl, "Test"), + MakeEffectsLibrary(ref mdl, "Test"), + MakeMaterialsLibrary(ref mdl), + MakeGeometryLibrary(ref mdl), + MakeVisualScenesLibrary(ref mdl) + }; + WriteAllTextures(mdl.builder.TextureImages, "Test"); + model.Save("Test.dae"); + } + } +} diff --git a/src/COLLADA/collada_schema_1_4.cs b/src/COLLADA/collada_schema_1_4.cs new file mode 100644 index 0000000..655f2fd --- /dev/null +++ b/src/COLLADA/collada_schema_1_4.cs @@ -0,0 +1,9977 @@ +//------------------------------------------------------------------------------ +// Collada auto-generated model object from schema 1.4.1 +// This file was patched manually in order to be able to use it +// see http://code4k.blogspot.com/2010/08/import-and-export-3d-collada-files-with.html for more information +// Author: @lx +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Xml; +using System.Xml.Serialization; + +namespace Collada141 +{ + // + // This source code was auto-generated by xsd, Version=4.0.30319.1. + // + + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] +// [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public partial class COLLADA + { + private asset assetField; + private extra[] extraField; + + private object[] itemsField; + + private COLLADAScene sceneField; + + private VersionType versionField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("library_animation_clips", typeof (library_animation_clips))] + [XmlElement("library_animations", typeof (library_animations))] + [XmlElement("library_cameras", typeof (library_cameras))] + [XmlElement("library_controllers", typeof (library_controllers))] + [XmlElement("library_effects", typeof (library_effects))] + [XmlElement("library_force_fields", typeof (library_force_fields))] + [XmlElement("library_geometries", typeof (library_geometries))] + [XmlElement("library_images", typeof (library_images))] + [XmlElement("library_lights", typeof (library_lights))] + [XmlElement("library_materials", typeof (library_materials))] + [XmlElement("library_nodes", typeof (library_nodes))] + [XmlElement("library_physics_materials", typeof (library_physics_materials))] + [XmlElement("library_physics_models", typeof (library_physics_models))] + [XmlElement("library_physics_scenes", typeof (library_physics_scenes))] + [XmlElement("library_visual_scenes", typeof (library_visual_scenes))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + public COLLADAScene scene + { + get { return sceneField; } + set { sceneField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute] + public VersionType version + { + get { return versionField; } + set { versionField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class asset + { + private assetContributor[] contributorField; + + private DateTime createdField; + + private string keywordsField; + + private DateTime modifiedField; + + private string revisionField; + + private string subjectField; + + private string titleField; + + private assetUnit unitField; + + private UpAxisType up_axisField; + + public asset() + { + up_axisField = UpAxisType.Y_UP; + } + + /// + [XmlElement("contributor")] + public assetContributor[] contributor + { + get { return contributorField; } + set { contributorField = value; } + } + + /// + public DateTime created + { + get { return createdField; } + set { createdField = value; } + } + + /// + public string keywords + { + get { return keywordsField; } + set { keywordsField = value; } + } + + /// + public DateTime modified + { + get { return modifiedField; } + set { modifiedField = value; } + } + + /// + public string revision + { + get { return revisionField; } + set { revisionField = value; } + } + + /// + public string subject + { + get { return subjectField; } + set { subjectField = value; } + } + + /// + public string title + { + get { return titleField; } + set { titleField = value; } + } + + /// + public assetUnit unit + { + get { return unitField; } + set { unitField = value; } + } + + /// + [DefaultValue(UpAxisType.Y_UP)] + public UpAxisType up_axis + { + get { return up_axisField; } + set { up_axisField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class assetContributor + { + private string authorField; + + private string authoring_toolField; + + private string commentsField; + + private string copyrightField; + + private string source_dataField; + + /// + public string author + { + get { return authorField; } + set { authorField = value; } + } + + /// + public string authoring_tool + { + get { return authoring_toolField; } + set { authoring_toolField = value; } + } + + /// + public string comments + { + get { return commentsField; } + set { commentsField = value; } + } + + /// + public string copyright + { + get { return copyrightField; } + set { copyrightField = value; } + } + + /// + [XmlElement(DataType = "anyURI")] + public string source_data + { + get { return source_dataField; } + set { source_dataField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_init_from_common + { + private fx_surface_face_enum faceField; + private uint mipField; + + private uint sliceField; + + private string valueField; + + public fx_surface_init_from_common() + { + mipField = ((0)); + sliceField = ((0)); + faceField = fx_surface_face_enum.POSITIVE_X; + } + + /// + [XmlAttribute] + [DefaultValue(typeof (uint), "0")] + public uint mip + { + get { return mipField; } + set { mipField = value; } + } + + /// + [XmlAttribute] + [DefaultValue(typeof (uint), "0")] + public uint slice + { + get { return sliceField; } + set { sliceField = value; } + } + + /// + [XmlAttribute] + [DefaultValue(fx_surface_face_enum.POSITIVE_X)] + public fx_surface_face_enum face + { + get { return faceField; } + set { faceField = value; } + } + + /// + [XmlText(DataType = "IDREF")] + public string Value + { + get { return valueField; } + set { valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum fx_surface_face_enum + { + /// + POSITIVE_X, + + /// + NEGATIVE_X, + + /// + POSITIVE_Y, + + /// + NEGATIVE_Y, + + /// + POSITIVE_Z, + + /// + NEGATIVE_Z, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class common_newparam_type + { + private ItemChoiceType itemElementNameField; + private object itemField; + private string semanticField; + + private string sidField; + + /// + [XmlElement(DataType = "NCName")] + public string semantic + { + get { return semanticField; } + set { semanticField = value; } + } + + /// + [XmlElement("float", typeof (double))] + [XmlElement("float2", typeof (double))] + [XmlElement("float3", typeof (double))] + [XmlElement("float4", typeof (double))] + [XmlElement("sampler2D", typeof (fx_sampler2D_common))] + [XmlElement("surface", typeof (fx_surface_common))] + [XmlChoiceIdentifier("ItemElementName")] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + + /// + [XmlIgnore] + public ItemChoiceType ItemElementName + { + get { return itemElementNameField; } + set { itemElementNameField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_sampler2D_common + { + private string border_colorField; + private extra[] extraField; + private fx_sampler_filter_common magfilterField; + private fx_sampler_filter_common minfilterField; + + private fx_sampler_filter_common mipfilterField; + + private float mipmap_biasField; + private byte mipmap_maxlevelField; + private string sourceField; + + private fx_sampler_wrap_common wrap_sField; + + private fx_sampler_wrap_common wrap_tField; + + public fx_sampler2D_common() + { + wrap_sField = fx_sampler_wrap_common.WRAP; + wrap_tField = fx_sampler_wrap_common.WRAP; + minfilterField = fx_sampler_filter_common.NONE; + magfilterField = fx_sampler_filter_common.NONE; + mipfilterField = fx_sampler_filter_common.NONE; + mipmap_maxlevelField = ((255)); + mipmap_biasField = ((0F)); + } + + /// + [XmlElement(DataType = "NCName")] + public string source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_s + { + get { return wrap_sField; } + set { wrap_sField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_t + { + get { return wrap_tField; } + set { wrap_tField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common minfilter + { + get { return minfilterField; } + set { minfilterField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common magfilter + { + get { return magfilterField; } + set { magfilterField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common mipfilter + { + get { return mipfilterField; } + set { mipfilterField = value; } + } + + /// + public string border_color + { + get { return border_colorField; } + set { border_colorField = value; } + } + + /// + [DefaultValue(typeof (byte), "255")] + public byte mipmap_maxlevel + { + get { return mipmap_maxlevelField; } + set { mipmap_maxlevelField = value; } + } + + /// + [DefaultValue(typeof (float), "0")] + public float mipmap_bias + { + get { return mipmap_biasField; } + set { mipmap_biasField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum fx_sampler_wrap_common + { + /// + NONE, + + /// + WRAP, + + /// + MIRROR, + + /// + CLAMP, + + /// + BORDER, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum fx_sampler_filter_common + { + /// + NONE, + + /// + NEAREST, + + /// + LINEAR, + + /// + NEAREST_MIPMAP_NEAREST, + + /// + LINEAR_MIPMAP_NEAREST, + + /// + NEAREST_MIPMAP_LINEAR, + + /// + LINEAR_MIPMAP_LINEAR, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class extra + { + private asset assetField; + + private string idField; + + private string nameField; + private technique[] techniqueField; + + private string typeField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute(DataType = "NMTOKEN")] + public string type + { + get { return typeField; } + set { typeField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class technique + { + private XmlElement[] anyField; + + private string profileField; + + /// + [XmlAnyElement] + public XmlElement[] Any + { + get { return anyField; } + set { anyField = value; } + } + + /// + [XmlAttribute(DataType = "NMTOKEN")] + public string profile + { + get { return profileField; } + set { profileField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_common + { + private extra[] extraField; + private string formatField; + + private fx_surface_format_hint_common format_hintField; + private object init_as_nullField; + + private object init_as_targetField; + + private fx_surface_init_cube_common init_cubeField; + + private fx_surface_init_from_common[] init_fromField; + private fx_surface_init_planar_common init_planarField; + private fx_surface_init_volume_common init_volumeField; + + private object itemField; + + private uint mip_levelsField; + + private bool mipmap_generateField; + + private bool mipmap_generateFieldSpecified; + + private fx_surface_type_enum typeField; + + public fx_surface_common() + { + mip_levelsField = ((0)); + } + + /// + public object init_as_null + { + get { return init_as_nullField; } + set { init_as_nullField = value; } + } + + /// + public object init_as_target + { + get { return init_as_targetField; } + set { init_as_targetField = value; } + } + + /// + public fx_surface_init_cube_common init_cube + { + get { return init_cubeField; } + set { init_cubeField = value; } + } + + /// + public fx_surface_init_volume_common init_volume + { + get { return init_volumeField; } + set { init_volumeField = value; } + } + + /// + public fx_surface_init_planar_common init_planar + { + get { return init_planarField; } + set { init_planarField = value; } + } + + /// + [XmlElement("init_from")] + public fx_surface_init_from_common[] init_from + { + get { return init_fromField; } + set { init_fromField = value; } + } + + /// + [XmlElement(DataType = "token")] + public string format + { + get { return formatField; } + set { formatField = value; } + } + + /// + public fx_surface_format_hint_common format_hint + { + get { return format_hintField; } + set { format_hintField = value; } + } + + /// + [XmlElement("size", typeof (long))] + [XmlElement("viewport_ratio", typeof (double))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + + /// + [DefaultValue(typeof (uint), "0")] + public uint mip_levels + { + get { return mip_levelsField; } + set { mip_levelsField = value; } + } + + /// + public bool mipmap_generate + { + get { return mipmap_generateField; } + set { mipmap_generateField = value; } + } + + /// + [XmlIgnore] + public bool mipmap_generateSpecified + { + get { return mipmap_generateFieldSpecified; } + set { mipmap_generateFieldSpecified = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute] + public fx_surface_type_enum type + { + get { return typeField; } + set { typeField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_init_cube_common + { + private object[] itemsField; + + /// + [XmlElement("all", typeof (fx_surface_init_cube_commonAll))] + [XmlElement("face", typeof (fx_surface_init_cube_commonFace))] + [XmlElement("primary", typeof (fx_surface_init_cube_commonPrimary))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_init_cube_commonAll + { + private string refField; + + /// + [XmlAttribute(DataType = "IDREF")] + public string @ref + { + get { return refField; } + set { refField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_init_cube_commonFace + { + private string refField; + + /// + [XmlAttribute(DataType = "IDREF")] + public string @ref + { + get { return refField; } + set { refField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_init_cube_commonPrimary + { + private fx_surface_face_enum[] orderField; + + private string refField; + + /// + [XmlElement("order")] + public fx_surface_face_enum[] order + { + get { return orderField; } + set { orderField = value; } + } + + /// + [XmlAttribute(DataType = "IDREF")] + public string @ref + { + get { return refField; } + set { refField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_init_volume_common + { + private object itemField; + + /// + [XmlElement("all", typeof (fx_surface_init_volume_commonAll))] + [XmlElement("primary", typeof (fx_surface_init_volume_commonPrimary))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_init_volume_commonAll + { + private string refField; + + /// + [XmlAttribute(DataType = "IDREF")] + public string @ref + { + get { return refField; } + set { refField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_init_volume_commonPrimary + { + private string refField; + + /// + [XmlAttribute(DataType = "IDREF")] + public string @ref + { + get { return refField; } + set { refField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_init_planar_common + { + private fx_surface_init_planar_commonAll itemField; + + /// + [XmlElement("all")] + public fx_surface_init_planar_commonAll Item + { + get { return itemField; } + set { itemField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_init_planar_commonAll + { + private string refField; + + /// + [XmlAttribute(DataType = "IDREF")] + public string @ref + { + get { return refField; } + set { refField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_surface_format_hint_common + { + private fx_surface_format_hint_channels_enum channelsField; + private extra[] extraField; + private fx_surface_format_hint_option_enum[] optionField; + + private fx_surface_format_hint_precision_enum precisionField; + + private bool precisionFieldSpecified; + private fx_surface_format_hint_range_enum rangeField; + + /// + public fx_surface_format_hint_channels_enum channels + { + get { return channelsField; } + set { channelsField = value; } + } + + /// + public fx_surface_format_hint_range_enum range + { + get { return rangeField; } + set { rangeField = value; } + } + + /// + public fx_surface_format_hint_precision_enum precision + { + get { return precisionField; } + set { precisionField = value; } + } + + /// + [XmlIgnore] + public bool precisionSpecified + { + get { return precisionFieldSpecified; } + set { precisionFieldSpecified = value; } + } + + /// + [XmlElement("option")] + public fx_surface_format_hint_option_enum[] option + { + get { return optionField; } + set { optionField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum fx_surface_format_hint_channels_enum + { + /// + RGB, + + /// + RGBA, + + /// + L, + + /// + LA, + + /// + D, + + /// + XYZ, + + /// + XYZW, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum fx_surface_format_hint_range_enum + { + /// + SNORM, + + /// + UNORM, + + /// + SINT, + + /// + UINT, + + /// + FLOAT, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum fx_surface_format_hint_precision_enum + { + /// + LOW, + + /// + MID, + + /// + HIGH, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum fx_surface_format_hint_option_enum + { + /// + SRGB_GAMMA, + + /// + NORMALIZED3, + + /// + NORMALIZED4, + + /// + COMPRESSABLE, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum fx_surface_type_enum + { + /// + UNTYPED, + + /// + [XmlEnum("1D")] Item1D, + + /// + [XmlEnum("2D")] Item2D, + + /// + [XmlEnum("3D")] Item3D, + + /// + RECT, + + /// + CUBE, + + /// + DEPTH, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IncludeInSchema = false)] + public enum ItemChoiceType + { + /// + @float, + + /// + float2, + + /// + float3, + + /// + float4, + + /// + sampler2D, + + /// + surface, + } + + /// + [XmlInclude(typeof (common_transparent_type))] + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class common_color_or_texture_type + { + private object itemField; + + /// + [XmlElement("color", typeof (common_color_or_texture_typeColor))] + [XmlElement("param", typeof (common_color_or_texture_typeParam))] + [XmlElement("texture", typeof (common_color_or_texture_typeTexture))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class common_color_or_texture_typeColor + { + private string sidField; + + private double[] textField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public string _Text_ + { + get { return COLLADA.ConvertFromArray(Values); } + + set { Values = COLLADA.ConvertDoubleArray(value); } + } + + /// + [XmlIgnore] + public double[] Values + { + get { return textField; } + set { textField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class common_color_or_texture_typeParam + { + private string refField; + + /// + [XmlAttribute(DataType = "NCName")] + public string @ref + { + get { return refField; } + set { refField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class common_color_or_texture_typeTexture + { + private extra extraField; + + private string texcoordField; + private string textureField; + + /// + public extra extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string texture + { + get { return textureField; } + set { textureField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string texcoord + { + get { return texcoordField; } + set { texcoordField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class common_transparent_type : common_color_or_texture_type + { + private fx_opaque_enum opaqueField; + + public common_transparent_type() + { + opaqueField = fx_opaque_enum.A_ONE; + } + + /// + [XmlAttribute] + [DefaultValue(fx_opaque_enum.A_ONE)] + public fx_opaque_enum opaque + { + get { return opaqueField; } + set { opaqueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum fx_opaque_enum + { + /// + A_ONE, + + /// + RGB_ZERO, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class common_float_or_param_type + { + private object itemField; + + /// + [XmlElement("float", typeof (common_float_or_param_typeFloat))] + [XmlElement("param", typeof (common_float_or_param_typeParam))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class common_float_or_param_typeFloat + { + private string sidField; + + private double valueField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public double Value + { + get { return valueField; } + set { valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class common_float_or_param_typeParam + { + private string refField; + + /// + [XmlAttribute(DataType = "NCName")] + public string @ref + { + get { return refField; } + set { refField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_include_common + { + private string sidField; + + private string urlField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string url + { + get { return urlField; } + set { urlField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_samplerDEPTH_common + { + private extra[] extraField; + private fx_sampler_filter_common magfilterField; + private fx_sampler_filter_common minfilterField; + private string sourceField; + + private fx_sampler_wrap_common wrap_sField; + + private fx_sampler_wrap_common wrap_tField; + + public fx_samplerDEPTH_common() + { + wrap_sField = fx_sampler_wrap_common.WRAP; + wrap_tField = fx_sampler_wrap_common.WRAP; + minfilterField = fx_sampler_filter_common.NONE; + magfilterField = fx_sampler_filter_common.NONE; + } + + /// + [XmlElement(DataType = "NCName")] + public string source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_s + { + get { return wrap_sField; } + set { wrap_sField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_t + { + get { return wrap_tField; } + set { wrap_tField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common minfilter + { + get { return minfilterField; } + set { minfilterField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common magfilter + { + get { return magfilterField; } + set { magfilterField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_samplerRECT_common + { + private string border_colorField; + private extra[] extraField; + private fx_sampler_filter_common magfilterField; + private fx_sampler_filter_common minfilterField; + + private fx_sampler_filter_common mipfilterField; + + private float mipmap_biasField; + private byte mipmap_maxlevelField; + private string sourceField; + + private fx_sampler_wrap_common wrap_sField; + + private fx_sampler_wrap_common wrap_tField; + + public fx_samplerRECT_common() + { + wrap_sField = fx_sampler_wrap_common.WRAP; + wrap_tField = fx_sampler_wrap_common.WRAP; + minfilterField = fx_sampler_filter_common.NONE; + magfilterField = fx_sampler_filter_common.NONE; + mipfilterField = fx_sampler_filter_common.NONE; + mipmap_maxlevelField = ((255)); + mipmap_biasField = ((0F)); + } + + /// + [XmlElement(DataType = "NCName")] + public string source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_s + { + get { return wrap_sField; } + set { wrap_sField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_t + { + get { return wrap_tField; } + set { wrap_tField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common minfilter + { + get { return minfilterField; } + set { minfilterField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common magfilter + { + get { return magfilterField; } + set { magfilterField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common mipfilter + { + get { return mipfilterField; } + set { mipfilterField = value; } + } + + /// + public string border_color + { + get { return border_colorField; } + set { border_colorField = value; } + } + + /// + [DefaultValue(typeof (byte), "255")] + public byte mipmap_maxlevel + { + get { return mipmap_maxlevelField; } + set { mipmap_maxlevelField = value; } + } + + /// + [DefaultValue(typeof (float), "0")] + public float mipmap_bias + { + get { return mipmap_biasField; } + set { mipmap_biasField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_samplerCUBE_common + { + private string border_colorField; + private extra[] extraField; + private fx_sampler_filter_common magfilterField; + private fx_sampler_filter_common minfilterField; + + private fx_sampler_filter_common mipfilterField; + + private float mipmap_biasField; + private byte mipmap_maxlevelField; + private string sourceField; + private fx_sampler_wrap_common wrap_pField; + private fx_sampler_wrap_common wrap_sField; + + private fx_sampler_wrap_common wrap_tField; + + public fx_samplerCUBE_common() + { + wrap_sField = fx_sampler_wrap_common.WRAP; + wrap_tField = fx_sampler_wrap_common.WRAP; + wrap_pField = fx_sampler_wrap_common.WRAP; + minfilterField = fx_sampler_filter_common.NONE; + magfilterField = fx_sampler_filter_common.NONE; + mipfilterField = fx_sampler_filter_common.NONE; + mipmap_maxlevelField = ((255)); + mipmap_biasField = ((0F)); + } + + /// + [XmlElement(DataType = "NCName")] + public string source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_s + { + get { return wrap_sField; } + set { wrap_sField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_t + { + get { return wrap_tField; } + set { wrap_tField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_p + { + get { return wrap_pField; } + set { wrap_pField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common minfilter + { + get { return minfilterField; } + set { minfilterField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common magfilter + { + get { return magfilterField; } + set { magfilterField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common mipfilter + { + get { return mipfilterField; } + set { mipfilterField = value; } + } + + /// + public string border_color + { + get { return border_colorField; } + set { border_colorField = value; } + } + + /// + [DefaultValue(typeof (byte), "255")] + public byte mipmap_maxlevel + { + get { return mipmap_maxlevelField; } + set { mipmap_maxlevelField = value; } + } + + /// + [DefaultValue(typeof (float), "0")] + public float mipmap_bias + { + get { return mipmap_biasField; } + set { mipmap_biasField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_sampler3D_common + { + private string border_colorField; + private extra[] extraField; + private fx_sampler_filter_common magfilterField; + private fx_sampler_filter_common minfilterField; + + private fx_sampler_filter_common mipfilterField; + + private float mipmap_biasField; + private byte mipmap_maxlevelField; + private string sourceField; + private fx_sampler_wrap_common wrap_pField; + private fx_sampler_wrap_common wrap_sField; + + private fx_sampler_wrap_common wrap_tField; + + public fx_sampler3D_common() + { + wrap_sField = fx_sampler_wrap_common.WRAP; + wrap_tField = fx_sampler_wrap_common.WRAP; + wrap_pField = fx_sampler_wrap_common.WRAP; + minfilterField = fx_sampler_filter_common.NONE; + magfilterField = fx_sampler_filter_common.NONE; + mipfilterField = fx_sampler_filter_common.NONE; + mipmap_maxlevelField = ((255)); + mipmap_biasField = ((0F)); + } + + /// + [XmlElement(DataType = "NCName")] + public string source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_s + { + get { return wrap_sField; } + set { wrap_sField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_t + { + get { return wrap_tField; } + set { wrap_tField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_p + { + get { return wrap_pField; } + set { wrap_pField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common minfilter + { + get { return minfilterField; } + set { minfilterField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common magfilter + { + get { return magfilterField; } + set { magfilterField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common mipfilter + { + get { return mipfilterField; } + set { mipfilterField = value; } + } + + /// + public string border_color + { + get { return border_colorField; } + set { border_colorField = value; } + } + + /// + [DefaultValue(typeof (byte), "255")] + public byte mipmap_maxlevel + { + get { return mipmap_maxlevelField; } + set { mipmap_maxlevelField = value; } + } + + /// + [DefaultValue(typeof (float), "0")] + public float mipmap_bias + { + get { return mipmap_biasField; } + set { mipmap_biasField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_sampler1D_common + { + private string border_colorField; + private extra[] extraField; + private fx_sampler_filter_common magfilterField; + private fx_sampler_filter_common minfilterField; + + private fx_sampler_filter_common mipfilterField; + + private float mipmap_biasField; + private byte mipmap_maxlevelField; + private string sourceField; + + private fx_sampler_wrap_common wrap_sField; + + public fx_sampler1D_common() + { + wrap_sField = fx_sampler_wrap_common.WRAP; + minfilterField = fx_sampler_filter_common.NONE; + magfilterField = fx_sampler_filter_common.NONE; + mipfilterField = fx_sampler_filter_common.NONE; + mipmap_maxlevelField = ((0)); + mipmap_biasField = ((0F)); + } + + /// + [XmlElement(DataType = "NCName")] + public string source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + [DefaultValue(fx_sampler_wrap_common.WRAP)] + public fx_sampler_wrap_common wrap_s + { + get { return wrap_sField; } + set { wrap_sField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common minfilter + { + get { return minfilterField; } + set { minfilterField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common magfilter + { + get { return magfilterField; } + set { magfilterField = value; } + } + + /// + [DefaultValue(fx_sampler_filter_common.NONE)] + public fx_sampler_filter_common mipfilter + { + get { return mipfilterField; } + set { mipfilterField = value; } + } + + /// + public string border_color + { + get { return border_colorField; } + set { border_colorField = value; } + } + + /// + [DefaultValue(typeof (byte), "0")] + public byte mipmap_maxlevel + { + get { return mipmap_maxlevelField; } + set { mipmap_maxlevelField = value; } + } + + /// + [DefaultValue(typeof (float), "0")] + public float mipmap_bias + { + get { return mipmap_biasField; } + set { mipmap_biasField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class InputGlobal + { + private string semanticField; + + private string sourceField; + + /// + [XmlAttribute(DataType = "NMTOKEN")] + public string semantic + { + get { return semanticField; } + set { semanticField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string source + { + get { return sourceField; } + set { sourceField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_newparam_common + { + private fx_annotate_common[] annotateField; + + private string bool2Field; + + private string bool3Field; + + private string bool4Field; + private bool boolField; + private string enumField; + + private double float1x1Field; + + private string float1x2Field; + + private string float1x3Field; + + private string float1x4Field; + private string float2Field; + + private string float2x1Field; + + private string float2x2Field; + + private string float2x3Field; + + private string float2x4Field; + private string float3Field; + + private string float3x1Field; + + private string float3x2Field; + + private string float3x3Field; + + private string float3x4Field; + private string float4Field; + + private string float4x1Field; + + private string float4x2Field; + + private string float4x3Field; + + private string float4x4Field; + private double floatField; + private string int2Field; + + private string int3Field; + + private string int4Field; + private long intField; + private fx_modifier_enum_common modifierField; + + private bool modifierFieldSpecified; + + private fx_sampler1D_common sampler1DField; + + private fx_sampler2D_common sampler2DField; + + private fx_sampler3D_common sampler3DField; + + private fx_samplerCUBE_common samplerCUBEField; + + private fx_samplerDEPTH_common samplerDEPTHField; + private fx_samplerRECT_common samplerRECTField; + private string semanticField; + + private string sidField; + private fx_surface_common surfaceField; + + /// + [XmlElement("annotate")] + public fx_annotate_common[] annotate + { + get { return annotateField; } + set { annotateField = value; } + } + + /// + [XmlElement(DataType = "NCName")] + public string semantic + { + get { return semanticField; } + set { semanticField = value; } + } + + /// + public fx_modifier_enum_common modifier + { + get { return modifierField; } + set { modifierField = value; } + } + + /// + [XmlIgnore] + public bool modifierSpecified + { + get { return modifierFieldSpecified; } + set { modifierFieldSpecified = value; } + } + + /// + public bool @bool + { + get { return boolField; } + set { boolField = value; } + } + + /// + public string bool2 + { + get { return bool2Field; } + set { bool2Field = value; } + } + + /// + public string bool3 + { + get { return bool3Field; } + set { bool3Field = value; } + } + + /// + public string bool4 + { + get { return bool4Field; } + set { bool4Field = value; } + } + + /// + public long @int + { + get { return intField; } + set { intField = value; } + } + + /// + public string int2 + { + get { return int2Field; } + set { int2Field = value; } + } + + /// + public string int3 + { + get { return int3Field; } + set { int3Field = value; } + } + + /// + public string int4 + { + get { return int4Field; } + set { int4Field = value; } + } + + /// + public double @float + { + get { return floatField; } + set { floatField = value; } + } + + /// + public string float2 + { + get { return float2Field; } + set { float2Field = value; } + } + + /// + public string float3 + { + get { return float3Field; } + set { float3Field = value; } + } + + /// + public string float4 + { + get { return float4Field; } + set { float4Field = value; } + } + + /// + public double float1x1 + { + get { return float1x1Field; } + set { float1x1Field = value; } + } + + /// + public string float1x2 + { + get { return float1x2Field; } + set { float1x2Field = value; } + } + + /// + public string float1x3 + { + get { return float1x3Field; } + set { float1x3Field = value; } + } + + /// + public string float1x4 + { + get { return float1x4Field; } + set { float1x4Field = value; } + } + + /// + public string float2x1 + { + get { return float2x1Field; } + set { float2x1Field = value; } + } + + /// + public string float2x2 + { + get { return float2x2Field; } + set { float2x2Field = value; } + } + + /// + public string float2x3 + { + get { return float2x3Field; } + set { float2x3Field = value; } + } + + /// + public string float2x4 + { + get { return float2x4Field; } + set { float2x4Field = value; } + } + + /// + public string float3x1 + { + get { return float3x1Field; } + set { float3x1Field = value; } + } + + /// + public string float3x2 + { + get { return float3x2Field; } + set { float3x2Field = value; } + } + + /// + public string float3x3 + { + get { return float3x3Field; } + set { float3x3Field = value; } + } + + /// + public string float3x4 + { + get { return float3x4Field; } + set { float3x4Field = value; } + } + + /// + public string float4x1 + { + get { return float4x1Field; } + set { float4x1Field = value; } + } + + /// + public string float4x2 + { + get { return float4x2Field; } + set { float4x2Field = value; } + } + + /// + public string float4x3 + { + get { return float4x3Field; } + set { float4x3Field = value; } + } + + /// + public string float4x4 + { + get { return float4x4Field; } + set { float4x4Field = value; } + } + + /// + public fx_surface_common surface + { + get { return surfaceField; } + set { surfaceField = value; } + } + + /// + public fx_sampler1D_common sampler1D + { + get { return sampler1DField; } + set { sampler1DField = value; } + } + + /// + public fx_sampler2D_common sampler2D + { + get { return sampler2DField; } + set { sampler2DField = value; } + } + + /// + public fx_sampler3D_common sampler3D + { + get { return sampler3DField; } + set { sampler3DField = value; } + } + + /// + public fx_samplerCUBE_common samplerCUBE + { + get { return samplerCUBEField; } + set { samplerCUBEField = value; } + } + + /// + public fx_samplerRECT_common samplerRECT + { + get { return samplerRECTField; } + set { samplerRECTField = value; } + } + + /// + public fx_samplerDEPTH_common samplerDEPTH + { + get { return samplerDEPTHField; } + set { samplerDEPTHField = value; } + } + + /// + public string @enum + { + get { return enumField; } + set { enumField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class fx_annotate_common + { + private string bool2Field; + + private string bool3Field; + + private string bool4Field; + private bool boolField; + + private string float2Field; + + private string float2x2Field; + private string float3Field; + + private string float3x3Field; + private string float4Field; + + private string float4x4Field; + private double floatField; + private string int2Field; + + private string int3Field; + + private string int4Field; + private long intField; + + private string nameField; + private string stringField; + + /// + public bool @bool + { + get { return boolField; } + set { boolField = value; } + } + + /// + public string bool2 + { + get { return bool2Field; } + set { bool2Field = value; } + } + + /// + public string bool3 + { + get { return bool3Field; } + set { bool3Field = value; } + } + + /// + public string bool4 + { + get { return bool4Field; } + set { bool4Field = value; } + } + + /// + public long @int + { + get { return intField; } + set { intField = value; } + } + + /// + public string int2 + { + get { return int2Field; } + set { int2Field = value; } + } + + /// + public string int3 + { + get { return int3Field; } + set { int3Field = value; } + } + + /// + public string int4 + { + get { return int4Field; } + set { int4Field = value; } + } + + /// + public double @float + { + get { return floatField; } + set { floatField = value; } + } + + /// + public string float2 + { + get { return float2Field; } + set { float2Field = value; } + } + + /// + public string float3 + { + get { return float3Field; } + set { float3Field = value; } + } + + /// + public string float4 + { + get { return float4Field; } + set { float4Field = value; } + } + + /// + public string float2x2 + { + get { return float2x2Field; } + set { float2x2Field = value; } + } + + /// + public string float3x3 + { + get { return float3x3Field; } + set { float3x3Field = value; } + } + + /// + public string float4x4 + { + get { return float4x4Field; } + set { float4x4Field = value; } + } + + /// + public string @string + { + get { return stringField; } + set { stringField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum fx_modifier_enum_common + { + /// + CONST, + + /// + UNIFORM, + + /// + VARYING, + + /// + STATIC, + + /// + VOLATILE, + + /// + EXTERN, + + /// + SHARED, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class InputLocalOffset + { + private ulong offsetField; + + private string semanticField; + + private ulong setField; + + private bool setFieldSpecified; + private string sourceField; + + /// + [XmlAttribute] + public ulong offset + { + get { return offsetField; } + set { offsetField = value; } + } + + /// + [XmlAttribute(DataType = "NMTOKEN")] + public string semantic + { + get { return semanticField; } + set { semanticField = value; } + } + + /// + [XmlAttribute] + public string source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + [XmlAttribute] + public ulong set + { + get { return setField; } + set { setField = value; } + } + + /// + [XmlIgnore] + public bool setSpecified + { + get { return setFieldSpecified; } + set { setFieldSpecified = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class TargetableFloat + { + private string sidField; + + private double valueField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public double Value + { + get { return valueField; } + set { valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class InputLocal + { + private string semanticField; + + private string sourceField; + + /// + [XmlAttribute(DataType = "NMTOKEN")] + public string semantic + { + get { return semanticField; } + set { semanticField = value; } + } + + /// + [XmlAttribute] + public string source + { + get { return sourceField; } + set { sourceField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class instance_material + { + private instance_materialBind[] bindField; + + private instance_materialBind_vertex_input[] bind_vertex_inputField; + + private extra[] extraField; + private string nameField; + private string sidField; + + private string symbolField; + + private string targetField; + + /// + [XmlElement("bind")] + public instance_materialBind[] bind + { + get { return bindField; } + set { bindField = value; } + } + + /// + [XmlElement("bind_vertex_input")] + public instance_materialBind_vertex_input[] bind_vertex_input + { + get { return bind_vertex_inputField; } + set { bind_vertex_inputField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string symbol + { + get { return symbolField; } + set { symbolField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string target + { + get { return targetField; } + set { targetField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class instance_materialBind + { + private string semanticField; + + private string targetField; + + /// + [XmlAttribute(DataType = "NCName")] + public string semantic + { + get { return semanticField; } + set { semanticField = value; } + } + + /// + [XmlAttribute(DataType = "token")] + public string target + { + get { return targetField; } + set { targetField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class instance_materialBind_vertex_input + { + private string input_semanticField; + + private ulong input_setField; + + private bool input_setFieldSpecified; + private string semanticField; + + /// + [XmlAttribute(DataType = "NCName")] + public string semantic + { + get { return semanticField; } + set { semanticField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string input_semantic + { + get { return input_semanticField; } + set { input_semanticField = value; } + } + + /// + [XmlAttribute] + public ulong input_set + { + get { return input_setField; } + set { input_setField = value; } + } + + /// + [XmlIgnore] + public bool input_setSpecified + { + get { return input_setFieldSpecified; } + set { input_setFieldSpecified = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class assetUnit + { + private double meterField; + + private string nameField; + + public assetUnit() + { + meterField = 1D; + nameField = "meter"; + } + + /// + [XmlAttribute] + [DefaultValue(1D)] + public double meter + { + get { return meterField; } + set { meterField = value; } + } + + /// + [XmlAttribute(DataType = "NMTOKEN")] + [DefaultValue("meter")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum UpAxisType + { + /// + X_UP, + + /// + Y_UP, + + /// + Z_UP, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_animation_clips + { + private animation_clip[] animation_clipField; + private asset assetField; + + private extra[] extraField; + + private string idField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("animation_clip")] + public animation_clip[] animation_clip + { + get { return animation_clipField; } + set { animation_clipField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class animation_clip + { + private asset assetField; + private double endField; + + private bool endFieldSpecified; + + private extra[] extraField; + + private string idField; + private InstanceWithExtra[] instance_animationField; + + private string nameField; + + private double startField; + + public animation_clip() + { + startField = 0D; + } + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("instance_animation")] + public InstanceWithExtra[] instance_animation + { + get { return instance_animationField; } + set { instance_animationField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + [DefaultValue(0D)] + public double start + { + get { return startField; } + set { startField = value; } + } + + /// + [XmlAttribute] + public double end + { + get { return endField; } + set { endField = value; } + } + + /// + [XmlIgnore] + public bool endSpecified + { + get { return endFieldSpecified; } + set { endFieldSpecified = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot("instance_camera", Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class InstanceWithExtra + { + private extra[] extraField; + + private string nameField; + private string sidField; + private string urlField; + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string url + { + get { return urlField; } + set { urlField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_animations + { + private animation[] animationField; + private asset assetField; + + private extra[] extraField; + + private string idField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("animation")] + public animation[] animation + { + get { return animationField; } + set { animationField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class animation + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private object[] itemsField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("animation", typeof (animation))] + [XmlElement("channel", typeof (channel))] + [XmlElement("sampler", typeof (sampler))] + [XmlElement("source", typeof (source))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class channel + { + private string sourceField; + + private string targetField; + + /// + [XmlAttribute] + public string source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + [XmlAttribute(DataType = "token")] + public string target + { + get { return targetField; } + set { targetField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class sampler + { + private string idField; + private InputLocal[] inputField; + + /// + [XmlElement("input")] + public InputLocal[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class source + { + private asset assetField; + + private string idField; + private object itemField; + + private string nameField; + private technique[] techniqueField; + private sourceTechnique_common technique_commonField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("IDREF_array", typeof (IDREF_array))] + [XmlElement("Name_array", typeof (Name_array))] + [XmlElement("bool_array", typeof (bool_array))] + [XmlElement("float_array", typeof (float_array))] + [XmlElement("int_array", typeof (int_array))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + + /// + public sourceTechnique_common technique_common + { + get { return technique_commonField; } + set { technique_commonField = value; } + } + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class IDREF_array + { + private ulong countField; + private string idField; + + private string nameField; + + private string valueField; + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlText(DataType = "IDREFS")] + public string Value + { + get { return valueField; } + set { valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class Name_array + { + private ulong countField; + private string idField; + + private string nameField; + + private string[] textField; + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlElement("Name")] + public string _Text_ + { + get { return COLLADA.ConvertFromArray(Values); } + + set { Values = COLLADA.ConvertStringArray(value); } + } + + [XmlIgnore] + public string[] Values + { + get { return textField; } + set { textField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class bool_array + { + private ulong countField; + private string idField; + + private string nameField; + + private bool[] textField; + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlText] + public string _Text_ + { + get { return COLLADA.ConvertFromArray(Values); } + + set { Values = COLLADA.ConvertBoolArray(value); } + } + + [XmlIgnore] + public bool[] Values + { + get { return textField; } + set { textField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + //[DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class float_array + { + private ulong countField; + + private short digitsField; + private string idField; + + private short magnitudeField; + private string nameField; + + private double[] textField; + + public float_array() + { + digitsField = ((6)); + magnitudeField = ((38)); + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlAttribute] + [DefaultValue(typeof (short), "6")] + public short digits + { + get { return digitsField; } + set { digitsField = value; } + } + + /// + [XmlAttribute] + [DefaultValue(typeof (short), "38")] + public short magnitude + { + get { return magnitudeField; } + set { magnitudeField = value; } + } + + /// + [XmlText] + public string _Text_ + { + get { return COLLADA.ConvertFromArray(Values); } + + set { Values = COLLADA.ConvertDoubleArray(value); } + } + + [XmlIgnore] + public double[] Values + { + get { return textField; } + set { textField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class int_array + { + private ulong countField; + private string idField; + + private string maxInclusiveField; + private string minInclusiveField; + private string nameField; + + private int[] textField; + + public int_array() + { + minInclusiveField = "-2147483648"; + maxInclusiveField = "2147483647"; + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlAttribute(DataType = "integer")] + [DefaultValue("-2147483648")] + public string minInclusive + { + get { return minInclusiveField; } + set { minInclusiveField = value; } + } + + /// + [XmlAttribute(DataType = "integer")] + [DefaultValue("2147483647")] + public string maxInclusive + { + get { return maxInclusiveField; } + set { maxInclusiveField = value; } + } + + /// + [XmlText] + public string _Text_ + { + get { return COLLADA.ConvertFromArray(Values); } + + set { Values = COLLADA.ConvertIntArray(value); } + } + + [XmlIgnore] + public int[] Values + { + get { return textField; } + set { textField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class sourceTechnique_common + { + private accessor accessorField; + + /// + public accessor accessor + { + get { return accessorField; } + set { accessorField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class accessor + { + private ulong countField; + + private ulong offsetField; + private param[] paramField; + + private string sourceField; + + private ulong strideField; + + public accessor() + { + offsetField = ((ulong) (0m)); + strideField = ((ulong) (1m)); + } + + /// + [XmlElement("param")] + public param[] param + { + get { return paramField; } + set { paramField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlAttribute] + [DefaultValue(typeof (ulong), "0")] + public ulong offset + { + get { return offsetField; } + set { offsetField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + [XmlAttribute] + [DefaultValue(typeof (ulong), "1")] + public ulong stride + { + get { return strideField; } + set { strideField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class param + { + private string nameField; + + private string semanticField; + private string sidField; + + private string typeField; + + private string valueField; + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "NMTOKEN")] + public string semantic + { + get { return semanticField; } + set { semanticField = value; } + } + + /// + [XmlAttribute(DataType = "NMTOKEN")] + public string type + { + get { return typeField; } + set { typeField = value; } + } + + /// + [XmlText] + public string Value + { + get { return valueField; } + set { valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_cameras + { + private asset assetField; + + private camera[] cameraField; + + private extra[] extraField; + + private string idField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("camera")] + public camera[] camera + { + get { return cameraField; } + set { cameraField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class camera + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private cameraImager imagerField; + + private string nameField; + private cameraOptics opticsField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + public cameraOptics optics + { + get { return opticsField; } + set { opticsField = value; } + } + + /// + public cameraImager imager + { + get { return imagerField; } + set { imagerField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class cameraOptics + { + private extra[] extraField; + private technique[] techniqueField; + private cameraOpticsTechnique_common technique_commonField; + + /// + public cameraOpticsTechnique_common technique_common + { + get { return technique_commonField; } + set { technique_commonField = value; } + } + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class cameraOpticsTechnique_common + { + private object itemField; + + /// + [XmlElement("orthographic", typeof (cameraOpticsTechnique_commonOrthographic))] + [XmlElement("perspective", typeof (cameraOpticsTechnique_commonPerspective))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class cameraOpticsTechnique_commonOrthographic + { + private ItemsChoiceType[] itemsElementNameField; + private TargetableFloat[] itemsField; + + private TargetableFloat zfarField; + private TargetableFloat znearField; + + /// + [XmlElement("aspect_ratio", typeof (TargetableFloat))] + [XmlElement("xmag", typeof (TargetableFloat))] + [XmlElement("ymag", typeof (TargetableFloat))] + [XmlChoiceIdentifier("ItemsElementName")] + public TargetableFloat[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlElement("ItemsElementName")] + [XmlIgnore] + public ItemsChoiceType[] ItemsElementName + { + get { return itemsElementNameField; } + set { itemsElementNameField = value; } + } + + /// + public TargetableFloat znear + { + get { return znearField; } + set { znearField = value; } + } + + /// + public TargetableFloat zfar + { + get { return zfarField; } + set { zfarField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IncludeInSchema = false)] + public enum ItemsChoiceType + { + /// + aspect_ratio, + + /// + xmag, + + /// + ymag, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class cameraOpticsTechnique_commonPerspective + { + private ItemsChoiceType1[] itemsElementNameField; + private TargetableFloat[] itemsField; + + private TargetableFloat zfarField; + private TargetableFloat znearField; + + /// + [XmlElement("aspect_ratio", typeof (TargetableFloat))] + [XmlElement("xfov", typeof (TargetableFloat))] + [XmlElement("yfov", typeof (TargetableFloat))] + [XmlChoiceIdentifier("ItemsElementName")] + public TargetableFloat[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlElement("ItemsElementName")] + [XmlIgnore] + public ItemsChoiceType1[] ItemsElementName + { + get { return itemsElementNameField; } + set { itemsElementNameField = value; } + } + + /// + public TargetableFloat znear + { + get { return znearField; } + set { znearField = value; } + } + + /// + public TargetableFloat zfar + { + get { return zfarField; } + set { zfarField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IncludeInSchema = false)] + public enum ItemsChoiceType1 + { + /// + aspect_ratio, + + /// + xfov, + + /// + yfov, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class cameraImager + { + private extra[] extraField; + private technique[] techniqueField; + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_controllers + { + private asset assetField; + + private controller[] controllerField; + + private extra[] extraField; + + private string idField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("controller")] + public controller[] controller + { + get { return controllerField; } + set { controllerField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class controller + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private object itemField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("morph", typeof (morph))] + [XmlElement("skin", typeof (skin))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class morph + { + private extra[] extraField; + + private MorphMethodType methodField; + + private string source1Field; + private source[] sourceField; + + private morphTargets targetsField; + + public morph() + { + methodField = MorphMethodType.NORMALIZED; + } + + /// + [XmlElement("source")] + public source[] source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + public morphTargets targets + { + get { return targetsField; } + set { targetsField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute] + [DefaultValue(MorphMethodType.NORMALIZED)] + public MorphMethodType method + { + get { return methodField; } + set { methodField = value; } + } + + /// + [XmlAttribute("source", DataType = "anyURI")] + public string source1 + { + get { return source1Field; } + set { source1Field = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class morphTargets + { + private extra[] extraField; + private InputLocal[] inputField; + + /// + [XmlElement("input")] + public InputLocal[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum MorphMethodType + { + /// + NORMALIZED, + + /// + RELATIVE, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class skin + { + private string bind_shape_matrixField; + + private extra[] extraField; + private skinJoints jointsField; + + private string source1Field; + private source[] sourceField; + private skinVertex_weights vertex_weightsField; + + /// + public string bind_shape_matrix + { + get { return bind_shape_matrixField; } + set { bind_shape_matrixField = value; } + } + + /// + [XmlElement("source")] + public source[] source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + public skinJoints joints + { + get { return jointsField; } + set { jointsField = value; } + } + + /// + public skinVertex_weights vertex_weights + { + get { return vertex_weightsField; } + set { vertex_weightsField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute("source", DataType = "anyURI")] + public string source1 + { + get { return source1Field; } + set { source1Field = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class skinJoints + { + private extra[] extraField; + private InputLocal[] inputField; + + /// + [XmlElement("input")] + public InputLocal[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class skinVertex_weights + { + private ulong countField; + private extra[] extraField; + private InputLocalOffset[] inputField; + + private string vField; + private string vcountField; + + /// + [XmlElement("input")] + public InputLocalOffset[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + public string vcount + { + get { return vcountField; } + set { vcountField = value; } + } + + /// + public string v + { + get { return vField; } + set { vField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_effects + { + private asset assetField; + + private effect[] effectField; + + private extra[] extraField; + + private string idField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("effect")] + public effect[] effect + { + get { return effectField; } + set { effectField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class effect + { + private fx_annotate_common[] annotateField; + private asset assetField; + + private extra[] extraField; + + private string idField; + private image[] imageField; + private effectFx_profile_abstractProfile_COMMON[] itemsField; + + private string nameField; + private fx_newparam_common[] newparamField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("annotate")] + public fx_annotate_common[] annotate + { + get { return annotateField; } + set { annotateField = value; } + } + + /// + [XmlElement("image")] + public image[] image + { + get { return imageField; } + set { imageField = value; } + } + + /// + [XmlElement("newparam")] + public fx_newparam_common[] newparam + { + get { return newparamField; } + set { newparamField = value; } + } + + /// + [XmlElement("profile_COMMON")] + public effectFx_profile_abstractProfile_COMMON[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class image + { + private asset assetField; + private ulong depthField; + + private extra[] extraField; + + private string formatField; + + private ulong heightField; + + private bool heightFieldSpecified; + private string idField; + private object itemField; + private string nameField; + + private ulong widthField; + + private bool widthFieldSpecified; + + public image() + { + depthField = ((ulong) (1m)); + } + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("data", typeof (byte[]), DataType = "hexBinary")] + [XmlElement("init_from", typeof (string), DataType = "anyURI")] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute(DataType = "token")] + public string format + { + get { return formatField; } + set { formatField = value; } + } + + /// + [XmlAttribute] + public ulong height + { + get { return heightField; } + set { heightField = value; } + } + + /// + [XmlIgnore] + public bool heightSpecified + { + get { return heightFieldSpecified; } + set { heightFieldSpecified = value; } + } + + /// + [XmlAttribute] + public ulong width + { + get { return widthField; } + set { widthField = value; } + } + + /// + [XmlIgnore] + public bool widthSpecified + { + get { return widthFieldSpecified; } + set { widthFieldSpecified = value; } + } + + /// + [XmlAttribute] + [DefaultValue(typeof (ulong), "1")] + public ulong depth + { + get { return depthField; } + set { depthField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot("profile_COMMON", Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class effectFx_profile_abstractProfile_COMMON + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private object[] itemsField; + + private effectFx_profile_abstractProfile_COMMONTechnique techniqueField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("image", typeof (image))] + [XmlElement("newparam", typeof (common_newparam_type))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + public effectFx_profile_abstractProfile_COMMONTechnique technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class effectFx_profile_abstractProfile_COMMONTechnique + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private object itemField; + private object[] itemsField; + + private string sidField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("image", typeof (image))] + [XmlElement("newparam", typeof (common_newparam_type))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlElement("blinn", typeof (effectFx_profile_abstractProfile_COMMONTechniqueBlinn))] + [XmlElement("constant", typeof (effectFx_profile_abstractProfile_COMMONTechniqueConstant))] + [XmlElement("lambert", typeof (effectFx_profile_abstractProfile_COMMONTechniqueLambert))] + [XmlElement("phong", typeof (effectFx_profile_abstractProfile_COMMONTechniquePhong))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class effectFx_profile_abstractProfile_COMMONTechniqueBlinn + { + private common_color_or_texture_type ambientField; + + private common_color_or_texture_type diffuseField; + private common_color_or_texture_type emissionField; + private common_float_or_param_type index_of_refractionField; + + private common_color_or_texture_type reflectiveField; + + private common_float_or_param_type reflectivityField; + private common_float_or_param_type shininessField; + private common_color_or_texture_type specularField; + + private common_float_or_param_type transparencyField; + private common_transparent_type transparentField; + + /// + public common_color_or_texture_type emission + { + get { return emissionField; } + set { emissionField = value; } + } + + /// + public common_color_or_texture_type ambient + { + get { return ambientField; } + set { ambientField = value; } + } + + /// + public common_color_or_texture_type diffuse + { + get { return diffuseField; } + set { diffuseField = value; } + } + + /// + public common_color_or_texture_type specular + { + get { return specularField; } + set { specularField = value; } + } + + /// + public common_float_or_param_type shininess + { + get { return shininessField; } + set { shininessField = value; } + } + + /// + public common_color_or_texture_type reflective + { + get { return reflectiveField; } + set { reflectiveField = value; } + } + + /// + public common_float_or_param_type reflectivity + { + get { return reflectivityField; } + set { reflectivityField = value; } + } + + /// + public common_transparent_type transparent + { + get { return transparentField; } + set { transparentField = value; } + } + + /// + public common_float_or_param_type transparency + { + get { return transparencyField; } + set { transparencyField = value; } + } + + /// + public common_float_or_param_type index_of_refraction + { + get { return index_of_refractionField; } + set { index_of_refractionField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class effectFx_profile_abstractProfile_COMMONTechniqueConstant + { + private common_color_or_texture_type emissionField; + private common_float_or_param_type index_of_refractionField; + + private common_color_or_texture_type reflectiveField; + + private common_float_or_param_type reflectivityField; + + private common_float_or_param_type transparencyField; + private common_transparent_type transparentField; + + /// + public common_color_or_texture_type emission + { + get { return emissionField; } + set { emissionField = value; } + } + + /// + public common_color_or_texture_type reflective + { + get { return reflectiveField; } + set { reflectiveField = value; } + } + + /// + public common_float_or_param_type reflectivity + { + get { return reflectivityField; } + set { reflectivityField = value; } + } + + /// + public common_transparent_type transparent + { + get { return transparentField; } + set { transparentField = value; } + } + + /// + public common_float_or_param_type transparency + { + get { return transparencyField; } + set { transparencyField = value; } + } + + /// + public common_float_or_param_type index_of_refraction + { + get { return index_of_refractionField; } + set { index_of_refractionField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class effectFx_profile_abstractProfile_COMMONTechniqueLambert + { + private common_color_or_texture_type ambientField; + + private common_color_or_texture_type diffuseField; + private common_color_or_texture_type emissionField; + private common_float_or_param_type index_of_refractionField; + + private common_color_or_texture_type reflectiveField; + + private common_float_or_param_type reflectivityField; + + private common_float_or_param_type transparencyField; + private common_transparent_type transparentField; + + /// + public common_color_or_texture_type emission + { + get { return emissionField; } + set { emissionField = value; } + } + + /// + public common_color_or_texture_type ambient + { + get { return ambientField; } + set { ambientField = value; } + } + + /// + public common_color_or_texture_type diffuse + { + get { return diffuseField; } + set { diffuseField = value; } + } + + /// + public common_color_or_texture_type reflective + { + get { return reflectiveField; } + set { reflectiveField = value; } + } + + /// + public common_float_or_param_type reflectivity + { + get { return reflectivityField; } + set { reflectivityField = value; } + } + + /// + public common_transparent_type transparent + { + get { return transparentField; } + set { transparentField = value; } + } + + /// + public common_float_or_param_type transparency + { + get { return transparencyField; } + set { transparencyField = value; } + } + + /// + public common_float_or_param_type index_of_refraction + { + get { return index_of_refractionField; } + set { index_of_refractionField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class effectFx_profile_abstractProfile_COMMONTechniquePhong + { + private common_color_or_texture_type ambientField; + + private common_color_or_texture_type diffuseField; + private common_color_or_texture_type emissionField; + private common_float_or_param_type index_of_refractionField; + + private common_color_or_texture_type reflectiveField; + + private common_float_or_param_type reflectivityField; + private common_float_or_param_type shininessField; + private common_color_or_texture_type specularField; + + private common_float_or_param_type transparencyField; + private common_transparent_type transparentField; + + /// + public common_color_or_texture_type emission + { + get { return emissionField; } + set { emissionField = value; } + } + + /// + public common_color_or_texture_type ambient + { + get { return ambientField; } + set { ambientField = value; } + } + + /// + public common_color_or_texture_type diffuse + { + get { return diffuseField; } + set { diffuseField = value; } + } + + /// + public common_color_or_texture_type specular + { + get { return specularField; } + set { specularField = value; } + } + + /// + public common_float_or_param_type shininess + { + get { return shininessField; } + set { shininessField = value; } + } + + /// + public common_color_or_texture_type reflective + { + get { return reflectiveField; } + set { reflectiveField = value; } + } + + /// + public common_float_or_param_type reflectivity + { + get { return reflectivityField; } + set { reflectivityField = value; } + } + + /// + public common_transparent_type transparent + { + get { return transparentField; } + set { transparentField = value; } + } + + /// + public common_float_or_param_type transparency + { + get { return transparencyField; } + set { transparencyField = value; } + } + + /// + public common_float_or_param_type index_of_refraction + { + get { return index_of_refractionField; } + set { index_of_refractionField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_force_fields + { + private asset assetField; + + private extra[] extraField; + private force_field[] force_fieldField; + + private string idField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("force_field")] + public force_field[] force_field + { + get { return force_fieldField; } + set { force_fieldField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class force_field + { + private asset assetField; + + private extra[] extraField; + + private string idField; + + private string nameField; + private technique[] techniqueField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_geometries + { + private asset assetField; + + private extra[] extraField; + private geometry[] geometryField; + + private string idField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("geometry")] + public geometry[] geometry + { + get { return geometryField; } + set { geometryField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class geometry + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private object itemField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("convex_mesh", typeof (convex_mesh))] + [XmlElement("mesh", typeof (mesh))] + [XmlElement("spline", typeof (spline))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class convex_mesh + { + private string convex_hull_ofField; + private extra[] extraField; + private object[] itemsField; + private source[] sourceField; + + private vertices verticesField; + + /// + [XmlElement("source")] + public source[] source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + public vertices vertices + { + get { return verticesField; } + set { verticesField = value; } + } + + /// + [XmlElement("lines", typeof (lines))] + [XmlElement("linestrips", typeof (linestrips))] + [XmlElement("polygons", typeof (polygons))] + [XmlElement("polylist", typeof (polylist))] + [XmlElement("triangles", typeof (triangles))] + [XmlElement("trifans", typeof (trifans))] + [XmlElement("tristrips", typeof (tristrips))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string convex_hull_of + { + get { return convex_hull_ofField; } + set { convex_hull_ofField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class vertices + { + private extra[] extraField; + + private string idField; + private InputLocal[] inputField; + + private string nameField; + + /// + [XmlElement("input")] + public InputLocal[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class lines + { + private ulong countField; + private extra[] extraField; + private InputLocalOffset[] inputField; + + private string materialField; + private string nameField; + private string pField; + + /// + [XmlElement("input")] + public InputLocalOffset[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + public string p + { + get { return pField; } + set { pField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string material + { + get { return materialField; } + set { materialField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class linestrips + { + private ulong countField; + private extra[] extraField; + private InputLocalOffset[] inputField; + + private string materialField; + private string nameField; + private string[] pField; + + /// + [XmlElement("input")] + public InputLocalOffset[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + [XmlElement("p")] + public string[] p + { + get { return pField; } + set { pField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string material + { + get { return materialField; } + set { materialField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class polygons + { + private ulong countField; + private extra[] extraField; + private InputLocalOffset[] inputField; + + private object[] itemsField; + + private string materialField; + private string nameField; + + /// + [XmlElement("input")] + public InputLocalOffset[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + [XmlElement("p", typeof (string))] + [XmlElement("ph", typeof (polygonsPH))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string material + { + get { return materialField; } + set { materialField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class polygonsPH + { + private string[] hField; + private string pField; + + /// + public string p + { + get { return pField; } + set { pField = value; } + } + + /// + [XmlElement("h")] + public string[] h + { + get { return hField; } + set { hField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class polylist + { + private ulong countField; + private extra[] extraField; + private InputLocalOffset[] inputField; + + private string materialField; + private string nameField; + private string pField; + private string vcountField; + + /// + [XmlElement("input")] + public InputLocalOffset[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + public string vcount + { + get { return vcountField; } + set { vcountField = value; } + } + + /// + public string p + { + get { return pField; } + set { pField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string material + { + get { return materialField; } + set { materialField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class triangles + { + private ulong countField; + private extra[] extraField; + private InputLocalOffset[] inputField; + + private string materialField; + private string nameField; + private string pField; + + /// + [XmlElement("input")] + public InputLocalOffset[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + public string p + { + get { return pField; } + set { pField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string material + { + get { return materialField; } + set { materialField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class trifans + { + private ulong countField; + private extra[] extraField; + private InputLocalOffset[] inputField; + + private string materialField; + private string nameField; + private string[] pField; + + /// + [XmlElement("input")] + public InputLocalOffset[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + [XmlElement("p")] + public string[] p + { + get { return pField; } + set { pField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string material + { + get { return materialField; } + set { materialField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class tristrips + { + private ulong countField; + private extra[] extraField; + private InputLocalOffset[] inputField; + + private string materialField; + private string nameField; + private string[] pField; + + /// + [XmlElement("input")] + public InputLocalOffset[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + [XmlElement("p")] + public string[] p + { + get { return pField; } + set { pField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute] + public ulong count + { + get { return countField; } + set { countField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string material + { + get { return materialField; } + set { materialField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class mesh + { + private extra[] extraField; + private object[] itemsField; + private source[] sourceField; + + private vertices verticesField; + + /// + [XmlElement("source")] + public source[] source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + public vertices vertices + { + get { return verticesField; } + set { verticesField = value; } + } + + /// + [XmlElement("lines", typeof (lines))] + [XmlElement("linestrips", typeof (linestrips))] + [XmlElement("polygons", typeof (polygons))] + [XmlElement("polylist", typeof (polylist))] + [XmlElement("triangles", typeof (triangles))] + [XmlElement("trifans", typeof (trifans))] + [XmlElement("tristrips", typeof (tristrips))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class spline + { + private bool closedField; + private splineControl_vertices control_verticesField; + + private extra[] extraField; + private source[] sourceField; + + public spline() + { + closedField = false; + } + + /// + [XmlElement("source")] + public source[] source + { + get { return sourceField; } + set { sourceField = value; } + } + + /// + public splineControl_vertices control_vertices + { + get { return control_verticesField; } + set { control_verticesField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute] + [DefaultValue(false)] + public bool closed + { + get { return closedField; } + set { closedField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class splineControl_vertices + { + private extra[] extraField; + private InputLocal[] inputField; + + /// + [XmlElement("input")] + public InputLocal[] input + { + get { return inputField; } + set { inputField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_images + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private image[] imageField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("image")] + public image[] image + { + get { return imageField; } + set { imageField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_lights + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private light[] lightField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("light")] + public light[] light + { + get { return lightField; } + set { lightField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class light + { + private asset assetField; + + private extra[] extraField; + + private string idField; + + private string nameField; + private technique[] techniqueField; + private lightTechnique_common technique_commonField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + public lightTechnique_common technique_common + { + get { return technique_commonField; } + set { technique_commonField = value; } + } + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class lightTechnique_common + { + private object itemField; + + /// + [XmlElement("ambient", typeof (lightTechnique_commonAmbient))] + [XmlElement("directional", typeof (lightTechnique_commonDirectional))] + [XmlElement("point", typeof (lightTechnique_commonPoint))] + [XmlElement("spot", typeof (lightTechnique_commonSpot))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class lightTechnique_commonAmbient + { + private TargetableFloat3 colorField; + + /// + public TargetableFloat3 color + { + get { return colorField; } + set { colorField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot("scale", Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class TargetableFloat3 + { + private string sidField; + + private double[] textField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public string _Text_ + { + get { return COLLADA.ConvertFromArray(Values); } + + set { Values = COLLADA.ConvertDoubleArray(value); } + } + + [XmlIgnore] + public double[] Values + { + get { return textField; } + set { textField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class lightTechnique_commonDirectional + { + private TargetableFloat3 colorField; + + /// + public TargetableFloat3 color + { + get { return colorField; } + set { colorField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class lightTechnique_commonPoint + { + private TargetableFloat3 colorField; + + private TargetableFloat constant_attenuationField; + + private TargetableFloat linear_attenuationField; + + private TargetableFloat quadratic_attenuationField; + + /// + public TargetableFloat3 color + { + get { return colorField; } + set { colorField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='1.0' attribute. + public TargetableFloat constant_attenuation + { + get { return constant_attenuationField; } + set { constant_attenuationField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0' attribute. + public TargetableFloat linear_attenuation + { + get { return linear_attenuationField; } + set { linear_attenuationField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0' attribute. + public TargetableFloat quadratic_attenuation + { + get { return quadratic_attenuationField; } + set { quadratic_attenuationField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class lightTechnique_commonSpot + { + private TargetableFloat3 colorField; + + private TargetableFloat constant_attenuationField; + + private TargetableFloat falloff_angleField; + + private TargetableFloat falloff_exponentField; + private TargetableFloat linear_attenuationField; + + private TargetableFloat quadratic_attenuationField; + + /// + public TargetableFloat3 color + { + get { return colorField; } + set { colorField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='1.0' attribute. + public TargetableFloat constant_attenuation + { + get { return constant_attenuationField; } + set { constant_attenuationField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0' attribute. + public TargetableFloat linear_attenuation + { + get { return linear_attenuationField; } + set { linear_attenuationField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0' attribute. + public TargetableFloat quadratic_attenuation + { + get { return quadratic_attenuationField; } + set { quadratic_attenuationField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='180.0' attribute. + public TargetableFloat falloff_angle + { + get { return falloff_angleField; } + set { falloff_angleField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0' attribute. + public TargetableFloat falloff_exponent + { + get { return falloff_exponentField; } + set { falloff_exponentField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_materials + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private material[] materialField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("material")] + public material[] material + { + get { return materialField; } + set { materialField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class material + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private instance_effect instance_effectField; + + private string nameField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + public instance_effect instance_effect + { + get { return instance_effectField; } + set { instance_effectField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class instance_effect + { + private extra[] extraField; + + private string nameField; + private instance_effectSetparam[] setparamField; + private string sidField; + private instance_effectTechnique_hint[] technique_hintField; + private string urlField; + + /// + [XmlElement("technique_hint")] + public instance_effectTechnique_hint[] technique_hint + { + get { return technique_hintField; } + set { technique_hintField = value; } + } + + /// + [XmlElement("setparam")] + public instance_effectSetparam[] setparam + { + get { return setparamField; } + set { setparamField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string url + { + get { return urlField; } + set { urlField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class instance_effectTechnique_hint + { + private string platformField; + + private string profileField; + + private string refField; + + /// + [XmlAttribute(DataType = "NCName")] + public string platform + { + get { return platformField; } + set { platformField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string profile + { + get { return profileField; } + set { profileField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string @ref + { + get { return refField; } + set { refField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class instance_effectSetparam + { + private string bool2Field; + + private string bool3Field; + + private string bool4Field; + private bool boolField; + private string enumField; + + private double float1x1Field; + + private string float1x2Field; + + private string float1x3Field; + + private string float1x4Field; + private string float2Field; + + private string float2x1Field; + + private string float2x2Field; + + private string float2x3Field; + + private string float2x4Field; + private string float3Field; + + private string float3x1Field; + + private string float3x2Field; + + private string float3x3Field; + + private string float3x4Field; + private string float4Field; + + private string float4x1Field; + + private string float4x2Field; + + private string float4x3Field; + + private string float4x4Field; + private double floatField; + private string int2Field; + + private string int3Field; + + private string int4Field; + private long intField; + private string refField; + + private fx_sampler1D_common sampler1DField; + + private fx_sampler2D_common sampler2DField; + + private fx_sampler3D_common sampler3DField; + + private fx_samplerCUBE_common samplerCUBEField; + + private fx_samplerDEPTH_common samplerDEPTHField; + private fx_samplerRECT_common samplerRECTField; + private fx_surface_common surfaceField; + + /// + public bool @bool + { + get { return boolField; } + set { boolField = value; } + } + + /// + public string bool2 + { + get { return bool2Field; } + set { bool2Field = value; } + } + + /// + public string bool3 + { + get { return bool3Field; } + set { bool3Field = value; } + } + + /// + public string bool4 + { + get { return bool4Field; } + set { bool4Field = value; } + } + + /// + public long @int + { + get { return intField; } + set { intField = value; } + } + + /// + public string int2 + { + get { return int2Field; } + set { int2Field = value; } + } + + /// + public string int3 + { + get { return int3Field; } + set { int3Field = value; } + } + + /// + public string int4 + { + get { return int4Field; } + set { int4Field = value; } + } + + /// + public double @float + { + get { return floatField; } + set { floatField = value; } + } + + /// + public string float2 + { + get { return float2Field; } + set { float2Field = value; } + } + + /// + public string float3 + { + get { return float3Field; } + set { float3Field = value; } + } + + /// + public string float4 + { + get { return float4Field; } + set { float4Field = value; } + } + + /// + public double float1x1 + { + get { return float1x1Field; } + set { float1x1Field = value; } + } + + /// + public string float1x2 + { + get { return float1x2Field; } + set { float1x2Field = value; } + } + + /// + public string float1x3 + { + get { return float1x3Field; } + set { float1x3Field = value; } + } + + /// + public string float1x4 + { + get { return float1x4Field; } + set { float1x4Field = value; } + } + + /// + public string float2x1 + { + get { return float2x1Field; } + set { float2x1Field = value; } + } + + /// + public string float2x2 + { + get { return float2x2Field; } + set { float2x2Field = value; } + } + + /// + public string float2x3 + { + get { return float2x3Field; } + set { float2x3Field = value; } + } + + /// + public string float2x4 + { + get { return float2x4Field; } + set { float2x4Field = value; } + } + + /// + public string float3x1 + { + get { return float3x1Field; } + set { float3x1Field = value; } + } + + /// + public string float3x2 + { + get { return float3x2Field; } + set { float3x2Field = value; } + } + + /// + public string float3x3 + { + get { return float3x3Field; } + set { float3x3Field = value; } + } + + /// + public string float3x4 + { + get { return float3x4Field; } + set { float3x4Field = value; } + } + + /// + public string float4x1 + { + get { return float4x1Field; } + set { float4x1Field = value; } + } + + /// + public string float4x2 + { + get { return float4x2Field; } + set { float4x2Field = value; } + } + + /// + public string float4x3 + { + get { return float4x3Field; } + set { float4x3Field = value; } + } + + /// + public string float4x4 + { + get { return float4x4Field; } + set { float4x4Field = value; } + } + + /// + public fx_surface_common surface + { + get { return surfaceField; } + set { surfaceField = value; } + } + + /// + public fx_sampler1D_common sampler1D + { + get { return sampler1DField; } + set { sampler1DField = value; } + } + + /// + public fx_sampler2D_common sampler2D + { + get { return sampler2DField; } + set { sampler2DField = value; } + } + + /// + public fx_sampler3D_common sampler3D + { + get { return sampler3DField; } + set { sampler3DField = value; } + } + + /// + public fx_samplerCUBE_common samplerCUBE + { + get { return samplerCUBEField; } + set { samplerCUBEField = value; } + } + + /// + public fx_samplerRECT_common samplerRECT + { + get { return samplerRECTField; } + set { samplerRECTField = value; } + } + + /// + public fx_samplerDEPTH_common samplerDEPTH + { + get { return samplerDEPTHField; } + set { samplerDEPTHField = value; } + } + + /// + public string @enum + { + get { return enumField; } + set { enumField = value; } + } + + /// + [XmlAttribute(DataType = "token")] + public string @ref + { + get { return refField; } + set { refField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_nodes + { + private asset assetField; + + private extra[] extraField; + + private string idField; + + private string nameField; + private node[] nodeField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("node")] + public node[] node + { + get { return nodeField; } + set { nodeField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class node + { + private asset assetField; + private extra[] extraField; + + private string idField; + + private InstanceWithExtra[] instance_cameraField; + + private instance_controller[] instance_controllerField; + + private instance_geometry[] instance_geometryField; + + private InstanceWithExtra[] instance_lightField; + + private InstanceWithExtra[] instance_nodeField; + private ItemsChoiceType2[] itemsElementNameField; + private object[] itemsField; + private string[] layerField; + + private string nameField; + private node[] node1Field; + + private string sidField; + + private NodeType typeField; + + public node() + { + typeField = NodeType.NODE; + } + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("lookat", typeof (lookat))] + [XmlElement("matrix", typeof (matrix))] + [XmlElement("rotate", typeof (rotate))] + [XmlElement("scale", typeof (TargetableFloat3))] + [XmlElement("skew", typeof (skew))] + [XmlElement("translate", typeof (TargetableFloat3))] + [XmlChoiceIdentifier("ItemsElementName")] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlElement("ItemsElementName")] + [XmlIgnore] + public ItemsChoiceType2[] ItemsElementName + { + get { return itemsElementNameField; } + set { itemsElementNameField = value; } + } + + /// + [XmlElement("instance_camera")] + public InstanceWithExtra[] instance_camera + { + get { return instance_cameraField; } + set { instance_cameraField = value; } + } + + /// + [XmlElement("instance_controller")] + public instance_controller[] instance_controller + { + get { return instance_controllerField; } + set { instance_controllerField = value; } + } + + /// + [XmlElement("instance_geometry")] + public instance_geometry[] instance_geometry + { + get { return instance_geometryField; } + set { instance_geometryField = value; } + } + + /// + [XmlElement("instance_light")] + public InstanceWithExtra[] instance_light + { + get { return instance_lightField; } + set { instance_lightField = value; } + } + + /// + [XmlElement("instance_node")] + public InstanceWithExtra[] instance_node + { + get { return instance_nodeField; } + set { instance_nodeField = value; } + } + + /// + [XmlElement("node")] + public node[] node1 + { + get { return node1Field; } + set { node1Field = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute] + [DefaultValue(NodeType.NODE)] + public NodeType type + { + get { return typeField; } + set { typeField = value; } + } + + /// + [XmlAttribute(DataType = "Name")] + public string[] layer + { + get { return layerField; } + set { layerField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class lookat + { + private string sidField; + + private double[] textField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public string _Text_ + { + get { return COLLADA.ConvertFromArray(Values); } + + set { Values = COLLADA.ConvertDoubleArray(value); } + } + + [XmlIgnore] + public double[] Values + { + get { return textField; } + set { textField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class matrix + { + private string sidField; + + private double[] textField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public string _Text_ + { + get { return COLLADA.ConvertFromArray(Values); } + + set { Values = COLLADA.ConvertDoubleArray(value); } + } + + [XmlIgnore] + public double[] Values + { + get { return textField; } + set { textField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class rotate + { + private string sidField; + + private double[] textField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public string _Text_ + { + get { return COLLADA.ConvertFromArray(Values); } + + set { Values = COLLADA.ConvertDoubleArray(value); } + } + + [XmlIgnore] + public double[] Values + { + get { return textField; } + set { textField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class skew + { + private string sidField; + + private double[] textField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public string _Text_ + { + get { return COLLADA.ConvertFromArray(Values); } + + set { Values = COLLADA.ConvertDoubleArray(value); } + } + + [XmlIgnore] + public double[] Values + { + get { return textField; } + set { textField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IncludeInSchema = false)] + public enum ItemsChoiceType2 + { + /// + lookat, + + /// + matrix, + + /// + rotate, + + /// + scale, + + /// + skew, + + /// + translate, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class instance_controller + { + private bind_material bind_materialField; + + private extra[] extraField; + + private string nameField; + private string sidField; + private string[] skeletonField; + private string urlField; + + /// + [XmlElement("skeleton", DataType = "anyURI")] + public string[] skeleton + { + get { return skeletonField; } + set { skeletonField = value; } + } + + /// + public bind_material bind_material + { + get { return bind_materialField; } + set { bind_materialField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string url + { + get { return urlField; } + set { urlField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class bind_material + { + private extra[] extraField; + private param[] paramField; + + private technique[] techniqueField; + private instance_material[] technique_commonField; + + /// + [XmlElement("param")] + public param[] param + { + get { return paramField; } + set { paramField = value; } + } + + /// + [XmlArrayItem("instance_material", IsNullable = false)] + public instance_material[] technique_common + { + get { return technique_commonField; } + set { technique_commonField = value; } + } + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class instance_geometry + { + private bind_material bind_materialField; + + private extra[] extraField; + + private string nameField; + private string sidField; + private string urlField; + + /// + public bind_material bind_material + { + get { return bind_materialField; } + set { bind_materialField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string url + { + get { return urlField; } + set { urlField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum NodeType + { + /// + JOINT, + + /// + NODE, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_physics_materials + { + private asset assetField; + + private extra[] extraField; + + private string idField; + + private string nameField; + private physics_material[] physics_materialField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("physics_material")] + public physics_material[] physics_material + { + get { return physics_materialField; } + set { physics_materialField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class physics_material + { + private asset assetField; + + private extra[] extraField; + + private string idField; + + private string nameField; + private technique[] techniqueField; + private physics_materialTechnique_common technique_commonField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + public physics_materialTechnique_common technique_common + { + get { return technique_commonField; } + set { technique_commonField = value; } + } + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class physics_materialTechnique_common + { + private TargetableFloat dynamic_frictionField; + + private TargetableFloat restitutionField; + + private TargetableFloat static_frictionField; + + /// + public TargetableFloat dynamic_friction + { + get { return dynamic_frictionField; } + set { dynamic_frictionField = value; } + } + + /// + public TargetableFloat restitution + { + get { return restitutionField; } + set { restitutionField = value; } + } + + /// + public TargetableFloat static_friction + { + get { return static_frictionField; } + set { static_frictionField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_physics_models + { + private asset assetField; + + private extra[] extraField; + + private string idField; + + private string nameField; + private physics_model[] physics_modelField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("physics_model")] + public physics_model[] physics_model + { + get { return physics_modelField; } + set { physics_modelField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class physics_model + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private instance_physics_model[] instance_physics_modelField; + + private string nameField; + private rigid_body[] rigid_bodyField; + + private rigid_constraint[] rigid_constraintField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("rigid_body")] + public rigid_body[] rigid_body + { + get { return rigid_bodyField; } + set { rigid_bodyField = value; } + } + + /// + [XmlElement("rigid_constraint")] + public rigid_constraint[] rigid_constraint + { + get { return rigid_constraintField; } + set { rigid_constraintField = value; } + } + + /// + [XmlElement("instance_physics_model")] + public instance_physics_model[] instance_physics_model + { + get { return instance_physics_modelField; } + set { instance_physics_modelField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class rigid_body + { + private extra[] extraField; + + private string nameField; + private string sidField; + private technique[] techniqueField; + private rigid_bodyTechnique_common technique_commonField; + + /// + public rigid_bodyTechnique_common technique_common + { + get { return technique_commonField; } + set { technique_commonField = value; } + } + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_bodyTechnique_common + { + private rigid_bodyTechnique_commonDynamic dynamicField; + + private TargetableFloat3 inertiaField; + + private object itemField; + private TargetableFloat massField; + + private object[] mass_frameField; + + private rigid_bodyTechnique_commonShape[] shapeField; + + /// + public rigid_bodyTechnique_commonDynamic dynamic + { + get { return dynamicField; } + set { dynamicField = value; } + } + + /// + public TargetableFloat mass + { + get { return massField; } + set { massField = value; } + } + + /// + [XmlArrayItem("rotate", typeof (rotate), IsNullable = false)] + [XmlArrayItem("translate", typeof (TargetableFloat3), IsNullable = false)] + public object[] mass_frame + { + get { return mass_frameField; } + set { mass_frameField = value; } + } + + /// + public TargetableFloat3 inertia + { + get { return inertiaField; } + set { inertiaField = value; } + } + + /// + [XmlElement("instance_physics_material", typeof (InstanceWithExtra))] + [XmlElement("physics_material", typeof (physics_material))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + + /// + [XmlElement("shape")] + public rigid_bodyTechnique_commonShape[] shape + { + get { return shapeField; } + set { shapeField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_bodyTechnique_commonDynamic + { + private string sidField; + + private bool valueField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public bool Value + { + get { return valueField; } + set { valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_bodyTechnique_commonShape + { + private TargetableFloat densityField; + private extra[] extraField; + private rigid_bodyTechnique_commonShapeHollow hollowField; + + private object item1Field; + private object itemField; + + private object[] itemsField; + private TargetableFloat massField; + + /// + public rigid_bodyTechnique_commonShapeHollow hollow + { + get { return hollowField; } + set { hollowField = value; } + } + + /// + public TargetableFloat mass + { + get { return massField; } + set { massField = value; } + } + + /// + public TargetableFloat density + { + get { return densityField; } + set { densityField = value; } + } + + /// + [XmlElement("instance_physics_material", typeof (InstanceWithExtra))] + [XmlElement("physics_material", typeof (physics_material))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + + /// + [XmlElement("box", typeof (box))] + [XmlElement("capsule", typeof (capsule))] + [XmlElement("cylinder", typeof (cylinder))] + [XmlElement("instance_geometry", typeof (instance_geometry))] + [XmlElement("plane", typeof (plane))] + [XmlElement("sphere", typeof (sphere))] + [XmlElement("tapered_capsule", typeof (tapered_capsule))] + [XmlElement("tapered_cylinder", typeof (tapered_cylinder))] + public object Item1 + { + get { return item1Field; } + set { item1Field = value; } + } + + /// + [XmlElement("rotate", typeof (rotate))] + [XmlElement("translate", typeof (TargetableFloat3))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_bodyTechnique_commonShapeHollow + { + private string sidField; + + private bool valueField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public bool Value + { + get { return valueField; } + set { valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class box + { + private extra[] extraField; + private string half_extentsField; + + /// + public string half_extents + { + get { return half_extentsField; } + set { half_extentsField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class capsule + { + private extra[] extraField; + private double heightField; + + private string radiusField; + + /// + public double height + { + get { return heightField; } + set { heightField = value; } + } + + /// + public string radius + { + get { return radiusField; } + set { radiusField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class cylinder + { + private extra[] extraField; + private double heightField; + + private string radiusField; + + /// + public double height + { + get { return heightField; } + set { heightField = value; } + } + + /// + public string radius + { + get { return radiusField; } + set { radiusField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class plane + { + private string equationField; + + private extra[] extraField; + + /// + public string equation + { + get { return equationField; } + set { equationField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class sphere + { + private extra[] extraField; + private double radiusField; + + /// + public double radius + { + get { return radiusField; } + set { radiusField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class tapered_capsule + { + private extra[] extraField; + private double heightField; + + private string radius1Field; + + private string radius2Field; + + /// + public double height + { + get { return heightField; } + set { heightField = value; } + } + + /// + public string radius1 + { + get { return radius1Field; } + set { radius1Field = value; } + } + + /// + public string radius2 + { + get { return radius2Field; } + set { radius2Field = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class tapered_cylinder + { + private extra[] extraField; + private double heightField; + + private string radius1Field; + + private string radius2Field; + + /// + public double height + { + get { return heightField; } + set { heightField = value; } + } + + /// + public string radius1 + { + get { return radius1Field; } + set { radius1Field = value; } + } + + /// + public string radius2 + { + get { return radius2Field; } + set { radius2Field = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class rigid_constraint + { + private rigid_constraintAttachment attachmentField; + + private extra[] extraField; + + private string nameField; + private rigid_constraintRef_attachment ref_attachmentField; + private string sidField; + private technique[] techniqueField; + private rigid_constraintTechnique_common technique_commonField; + + /// + public rigid_constraintRef_attachment ref_attachment + { + get { return ref_attachmentField; } + set { ref_attachmentField = value; } + } + + /// + public rigid_constraintAttachment attachment + { + get { return attachmentField; } + set { attachmentField = value; } + } + + /// + public rigid_constraintTechnique_common technique_common + { + get { return technique_commonField; } + set { technique_commonField = value; } + } + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_constraintRef_attachment + { + private object[] itemsField; + + private string rigid_bodyField; + + /// + [XmlElement("extra", typeof (extra))] + [XmlElement("rotate", typeof (rotate))] + [XmlElement("translate", typeof (TargetableFloat3))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string rigid_body + { + get { return rigid_bodyField; } + set { rigid_bodyField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_constraintAttachment + { + private object[] itemsField; + + private string rigid_bodyField; + + /// + [XmlElement("extra", typeof (extra))] + [XmlElement("rotate", typeof (rotate))] + [XmlElement("translate", typeof (TargetableFloat3))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string rigid_body + { + get { return rigid_bodyField; } + set { rigid_bodyField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_constraintTechnique_common + { + private rigid_constraintTechnique_commonEnabled enabledField; + + private rigid_constraintTechnique_commonInterpenetrate interpenetrateField; + + private rigid_constraintTechnique_commonLimits limitsField; + + private rigid_constraintTechnique_commonSpring springField; + + /// + // CODEGEN Warning: DefaultValue attribute on members of type rigid_constraintTechnique_commonEnabled is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='true' attribute. + public rigid_constraintTechnique_commonEnabled enabled + { + get { return enabledField; } + set { enabledField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type rigid_constraintTechnique_commonInterpenetrate is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='false' attribute. + public rigid_constraintTechnique_commonInterpenetrate interpenetrate + { + get { return interpenetrateField; } + set { interpenetrateField = value; } + } + + /// + public rigid_constraintTechnique_commonLimits limits + { + get { return limitsField; } + set { limitsField = value; } + } + + /// + public rigid_constraintTechnique_commonSpring spring + { + get { return springField; } + set { springField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_constraintTechnique_commonEnabled + { + private string sidField; + + private bool valueField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public bool Value + { + get { return valueField; } + set { valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_constraintTechnique_commonInterpenetrate + { + private string sidField; + + private bool valueField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public bool Value + { + get { return valueField; } + set { valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_constraintTechnique_commonLimits + { + private rigid_constraintTechnique_commonLimitsLinear linearField; + private rigid_constraintTechnique_commonLimitsSwing_cone_and_twist swing_cone_and_twistField; + + /// + public rigid_constraintTechnique_commonLimitsSwing_cone_and_twist swing_cone_and_twist + { + get { return swing_cone_and_twistField; } + set { swing_cone_and_twistField = value; } + } + + /// + public rigid_constraintTechnique_commonLimitsLinear linear + { + get { return linearField; } + set { linearField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_constraintTechnique_commonLimitsSwing_cone_and_twist + { + private TargetableFloat3 maxField; + private TargetableFloat3 minField; + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat3 is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0 0.0 0.0' attribute. + public TargetableFloat3 min + { + get { return minField; } + set { minField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat3 is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0 0.0 0.0' attribute. + public TargetableFloat3 max + { + get { return maxField; } + set { maxField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_constraintTechnique_commonLimitsLinear + { + private TargetableFloat3 maxField; + private TargetableFloat3 minField; + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat3 is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0 0.0 0.0' attribute. + public TargetableFloat3 min + { + get { return minField; } + set { minField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat3 is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0 0.0 0.0' attribute. + public TargetableFloat3 max + { + get { return maxField; } + set { maxField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_constraintTechnique_commonSpring + { + private rigid_constraintTechnique_commonSpringAngular angularField; + + private rigid_constraintTechnique_commonSpringLinear linearField; + + /// + public rigid_constraintTechnique_commonSpringAngular angular + { + get { return angularField; } + set { angularField = value; } + } + + /// + public rigid_constraintTechnique_commonSpringLinear linear + { + get { return linearField; } + set { linearField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_constraintTechnique_commonSpringAngular + { + private TargetableFloat dampingField; + private TargetableFloat stiffnessField; + + private TargetableFloat target_valueField; + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='1.0' attribute. + public TargetableFloat stiffness + { + get { return stiffnessField; } + set { stiffnessField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0' attribute. + public TargetableFloat damping + { + get { return dampingField; } + set { dampingField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0' attribute. + public TargetableFloat target_value + { + get { return target_valueField; } + set { target_valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class rigid_constraintTechnique_commonSpringLinear + { + private TargetableFloat dampingField; + private TargetableFloat stiffnessField; + + private TargetableFloat target_valueField; + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='1.0' attribute. + public TargetableFloat stiffness + { + get { return stiffnessField; } + set { stiffnessField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0' attribute. + public TargetableFloat damping + { + get { return dampingField; } + set { dampingField = value; } + } + + /// + // CODEGEN Warning: DefaultValue attribute on members of type TargetableFloat is not supported in this version of the .Net Framework. + // CODEGEN Warning: 'default' attribute supported only for primitive types. Ignoring default='0.0' attribute. + public TargetableFloat target_value + { + get { return target_valueField; } + set { target_valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class instance_physics_model + { + private extra[] extraField; + private InstanceWithExtra[] instance_force_fieldField; + + private instance_rigid_body[] instance_rigid_bodyField; + + private instance_rigid_constraint[] instance_rigid_constraintField; + + private string nameField; + + private string parentField; + private string sidField; + private string urlField; + + /// + [XmlElement("instance_force_field")] + public InstanceWithExtra[] instance_force_field + { + get { return instance_force_fieldField; } + set { instance_force_fieldField = value; } + } + + /// + [XmlElement("instance_rigid_body")] + public instance_rigid_body[] instance_rigid_body + { + get { return instance_rigid_bodyField; } + set { instance_rigid_bodyField = value; } + } + + /// + [XmlElement("instance_rigid_constraint")] + public instance_rigid_constraint[] instance_rigid_constraint + { + get { return instance_rigid_constraintField; } + set { instance_rigid_constraintField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string url + { + get { return urlField; } + set { urlField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string parent + { + get { return parentField; } + set { parentField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class instance_rigid_body + { + private string bodyField; + private extra[] extraField; + + private string nameField; + private string sidField; + + private string targetField; + private technique[] techniqueField; + private instance_rigid_bodyTechnique_common technique_commonField; + + /// + public instance_rigid_bodyTechnique_common technique_common + { + get { return technique_commonField; } + set { technique_commonField = value; } + } + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string body + { + get { return bodyField; } + set { bodyField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string target + { + get { return targetField; } + set { targetField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class instance_rigid_bodyTechnique_common + { + private string angular_velocityField; + + private instance_rigid_bodyTechnique_commonDynamic dynamicField; + + private TargetableFloat3 inertiaField; + + private object itemField; + private TargetableFloat massField; + + private object[] mass_frameField; + + private instance_rigid_bodyTechnique_commonShape[] shapeField; + private string velocityField; + + public instance_rigid_bodyTechnique_common() + { + angular_velocityField = "0.0 0.0 0.0"; + velocityField = "0.0 0.0 0.0"; + } + + /// + [DefaultValue("0.0 0.0 0.0")] + public string angular_velocity + { + get { return angular_velocityField; } + set { angular_velocityField = value; } + } + + /// + [DefaultValue("0.0 0.0 0.0")] + public string velocity + { + get { return velocityField; } + set { velocityField = value; } + } + + /// + public instance_rigid_bodyTechnique_commonDynamic dynamic + { + get { return dynamicField; } + set { dynamicField = value; } + } + + /// + public TargetableFloat mass + { + get { return massField; } + set { massField = value; } + } + + /// + [XmlArrayItem("rotate", typeof (rotate), IsNullable = false)] + [XmlArrayItem("translate", typeof (TargetableFloat3), IsNullable = false)] + public object[] mass_frame + { + get { return mass_frameField; } + set { mass_frameField = value; } + } + + /// + public TargetableFloat3 inertia + { + get { return inertiaField; } + set { inertiaField = value; } + } + + /// + [XmlElement("instance_physics_material", typeof (InstanceWithExtra))] + [XmlElement("physics_material", typeof (physics_material))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + + /// + [XmlElement("shape")] + public instance_rigid_bodyTechnique_commonShape[] shape + { + get { return shapeField; } + set { shapeField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class instance_rigid_bodyTechnique_commonDynamic + { + private string sidField; + + private bool valueField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public bool Value + { + get { return valueField; } + set { valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class instance_rigid_bodyTechnique_commonShape + { + private TargetableFloat densityField; + private extra[] extraField; + private instance_rigid_bodyTechnique_commonShapeHollow hollowField; + + private object item1Field; + private object itemField; + + private object[] itemsField; + private TargetableFloat massField; + + /// + public instance_rigid_bodyTechnique_commonShapeHollow hollow + { + get { return hollowField; } + set { hollowField = value; } + } + + /// + public TargetableFloat mass + { + get { return massField; } + set { massField = value; } + } + + /// + public TargetableFloat density + { + get { return densityField; } + set { densityField = value; } + } + + /// + [XmlElement("instance_physics_material", typeof (InstanceWithExtra))] + [XmlElement("physics_material", typeof (physics_material))] + public object Item + { + get { return itemField; } + set { itemField = value; } + } + + /// + [XmlElement("box", typeof (box))] + [XmlElement("capsule", typeof (capsule))] + [XmlElement("cylinder", typeof (cylinder))] + [XmlElement("instance_geometry", typeof (instance_geometry))] + [XmlElement("plane", typeof (plane))] + [XmlElement("sphere", typeof (sphere))] + [XmlElement("tapered_capsule", typeof (tapered_capsule))] + [XmlElement("tapered_cylinder", typeof (tapered_cylinder))] + public object Item1 + { + get { return item1Field; } + set { item1Field = value; } + } + + /// + [XmlElement("rotate", typeof (rotate))] + [XmlElement("translate", typeof (TargetableFloat3))] + public object[] Items + { + get { return itemsField; } + set { itemsField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class instance_rigid_bodyTechnique_commonShapeHollow + { + private string sidField; + + private bool valueField; + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlText] + public bool Value + { + get { return valueField; } + set { valueField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class instance_rigid_constraint + { + private string constraintField; + private extra[] extraField; + + private string nameField; + private string sidField; + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string constraint + { + get { return constraintField; } + set { constraintField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string sid + { + get { return sidField; } + set { sidField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_physics_scenes + { + private asset assetField; + + private extra[] extraField; + + private string idField; + + private string nameField; + private physics_scene[] physics_sceneField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("physics_scene")] + public physics_scene[] physics_scene + { + get { return physics_sceneField; } + set { physics_sceneField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class physics_scene + { + private asset assetField; + + private extra[] extraField; + + private string idField; + private InstanceWithExtra[] instance_force_fieldField; + + private instance_physics_model[] instance_physics_modelField; + + private string nameField; + private technique[] techniqueField; + private physics_sceneTechnique_common technique_commonField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("instance_force_field")] + public InstanceWithExtra[] instance_force_field + { + get { return instance_force_fieldField; } + set { instance_force_fieldField = value; } + } + + /// + [XmlElement("instance_physics_model")] + public instance_physics_model[] instance_physics_model + { + get { return instance_physics_modelField; } + set { instance_physics_modelField = value; } + } + + /// + public physics_sceneTechnique_common technique_common + { + get { return technique_commonField; } + set { technique_commonField = value; } + } + + /// + [XmlElement("technique")] + public technique[] technique + { + get { return techniqueField; } + set { techniqueField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class physics_sceneTechnique_common + { + private TargetableFloat3 gravityField; + + private TargetableFloat time_stepField; + + /// + public TargetableFloat3 gravity + { + get { return gravityField; } + set { gravityField = value; } + } + + /// + public TargetableFloat time_step + { + get { return time_stepField; } + set { time_stepField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class library_visual_scenes + { + private asset assetField; + + private extra[] extraField; + + private string idField; + + private string nameField; + private visual_scene[] visual_sceneField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("visual_scene")] + public visual_scene[] visual_scene + { + get { return visual_sceneField; } + set { visual_sceneField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class visual_scene + { + private asset assetField; + + private visual_sceneEvaluate_scene[] evaluate_sceneField; + + private extra[] extraField; + + private string idField; + + private string nameField; + private node[] nodeField; + + /// + public asset asset + { + get { return assetField; } + set { assetField = value; } + } + + /// + [XmlElement("node")] + public node[] node + { + get { return nodeField; } + set { nodeField = value; } + } + + /// + [XmlElement("evaluate_scene")] + public visual_sceneEvaluate_scene[] evaluate_scene + { + get { return evaluate_sceneField; } + set { evaluate_sceneField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + + /// + [XmlAttribute(DataType = "ID")] + public string id + { + get { return idField; } + set { idField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class visual_sceneEvaluate_scene + { + private string nameField; + private visual_sceneEvaluate_sceneRender[] renderField; + + /// + [XmlElement("render")] + public visual_sceneEvaluate_sceneRender[] render + { + get { return renderField; } + set { renderField = value; } + } + + /// + [XmlAttribute(DataType = "NCName")] + public string name + { + get { return nameField; } + set { nameField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class visual_sceneEvaluate_sceneRender + { + private string camera_nodeField; + private instance_effect instance_effectField; + private string[] layerField; + + /// + [XmlElement("layer", DataType = "NCName")] + public string[] layer + { + get { return layerField; } + set { layerField = value; } + } + + /// + public instance_effect instance_effect + { + get { return instance_effectField; } + set { instance_effectField = value; } + } + + /// + [XmlAttribute(DataType = "anyURI")] + public string camera_node + { + get { return camera_nodeField; } + set { camera_nodeField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public class COLLADAScene + { + private extra[] extraField; + private InstanceWithExtra[] instance_physics_sceneField; + + private InstanceWithExtra instance_visual_sceneField; + + /// + [XmlElement("instance_physics_scene")] + public InstanceWithExtra[] instance_physics_scene + { + get { return instance_physics_sceneField; } + set { instance_physics_sceneField = value; } + } + + /// + public InstanceWithExtra instance_visual_scene + { + get { return instance_visual_sceneField; } + set { instance_visual_sceneField = value; } + } + + /// + [XmlElement("extra")] + public extra[] extra + { + get { return extraField; } + set { extraField = value; } + } + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [XmlType(Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + public enum VersionType + { + /// + [XmlEnum("1.4.0")] Item140, + + /// + [XmlEnum("1.4.1")] Item141, + } + + /// + [GeneratedCode("xsd", "4.0.30319.1")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "http://www.collada.org/2005/11/COLLADASchema")] + [XmlRoot(Namespace = "http://www.collada.org/2005/11/COLLADASchema", IsNullable = false)] + public class ellipsoid + { + private string sizeField; + + /// + public string size + { + get { return sizeField; } + set { sizeField = value; } + } + } + + + /// + /// Extend COLLADA class to provide convertion helpers + /// + public partial class COLLADA + { + private static Regex regex = new Regex(@"\s+"); + + public static string ConvertFromArray(IList array) + { + if (array == null) + return null; + + StringBuilder text = new StringBuilder(); + if (typeof (T) == typeof (double)) + { + // If type is double, then use a plain ToString with no exponent + for (int i = 0; i < array.Count; i++) + { + object value1 = array[i]; + double value = (double) value1; + text.Append( + value.ToString( + "0.000000", + NumberFormatInfo.InvariantInfo)); + if ((i + 1) < array.Count) + text.Append(" "); + } + } + else + { + for (int i = 0; i < array.Count; i++) + { + text.Append(Convert.ToString(array[i], NumberFormatInfo.InvariantInfo)); + if ((i + 1) < array.Count) + text.Append(" "); + } + } + return text.ToString(); + } + + internal static string[] ConvertStringArray(string arrayStr) + { + string[] elements = regex.Split(arrayStr.Trim()); + string[] ret = new string[elements.Length]; + for (int i = 0; i < ret.Length; i++) + ret[i] = elements[i]; + return ret; + } + + internal static int[] ConvertIntArray(string arrayStr) + { + string[] elements = regex.Split(arrayStr.Trim()); + int[] ret = new int[elements.Length]; + for (int i = 0; i < ret.Length; i++) + ret[i] = int.Parse(elements[i]); + return ret; + } + + internal static double[] ConvertDoubleArray(string arrayStr) + { + string[] elements = regex.Split(arrayStr.Trim()); + double[] ret = new double[elements.Length]; + try + { + for (int i = 0; i < ret.Length; i++) + ret[i] = double.Parse(elements[i], NumberStyles.Float, CultureInfo.InvariantCulture); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + return ret; + } + + internal static bool[] ConvertBoolArray(string arrayStr) + { + string[] elements = regex.Split(arrayStr.Trim()); + bool[] ret = new bool[elements.Length]; + for (int i = 0; i < ret.Length; i++) + ret[i] = bool.Parse(elements[i]); + return ret; + } + + + public static COLLADA Load(string fileName) + { + FileStream stream = new FileStream(fileName, FileMode.Open); + COLLADA result; + try + { + result = Load(stream); + } + finally + { + stream.Close(); + } + return result; + } + + public static COLLADA Load(Stream stream) + { + StreamReader str = new StreamReader(stream); + XmlSerializer xSerializer = new XmlSerializer(typeof(COLLADA)); + + return (COLLADA)xSerializer.Deserialize(str); + } + + public void Save(string fileName) + { + FileStream stream = new FileStream(fileName, FileMode.Create); + try + { + Save(stream); + } + finally + { + stream.Close(); + } + } + + public void Save(Stream stream) + { + XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8); + XmlSerializer xSerializer = new XmlSerializer(typeof(COLLADA)); + writer.Formatting = Formatting.Indented; + xSerializer.Serialize(writer, this); + } + } +} \ No newline at end of file diff --git a/src/Forms/MainForm.Designer.cs b/src/Forms/MainForm.Designer.cs index 1e03f7c..0813eab 100644 --- a/src/Forms/MainForm.Designer.cs +++ b/src/Forms/MainForm.Designer.cs @@ -38,6 +38,16 @@ private void InitializeComponent() this.testROMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.objectComboPresetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.modelIDToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.behaviorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.behParametersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bParam1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bParam2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bParam3ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bParam4ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.objectComboNameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.levelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.selectLeveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.selectAreaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -49,6 +59,8 @@ private void InitializeComponent() this.Area5Button = new System.Windows.Forms.ToolStripMenuItem(); this.Area6Button = new System.Windows.Forms.ToolStripMenuItem(); this.Area7Button = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.texturesToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.rOMInfoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -93,8 +105,6 @@ private void InitializeComponent() this.moveObj = new System.Windows.Forms.PictureBox(); this.movObj_UpDown = new System.Windows.Forms.PictureBox(); this.glControl1 = new OpenTK.GLControl(); - this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.texturesToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip1.SuspendLayout(); this.statusStrip1.SuspendLayout(); this.panel1.SuspendLayout(); @@ -184,7 +194,13 @@ private void InitializeComponent() // editToolStripMenuItem // this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.objectComboPresetToolStripMenuItem}); + this.objectComboPresetToolStripMenuItem, + this.toolStripSeparator4, + this.modelIDToolStripMenuItem, + this.behaviorToolStripMenuItem, + this.behParametersToolStripMenuItem, + this.toolStripSeparator5, + this.objectComboNameToolStripMenuItem}); this.editToolStripMenuItem.Name = "editToolStripMenuItem"; this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); this.editToolStripMenuItem.Text = "Edit"; @@ -197,6 +213,75 @@ private void InitializeComponent() this.objectComboPresetToolStripMenuItem.Text = "Object Combo/Preset"; this.objectComboPresetToolStripMenuItem.Click += new System.EventHandler(this.objectComboPresetToolStripMenuItem_Click); // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(186, 6); + // + // modelIDToolStripMenuItem + // + this.modelIDToolStripMenuItem.Enabled = false; + this.modelIDToolStripMenuItem.Name = "modelIDToolStripMenuItem"; + this.modelIDToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.modelIDToolStripMenuItem.Text = "Model ID"; + // + // behaviorToolStripMenuItem + // + this.behaviorToolStripMenuItem.Enabled = false; + this.behaviorToolStripMenuItem.Name = "behaviorToolStripMenuItem"; + this.behaviorToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.behaviorToolStripMenuItem.Text = "Behavior"; + this.behaviorToolStripMenuItem.Click += new System.EventHandler(this.behaviorToolStripMenuItem_Click); + // + // behParametersToolStripMenuItem + // + this.behParametersToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.bParam1ToolStripMenuItem, + this.bParam2ToolStripMenuItem, + this.bParam3ToolStripMenuItem, + this.bParam4ToolStripMenuItem}); + this.behParametersToolStripMenuItem.Enabled = false; + this.behParametersToolStripMenuItem.Name = "behParametersToolStripMenuItem"; + this.behParametersToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.behParametersToolStripMenuItem.Text = "Beh. Parameters"; + // + // bParam1ToolStripMenuItem + // + this.bParam1ToolStripMenuItem.Name = "bParam1ToolStripMenuItem"; + this.bParam1ToolStripMenuItem.Size = new System.Drawing.Size(130, 22); + this.bParam1ToolStripMenuItem.Text = "B. Param 1"; + // + // bParam2ToolStripMenuItem + // + this.bParam2ToolStripMenuItem.Name = "bParam2ToolStripMenuItem"; + this.bParam2ToolStripMenuItem.Size = new System.Drawing.Size(130, 22); + this.bParam2ToolStripMenuItem.Text = "B. Param 2"; + // + // bParam3ToolStripMenuItem + // + this.bParam3ToolStripMenuItem.Name = "bParam3ToolStripMenuItem"; + this.bParam3ToolStripMenuItem.Size = new System.Drawing.Size(130, 22); + this.bParam3ToolStripMenuItem.Text = "B. Param 3"; + // + // bParam4ToolStripMenuItem + // + this.bParam4ToolStripMenuItem.Name = "bParam4ToolStripMenuItem"; + this.bParam4ToolStripMenuItem.Size = new System.Drawing.Size(130, 22); + this.bParam4ToolStripMenuItem.Text = "B. Param 4"; + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(186, 6); + // + // objectComboNameToolStripMenuItem + // + this.objectComboNameToolStripMenuItem.Enabled = false; + this.objectComboNameToolStripMenuItem.Name = "objectComboNameToolStripMenuItem"; + this.objectComboNameToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + this.objectComboNameToolStripMenuItem.Text = "Object Combo Name"; + this.objectComboNameToolStripMenuItem.Click += new System.EventHandler(this.objectComboNameToolStripMenuItem_Click); + // // levelToolStripMenuItem // this.levelToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -211,7 +296,7 @@ private void InitializeComponent() // selectLeveToolStripMenuItem // this.selectLeveToolStripMenuItem.Name = "selectLeveToolStripMenuItem"; - this.selectLeveToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.selectLeveToolStripMenuItem.Size = new System.Drawing.Size(135, 22); this.selectLeveToolStripMenuItem.Text = "Select Level"; this.selectLeveToolStripMenuItem.Click += new System.EventHandler(this.selectLeveToolStripMenuItem_Click); // @@ -227,7 +312,7 @@ private void InitializeComponent() this.Area6Button, this.Area7Button}); this.selectAreaToolStripMenuItem.Name = "selectAreaToolStripMenuItem"; - this.selectAreaToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.selectAreaToolStripMenuItem.Size = new System.Drawing.Size(135, 22); this.selectAreaToolStripMenuItem.Text = "Select Area"; // // Area0Button @@ -286,6 +371,18 @@ private void InitializeComponent() this.Area7Button.Text = "Area 7"; this.Area7Button.Click += new System.EventHandler(this.AreaButton_Click); // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(132, 6); + // + // texturesToolStripMenuItem1 + // + this.texturesToolStripMenuItem1.Name = "texturesToolStripMenuItem1"; + this.texturesToolStripMenuItem1.Size = new System.Drawing.Size(135, 22); + this.texturesToolStripMenuItem1.Text = "Textures"; + this.texturesToolStripMenuItem1.Click += new System.EventHandler(this.texturesToolStripMenuItem_Click); + // // helpToolStripMenuItem // this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -300,26 +397,26 @@ private void InitializeComponent() // settingsToolStripMenuItem // this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; - this.settingsToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.settingsToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.settingsToolStripMenuItem.Text = "Settings"; this.settingsToolStripMenuItem.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click); // // rOMInfoToolStripMenuItem // this.rOMInfoToolStripMenuItem.Name = "rOMInfoToolStripMenuItem"; - this.rOMInfoToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.rOMInfoToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.rOMInfoToolStripMenuItem.Text = "ROM Info"; this.rOMInfoToolStripMenuItem.Click += new System.EventHandler(this.rOMInfoToolStripMenuItem_Click); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(149, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(142, 6); // // scriptsDumpToolStripMenuItem // this.scriptsDumpToolStripMenuItem.Name = "scriptsDumpToolStripMenuItem"; - this.scriptsDumpToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.scriptsDumpToolStripMenuItem.Size = new System.Drawing.Size(145, 22); this.scriptsDumpToolStripMenuItem.Text = "Script Dumps"; this.scriptsDumpToolStripMenuItem.Click += new System.EventHandler(this.scriptsDumpToolStripMenuItem_Click); // @@ -904,18 +1001,6 @@ private void InitializeComponent() this.glControl1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.glControl1_MouseUp); this.glControl1.Resize += new System.EventHandler(this.glControl1_Resize); // - // toolStripSeparator2 - // - this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(149, 6); - // - // texturesToolStripMenuItem1 - // - this.texturesToolStripMenuItem1.Name = "texturesToolStripMenuItem1"; - this.texturesToolStripMenuItem1.Size = new System.Drawing.Size(152, 22); - this.texturesToolStripMenuItem1.Text = "Textures"; - this.texturesToolStripMenuItem1.Click += new System.EventHandler(this.texturesToolStripMenuItem_Click); - // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -929,7 +1014,7 @@ private void InitializeComponent() this.MinimumSize = new System.Drawing.Size(820, 522); this.Name = "MainForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Quad64 v0.2 (Beta build 1)"; + this.Text = "Quad64 v0.2 (Beta build 2)"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); this.Shown += new System.EventHandler(this.Form1_Shown); this.menuStrip1.ResumeLayout(false); @@ -1035,6 +1120,16 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; private System.Windows.Forms.ToolStripMenuItem texturesToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem behaviorToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem modelIDToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem behParametersToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bParam1ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bParam2ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bParam3ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bParam4ToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripMenuItem objectComboNameToolStripMenuItem; } } diff --git a/src/Forms/MainForm.cs b/src/Forms/MainForm.cs index 643dcdc..b77c3da 100644 --- a/src/Forms/MainForm.cs +++ b/src/Forms/MainForm.cs @@ -3,17 +3,14 @@ using System; using System.Drawing; using System.Windows.Forms; -using PropertyGridExtensionHacks; using Quad64.src.LevelInfo; using Quad64.Scripts; using Quad64.src.JSON; using Quad64.src; -using Quad64.src.Viewer; -using System.IO; using Quad64.src.TestROM; using Quad64.src.Forms; -using System.Threading; using System.Collections.Generic; +using System.Runtime.InteropServices; namespace Quad64 { @@ -67,7 +64,7 @@ private void initTreeView() treeView1.TabStop = false; treeView1.DrawNode += new DrawTreeNodeEventHandler(treeView1_DrawNode); treeView1.AfterSelect += new TreeViewEventHandler(treeView1_AfterSelect); - treeView1.BeforeSelect += new TreeViewCancelEventHandler(treeView1_BeforeSelect); + //treeView1.BeforeSelect += new TreeViewCancelEventHandler(treeView1_BeforeSelect); treeView1.KeyPress += new KeyPressEventHandler(treeView1_KeyPress); splitContainer3.Panel1.Controls.Add(treeView1); Globals.multi_selected_nodes.Clear(); @@ -116,9 +113,13 @@ private void loadROM(bool startingUp) return; } } + //Stopwatch stopWatch = new Stopwatch(); + //stopWatch.Start(); + Globals.objectComboEntries.Clear(); + Globals.behaviorNameEntries.Clear(); + BehaviorNameFile.parseBehaviorNames(Globals.getDefaultBehaviorNamesPath()); ModelComboFile.parseObjectCombos(Globals.getDefaultObjectComboPath()); - rom.setSegment(0x15, Globals.seg15_location[0], Globals.seg15_location[1], false); rom.setSegment(0x02, Globals.seg02_location[0], Globals.seg02_location[1], rom.isSegmentMIO0(0x02), rom.Seg02_isFakeMIO0, rom.Seg02_uncompressedOffset); @@ -131,11 +132,16 @@ private void loadROM(bool startingUp) bgColor = Color.CornflowerBlue; camera.setLevel(level); updateAreaButtons(); + + //stopWatch.Stop(); + //Console.WriteLine("Startup time: " + stopWatch.Elapsed.Milliseconds + "ms"); + glControl1.Invalidate(); } private void refreshObjectsInList() { + BeginUpdate(treeView1); Globals.list_selected = -1; Globals.item_selected = -1; Globals.multi_selected_nodes[0].Clear(); @@ -184,6 +190,7 @@ private void refreshObjectsInList() { warps.Nodes.Add(warp.ToString()); } + EndUpdate(treeView1); } private void glControl1_Paint(object sender, PaintEventArgs e) @@ -513,6 +520,13 @@ private void settingsToolStripMenuItem_Click(object sender, EventArgs e) glControl1.Update(); // Needed after calling propertyGrid1.Refresh(); } + private void replaceBehavior(int index, ref SelectBehavior behWindow) + { + Area area = level.getCurrentArea(); + area.Objects[index].setBehaviorFromAddress(behWindow.ReturnBehavior); + treeView1.Nodes[0].Nodes[index].Text = area.Objects[index].getObjectComboName(); + } + private void replaceObject(int index, ref SelectComboPreset comboWindow) { Area area = level.getCurrentArea(); @@ -556,6 +570,59 @@ private void replaceSpecialObject(int index, ref SelectComboPreset comboWindow) = area.SpecialObjects[index].getObjectComboName(); area.SpecialObjects[index].UpdateProperties(); } + + private void behaviorToolStripMenuItem_Click(object sender, EventArgs e) + { + SelectBehavior behWindow = new SelectBehavior(); + behWindow.ShowDialog(); + if (behWindow.ClickedSelect) + { + if (!Globals.isMultiSelected) + replaceBehavior(Globals.item_selected, ref behWindow); + else + for (int i = 0; i < treeView1.SelectedNodes.Count; i++) + replaceBehavior(treeView1.SelectedNodes[i].Index, ref behWindow); + + updateSelectedObjectsInROM(); + glControl1.Invalidate(); + propertyGrid1.Refresh(); + glControl1.Update(); // Needed after calling propertyGrid1.Refresh(); + } + } + + private void objectComboNameToolStripMenuItem_Click(object sender, EventArgs e) + { + RenameObjectCombo roc = new RenameObjectCombo(getSelectedObject().Title); + roc.ShowDialog(); + if (roc.ClickedSelect) + { + + if (!Globals.isMultiSelected) + getSelectedObject().renameObjectCombo(roc.ReturnName); + else + { + Area area = level.getCurrentArea(); + for (int i = 0; i < treeView1.SelectedNodes.Count; i++) + { + TreeNode node = treeView1.SelectedNodes[i]; + if (node.Parent.Text.Equals("3D Objects")) + area.Objects[node.Index].renameObjectCombo(roc.ReturnName); + else if (node.Parent.Text.Equals("Macro 3D Objects")) + area.MacroObjects[node.Index].renameObjectCombo(roc.ReturnName); + else if (node.Parent.Text.Equals("Special 3D Objects")) + area.SpecialObjects[node.Index].renameObjectCombo(roc.ReturnName); + } + } + // Console.WriteLine("Changed object combo name to " + roc.ReturnName); + + updateSelectedObjectsInROM(); + glControl1.Invalidate(); + propertyGrid1.Refresh(); + refreshObjectsInList(); + glControl1.Update(); // Needed after calling propertyGrid1.Refresh(); + } + + } private void objectComboPresetToolStripMenuItem_Click(object sender, EventArgs e) { @@ -680,7 +747,12 @@ private void resetObjectVariables() private void switchLevel(ushort levelID) { Level testLevel = new Level(levelID, 1); + //Stopwatch stopWatch = new Stopwatch(); + //stopWatch.Start(); LevelScripts.parse(ref testLevel, 0x15, 0); + //stopWatch.Stop(); + //Console.WriteLine("RunTime (LevelScripts.parse): " + stopWatch.Elapsed.Milliseconds + "ms"); + if (testLevel.Areas.Count > 0) { level = testLevel; @@ -744,33 +816,33 @@ private void treeView1_updateMultiselection() } } - private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e) + bool atLeastTwoBools(bool a, bool b, bool c) + { + return a ? (b || c) : (b && c); + } + + private void updateAfterSelect(TreeNode node) { - TreeNode node = e.Node; if (node.Parent == null) { + Globals.isMultiSelected = false; Globals.isMultiSelectedFromMultipleLists = false; propertyGrid1.SelectedObject = null; Globals.list_selected = -1; Globals.item_selected = -1; objectComboPresetToolStripMenuItem.Enabled = false; + objectComboNameToolStripMenuItem.Enabled = false; + behaviorToolStripMenuItem.Enabled = false; glControl1.Invalidate(); glControl1.Update(); } - } - - bool atLeastTwoBools(bool a, bool b, bool c) - { - return a ? (b || c) : (b && c); - } - - private void updateAfterSelect(TreeNode node) - { - if (node.Parent != null) + else { objectComboPresetToolStripMenuItem.Enabled = true; + objectComboNameToolStripMenuItem.Enabled = true; + behaviorToolStripMenuItem.Enabled = true; if (treeView1.SelectedNodes.Count > 1) { Area area = level.getCurrentArea(); @@ -783,6 +855,9 @@ private void updateAfterSelect(TreeNode node) else if (parent_text.Equals("Special 3D Objects")) Globals.list_selected = 2; + if(Globals.list_selected != 0) + behaviorToolStripMenuItem.Enabled = false; + Globals.isMultiSelectedFromMultipleLists = false; Globals.isMultiSelectedFromSpecialObjects = false; bool hasSO_8 = false, hasSO_10 = false, hasSO_12 = false; @@ -810,6 +885,8 @@ private void updateAfterSelect(TreeNode node) { Globals.isMultiSelectedFromMultipleLists = true; objectComboPresetToolStripMenuItem.Enabled = false; + objectComboNameToolStripMenuItem.Enabled = false; + behaviorToolStripMenuItem.Enabled = false; if (Globals.list_selected != 2 || (Globals.list_selected == 2 && Globals.isMultiSelectedFromSpecialObjects)) break; } @@ -834,6 +911,8 @@ private void updateAfterSelect(TreeNode node) if (atLeastTwoBools(hasSO_8, hasSO_10, hasSO_12)) { Globals.isMultiSelectedFromSpecialObjects = true; objectComboPresetToolStripMenuItem.Enabled = false; + objectComboNameToolStripMenuItem.Enabled = false; + behaviorToolStripMenuItem.Enabled = false; if (Globals.isMultiSelectedFromMultipleLists) break; } @@ -891,6 +970,7 @@ private void updateAfterSelect(TreeNode node) if (node.Parent.Text.Equals("3D Objects")) { + behaviorToolStripMenuItem.Enabled = true; Globals.list_selected = 0; Globals.item_selected = node.Index; propertyGrid1.SelectedObject = level.getCurrentArea().Objects[node.Index]; @@ -904,6 +984,7 @@ private void updateAfterSelect(TreeNode node) } else if (node.Parent.Text.Equals("Macro 3D Objects")) { + behaviorToolStripMenuItem.Enabled = false; Globals.list_selected = 1; Globals.item_selected = node.Index; propertyGrid1.SelectedObject = level.getCurrentArea().MacroObjects[node.Index]; @@ -917,6 +998,7 @@ private void updateAfterSelect(TreeNode node) } else if (node.Parent.Text.Equals("Special 3D Objects")) { + behaviorToolStripMenuItem.Enabled = false; Globals.list_selected = 2; Globals.item_selected = node.Index; propertyGrid1.SelectedObject = level.getCurrentArea().SpecialObjects[node.Index]; @@ -930,6 +1012,7 @@ private void updateAfterSelect(TreeNode node) } else if (node.Parent.Text.Equals("Warps")) { + behaviorToolStripMenuItem.Enabled = false; Globals.list_selected = 3; Globals.item_selected = node.Index; Area area = level.getCurrentArea(); @@ -941,13 +1024,17 @@ private void updateAfterSelect(TreeNode node) propertyGrid1.SelectedObject = area.InstantWarps[node.Index - area.Warps.Count - area.PaintingWarps.Count]; } } - + Object3D obj = getSelectedObject(); if (obj != null) { obj.RevealTemporaryHiddenFields(); if (obj.IsReadOnly) + { objectComboPresetToolStripMenuItem.Enabled = false; + objectComboNameToolStripMenuItem.Enabled = false; + behaviorToolStripMenuItem.Enabled = false; + } obj.UpdateProperties(); propertyGrid1.Refresh(); } @@ -1029,6 +1116,7 @@ private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEv } } + updateSelectedObjectsInROM(); if (camera.isOrbitCamera()) camera.updateOrbitCamera(ref camMtx); glControl1.Invalidate(); @@ -1821,5 +1909,25 @@ private void trackBar2_ValueChanged(object sender, EventArgs e) objSpeedLabel.Text = (int)(newValue) + "%"; Globals.objSpeedMultiplier = newValue / 100.0f; } + + private const int WM_USER = 0x0400; + private const int EM_SETEVENTMASK = (WM_USER + 69); + private const int WM_SETREDRAW = 0x0b; + private IntPtr OldEventMask; + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + + private void BeginUpdate(Control c) + { + SendMessage(c.Handle, WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero); + OldEventMask = SendMessage(c.Handle, EM_SETEVENTMASK, IntPtr.Zero, IntPtr.Zero); + } + + private void EndUpdate(Control c) + { + SendMessage(c.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); + SendMessage(c.Handle, EM_SETEVENTMASK, IntPtr.Zero, OldEventMask); + } } } diff --git a/src/Forms/RenameObjectCombo.Designer.cs b/src/Forms/RenameObjectCombo.Designer.cs new file mode 100644 index 0000000..de9fb0c --- /dev/null +++ b/src/Forms/RenameObjectCombo.Designer.cs @@ -0,0 +1,90 @@ +namespace Quad64.src.Forms +{ + partial class RenameObjectCombo + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RenameObjectCombo)); + this.textBox = new System.Windows.Forms.TextBox(); + this.buttonOK = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBox + // + this.textBox.Location = new System.Drawing.Point(12, 12); + this.textBox.Name = "textBox"; + this.textBox.Size = new System.Drawing.Size(315, 20); + this.textBox.TabIndex = 0; + // + // buttonOK + // + this.buttonOK.Location = new System.Drawing.Point(65, 44); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(75, 23); + this.buttonOK.TabIndex = 1; + this.buttonOK.Text = "Ok"; + this.buttonOK.UseVisualStyleBackColor = true; + this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(197, 44); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 2; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // RenameObjectCombo + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(339, 79); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOK); + this.Controls.Add(this.textBox); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "RenameObjectCombo"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Rename Object Combo"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Button buttonCancel; + } +} \ No newline at end of file diff --git a/src/Forms/RenameObjectCombo.cs b/src/Forms/RenameObjectCombo.cs new file mode 100644 index 0000000..c20dc36 --- /dev/null +++ b/src/Forms/RenameObjectCombo.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Quad64.src.Forms +{ + public partial class RenameObjectCombo : Form + { + public bool ClickedSelect { get; set; } + public string ReturnName { get; set; } + + public RenameObjectCombo(string input) + { + InitializeComponent(); + textBox.Text = input; + ClickedSelect = false; + } + + private void buttonOK_Click(object sender, EventArgs e) + { + if (!textBox.Text.StartsWith("Undefined Combo")) + { + ReturnName = textBox.Text; + ClickedSelect = true; + Hide(); + } + else + { + MessageBox.Show("You cannot have the combo name start with \"Undefined Combo\"."); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + ClickedSelect = false; + Hide(); + } + } +} diff --git a/src/Forms/RenameObjectCombo.resx b/src/Forms/RenameObjectCombo.resx new file mode 100644 index 0000000..4969adf --- /dev/null +++ b/src/Forms/RenameObjectCombo.resx @@ -0,0 +1,635 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA + IACoJQAA7h4AADg4AAABACAA6DIAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAADCDgAAwg4AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABixkQAaOVoBk2VBlKuTAlS+mpkBtxiQgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMHABvp2EATMApH4+5hY5rqUXvuW9K78GShovcWjYav2lRAPVS + JwAAAAAAAAAAAAAAAAAAAAAAAAAAADO+CgAdxgAHn8aTVUSTKs1Dayz+fpxk/6B7Z/93NzD9qkkzxs6o + nUnuJwAE300mAAAAAAAAAAAAJ64AAP///wCu0qUlWKc/mUd6N/MtVib/KFkE/1iSLf+bUzL/cwIB/3sW + Ff+URzrtvmJJhdu/txjW//8AxFI3AC6uBwAosAAwTZQ10j9lL/8XaGX/DIGn/yZeOP+DoGb/onpo/2sR + Hf9OJ1n/TyVA/4I3M/2wVD690y8EIMw3EACAv20AiMB4VEtyM/0bWUT/GnCL/xhuj/8oXhn/UpAj/5pN + KP92DRD/OVie/x9nr/9rDyL/mkg+9s6Fb0TMf2sAXLZCAF61RWI0axj/GGN5/wU6tv8cRkP/M2AH/4qm + df+kgnP/eggG/2QvX/8QVcr/RSxi/5ozKPvJc1tNy3BYAIW6dQCBuXBxQmko/zJpNf8gVaL/JVAz/0Ry + IP9LkCX/nk4t/4YpJf+BEh//NCmU/2gJLv+YPTT+yINwWct8ZwBKojAAXq5HfzBjE/8wXQL/Pmwi/zmD + H/+at5v/QV+d/2xJoP+8lpb/mC8g/3QjN/9/AxD/lS0j/8dzXGTKblcAaZNdAHKvYI1BZij/M3YP/4uu + gv9HcpL/VViv/zcyl/9CQan/YVi6/4RSk/+zgHj/kB4R/445Mv/FdF5xxXtoAP///wBstlSahKt4/0+B + hf9cZ7L/QkGY/wAZjP8APJr/AjSl/wsumP9WWLD/cmC2/5ZZf/+zgXP/yn9pfsltUgBF/wADHXNRl2B1 + uf9hYJ7/BAGK/wAbo/8Bi3v/D5uQ/xKvqf8DYo//BQat/xYWp/91drn/gFur/5gqSIBsHHQAAAD/AAQL + 1B9mZd2DaGit4BAPlP8PIpz/Fnxp/w15Vf8Oh23/BVKA/xERqv8fH63+enq83kxM34AlDL4eAAb6AAAA + AADY2OwA///oAjU06Sxtbc+TVlWs6RkfkP8QOoj/DzeT/xshqP9sa7ziV1fUh05M5Cn//+IB8/HiAAAA + AAAAAAAAAAAAAAAAAADKyvcA////BDY15Td2dcqgQkCu7VpYuuRoZ9KORELiLf///wLt7PUAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wB7e/QApKT5CCMi5EY0MuA5///7BMbF8wAAAAAAAAAAAAAA + AAAAAAAAAAAAAPw/AAD4HwAA4AcAAMADAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAAAEAAIAB + AADAAwAA8A8AAPw/AAAoAAAAGAAAADAAAAABACAAAAAAAAAJAADCDgAAwg4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ6seAAD/RgFSkggqrkwKLP8AGgHMNA0AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADV1dUA7tv0C1q9QGM/ngPWuEQK19NcQWPP4ucLz83NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ60AAACcAAE2tA8yq8ejp3iwaPZus07/xHRV/717 + avfLrqag0kAZKOn//wDQLAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADS0dEA3tTfEIvGeWswpA3dUHtA/1doS/+tvaH/wa2i/2RPTf+JUUb/wTwZ1NKPfV3N7vUK0dHRAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiMBzAMfKwQImswA3fb5qsYWefPkgVwX/JE4A/zJn + Ev9Qnh7/slYm/2gbFf9qAQD/dBkM/6uMhfTNh3Od0zIIJNcZAADNVTcAAAAAAAAAAAAAAAAAAAAAACKv + AACuz6QAdsJgFLrPs3hCoyXjM28a/y5KJP8jThn/L10D/ytoBv9mrEX/vGtK/2wSCf+GAAD/gAAA/2se + Hv+PNiT+wVE00NPAulfQb1YI0IVyAAAAAAAAAAAAAAAAAC+tCAArrQEuRK8kuYCXePovVhj/GUwy/wx1 + k/8Gfqn/HVU9/05uMf+1wq3/wrSs/2wyL/9yBRf/Xw89/2EYNf9cDBr/di0l/6uLg/LMSyqUzTMMF8w6 + FQAAAAAAAAAAADqyFgA4tRNuN4ge/yhIC/8lWSH/FX+h/yaft/8IjMv/IFxB/ztrGf9boyz/s2E0/2wh + G/92Eh3/K1in/w1ruv81Tn3/ewEG/24cGP+wPyP40D4XVM0+GAAAAAAAzsTJAJfNjACwzad5cYVn/yhQ + Bv8VYnj/FGiA/yBidP8UXIP/LlwI/yZoAv9Upyr/uVkw/2sPBf+HBAT/VE+E/xptzf8cbrX/Zg4v/4UK + C/+le3X70Z6QXM6cjwAAAAAAkcKCAACiAAB6wmWHOnQi/yJYGv8KZbT/BTqy/wo0jP8lUST/L18A/0tv + MP+3xrH/xLSt/2ouK/+FAAD/dy9H/yRNwP8NaM7/IkmV/30KE/+iUkP/z5SEa82NfAAAAAAAM64NABql + AAI5sxWWLG0S/ypXCf8peIj/BT/c/wcmo/8oUBj/L2EA/0dwLP94rlP/uHxZ/20wLf+GAAD/iw4R/zw6 + nf8FOMn/RSVl/4MJD/+eLxn/z0AactE6EgC1al0AmsOMAIK/awSryKKiXnJR/ylTAP88cjD/Nmuk/xxS + ev8tWwz/Smoq/0GQJf82mgr/sj4U/5tEMf9/LCz/iwUE/3YiRf8hKKv/awMn/4wGBf+ZaWX/z6GVg9ut + oADInJEAlcKGALbNrQd8vWmyM2Ud/ypVAP8xYAH/OWkU/y5kC/8weQ7/prqc/26ih/8XPZ7/TB2e/7N7 + jP+3mpH/iyUU/4EUE/9kHkn/dgUc/4sEA/+VSDz/z5iJie8AAADLqaAAMK8KAC+2BQkxqw6+I14K/yxY + AP8tXgH/WnVB/1iaRP8tlDP/pLTF/7W11v85OK7/Q0S2/7y72P+3nbr/sDcw/6JcTv+DOTb/hwcG/4wF + Bf+TJBL/zT0WmcdEIQPLPhkAj8F+AInKdAyXvY3MTmI+/zNiEf8siAv/o8SW/5Ovsf8iNr3/Jye1/0A/ + f/8SEYX/IyOd/1FQn/8qKMP/Ryq3/7ygtP/CkoH/lSYP/38bGP+MVVH/zJGBoNBQMATMemUAo8SXALHL + pxaJvHnUcpZl/4GqfP8jeVT/a3vF/6qoxv9AP4v/AQB7/wAKlv8AE6T/AQew/wgYov8SG5H/Wlyp/7Cy + 0/+FZrX/oDVJ/6qBev+ecGb/zKSZss/MzQfMta8AOrEWADuzFB8qqwnafbZ9/7/F0/9LUcf/DQyZ/xMS + eP8EDJD/AEKZ/wCOkv8BpZb/AIih/wCRnf8DQJP/Fhen/ygom/8WF7X/aFrI/83CzP/Ibl7/zj4Zus9Z + OAjOTSoAJI4uACWWIyEYWHbPKzfO/3Z1vf8/P2X/AQGE/wAAr/8ALLD/AKp2/weNaP8gnKX/Hra2/xG2 + m/8APYf/AACz/wUEtv8ZGaP/aGiW/3Z30P9IKrj/iChbvs49EwqrMzgAEkKRAA9WbgMMCeI0ODfjmpyc + ze1hYZP/Bwd+/wAAmP8HJ7H/Fppq/wiRM/8MXWT/FHB1/xKvbP8ARHH/AQGy/wgIrf8fH6H/fn6o/4GB + 1OkbHeWZIRTNNf+aAAFrMooAAAAAAAAAAADp5MgA7urNB8nI4kFBQeCqICDE8kpKkf8jJIH/GyyR/yRs + cf8GhVX/AHtX/wFLhf8MGaP/ODig/0REq/8aGsztZ2bepOHf3zuOj+MFycngAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACUABgX4QAAANoKgoHhT7+/3bhMTLz2CgmM/xEShv8FFKb/DBis/xoaov8ZGKr/dXTI8MDA + 36VNTuVBAADiCAcH4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhAGlo + 4BAZGONdY2PaxJGRtPsuLY7/UlGk/5eXxvI/P92uJiTfSry42Al0cNkAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI2N5AD///MA9vPgFoKC5WkcHNrKNDPatre2 + 40zs7OYK///sAAUF1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAIR/VADIvxwEWFd4bHBfXEQAH/wA+JaAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/8P/AP+B/wD+AP8A/AA/APAAHwDgAAcAwAADAMAAAwDAAAMAwAADAIAA + AwCAAAMAgAADAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAOAABwD4AB8A/gB/AP+B/wD/x/8AKAAAACAA + AABAAAAAAQAgAAAAAAAAEAAAwg4AAMIOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhqEAAAP//AFWQBxC0SAkT/wBDAMs1DQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7QfAEW2KAMvsQw+QZ0EsblEC7XRMw4+z0kkA89E + HgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtrulAGR7IgDb0NsXq8uhfD61HOY7owX/vUQP/9BF + I+bOpZt8zNveFMnNzADRx8cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2vAAAVqQAGMbAJSJ7Ikb2uvqr6Uag3/4i+ + cf/JjXj/vVg//8CtqPrPopayzToUOs4dAALONQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM3MzADQ19EA19HZGlK5M4QsrgXoZJhU/05Y + Rf96iHT/x87D/87Gwf+HeXb/VklJ/6lrXP/NORLf0Fo7cszZ3RLMzMwAzs7OAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAprgAAAKQABne/YU7K0MjEZKtP+hln + AP8fRAf/JUoC/2GJUP9sr0P/wHFJ/4dcVf9MAwP/XQ8K/4YfCP/BcFr40MrIr8uDbjjFIwACyFQ0AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwA////AIK/biMqsQKOVbQ57Y6Z + if81UST/IEUA/y1aAP8tWwD/I34E/zmjA/++Qwz/iSMM/2QBAP+EAAD/YwEA/2g2Mf+omJT/zF5B39A5 + EmvNh3YPzykAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO7IXACmuAgm5zbNZpsmczi6c + Df0lYw7/KEIR/yBHHP8nUxv/L10D/yxaAP8zgRb/f7xl/8mEav+JMBz/YwAA/44AAP+MAAD/dAEB/10a + GP+HKxb/wUEg+NCtpKjOvbgxyAAAAstKJAAAAAAAAAAAAAAAAAAAAAAAAAAAADSuDQA4rREkMbEKl5K/ + hO+BkHz/HUkF/x5DD/8XVFf/B3um/whxnP8cUET/LVgE/36Rcv/M0Mr/z8rI/4hybv9jAQD/egQX/2gF + LP9+CBT/ZA8q/18CBf9pHRL/qZmV/82OftrOOhNnzDsZDMw8GAAAAAAAAAAAAAAAAAAAAAAAK64DACyv + BIUpowX/O2It/ypFEP8nUgv/FWd//xSWzf8Lqtf/AJnW/xVYcP8uWAb/cZBk/361XP/Cg2L/iWpk/2MB + AP9tGTL/IEql/y03gv8dZZ//XCBA/3UAAP9eIiL/jUo7/8k2D+/MOxVXzDgSAAAAAAAAAAAAAAAAAAAA + AABWuTkATroukVqVSP8jPw3/LVoA/x9gSf8Lh7r/OIxy/yuUtf8Hcrj/Jlos/y5aAP8pggv/OaMC/71C + C/+KKRP/YQAA/4wPEP9IZ5//Am7T/wGN1P8lV5L/ggIN/4UAAP9uHhv/uFg//M9GInTNTCoAAAAAAAAA + AAAAAAAAy8LFANa1zQTF0cGgk5uQ/ypIDP8pWxb/C2Oj/w9kjP8kVDT/DF2v/xhRYv8vXgL/LFoA/yeC + Cf9ksz//xmlE/4omD/9hAAD/jgEA/25GZP8YW8r/NHrD/xBquf9ZED7/igAC/4IlJf+ypKH90K6lds6z + qwAAAAAAAAAAAAAAAACtyKUAwMu9CZLHgqpJhjb/IUYA/x5qTP8BX9D/Bjit/wkyl/8NO4D/KlYT/zBg + AP8tWgH/cJBi/8bQxP/QxMD/imRc/2ABAP+NAAD/hicv/y5Uuf8mUL3/CnfQ/w5ar/9tCyj/hBUR/6xv + Yf/PrKOLzaKWAAAAAAAAAAAAAAAAADmwFgA+sBwOLbMGshx5Af8gRQD/K3E3/xVxwP8APNn/ASzA/xYy + Uf8tWgX/MGAA/zBcBf+JloL/pcKR/8eolf+KfHv/YAMD/40AAP+NCwr/VEmL/wM20v8AUtH/FVGt/2oR + L/+FDgn/py0O/9FGIZHOQRwAAAAAAAAAAAAAAAAAPbEaADavERdUujbDTn0+/yRHAv80ZAr/OoaB/xFO + 1/8AI9j/DzKA/y1aB/8xYwD/L1wF/z6NJf9Fpg3/vk4Z/5NBL/9lDg7/jwMD/44AAP+BIjX/JDrB/w4k + tv9dCkD/iAEG/4YWFP+jTTj/0UsomQD//wC7b18AAAAAAAAAAACxx6gArsekGsTPwMl3gHL/I0gA/y9e + AP9Acyz/Sn2X/yZinf8mXzH/MF8A/0RiJ/9ihVL/LakL/zWbDP+1PRX/wDwZ/4daVP94Jyf/iggI/5AH + Bv9eNnf/EyK3/2MEL/+OAAD/hhcX/56OjP/Rs6uqyJSGCcqflAAAAAAAAAAAAK7HpQC0ya0jksSD2jxv + Kv8jSQD/L18A/zBfAf87ahT/NmoR/yhbAP8rbQ7/na6W/6fFov8qgVD/FDig/0UZoP+fO1b/ya2n/6eL + hP98IRX/fw0K/4YaIv9NKWv/aQcs/40AAP+FDgz/mmJW/9KxqKvO19kKzsbEAAAAAAAAAAAAPLEZAD+z + GyUvrgneGGIA/yVLAP8wYAD/MWEA/zRdCf9IaS7/LIwO/zauE/+30K//ys/U/2Zu1v8cGtf/HyDY/3tw + 0v/RzdP/06qe/8M7Fv+WMRr/eC8t/4QOD/+OAwT/jgAA/4ULCf+ZJw3/0EgkuMZfRRHHWTwAAAAAAAAA + AAA2sREAM7INL0axJ/A2YyX/J1AA/y5fAP8nXQP/cIpi/6a8oP86oDf/H2Nv/2x01f+/vtr/mZin/ykp + dP86Oob/qaq4/7y93v92Z8z/hihf/8BRRP+zpKD/hU9J/3sQDP+MBgb/hwwL/5U6J//QQhzEzTAHF800 + DAAAAAAAAAAAAKLIlwCiyZUyssWs9lpkUf8yUBT/L3IR/yqcCP+byYz/yNHL/1lwvP8XGNv/Dw65/yQk + d/8TE2j/AwOW/xERrf8vL5L/Li6W/w8QyP8gGtn/hme1/9PNzP/LhnD/oisM/3wkG/94Ghv/kXVz/8+m + m8bNhHEYzIp5AAAAAAAAAAAAv9C7AMPMvkOfwZX4W4BP/5ifk/9UsD7/Iog4/26Gt//LyuP/tLPI/zg4 + hv8CAWX/AACG/wACp/8AAq//AAC1/wYGtf8SFKH/FhaL/1NTpf/Cw9X/x8nj/5ZmnP+3MCj/vWtW/4d3 + dv+VbGP/zbu32szKyiPLxsYAAAAAAAAAAAA/tBsAULcyUjayEPlsvFL/ztTL/2qNpP8XJcz/FBPT/zg4 + mP8wMGb/BwZ7/wAJoP8AOab/AG6T/wBrjv8AOpv/AE+d/wFih/8LL5P/JCWb/1JSjv8+Prb/GBXZ/0Af + tf+vg57/0MK8/8laOv/OVTXcznJbJM5uVQAAAAAAAAAAACCsAAAsrQRdI54T+1WMgv/Cwt//xsXb/1pZ + q/8ICG7/AABx/wAAnv8AGKr/AG6L/wCrff8Dton/BM6g/wPEqP8CyLP/AJOX/wApm/8DA7f/DQ2x/xMT + k/8aGpf/dHXI/8zO4f/BuM//sExV/8o0EejOOxMrzToUAAAAAAAAAAAAEDCsAB54SlkUO6DrERXc/z8/ + 2f9eXnv/GBhK/wAAjf8AALP/AAC3/wA8sf8AtX7/AJ9S/xZqgv8woq//Iqe2/yfBsP8FmYD/ACiE/wAB + sv8AALb/Bga5/xkZqv9MTIH/dHSp/zg44P8nFcj/cyRz6agzPC2gMUUAAAAAAAAAAAADAP8ADCHBCRIP + 4ksfH+GweHjf9KSktP9OTnX/BgZw/wAAl/8AALP/CDe1/xCnbv8Doyv/BnFO/w8/hP8RSoz/J6yE/wap + X/8ANGv/AAGy/wMDuP8NDbD/JCSa/21tkv+Tk77/Skrh8w8Q47AcFdZPf0KAB2Q2lwAAAAAAAAAAAAAA + AAAPD9wA6OflAHBv3A/Z2NpbvLvjvktK2PgNDaz/CQl0/wgHdf8KEaD/LlOf/yuJWP8RoCf/AJMo/wCV + L/8Bmkr/AGB4/wIUof8MDLH/GBic/xISlv8bG7r/eXnZ99fW4Li6uuFOFhbhDjo66QAPD9wAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUB2gAnJdwVExLeZygo4sqDg9T7k5Oh/y8ucP8EA37/GiCi/x1P + mv8DYJH/AFaG/wEsnP8KEa//GRmf/1palf+Xl7X/V1fZ9BIS47wcG99chn7EFBEQ4gAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIi0wD///8Ao5/WG97c33afn+LUNjbO/AkJ + l/8LC27/BgWG/wECrv8JCrb/Gxqi/xcWlf8VFbH/X17W+cfG4cHPz+JbUlLgEv//xwALC+EAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJyeEA///oAjc1 + 2iYUE9+IRUXh3peXx/90c4z/Hh53/0JCkf+UlK7/eHjU+iQk4skcGtpsd3LSGP///wDf39sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAUFDiAAIE5AO2tNwv1dXilHBw3+UZGcj/NTTP/aem4M3d3eJqa2vhGwAA3AEMDN4AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABgY3wAWFuAFDg7fOhER4ZgYFt13KiXTHxkV1gAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAP8AHBrVBC4nzAIiHdQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//n////gf///w + D///wAP//4AB//4AAH/8AAA/8AAAD+AAAAfgAAAH4AAAB8AAAAfAAAAHwAAAB8AAAAfAAAADwAAAA8AA + AAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAAD8AAAD/wAAD//AAD//4AD///gB///+D////5//ygA + AAAwAAAAYAAAAAEAIAAAAAAAACQAAMIOAADCDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAN4AAFaOAgHLOQUD1DMGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA9rRcAOq0WGTuhA1TBPgtezjQNGc01DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAHK0AAA2tAAQxrQw3L64IoDekAvHBPwz1zjUNoM0yCzfSIAAE0CgAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dEA6tbvEp/Hk3BHtCXUJ68A/TSmAf/CPgv/zjML/c1L + KdTMmItwyt3kEsvHxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0uQAAAGkAAFWuMQWsw5891NLVp6/Kp+1Mtiz/KK8A/1Gv + J//FWzT/zjYO/81TMv/Nq6Ltzc/Pps2roizOJwACtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2pAAAZpwABKa4AFy6vB3Z0v13e0dHR/KO2 + nf9KnDL/bLhW/7TLrP/Ntq7/yXRf/7JROP+6opz/zs7O/M58Zs/NOhRgzjMLC/8AAADcAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAztDOAP/b/wdYtzo8K68DtSyx + BPVptlL/nJ6b/0FIPP9baVX/wMa//9HR0P/Pzs3/x8C+/2pbWP9IQkH/op+f/8lxWv/POBHvzjcQms1i + RSrK+f8Fy8vLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALzLtQCpyJ0Cx8zEIdbQ + 2HZ5wGTcMLEJ/ySXAv8yaCH/KTob/xg1AP9qdGD/ucS2/5zCif/KnIn/x7q2/2hiYv8nAAD/RiIh/387 + Kv+5MQ7/zz0X/c5+as3N1tldx9XVD/+amgCf//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHawAAA6o + AAVEtCNPqsigtdXS1f1/uG7/IHoF/xJEAP8XMwD/J1IA/ylUAP9QdDz/YrNL/0CpD//CSBj/x2tT/21I + Qf9PAAD/bQAA/0kCAf9fEgT/ni8S/8uLev/Q1NTtzKeck8hkSDPFQh4Dx1k7AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAorwEAKK8BISauAIY5sxXincaQ/6+vsP9IYj//FDUA/x9BAP8rWAD/MWMA/yxWAP8kbAX/JqgD/zOm + Af/CPQv/xzQO/20eDP9SAAD/igAA/4AAAP9bAAD/TAsF/3pZUv+7vr//z5iJ/s1JJsjOMwxa0CEDBtAa + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACmyZ4A/+j/ANDR0gnJzMVaVrc4vyivAPgyqA//X4BV/ztFMv8fOgf/J04B/y5dAP8vXgD/MWMA/ytW + AP8fawD/J6gC/0asGf/ETyP/xzQO/24ZBv9SAAD/iQAA/40AAP+JAAD/bwAA/00NDf9aSUn/om1f/8s+ + Gv7ONxDnzWFFkczV2CLCwcEAzc3NAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAALwAAC6sAAAARQABeL9lJL7NupTM0cvpXbdD/iGRAP8WTgL/HDYI/yJFAf8kTxn/IEky/ydS + GP8uWgT/MmMB/ytVAP8nbQr/YbRJ/6nInv/Nq5//x2dN/24gD/9RAAD/iQAA/40AAP+NAAD/jAAA/38A + AP9eBAP/SBMO/30hCv++NBD/zXRc+c/Q0cbOwr9QzFExCMAAAADLNwsAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAASa0iAD2tFxAlrQBSTbctyrHLqvq7v7v/RHc0/xA2AP8bOwH/JU0O/x1O + Qf8KXpL/A3Os/wxVfv8bRT7/LlwL/ylVAP9geVH/v8i8/9LS0//P0ND/x7y4/25STf9RAAD/iAAA/4IA + DP94ARj/iQAE/4UFDP92Bxn/bQEG/0sCAP9aFAb/pGJR/8nLzP7PopbuzVEwiMsyCiTJSCkBykAdAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOK0RAzatD4UsrgT1RLAk/omdgv9TWU7/HTQJ/yNK + AP8mVCL/ElJ9/wJ1vf8AqNP/ALDW/wCYzf8HT5n/KlUc/ypVAP90fWr/xsrF/7DIpP/LsaX/yMTD/25l + Zf9QAAD/iAAB/1cURf8iIYr/UgxI/2gWMv83P3j/UxtK/30BBf9dAAD/SR0b/4B7e/+6joL/zkgk/M04 + EcLMPBk1zD0bAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALa4FBSyuBNQlqwD/JncO/yQ2 + Gf8dPQH/KlYA/yxcDf8SYYX/C47W/yCw1v8TqNb/AqHX/wCX1f8MVJT/LVwS/ytVAP9feVD/fLxq/1Ct + JP/DWC7/yIRy/25UUP9QAAD/iAAB/2gkO/8fZrz/CU+5/yQ6jP8TfbL/FGqq/28PJv+KAAD/cAAA/00O + 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 + AP8vXgD/L14A/zBfAf84ZhD/QnEk/zNpC/8xZAD/JlUA/yJVCv+KnoP/zMnM/5fFiv8xpR//HX1C/xMx + qv9AGaf/lihI/8VGL//No5j/wcPE/45tZ/9hGRH/fRIR/48JCf+SEBD/X0Nm/yUzoP9NDU7/hQAG/4wA + AP+VCgr/ZiUg/7eVjP/QxcPgz8/PMdDQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwvVoAbrxXiUKz + IPgggQP/FC4A/yxZAP8vXgD/L14A/y9eAP8xZAD/MWMA/y5aBP8gUwT/G3MA/zKmD/+qyaH/1NPT/6C+ + pv8wXZb/CxLU/w0N4/8NDuP/IBHM/39Ejf/Iq63/z9DP/8yYiv+yNRT/dR0K/2wWEP+DEBD/jgwN/3sO + IP+FAwr/jAAA/4wAAP+WCgr/ZRMM/7Y+Hv/PdV7iypqNN8mdkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAArrQQAK60DjSetAfkbeQD/FS4A/y1aAP8vXgD/MGEA/zNnAP8uWwP/QVom/1dySv83mRv/Jq8A/ze1 + Dv+yzan/29zY/83N3/+PjuP/R0fi/xYWzv8aGtP/T0/j/5aX4v/Q0N3/2NfU/9Ofjf/SPRP/yDIK/5g/ + Kf9uR0T/cRwd/4sLC/+TBQT/jAAA/4sAAP+XCQn/ZREL/7UuC//PNg/px0clUcdIJwAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAArrgMAK64DpzGuDP83eSL/FzEB/y5cAP8zZgD/MWEA/yVQAv9JaTb/oZ+h/6bD + nf9IuCb/I58T/yRxYP9zfcz/xsbh/+Pj4v/U1NT/d3eZ/x0da/8nJ3T/jY2p/9zc2//i4uL/wcDf/4Jq + vf+YLk3/yzEN/9BjRv+3qaX/h318/2onI/95Dg7/lAoK/44BAf+XCQn/ZBUR/7E3GP/PNQ3tzTQMXs00 + DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZuT0AW7o/tYzAfP9ufGj/GzgC/zNmAP8pVQH/HVQA/yN9 + Bv95sWj/1NPU/6rJo/89iGH/ETqd/w8Y0v8aGuH/Skrb/3t7r/9ZWWb/HR1P/w0Ndf8gIJb/PT18/3Fx + gv9/f8L/RETf/xoa4v8nFMb/XxyE/7FcZf/Rv7n/ysfH/6hWQP95Hgz/ZxIO/4oPDv+dDQ3/Yxwb/66A + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAmQA3MdQAJyPRAhgY4B1sa+F5z87g0N3d4fjDw9z/aWmw/xcXeP8+P5X/q6vQ/9nZ + 4P/Z2eHmlZXhrCoq4FAAANwIQji9AUE3vgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM/DwAC+pZ4C4d3VLsbG4YhjY+HSGxvi+g4O + 4f8VFeL/SEjf8K2s36nk5OBT4ODeDeDg3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeAAAA + 3QgEBOE2FBPdkBAQ4NsXFdyxIB3UXh4Y0BgeGNEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAvLMwALSrNERIR3jMhHdUeKCPQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///5///8AAP///D///wAA///wD///AAD//+AH//8AAP//gAH//wAA//4AAP// + AAD//AAAP/8AAP/wAAAf/wAA/+AAAAf/AAD/wAAAA/8AAP8AAAAB/wAA/AAAAAB/AAD4AAAAAB8AAPAA + AAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP + AADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAA + AAAADwAA8AAAAAAPAADgAAAAAA8AAOAAAAAADwAA4AAAAAAPAADgAAAAAA8AAOAAAAAADwAA4AAAAAAP + AADgAAAAAA8AAPgAAAAAHwAA/gAAAAB/AAD/gAAAAf8AAP/gAAAH/wAA//AAAA//AAD//AAAP/8AAP// + AAD//wAA///AB///AAD///Af//8AAP///D///wAA////////AAAoAAAAOAAAAHAAAAABACAAAAAAAAAx + AADCDgAAwg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnrwAgzzUKMAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOa0TgCiuAO/ONQ3/zTUNgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAP7QfMDOtDM8orwD/KK8A/841Df/ONQ3/zTQNz89FHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0YCCwW//KK8A/yiv + AP8orwD/zjUN/841Df/ONQ3/zX1o/8vHx4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJu7h0DR0dHP0dHR/3/BbP8orwD/Kq8C/1i5O//OZkv/zjcP/841 + Df/Of2r/zs7O/8zLys/Pj38gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + Df/KPRi/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7EJ/3a/ + Yf9gaF3/FS4A/y9eAP8vXgD/L14C/xZUc/8Aktf/EpTF/0B3Mf9OhVD/QKTP/wCH1/8FXLv/J1Eg/y9e + AP83bgD/GTgA/yOXAP8orwD/KK8A/841Df/ONQ3/rCwL/yUCAf92AAD/jAAA/4wCAv+Ci5z/B2XU/wBx + 1P8AhdT/AJHU/wCj1P8gOY//hgAH/4wAAP+MAAD/jgMD/1wVFf+fbWD/zkUh/841Db8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsyqL/0dHR/2FiYP8YNQD/L14A/y9e + AP8nVib/A3HL/wCE1P8XfGz/L14A/ytiNf8OhNP/AGjS/xc6XP8vXgD/L14A/zdvAP8ZNwD/I5kA/yiv + AP8qsAP/zjcP/841Df+sLAv/JQIB/3YAAP+MAAD/jAAA/4osMP8sd87/AFrT/xdk0v8Sh9T/AJXU/wZD + qv97ABP/jAAA/4wAAP+PAwP/cBMT/5eXl//Ou7b/znJZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAx7+/QNHR0f/R0dH/UFVN/xo5AP8vXgD/Ll4D/w5OmP8Addf/A0q2/ylX + Fv8tWgb/CS6T/wBn1/8HNZv/LVkJ/y9eAP8vXgD/OHAA/xg1AP8jmgD/QLQe/5PFhP/OkoL/zkcj/6wt + C/8lAgH/dQAA/4wAAP+MAAD/jhYW/2SXxf8BTNP/KCmf/4+gtf8NitT/AV6+/zQIYv9/AA//jAAA/44C + Av95FBT/jo6O/87Ozv/Ozc2/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADPz89Ayc/H/4HBbv8XPwr/HT0A/y9eAP8gZEP/AWfV/wBf1/8CMbj/EjFv/xApcf8APc7/ADq6/yFH + L/8vXgD/L14A/y9eAP84cAD/GTUC/2qqV//Azrz/0dHR/87Ozv/Ou7b/rWFN/yUDAf91AAD/jAAA/4wA + AP+MAQH/fVtp/xFb1P8HNL3/aWSc/xyB1P8AhdT/AHvH/xYdkv+AAA//jgIC/38UFP+DT0L/zr66/8nG + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAADw/fIFBQ4p/MzOH/4eHh/+Hh4f/X19j/aGiL/wwMQP89PWr/wsLG/+Hh + 4f/h4eH/1NTh/3p64d8NDd9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAM/ExDDh4eG/wMDh/15e4f8VFeH/Dg7d/xMT4f9LS+H/s7Ph/97e4d/f399gAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAfH99ADQ3hvw8P4f8PD+H/Dw/h/xgX2+80L9NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyXRYA4O + 4c8hHdWAr4+PEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////8A////5////wD////D////AP///wD///8A///+AH// + /wD///gAH///AP//4AAP//8A///AAAP//wD//wAAAf//AP/+AAAAf/8A//gAAAA//wD/8AAAAA//AP/A + AAAAB/8A/4AAAAAB/wD+AAAAAAD/APwAAAAAAD8A/AAAAAAAPwD8AAAAAAA/APwAAAAAAD8A/AAAAAAA + PwD4AAAAAAA/APgAAAAAAD8A+AAAAAAAPwD4AAAAAAA/APgAAAAAAD8A+AAAAAAAHwD4AAAAAAAfAPgA + AAAAAB8A+AAAAAAAHwD4AAAAAAAfAPgAAAAAAB8A+AAAAAAAHwD4AAAAAAAfAPgAAAAAAB8A+AAAAAAA + HwDwAAAAAAAfAPAAAAAAAB8A8AAAAAAAHwDwAAAAAAAfAPAAAAAAAB8A8AAAAAAAHwDwAAAAAAAfAPgA + AAAAAB8A/gAAAAAAfwD/gAAAAAH/AP/gAAAAB/8A//gAAAAf/wD//gAAAH//AP//AAAB//8A///AAAf/ + /wD///AAH///AP///AB///8A////Af///wD////D////AP////////8A/////////wA= + + + \ No newline at end of file diff --git a/src/Forms/ScriptDumps.Designer.cs b/src/Forms/ScriptDumps.Designer.cs index 24d590d..7a957b9 100644 --- a/src/Forms/ScriptDumps.Designer.cs +++ b/src/Forms/ScriptDumps.Designer.cs @@ -42,6 +42,20 @@ private void InitializeComponent() this.lt_f3d_radioPanel = new System.Windows.Forms.Panel(); this.lt_f3d_textbox = new System.Windows.Forms.RichTextBox(); this.tabObjects = new System.Windows.Forms.TabPage(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.listObjectsSortPanel = new System.Windows.Forms.Panel(); + this.comboBoxObjectSort = new System.Windows.Forms.ComboBox(); + this.ListObjectsSortLabel = new System.Windows.Forms.Label(); + this.listBoxObjects = new System.Windows.Forms.ListBox(); + this.subTabsObjects = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.ot_gls_textbox = new System.Windows.Forms.RichTextBox(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.ot_f3d_listbox = new System.Windows.Forms.ListBox(); + this.ot_f3d_textbox = new System.Windows.Forms.RichTextBox(); + this.richTextBox2 = new System.Windows.Forms.RichTextBox(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.ot_beh_textbox = new System.Windows.Forms.RichTextBox(); this.IndentCB = new System.Windows.Forms.CheckBox(); this.wordWrapCB = new System.Windows.Forms.CheckBox(); this.FormatCB = new System.Windows.Forms.CheckBox(); @@ -55,6 +69,16 @@ private void InitializeComponent() this.lt_lsTab.SuspendLayout(); this.lt_glTab.SuspendLayout(); this.lt_f3dTab.SuspendLayout(); + this.tabObjects.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.listObjectsSortPanel.SuspendLayout(); + this.subTabsObjects.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tabPage3.SuspendLayout(); this.panel1.SuspendLayout(); this.SuspendLayout(); // @@ -70,6 +94,7 @@ private void InitializeComponent() this.sd_tabs.SelectedIndex = 0; this.sd_tabs.Size = new System.Drawing.Size(715, 417); this.sd_tabs.TabIndex = 0; + this.sd_tabs.SelectedIndexChanged += new System.EventHandler(this.sd_tabs_SelectedIndexChanged); // // tabLevel // @@ -105,7 +130,7 @@ private void InitializeComponent() this.lt_lsTab.Padding = new System.Windows.Forms.Padding(3); this.lt_lsTab.Size = new System.Drawing.Size(699, 365); this.lt_lsTab.TabIndex = 0; - this.lt_lsTab.Text = "Level scripts"; + this.lt_lsTab.Text = "Level script"; this.lt_lsTab.UseVisualStyleBackColor = true; // // lt_ls_textbox @@ -133,7 +158,7 @@ private void InitializeComponent() this.lt_glTab.Padding = new System.Windows.Forms.Padding(3); this.lt_glTab.Size = new System.Drawing.Size(699, 365); this.lt_glTab.TabIndex = 1; - this.lt_glTab.Text = "Geometry layout scripts"; + this.lt_glTab.Text = "Geometry layout script"; this.lt_glTab.UseVisualStyleBackColor = true; // // lt_gls_radioPanel @@ -172,7 +197,7 @@ private void InitializeComponent() this.lt_f3dTab.Name = "lt_f3dTab"; this.lt_f3dTab.Size = new System.Drawing.Size(699, 365); this.lt_f3dTab.TabIndex = 2; - this.lt_f3dTab.Text = "Fast3D scripts"; + this.lt_f3dTab.Text = "Fast3D script"; this.lt_f3dTab.UseVisualStyleBackColor = true; // // lt_f3d_listbox @@ -182,10 +207,11 @@ private void InitializeComponent() this.lt_f3d_listbox.BackColor = System.Drawing.SystemColors.Window; this.lt_f3d_listbox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lt_f3d_listbox.FormattingEnabled = true; + this.lt_f3d_listbox.IntegralHeight = false; this.lt_f3d_listbox.ItemHeight = 14; this.lt_f3d_listbox.Location = new System.Drawing.Point(0, 21); this.lt_f3d_listbox.Name = "lt_f3d_listbox"; - this.lt_f3d_listbox.Size = new System.Drawing.Size(88, 340); + this.lt_f3d_listbox.Size = new System.Drawing.Size(88, 341); this.lt_f3d_listbox.TabIndex = 10; this.lt_f3d_listbox.SelectedIndexChanged += new System.EventHandler(this.lt_f3d_listbox_SelectedIndexChanged); // @@ -218,6 +244,7 @@ private void InitializeComponent() // // tabObjects // + this.tabObjects.Controls.Add(this.splitContainer1); this.tabObjects.Location = new System.Drawing.Point(4, 22); this.tabObjects.Name = "tabObjects"; this.tabObjects.Size = new System.Drawing.Size(707, 391); @@ -225,6 +252,212 @@ private void InitializeComponent() this.tabObjects.Text = "Objects"; this.tabObjects.UseVisualStyleBackColor = true; // + // splitContainer1 + // + this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.listObjectsSortPanel); + this.splitContainer1.Panel1.Controls.Add(this.listBoxObjects); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.subTabsObjects); + this.splitContainer1.Size = new System.Drawing.Size(711, 391); + this.splitContainer1.SplitterDistance = 225; + this.splitContainer1.TabIndex = 2; + // + // listObjectsSortPanel + // + this.listObjectsSortPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listObjectsSortPanel.BackColor = System.Drawing.Color.WhiteSmoke; + this.listObjectsSortPanel.Controls.Add(this.comboBoxObjectSort); + this.listObjectsSortPanel.Controls.Add(this.ListObjectsSortLabel); + this.listObjectsSortPanel.Location = new System.Drawing.Point(0, 0); + this.listObjectsSortPanel.Name = "listObjectsSortPanel"; + this.listObjectsSortPanel.Size = new System.Drawing.Size(224, 25); + this.listObjectsSortPanel.TabIndex = 1; + // + // comboBoxObjectSort + // + this.comboBoxObjectSort.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.comboBoxObjectSort.DisplayMember = "0"; + this.comboBoxObjectSort.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxObjectSort.DropDownWidth = 180; + this.comboBoxObjectSort.FormattingEnabled = true; + this.comboBoxObjectSort.Items.AddRange(new object[] { + "Combo Name (Alphabetical)", + "Geo Layout Offset (Segment Address)", + "Geo Layout Offset (ROM Address)", + "Fast3D Offset (Segment Address)", + "Fast3D Offset (ROM Address)", + "Behavior Offset (Segment Address)", + "Behavior Offset (ROM Address)"}); + this.comboBoxObjectSort.Location = new System.Drawing.Point(58, 2); + this.comboBoxObjectSort.Name = "comboBoxObjectSort"; + this.comboBoxObjectSort.Size = new System.Drawing.Size(166, 21); + this.comboBoxObjectSort.TabIndex = 1; + this.comboBoxObjectSort.SelectedIndexChanged += new System.EventHandler(this.comboBoxObjectSort_SelectedIndexChanged); + // + // ListObjectsSortLabel + // + this.ListObjectsSortLabel.AutoSize = true; + this.ListObjectsSortLabel.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ListObjectsSortLabel.Location = new System.Drawing.Point(1, 6); + this.ListObjectsSortLabel.Name = "ListObjectsSortLabel"; + this.ListObjectsSortLabel.Size = new System.Drawing.Size(55, 13); + this.ListObjectsSortLabel.TabIndex = 0; + this.ListObjectsSortLabel.Text = "Sort by:"; + // + // listBoxObjects + // + this.listBoxObjects.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listBoxObjects.FormattingEnabled = true; + this.listBoxObjects.IntegralHeight = false; + this.listBoxObjects.Location = new System.Drawing.Point(0, 25); + this.listBoxObjects.Name = "listBoxObjects"; + this.listBoxObjects.Size = new System.Drawing.Size(224, 363); + this.listBoxObjects.TabIndex = 0; + this.listBoxObjects.SelectedIndexChanged += new System.EventHandler(this.listBoxObjects_SelectedIndexChanged); + // + // subTabsObjects + // + this.subTabsObjects.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.subTabsObjects.Controls.Add(this.tabPage1); + this.subTabsObjects.Controls.Add(this.tabPage2); + this.subTabsObjects.Controls.Add(this.tabPage3); + this.subTabsObjects.Location = new System.Drawing.Point(0, 0); + this.subTabsObjects.Name = "subTabsObjects"; + this.subTabsObjects.SelectedIndex = 0; + this.subTabsObjects.Size = new System.Drawing.Size(476, 390); + this.subTabsObjects.TabIndex = 1; + this.subTabsObjects.SelectedIndexChanged += new System.EventHandler(this.subTabsObjects_SelectedIndexChanged); + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.ot_gls_textbox); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(468, 364); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Geometry layout script"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // ot_gls_textbox + // + this.ot_gls_textbox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ot_gls_textbox.DetectUrls = false; + this.ot_gls_textbox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ot_gls_textbox.HideSelection = false; + this.ot_gls_textbox.Location = new System.Drawing.Point(0, 0); + this.ot_gls_textbox.Name = "ot_gls_textbox"; + this.ot_gls_textbox.Size = new System.Drawing.Size(468, 362); + this.ot_gls_textbox.TabIndex = 5; + this.ot_gls_textbox.TabStop = false; + this.ot_gls_textbox.Text = ""; + this.ot_gls_textbox.WordWrap = false; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.ot_f3d_listbox); + this.tabPage2.Controls.Add(this.ot_f3d_textbox); + this.tabPage2.Controls.Add(this.richTextBox2); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(468, 364); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Fast3D script"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // ot_f3d_listbox + // + this.ot_f3d_listbox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ot_f3d_listbox.BackColor = System.Drawing.SystemColors.Window; + this.ot_f3d_listbox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ot_f3d_listbox.FormattingEnabled = true; + this.ot_f3d_listbox.IntegralHeight = false; + this.ot_f3d_listbox.ItemHeight = 14; + this.ot_f3d_listbox.Location = new System.Drawing.Point(0, 0); + this.ot_f3d_listbox.Name = "ot_f3d_listbox"; + this.ot_f3d_listbox.Size = new System.Drawing.Size(88, 364); + this.ot_f3d_listbox.TabIndex = 12; + this.ot_f3d_listbox.SelectedIndexChanged += new System.EventHandler(this.ot_f3d_listbox_SelectedIndexChanged); + // + // ot_f3d_textbox + // + this.ot_f3d_textbox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ot_f3d_textbox.DetectUrls = false; + this.ot_f3d_textbox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ot_f3d_textbox.HideSelection = false; + this.ot_f3d_textbox.Location = new System.Drawing.Point(88, 2); + this.ot_f3d_textbox.Name = "ot_f3d_textbox"; + this.ot_f3d_textbox.Size = new System.Drawing.Size(379, 362); + this.ot_f3d_textbox.TabIndex = 11; + this.ot_f3d_textbox.TabStop = false; + this.ot_f3d_textbox.Text = ""; + this.ot_f3d_textbox.WordWrap = false; + // + // richTextBox2 + // + this.richTextBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.richTextBox2.DetectUrls = false; + this.richTextBox2.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.richTextBox2.HideSelection = false; + this.richTextBox2.Location = new System.Drawing.Point(0, 0); + this.richTextBox2.Name = "richTextBox2"; + this.richTextBox2.Size = new System.Drawing.Size(468, 364); + this.richTextBox2.TabIndex = 6; + this.richTextBox2.TabStop = false; + this.richTextBox2.Text = ""; + this.richTextBox2.WordWrap = false; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.ot_beh_textbox); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(468, 364); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "Behavior script"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // ot_beh_textbox + // + this.ot_beh_textbox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ot_beh_textbox.DetectUrls = false; + this.ot_beh_textbox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ot_beh_textbox.HideSelection = false; + this.ot_beh_textbox.Location = new System.Drawing.Point(0, 1); + this.ot_beh_textbox.Name = "ot_beh_textbox"; + this.ot_beh_textbox.Size = new System.Drawing.Size(468, 362); + this.ot_beh_textbox.TabIndex = 6; + this.ot_beh_textbox.TabStop = false; + this.ot_beh_textbox.Text = ""; + this.ot_beh_textbox.WordWrap = false; + // // IndentCB // this.IndentCB.AutoSize = true; @@ -328,6 +561,7 @@ private void InitializeComponent() this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MinimumSize = new System.Drawing.Size(730, 180); this.Name = "ScriptDumps"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Script Dumps"; this.sd_tabs.ResumeLayout(false); this.tabLevel.ResumeLayout(false); @@ -335,6 +569,17 @@ private void InitializeComponent() this.lt_lsTab.ResumeLayout(false); this.lt_glTab.ResumeLayout(false); this.lt_f3dTab.ResumeLayout(false); + this.tabObjects.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.listObjectsSortPanel.ResumeLayout(false); + this.listObjectsSortPanel.PerformLayout(); + this.subTabsObjects.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.tabPage3.ResumeLayout(false); this.panel1.ResumeLayout(false); this.panel1.PerformLayout(); this.ResumeLayout(false); @@ -363,5 +608,19 @@ private void InitializeComponent() private System.Windows.Forms.Panel lt_f3d_radioPanel; private System.Windows.Forms.RichTextBox lt_f3d_textbox; private System.Windows.Forms.ListBox lt_f3d_listbox; + private System.Windows.Forms.ListBox listBoxObjects; + private System.Windows.Forms.TabControl subTabsObjects; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.RichTextBox ot_gls_textbox; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.RichTextBox richTextBox2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.ListBox ot_f3d_listbox; + private System.Windows.Forms.RichTextBox ot_f3d_textbox; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.Panel listObjectsSortPanel; + private System.Windows.Forms.Label ListObjectsSortLabel; + private System.Windows.Forms.ComboBox comboBoxObjectSort; + private System.Windows.Forms.RichTextBox ot_beh_textbox; } } \ No newline at end of file diff --git a/src/Forms/ScriptDumps.cs b/src/Forms/ScriptDumps.cs index 57dd0b5..ddfe2c3 100644 --- a/src/Forms/ScriptDumps.cs +++ b/src/Forms/ScriptDumps.cs @@ -1,5 +1,8 @@ -using Quad64.src.LevelInfo; +using Quad64.src.JSON; +using Quad64.src.LevelInfo; +using Quad64.src.Scripts; using System; +using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Runtime.InteropServices; @@ -10,16 +13,20 @@ namespace Quad64.src.Forms partial class ScriptDumps : Form { private Level level; - private RichTextBox currentTextbox; + private RichTextBox currentTextbox, lastTextBoxForLevelTab, lastTextBoxForObjectsTab; public ScriptDumps(Level level) { this.level = level; InitializeComponent(); + lastTextBoxForLevelTab = lt_ls_textbox; + lastTextBoxForObjectsTab = ot_gls_textbox; initGeoLayoutForLevelTab(); initFast3DForLevelTab(); currentTextbox = lt_ls_textbox; organizeCurrentLevelScript(level.LevelScriptCommands_ForDump); + initObjectList(); } + private static uint bytesToInt(byte[] b, int offset, int length) { @@ -109,13 +116,70 @@ private void updateScriptDump(object sender, EventArgs e) { BeginUpdate(currentTextbox); Point scrollPos = GetScrollPos(currentTextbox); - if(currentTextbox.Name.Equals("lt_ls_textbox")) - organizeCurrentLevelScript(level.LevelScriptCommands_ForDump); - else if (currentTextbox.Name.Equals("lt_gls_textbox")) - organizeCurrentGeoLayoutScript(level.Areas[lt_gls_areaIndex].AreaModel.GeoLayoutCommands_ForDump); - else if (currentTextbox.Name.Equals("lt_f3d_textbox")) - organizeCurrentFast3DScript(level.Areas[lt_f3d_areaIndex]. + //Console.WriteLine(currentTextbox.Name); + if (currentTextbox.Name.EndsWith("_ls_textbox")) + { + if (sd_tabs.SelectedIndex == 0) + organizeCurrentLevelScript(level.LevelScriptCommands_ForDump); + } + else if (currentTextbox.Name.EndsWith("_gls_textbox")) + { + if (sd_tabs.SelectedIndex == 0) + organizeCurrentGeoLayoutScript(level.Areas[lt_gls_areaIndex].AreaModel.GeoLayoutCommands_ForDump); + else + if (listBoxObjects.SelectedIndex > -1) + { + ushort key = objectCombos[listBoxObjects.SelectedIndex].ModelID;; + if (level.ModelIDs.ContainsKey(key) && level.ModelIDs[key].GeoLayoutCommands_ForDump.Count > 0) + { + organizeCurrentGeoLayoutScript(level.ModelIDs[key].GeoLayoutCommands_ForDump); + } + else + { + currentTextbox.ResetText(); + currentTextbox.Text = ""; + } + } + } + else if (currentTextbox.Name.EndsWith("_f3d_textbox")) + { + if (sd_tabs.SelectedIndex == 0) + organizeCurrentFast3DScript(level.Areas[lt_f3d_areaIndex]. AreaModel.Fast3DCommands_ForDump[lt_f3d_listbox.SelectedIndex]); + else + if (listBoxObjects.SelectedIndex > -1) + { + ushort key = objectCombos[listBoxObjects.SelectedIndex].ModelID; + if (level.ModelIDs.ContainsKey(key) && ot_f3d_listbox.SelectedIndex > -1) + { + + organizeCurrentFast3DScript(level.ModelIDs[key].Fast3DCommands_ForDump[ot_f3d_listbox.SelectedIndex]); + } + else + { + currentTextbox.ResetText(); + currentTextbox.Text = ""; + } + } + } + else if (currentTextbox.Name.EndsWith("_beh_textbox")) + { + if (sd_tabs.SelectedIndex == 1 && listBoxObjects.SelectedIndex > -1) + { + //ushort key = objectCombos[listBoxObjects.SelectedIndex].ModelID; + // if (objectCombos.Count) + // { + List behaviorDump = new List(); + BehaviorScripts.parse(ref behaviorDump, objectCombos[listBoxObjects.SelectedIndex].Behavior); + organizeCurrentBehaviorScript(behaviorDump); + // } + //else + //{ + // currentTextbox.ResetText(); + // currentTextbox.Text = ""; + //} + } + } SetScrollPos(scrollPos, currentTextbox); EndUpdate(currentTextbox); } @@ -144,5 +208,23 @@ private void subTabsLevel_SelectedIndexChanged(object sender, EventArgs e) break; } } + + private void sd_tabs_SelectedIndexChanged(object sender, EventArgs e) + { + // Switching between level tab and objects tab + switch (sd_tabs.SelectedIndex) + { + case 0: + lastTextBoxForObjectsTab = currentTextbox; + switchTextBoxes(lastTextBoxForLevelTab); + break; + case 1: + lastTextBoxForLevelTab = currentTextbox; + if (listBoxObjects.SelectedIndex == -1 && listBoxObjects.Items.Count > 0) + listBoxObjects.SelectedIndex = 0; + switchTextBoxes(lastTextBoxForObjectsTab); + break; + } + } } } diff --git a/src/Forms/ScriptDumps_Tabs/Level/LevelTab_Fast3D.cs b/src/Forms/ScriptDumps_Tabs/Level/LevelTab_Fast3D.cs index e7e0efa..cea525d 100644 --- a/src/Forms/ScriptDumps_Tabs/Level/LevelTab_Fast3D.cs +++ b/src/Forms/ScriptDumps_Tabs/Level/LevelTab_Fast3D.cs @@ -135,8 +135,6 @@ private string format_F3DCmd(byte[] cmd, bool doFormat) private void organizeCurrentFast3DScript(List f3dList) { - // Apparently "RichTextBox.AppendText()" is a REALLY slow function, but luckly you can just give the RichTextBox a string in RTF format. This will drastically speed up performance. - bool showROMAddr = showRomCB.Checked; bool showSegAddr = SegAddrCB.Checked; bool showComments = CommCB.Checked; diff --git a/src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_Behavior.cs b/src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_Behavior.cs new file mode 100644 index 0000000..edb649a --- /dev/null +++ b/src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_Behavior.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace Quad64.src.Forms +{ + partial class ScriptDumps : Form + { + private string format_BehCmd(byte[] cmd, bool doFormat) + { + if (doFormat) + { + string str = format_byte(cmd[0]); + switch (cmd[0]) + { + case 0x00: + case 0x01: + case 0x05: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x1B: + case 0x24: + case 0x32: + str += format_byte(cmd[1]) + format_short(cmd, 2); + break; + case 0x02: + case 0x04: + case 0x0C: + case 0x27: + case 0x2A: + case 0x2F: + case 0x31: + case 0x33: + case 0x36: + case 0x37: + str += format_byte(cmd[1]) + + format_byte(cmd[2]) + + format_byte(cmd[3]) + + format_int(cmd, 4); + break; + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + str += format_byte(cmd[1]) + + format_short(cmd, 2) + + format_short(cmd, 4) + + format_byte(cmd[6]) + + format_byte(cmd[7]); + break; + case 0x1C: + case 0x2C: + str += format_byte(cmd[1]) + + format_byte(cmd[2]) + + format_byte(cmd[3]) + + format_int(cmd, 4) + + format_int(cmd, 8); + break; + case 0x23: + case 0x2E: + str += format_byte(cmd[1]) + + format_byte(cmd[2]) + + format_byte(cmd[3]) + + format_short(cmd, 4) + + format_short(cmd, 6); + break; + case 0x29: + str += format_byte(cmd[1]) + + format_short(cmd, 2) + + format_int(cmd, 4) + + format_int(cmd, 8); + break; + case 0x2B: + str += format_byte(cmd[1]) + + format_byte(cmd[2]) + + format_byte(cmd[3]) + + format_short(cmd, 4) + + format_short(cmd, 6) + + format_short(cmd, 8) + + format_byte(cmd[10]) + + format_byte(cmd[11]); + break; + case 0x30: + str += format_byte(cmd[1]) + + format_byte(cmd[2]) + + format_byte(cmd[3]) + + format_short(cmd, 4) + + format_short(cmd, 6) + + format_short(cmd, 8) + + format_short(cmd, 10) + + format_short(cmd, 12) + + format_short(cmd, 14) + + format_short(cmd, 16) + + format_short(cmd, 18); + break; + default: + for (int i = 1; i < cmd.Length; i++) + str += format_byte(cmd[i]); + break; + } + + return str; + } + else + { + return BitConverter.ToString(cmd).Replace("-", " ") + " "; + } + } + + private void organizeCurrentBehaviorScript(List behList) + { + // Apparently "RichTextBox.AppendText()" is a REALLY slow function, but luckly you can just give the RichTextBox a string in RTF format. This will drastically speed up performance. + bool showROMAddr = showRomCB.Checked; + bool showSegAddr = SegAddrCB.Checked; + bool showComments = CommCB.Checked; + bool formatBytes = FormatCB.Checked; + bool indentBytes = IndentCB.Checked; + currentTextbox.Clear(); + int currentIndent = 0; + StringBuilder sb = new StringBuilder(); + sb.Append("{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Courier New;}}{\\colortbl;\\red0\\green0\\blue0;\\red0\\green128\\blue0; }\\viewkind4\\uc1\\pard\\f0\\fs17 "); + for (int i = 0; i < behList.Count; i++) + { + ScriptDumpCommandInfo info = behList[i]; + if (showROMAddr || showSegAddr) + { + sb.Append("["); + if (showROMAddr) + { + sb.Append(info.romAddress.ToString("X8")); + if (showSegAddr) + { + sb.Append(" / "); + sb.Append(info.segAddress.ToString("X8")); + } + } + else if (showSegAddr) + sb.Append(info.segAddress.ToString("X8")); + sb.Append("] "); + } + if (indentBytes) + { + for (int j = 0; j < currentIndent; j++) + sb.Append(" "); + bool isLastIndex = (i == behList.Count - 1); + + switch (info.data[0]) + { + case 0x02: + case 0x05: + case 0x08: + currentIndent++; + break; + case 0x03: + case 0x06: + case 0x09: + currentIndent--; + break; + } + } + sb.Append(format_BehCmd(info.data, formatBytes)); + + if (showComments) + { + sb.Append("\\cf2 // "); // Set to color #2 (Green) + sb.Append(info.description); + sb.Append("\\cf1 "); // Set to color #1 (Black) + } + + sb.Append("\\line "); // Add a new line + } + sb.Append("}"); + currentTextbox.Rtf = sb.ToString(); + } + } +} diff --git a/src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_Fast3D.cs b/src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_Fast3D.cs new file mode 100644 index 0000000..502e8fd --- /dev/null +++ b/src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_Fast3D.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Quad64.src.Forms +{ + partial class ScriptDumps : Form + { + private void refreshObjectsTabFast3DList() + { + ot_f3d_listbox.Items.Clear(); + ot_f3d_textbox.ResetText(); + + ushort key = objectCombos[listBoxObjects.SelectedIndex].ModelID; + if (level.ModelIDs.ContainsKey(key) && level.ModelIDs[key].Fast3DCommands_ForDump.Count > 0) + { + List> list = level.ModelIDs[key].Fast3DCommands_ForDump; + for (int i = 0; i < list.Count; i++) + { + ot_f3d_listbox.Items.Add(list[i][0].segAddress.ToString("X8")); + } + + ot_f3d_listbox.SelectedIndex = 0; + } + else + { + ot_f3d_textbox.Text = ""; + } + } + + private void ot_f3d_listbox_SelectedIndexChanged(object sender, EventArgs e) + { + switchTextBoxes(ot_f3d_textbox); + } + } +} diff --git a/src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_GeoLayout.cs b/src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_GeoLayout.cs new file mode 100644 index 0000000..4a29d9b --- /dev/null +++ b/src/Forms/ScriptDumps_Tabs/Objects/ObjectsTab_GeoLayout.cs @@ -0,0 +1,191 @@ +using Quad64.src.JSON; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace Quad64.src.Forms +{ + partial class ScriptDumps : Form + { + List objectCombos = null; + + private void initGeoLayoutForObjectTab() + { + refreshObjectsTabFast3DList(); + } + + private void subTabsObjects_SelectedIndexChanged(object sender, EventArgs e) + { + refreshObjectsTabFast3DList(); + if (subTabsObjects.SelectedTab != null && listBoxObjects.SelectedIndex > -1) + { + switch (subTabsObjects.SelectedIndex) + { + case 0: + switchTextBoxes(ot_gls_textbox); + break; + case 1: + switchTextBoxes(ot_f3d_textbox); + break; + case 2: + switchTextBoxes(ot_beh_textbox); + break; + } + } + } + + private void listBoxObjects_SelectedIndexChanged(object sender, EventArgs e) + { + refreshObjectsTabFast3DList(); + if (subTabsObjects.SelectedTab != null) + { + switch (subTabsObjects.SelectedIndex) + { + case 0: + switchTextBoxes(ot_gls_textbox); + break; + case 1: + switchTextBoxes(ot_f3d_textbox); + break; + case 2: + switchTextBoxes(ot_beh_textbox); + break; + } + } + } + + private void initObjectList() + { + // get shallow copy of 'level.LevelObjectCombos' + objectCombos = level.LevelObjectCombos.GetRange(0, level.LevelObjectCombos.Count); + + List undefined_names = new List(); + for(int i = 0; i < level.Areas.Count; i++) + { + for (int j = 0; j < level.Areas[i].Objects.Count; j++) + { + string combo_name = level.Areas[i].Objects[j].getObjectComboName(); + if (combo_name.StartsWith("Undefined Combo (") && !undefined_names.Contains(combo_name)) + { + undefined_names.Add(combo_name); + string[] combo = combo_name.Substring(17, 16).Split(','); + byte modelID = Convert.ToByte(combo[0].Substring(2), 16); + uint modelAddress = 0; + if (level.ModelIDs.ContainsKey(modelID)) + { + modelAddress = level.ModelIDs[modelID].GeoDataSegAddress; + } + uint behavior = Convert.ToUInt32(combo[1].Substring(3), 16); + ObjectComboEntry newOCE = new ObjectComboEntry(combo_name, modelID, modelAddress, behavior); + objectCombos.Add(newOCE); + Console.WriteLine("Found undefined combo! " + combo_name); + } + } + } + comboBoxObjectSort.SelectedIndex = 0; + updateObjectList(); + } + + private int findObjectComboInList(string name, uint behavior, uint geoLayout, byte modelID) + { + for (int i = 0; i < objectCombos.Count; i++) + { + if (objectCombos[i].Name == name && objectCombos[i].Behavior == behavior && + objectCombos[i].ModelSegmentAddress == geoLayout && objectCombos[i].ModelID == modelID) { + return i; + } + } + return -1; + } + + private void comboBoxObjectSort_SelectedIndexChanged(object sender, EventArgs e) + { + string comboName = ""; + uint behavior = 0, geoLayoutAddress = 0; + byte modelID = 0; + bool changed = false; + if (listBoxObjects.SelectedIndex > -1) + { + comboName = objectCombos[listBoxObjects.SelectedIndex].Name; + behavior = objectCombos[listBoxObjects.SelectedIndex].Behavior; + geoLayoutAddress = objectCombos[listBoxObjects.SelectedIndex].ModelSegmentAddress; + modelID = objectCombos[listBoxObjects.SelectedIndex].ModelID; + changed = true; + } + + updateObjectList(); + + if(changed) + listBoxObjects.SelectedIndex = findObjectComboInList(comboName, behavior, geoLayoutAddress, modelID); + } + + private void updateObjectList() + { + switch (comboBoxObjectSort.SelectedIndex) + { + case 0: + objectCombos = objectCombos.OrderBy(o => o.Name).ToList(); + break; + case 1: + objectCombos = objectCombos.OrderBy( + o => + (level.ModelIDs.ContainsKey(o.ModelID) ? + (level.ModelIDs[o.ModelID].GeoLayoutCommands_ForDump.Count > 0 ? + level.ModelIDs[o.ModelID].GeoLayoutCommands_ForDump[0].segAddress + : 0) + : 0) + ).ToList(); + break; + case 2: + objectCombos = objectCombos.OrderBy( + o => + (level.ModelIDs.ContainsKey(o.ModelID) ? + (level.ModelIDs[o.ModelID].GeoLayoutCommands_ForDump.Count > 0 ? + level.ModelIDs[o.ModelID].GeoLayoutCommands_ForDump[0].romAddress + : 0) + : 0) + ).ToList(); + break; + case 3: + objectCombos = objectCombos.OrderBy( + o => + (level.ModelIDs.ContainsKey(o.ModelID) ? + (level.ModelIDs[o.ModelID].Fast3DCommands_ForDump.Count > 0 ? + (level.ModelIDs[o.ModelID].Fast3DCommands_ForDump[0].Count > 0 ? + level.ModelIDs[o.ModelID].Fast3DCommands_ForDump[0][0].segAddress + : 0) + : 0) + : 0) + ).ToList(); + break; + case 4: + objectCombos = objectCombos.OrderBy( + o => + (level.ModelIDs.ContainsKey(o.ModelID) ? + (level.ModelIDs[o.ModelID].Fast3DCommands_ForDump.Count > 0 ? + (level.ModelIDs[o.ModelID].Fast3DCommands_ForDump[0].Count > 0 ? + level.ModelIDs[o.ModelID].Fast3DCommands_ForDump[0][0].romAddress + : 0) + : 0) + : 0) + ).ToList(); + break; + case 5: + objectCombos = objectCombos.OrderBy(o => o.Behavior).ToList(); + break; + case 6: + objectCombos = objectCombos.OrderBy(o => ROM.Instance.decodeSegmentAddress_safe(o.Behavior)).ToList(); + break; + } + + listBoxObjects.Items.Clear(); + foreach (ObjectComboEntry entry in objectCombos) + { + listBoxObjects.Items.Add(entry.Name); + } + + //listBoxObjects_SelectedIndexChanged(null, null); + } + } +} diff --git a/src/Forms/SelectBehavior.Designer.cs b/src/Forms/SelectBehavior.Designer.cs new file mode 100644 index 0000000..e7dcb16 --- /dev/null +++ b/src/Forms/SelectBehavior.Designer.cs @@ -0,0 +1,143 @@ +namespace Quad64.src.Forms +{ + partial class SelectBehavior + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SelectBehavior)); + this.cancelButton = new System.Windows.Forms.Button(); + this.selectButton = new System.Windows.Forms.Button(); + this.listView1 = new System.Windows.Forms.ListView(); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.label_filter = new System.Windows.Forms.Label(); + this.textBox_filter = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // cancelButton + // + this.cancelButton.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cancelButton.Location = new System.Drawing.Point(249, 266); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(100, 27); + this.cancelButton.TabIndex = 5; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // selectButton + // + this.selectButton.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.selectButton.Location = new System.Drawing.Point(107, 266); + this.selectButton.Name = "selectButton"; + this.selectButton.Size = new System.Drawing.Size(100, 27); + this.selectButton.TabIndex = 4; + this.selectButton.Text = "Set"; + this.selectButton.UseVisualStyleBackColor = true; + this.selectButton.Click += new System.EventHandler(this.selectButton_Click); + // + // listView1 + // + this.listView1.Alignment = System.Windows.Forms.ListViewAlignment.Default; + this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listView1.AutoArrange = false; + this.listView1.BackColor = System.Drawing.SystemColors.Window; + this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1}); + this.listView1.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listView1.ForeColor = System.Drawing.SystemColors.MenuText; + this.listView1.FullRowSelect = true; + this.listView1.GridLines = true; + this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listView1.HideSelection = false; + this.listView1.Location = new System.Drawing.Point(12, 30); + this.listView1.MultiSelect = false; + this.listView1.Name = "listView1"; + this.listView1.OwnerDraw = true; + this.listView1.ShowGroups = false; + this.listView1.Size = new System.Drawing.Size(440, 227); + this.listView1.TabIndex = 3; + this.listView1.TabStop = false; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.Details; + this.listView1.ColumnWidthChanging += new System.Windows.Forms.ColumnWidthChangingEventHandler(this.listView1_ColumnWidthChanging); + this.listView1.DrawColumnHeader += new System.Windows.Forms.DrawListViewColumnHeaderEventHandler(this.listView1_DrawColumnHeader); + this.listView1.DrawItem += new System.Windows.Forms.DrawListViewItemEventHandler(this.listView1_DrawItem); + // + // columnHeader1 + // + this.columnHeader1.Text = "Behaviors"; + this.columnHeader1.Width = 800; + // + // label_filter + // + this.label_filter.AutoSize = true; + this.label_filter.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label_filter.Location = new System.Drawing.Point(12, 9); + this.label_filter.Name = "label_filter"; + this.label_filter.Size = new System.Drawing.Size(56, 14); + this.label_filter.TabIndex = 6; + this.label_filter.Text = "Filter:"; + // + // textBox_filter + // + this.textBox_filter.Location = new System.Drawing.Point(70, 6); + this.textBox_filter.Name = "textBox_filter"; + this.textBox_filter.Size = new System.Drawing.Size(382, 20); + this.textBox_filter.TabIndex = 7; + this.textBox_filter.TextChanged += new System.EventHandler(this.textBox_filter_TextChanged); + // + // SelectBehavior + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(464, 301); + this.Controls.Add(this.textBox_filter); + this.Controls.Add(this.label_filter); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.selectButton); + this.Controls.Add(this.listView1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "SelectBehavior"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Select Behavior"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button selectButton; + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.Label label_filter; + private System.Windows.Forms.TextBox textBox_filter; + } +} \ No newline at end of file diff --git a/src/Forms/SelectBehavior.cs b/src/Forms/SelectBehavior.cs new file mode 100644 index 0000000..d84459b --- /dev/null +++ b/src/Forms/SelectBehavior.cs @@ -0,0 +1,126 @@ +using Quad64.src.JSON; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; + +namespace Quad64.src.Forms +{ + public partial class SelectBehavior : Form + { + public bool ClickedSelect { get; set; } + public uint ReturnBehavior { get; set; } + + public SelectBehavior() + { + InitializeComponent(); + foreach (BehaviorNameEntry entry in Globals.behaviorNameEntries) + { + listView1.Items.Add("("+entry.Behavior.ToString("X8") + ") " + entry.Name); + } + } + + private Font textFont = new Font("Courier New", 10, FontStyle.Bold); + private Brush textBrush = new SolidBrush(Color.DimGray); + private Pen bgPen = new Pen(Color.FromArgb(230, 230, 230), 100.0f); + private Rectangle bgRect = new Rectangle(0, 0, 400, 2); + private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) + { + bgRect = new Rectangle(0, 0, listView1.Columns[0].Width, 2); + int x = (listView1.Width / 2) - (TextRenderer.MeasureText(e.Header.Text, textFont).Width / 2); + e.Graphics.DrawRectangle(bgPen, bgRect); + e.Graphics.DrawString(e.Header.Text, textFont, textBrush, x, 4); + } + + private void listView1_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e) + { + e.Cancel = true; + e.NewWidth = listView1.Columns[e.ColumnIndex].Width; + } + + private void selectButton_Click(object sender, EventArgs e) + { + if (listView1.SelectedItems.Count > 0) + { + ClickedSelect = true; + ReturnBehavior = (uint)Convert.ToInt32(listView1.SelectedItems[0].Text.Substring(1, 8), 16); + } + else + ClickedSelect = false; + Close(); + } + + private void cancelButton_Click(object sender, EventArgs e) + { + ClickedSelect = false; + Close(); + } + + private Color col1 = Color.FromArgb(250, 250, 240); + private Color col2 = Color.FromArgb(250, 240, 240); + private Color highlight = Color.FromArgb(200, 200, 255); + private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) + { + // If this item is the selected item + if (e.Item.Selected) + { + e.Item.ForeColor = Color.Black; + e.Item.BackColor = highlight; + } + else + { + if (e.ItemIndex % 2 == 0) + listView1.Items[e.ItemIndex].BackColor = col1; + else + listView1.Items[e.ItemIndex].BackColor = col2; + } + + e.DrawBackground(); + e.DrawText(); + } + + /* + The idea for the filter box comes from aglab2. + His implementation was a little overkill though, so I made my own simpler version. + */ + private void textBox_filter_TextChanged(object sender, EventArgs e) + { + BeginUpdate(listView1); + + listView1.Items.Clear(); + foreach (BehaviorNameEntry entry in Globals.behaviorNameEntries) + { + string entryName = "(" + entry.Behavior.ToString("X8") + ") " + entry.Name; + if(entryName.ToUpper().Contains(textBox_filter.Text.ToUpper())) + listView1.Items.Add(entryName); + } + + EndUpdate(listView1); + } + + private const int WM_USER = 0x0400; + private const int EM_SETEVENTMASK = (WM_USER + 69); + private const int WM_SETREDRAW = 0x0b; + private IntPtr OldEventMask; + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + + private void BeginUpdate(ListView lv) + { + SendMessage(lv.Handle, WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero); + OldEventMask = SendMessage(lv.Handle, EM_SETEVENTMASK, IntPtr.Zero, IntPtr.Zero); + } + + private void EndUpdate(ListView lv) + { + SendMessage(lv.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); + SendMessage(lv.Handle, EM_SETEVENTMASK, IntPtr.Zero, OldEventMask); + } + } +} diff --git a/src/Forms/SelectBehavior.resx b/src/Forms/SelectBehavior.resx new file mode 100644 index 0000000..4969adf --- /dev/null +++ b/src/Forms/SelectBehavior.resx @@ -0,0 +1,635 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA9rRcAOq0WGTuhA1TBPgtezjQNGc01DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAHK0AAA2tAAQxrQw3L64IoDekAvHBPwz1zjUNoM0yCzfSIAAE0CgAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADR0dEA6tbvEp/Hk3BHtCXUJ68A/TSmAf/CPgv/zjML/c1L + KdTMmItwyt3kEsvHxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0uQAAAGkAAFWuMQWsw5891NLVp6/Kp+1Mtiz/KK8A/1Gv + J//FWzT/zjYO/81TMv/Nq6Ltzc/Pps2roizOJwACtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2pAAAZpwABKa4AFy6vB3Z0v13e0dHR/KO2 + nf9KnDL/bLhW/7TLrP/Ntq7/yXRf/7JROP+6opz/zs7O/M58Zs/NOhRgzjMLC/8AAADcAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAztDOAP/b/wdYtzo8K68DtSyx + BPVptlL/nJ6b/0FIPP9baVX/wMa//9HR0P/Pzs3/x8C+/2pbWP9IQkH/op+f/8lxWv/POBHvzjcQms1i + RSrK+f8Fy8vLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALzLtQCpyJ0Cx8zEIdbQ + 2HZ5wGTcMLEJ/ySXAv8yaCH/KTob/xg1AP9qdGD/ucS2/5zCif/KnIn/x7q2/2hiYv8nAAD/RiIh/387 + Kv+5MQ7/zz0X/c5+as3N1tldx9XVD/+amgCf//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHawAAA6o + AAVEtCNPqsigtdXS1f1/uG7/IHoF/xJEAP8XMwD/J1IA/ylUAP9QdDz/YrNL/0CpD//CSBj/x2tT/21I + Qf9PAAD/bQAA/0kCAf9fEgT/ni8S/8uLev/Q1NTtzKeck8hkSDPFQh4Dx1k7AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAorwEAKK8BISauAIY5sxXincaQ/6+vsP9IYj//FDUA/x9BAP8rWAD/MWMA/yxWAP8kbAX/JqgD/zOm + Af/CPQv/xzQO/20eDP9SAAD/igAA/4AAAP9bAAD/TAsF/3pZUv+7vr//z5iJ/s1JJsjOMwxa0CEDBtAa + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACmyZ4A/+j/ANDR0gnJzMVaVrc4vyivAPgyqA//X4BV/ztFMv8fOgf/J04B/y5dAP8vXgD/MWMA/ytW + AP8fawD/J6gC/0asGf/ETyP/xzQO/24ZBv9SAAD/iQAA/40AAP+JAAD/bwAA/00NDf9aSUn/om1f/8s+ + Gv7ONxDnzWFFkczV2CLCwcEAzc3NAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAALwAAC6sAAAARQABeL9lJL7NupTM0cvpXbdD/iGRAP8WTgL/HDYI/yJFAf8kTxn/IEky/ydS + GP8uWgT/MmMB/ytVAP8nbQr/YbRJ/6nInv/Nq5//x2dN/24gD/9RAAD/iQAA/40AAP+NAAD/jAAA/38A + AP9eBAP/SBMO/30hCv++NBD/zXRc+c/Q0cbOwr9QzFExCMAAAADLNwsAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAASa0iAD2tFxAlrQBSTbctyrHLqvq7v7v/RHc0/xA2AP8bOwH/JU0O/x1O + Qf8KXpL/A3Os/wxVfv8bRT7/LlwL/ylVAP9geVH/v8i8/9LS0//P0ND/x7y4/25STf9RAAD/iAAA/4IA + DP94ARj/iQAE/4UFDP92Bxn/bQEG/0sCAP9aFAb/pGJR/8nLzP7PopbuzVEwiMsyCiTJSCkBykAdAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOK0RAzatD4UsrgT1RLAk/omdgv9TWU7/HTQJ/yNK + AP8mVCL/ElJ9/wJ1vf8AqNP/ALDW/wCYzf8HT5n/KlUc/ypVAP90fWr/xsrF/7DIpP/LsaX/yMTD/25l + Zf9QAAD/iAAB/1cURf8iIYr/UgxI/2gWMv83P3j/UxtK/30BBf9dAAD/SR0b/4B7e/+6joL/zkgk/M04 + EcLMPBk1zD0bAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALa4FBSyuBNQlqwD/JncO/yQ2 + Gf8dPQH/KlYA/yxcDf8SYYX/C47W/yCw1v8TqNb/AqHX/wCX1f8MVJT/LVwS/ytVAP9feVD/fLxq/1Ct + JP/DWC7/yIRy/25UUP9QAAD/iAAB/2gkO/8fZrz/CU+5/yQ6jP8TfbL/FGqq/28PJv+KAAD/cAAA/00O + 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 + AP8vXgD/L14A/zBfAf84ZhD/QnEk/zNpC/8xZAD/JlUA/yJVCv+KnoP/zMnM/5fFiv8xpR//HX1C/xMx + qv9AGaf/lihI/8VGL//No5j/wcPE/45tZ/9hGRH/fRIR/48JCf+SEBD/X0Nm/yUzoP9NDU7/hQAG/4wA + AP+VCgr/ZiUg/7eVjP/QxcPgz8/PMdDQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwvVoAbrxXiUKz + IPgggQP/FC4A/yxZAP8vXgD/L14A/y9eAP8xZAD/MWMA/y5aBP8gUwT/G3MA/zKmD/+qyaH/1NPT/6C+ + pv8wXZb/CxLU/w0N4/8NDuP/IBHM/39Ejf/Iq63/z9DP/8yYiv+yNRT/dR0K/2wWEP+DEBD/jgwN/3sO + IP+FAwr/jAAA/4wAAP+WCgr/ZRMM/7Y+Hv/PdV7iypqNN8mdkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAArrQQAK60DjSetAfkbeQD/FS4A/y1aAP8vXgD/MGEA/zNnAP8uWwP/QVom/1dySv83mRv/Jq8A/ze1 + Dv+yzan/29zY/83N3/+PjuP/R0fi/xYWzv8aGtP/T0/j/5aX4v/Q0N3/2NfU/9Ofjf/SPRP/yDIK/5g/ + Kf9uR0T/cRwd/4sLC/+TBQT/jAAA/4sAAP+XCQn/ZREL/7UuC//PNg/px0clUcdIJwAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAArrgMAK64DpzGuDP83eSL/FzEB/y5cAP8zZgD/MWEA/yVQAv9JaTb/oZ+h/6bD + nf9IuCb/I58T/yRxYP9zfcz/xsbh/+Pj4v/U1NT/d3eZ/x0da/8nJ3T/jY2p/9zc2//i4uL/wcDf/4Jq + vf+YLk3/yzEN/9BjRv+3qaX/h318/2onI/95Dg7/lAoK/44BAf+XCQn/ZBUR/7E3GP/PNQ3tzTQMXs00 + DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZuT0AW7o/tYzAfP9ufGj/GzgC/zNmAP8pVQH/HVQA/yN9 + Bv95sWj/1NPU/6rJo/89iGH/ETqd/w8Y0v8aGuH/Skrb/3t7r/9ZWWb/HR1P/w0Ndf8gIJb/PT18/3Fx + gv9/f8L/RETf/xoa4v8nFMb/XxyE/7FcZf/Rv7n/ysfH/6hWQP95Hgz/ZxIO/4oPDv+dDQ3/Yxwb/66A + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAmQA3MdQAJyPRAhgY4B1sa+F5z87g0N3d4fjDw9z/aWmw/xcXeP8+P5X/q6vQ/9nZ + 4P/Z2eHmlZXhrCoq4FAAANwIQji9AUE3vgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM/DwAC+pZ4C4d3VLsbG4YhjY+HSGxvi+g4O + 4f8VFeL/SEjf8K2s36nk5OBT4ODeDeDg3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeAAAA + 3QgEBOE2FBPdkBAQ4NsXFdyxIB3UXh4Y0BgeGNEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAvLMwALSrNERIR3jMhHdUeKCPQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///5///8AAP///D///wAA///wD///AAD//+AH//8AAP//gAH//wAA//4AAP// + AAD//AAAP/8AAP/wAAAf/wAA/+AAAAf/AAD/wAAAA/8AAP8AAAAB/wAA/AAAAAB/AAD4AAAAAB8AAPAA + AAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP + AADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAA + AAAADwAA8AAAAAAPAADgAAAAAA8AAOAAAAAADwAA4AAAAAAPAADgAAAAAA8AAOAAAAAADwAA4AAAAAAP + AADgAAAAAA8AAPgAAAAAHwAA/gAAAAB/AAD/gAAAAf8AAP/gAAAH/wAA//AAAA//AAD//AAAP/8AAP// + AAD//wAA///AB///AAD///Af//8AAP///D///wAA////////AAAoAAAAOAAAAHAAAAABACAAAAAAAAAx + AADCDgAAwg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnrwAgzzUKMAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOa0TgCiuAO/ONQ3/zTUNgAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAP7QfMDOtDM8orwD/KK8A/841Df/ONQ3/zTQNz89FHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHR0YCCwW//KK8A/yiv + AP8orwD/zjUN/841Df/ONQ3/zX1o/8vHx4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJu7h0DR0dHP0dHR/3/BbP8orwD/Kq8C/1i5O//OZkv/zjcP/841 + Df/Of2r/zs7O/8zLys/Pj38gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + Df/KPRi/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7EJ/3a/ + Yf9gaF3/FS4A/y9eAP8vXgD/L14C/xZUc/8Aktf/EpTF/0B3Mf9OhVD/QKTP/wCH1/8FXLv/J1Eg/y9e + AP83bgD/GTgA/yOXAP8orwD/KK8A/841Df/ONQ3/rCwL/yUCAf92AAD/jAAA/4wCAv+Ci5z/B2XU/wBx + 1P8AhdT/AJHU/wCj1P8gOY//hgAH/4wAAP+MAAD/jgMD/1wVFf+fbWD/zkUh/841Db8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsyqL/0dHR/2FiYP8YNQD/L14A/y9e + AP8nVib/A3HL/wCE1P8XfGz/L14A/ytiNf8OhNP/AGjS/xc6XP8vXgD/L14A/zdvAP8ZNwD/I5kA/yiv + AP8qsAP/zjcP/841Df+sLAv/JQIB/3YAAP+MAAD/jAAA/4osMP8sd87/AFrT/xdk0v8Sh9T/AJXU/wZD + qv97ABP/jAAA/4wAAP+PAwP/cBMT/5eXl//Ou7b/znJZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAx7+/QNHR0f/R0dH/UFVN/xo5AP8vXgD/Ll4D/w5OmP8Addf/A0q2/ylX + Fv8tWgb/CS6T/wBn1/8HNZv/LVkJ/y9eAP8vXgD/OHAA/xg1AP8jmgD/QLQe/5PFhP/OkoL/zkcj/6wt + C/8lAgH/dQAA/4wAAP+MAAD/jhYW/2SXxf8BTNP/KCmf/4+gtf8NitT/AV6+/zQIYv9/AA//jAAA/44C + Av95FBT/jo6O/87Ozv/Ozc2/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADPz89Ayc/H/4HBbv8XPwr/HT0A/y9eAP8gZEP/AWfV/wBf1/8CMbj/EjFv/xApcf8APc7/ADq6/yFH + L/8vXgD/L14A/y9eAP84cAD/GTUC/2qqV//Azrz/0dHR/87Ozv/Ou7b/rWFN/yUDAf91AAD/jAAA/4wA + AP+MAQH/fVtp/xFb1P8HNL3/aWSc/xyB1P8AhdT/AHvH/xYdkv+AAA//jgIC/38UFP+DT0L/zr66/8nG + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAADw/fIFBQ4p/MzOH/4eHh/+Hh4f/X19j/aGiL/wwMQP89PWr/wsLG/+Hh + 4f/h4eH/1NTh/3p64d8NDd9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAM/ExDDh4eG/wMDh/15e4f8VFeH/Dg7d/xMT4f9LS+H/s7Ph/97e4d/f399gAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAfH99ADQ3hvw8P4f8PD+H/Dw/h/xgX2+80L9NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyXRYA4O + 4c8hHdWAr4+PEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////8A////5////wD////D////AP///wD///8A///+AH// + /wD///gAH///AP//4AAP//8A///AAAP//wD//wAAAf//AP/+AAAAf/8A//gAAAA//wD/8AAAAA//AP/A + AAAAB/8A/4AAAAAB/wD+AAAAAAD/APwAAAAAAD8A/AAAAAAAPwD8AAAAAAA/APwAAAAAAD8A/AAAAAAA + PwD4AAAAAAA/APgAAAAAAD8A+AAAAAAAPwD4AAAAAAA/APgAAAAAAD8A+AAAAAAAHwD4AAAAAAAfAPgA + AAAAAB8A+AAAAAAAHwD4AAAAAAAfAPgAAAAAAB8A+AAAAAAAHwD4AAAAAAAfAPgAAAAAAB8A+AAAAAAA + HwDwAAAAAAAfAPAAAAAAAB8A8AAAAAAAHwDwAAAAAAAfAPAAAAAAAB8A8AAAAAAAHwDwAAAAAAAfAPgA + AAAAAB8A/gAAAAAAfwD/gAAAAAH/AP/gAAAAB/8A//gAAAAf/wD//gAAAH//AP//AAAB//8A///AAAf/ + /wD///AAH///AP///AB///8A////Af///wD////D////AP////////8A/////////wA= + + + \ No newline at end of file diff --git a/src/Forms/SelectComboPreset.Designer.cs b/src/Forms/SelectComboPreset.Designer.cs index 12fc3a0..21ac298 100644 --- a/src/Forms/SelectComboPreset.Designer.cs +++ b/src/Forms/SelectComboPreset.Designer.cs @@ -33,6 +33,8 @@ private void InitializeComponent() this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.selectButton = new System.Windows.Forms.Button(); this.cancelButton = new System.Windows.Forms.Button(); + this.textBox_filter = new System.Windows.Forms.TextBox(); + this.label_filter = new System.Windows.Forms.Label(); this.SuspendLayout(); // // listView1 @@ -50,7 +52,7 @@ private void InitializeComponent() this.listView1.GridLines = true; this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; this.listView1.HideSelection = false; - this.listView1.Location = new System.Drawing.Point(12, 12); + this.listView1.Location = new System.Drawing.Point(12, 34); this.listView1.MultiSelect = false; this.listView1.Name = "listView1"; this.listView1.OwnerDraw = true; @@ -72,7 +74,7 @@ private void InitializeComponent() // selectButton // this.selectButton.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.selectButton.Location = new System.Drawing.Point(82, 227); + this.selectButton.Location = new System.Drawing.Point(82, 249); this.selectButton.Name = "selectButton"; this.selectButton.Size = new System.Drawing.Size(100, 27); this.selectButton.TabIndex = 1; @@ -83,7 +85,7 @@ private void InitializeComponent() // cancelButton // this.cancelButton.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.cancelButton.Location = new System.Drawing.Point(222, 227); + this.cancelButton.Location = new System.Drawing.Point(222, 249); this.cancelButton.Name = "cancelButton"; this.cancelButton.Size = new System.Drawing.Size(100, 27); this.cancelButton.TabIndex = 2; @@ -91,11 +93,31 @@ private void InitializeComponent() this.cancelButton.UseVisualStyleBackColor = true; this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); // + // textBox_filter + // + this.textBox_filter.Location = new System.Drawing.Point(69, 8); + this.textBox_filter.Name = "textBox_filter"; + this.textBox_filter.Size = new System.Drawing.Size(323, 20); + this.textBox_filter.TabIndex = 9; + this.textBox_filter.TextChanged += new System.EventHandler(this.textBox_filter_TextChanged); + // + // label_filter + // + this.label_filter.AutoSize = true; + this.label_filter.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label_filter.Location = new System.Drawing.Point(11, 11); + this.label_filter.Name = "label_filter"; + this.label_filter.Size = new System.Drawing.Size(56, 14); + this.label_filter.TabIndex = 8; + this.label_filter.Text = "Filter:"; + // // SelectComboPreset // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(404, 261); + this.ClientSize = new System.Drawing.Size(404, 285); + this.Controls.Add(this.textBox_filter); + this.Controls.Add(this.label_filter); this.Controls.Add(this.cancelButton); this.Controls.Add(this.selectButton); this.Controls.Add(this.listView1); @@ -106,6 +128,7 @@ private void InitializeComponent() this.Text = "Select Combo/Preset"; this.Load += new System.EventHandler(this.SelectComboPreset_Load); this.ResumeLayout(false); + this.PerformLayout(); } @@ -115,5 +138,7 @@ private void InitializeComponent() private System.Windows.Forms.ColumnHeader columnHeader1; private System.Windows.Forms.Button selectButton; private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.TextBox textBox_filter; + private System.Windows.Forms.Label label_filter; } } \ No newline at end of file diff --git a/src/Forms/SelectComboPreset.cs b/src/Forms/SelectComboPreset.cs index 1f7ffbb..a5e128b 100644 --- a/src/Forms/SelectComboPreset.cs +++ b/src/Forms/SelectComboPreset.cs @@ -6,6 +6,7 @@ using System.Data; using System.Drawing; using System.Linq; +using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; @@ -30,7 +31,7 @@ public SelectComboPreset(Level level, int listType, string columnText, Color col textBrush = new SolidBrush(columnTextColor); } - private void LoadSpecialList(List specialList) + private void LoadSpecialList(List specialList, bool useFilter) { List presetsTaken = new List(); foreach (PresetMacroEntry entry in specialList) @@ -45,8 +46,14 @@ private void LoadSpecialList(List specialList) if (oce_index > -1) { string displayName = "(" + entry.PresetID + ") " + oce.Name; - listView1.Items.Add(displayName); - int index = listView1.Items.Count - 1; + if (!useFilter) + listView1.Items.Add(displayName); + else + { + if (displayName.ToUpper().Contains(textBox_filter.Text.ToUpper())) + listView1.Items.Add(displayName); + } + //int index = listView1.Items.Count - 1; } } presetsTaken.Add(entry.PresetID); @@ -63,6 +70,11 @@ private void SelectComboPreset_Load(object sender, EventArgs e) foreach (ObjectComboEntry entry in level.LevelObjectCombos) { listView1.Items.Add(entry.Name); + listView1.Items[listView1.Items.Count - 1].Tag = new object[] + { + entry.ModelID, + entry.Behavior + }; int index = listView1.Items.Count - 1; } col2 = Color.FromArgb(250, 240, 240); @@ -88,13 +100,13 @@ private void SelectComboPreset_Load(object sender, EventArgs e) col2 = Color.FromArgb(240, 240, 250); break; case 2: - LoadSpecialList(level.SpecialObjectPresets_8); + LoadSpecialList(level.SpecialObjectPresets_8, false); break; case 3: - LoadSpecialList(level.SpecialObjectPresets_10); + LoadSpecialList(level.SpecialObjectPresets_10, false); break; case 4: - LoadSpecialList(level.SpecialObjectPresets_12); + LoadSpecialList(level.SpecialObjectPresets_12, false); break; } @@ -164,12 +176,27 @@ private void setReturnFromSpecialName(List specialList, string } } + private ObjectComboEntry getObjectComboEntryFromName(string name, object tag) + { + byte modelID = (byte)((object[])tag)[0]; + uint behavior = (uint)((object[])tag)[1]; + + foreach (ObjectComboEntry entry in level.LevelObjectCombos) + { + if (entry.Name.Equals(name) && modelID == entry.ModelID && behavior == entry.Behavior) + { + return entry; + } + } + return null; + } + private void selectButton_Click(object sender, EventArgs e) { switch (listType) { case 0: - ReturnObjectCombo = level.LevelObjectCombos[listView1.SelectedIndices[0]]; + ReturnObjectCombo = getObjectComboEntryFromName(listView1.SelectedItems[0].Text, listView1.SelectedItems[0].Tag); break; case 1: ReturnPresetMacro = @@ -195,5 +222,82 @@ private void cancelButton_Click(object sender, EventArgs e) ClickedSelect = false; Close(); } + + private void textBox_filter_TextChanged(object sender, EventArgs e) + { + BeginUpdate(listView1); + listView1.Items.Clear(); + switch (listType) + { + case 0: + foreach (ObjectComboEntry entry in level.LevelObjectCombos) + { + if (entry.Name.ToUpper().Contains(textBox_filter.Text.ToUpper())) + { + listView1.Items.Add(entry.Name); + listView1.Items[listView1.Items.Count - 1].Tag = new object[] + { + entry.ModelID, + entry.Behavior + }; + } + } + col2 = Color.FromArgb(250, 240, 240); + break; + case 1: + foreach (PresetMacroEntry entry in level.MacroObjectPresets) + { + if (level.ModelIDs.ContainsKey(entry.ModelID)) + { + uint modelAddress = level.ModelIDs[entry.ModelID].GeoDataSegAddress; + int oce_index = -1; + ObjectComboEntry oce = level.getObjectComboFromData(entry.ModelID, modelAddress, entry.Behavior, out oce_index); + if (oce_index > -1) + { + string displayName = "(" + entry.PresetID.ToString() + ") " + oce.Name; + if (displayName.ToUpper().Contains(textBox_filter.Text.ToUpper())) + { + displayName += " {" + entry.BehaviorParameter1; + displayName += ", " + entry.BehaviorParameter2 + "}"; + listView1.Items.Add(displayName); + } + } + } + } + col2 = Color.FromArgb(240, 240, 250); + break; + case 2: + LoadSpecialList(level.SpecialObjectPresets_8, true); + break; + case 3: + LoadSpecialList(level.SpecialObjectPresets_10, true); + break; + case 4: + LoadSpecialList(level.SpecialObjectPresets_12, true); + break; + + } + EndUpdate(listView1); + } + + private const int WM_USER = 0x0400; + private const int EM_SETEVENTMASK = (WM_USER + 69); + private const int WM_SETREDRAW = 0x0b; + private IntPtr OldEventMask; + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + + private void BeginUpdate(ListView lv) + { + SendMessage(lv.Handle, WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero); + OldEventMask = SendMessage(lv.Handle, EM_SETEVENTMASK, IntPtr.Zero, IntPtr.Zero); + } + + private void EndUpdate(ListView lv) + { + SendMessage(lv.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); + SendMessage(lv.Handle, EM_SETEVENTMASK, IntPtr.Zero, OldEventMask); + } } } diff --git a/src/Forms/TextureEditor.cs b/src/Forms/TextureEditor.cs index 34947ee..e144014 100644 --- a/src/Forms/TextureEditor.cs +++ b/src/Forms/TextureEditor.cs @@ -160,7 +160,7 @@ private void ot_importImage_Click(object sender, EventArgs e) { if (ot_info_RomAddress.Text.Contains("N/A") || ot_info_RomAddress.Text.Contains("null")) { - MessageBox.Show("Importing over compressed MIO0 data is not currently supported in this version.", + MessageBox.Show("Importing over compressed MIO0 data is not currently supported in this version. You will need to use an extended ROM file.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, @@ -213,7 +213,7 @@ private void lt_importImage_Click(object sender, EventArgs e) } if (info_Address.Text.Contains("N/A") || info_Address.Text.Contains("null")) { - MessageBox.Show("Importing over compressed MIO0 data is not currently supported in this version.", + MessageBox.Show("Importing over compressed MIO0 data is not currently supported in this version. You will need to use an extended ROM file.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, diff --git a/src/Forms/TextureEditorComponents/TabEditOtherTextures.cs b/src/Forms/TextureEditorComponents/TabEditOtherTextures.cs index 046266f..6653e1b 100644 --- a/src/Forms/TextureEditorComponents/TabEditOtherTextures.cs +++ b/src/Forms/TextureEditorComponents/TabEditOtherTextures.cs @@ -67,7 +67,12 @@ private int parseLevelScriptTemporarlyForSegments(byte[][] segments, uint[] segm l_off = bytesToInt(cmd, 13, 3); segmentStarts[l_seg] = l_start; segments[l_seg] = rom.getROMSection(l_start, l_end); - parseLevelScriptTemporarlyForSegments(segments, segmentStarts, segmentsAreMIO0, l_seg, l_off); + int end_r = parseLevelScriptTemporarlyForSegments(segments, segmentStarts, segmentsAreMIO0, l_seg, l_off); + if (end_r == 0x02) + { + end = true; + endCmd = 2; + } } break; case 0x02: diff --git a/src/Globals.cs b/src/Globals.cs index dd32a38..ad7bdb9 100644 --- a/src/Globals.cs +++ b/src/Globals.cs @@ -56,7 +56,9 @@ class Globals public static bool DEBUG_PLG = false; // parsing level geometry flag public static uint DEBUG_PDL = 0x00000000; // parsing display list value - + public static bool DEBUG_PARSING_LEVEL_AREA = false; + public static bool DEBUG_PARSING_DL = false; + // Locations in the Vanilla North American ROM (default) public static uint[] seg02_location = { 0x108A40, 0x114750 }; public static uint[] seg15_location = { 0x2ABCA0, 0x2AC6B0 }; @@ -97,6 +99,21 @@ public static uint getSkyboxDrawFunction() public static uint endCake_drawFunc_NA = 0x802D28CC; public static List objectComboEntries = new List(); + public static List behaviorNameEntries = new List(); + + public static BehaviorNameEntry getBehaviorNameEntryFromSegAddress(uint address) + { + foreach (BehaviorNameEntry entry in behaviorNameEntries) + { + if (entry.Behavior == address) + return entry; + } + + BehaviorNameEntry new_bne = new BehaviorNameEntry("Undefined Behavior", address); + behaviorNameEntries.Add(new_bne); + + return behaviorNameEntries[behaviorNameEntries.Count - 1]; + } public static string getDefaultObjectComboPath() { @@ -114,7 +131,24 @@ public static string getDefaultObjectComboPath() return "./data/ObjectCombos_JS.json"; } } - + + public static string getDefaultBehaviorNamesPath() + { + // Console.WriteLine("ROM.Instance.Region = " + ROM.Instance.Region.ToString()); + switch (ROM.Instance.Region) + { + default: + //case ROM_Region.NORTH_AMERICA: + return "./data/BehaviorNames.json"; + /*case ROM_Region.EUROPE: + return "./data/ObjectCombos_EU.json"; + case ROM_Region.JAPAN: + return "./data/ObjectCombos_JP.json"; + case ROM_Region.JAPAN_SHINDOU: + return "./data/ObjectCombos_JS.json";*/ + } + } + public static void insertNewEntry(ObjectComboEntry newEntry) { for(int i = 0; i < objectComboEntries.Count; i++) diff --git a/src/JSON/BehaviorNameEntry.cs b/src/JSON/BehaviorNameEntry.cs new file mode 100644 index 0000000..676b312 --- /dev/null +++ b/src/JSON/BehaviorNameEntry.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Quad64.src.JSON +{ + public class BehaviorNameEntry + { + string name = ""; + uint behavior = 0; + + public string Name { get { return name; } set { name = value; } } + public uint Behavior { get { return behavior; } } + + public BehaviorNameEntry(string name, uint behavior) + { + this.name = name; + this.behavior = behavior; + } + + public override string ToString() + { + return name + " = [" + "0x" + behavior.ToString("X8") + "]"; + } + } +} diff --git a/src/JSON/BehaviorNameFile.cs b/src/JSON/BehaviorNameFile.cs new file mode 100644 index 0000000..acc91bf --- /dev/null +++ b/src/JSON/BehaviorNameFile.cs @@ -0,0 +1,81 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace Quad64.src.JSON +{ + class BehaviorNameFile + { + private static uint parseUInt(string str) + { + bool isHex = false; + if (str.StartsWith("0x")) + { + str = str.Substring(2); + isHex = true; + } + else if (str.StartsWith("$")) + { + str = str.Substring(1); + isHex = true; + } + if (!isHex) + return uint.Parse(str); + else + return uint.Parse(str, System.Globalization.NumberStyles.HexNumber); + } + + public static void writeObjectCombosFile(string filename) + { + Globals.objectComboEntries.Sort((x, y) => string.Compare(x.Name, y.Name)); + + JArray array = new JArray(); + foreach (ObjectComboEntry oce in Globals.objectComboEntries) + { + JObject entry = new JObject(); + entry["Name"] = oce.Name; + entry["Behavior"] = "0x" + oce.Behavior.ToString("X8"); + array.Add(entry); + } + + JObject o = new JObject(); + o["BehaviorNames"] = array; + + File.WriteAllText(filename, o.ToString()); + } + + private static bool checkValidEntry(JObject entry) + { + return (entry["Name"] != null && entry["Behavior"] != null); + } + + public static void parseBehaviorNames(string filename) + { + if (File.Exists(filename)) + { + string json = File.ReadAllText(filename); + JObject o = JObject.Parse(json); + if (o["BehaviorNames"] != null) + { + JArray array = (JArray)o["BehaviorNames"]; + foreach(JToken token in array.Children()) + { + JObject entry = (JObject)token; + if (checkValidEntry(entry)) + { + string name = entry["Name"].ToString(); + string Behavior_s = entry["Behavior"].ToString(); + uint Behavior = parseUInt(Behavior_s); + BehaviorNameEntry bne = new BehaviorNameEntry(name, Behavior); + Globals.behaviorNameEntries.Add(bne); + } + } + } + } + } + } +} diff --git a/src/JSON/ObjectComboEntry.cs b/src/JSON/ObjectComboEntry.cs index 1e20892..9bee93c 100644 --- a/src/JSON/ObjectComboEntry.cs +++ b/src/JSON/ObjectComboEntry.cs @@ -8,10 +8,12 @@ namespace Quad64.src.JSON class ObjectComboEntry { string name = ""; + string behavior_name = ""; ModelCombo modelCombo; uint behavior = 0; public string Name { get { return name; } set { name = value; } } + public string BehaviorName { get { return behavior_name; } set { behavior_name = value; } } public byte ModelID { get { return modelCombo.ModelID; } } public uint ModelSegmentAddress { get { return modelCombo.SegmentAddress; } } public uint Behavior { get { return behavior; } } @@ -19,8 +21,9 @@ class ObjectComboEntry public ObjectComboEntry(string name, byte modelId, uint modelSegAddress, uint behavior) { this.name = name; - this.modelCombo = new ModelCombo(modelId, modelSegAddress); this.behavior = behavior; + behavior_name = Globals.getBehaviorNameEntryFromSegAddress(behavior).Name; + modelCombo = new ModelCombo(modelId, modelSegAddress); } private string bp1, bp2, bp3, bp4; @@ -37,7 +40,7 @@ public ObjectComboEntry(string name, byte modelId, uint modelSegAddress, uint be public override string ToString() { - return name + " = ["+ modelCombo.ToString() + ", 0x"+behavior.ToString("X8")+"]"; + return name + " = ["+ modelCombo.ToString() + "," + behavior_name + " (0x"+behavior.ToString("X8")+")]"; } } } diff --git a/src/LevelInfo/Level.cs b/src/LevelInfo/Level.cs index 0663572..1369d7c 100644 --- a/src/LevelInfo/Level.cs +++ b/src/LevelInfo/Level.cs @@ -161,17 +161,14 @@ public void drawEverything() scale = new Vector3(1.001f, 1.001f, 1.001f); Quaternion rotation = new Quaternion(obj.xRot, obj.yRot, obj.zRot, 1.0f); Vector3 position = new Vector3(obj.xPos, obj.yPos, obj.zPos); - if (obj.ModelID != 0) + if (obj.ModelID != 0 && parent.ModelIDs.ContainsKey(obj.ModelID)) { - if (parent.ModelIDs.ContainsKey(obj.ModelID)) - { - Model3D model = parent.ModelIDs[obj.ModelID]; - if(Globals.drawObjectModels) - model.drawModel(scale, rotation, position); - BoundingBox.draw(scale, rotation, position, - isObjectSelected(0, i) ? Globals.SelectedObjectColor : Globals.ObjectColor, - model.UpperBoundary + boundOff, model.LowerBoundary - boundOff); - } + Model3D model = parent.ModelIDs[obj.ModelID]; + if (Globals.drawObjectModels) + model.drawModel(scale, rotation, position); + BoundingBox.draw(scale, rotation, position, + isObjectSelected(0, i) ? Globals.SelectedObjectColor : Globals.ObjectColor, + model.UpperBoundary + boundOff, model.LowerBoundary - boundOff); } else { @@ -187,17 +184,14 @@ public void drawEverything() Vector3 scale = Vector3.One; Quaternion rotation = new Quaternion(obj.xRot, obj.yRot, obj.zRot, 1.0f); Vector3 position = new Vector3(obj.xPos, obj.yPos, obj.zPos); - if (obj.ModelID != 0) + if (obj.ModelID != 0 && parent.ModelIDs.ContainsKey(obj.ModelID)) { - if (parent.ModelIDs.ContainsKey(obj.ModelID)) - { - Model3D model = parent.ModelIDs[obj.ModelID]; - if (Globals.drawObjectModels) - model.drawModel(scale, rotation, position); - BoundingBox.draw(scale, rotation, position, - isObjectSelected(1, i) ? Globals.SelectedObjectColor : Globals.MacroObjectColor, - model.UpperBoundary + boundOff, model.LowerBoundary - boundOff); - } + Model3D model = parent.ModelIDs[obj.ModelID]; + if (Globals.drawObjectModels) + model.drawModel(scale, rotation, position); + BoundingBox.draw(scale, rotation, position, + isObjectSelected(1, i) ? Globals.SelectedObjectColor : Globals.MacroObjectColor, + model.UpperBoundary + boundOff, model.LowerBoundary - boundOff); } else { @@ -213,17 +207,14 @@ public void drawEverything() Vector3 scale = Vector3.One; Quaternion rotation = new Quaternion(obj.xRot, obj.yRot, obj.zRot, 1.0f); Vector3 position = new Vector3(obj.xPos, obj.yPos, obj.zPos); - if (obj.ModelID != 0) + if (obj.ModelID != 0 && parent.ModelIDs.ContainsKey(obj.ModelID)) { - if (parent.ModelIDs.ContainsKey(obj.ModelID)) - { - Model3D model = parent.ModelIDs[obj.ModelID]; - if (Globals.drawObjectModels) - model.drawModel(scale, rotation, position); - BoundingBox.draw(scale, rotation, position, - isObjectSelected(2, i) ? Globals.SelectedObjectColor : Globals.SpecialObjectColor, - model.UpperBoundary + boundOff, model.LowerBoundary - boundOff); - } + Model3D model = parent.ModelIDs[obj.ModelID]; + if (Globals.drawObjectModels) + model.drawModel(scale, rotation, position); + BoundingBox.draw(scale, rotation, position, + isObjectSelected(2, i) ? Globals.SelectedObjectColor : Globals.SpecialObjectColor, + model.UpperBoundary + boundOff, model.LowerBoundary - boundOff); } else { @@ -247,6 +238,7 @@ class Level public Dictionary ModelIDs = new Dictionary(); public List LevelObjectCombos = new List(); + public List MacroObjectPresets = new List(); public List SpecialObjectPresets_8 = new List(); public List SpecialObjectPresets_10 = new List(); diff --git a/src/LevelInfo/Object3D.cs b/src/LevelInfo/Object3D.cs index fa4eb4a..dfd2afa 100644 --- a/src/LevelInfo/Object3D.cs +++ b/src/LevelInfo/Object3D.cs @@ -1,6 +1,7 @@ using Quad64.src.JSON; using Quad64.src.LevelInfo; using System; +using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Reflection; @@ -124,6 +125,12 @@ public enum FROM_LS_CMD { [DisplayName("Behavior")] [ReadOnly(true)] public string Behavior_ReadOnly { get; set; } + + [CustomSortedCategory("Behavior", 5, NUM_OF_CATERGORIES)] + [Browsable(true)] + [DisplayName("Beh. Name")] + [ReadOnly(true)] + public string Behavior_Name { get; set; } // default names private const string BP1DNAME = "B.Param 1"; @@ -234,11 +241,24 @@ public void setBehaviorFromAddress(uint address) { Behavior = "0x"+address.ToString("X8"); Behavior_ReadOnly = Behavior; + Behavior_Name = Globals.getBehaviorNameEntryFromSegAddress(address).Name; } public uint getBehaviorAddress() { - return uint.Parse(Behavior.Substring(2), NumberStyles.HexNumber); + uint value = 0; + bool succeded = false; + if(Behavior.ToUpper().StartsWith("0X")) + succeded = uint.TryParse(Behavior.Substring(2), NumberStyles.HexNumber, new CultureInfo("en-US"), out value); + else if (Behavior.ToUpper().StartsWith("$")) + succeded = uint.TryParse(Behavior.Substring(1), NumberStyles.HexNumber, new CultureInfo("en-US"), out value); + else + succeded = uint.TryParse(Behavior, out value); + + if (succeded) + return value; + else + return 0; } public void updateROMData() @@ -553,22 +573,54 @@ public void UnhideProperty(FLAGS flag) Flags &= ~(ulong)flag; } + public void renameObjectCombo(string newName) + { + string oldComboName = Title; + Title = newName; + bool undefinedToDefined = oldComboName.StartsWith("Undefined Combo (") + && !newName.StartsWith("Undefined Combo ("); + + if (!undefinedToDefined) // simple re-define + { + if (objectComboEntry != null) + objectComboEntry.Name = newName; + } + else + { + uint modelAddress = 0; + if (level.ModelIDs.ContainsKey(ModelID)) + modelAddress = level.ModelIDs[ModelID].GeoDataSegAddress; + ObjectComboEntry newOCE = new ObjectComboEntry(newName, ModelID, modelAddress, getBehaviorAddress()); + objectComboEntry = newOCE; + Globals.objectComboEntries.Add(newOCE); + level.LevelObjectCombos.Add(newOCE); + } + + ModelComboFile.writeObjectCombosFile(Globals.getDefaultObjectComboPath()); + } + public string getObjectComboName() { uint behaviorAddr = getBehaviorAddress(); + uint modelSegmentAddress = 0; for (int i = 0; i < Globals.objectComboEntries.Count; i++) { ObjectComboEntry entry = Globals.objectComboEntries[i]; - uint modelSegmentAddress = 0; + modelSegmentAddress = 0; if (level.ModelIDs.ContainsKey(ModelID)) modelSegmentAddress = level.ModelIDs[ModelID].GeoDataSegAddress; - if (entry.ModelID == ModelID && entry.Behavior == behaviorAddr && entry.ModelSegmentAddress == modelSegmentAddress) + if (entry.ModelID == ModelID && entry.Behavior == behaviorAddr + && entry.ModelSegmentAddress == modelSegmentAddress) { objectComboEntry = entry; + Title = entry.Name; return entry.Name; } } - return "Unknown Combo"; + + objectComboEntry = null; + Title = "Undefined Combo (0x" + modelID.ToString("X2") + ", 0x" + behaviorAddr.ToString("X8") + ")"; + return Title; } public bool isPropertyShown(FLAGS flag) diff --git a/src/ROM.cs b/src/ROM.cs index 1f0c391..757ab7d 100644 --- a/src/ROM.cs +++ b/src/ROM.cs @@ -386,19 +386,14 @@ public byte[] getDataFromSegmentAddress_safe(uint segOffset, uint size) } - public byte[] getSubArray_safe(byte[] arr, uint offset, uint size) + public byte[] getSubArray_safe(byte[] arr, uint offset, long size) { - if (arr == null) + if (arr == null || arr.Length <= offset) return new byte[size]; - + if((arr.Length - offset) < size) + size = (arr.Length - offset); byte[] newArr = new byte[size]; - for (uint i = 0; i < size; i++) - { - if(offset + i < arr.Length) - newArr[i] = arr[offset + i]; - else - newArr[i] = 0x00; - } + Array.Copy(arr, offset, newArr, 0, size); return newArr; } @@ -409,6 +404,11 @@ public byte[] getSubArray(byte[] arr, uint offset, uint size) return newArr; } + public void printArray(byte[] arr) + { + Console.WriteLine(BitConverter.ToString(arr.Take(arr.Length).ToArray()).Replace("-", " ")); + } + public void printArray(byte[] arr, int size) { Console.WriteLine(BitConverter.ToString(arr.Take(size).ToArray()).Replace("-", " ")); diff --git a/src/Scripts/BehaviorScripts.cs b/src/Scripts/BehaviorScripts.cs new file mode 100644 index 0000000..8ef5e65 --- /dev/null +++ b/src/Scripts/BehaviorScripts.cs @@ -0,0 +1,267 @@ +using OpenTK; +using Quad64.src.LevelInfo; +using System; +using System.Collections.Generic; +using System.Diagnostics; + +namespace Quad64.src.Scripts +{ + class BehaviorScripts + { + private static uint bytesToInt(byte[] b, int offset, int length) + { + switch (length) + { + case 1: return b[0 + offset]; + case 2: return (uint)(b[0 + offset] << 8 | b[1 + offset]); + case 3: return (uint)(b[0 + offset] << 16 | b[1 + offset] << 8 | b[2 + offset]); + default: return (uint)(b[0 + offset] << 24 | b[1 + offset] << 16 | b[2 + offset] << 8 | b[3 + offset]); + } + } + + public static void parse(ref List dump, uint segOffset) + { + parse(ref dump, (byte)(segOffset >> 24), segOffset & 0x00FFFFFF); + } + + public static void parse(ref List dump, byte seg, uint off) + { + if (seg == 0) return; + ROM rom = ROM.Instance; + byte[] data = rom.getSegment(seg); + bool end = false; + while (!end) + { + byte cmdLen = getCmdLength(data[off]); + byte[] cmd = rom.getSubArray(data, off, cmdLen); + //rom.printArray(cmd, cmdLen); + string desc = "Unknown command"; + bool alreadyAdded = false; + switch (cmd[0]) + { + case 0x00: + desc = "Start Behavior (Object type = " + cmd[1] + ")"; + break; + case 0x02: + desc = "Jump & link to address 0x" + bytesToInt(cmd, 4, 4).ToString("X8"); + alreadyAdded = true; + addBehCommandToDump(ref dump, cmd, seg, off, desc); + parse(ref dump, cmd[4], bytesToInt(cmd, 5, 3)); + break; + case 0x03: + desc = "Return back from jump & link"; + end = true; + break; + case 0x04: + desc = "Jump to address 0x" + bytesToInt(cmd, 4, 4).ToString("X8"); + alreadyAdded = true; + addBehCommandToDump(ref dump, cmd, seg, off, desc); + parse(ref dump, cmd[4], bytesToInt(cmd, 5, 3)); + end = true; + break; + case 0x05: + desc = "Loop " + bytesToInt(cmd, 2, 2) + " times"; + break; + case 0x07: + desc = "Infinite loop (jump back 4 bytes)"; + break; + case 0x08: + desc = "Start of loop"; + break; + case 0x06: + case 0x09: + desc = "End of loop"; + end = true; + break; + case 0x0A: + desc = "End behavior script"; + end = true; + break; + case 0x0B: + desc = "End behavior script"; + end = true; + break; + case 0x0C: + desc = "Call ASM function 0x" + bytesToInt(cmd, 4, 4).ToString("X8"); + break; + case 0x0D: + desc = "Add (float)" + bytesToInt(cmd, 2, 2) + " to the value at obj->_0x"+(cmd[1] * 4 + 0x88).ToString("X2"); + break; + case 0x0E: + desc = "(Set value) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + " = (float)" + bytesToInt(cmd, 2, 2); + break; + case 0x0F: + desc = "(Set value) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + " = " + (short)(bytesToInt(cmd, 2, 2) & 0xFFFF); + break; + case 0x10: + desc = "Add " + (short)(bytesToInt(cmd, 2, 2) & 0xFFFF) + " to the value at obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2"); + break; + case 0x11: + desc = "(Set bits) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2")+ " |= 0x" + bytesToInt(cmd, 2, 2).ToString("X4"); + break; + case 0x12: + desc = "(Clear bits) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + " &= (0x" + bytesToInt(cmd, 2, 2).ToString("X4") + " ^ 0xFFFF)"; + break; + case 0x13: + desc = "(Set RNG) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + " = " + bytesToInt(cmd, 2, 2) + " + (randU16() >> " + bytesToInt(cmd, 4, 2) + ")"; + break; + case 0x14: + desc = "(Set float from multi) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + " = (float)" + bytesToInt(cmd, 2, 2) + " * (float)" + bytesToInt(cmd, 4, 2) + ")"; + break; + case 0x15: + desc = "(Set float RNG from multi) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + " = (float)" + bytesToInt(cmd, 2, 2) + " + (randFloat() * (float)" + bytesToInt(cmd, 4, 2) + ")"; + break; + case 0x16: + desc = "(Set float RNG from add) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + " = (float)" + bytesToInt(cmd, 2, 2) + " + randFloat() + (float)" + bytesToInt(cmd, 4, 2); + break; + case 0x17: + desc = "(Set RNG) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + " = (obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + " + " + bytesToInt(cmd, 2, 2) + ") + (randU16() >> " + bytesToInt(cmd, 4, 2) + ")"; + break; + case 0x18: + case 0x19: + case 0x1A: + desc = "Do nothing"; + break; + case 0x1B: + desc = "Set Model ID to 0x" + bytesToInt(cmd, 2, 2).ToString("X4"); + break; + case 0x1C: + desc = "Spawn child object (Model ID = 0x" + bytesToInt(cmd, 4, 4).ToString("X4") + ", Behavior = 0x" + bytesToInt(cmd, 8, 4).ToString("X8"); + break; + case 0x1D: + desc = "Deactivate object"; + break; + case 0x1E: + desc = "Drop object to ground, and object->_0xEC |= 0x2"; + break; + case 0x1F: + desc = "(Add floats) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + + " = (float)obj->_0x" + (cmd[2] * 4 + 0x88).ToString("X2") + + " + (float)obj->_0x" + (cmd[3] * 4 + 0x88).ToString("X2"); + break; + case 0x20: + desc = "(Add values) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + + " = obj->_0x" + (cmd[2] * 4 + 0x88).ToString("X2") + + " + obj->_0x" + (cmd[3] * 4 + 0x88).ToString("X2"); + break; + case 0x21: + desc = "Set billboarding flag in graph flags (obj->_0x02 |= 0x04)"; + break; + case 0x22: + desc = "Set 0x10 flag in graph flags (obj->_0x02 |= 0x10)"; + break; + case 0x23: + desc = "Set Collision sphere size (XZ radius = " + bytesToInt(cmd, 4, 2) + ", Y radius = " + bytesToInt(cmd, 6, 2) + ")"; + break; + case 0x24: + desc = "Do nothing. (Unused function)"; + break; + case 0x25: + desc = "obj->_0x1F4 = ((obj->_0x1F4 < (obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + " - 1)) ? obj->_0x1F4 + 1 : 0)"; + break; + case 0x26: + desc = "Loop " + cmd[1] + " times"; + break; + case 0x27: + desc = "(Set word) obj->_0x" + (cmd[1] * 4 + 0x88).ToString("X2") + " = 0x" + bytesToInt(cmd, 4, 4).ToString("X8"); + break; + case 0x28: + desc = "Set obj->_0x3C from (obj->_0x120 + 0x" + (cmd[1] * 4).ToString("X") + ")"; + break; + case 0x29: + desc = "Spawn child object (Model ID = 0x" + bytesToInt(cmd, 4, 4).ToString("X4") + ", Behavior = 0x" + bytesToInt(cmd, 8, 4).ToString("X8") + ", B.Param = 0x" + bytesToInt(cmd, 2, 2).ToString("X4"); + break; + case 0x2A: + desc = "Set collision address (obj->_0x218) from address 0x"+ bytesToInt(cmd, 4, 4).ToString("X8"); ; + break; + case 0x2B: + desc = "Set Collision sphere size (XZ radius = " + bytesToInt(cmd, 4, 2) + ", Y radius = " + bytesToInt(cmd, 6, 2) + ", obj->_0x208 = " + bytesToInt(cmd, 8, 2) + ")"; + break; + case 0x2C: + desc = "(Spawn child object) obj->_0x6C = (Model ID = 0x" + bytesToInt(cmd, 4, 4).ToString("X4") + ", Behavior = 0x" + bytesToInt(cmd, 8, 4).ToString("X8"); + break; + case 0x2D: + desc = "Set inital position. (Used in Dorrie, Fly guys, etc. to determine in which range they can move)"; + break; + case 0x2E: + desc = "obj->_0x200 = (float)" + bytesToInt(cmd, 4, 2).ToString("X4") + ", obj->_0x204 = (float)" + bytesToInt(cmd, 6, 2).ToString("X4"); + break; + case 0x2F: + desc = "(Set interaction value) obj->_0x130 = 0x" + bytesToInt(cmd, 4, 4).ToString("X8"); + break; + case 0x30: + desc = + "(Set gravity) obj->_0x128 = " + bytesToInt(cmd, 4, 2) + + "f, obj->_0xE8 = " + (bytesToInt(cmd, 6, 2) / 100.0f) + + "f, obj->_0x158 = " + (bytesToInt(cmd, 8, 2) / 100.0f) + + "f, obj->_0x12C = " + (bytesToInt(cmd, 10, 2) / 100.0f) + + "f, obj->_0x170 = " + (bytesToInt(cmd, 12, 2) / 100.0f) + + "f, obj->_0x174 = " + (bytesToInt(cmd, 14, 2) / 100.0f) + "f"; + break; + case 0x31: + desc = "obj->_0x190 = 0x" + bytesToInt(cmd, 4, 4).ToString("X8"); + break; + case 0x32: + desc = "Set uniform scaling to " + (bytesToInt(cmd, 2, 2) / 100f) + "%"; + break; + case 0x33: + desc = "(Clear flags in child) obj->_0x68->_0x"+ (cmd[1] * 4 + 0x88).ToString("X2") + " &= ~0x" + bytesToInt(cmd, 4, 4).ToString("X8"); + break; + case 0x34: + desc = "(Increment texture animate rate) if((*0x8032D5D4) / " + bytesToInt(cmd, 2, 2) + " == 0) obj->_0x"+(cmd[1] * 4 + 0x88).ToString("X2")+"++"; + break; + case 0x35: + desc = "(Clear lsb of graph flags) obj->_0x2 &= 0xFFFE"; + break; + case 0x36: + desc = "obj->_0x"+ (cmd[1] * 4 + 0x88).ToString("X2") + " = " + + ((short)bytesToInt(cmd, 4, 4)).ToString("X4"); + break; + } + if (!alreadyAdded) + addBehCommandToDump(ref dump, cmd, seg, off, desc); + off += cmdLen; + } + } + + private static void addBehCommandToDump(ref List dump, byte[] cmd, byte seg, uint offset, string description) + { + ScriptDumpCommandInfo info = new ScriptDumpCommandInfo(); + info.data = cmd; + info.description = description; + info.segAddress = (uint)(seg << 24) | offset; + info.romAddress = ROM.Instance.decodeSegmentAddress_safe(seg, offset); + dump.Add(info); + } + + private static byte getCmdLength(byte cmd) + { + switch (cmd) + { + case 0x02: + case 0x04: + case 0x0C: + case 0x13: + case 0x16: + case 0x17: + case 0x23: + case 0x27: + case 0x2A: + case 0x2E: + case 0x2F: + case 0x36: + case 0x37: + return 0x08; + case 0x1C: + case 0x29: + case 0x2B: + case 0x2C: + return 0x0C; + case 0x30: + return 0x14; + default: + return 0x04; + } + } + } +} diff --git a/src/Scripts/CollisionMap.cs b/src/Scripts/CollisionMap.cs index 4233317..d84e356 100644 --- a/src/Scripts/CollisionMap.cs +++ b/src/Scripts/CollisionMap.cs @@ -29,7 +29,7 @@ public CollisionTriangleList(int ID) random.Next(0, 255) ) ); - texture = ContentPipe.LoadTexture(textureColor); + texture = ContentPipe.LoadTexture(ref textureColor); } public void AddTriangle(uint a, uint b, uint c) @@ -39,6 +39,11 @@ public void AddTriangle(uint a, uint b, uint c) indicesList.Add(c); } + public uint getTriangleCount() + { + return (uint)indices.Length / 3; + } + public void buildList() { indices = indicesList.ToArray(); @@ -49,9 +54,10 @@ class CollisionMap { private int vbo; private List vertices = new List(); + //private Vector3[] vertices = null; private List triangles = new List(); private Vector3[] verts; - + public void AddVertex(Vector3 newVert) { vertices.Add(newVert); @@ -68,6 +74,14 @@ public void NewTriangleList(int ID) triangles.Add(new CollisionTriangleList(ID)); } + public uint getTriangleCount() + { + uint tri_count = 0; + foreach (CollisionTriangleList tri in triangles) + tri_count += tri.getTriangleCount(); + return tri_count; + } + public static float barryCentric(Vector3 p1, Vector3 p2, Vector3 p3, Vector3 pos) { diff --git a/src/Scripts/Fast3DScripts.cs b/src/Scripts/Fast3DScripts.cs index 020ff74..61a8e1a 100644 --- a/src/Scripts/Fast3DScripts.cs +++ b/src/Scripts/Fast3DScripts.cs @@ -1,7 +1,9 @@ using OpenTK; using Quad64.src.LevelInfo; using System; +using System.Diagnostics; using System.Drawing; +using System.Linq; namespace Quad64.src.Scripts { @@ -23,7 +25,15 @@ private static uint bytesToInt(byte[] b, int offset, int length) default: return (uint)(b[0 + offset] << 24 | b[1 + offset] << 16 | b[2 + offset] << 8 | b[3 + offset]); } } - + + private static ulong bytesToLong(byte[] b, int offset) + { + ulong val = 0; + for (int i = 0; i < 8; i++) + val |= ((ulong)b[i + offset] << ((7-i) * 8)); + return val; + } + private enum CMD { F3D_NOOP = 0x00, @@ -91,7 +101,7 @@ public static void parse(ref Model3D mdl, ref Level lvl, byte seg, uint off) } string desc = ((CMD)cmd[0]).ToString(); bool alreadyAdded = false; - //rom.printArray(cmd, 8); + switch ((CMD)cmd[0]) { case CMD.F3D_NOOP: @@ -112,9 +122,10 @@ public static void parse(ref Model3D mdl, ref Level lvl, byte seg, uint off) case CMD.F3D_DL: alreadyAdded = true; if (cmd[1] == 0x00) - desc = "Branch to display list at 0x" + bytesToInt(cmd, 4, 4).ToString("X8"); + desc = "Jump and link to display list at 0x" + bytesToInt(cmd, 4, 4).ToString("X8"); else desc = "Jump to display list at 0x" + bytesToInt(cmd, 4, 4).ToString("X8"); + addF3DCommandToDump(ref mdl, cmd, seg, off, desc); F3D_DL(ref mdl, ref lvl, cmd); if (cmd[1] == 1) @@ -201,22 +212,21 @@ private static void addF3DCommandToDump(ref Model3D mdl, byte[] cmd, byte seg, u private static void switchTextureStatus(ref Model3D mdl, ref TempMaterial temp, bool status) { ROM rom = ROM.Instance; + if (mdl.builder.processingTexture != status) { if (status == false) { if (!mdl.builder.hasTexture(temp.segOff)) { - //System.Console.WriteLine("Adding new texture!"); if (temp.segOff != 0) { - //System.Console.WriteLine("temp.segOff = " + temp.segOff.ToString("X8")); mdl.builder.AddTexture( TextureFormats.decodeTexture( temp.format, rom.getDataFromSegmentAddress_safe( temp.segOff, - (uint)(temp.w * temp.h * 2) + (uint)(temp.w * temp.h * 4) ), temp.w, temp.h, @@ -226,7 +236,9 @@ private static void switchTextureStatus(ref Model3D mdl, ref TempMaterial temp, mdl.builder.newTexInfo(temp.wrapS, temp.wrapT), temp.segOff ); - } else { + } + else + { mdl.builder.AddTexture( TextureFormats.createColorTexture(System.Drawing.Color.FromArgb((int)temp.color)), mdl.builder.newTexInfo(temp.wrapS, temp.wrapT), @@ -304,7 +316,7 @@ private static void F3D_TEXTURE(ref TempMaterial temp, byte[] cmd) { ushort tsX = (ushort)bytesToInt(cmd, 4, 2); ushort tsY = (ushort)bytesToInt(cmd, 6, 2); - + if ((temp.geometryMode & 0x40000) == 0x40000) { temp.w = (ushort)((tsX >> 6)); @@ -416,7 +428,7 @@ textures use 16-bit formats to load data. private static bool G_SETCOMBINE(ref TempMaterial temp, byte[] cmd) { - if(bytesToInt(cmd, 0, 4) == 0xFCFFFFFF) + if(bytesToLong(cmd, 0) == 0xFCFFFFFFFFFE793C) { temp.segOff = 0; return true; diff --git a/src/Scripts/GeoScripts.cs b/src/Scripts/GeoScripts.cs index 0bec321..d3a0081 100644 --- a/src/Scripts/GeoScripts.cs +++ b/src/Scripts/GeoScripts.cs @@ -2,6 +2,7 @@ using Quad64.src.LevelInfo; using System; using System.Collections.Generic; +using System.Diagnostics; namespace Quad64.src.Scripts { @@ -313,8 +314,7 @@ private static void CMD_15(ref Model3D mdl, ref Level lvl, byte[] cmd) // Don't bother processing duplicate display lists. if (!mdl.hasGeoDisplayList(off)) { - Globals.DEBUG_PDL = bytesToInt(cmd, 4, 4); - Fast3DScripts.parse(ref mdl, ref lvl, seg, off); + Fast3DScripts.parse(ref mdl, ref lvl, seg, off); } lvl.temp_bgInfo.usesFog = mdl.builder.UsesFog; diff --git a/src/Scripts/LevelScripts.cs b/src/Scripts/LevelScripts.cs index bfb7eb6..e40c20f 100644 --- a/src/Scripts/LevelScripts.cs +++ b/src/Scripts/LevelScripts.cs @@ -1,6 +1,7 @@ using Quad64.src.LevelInfo; using Quad64.src.Scripts; using System; +using System.Diagnostics; namespace Quad64.Scripts { @@ -25,6 +26,8 @@ public static int parse(ref Level lvl, byte seg, uint off) int endCmd = 0; while (!end) { + //Stopwatch stopWatch = new Stopwatch(); + //stopWatch.Start(); byte cmdLen = data[off + 1]; byte[] cmd = rom.getSubArray(data, off, cmdLen); //rom.printArray(cmd, cmdLen); @@ -34,7 +37,7 @@ public static int parse(ref Level lvl, byte seg, uint off) { case 0x00: case 0x01: - CMD_00(ref lvl, ref desc, cmd, rom, seg, off); + CMD_00(ref lvl, ref desc, cmd, seg, off); alreadyAdded = true; break; case 0x02: @@ -114,11 +117,11 @@ public static int parse(ref Level lvl, byte seg, uint off) desc = "Copy bytes from ROM (0x" + bytesToInt(cmd, 8, 4).ToString("X8") + " to 0x" + bytesToInt(cmd, 12, 4).ToString("X8") + ") to RAM address 0x" + bytesToInt(cmd, 4, 4).ToString("X8"); break; case 0x17: - CMD_17(ref lvl, ref desc, cmd, rom); + CMD_17(ref lvl, ref desc, cmd); break; case 0x18: case 0x1A: - CMD_18(ref lvl, ref desc, cmd, rom); + CMD_18(ref lvl, ref desc, cmd); break; case 0x19: desc = "Create Mario head demo ("; @@ -156,26 +159,26 @@ public static int parse(ref Level lvl, byte seg, uint off) desc = "End of area " + lvl.CurrentAreaID; break; case 0x21: - CMD_21(ref lvl, ref desc, cmd, rom); + CMD_21(ref lvl, ref desc, cmd); break; case 0x22: //Globals.DEBUG_PLG = false; - CMD_22(ref lvl, ref desc, cmd, rom); + CMD_22(ref lvl, ref desc, cmd); break; case 0x24: - CMD_24(ref lvl, ref desc, cmd, rom, seg, off); + CMD_24(ref lvl, ref desc, cmd, seg, off); break; case 0x25: desc = "Setup Mario object"; break; case 0x26: - CMD_26(ref lvl, ref desc, cmd, rom, seg, off); + CMD_26(ref lvl, ref desc, cmd, seg, off); break; case 0x27: - CMD_27(ref lvl, ref desc, cmd, rom, seg, off); + CMD_27(ref lvl, ref desc, cmd, seg, off); break; case 0x28: - CMD_28(ref lvl, ref desc, cmd, rom, seg, off); + CMD_28(ref lvl, ref desc, cmd, seg, off); break; case 0x2B: { @@ -187,7 +190,10 @@ public static int parse(ref Level lvl, byte seg, uint off) } break; case 0x2E: - CMD_2E(ref lvl, ref desc, cmd, rom); + CMD_2E(ref lvl, ref desc, cmd); + break; + case 0x2F: + CMD_2F(ref lvl, ref desc, cmd); break; case 0x30: desc = "Show dialog message when level starts; dialog ID = 0x" + cmd[3].ToString("X2"); @@ -226,7 +232,7 @@ public static int parse(ref Level lvl, byte seg, uint off) desc = "Set music (Seq = 0x" + cmd[3].ToString("X2") + ")"; break; case 0x39: - CMD_39(ref lvl, ref desc, cmd, rom); + CMD_39(ref lvl, ref desc, cmd); break; case 0x3B: desc = "Add jet stream; Position = (" + (short)bytesToInt(cmd, 4, 2) + "," + @@ -236,6 +242,9 @@ public static int parse(ref Level lvl, byte seg, uint off) } if (!alreadyAdded) addLSCommandToDump(ref lvl, cmd, seg, off, desc); + //stopWatch.Stop(); + // if(stopWatch.Elapsed.Milliseconds > 1) + // Console.WriteLine("RunTime (CMD "+cmd[0].ToString("X2")+"): " + stopWatch.Elapsed.Milliseconds + "ms"); off += cmdLen; } return endCmd; @@ -251,8 +260,10 @@ private static void addLSCommandToDump(ref Level lvl, byte[] cmd, byte seg, uint lvl.LevelScriptCommands_ForDump.Add(info); } - private static void CMD_00(ref Level lvl, ref string desc, byte[] cmd, ROM rom, byte org_seg, uint org_off) + private static void CMD_00(ref Level lvl, ref string desc, byte[] cmd, byte org_seg, uint org_off) { + + ROM rom = ROM.Instance; byte seg = cmd[3]; uint start = bytesToInt(cmd, 4, 4); uint end = bytesToInt(cmd, 8, 4); @@ -360,8 +371,9 @@ private static void CMD_0E(ref Level lvl, ref string desc, byte[] cmd, byte org_ addLSCommandToDump(ref lvl, cmd, org_seg, org_off, desc); } - private static void CMD_17(ref Level lvl, ref string desc, byte[] cmd, ROM rom) + private static void CMD_17(ref Level lvl, ref string desc, byte[] cmd) { + ROM rom = ROM.Instance; byte seg = cmd[3]; uint start = bytesToInt(cmd, 4, 4); uint end = bytesToInt(cmd, 8, 4); @@ -369,8 +381,9 @@ private static void CMD_17(ref Level lvl, ref string desc, byte[] cmd, ROM rom) rom.setSegment(seg, start, end, false); } - private static void CMD_18(ref Level lvl, ref string desc, byte[] cmd, ROM rom) + private static void CMD_18(ref Level lvl, ref string desc, byte[] cmd) { + ROM rom = ROM.Instance; byte seg = cmd[3]; uint start = bytesToInt(cmd, 4, 4); uint end = bytesToInt(cmd, 8, 4); @@ -396,16 +409,30 @@ private static void CMD_1F(ref Level lvl, ref string desc, byte[] cmd) Area newArea = new Area(areaID, bytesToInt(cmd, 4, 4), lvl); GeoScripts.resetNodes(); newArea.AreaModel.GeoDataSegAddress = bytesToInt(cmd, 4, 4); + + // Globals.DEBUG_PARSING_LEVEL_AREA = true; + // Stopwatch stopWatch = new Stopwatch(); + // stopWatch.Start(); GeoScripts.parse(ref newArea.AreaModel, ref lvl, seg, off); lvl.setAreaBackgroundInfo(ref newArea); lvl.Areas.Add(newArea); lvl.CurrentAreaID = areaID; + // stopWatch.Stop(); + // Console.WriteLine("RunTime (GeoScripts.parse): " + stopWatch.Elapsed.Milliseconds + "ms"); + + //stopWatch = new Stopwatch(); + // stopWatch.Start(); newArea.AreaModel.buildBuffers(); - // newArea.AreaModel.outputTextureAtlasToPng("Area_"+areaID+"_TexAtlus.png"); + //if(areaID == 1) newArea.AreaModel.dumpModelToOBJ(1.0f/500.0f); + //stopWatch.Stop(); + //Console.WriteLine("RunTime (newArea.AreaModel.buildBuffers): " + stopWatch.Elapsed.Milliseconds + "ms"); + //Globals.DEBUG_PARSING_LEVEL_AREA = false; + // newArea.AreaModel.outputTextureAtlasToPng("Area_"+areaID+"_TexAtlus.png"); } - private static void CMD_21(ref Level lvl, ref string desc, byte[] cmd, ROM rom) + private static void CMD_21(ref Level lvl, ref string desc, byte[] cmd) { + ROM rom = ROM.Instance; byte modelID = cmd[3]; byte seg = cmd[4]; uint off = bytesToInt(cmd, 5, 3); @@ -425,12 +452,17 @@ private static void CMD_21(ref Level lvl, ref string desc, byte[] cmd, ROM rom) lvl.ModelIDs.Add(modelID, newModel); } - private static void CMD_22(ref Level lvl, ref string desc, byte[] cmd, ROM rom) + private static void CMD_22(ref Level lvl, ref string desc, byte[] cmd) { + ROM rom = ROM.Instance; byte modelID = cmd[3]; byte seg = cmd[4]; uint off = bytesToInt(cmd, 5, 3); + if (modelID == 0x7A) + Globals.DEBUG_PARSING_DL = true; + + desc = "Define Model ID 0x" + modelID.ToString("X2") + "; Load Geometry layout from 0x" + seg.ToString("X2") + off.ToString("X6"); //Console.WriteLine("Size of seg 0x"+seg.ToString("X2")+" = " + rom.getSegment(seg).Length); @@ -446,10 +478,15 @@ private static void CMD_22(ref Level lvl, ref string desc, byte[] cmd, ROM rom) lvl.ModelIDs.Remove(modelID); newModel.buildBuffers(); lvl.ModelIDs.Add(modelID, newModel); + + + if (modelID == 0x7A) + Globals.DEBUG_PARSING_DL = false; } - private static void CMD_24(ref Level lvl, ref string desc, byte[] cmd, ROM rom, byte seg, uint off) + private static void CMD_24(ref Level lvl, ref string desc, byte[] cmd, byte seg, uint off) { + ROM rom = ROM.Instance; Object3D newObj = new Object3D(); if (rom.isSegmentMIO0(seg)) { @@ -492,8 +529,9 @@ private static void CMD_24(ref Level lvl, ref string desc, byte[] cmd, ROM rom, } - private static void CMD_26(ref Level lvl, ref string desc, byte[] cmd, ROM rom, byte seg, uint off) + private static void CMD_26(ref Level lvl, ref string desc, byte[] cmd, byte seg, uint off) { + ROM rom = ROM.Instance; Warp warp = new Warp(false); if (rom.isSegmentMIO0(seg)) { @@ -523,8 +561,9 @@ private static void CMD_26(ref Level lvl, ref string desc, byte[] cmd, ROM rom, } } - private static void CMD_27(ref Level lvl, ref string desc, byte[] cmd, ROM rom, byte seg, uint off) + private static void CMD_27(ref Level lvl, ref string desc, byte[] cmd, byte seg, uint off) { + ROM rom = ROM.Instance; Warp warp = new Warp(true); if (rom.isSegmentMIO0(seg)) { @@ -554,8 +593,9 @@ private static void CMD_27(ref Level lvl, ref string desc, byte[] cmd, ROM rom, } } - private static void CMD_28(ref Level lvl, ref string desc, byte[] cmd, ROM rom, byte seg, uint off) + private static void CMD_28(ref Level lvl, ref string desc, byte[] cmd, byte seg, uint off) { + ROM rom = ROM.Instance; WarpInstant warp = new WarpInstant(); if (rom.isSegmentMIO0(seg)) { @@ -581,8 +621,9 @@ private static void CMD_28(ref Level lvl, ref string desc, byte[] cmd, ROM rom, } /* Process collision map, Special Objects, and waterboxes. */ - private static void CMD_2E(ref Level lvl, ref string desc, byte[] cmd, ROM rom) + private static void CMD_2E(ref Level lvl, ref string desc, byte[] cmd) { + ROM rom = ROM.Instance; if (cmd.Length < 8) return; desc = "Load collision, and place special objects from address 0x"+ bytesToInt(cmd, 4, 4).ToString("X8"); @@ -591,18 +632,18 @@ private static void CMD_2E(ref Level lvl, ref string desc, byte[] cmd, ROM rom) uint off = bytesToInt(cmd, 5, 3); byte[] data = rom.getSegment(segment); sub_cmd = (ushort)bytesToInt(data, (int)off, 2); - + CollisionMap cmap = lvl.getCurrentArea().collision; uint num_verts = (ushort)bytesToInt(data, (int)off + 2, 2); + off += 4; for (int i = 0; i < num_verts; i++) { short x = (short)bytesToInt(data, (int)off + 0, 2); short y = (short)bytesToInt(data, (int)off + 2, 2); short z = (short)bytesToInt(data, (int)off + 4, 2); - lvl.getCurrentArea().collision.AddVertex(new OpenTK.Vector3(x,y,z)); + cmap.AddVertex(new OpenTK.Vector3(x,y,z)); off += 6; } - //off += (num_verts * 6); while (sub_cmd != 0x0041) { @@ -610,7 +651,7 @@ private static void CMD_2E(ref Level lvl, ref string desc, byte[] cmd, ROM rom) //Console.WriteLine(sub_cmd.ToString("X8")); if (sub_cmd == 0x0041) break; //rom.printArraySection(data, (int)off, 4 + (int)collisionLength(sub_cmd)); - lvl.getCurrentArea().collision.NewTriangleList((int)bytesToInt(data, (int)off, 2)); + cmap.NewTriangleList((int)bytesToInt(data, (int)off, 2)); uint num_tri = (ushort)bytesToInt(data, (int)off + 2, 2); uint col_len = collisionLength(sub_cmd); off += 4; @@ -619,11 +660,11 @@ private static void CMD_2E(ref Level lvl, ref string desc, byte[] cmd, ROM rom) uint a = bytesToInt(data, (int)off + 0, 2); uint b = bytesToInt(data, (int)off + 2, 2); uint c = bytesToInt(data, (int)off + 4, 2); - lvl.getCurrentArea().collision.AddTriangle(a,b,c); + cmap.AddTriangle(a,b,c); off += col_len; } } - lvl.getCurrentArea().collision.buildCollisionMap(); + cmap.buildCollisionMap(); off += 2; bool end = false; while (!end) @@ -710,6 +751,18 @@ private static void CMD_2E(ref Level lvl, ref string desc, byte[] cmd, ROM rom) } } + + private static void CMD_2F(ref Level lvl, ref string desc, byte[] cmd) + { + ROM rom = ROM.Instance; + Console.WriteLine(bytesToInt(cmd, 4, 4).ToString("X8")); + byte seg = cmd[4]; + uint off = bytesToInt(cmd, 5, 3); + uint len = lvl.getCurrentArea().collision.getTriangleCount(); + byte[] data = rom.getSubArray(rom.getSegment(seg), off, len); + //Console.WriteLine("Num triangles = 0x" + len.ToString("X8") + ": "); + //rom.printArray(data); + } private static byte[] getSpecialObjectEntry(byte presetID) { @@ -764,10 +817,11 @@ private static uint collisionLength(int type) } } - private static void CMD_39(ref Level lvl, ref string desc, byte[] cmd, ROM rom) + private static void CMD_39(ref Level lvl, ref string desc, byte[] cmd) { if (cmd.Length < 8) return; + ROM rom = ROM.Instance; uint pos = bytesToInt(cmd, 4, 4); desc = "Place macro objects loaded from address 0x" + pos.ToString("X8"); diff --git a/src/Scripts/ModelBuilder.cs b/src/Scripts/ModelBuilder.cs index 1e8d664..d98d7ef 100644 --- a/src/Scripts/ModelBuilder.cs +++ b/src/Scripts/ModelBuilder.cs @@ -4,6 +4,7 @@ using System.Drawing; using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Quad64.src.Scripts { @@ -138,22 +139,15 @@ private int doesVertexAlreadyExist(int index, Vector3 pos, Vector2 uv, Vector4 c return -1; } - public void BuildData(List meshes) { - //TextureAtlasBuilder.TextureAtlas atlas = new TextureAtlasBuilder.TextureAtlas(textureImages); - //atlas.outputToPNG("TestAtlas.png"); - + public void BuildData(ref List meshes) { finalMesh = newFinalMesh(); - for (int t = 0; t < TempMeshes.Count; t++) - { + for (int t = 0; t < TempMeshes.Count; t++) { uint indexCount = 0; - meshes.Add(new Model3D.MeshData()); - //if (t != 0) continue; - //TextureAtlasBuilder.TextureAtlas.AtlasEntry atlasEntry = atlas.getEntryFromID((uint)t); - Model3D.MeshData md = meshes[t]; - md.texture = ContentPipe.LoadTexture(textureImages[t]); + Model3D.MeshData md = new Model3D.MeshData(); + Bitmap bmp = textureImages[t]; + md.texture = ContentPipe.LoadTexture(ref bmp); md.texture.TextureParamS = textureInfo[t].wrapS; md.texture.TextureParamT = textureInfo[t].wrapT; - //Console.WriteLine("[Building]: " + (OpenTK.Graphics.OpenGL.All)md.texture.TextureParamS + "," +(OpenTK.Graphics.OpenGL.All)md.texture.TextureParamT); TempMesh temp = TempMeshes[t]; for (int i = 0; i < temp.vertices.Count; i++) { @@ -161,17 +155,20 @@ public void BuildData(List meshes) { if (vExists < 0) { Vector2 texCoord = temp.texCoords[i]; - texCoord.X /= (float)textureImages[t].Width * 32.0f; - texCoord.Y /= (float)textureImages[t].Height * 32.0f; + texCoord.X /= (float)bmp.Width * 32.0f; + texCoord.Y /= (float)bmp.Height * 32.0f; temp.final.vertices.Add(temp.vertices[i]); temp.final.texCoords.Add(texCoord); temp.final.colors.Add(temp.colors[i]); temp.final.indices.Add(indexCount); indexCount++; - } else { + } + else + { temp.final.indices.Add((uint)vExists); } } + meshes.Add(md); } } diff --git a/src/Scripts/TextureFormats.cs b/src/Scripts/TextureFormats.cs index 9a40e9d..0f253db 100644 --- a/src/Scripts/TextureFormats.cs +++ b/src/Scripts/TextureFormats.cs @@ -1,6 +1,8 @@ using System; using System.Drawing; using System.Drawing.Imaging; +using System.Runtime.InteropServices; +using System.Threading.Tasks; using System.Windows.Forms; namespace Quad64.src.Scripts @@ -10,7 +12,7 @@ class TextureFormats public static Bitmap createColorTexture(Color color) { Bitmap tex = new Bitmap(1, 1); - tex.SetPixel(0, 0, color); + Graphics.FromImage(tex).Clear(color); return tex; } @@ -334,15 +336,22 @@ public static Bitmap decode1BPP(byte[] data, int width, int height) public static Bitmap decodeRGBA32(byte[] data, int width, int height) { + Console.WriteLine("Texture size = (" + width + "x" + height + ")"); + Console.WriteLine("data.Length = (" + data.Length + ")"); Bitmap tex = new Bitmap(width, height); - for (int i = 0; i < width * height; ++i) + BitmapData bitmapData = tex.LockBits(new Rectangle(0, 0, width, height), + ImageLockMode.ReadWrite, tex.PixelFormat); + + int len = width * height; + for (int i = 0; i < len; i++) { - byte red = data[i * 4 + 0]; - byte green = data[i * 4 + 1]; - byte blue = data[i * 4 + 2]; - byte alpha = data[i * 4 + 3]; // (Transparency) - tex.SetPixel(i % width, i / width, Color.FromArgb(alpha, red, green, blue)); + // Swap red and blue values + byte temp_red = data[(i * 4) + 0]; + data[(i * 4) + 0] = data[(i * 4) + 2]; + data[(i * 4) + 2] = temp_red; } + Marshal.Copy(data, 0, bitmapData.Scan0, data.Length); + tex.UnlockBits(bitmapData); tex.Tag = new string[] { "Format: RGBA32", "Width: " + width, "Height: " + height }; @@ -352,16 +361,21 @@ public static Bitmap decodeRGBA32(byte[] data, int width, int height) public static Bitmap decodeRGBA16(byte[] data, int width, int height) { Bitmap tex = new Bitmap(width, height); - - for (int i = 0; i < width * height; ++i) - { + BitmapData bitmapData = tex.LockBits(new Rectangle(0, 0, width, height), + ImageLockMode.ReadWrite, tex.PixelFormat); + byte[] pixels = new byte[width * height * 4]; + + int len = width * height; + for(int i = 0; i < len; i++) + { ushort pixel = (ushort)((data[i * 2] << 8) | data[i * 2 + 1]); - byte red = (byte)(((pixel >> 11) & 0x1F) * 8); - byte green = (byte)(((pixel >> 6) & 0x1F) * 8); - byte blue = (byte)(((pixel >> 1) & 0x1F) * 8); - byte alpha = (pixel & 1) > 0 ? (byte)0xFF : (byte)0x00; // (Transparency) - tex.SetPixel(i % width, i / width, Color.FromArgb(alpha, red, green, blue)); + pixels[(i * 4) + 2] = (byte)(((pixel >> 11) & 0x1F) * 8); // Red + pixels[(i * 4) + 1] = (byte)(((pixel >> 6) & 0x1F) * 8); // Green + pixels[(i * 4) + 0] = (byte)(((pixel >> 1) & 0x1F) * 8); // Blue + pixels[(i * 4) + 3] = (pixel & 1) > 0 ? (byte)0xFF : (byte)0x00; // (Transparency) } + Marshal.Copy(pixels, 0, bitmapData.Scan0, pixels.Length); + tex.UnlockBits(bitmapData); tex.Tag = new string[] { "Format: RGBA16", "Width: " + width, "Height: " + height }; @@ -371,14 +385,20 @@ public static Bitmap decodeRGBA16(byte[] data, int width, int height) public static Bitmap decodeIA16(byte[] data, int width, int height) { Bitmap tex = new Bitmap(width, height); + BitmapData bitmapData = tex.LockBits(new Rectangle(0, 0, width, height), + ImageLockMode.ReadWrite, tex.PixelFormat); + byte[] pixels = new byte[width * height * 4]; - for (int i = 0; i < width * height; ++i) + int len = width * height; + for (int i = 0; i < len; i++) { - ushort pixel = (ushort)((data[i * 2] << 8) | data[i * 2 + 1]); - byte intensity = data[i * 2]; - byte alpha = data[i * 2 + 1]; - tex.SetPixel(i % width, i / width, Color.FromArgb(alpha, intensity, intensity, intensity)); + pixels[(i * 4) + 2] = data[i * 2]; // Red + pixels[(i * 4) + 1] = data[i * 2]; // Green + pixels[(i * 4) + 0] = data[i * 2]; // Blue + pixels[(i * 4) + 3] = data[(i * 2) + 1]; // Alpha } + Marshal.Copy(pixels, 0, bitmapData.Scan0, pixels.Length); + tex.UnlockBits(bitmapData); tex.Tag = new string[] { "Format: IA16", "Width: " + width, "Height: " + height}; @@ -388,13 +408,21 @@ public static Bitmap decodeIA16(byte[] data, int width, int height) public static Bitmap decodeIA8(byte[] data, int width, int height) { Bitmap tex = new Bitmap(width, height); + BitmapData bitmapData = tex.LockBits(new Rectangle(0, 0, width, height), + ImageLockMode.ReadWrite, tex.PixelFormat); + byte[] pixels = new byte[width * height * 4]; - for (int i = 0; i < width * height; ++i) + int len = width * height; + for (int i = 0; i < len; i++) { byte intensity = (byte)(((data[i] >> 4) & 0xF) * 16); - byte alpha = (byte)((data[i] & 0xF) * 16); - tex.SetPixel(i % width, i / width, Color.FromArgb(alpha, intensity, intensity, intensity)); + pixels[(i * 4) + 2] = intensity; // Red + pixels[(i * 4) + 1] = intensity; // Green + pixels[(i * 4) + 0] = intensity; // Blue + pixels[(i * 4) + 3] = (byte)((data[i] & 0xF) * 16); // Alpha } + Marshal.Copy(pixels, 0, bitmapData.Scan0, pixels.Length); + tex.UnlockBits(bitmapData); tex.Tag = new string[] { "Format: IA8", "Width: " + width, "Height: " + height }; @@ -403,19 +431,29 @@ public static Bitmap decodeIA8(byte[] data, int width, int height) public static Bitmap decodeIA4(byte[] data, int width, int height) { Bitmap tex = new Bitmap(width, height); + BitmapData bitmapData = tex.LockBits(new Rectangle(0, 0, width, height), + ImageLockMode.ReadWrite, tex.PixelFormat); + byte[] pixels = new byte[width * height * 4]; + int len = (width * height) / 2; for (int i = 0; i < len; i++) { byte twoPixels = data[i]; + byte intensity = (byte)((twoPixels >> 5) * 32); - byte alpha = (byte)(((twoPixels >> 4) & 0x1) * 255); - tex.SetPixel((i * 2) % width, (i * 2) / width, Color.FromArgb(alpha, intensity, intensity, intensity)); - + pixels[(i * 8) + 2] = intensity; // Red + pixels[(i * 8) + 1] = intensity; // Green + pixels[(i * 8) + 0] = intensity; // Blue + pixels[(i * 8) + 3] = (byte)(((twoPixels >> 4) & 0x1) * 255); // Alpha + intensity = (byte)(((twoPixels >> 1) & 0x7) * 32); - alpha = (byte)((twoPixels & 0x1) * 255); - tex.SetPixel(((i * 2) + 1) % width, ((i * 2) + 1) / width, Color.FromArgb(alpha, intensity, intensity, intensity)); + pixels[(i * 8) + 6] = intensity; // Red + pixels[(i * 8) + 5] = intensity; // Green + pixels[(i * 8) + 4] = intensity; // Blue + pixels[(i * 8) + 7] = (byte)((twoPixels & 0x1) * 255); // Alpha } - + Marshal.Copy(pixels, 0, bitmapData.Scan0, pixels.Length); + tex.UnlockBits(bitmapData); tex.Tag = new string[] { "Format: IA4", "Width: " + width, "Height: " + height }; return tex; @@ -423,12 +461,21 @@ public static Bitmap decodeIA4(byte[] data, int width, int height) public static Bitmap decodeI8(byte[] data, int width, int height) { Bitmap tex = new Bitmap(width, height); + BitmapData bitmapData = tex.LockBits(new Rectangle(0, 0, width, height), + ImageLockMode.ReadWrite, tex.PixelFormat); + byte[] pixels = new byte[width * height * 4]; - for (int i = 0; i < width * height; ++i) + int len = width * height; + for (int i = 0; i < len; i++) { byte intensity = data[i]; - tex.SetPixel(i % width, i / width, Color.FromArgb(intensity, intensity, intensity)); + pixels[(i * 4) + 2] = intensity; // Red + pixels[(i * 4) + 1] = intensity; // Green + pixels[(i * 4) + 0] = intensity; // Blue + pixels[(i * 4) + 3] = 0xFF; // Alpha } + Marshal.Copy(pixels, 0, bitmapData.Scan0, pixels.Length); + tex.UnlockBits(bitmapData); tex.Tag = new string[] { "Format: I8", "Width: " + width, "Height: " + height }; @@ -437,17 +484,30 @@ public static Bitmap decodeI8(byte[] data, int width, int height) public static Bitmap decodeI4(byte[] data, int width, int height) { Bitmap tex = new Bitmap(width, height); - int len = (width * height)/2; + BitmapData bitmapData = tex.LockBits(new Rectangle(0, 0, width, height), + ImageLockMode.ReadWrite, tex.PixelFormat); + byte[] pixels = new byte[width * height * 4]; + + int len = (width * height) / 2; for (int i = 0; i < len; i++) { byte twoPixels = data[i]; + byte intensity = (byte)((twoPixels >> 4) * 16); - tex.SetPixel((i * 2) % width, (i * 2) / width, Color.FromArgb(intensity, intensity, intensity)); + pixels[(i * 8) + 2] = intensity; // Red + pixels[(i * 8) + 1] = intensity; // Green + pixels[(i * 8) + 0] = intensity; // Blue + pixels[(i * 8) + 3] = 0xFF; // Alpha intensity = (byte)((twoPixels & 0xF) * 16); - tex.SetPixel(((i * 2) + 1) % width, ((i * 2) + 1) / width, Color.FromArgb(intensity, intensity, intensity)); + pixels[(i * 8) + 6] = intensity; // Red + pixels[(i * 8) + 5] = intensity; // Green + pixels[(i * 8) + 4] = intensity; // Blue + pixels[(i * 8) + 7] = 0xFF; // Alpha } - + Marshal.Copy(pixels, 0, bitmapData.Scan0, pixels.Length); + tex.UnlockBits(bitmapData); + tex.Tag = new string[] { "Format: I4", "Width: " + width, "Height: " + height }; return tex; @@ -456,24 +516,33 @@ public static Bitmap decodeI4(byte[] data, int width, int height) public static Bitmap decodeCI4(byte[] data, int width, int height, ushort[] palette, bool isPaletteRGBA16) { Bitmap tex = new Bitmap(width, height); + + BitmapData bitmapData = tex.LockBits(new Rectangle(0, 0, width, height), + ImageLockMode.ReadWrite, tex.PixelFormat); + byte[] pixels = new byte[width * height * 4]; + int len = (width * height) / 2; for (int i = 0; i < len; i++) { ushort pixel = palette[(data[i] >> 4) & 0xF]; - byte red = (byte)(((pixel >> 11) & 0x1F) * 8); - byte green = (byte)(((pixel >> 6) & 0x1F) * 8); - byte blue = (byte)(((pixel >> 1) & 0x1F) * 8); - byte alpha = (pixel & 1) > 0 ? (byte)0xFF : (byte)0x00; - tex.SetPixel((i * 2) % width, (i * 2) / width, Color.FromArgb(alpha, red, green, blue)); + pixels[(i * 8) + 2] = (byte)(((pixel >> 11) & 0x1F) * 8); // Red + pixels[(i * 8) + 1] = (byte)(((pixel >> 6) & 0x1F) * 8); // Green + pixels[(i * 8) + 0] = (byte)(((pixel >> 1) & 0x1F) * 8); // Blue + pixels[(i * 8) + 3] = (pixel & 1) > 0 ? (byte)0xFF : (byte)0x00; // Alpha pixel = palette[(data[i]) & 0xF]; - red = (byte)(((pixel >> 11) & 0x1F) * 8); - green = (byte)(((pixel >> 6) & 0x1F) * 8); - blue = (byte)(((pixel >> 1) & 0x1F) * 8); - alpha = (pixel & 1) > 0 ? (byte)0xFF : (byte)0x00; - tex.SetPixel(((i * 2) + 1) % width, ((i * 2) + 1) / width, Color.FromArgb(alpha, red, green, blue)); + pixels[(i * 8) + 6] = (byte)(((pixel >> 11) & 0x1F) * 8); // Red + pixels[(i * 8) + 5] = (byte)(((pixel >> 6) & 0x1F) * 8); // Green + pixels[(i * 8) + 4] = (byte)(((pixel >> 1) & 0x1F) * 8); // Blue + pixels[(i * 8) + 7] = (pixel & 1) > 0 ? (byte)0xFF : (byte)0x00; // Alpha + } + Marshal.Copy(pixels, 0, bitmapData.Scan0, pixels.Length); + tex.UnlockBits(bitmapData); + tex.Tag = new string[] { "Format: RGBA16", "Width: " + width, + "Height: " + height }; + tex.Tag = new string[] { "Format: CI4", "Width: " + width, "Height: " + height }; return tex; @@ -482,17 +551,24 @@ public static Bitmap decodeCI4(byte[] data, int width, int height, ushort[] pale public static Bitmap decodeCI8(byte[] data, int width, int height, ushort[] palette, bool isPaletteRGBA16) { Bitmap tex = new Bitmap(width, height); - int len = (width * height) / 2; + + BitmapData bitmapData = tex.LockBits(new Rectangle(0, 0, width, height), + ImageLockMode.ReadWrite, tex.PixelFormat); + byte[] pixels = new byte[width * height * 4]; + + int len = width * height; for (int i = 0; i < len; i++) { ushort pixel = palette[data[i]]; - byte red = (byte)(((pixel >> 11) & 0x1F) * 8); - byte green = (byte)(((pixel >> 6) & 0x1F) * 8); - byte blue = (byte)(((pixel >> 1) & 0x1F) * 8); - byte alpha = (pixel & 1) > 0 ? (byte)0xFF : (byte)0x00; - tex.SetPixel(i % width, i / width, Color.FromArgb(alpha, red, green, blue)); + pixels[(i * 4) + 2] = (byte)(((pixel >> 11) & 0x1F) * 8); // Red + pixels[(i * 4) + 1] = (byte)(((pixel >> 6) & 0x1F) * 8); // Green + pixels[(i * 4) + 0] = (byte)(((pixel >> 1) & 0x1F) * 8); // Blue + pixels[(i * 4) + 3] = (pixel & 1) > 0 ? (byte)0xFF : (byte)0x00; // (Transparency) + //tex.SetPixel(i % width, i / width, Color.FromArgb(alpha, red, green, blue)); } - + Marshal.Copy(pixels, 0, bitmapData.Scan0, pixels.Length); + tex.UnlockBits(bitmapData); + tex.Tag = new string[] { "Format: CI8", "Width: " + width, "Height: " + height }; return tex; diff --git a/src/Viewer/ContentPipe.cs b/src/Viewer/ContentPipe.cs index c9c9356..326d683 100644 --- a/src/Viewer/ContentPipe.cs +++ b/src/Viewer/ContentPipe.cs @@ -15,10 +15,11 @@ class ContentPipe { public static Texture2D LoadTexture(string filepath) { - return LoadTexture(new Bitmap(filepath)); + Bitmap bitmap = new Bitmap(filepath); + return LoadTexture(ref bitmap); } - public static Texture2D LoadTexture(Bitmap bitmap) + public static Texture2D LoadTexture(ref Bitmap bitmap) { int id = GL.GenTexture(); BitmapData bmpData = bitmap.LockBits( diff --git a/src/Viewer/Model3D.cs b/src/Viewer/Model3D.cs index 23226e9..bba6eb5 100644 --- a/src/Viewer/Model3D.cs +++ b/src/Viewer/Model3D.cs @@ -1,9 +1,13 @@ -using OpenTK; +using Collada141; +using OpenTK; using OpenTK.Graphics.OpenGL; using Quad64.src.Scripts; -using Quad64.src.Viewer; using System; using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading.Tasks; + namespace Quad64 { class Model3D @@ -21,7 +25,7 @@ public override string ToString() { return "Texture [ID/W/H]: [" + texture.ID + "/" + texture.Width + "/" + texture.Height + "]"; } } - Vector3 center = new Vector3(0, 0, 0); + //Vector3 center = new Vector3(0, 0, 0); Vector3 upper = new Vector3(0, 0, 0); Vector3 lower = new Vector3(0, 0, 0); public Vector3 UpperBoundary { get { return upper; } } @@ -51,10 +55,8 @@ private void calculateCenter() { float max_x = -1, min_x = -1, max_y = -1, min_y = -1, max_z = -1, min_z = -1; uint count = 0; - foreach (MeshData md in meshes) - { - foreach (Vector3 vec in md.vertices) - { + foreach (MeshData md in meshes){ + foreach (Vector3 vec in md.vertices) { if (count == 0) { min_x = vec.X; max_x = vec.X; @@ -80,7 +82,7 @@ private void calculateCenter() count++; } } - center = new Vector3((max_x+min_x) / 2, (max_y + min_y) / 2, (max_z + min_z) / 2); + //center = new Vector3((max_x+min_x) / 2, (max_y + min_y) / 2, (max_z + min_z) / 2); upper = new Vector3(max_x, max_y, max_z); lower = new Vector3(min_x, min_y, min_z); } @@ -92,11 +94,11 @@ TextureAtlasBuilder.TextureAtlas atlas atlas.outputToPNG(filename); } - public void buildBuffers() { - builder.BuildData(meshes); + public void buildBuffers() + { + builder.BuildData(ref meshes); //Console.WriteLine("#meshes = " + meshes.Count); - for (int i = 0; i < meshes.Count; i++) - { + for (int i = 0; i < meshes.Count; i++) { MeshData m = meshes[i]; m.vertices = builder.getVertices(i); m.texCoord = builder.getTexCoords(i); @@ -197,6 +199,74 @@ public void drawModel(Vector3 scale, Quaternion rot, Vector3 pos) GL.PopMatrix(); } + public void dumpModelToCOLLADA(float scale) + { + DumpModel.dumpModelToCOLLADA(this, scale); + } + + public void dumpModelToOBJ(float scale) + { + StringBuilder objModel = new StringBuilder(); + StringBuilder objMtl = new StringBuilder(); + objModel.Append("mtllib Level.mtl" + Environment.NewLine); + // string objModel = "mtllib Level.mtl" + Environment.NewLine; + // string objMtl = ""; + int index_offset = 1; + int img_index = 0; + + foreach(System.Drawing.Bitmap bmp in builder.TextureImages) + { + string filepath = Directory.GetCurrentDirectory() + "\\Level\\" + img_index + ".png"; + (new FileInfo(filepath)).Directory.Create(); + bmp.Save(filepath, System.Drawing.Imaging.ImageFormat.Png); + objMtl.Append("newmtl Tex_" + img_index + Environment.NewLine); + objMtl.Append("Ka 0.000000 0.000000 0.000000" + Environment.NewLine + + "Kd 1.000000 1.000000 1.000000" + Environment.NewLine + + "Ks 0.000000 0.000000 0.000000" + Environment.NewLine); + objMtl.Append("map_Kd Level/" + img_index + ".png" + Environment.NewLine); + img_index++; + } + + for (int i = 0; i < meshes.Count; i++) + { + MeshData m = meshes[i]; + if (m.vertices.Length < 1) + continue; + objModel.Append("usemtl Tex_" + i + Environment.NewLine); + + foreach (Vector3 vert in m.vertices) + { + objModel.Append("v " + (vert.X * scale) + " " + (vert.Y * scale) + " " + (vert.Z * scale)); + objModel.Append(Environment.NewLine); + } + + foreach (Vector2 texCoord in m.texCoord) + { + float X = texCoord.X, Y = texCoord.Y; + if (m.texture.TextureParamS == (int)All.ClampToEdge) + X = (X > 1.0f ? 1.0f : (X < 0.0f ? 0.0f : X)); + if (m.texture.TextureParamT == (int)All.ClampToEdge) + Y = (Y > 1.0f ? 1.0f : (Y < 0.0f ? 0.0f : Y)); + objModel.Append("vt " + X + " " + -Y + Environment.NewLine); + } + + int largest_value = index_offset; + for (int j = 0; j < m.indices.Length/3; j++) + { + int v1 = (int)m.indices[(j * 3) + 0] + index_offset; + int v2 = (int)m.indices[(j * 3) + 1] + index_offset; + int v3 = (int)m.indices[(j * 3) + 2] + index_offset; + objModel.Append("f " + v1 + "/" + v1 + " " + v2 + "/" + v2 + " " + v3 + "/" + v3 + Environment.NewLine); + + largest_value = Math.Max(v1, largest_value); + largest_value = Math.Max(v2, largest_value); + largest_value = Math.Max(v3, largest_value); + } + index_offset = largest_value + 1; + } + File.WriteAllText("Level.obj", objModel.ToString()); + File.WriteAllText("Level.mtl", objMtl.ToString()); + } } }