hi all
I've got a problem thats annoying me here, maybe i've just been staring at my computer screen too long.
In my editor when resizing an object, im using the following function which uses "Scale Object"
Function ScaleObjectWithMouse(Obj)
` Validate Entry
If Obj <= 0 Then ExitFunction 0
If IsObjectInDim(Obj) = 0 Then ExitFunction 0
` Prepare
Hide Mouse
n = GetObjectsDimNum(Obj)
xScale# = ObjectData(n).xScale
yScale# = ObjectData(n).yScale
zScale# = ObjectData(n).zScale
Temp = MouseMoveX()
Temp = MouseMoveY()
Temp = MouseMoveZ()
` Move Object
Repeat
Inc xScale#,MouseMoveX()
Inc yScale#,MouseMoveY()
Inc zScale#,MouseMoveZ()
Scale Object Obj,xScale#,yScale#,zScale#
` Update Properties
If PropertyType$ = "OBJECT" And PropertyObjDataNum = n
If xScale# <> Val(GetGadgetText(PropertyData(7).Gadget2)) : SetGadgetText PropertyData(7).Gadget2,Str$(xScale#) : EndIf
If yScale# <> Val(GetGadgetText(PropertyData(8).Gadget2)) : SetGadgetText PropertyData(8).Gadget2,Str$(yScale#) : EndIf
If zScale# <> Val(GetGadgetText(PropertyData(9).Gadget2)) : SetGadgetText PropertyData(9).Gadget2,Str$(zScale#) : EndIf
EndIf
` Update Object Selector
ObjectData(n).xScale = xScale#
ObjectData(n).yScale = yScale#
ObjectData(n).zScale = zScale#
` Exit Requirements
If MouseClick() > 0 Then ExitVal = 1
If ScanCode() > 0 Then ExitVal = 1
` End Loop
Sync : Until ExitVal = 1
Show Mouse
EndFunction 1
Then when it comes to saving the map i cant find any command to get x y and z scales separately so im using "Object Size X", Ect, But this means when i load the map, i dont have the Scale Value which i need to resize it so everythin is out of scale, i think i need to convert the saved size to xyz scales, but im unsure how, (or as i said, maybe i've been staring at the screen for just too long).
Heres my load and save functions
Function NewDBWProject(AskSave)
` Ask if save first
If AskSave = 1
RV$ = AdvancedMessageBox("Save Changes...","Would you like to Save Changes?","","&Yes","&No","&Cancel",DBWin)
If RV$ = "&Yes" Then ProjectName$ = SaveDBW(ProjectName$,0)
If RV$ = "&Cancel" Then ExitFunction
EndIf
` Delete Old Project
p = OpenProgressWindow("New Project...","Removing Old Project...",1)
For n = 0 To Array Count( LightData())-1 : DeleteLight( LightData(n).Obj ) : Next n
For n = 0 To Array Count(ObjectData())-1 : DeleteObject(ObjectData(n).ObjNum) : Next n : For n = 1 to 10000 : DeleteObject(n) : Next n
RemoveBSP() : RemoveSkySphere() : DeleteWater()
CloseProgressWindow(p)
` Create New Project
Obj = MakeWater()
LoadSkySphere(AppPath$+"Resources\SkySpheres\Nice Sky.dds")
Position Camera 0,100,50,100
EndFunction
Function LoadDBWSelect()
File$ = OpenDialog("Load DBW Project...","DarkBasic World Project (*.dbw)|*.dbw",0,AppPath$+"My Projects\")
If File$ = "" Then ExitFunction ""
LoadDBW(File$)
EndFunction File$
Function SaveDBWSelect()
File$ = SaveDialog("Save DBW Project...","DarkBasic World Project (*.dbw)|*.dbw",AppPath$+"My Projects\")
If File$ = "" Then ExitFunction ""
SaveDBW(File$,1)
EndFunction File$
Function SaveDBW(File$,OverwriteWarning)
` If this is an unnamed Project, then get a name
If File$ = "" : File$ = SaveDBWSelect() : ExitFunction ""
If File$ = "" : ExitFunction ""
EndIf : EndIf
` OverWrite Warning
If OverwriteWarning = 1 And File Exist(File$) = 1 : RV$ = AdvancedMessageBox("Overwrite File?","File already Exists, Overwite?","","&Yes","&No","",DBWin)
If RV$ = "&Yes" Then Delete File File$
If RV$ = "&No" Then ExitFunction ""
EndIf
` General Settings
p = OpenProgressWindow("Saving DarkBasic World Project...","Starting Saving Process...",7)
SetGadgetText DBWin,"DarkBasic World Creator "+Version$+" - "+File$
` Save Single items
UpdateProgressWindow(p,"Creating New Save File...") : Fn = Find Free File() : Open To Write Fn,File$
UpdateProgressWindow(p,"Writing Header..." ) : Write String Fn,"DarkBasic World Creator "+Version$ : Write String Fn,""
UpdateProgressWindow(p,"Saving SkySphere..." ) : If SkySphereObject > 0 : Write String Fn,"[ADD SKYSPHERE]" : Write String Fn,SkySphereTexture$ : EndIf
UpdateProgressWindow(p,"Saving BSP..." ) : If BSPFile$ <> "" : Write String Fn,"[LOAD BSP]" : Write String Fn,BSPFile$ : EndIf
UpdateProgressWindow(p,"Saving Water..." ) : If WaterObjNum > 0 : Write String Fn,"[ADD WATER]" : Write String Fn,Str$(GetMenuItemChecked(mWater,mWaterReflection)) : Write String Fn,Str$(GetMenuItemChecked(mWater,mWaterRefraction)) : Write String Fn,Str$((GetMenuItemChecked(mWater,mWaterTextureSize1024)*1024)+(GetMenuItemChecked(mWater,mWaterTextureSize512)*512)+(GetMenuItemChecked(mWater,mWaterTextureSize256)*256)) : EndIf
` Save Lights
UpdateProgressWindow(p,"Saving Lights...")
For n = 0 to Array Count(ObjectData()) : WriteObjDim = 0
If ObjectData(n).Type$ = "LIGHT" : Write String Fn,"[ADD LIGHT]"
Write String Fn,"[POSITION LIGHT]" : Write String Fn,Str$(Object Position X(ObjectData(n).ObjNum)) : Write String Fn,Str$(Object Position Y(ObjectData(n).ObjNum)) : Write String Fn,Str$(Object Position Z(ObjectData(n).ObjNum))
Write String Fn,"[ROTATE LIGHT]" : Write String Fn,Str$(Object Angle X(ObjectData(n).ObjNum)) : Write String Fn,Str$(Object Angle Y(ObjectData(n).ObjNum)) : Write String Fn,Str$(Object Angle Z(ObjectData(n).ObjNum))
Write String Fn,"[COLOR LIGHT]" : Write String Fn,Str$(ObjectData(n).Color)
Write String Fn,"[SET RANGE]" : Write String Fn,Str$(Light Range(LightData(GetLightsDimNum(ObjectData(n).ObjNum)).Light))
EndIf : Next n
` Save Objects
UpdateProgressWindow(p,"Saving Objects...")
For n = 0 to Array Count(ObjectData()) : WriteObjDim = 0
If ObjectData(n).Type$ = "3D TEXT" Then WriteObjDim = 1 : Write String Fn,"[NEW 3D TEXT]" : Write String Fn,ObjectData(n).File$
If ObjectData(n).Type$ = "IMGMAP" Then WriteObjDim = 1 : Write String Fn,"[NEW IMAGE MAP]" : Write String Fn,ObjectData(n).File$
If ObjectData(n).Type$ = "PLAIN" Then WriteObjDim = 1 : Write String Fn,"[NEW OBJECT PLAIN]"
If ObjectData(n).Type$ = "BOX" Then WriteObjDim = 1 : Write String Fn,"[NEW OBJECT BOX]"
If ObjectData(n).Type$ = "SPHERE" Then WriteObjDim = 1 : Write String Fn,"[NEW OBJECT SPHERE]"
If ObjectData(n).Type$ = "CYLINDER" Then WriteObjDim = 1 : Write String Fn,"[NEW OBJECT CYLINDER]"
If ObjectData(n).Type$ = "CONE" Then WriteObjDim = 1 : Write String Fn,"[NEW OBJECT CONE]"
If ObjectData(n).Type$ = "LOAD" Then WriteObjDim = 1 : Write String Fn,"[NEW OBJECT LOAD]" : Write String Fn,ObjectData(n).File$
If ObjectData(n).Type$ = "TERRAIN" Then WriteObjDim = 1 : Write String Fn,"[NEW TERRAIN]" : Write String Fn,ObjectData(n).File$
If WriteObjDim = 1
If ObjectData(n).Texture$ <> "" Then Write String Fn,"[TEXTURE OBJECT]" : Write String Fn,ObjectData(n).Texture$
Write String Fn,"[SET NAME]" : Write String Fn,ObjectData(n).Name$
Write String Fn,"[SET REFLECTIVE]" : Write String Fn,Str$(ObjectData(n).Reflective)
Write String Fn,"[SET WIREFRAME]" : Write String Fn,Str$(ObjectData(n).Wireframe)
Write String Fn,"[SET BOUNDS]" : Write String Fn,Str$(ObjectData(n).Bounds)
Write String Fn,"[SET GHOST]" : Write String Fn,Str$(ObjectData(n).Ghost)
Write String Fn,"[SET COLOR]" : Write String Fn,Str$(ObjectData(n).Color)
Write String Fn,"[SET CULL]" : Write String Fn,Str$(ObjectData(n).Cull)
Write String Fn,"[POSITION OBJECT]" : Write String Fn,Str$(Object Position X(ObjectData(n).ObjNum)) : Write String Fn,Str$(Object Position Y(ObjectData(n).ObjNum)) : Write String Fn,Str$(Object Position Z(ObjectData(n).ObjNum))
Write String Fn,"[ROTATE OBJECT]" : Write String Fn,Str$(Object Angle X(ObjectData(n).ObjNum)) : Write String Fn,Str$(Object Angle Y(ObjectData(n).ObjNum)) : Write String Fn,Str$(Object Angle Z(ObjectData(n).ObjNum))
Write String Fn,"[SCALE OBJECT]" : Write String Fn,Str$(Object Size X(ObjectData(n).ObjNum)) : Write String Fn,Str$(Object Size Y(ObjectData(n).ObjNum)) : Write String Fn,Str$(Object Size Z(ObjectData(n).ObjNum))
EndIf : Next n : Close File Fn
CloseProgressWindow(p)
Message "Save Complete...","Save Complete..."
EndFunction File$
Function LoadDBW(File$)
If File Exist(File$) = 0 Then ErrorMessage "File Does Not Exist, Unable to Load..." : ExitFunction ""
SetGadgetText DBWin,"DarkBasic World Creator "+Version$+" - "+File$
` Delete Old Project
` p = OpenProgressWindow("Removing Old Project...","Please Wait...",1)
` LoadDBW_DeleteLights: For n = 0 to Array Count( LightData())-1 : If LightData(n).Light <> 0 : DeleteLight( LightData(n).Obj ) : Goto LoadDBW_DeleteLights : EndIf : Next n
` LoadDBW_DeleteObjects: For n = 0 to Array Count(ObjectData())-1 : If ObjectData(n).ObjNum <> 0 : DeleteObject(ObjectData(n).ObjNum) : Goto LoadDBW_DeleteObjects : EndIf : Next n
` RemoveBSP() : RemoveSkySphere() : DeleteWater()
` CloseProgressWindow(p)
p = OpenProgressWindow("Removing Old Project...","Removing Old Project...",1)
For n = 0 To Array Count( LightData())-1 : DeleteLight( LightData(n).Obj ) : Next n
For n = 0 To Array Count(ObjectData())-1 : DeleteObject(ObjectData(n).ObjNum) : Next n : For n = 1 to 10000 : DeleteObject(n) : Next n
RemoveBSP() : RemoveSkySphere() : DeleteWater()
CloseProgressWindow(p)
Fn = Find Free File()
Open To Read Fn,File$
Repeat : s$ = ReadString(Fn)
` Object Commands ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
If s$ = "[NEW OBJECT PLAIN]" Then Obj = AddObject("PLAIN" ) : ObjDimNum = GetObjectsDimNum(Obj)
If s$ = "[NEW OBJECT BOX]" Then Obj = AddObject("BOX" ) : ObjDimNum = GetObjectsDimNum(Obj)
If s$ = "[NEW OBJECT SPHERE]" Then Obj = AddObject("SPHERE" ) : ObjDimNum = GetObjectsDimNum(Obj)
If s$ = "[NEW OBJECT CYLINDER]" Then Obj = AddObject("CYLINDER") : ObjDimNum = GetObjectsDimNum(Obj)
If s$ = "[NEW OBJECT CONE]" Then Obj = AddObject("CONE" ) : ObjDimNum = GetObjectsDimNum(Obj)
If s$ = "[NEW OBJECT LOAD]" Then Obj = LoadObject(ReadString(Fn)) : ObjDimNum = GetObjectsDimNum(Obj)
If s$ = "[NEW TERRAIN]" Then Obj = LoadTerrain(ReadString(Fn)) : ObjDimNum = GetObjectsDimNum(Obj)
If s$ = "[NEW 3D TEXT]" Then Split String ReadString(Fn),"|" : Obj = Create3DText(Get Split Word$(1),Val(Get Split Word$(2)),Val(Get Split Word$(3)),Get Split Word$(4),Val(Get Split Word$(5)),Val(Get Split Word$(6)),Val(Get Split Word$(7))) : ObjDimNum = GetObjectsDimNum(Obj)
If s$ = "[NEW IMAGE MAP]" Then Split String ReadString(Fn),"|" : Obj = BuildImageMap(Get Split Word$(1),Get Split Word$(2),Val(Get Split Word$(3)),Val(Get Split Word$(4)),Val(Get Split Word$(5)),Val(Get Split Word$(6)),Val(Get Split Word$(7)),Val(Get Split Word$(8))) : ObjDimNum = GetObjectsDimNum(Obj)
` ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
If s$ = "[TEXTURE OBJECT]" Then TextureObject(Obj,ReadString(Fn))
If s$ = "[POSITION OBJECT]" Then Position Object Obj,ReadFloat(Fn),ReadFloat(Fn),ReadFloat(Fn)
If s$ = "[ROTATE OBJECT]" Then Rotate Object Obj,ReadFloat(Fn),ReadFloat(Fn),ReadFloat(Fn)
If s$ = "[SCALE OBJECT]" Then Scale Object Obj,ReadFloat(Fn)/100,ReadFloat(Fn)/100,ReadFloat(Fn)/100
If s$ = "[SET REFLECTIVE]" : ObjectData(ObjDimNum).Reflective = ReadInteger(Fn) : If ObjectData(ObjDimNum).Reflective <> 0 : Set Reflection Shading On Obj : EndIf : EndIf
If s$ = "[SET WIREFRAME]" : ObjectData(ObjDimNum).WireFrame = ReadInteger(Fn) : If ObjectData(ObjDimNum).Wireframe <> 0 : Set Object Wireframe Obj,ObjectData(ObjDimNum).Wireframe : EndIf : EndIf
If s$ = "[SET BOUNDS]" : ObjectData(ObjDimNum).Bounds = ReadInteger(Fn) : If ObjectData(ObjDimNum).Bounds <> 0 : Show Object Bounds Obj : EndIf : EndIf
If s$ = "[SET GHOST]" : ObjectData(ObjDimNum).Ghost = ReadFloat(Fn) : If ObjectData(ObjDimNum).Ghost <> 0 : Color Object Obj,ObjectData(ObjDimNum).Color : EndIf : EndIf
If s$ = "[SET COLOR]" : ObjectData(ObjDimNum).Color = ReadFloat(Fn) : If ObjectData(ObjDimNum).Color <> 0 : Color Object Obj,ObjectData(ObjDimNum).Color : EndIf : EndIf
If s$ = "[SET CULL]" : ObjectData(ObjDimNum).Cull = ReadInteger(Fn) : If ObjectData(ObjDimNum).Cull <> 0 : Set Object Cull Obj,ObjectData(ObjDimNum).Cull : EndIf : EndIf
` BSP Commands ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
If s$ = "[LOAD BSP]" Then LoadBSP(ReadString(Fn))
` Light Commands ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
If s$ = "[ADD LIGHT]" Then L = AddLight() : Obj = LightData(L).Obj : Light = LightData(L).Light
If s$ = "[ROTATE LIGHT]" Then Rotate Object Obj,ReadFloat(Fn),ReadFloat(Fn),ReadFloat(Fn) : Rotate Light Light,Object Angle X(Obj),Object Angle Y(Obj),Object Angle Z(Obj)
If s$ = "[POSITION LIGHT]" Then Position Object Obj,ReadFloat(Fn),ReadFloat(Fn),ReadFloat(Fn) : Position Light Light,Object Position X(Obj),Object Position Y(Obj),Object Position Z(Obj)
If s$ = "[SET RANGE]" Then Set Light Range Light,ReadFloat(Fn)
If s$ = "[COLOR LIGHT]" Then c = ReadInteger(Fn) : Color Object Obj,c : Color Light Light,c
` SkySphere Commands ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
If s$ = "[ADD SKYSPHERE]" Then LoadSkySphere(ReadString(Fn))
` Water Commands ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
If s$ = "[ADD WATER]" : SetMenuItemChecked mWater,mWaterReflection,ReadInteger(Fn)
SetMenuItemChecked mWater,mWaterRefraction,ReadInteger(Fn)
v = ReadInteger(Fn)
If v = 1024 Then SetMenuItemChecked mWater,mWaterTextureSize1024,1 : SetMenuItemChecked mWater,mWaterTextureSize512,0 : SetMenuItemChecked mWater,mWaterTextureSize256,0
If v = 512 Then SetMenuItemChecked mWater,mWaterTextureSize1024,0 : SetMenuItemChecked mWater,mWaterTextureSize512,1 : SetMenuItemChecked mWater,mWaterTextureSize256,0
If v = 256 Then SetMenuItemChecked mWater,mWaterTextureSize1024,0 : SetMenuItemChecked mWater,mWaterTextureSize512,0 : SetMenuItemChecked mWater,mWaterTextureSize256,1
MakeWater() : EndIf
` ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Until File End(Fn) = 1 : Close File Fn
EndFunction File$
EDIT: I dont think there is any command to resize based on xyz Size values, Hence why im using scale, but i may be wrong.