diff --git a/.gitignore b/.gitignore index fae8a85..2ef16af 100644 --- a/.gitignore +++ b/.gitignore @@ -24,8 +24,9 @@ run_log.txt # Debugging, Autonomous Testing & Screenshots screenshots/ -*.png -*.json +/*.png +/*.json +!assets/** # OS / Editor files .DS_Store diff --git a/assets/models/Bed.fbx b/assets/models/Bed.fbx new file mode 100644 index 0000000..ca17b20 --- /dev/null +++ b/assets/models/Bed.fbx @@ -0,0 +1,398 @@ +; FBX 7.3.0 project file +; Created by the Blockbench FBX Exporter +; ---------------------------------------------------- +; + +FBXHeaderExtension: { + FBXHeaderVersion: 1003 + FBXVersion: 7300 + EncryptionType: 0 + CreationTimeStamp: { + Version: 1000 + Year: 2026 + Month: 10 + Day: 7 + Hour: 18 + Minute: 44 + Second: 12 + Millisecond: 852 + } + Creator: "Blockbench 5.1.6" + SceneInfo: "SceneInfo::GlobalInfo", "UserData" { + Type: "UserData" + Version: 100 + MetaData: { + Version: 100 + Title: "" + Subject: "" + Author: "" + Keywords: "" + Revision: "" + Comment: "" + } + Properties70: { + P: "DocumentUrl", "KString", "Url", "", "C:\Users\Blockbench\foobar.fbx" + P: "SrcDocumentUrl", "KString", "Url", "", "C:\Users\Blockbench\foobar.fbx" + P: "Original", "Compound", "", "" + P: "Original|ApplicationVendor", "KString", "", "", "Blockbench" + P: "Original|ApplicationName", "KString", "", "", "Blockbench FBX Exporter" + P: "Original|ApplicationVersion", "KString", "", "", "5.1.6" + P: "Original|DateTime_GMT", "DateTime", "", "", "01/01/1970 00:00:00.000" + P: "Original|FileName", "KString", "", "", "/foobar.fbx" + P: "LastSaved", "Compound", "", "" + P: "LastSaved|ApplicationVendor", "KString", "", "", "Blockbench" + P: "LastSaved|ApplicationName", "KString", "", "", "Blockbench FBX Exporter" + P: "LastSaved|ApplicationVersion", "KString", "", "", "5.1.6" + P: "LastSaved|DateTime_GMT", "DateTime", "", "", "01/01/1970 00:00:00.000" + P: "Original|ApplicationNativeFile", "KString", "", "", "" + } + } +} +FileId: "iVFoobar" +CreationTime: "2026-10-07 15:44:12:852" +Creator: "Made with Blockbench" +GlobalSettings: { + Version: 1000 + Properties70: { + P: "UpAxis", "int", "Integer", "",1 + P: "UpAxisSign", "int", "Integer", "",1 + P: "FrontAxis", "int", "Integer", "",2 + P: "FrontAxisSign", "int", "Integer", "",1 + P: "CoordAxis", "int", "Integer", "",0 + P: "CoordAxisSign", "int", "Integer", "",1 + P: "OriginalUpAxis", "int", "Integer", "",-1 + P: "OriginalUpAxisSign", "int", "Integer", "",1 + P: "UnitScaleFactor", "double", "Number", "",1 + P: "OriginalUnitScaleFactor", "double", "Number", "",1 + P: "AmbientColor", "ColorRGB", "Color", "",0,0,0 + P: "DefaultCamera", "KString", "", "", "Producer Perspective" + P: "TimeMode", "enum", "", "",0 + P: "TimeSpanStart", "KTime", "Time", "",0 + P: "TimeSpanStop", "KTime", "Time", "",46186158000 + P: "CustomFrameRate", "double", "Number", "",24 + } +} + +; Documents Description +;------------------------------------------------------------------ + +Documents: { + Count: 1 + Document: 1588043550 { + Scene: "Scene" + Properties70: { + P: "SourceObject", "object", "", "" + P: "ActiveAnimStackName", "KString", "", "", "" + } + RootNode: 0 + } +} + +; Document References +;------------------------------------------------------------------ + +References: + +; Object definitions +;------------------------------------------------------------------ + +Definitions: { + Version: 100 + Count: 6 + ObjectType: "GlobalSettings" { + Count: 1 + } + ObjectType: "Model" { + Count: 1 + PropertyTemplate: "FbxNode" { + Properties70: { + P: "QuaternionInterpolate", "enum", "", "",0 + P: "RotationOffset", "Vector3D", "Vector", "",0,0,0 + P: "RotationPivot", "Vector3D", "Vector", "",0,0,0 + P: "ScalingOffset", "Vector3D", "Vector", "",0,0,0 + P: "ScalingPivot", "Vector3D", "Vector", "",0,0,0 + P: "TranslationActive", "bool", "", "",0 + P: "TranslationMin", "Vector3D", "Vector", "",0,0,0 + P: "TranslationMax", "Vector3D", "Vector", "",0,0,0 + P: "TranslationMinX", "bool", "", "",0 + P: "TranslationMinY", "bool", "", "",0 + P: "TranslationMinZ", "bool", "", "",0 + P: "TranslationMaxX", "bool", "", "",0 + P: "TranslationMaxY", "bool", "", "",0 + P: "TranslationMaxZ", "bool", "", "",0 + P: "RotationOrder", "enum", "", "",5 + P: "RotationSpaceForLimitOnly", "bool", "", "",0 + P: "RotationStiffnessX", "double", "Number", "",0 + P: "RotationStiffnessY", "double", "Number", "",0 + P: "RotationStiffnessZ", "double", "Number", "",0 + P: "AxisLen", "double", "Number", "",10 + P: "PreRotation", "Vector3D", "Vector", "",0,0,0 + P: "PostRotation", "Vector3D", "Vector", "",0,0,0 + P: "RotationActive", "bool", "", "",0 + P: "RotationMin", "Vector3D", "Vector", "",0,0,0 + P: "RotationMax", "Vector3D", "Vector", "",0,0,0 + P: "RotationMinX", "bool", "", "",0 + P: "RotationMinY", "bool", "", "",0 + P: "RotationMinZ", "bool", "", "",0 + P: "RotationMaxX", "bool", "", "",0 + P: "RotationMaxY", "bool", "", "",0 + P: "RotationMaxZ", "bool", "", "",0 + P: "InheritType", "enum", "", "",0 + P: "ScalingActive", "bool", "", "",0 + P: "ScalingMin", "Vector3D", "Vector", "",0,0,0 + P: "ScalingMax", "Vector3D", "Vector", "",1,1,1 + P: "ScalingMinX", "bool", "", "",0 + P: "ScalingMinY", "bool", "", "",0 + P: "ScalingMinZ", "bool", "", "",0 + P: "ScalingMaxX", "bool", "", "",0 + P: "ScalingMaxY", "bool", "", "",0 + P: "ScalingMaxZ", "bool", "", "",0 + P: "GeometricTranslation", "Vector3D", "Vector", "",0,0,0 + P: "GeometricRotation", "Vector3D", "Vector", "",0,0,0 + P: "GeometricScaling", "Vector3D", "Vector", "",1,1,1 + P: "MinDampRangeX", "double", "Number", "",0 + P: "MinDampRangeY", "double", "Number", "",0 + P: "MinDampRangeZ", "double", "Number", "",0 + P: "MaxDampRangeX", "double", "Number", "",0 + P: "MaxDampRangeY", "double", "Number", "",0 + P: "MaxDampRangeZ", "double", "Number", "",0 + P: "MinDampStrengthX", "double", "Number", "",0 + P: "MinDampStrengthY", "double", "Number", "",0 + P: "MinDampStrengthZ", "double", "Number", "",0 + P: "MaxDampStrengthX", "double", "Number", "",0 + P: "MaxDampStrengthY", "double", "Number", "",0 + P: "MaxDampStrengthZ", "double", "Number", "",0 + P: "PreferedAngleX", "double", "Number", "",0 + P: "PreferedAngleY", "double", "Number", "",0 + P: "PreferedAngleZ", "double", "Number", "",0 + P: "LookAtProperty", "object", "", "" + P: "UpVectorProperty", "object", "", "" + P: "Show", "bool", "", "",1 + P: "NegativePercentShapeSupport", "bool", "", "",1 + P: "DefaultAttributeIndex", "int", "Integer", "",-1 + P: "Freeze", "bool", "", "",0 + P: "LODBox", "bool", "", "",0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,0,0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",0,0,0 + P: "Lcl Scaling", "Lcl Scaling", "", "A",1,1,1 + P: "Visibility", "Visibility", "", "A",1 + P: "Visibility Inheritance", "Visibility Inheritance", "", "",1 + } + } + } + ObjectType: "Geometry" { + Count: 1 + PropertyTemplate: "FbxMesh" { + Properties70: { + P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8 + P: "BBoxMin", "Vector3D", "Vector", "",0,0,0 + P: "BBoxMax", "Vector3D", "Vector", "",0,0,0 + P: "Primary Visibility", "bool", "", "",1 + P: "Casts Shadows", "bool", "", "",1 + P: "Receive Shadows", "bool", "", "",1 + } + } + } + ObjectType: "Material" { + Count: 1 + PropertyTemplate: "FbxSurfaceLambert" { + Properties70: { + P: "ShadingModel", "KString", "", "", "Lambert" + P: "MultiLayer", "bool", "", "",0 + P: "EmissiveColor", "Color", "", "A",0,0,0 + P: "EmissiveFactor", "Number", "", "A",1 + P: "AmbientColor", "Color", "", "A",0.2,0.2,0.2 + P: "AmbientFactor", "Number", "", "A",1 + P: "DiffuseColor", "Color", "", "A",0.8,0.8,0.8 + P: "DiffuseFactor", "Number", "", "A",1 + P: "Bump", "Vector3D", "Vector", "",0,0,0 + P: "NormalMap", "Vector3D", "Vector", "",0,0,0 + P: "BumpFactor", "double", "Number", "",1 + P: "TransparentColor", "Color", "", "A",0,0,0 + P: "TransparencyFactor", "Number", "", "A",0 + P: "DisplacementColor", "ColorRGB", "Color", "",0,0,0 + P: "DisplacementFactor", "double", "Number", "",1 + P: "VectorDisplacementColor", "ColorRGB", "Color", "",0,0,0 + P: "VectorDisplacementFactor", "double", "Number", "",1 + } + } + } + ObjectType: "Texture" { + Count: 1 + PropertyTemplate: "FbxFileTexture" { + Properties70: { + P: "TextureTypeUse", "enum", "", "",0 + P: "Texture alpha", "Number", "", "A",1 + P: "CurrentMappingType", "enum", "", "",0 + P: "WrapModeU", "enum", "", "",0 + P: "WrapModeV", "enum", "", "",0 + P: "UVSwap", "bool", "", "",0 + P: "PremultiplyAlpha", "bool", "", "",1 + P: "Translation", "Vector", "", "A",0,0,0 + P: "Rotation", "Vector", "", "A",0,0,0 + P: "Scaling", "Vector", "", "A",1,1,1 + P: "TextureRotationPivot", "Vector3D", "Vector", "",0,0,0 + P: "TextureScalingPivot", "Vector3D", "Vector", "",0,0,0 + P: "CurrentTextureBlendMode", "enum", "", "",1 + P: "UVSet", "KString", "", "", "default" + P: "UseMaterial", "bool", "", "",0 + P: "UseMipMap", "bool", "", "",0 + } + } + } + ObjectType: "Video" { + Count: 1 + PropertyTemplate: "FbxVideo" { + Properties70: { + P: "ImageSequence", "bool", "", "",0 + P: "ImageSequenceOffset", "int", "Integer", "",0 + P: "FrameRate", "double", "Number", "",0 + P: "LastFrame", "int", "Integer", "",0 + P: "Width", "int", "Integer", "",0 + P: "Height", "int", "Integer", "",0 + P: "Path", "KString", "XRefUrl", "", "" + P: "StartFrame", "int", "Integer", "",0 + P: "StopFrame", "int", "Integer", "",0 + P: "PlaySpeed", "double", "Number", "",0 + P: "Offset", "KTime", "Time", "",0 + P: "InterlaceMode", "enum", "", "",0 + P: "FreeRunning", "bool", "", "",0 + P: "Loop", "bool", "", "",0 + P: "AccessMode", "enum", "", "",0 + } + } + } +} + +; Object properties +;------------------------------------------------------------------ + +Objects: { + Model: 70061392, "Model::mesh", "Mesh" { + Version: 232 + Properties70: { + P: "RotationActive", "bool", "", "",1 + P: "InheritType", "enum", "", "",1 + P: "ScalingMax", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Translation", "Lcl Translation", "", "A",0,-3.125,-6.25 + P: "RotationPivot", "Vector3D", "Vector", "",0,0,0 + P: "Lcl Rotation", "Lcl Rotation", "", "A",0,0,0 + P: "RotationOrder", "enum", "", "",5 + P: "DefaultAttributeIndex", "int", "Integer", "",0 + } + Shading: Y + Culling: "CullingOff" + } + Geometry: 79347176, "Geometry::mesh", "Mesh" { + Vertices: *240 { + a: 40.625,32.8125,40.625,40.625,25,-40.625,40.625,17.1875,40.625,40.625,17.1875,-40.625,-40.625,32.8125,40.625,-40.625,25,-40.625,-40.625,17.1875,40.625,-40.625,17.1875,-40.625,-37.5,15.625,-37.5,-37.5,15.625,-43.75,-37.5,3.125,-37.5,-37.5,3.125,-43.75,-43.75,15.625,-37.5,-43.75,15.625,-43.75,-43.75,3.125,-37.5,-43.75,3.125,-43.75,43.75,15.625,-37.5,43.75,15.625,-43.75,43.75,3.125,-37.5,43.75,3.125,-43.75,37.5,15.625,-37.5,37.5,15.625,-43.75,37.5,3.125,-37.5,37.5,3.125,-43.75,43.75,15.625,56.25,43.75,15.625,50,43.75,3.125,56.25,43.75,3.125,50,37.5,15.625,56.25,37.5,15.625,50,37.5,3.125,56.25,37.5,3.125,50,-37.5,15.625,56.25,-37.5,15.625,50,-37.5,3.125,56.25,-37.5,3.125,50,-43.75,15.625,56.25,-43.75,15.625,50,-43.75,3.125,56.25,-43.75,3.125,50,43.75,21.875,56.25,43.75,21.875,-43.75,43.75,15.625,56.25,43.75,15.625,-43.75,-43.75,21.875,56.25,-43.75,21.875,-43.75,-43.75,15.625,56.25,-43.75,15.625,-43.75,43.75,53.125,56.25,43.75,53.125,53.125,43.75,21.875,56.25,43.75,21.875,53.125,-43.75,53.125,56.25,-43.75,53.125,53.125,-43.75,21.875,56.25,-43.75,21.875,53.125,15.000000000000002,31.25,46.56249999999999,15.000000000000002,31.25,31.562500000000004,-15.000000000000002,31.25,46.56249999999999,-15.000000000000002,31.25,31.562500000000004,15.000000000000002,21.875,46.56249999999999,15.000000000000002,21.875,31.562500000000004,-15.000000000000002,21.875,46.56249999999999,-15.000000000000002,21.875,31.562500000000004,-25,26.5625,46.56249999999999,-25,26.5625,46.56249999999999,-25,26.5625,31.562500000000004,-25,26.5625,31.562500000000004,25,26.5625,46.56249999999999,25,26.5625,46.56249999999999,25,26.5625,31.562500000000004,25,26.5625,31.562500000000004,15.000000000000002,26.5625,26.5625,15.000000000000002,26.5625,26.5625,-15.000000000000002,26.5625,26.5625,-15.000000000000002,26.5625,26.5625,15.000000000000002,26.5625,51.5625,15.000000000000002,26.5625,51.5625,-15.000000000000002,26.5625,51.5625,-15.000000000000002,26.5625,51.5625 + } + PolygonVertexIndex: *264 { + a: 1,0,2,-4,6,4,5,-8,4,0,1,-6,3,2,6,-8,2,0,4,-7,5,1,3,-8,9,8,10,-12,14,12,13,-16,12,8,9,-14,11,10,14,-16,10,8,12,-15,13,9,11,-16,17,16,18,-20,22,20,21,-24,20,16,17,-22,19,18,22,-24,18,16,20,-23,21,17,19,-24,25,24,26,-28,30,28,29,-32,28,24,25,-30,27,26,30,-32,26,24,28,-31,29,25,27,-32,33,32,34,-36,38,36,37,-40,36,32,33,-38,35,34,38,-40,34,32,36,-39,37,33,35,-40,41,40,42,-44,46,44,45,-48,44,40,41,-46,43,42,46,-48,42,40,44,-47,45,41,43,-48,49,48,50,-52,54,52,53,-56,52,48,49,-54,51,50,54,-56,50,48,52,-55,53,49,51,-56,69,68,71,-71,64,65,67,-67,56,57,59,-59,63,61,60,-63,76,77,79,-79,73,72,75,-75,57,56,69,-72,65,58,59,-68,77,56,58,-80,59,57,73,-76,68,60,61,-71,63,62,64,-67,62,60,76,-79,72,61,63,-75,72,73,70,-72,77,76,68,-70,75,74,66,-68,78,79,64,-66,60,68,-77,62,78,-65,61,72,-71,63,66,-75,56,77,-70,58,65,-80,57,71,-74,59,75,-68 + } + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 101 + Name: "" + MappingInformationType: "ByPolygon" + ReferenceInformationType: "Direct" + Normals: *204 { + a: 1,0,0,-1,0,0,0,0.9954090291002811,-0.0957124066442578,0,-1,0,0,0,1,0,0,-1,1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1,1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1,1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1,1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1,1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1,1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,0,0,0.42443387623071965,0.9054589359588684,0,-0.42443387623071965,0.9054589359588684,0,0,0.7295372041400855,0.6839411288813295,0,0.7295372041400855,-0.6839411288813295,0.42443387623071965,-0.9054589359588684,0,-0.42443387623071965,-0.9054589359588684,0,0,-0.7295372041400855,0.6839411288813295,0,-0.7295372041400855,-0.6839411288813295,0,0,0,0,0,0,0,0,0,0,0,0,0.3235735780316221,-0.6902902998007938,0.6471471560632436,-0.3235735780316221,-0.6902902998007938,0.6471471560632436,0.3235735780316221,-0.6902902998007938,-0.6471471560632436,-0.3235735780316221,-0.6902902998007938,-0.6471471560632436,0.3235735780316221,0.6902902998007938,0.6471471560632436,-0.3235735780316221,0.6902902998007938,0.6471471560632436,0.3235735780316221,0.6902902998007938,-0.6471471560632436,-0.3235735780316221,0.6902902998007938,-0.6471471560632436 + } + } + LayerElementUV: 0 { + Version: 101 + Name: "" + MappingInformationType: "ByPolygonVertex" + ReferenceInformationType: "Direct" + UV: *528 { + a: 0.640625,0.52734375,0.4375,0.546875,0.4375,0.5,0.640625,0.5,0.671875,0.953125,0.671875,1,0.46875,0.98046875,0.46875,0.953125,0.421875,0.734375,0.21875,0.734375,0.21875,0.53125,0.421875,0.53125,0.203125,0.53125,0.203125,0.734375,0,0.734375,0,0.53125,0.671875,0.890625,0.671875,0.9375,0.46875,0.9375,0.46875,0.890625,0.671875,0.453125,0.46875,0.453125,0.46875,0.4375,0.671875,0.4375,0.078125,0.375,0.0625,0.375,0.0625,0.34375,0.078125,0.34375,0.109375,0.34375,0.109375,0.375,0.09375,0.375,0.09375,0.34375,0.265625,0.5,0.28125,0.5,0.28125,0.515625,0.265625,0.515625,0.3125,0.5,0.3125,0.515625,0.296875,0.515625,0.296875,0.5,0.140625,0.34375,0.140625,0.375,0.125,0.375,0.125,0.34375,0.640625,0.875,0.625,0.875,0.625,0.84375,0.640625,0.84375,0.171875,0.375,0.15625,0.375,0.15625,0.34375,0.171875,0.34375,0.640625,0.796875,0.640625,0.828125,0.625,0.828125,0.625,0.796875,0.328125,0.5,0.34375,0.5,0.34375,0.515625,0.328125,0.515625,0.375,0.5,0.375,0.515625,0.359375,0.515625,0.359375,0.5,0.203125,0.34375,0.203125,0.375,0.1875,0.375,0.1875,0.34375,0.234375,0.375,0.21875,0.375,0.21875,0.34375,0.234375,0.34375,0.640625,0.78125,0.625,0.78125,0.625,0.75,0.640625,0.75,0.265625,0.34375,0.265625,0.375,0.25,0.375,0.25,0.34375,0.390625,0.5,0.40625,0.5,0.40625,0.515625,0.390625,0.515625,0.484375,0.359375,0.484375,0.375,0.46875,0.375,0.46875,0.359375,0.296875,0.34375,0.296875,0.375,0.28125,0.375,0.28125,0.34375,0.328125,0.375,0.3125,0.375,0.3125,0.34375,0.328125,0.34375,0.359375,0.375,0.34375,0.375,0.34375,0.34375,0.359375,0.34375,0.390625,0.34375,0.390625,0.375,0.375,0.375,0.375,0.34375,0.5,0.359375,0.515625,0.359375,0.515625,0.375,0.5,0.375,0.546875,0.359375,0.546875,0.375,0.53125,0.375,0.53125,0.359375,0.421875,0.34375,0.421875,0.375,0.40625,0.375,0.40625,0.34375,0.453125,0.375,0.4375,0.375,0.4375,0.34375,0.453125,0.34375,0.25,0.515625,0,0.515625,0,0.5,0.25,0.5,0.25,0.46875,0.25,0.484375,0,0.484375,0,0.46875,0,0.75,0.21875,0.75,0.21875,1,0,1,0.453125,0.75,0.453125,1,0.234375,1,0.234375,0.75,0.484375,0.46875,0.484375,0.484375,0.265625,0.484375,0.265625,0.46875,0.71875,0.484375,0.5,0.484375,0.5,0.46875,0.71875,0.46875,0.015625,0.375,0,0.375,0,0.296875,0.015625,0.296875,0.046875,0.296875,0.046875,0.375,0.03125,0.375,0.03125,0.296875,0,0.4375,0.21875,0.4375,0.21875,0.453125,0,0.453125,0.453125,0.4375,0.453125,0.453125,0.234375,0.453125,0.234375,0.4375,0.65625,0.65625,0.65625,0.734375,0.4375,0.734375,0.4375,0.65625,0.65625,0.640625,0.4375,0.640625,0.4375,0.5625,0.65625,0.5625,0,0.96875,0,0.96875,0,1,0,1,0,0.96875,0,0.96875,0,1,0,1,0.5765625,0.8375,0.5765625,0.875,0.5015625,0.875,0.5015625,0.8375,0.5015625,0.765625,0.5765625,0.765625,0.5765625,0.803125,0.5015625,0.803125,0.078125,1,0.078125,1,0,1,0,1,0.078125,1,0.078125,1,0,1,0,1,0.5765625,0.875,0.5765625,0.8375,0.6041734375,0.8374999999999999,0.6041734375,0.875,0.47395156250000003,0.8375,0.5015625,0.8375,0.5015625,0.875,0.47395156250000003,0.875,0.1078125,0.40474062499999997,0.1078125,0.421875,0.0328125,0.421875,0.0328125,0.40474062499999997,0.4203125,0.421875,0.3453125,0.421875,0.3453125,0.40474062499999997,0.4203125,0.40474062499999997,0.6041734375,0.803125,0.5765625,0.803125,0.5765625,0.765625,0.6041734375,0.765625,0.5015625,0.765625,0.5015625,0.803125,0.47395156250000003,0.803125,0.47395156250000003,0.765625,0.1890625,0.390625,0.2640625,0.390625,0.2640625,0.40775937500000003,0.1890625,0.40775937500000003,0.5015625,0.40775937500000003,0.5015625,0.390625,0.5765625,0.390625,0.5765625,0.40775937500000003,0,1,0,1,0,0.96875,0,0.96875,0,1,0,1,0.03125,1,0.03125,1,0.03125,1,0.03125,1,0,1,0,1,0,0.96875,0,0.96875,0,1,0,1,0.2640625,0.390625,0.29048438787957764,0.39863961954952054,0.2640625,0.407759580463386,0.18906250000000002,0.390625,0.1890625,0.407759580463386,0.16264061212042233,0.39863961954952054,0.5015625,0.390625,0.5015625,0.407759580463386,0.47514208911119205,0.3986401293578338,0.5765625,0.390625,0.602982910888808,0.3986401293578338,0.5765625,0.407759580463386,0.10781249999999999,0.421875,0.1078125,0.404740419536614,0.13423438787957767,0.41386038045047946,0.03281250000000001,0.421875,0.006390612120422329,0.41386038045047946,0.0328125,0.404740419536614,0.3453125,0.421875,0.31889208911119205,0.4138598706421662,0.3453125,0.404740419536614,0.4203125,0.421875,0.4203125,0.404740419536614,0.44673291088880795,0.4138598706421662 + } + } + LayerElementMaterial: 0 { + Version: 101 + Name: "" + MappingInformationType: "AllSame" + ReferenceInformationType: "IndexToDirect" + Materials: *1 { + a: 0 + } + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementUV" + TypedIndex: 0 + } + } + } + Material: 77933162, "Material::Bed_textures", "" { + Version: 102 + ShadingModel: "lambert" + MultiLayer: 0 + Properties70: { + P: "Emissive", "Vector3D", "Vector", "",0,0,0 + P: "Ambient", "Vector3D", "Vector", "",0.2,0.2,0.2 + P: "Diffuse", "Vector3D", "Vector", "",0.8,0.8,0.8 + P: "Opacity", "double", "Number", "",1 + } + } + Texture: 77056915, "Texture::Bed_textures", "" { + Type: "TextureVideoClip" + Version: 202 + TextureName: "Texture::Bed_textures" + Media: "Video::Bed_textures" + FileName: "" + RelativeFilename: "" + ModelUVTranslation: 0,0 + ModelUVScaling: 1,1 + Texture_Alpha_Source: "None" + Cropping: 0,0,0,0 + } + Video: 74972089, "Video::Bed_textures", "Clip" { + Type: "Clip" + Properties70: { + P: "Path", "KString", "XRefUrl", "", "Bed_textures" + } + UseMipMap: 0 + Filename: "" + RelativeFilename: "" + Content: "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACxElEQVR4AeyZPY4UMRCFZ1oiIweJgAtwFJIVARkSdyBAe4AVAXdAIiNAm3AULkCABDkZQbOfpbeydtfTrmr/MJZH81Q9dj3bVX62u3uWzx9erx4cbj4eHpwb6u3378XFmotbUsGLpWBbpqYUtIlUwblbAirE4mqyWwIeXV8frXBFuEHqlgAtAYvdiMVV3S0BrtFWIM0EVEhqVpPW9Y9/VsNGp24KWDM+xHL3voGykuiWgJJB7Gnrv0/Am/dfjnsC3OJ2S8Ax48Pgh10C8Rbw6u27VYjLSUBtdFNAHNizJ08PQlzO9bBLgOCEn79/HQSVyQ67BOIt4Ounj0chLlcSStq7bS1IzAMa8vDgwM2F1T+3Xfkt2nwsFrLlIUa+8JC0B3BrIGyC2oBybI1B9GwzJKDnAHr3PRPQewZ6999cAezqHtRKVPMEeE4AOMMkoFYg3nabK8A70Fq8mYBamT2XdpsrwHMCwKmV0JAAPYrm2L0D0XNBjt3bVw5/0WOoxdIwr6mtgGeBkmThWH3df49zNgM6/Pb9x4rliRKb+k1da2z1534fwLoEdPDyxfPw5hYVnfpNnVU1+MOrhSIKQAkeEJSHBwduCRRRAErwgAA8PDhwS8CtADpnzXsAVxucxcIrDbcCGAhr3gO4rG0r4JXGEv8RkbpWp6l6yuXDCbAF+Z5Sj3xq24XX0Kc6UX0c5EP+qteJ8JAPZaoneH6nsFWf4lnLw50gQaagBlP1cbl8CTIF+eQsHfnWtGETpAMdLVb75+oq3ARZefJnudB/qxmnrxhBAXFBq2sdZSiFPlEEtjXuJUADy7WPLy/DXWCuv/xaB5rq714CUo6jls8ESJKyo850Kq6pgFRmzrXcOu6pAGvGRvOfChhtRq3xTAVYMzaa/1TAaDNqjWcqwJqx0fynAkabUWs8UwHWjI3mPxVw7jO6d/z/AAAA//+eL7gsAAAABklEQVQDAFQy4r0Mepw6AAAAAElFTkSuQmCC" + } +} + +; Object connections +;------------------------------------------------------------------ + +Connections: { + + ;Model::mesh, Model::RootNode + C: "OO",70061392,0 + + ;Geometry::mesh, Model::mesh + C: "OO",79347176,70061392 + + ;Material::Bed_textures, Model::mesh + C: "OO",77933162,70061392 + + ;Texture::Bed_textures, Material::Bed_textures + C: "OP",77056915,77933162, "DiffuseColor" + + ;Video::Bed_textures, Texture::Bed_textures + C: "OO",74972089,77056915 +} + +; Takes section +;------------------------------------------------------------------ + +Takes: { + Current: "" +} diff --git a/assets/models/Bed.mtl b/assets/models/Bed.mtl new file mode 100644 index 0000000..5d58d5d --- /dev/null +++ b/assets/models/Bed.mtl @@ -0,0 +1,3 @@ +newmtl BedMaterial +Kd 1.0 1.0 1.0 +map_Kd Bed_textures.png diff --git a/assets/models/Bed.obj b/assets/models/Bed.obj new file mode 100644 index 0000000..7f48770 --- /dev/null +++ b/assets/models/Bed.obj @@ -0,0 +1,544 @@ +mtllib Bed.mtl +o Bed +v 40.625000 29.687500 40.625000 +v 40.625000 21.875000 -40.625000 +v 40.625000 14.062500 40.625000 +v 40.625000 14.062500 -40.625000 +v -40.625000 29.687500 40.625000 +v -40.625000 21.875000 -40.625000 +v -40.625000 14.062500 40.625000 +v -40.625000 14.062500 -40.625000 +v -37.500000 12.500000 -37.500000 +v -37.500000 12.500000 -43.750000 +v -37.500000 0.000000 -37.500000 +v -37.500000 0.000000 -43.750000 +v -43.750000 12.500000 -37.500000 +v -43.750000 12.500000 -43.750000 +v -43.750000 0.000000 -37.500000 +v -43.750000 0.000000 -43.750000 +v 43.750000 12.500000 -37.500000 +v 43.750000 12.500000 -43.750000 +v 43.750000 0.000000 -37.500000 +v 43.750000 0.000000 -43.750000 +v 37.500000 12.500000 -37.500000 +v 37.500000 12.500000 -43.750000 +v 37.500000 0.000000 -37.500000 +v 37.500000 0.000000 -43.750000 +v 43.750000 12.500000 56.250000 +v 43.750000 12.500000 50.000000 +v 43.750000 0.000000 56.250000 +v 43.750000 0.000000 50.000000 +v 37.500000 12.500000 56.250000 +v 37.500000 12.500000 50.000000 +v 37.500000 0.000000 56.250000 +v 37.500000 0.000000 50.000000 +v -37.500000 12.500000 56.250000 +v -37.500000 12.500000 50.000000 +v -37.500000 0.000000 56.250000 +v -37.500000 0.000000 50.000000 +v -43.750000 12.500000 56.250000 +v -43.750000 12.500000 50.000000 +v -43.750000 0.000000 56.250000 +v -43.750000 0.000000 50.000000 +v 43.750000 18.750000 56.250000 +v 43.750000 18.750000 -43.750000 +v 43.750000 12.500000 56.250000 +v 43.750000 12.500000 -43.750000 +v -43.750000 18.750000 56.250000 +v -43.750000 18.750000 -43.750000 +v -43.750000 12.500000 56.250000 +v -43.750000 12.500000 -43.750000 +v 43.750000 50.000000 56.250000 +v 43.750000 50.000000 53.125000 +v 43.750000 18.750000 56.250000 +v 43.750000 18.750000 53.125000 +v -43.750000 50.000000 56.250000 +v -43.750000 50.000000 53.125000 +v -43.750000 18.750000 56.250000 +v -43.750000 18.750000 53.125000 +v 15.000000 28.125000 46.562500 +v 15.000000 28.125000 31.562500 +v -15.000000 28.125000 46.562500 +v -15.000000 28.125000 31.562500 +v 15.000000 18.750000 46.562500 +v 15.000000 18.750000 31.562500 +v -15.000000 18.750000 46.562500 +v -15.000000 18.750000 31.562500 +v -25.000000 23.437500 46.562500 +v -25.000000 23.437500 46.562500 +v -25.000000 23.437500 31.562500 +v -25.000000 23.437500 31.562500 +v 25.000000 23.437500 46.562500 +v 25.000000 23.437500 46.562500 +v 25.000000 23.437500 31.562500 +v 25.000000 23.437500 31.562500 +v 15.000000 23.437500 26.562500 +v 15.000000 23.437500 26.562500 +v -15.000000 23.437500 26.562500 +v -15.000000 23.437500 26.562500 +v 15.000000 23.437500 51.562500 +v 15.000000 23.437500 51.562500 +v -15.000000 23.437500 51.562500 +v -15.000000 23.437500 51.562500 +vt 0.640625 0.527344 +vt 0.437500 0.546875 +vt 0.437500 0.500000 +vt 0.640625 0.500000 +vt 0.671875 0.953125 +vt 0.671875 1.000000 +vt 0.468750 0.980469 +vt 0.468750 0.953125 +vt 0.421875 0.734375 +vt 0.218750 0.734375 +vt 0.218750 0.531250 +vt 0.421875 0.531250 +vt 0.203125 0.531250 +vt 0.203125 0.734375 +vt 0.000000 0.734375 +vt 0.000000 0.531250 +vt 0.671875 0.890625 +vt 0.671875 0.937500 +vt 0.468750 0.937500 +vt 0.468750 0.890625 +vt 0.671875 0.453125 +vt 0.468750 0.453125 +vt 0.468750 0.437500 +vt 0.671875 0.437500 +vt 0.078125 0.375000 +vt 0.062500 0.375000 +vt 0.062500 0.343750 +vt 0.078125 0.343750 +vt 0.109375 0.343750 +vt 0.109375 0.375000 +vt 0.093750 0.375000 +vt 0.093750 0.343750 +vt 0.265625 0.500000 +vt 0.281250 0.500000 +vt 0.281250 0.515625 +vt 0.265625 0.515625 +vt 0.312500 0.500000 +vt 0.312500 0.515625 +vt 0.296875 0.515625 +vt 0.296875 0.500000 +vt 0.140625 0.343750 +vt 0.140625 0.375000 +vt 0.125000 0.375000 +vt 0.125000 0.343750 +vt 0.640625 0.875000 +vt 0.625000 0.875000 +vt 0.625000 0.843750 +vt 0.640625 0.843750 +vt 0.171875 0.375000 +vt 0.156250 0.375000 +vt 0.156250 0.343750 +vt 0.171875 0.343750 +vt 0.640625 0.796875 +vt 0.640625 0.828125 +vt 0.625000 0.828125 +vt 0.625000 0.796875 +vt 0.328125 0.500000 +vt 0.343750 0.500000 +vt 0.343750 0.515625 +vt 0.328125 0.515625 +vt 0.375000 0.500000 +vt 0.375000 0.515625 +vt 0.359375 0.515625 +vt 0.359375 0.500000 +vt 0.203125 0.343750 +vt 0.203125 0.375000 +vt 0.187500 0.375000 +vt 0.187500 0.343750 +vt 0.234375 0.375000 +vt 0.218750 0.375000 +vt 0.218750 0.343750 +vt 0.234375 0.343750 +vt 0.640625 0.781250 +vt 0.625000 0.781250 +vt 0.625000 0.750000 +vt 0.640625 0.750000 +vt 0.265625 0.343750 +vt 0.265625 0.375000 +vt 0.250000 0.375000 +vt 0.250000 0.343750 +vt 0.390625 0.500000 +vt 0.406250 0.500000 +vt 0.406250 0.515625 +vt 0.390625 0.515625 +vt 0.484375 0.359375 +vt 0.484375 0.375000 +vt 0.468750 0.375000 +vt 0.468750 0.359375 +vt 0.296875 0.343750 +vt 0.296875 0.375000 +vt 0.281250 0.375000 +vt 0.281250 0.343750 +vt 0.328125 0.375000 +vt 0.312500 0.375000 +vt 0.312500 0.343750 +vt 0.328125 0.343750 +vt 0.359375 0.375000 +vt 0.343750 0.375000 +vt 0.343750 0.343750 +vt 0.359375 0.343750 +vt 0.390625 0.343750 +vt 0.390625 0.375000 +vt 0.375000 0.375000 +vt 0.375000 0.343750 +vt 0.500000 0.359375 +vt 0.515625 0.359375 +vt 0.515625 0.375000 +vt 0.500000 0.375000 +vt 0.546875 0.359375 +vt 0.546875 0.375000 +vt 0.531250 0.375000 +vt 0.531250 0.359375 +vt 0.421875 0.343750 +vt 0.421875 0.375000 +vt 0.406250 0.375000 +vt 0.406250 0.343750 +vt 0.453125 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.343750 +vt 0.453125 0.343750 +vt 0.250000 0.515625 +vt 0.000000 0.515625 +vt 0.000000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.468750 +vt 0.250000 0.484375 +vt 0.000000 0.484375 +vt 0.000000 0.468750 +vt 0.000000 0.750000 +vt 0.218750 0.750000 +vt 0.218750 1.000000 +vt 0.000000 1.000000 +vt 0.453125 0.750000 +vt 0.453125 1.000000 +vt 0.234375 1.000000 +vt 0.234375 0.750000 +vt 0.484375 0.468750 +vt 0.484375 0.484375 +vt 0.265625 0.484375 +vt 0.265625 0.468750 +vt 0.718750 0.484375 +vt 0.500000 0.484375 +vt 0.500000 0.468750 +vt 0.718750 0.468750 +vt 0.015625 0.375000 +vt 0.000000 0.375000 +vt 0.000000 0.296875 +vt 0.015625 0.296875 +vt 0.046875 0.296875 +vt 0.046875 0.375000 +vt 0.031250 0.375000 +vt 0.031250 0.296875 +vt 0.000000 0.437500 +vt 0.218750 0.437500 +vt 0.218750 0.453125 +vt 0.000000 0.453125 +vt 0.453125 0.437500 +vt 0.453125 0.453125 +vt 0.234375 0.453125 +vt 0.234375 0.437500 +vt 0.656250 0.656250 +vt 0.656250 0.734375 +vt 0.437500 0.734375 +vt 0.437500 0.656250 +vt 0.656250 0.640625 +vt 0.437500 0.640625 +vt 0.437500 0.562500 +vt 0.656250 0.562500 +vt 0.000000 0.968750 +vt 0.000000 0.968750 +vt 0.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.968750 +vt 0.000000 0.968750 +vt 0.000000 1.000000 +vt 0.000000 1.000000 +vt 0.576562 0.837500 +vt 0.576562 0.875000 +vt 0.501563 0.875000 +vt 0.501563 0.837500 +vt 0.501563 0.765625 +vt 0.576562 0.765625 +vt 0.576562 0.803125 +vt 0.501563 0.803125 +vt 0.078125 1.000000 +vt 0.078125 1.000000 +vt 0.000000 1.000000 +vt 0.000000 1.000000 +vt 0.078125 1.000000 +vt 0.078125 1.000000 +vt 0.000000 1.000000 +vt 0.000000 1.000000 +vt 0.576562 0.875000 +vt 0.576562 0.837500 +vt 0.604173 0.837500 +vt 0.604173 0.875000 +vt 0.473952 0.837500 +vt 0.501563 0.837500 +vt 0.501563 0.875000 +vt 0.473952 0.875000 +vt 0.107813 0.404741 +vt 0.107813 0.421875 +vt 0.032813 0.421875 +vt 0.032813 0.404741 +vt 0.420312 0.421875 +vt 0.345313 0.421875 +vt 0.345313 0.404741 +vt 0.420312 0.404741 +vt 0.604173 0.803125 +vt 0.576562 0.803125 +vt 0.576562 0.765625 +vt 0.604173 0.765625 +vt 0.501563 0.765625 +vt 0.501563 0.803125 +vt 0.473952 0.803125 +vt 0.473952 0.765625 +vt 0.189062 0.390625 +vt 0.264062 0.390625 +vt 0.264062 0.407759 +vt 0.189062 0.407759 +vt 0.501563 0.407759 +vt 0.501563 0.390625 +vt 0.576562 0.390625 +vt 0.576562 0.407759 +vt 0.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.968750 +vt 0.000000 0.968750 +vt 0.000000 1.000000 +vt 0.000000 1.000000 +vt 0.031250 1.000000 +vt 0.031250 1.000000 +vt 0.031250 1.000000 +vt 0.031250 1.000000 +vt 0.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.968750 +vt 0.000000 0.968750 +vt 0.000000 1.000000 +vt 0.000000 1.000000 +vt 0.264062 0.390625 +vt 0.290484 0.398640 +vt 0.264062 0.407760 +vt 0.189063 0.390625 +vt 0.189062 0.407760 +vt 0.162641 0.398640 +vt 0.501563 0.390625 +vt 0.501563 0.407760 +vt 0.475142 0.398640 +vt 0.576562 0.390625 +vt 0.602983 0.398640 +vt 0.576562 0.407760 +vt 0.107812 0.421875 +vt 0.107813 0.404740 +vt 0.134234 0.413860 +vt 0.032813 0.421875 +vt 0.006391 0.413860 +vt 0.032813 0.404740 +vt 0.345313 0.421875 +vt 0.318892 0.413860 +vt 0.345313 0.404740 +vt 0.420312 0.421875 +vt 0.420312 0.404740 +vt 0.446733 0.413860 +vn 1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.995409 -0.095712 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 -0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.424434 0.905459 -0.000000 +vn -0.424434 0.905459 0.000000 +vn 0.000000 0.729537 0.683941 +vn 0.000000 0.729537 -0.683941 +vn 0.424434 -0.905459 0.000000 +vn -0.424434 -0.905459 0.000000 +vn 0.000000 -0.729537 0.683941 +vn 0.000000 -0.729537 -0.683941 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.323574 -0.690290 0.647147 +vn -0.323574 -0.690290 0.647147 +vn 0.323574 -0.690290 -0.647147 +vn -0.323574 -0.690290 -0.647147 +vn 0.323574 0.690290 0.647147 +vn -0.323574 0.690290 0.647147 +vn 0.323574 0.690290 -0.647147 +vn -0.323574 0.690290 -0.647147 +usemtl BedMaterial +s 1 +f 2/1/1 1/2/1 3/3/1 +f 2/1/1 3/3/1 4/4/1 +f 7/5/2 5/6/2 6/7/2 +f 7/5/2 6/7/2 8/8/2 +f 5/9/3 1/10/3 2/11/3 +f 5/9/3 2/11/3 6/12/3 +f 4/13/4 3/14/4 7/15/4 +f 4/13/4 7/15/4 8/16/4 +f 3/17/5 1/18/5 5/19/5 +f 3/17/5 5/19/5 7/20/5 +f 6/21/6 2/22/6 4/23/6 +f 6/21/6 4/23/6 8/24/6 +f 10/25/7 9/26/7 11/27/7 +f 10/25/7 11/27/7 12/28/7 +f 15/29/8 13/30/8 14/31/8 +f 15/29/8 14/31/8 16/32/8 +f 13/33/9 9/34/9 10/35/9 +f 13/33/9 10/35/9 14/36/9 +f 12/37/10 11/38/10 15/39/10 +f 12/37/10 15/39/10 16/40/10 +f 11/41/11 9/42/11 13/43/11 +f 11/41/11 13/43/11 15/44/11 +f 14/45/12 10/46/12 12/47/12 +f 14/45/12 12/47/12 16/48/12 +f 18/49/13 17/50/13 19/51/13 +f 18/49/13 19/51/13 20/52/13 +f 23/53/14 21/54/14 22/55/14 +f 23/53/14 22/55/14 24/56/14 +f 21/57/15 17/58/15 18/59/15 +f 21/57/15 18/59/15 22/60/15 +f 20/61/16 19/62/16 23/63/16 +f 20/61/16 23/63/16 24/64/16 +f 19/65/17 17/66/17 21/67/17 +f 19/65/17 21/67/17 23/68/17 +f 22/69/18 18/70/18 20/71/18 +f 22/69/18 20/71/18 24/72/18 +f 26/73/19 25/74/19 27/75/19 +f 26/73/19 27/75/19 28/76/19 +f 31/77/20 29/78/20 30/79/20 +f 31/77/20 30/79/20 32/80/20 +f 29/81/21 25/82/21 26/83/21 +f 29/81/21 26/83/21 30/84/21 +f 28/85/22 27/86/22 31/87/22 +f 28/85/22 31/87/22 32/88/22 +f 27/89/23 25/90/23 29/91/23 +f 27/89/23 29/91/23 31/92/23 +f 30/93/24 26/94/24 28/95/24 +f 30/93/24 28/95/24 32/96/24 +f 34/97/25 33/98/25 35/99/25 +f 34/97/25 35/99/25 36/100/25 +f 39/101/26 37/102/26 38/103/26 +f 39/101/26 38/103/26 40/104/26 +f 37/105/27 33/106/27 34/107/27 +f 37/105/27 34/107/27 38/108/27 +f 36/109/28 35/110/28 39/111/28 +f 36/109/28 39/111/28 40/112/28 +f 35/113/29 33/114/29 37/115/29 +f 35/113/29 37/115/29 39/116/29 +f 38/117/30 34/118/30 36/119/30 +f 38/117/30 36/119/30 40/120/30 +f 42/121/31 41/122/31 43/123/31 +f 42/121/31 43/123/31 44/124/31 +f 47/125/32 45/126/32 46/127/32 +f 47/125/32 46/127/32 48/128/32 +f 45/129/33 41/130/33 42/131/33 +f 45/129/33 42/131/33 46/132/33 +f 44/133/34 43/134/34 47/135/34 +f 44/133/34 47/135/34 48/136/34 +f 43/137/35 41/138/35 45/139/35 +f 43/137/35 45/139/35 47/140/35 +f 46/141/36 42/142/36 44/143/36 +f 46/141/36 44/143/36 48/144/36 +f 50/145/37 49/146/37 51/147/37 +f 50/145/37 51/147/37 52/148/37 +f 55/149/38 53/150/38 54/151/38 +f 55/149/38 54/151/38 56/152/38 +f 53/153/39 49/154/39 50/155/39 +f 53/153/39 50/155/39 54/156/39 +f 52/157/40 51/158/40 55/159/40 +f 52/157/40 55/159/40 56/160/40 +f 51/161/41 49/162/41 53/163/41 +f 51/161/41 53/163/41 55/164/41 +f 54/165/42 50/166/42 52/167/42 +f 54/165/42 52/167/42 56/168/42 +f 70/169/43 69/170/43 72/171/43 +f 70/169/43 72/171/43 71/172/43 +f 65/173/44 66/174/44 68/175/44 +f 65/173/44 68/175/44 67/176/44 +f 57/177/45 58/178/45 60/179/45 +f 57/177/45 60/179/45 59/180/45 +f 64/181/46 62/182/46 61/183/46 +f 64/181/46 61/183/46 63/184/46 +f 77/185/47 78/186/47 80/187/47 +f 77/185/47 80/187/47 79/188/47 +f 74/189/48 73/190/48 76/191/48 +f 74/189/48 76/191/48 75/192/48 +f 58/193/49 57/194/49 70/195/49 +f 58/193/49 70/195/49 72/196/49 +f 66/197/50 59/198/50 60/199/50 +f 66/197/50 60/199/50 68/200/50 +f 78/201/51 57/202/51 59/203/51 +f 78/201/51 59/203/51 80/204/51 +f 60/205/52 58/206/52 74/207/52 +f 60/205/52 74/207/52 76/208/52 +f 69/209/53 61/210/53 62/211/53 +f 69/209/53 62/211/53 71/212/53 +f 64/213/54 63/214/54 65/215/54 +f 64/213/54 65/215/54 67/216/54 +f 63/217/55 61/218/55 77/219/55 +f 63/217/55 77/219/55 79/220/55 +f 73/221/56 62/222/56 64/223/56 +f 73/221/56 64/223/56 75/224/56 +f 73/225/57 74/226/57 71/227/57 +f 73/225/57 71/227/57 72/228/57 +f 78/229/58 77/230/58 69/231/58 +f 78/229/58 69/231/58 70/232/58 +f 76/233/59 75/234/59 67/235/59 +f 76/233/59 67/235/59 68/236/59 +f 79/237/60 80/238/60 65/239/60 +f 79/237/60 65/239/60 66/240/60 +f 61/241/61 69/242/61 77/243/61 +f 63/244/62 79/245/62 65/246/62 +f 62/247/63 73/248/63 71/249/63 +f 64/250/64 67/251/64 75/252/64 +f 57/253/65 78/254/65 70/255/65 +f 59/256/66 66/257/66 80/258/66 +f 58/259/67 72/260/67 74/261/67 +f 60/262/68 76/263/68 68/264/68 diff --git a/assets/models/Bed_textures.png b/assets/models/Bed_textures.png new file mode 100644 index 0000000..697594b Binary files /dev/null and b/assets/models/Bed_textures.png differ diff --git a/scripts/convert_blockbench_fbx.py b/scripts/convert_blockbench_fbx.py new file mode 100644 index 0000000..f19def4 --- /dev/null +++ b/scripts/convert_blockbench_fbx.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 +""" +Convert Blockbench ASCII FBX to standard OBJ with normals, UVs, and triangulation for Raylib. +Usage: python scripts/convert_blockbench_fbx.py [output.obj] +""" +import sys +import os +import re + +def convert_fbx_to_obj(fbx_path, obj_path=None): + if obj_path is None: + obj_path = os.path.splitext(fbx_path)[0] + ".obj" + + mtl_path = os.path.splitext(obj_path)[0] + ".mtl" + obj_name = os.path.splitext(os.path.basename(obj_path))[0] + tex_name = obj_name + "_textures.png" + + with open(fbx_path, "r", encoding="utf-8", errors="ignore") as f: + text = f.read() + + # Vertices + v_match = re.search(r"Vertices:\s*\*\d+\s*\{\s*a:\s*([^}]+)\}", text) + if not v_match: + print(f"Error: No vertices found in {fbx_path}") + return False + raw_v = [float(x.strip()) for x in v_match.group(1).split(",")] + min_y = min(raw_v[1::3]) + # Ground the model so bottom Y is 0.0 + vertices = [(raw_v[i], raw_v[i+1] - min_y, raw_v[i+2]) for i in range(0, len(raw_v), 3)] + + # Indices + p_match = re.search(r"PolygonVertexIndex:\s*\*\d+\s*\{\s*a:\s*([^}]+)\}", text) + if not p_match: + print(f"Error: No indices found in {fbx_path}") + return False + raw_p = [int(x.strip()) for x in p_match.group(1).split(",")] + + # UVs + uv_match = re.search(r"UV:\s*\*\d+\s*\{\s*a:\s*([^}]+)\}", text) + raw_uv = [float(x.strip()) for x in uv_match.group(1).split(",")] if uv_match else [] + uvs = [(raw_uv[i], raw_uv[i+1]) for i in range(0, len(raw_uv), 2)] + + # Polygons + polygons_v = [] + polygons_uv = [] + cur_v = [] + cur_uv = [] + + for i, idx in enumerate(raw_p): + uv_idx = i + if idx < 0: + cur_v.append(~idx) + cur_uv.append(uv_idx) + polygons_v.append(cur_v) + polygons_uv.append(cur_uv) + cur_v = [] + cur_uv = [] + else: + cur_v.append(idx) + cur_uv.append(uv_idx) + + # Compute face normals + def calc_normal(p0, p1, p2): + ax, ay, az = p1[0]-p0[0], p1[1]-p0[1], p1[2]-p0[2] + bx, by, bz = p2[0]-p0[0], p2[1]-p0[1], p2[2]-p0[2] + nx = ay*bz - az*by + ny = az*bx - ax*bz + nz = ax*by - ay*bx + l = (nx*nx + ny*ny + nz*nz)**0.5 + if l < 1e-6: + return (0.0, 1.0, 0.0) + return (nx/l, ny/l, nz/l) + + normals = [] + triangles = [] + + for pv, puv in zip(polygons_v, polygons_uv): + p0 = vertices[pv[0]] + p1 = vertices[pv[1]] + p2 = vertices[pv[2]] + norm = calc_normal(p0, p1, p2) + normals.append(norm) + norm_idx = len(normals) + + for k in range(1, len(pv) - 1): + tri = [ + (pv[0], puv[0], norm_idx), + (pv[k], puv[k], norm_idx), + (pv[k+1], puv[k+1], norm_idx) + ] + triangles.append(tri) + + with open(obj_path, "w", encoding="utf-8") as out: + out.write(f"mtllib {os.path.basename(mtl_path)}\n") + out.write(f"o {obj_name}\n") + for v in vertices: + out.write(f"v {v[0]:.6f} {v[1]:.6f} {v[2]:.6f}\n") + for uv in uvs: + out.write(f"vt {uv[0]:.6f} {uv[1]:.6f}\n") + for n in normals: + out.write(f"vn {n[0]:.6f} {n[1]:.6f} {n[2]:.6f}\n") + out.write(f"usemtl {obj_name}Material\ns 1\n") + for tri in triangles: + face_str = " ".join(f"{vi+1}/{uvi+1}/{ni}" for vi, uvi, ni in tri) + out.write(f"f {face_str}\n") + + with open(mtl_path, "w", encoding="utf-8") as out: + out.write(f"newmtl {obj_name}Material\n") + out.write("Kd 1.0 1.0 1.0\n") + out.write(f"map_Kd {tex_name}\n") + + print(f"Successfully converted {fbx_path} -> {obj_path} & {mtl_path}") + return True + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Usage: convert_blockbench_fbx.py [output.obj]") + sys.exit(1) + convert_fbx_to_obj(sys.argv[1], sys.argv[2] if len(sys.argv) > 2 else None) diff --git a/src/debug/DebugSystem.cpp b/src/debug/DebugSystem.cpp index 045e275..7dd99c6 100644 --- a/src/debug/DebugSystem.cpp +++ b/src/debug/DebugSystem.cpp @@ -133,6 +133,10 @@ void DebugSystem::applyWarp() { if (w == "HUB") { m_game->startNewRun(); + } else if (w == "HUB_BED") { + m_game->startNewRun(); + m_game->m_player.setGridPosition(2, 4); + m_game->m_player.setFacing(Direction::EAST); } else if (w == "EXPLORATION") { m_game->startNewRun(); if (m_config.targetFloor > 1) { diff --git a/src/render/CyberRenderer.cpp b/src/render/CyberRenderer.cpp index bed034f..23e915d 100644 --- a/src/render/CyberRenderer.cpp +++ b/src/render/CyberRenderer.cpp @@ -1228,12 +1228,55 @@ void CyberRenderer::generateTextures() { m_texAncientCeil = createAncientCeilTexture(); m_texAncientWood = createAncientWoodTexture(); + // Load custom imported 3D Bed model + std::vector bedModelPaths = { + "assets/models/Bed.obj", + "../assets/models/Bed.obj", + "models/Bed.obj" + }; + std::vector bedTexPaths = { + "assets/models/Bed_textures.png", + "../assets/models/Bed_textures.png", + "models/Bed_textures.png" + }; + + m_bedModelLoaded = false; + for (const auto& mp : bedModelPaths) { + if (FileExists(mp.c_str())) { + m_bedModel = LoadModel(mp.c_str()); + m_bedModelLoaded = true; + break; + } + } + + if (m_bedModelLoaded) { + for (const auto& tp : bedTexPaths) { + if (FileExists(tp.c_str())) { + m_texBedModel = LoadTexture(tp.c_str()); + SetTextureFilter(m_texBedModel, TEXTURE_FILTER_POINT); + if (m_bedModel.materialCount > 0) { + m_bedModel.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = m_texBedModel; + } + break; + } + } + } + m_texturesLoaded = true; } void CyberRenderer::unloadTextures() { if (!m_texturesLoaded) return; + if (m_bedModelLoaded) { + UnloadModel(m_bedModel); + if (m_texBedModel.id != 0) { + UnloadTexture(m_texBedModel); + m_texBedModel.id = 0; + } + m_bedModelLoaded = false; + } + UnloadTexture(m_texDungeonWall); UnloadTexture(m_texDungeonFloor); UnloadTexture(m_texDungeonCeil); @@ -2091,19 +2134,27 @@ void CyberRenderer::renderHub(const HubRoom& hub, const Player& player, float an Color{ 0, static_cast(180 + ledPulse * 75), 255, 255 }); // 8. BED (South-East corner: X in [8.5f, 11.2f], Z in [8.8f, 11.2f]) - Vector3 bedPos = { 9.8f, 0.30f, 10.0f }; - Vector3 bedSize = { 2.3f, 0.45f, 2.2f }; - DrawCube({ bedPos.x, 0.08f, bedPos.z }, bedSize.x + 0.1f, 0.16f, bedSize.z + 0.1f, Color{ 38, 26, 18, 255 }); - drawTexturedBox(m_texBedQuilt, bedPos, bedSize, 2.0f, 2.0f); + if (m_bedModelLoaded) { + // Draw user custom imported 3D Bed model + Vector3 customBedPos = { 9.8f, 0.0f, 10.1f }; + float customBedScale = 0.024f; + DrawModelEx(m_bedModel, customBedPos, Vector3{ 0.0f, 1.0f, 0.0f }, 0.0f, + Vector3{ customBedScale, customBedScale, customBedScale }, WHITE); + } else { + Vector3 bedPos = { 9.8f, 0.30f, 10.0f }; + Vector3 bedSize = { 2.3f, 0.45f, 2.2f }; + DrawCube({ bedPos.x, 0.08f, bedPos.z }, bedSize.x + 0.1f, 0.16f, bedSize.z + 0.1f, Color{ 38, 26, 18, 255 }); + drawTexturedBox(m_texBedQuilt, bedPos, bedSize, 2.0f, 2.0f); - // Bed Headboard against South wall - DrawCube({ bedPos.x, 0.75f, maxCoord - 0.08f }, bedSize.x + 0.1f, 1.1f, 0.10f, Color{ 38, 26, 18, 255 }); + // Bed Headboard against South wall + DrawCube({ bedPos.x, 0.75f, maxCoord - 0.08f }, bedSize.x + 0.1f, 1.1f, 0.10f, Color{ 38, 26, 18, 255 }); - // Two soft pillows at head of bed - Vector3 pillow1 = { 9.2f, 0.58f, 10.7f }; - Vector3 pillow2 = { 10.4f, 0.58f, 10.7f }; - DrawCube(pillow1, 0.9f, 0.12f, 0.50f, Color{ 160, 165, 180, 255 }); - DrawCube(pillow2, 0.9f, 0.12f, 0.50f, Color{ 160, 165, 180, 255 }); + // Two soft pillows at head of bed + Vector3 pillow1 = { 9.2f, 0.58f, 10.7f }; + Vector3 pillow2 = { 10.4f, 0.58f, 10.7f }; + DrawCube(pillow1, 0.9f, 0.12f, 0.50f, Color{ 160, 165, 180, 255 }); + DrawCube(pillow2, 0.9f, 0.12f, 0.50f, Color{ 160, 165, 180, 255 }); + } // 9. CYBERSPACE GATEWAY DOOR (North wall at X = 6.0f, Z = minCoord) Vector3 gateFramePos = { 6.0f, roomHeight * 0.5f, minCoord + 0.05f }; diff --git a/src/render/CyberRenderer.hpp b/src/render/CyberRenderer.hpp index 50e6b81..d20a83a 100644 --- a/src/render/CyberRenderer.hpp +++ b/src/render/CyberRenderer.hpp @@ -71,6 +71,11 @@ private: Texture2D m_texWindowView{}; Texture2D m_texCyberGate{}; + // Custom 3D Models + Model m_bedModel{}; + Texture2D m_texBedModel{}; + bool m_bedModelLoaded = false; + // Ancient Palace Storeroom Procedural Textures Texture2D m_texAncientWall{}; Texture2D m_texAncientFloor{};