⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmobjects.frm

📁 游戏《家园》源码
💻 FRM
📖 第 1 页 / 共 5 页
字号:
    rsObjects!PosX = Val(txtPosX.Text)
    rsObjects!PosY = Val(txtPosY.Text)
    rsObjects!PosZ = Val(txtPosZ.Text)
    rsObjects!ScaleX = Val(txtScaleX.Text) / 100
    rsObjects!ScaleY = Val(txtScaleY.Text) / 100
    rsObjects!ScaleZ = Val(txtScaleZ.Text) / 100
    fRotX = Val(txtRotX.Text)
    fRotY = Val(txtRotY.Text)
    fRotZ = Val(txtRotZ.Text)
    Call rendAngCheck(fRotX, fRotY, fRotZ)
    rsObjects!RotX = fRotX
    rsObjects!RotY = fRotY
    rsObjects!RotZ = fRotZ
    rsObjects!Type = cmbType.ItemData(cmbType.ListIndex)
    rsObjects!Layer = cmbLayer.ItemData(cmbLayer.ListIndex)
    rsObjects!Name = Trim(cmbName.Text)
    rsObjects!Info = Trim(txtInfo.Text)
    rsObjects!File = Trim(txtFile.Text)
    
    'Get full filename
    sFile = rsObjects!File
    
    'Check filename
    If sFile <> "" Then
        If InStr(sFile, ":") = 0 Then
            'Validate and hash file
            If Dir(sObjDir + sFile) = "" Then sFile = Trim(Str(misGetHash(rsObjects!File))) + MIS_EXT_OBJ
            
            'Append filename to object dir
            sFile = sObjDir + sFile
        End If
    End If
        
    'Create object
    If rendNewObj(nObj, rsObjects!Key, sFile) Then Call MsgBox("DLL error: Unable to create object!", vbOKOnly Or vbExclamation, "MissionMan")
        
    'Set mode and color
    Call frmLayers.GetColor(rsObjects!Layer, nMode, nCol)
    Call rendSetObjMode(nObj, nMode)
    Call rendSetObjCol(nObj, nCol)
    
    'Set selection
    Call frmLayers.SetLayer(rsObjects!Layer, 1)
    Call rendSetSel("o", sCurK)
    
    'Position object
    Call rendRotObj(nObj, rsObjects!RotX, rsObjects!RotY, rsObjects!RotZ)
    Call rendScaleObj(nObj, rsObjects!ScaleX, rsObjects!ScaleY, rsObjects!ScaleZ)
    Call rendTransObj(nObj, rsObjects!PosX, rsObjects!PosY, rsObjects!PosZ)
        
    'Update data
    rsObjects.Update
    
    'Add to tree
    Call frmTree.AddTree(sParK, sCurK)
    
    'Add attribs
    AddAttribs
    
    'Set link
    Call GetAll(Val(Mid(sCurK, 2)), nRLev, nRObj, nType)
    Call rendFindObj(nLink, GetLink(Val(Mid(sCurK, 2)), nRLev, nRObj, nType))
    Call rendSetObjLink(nObj, nLink)
    
    'Check reference key
    If sRefK <> "" Then
        'Move objects
        Call MoveObjects(sCurK, sRefK, sParK)
        
        'Reset refernce key
        sRefK = ""
        
        'Show tree
        frmTree.ShowTree (sCurK)
        Exit Sub
    End If
    
    'Select in tree
    Call frmTree.SelTree(sCurK)
    
    'Refresh graphics
    frmFront.Render
    frmTop.Render
    frmSide.Render
    frmCamera.Render
End Sub

Sub AddAttribs()
    Dim n As Integer

    Dim nCount As Integer
    
    Dim nPos As Long
    
    Dim sList As String
    Dim sVal As String
    
    'Reset count
    nCount = 0
    
    'Get attribs
    Call misGetListByKey(frmMission.GetPrefix + MIS_SEC_OBJ + Trim(Str(cmbType.ItemData(cmbType.ListIndex) - 1)), MIS_KEY_ATTRIB, sList, nCount, MIS_MOD_CFG)
    
    'Check count
    If nCount = 0 Then Exit Sub
    
    'Truncate attribs
    sList = TruncStr(sList)

    'Loop thru attribs
    For n = 0 To nCount - 1
        'Get position of | character in string
        nPos = InStr(sList, "|")
        
        'Get default
        Call misGetVal(frmMission.GetPrefix + MIS_SEC_OBJ + Trim(Str(cmbType.ItemData(cmbType.ListIndex) - 1)), MIS_KEY_DEF + Trim(Str(n)), sVal, MIS_MOD_CFG)
        
        'Truncate default
        sVal = TruncStr(sVal)

        'If possible, truncate string at | character
        If nPos > 0 Then
            'Create new attrib
            Call frmAttribs.NewAttrib(sCurK, Left(sList, nPos - 1), sVal, "")
            sList = Mid(sList, nPos + 1, Len(sList))
        Else
            'Create new attrib
            Call frmAttribs.NewAttrib(sCurK, sList, sVal, "")
        End If
    Next n
End Sub

Sub DelObject(ByVal sPKey As String, ByVal sCKey As String, ByVal sFile As String)
    Dim nType As Integer
    
    Dim nObj As Long
        
    Dim sTxt As String
    Dim sVal As String
    Dim sQuery As String
    
    Dim rsTemp As Recordset
    
    'Check file
    If sFile = "" Then
        'Check DB
        If bDBFlag = False Then Exit Sub
    End If
    
    'Check key
    If sCKey = "" Then Exit Sub
    If Left(sCKey, 1) <> "o" Then Exit Sub
    
    'Check parent
    If sPKey <> "" And sFile = "" Then
        'Get name
        sTxt = frmObjects.GetName(Val(Mid(sCKey, 2)))
    
        'Get type
        nType = frmObjects.GetType(Val(Mid(sCKey, 2)))
        Call misGetVal(frmMission.GetPrefix + MIS_SEC_OBJ + Trim(Str(nType - 1)), MIS_KEY_TYPE, sVal, MIS_MOD_CFG)
        sVal = TruncStr(sVal)
        If sVal <> "" Then sTxt = sVal + ": " + sTxt
                
        'Prompt user
        If MsgBox("Delete object " + sTxt + "?", vbYesNo Or vbQuestion, "MissionMan") = vbNo Then Exit Sub
    End If
    
    'Del attrib
    Call frmAttribs.DelAttribs(sCKey, sFile)
   
    'Del objects
    Call DelObjects(sCKey, sFile)
    
    'Check file
    If sFile = "" Then
        'Check recordset
        If rsObjects.BOF = True Then Exit Sub
    End If
    
    'Set query
    sQuery = "SELECT * FROM Objects WHERE Key = " + Mid(sCKey, 2)
    
    'Open temporary recordset by query
    If OpenRecordSetByQuery(sQuery, rsTemp, sFile) = False Then Exit Sub
        
    'Delete data in recordset
    rsTemp.MoveFirst
    
    'Find object
    Call rendFindObj(nObj, rsTemp!Key)
    
    'Delete object
    Call rendDelObj(nObj)
    
    'Delete data
    rsTemp.Delete
    
    'Close temporary recordset
    Call CloseRecordSetByQuery(rsTemp, sFile)
    
    'Check file
    If sFile <> "" Then Exit Sub
    
    'Delete from tree
    Call frmTree.DelTree(sCKey)
    
    'Check parent
    If sPKey = "" Then Exit Sub
    
    'Select in tree
    Call frmTree.SelTree(sPKey)
    
    'Refresh graphics
    frmFront.Render
    frmTop.Render
    frmSide.Render
    frmCamera.Render
End Sub

Sub DelObjects(ByVal sKey As String, ByVal sFile As String)
    Dim nObj As Long
       
    Dim sQuery As String
    
    Dim rsTemp As Recordset
    
    'Check file
    If sFile = "" Then
        'Check DB
        If bDBFlag = False Then Exit Sub
    End If
    
    'Check key
    If sKey = "" Then Exit Sub
    If Left(sKey, 1) = "m" Then Exit Sub
    If Left(sKey, 1) = "a" Then Exit Sub
    
    'Check file
    If sFile = "" Then
        'Check recordset
        If rsObjects.BOF = True Then Exit Sub
    End If
        
    'Check key
    If Left(sKey, 1) = "l" Then
        'Set query
        sQuery = "SELECT * FROM Objects WHERE Level = " + Mid(sKey, 2) + " AND Object = 0 ORDER BY Key"
    End If
    
    'Check key
    If Left(sKey, 1) = "o" Then
        'Set query
        sQuery = "SELECT * FROM Objects WHERE Level = 0 AND Object = " + Mid(sKey, 2) + " ORDER BY Key"
    End If
    
    'Open temporary recordset by query
    If OpenRecordSetByQuery(sQuery, rsTemp, sFile) = False Then Exit Sub
        
    'Find data in recordset
    rsTemp.MoveFirst
    Do Until rsTemp.EOF
        'Del attribs
        Call frmAttribs.DelAttribs("o" + Trim(Str(rsTemp!Key)), sFile)
        
        'Del objects
        Call DelObjects("o" + Trim(Str(rsTemp!Key)), sFile)
        
        'Find object
        Call rendFindObj(nObj, rsTemp!Key)

        'Delete object
        Call rendDelObj(nObj)

        'Delete data
        rsTemp.Delete
        rsTemp.MoveNext
    Loop
    
    'Close temporary recordset
    Call CloseRecordSetByQuery(rsTemp, sFile)
End Sub

Sub DelLayer(ByVal nKey As Long)
    Dim nObj As Long
    Dim nMode As Long
       
    Dim sQuery As String
    
    Dim rsTemp As Recordset
    
    'Check DB
    If bDBFlag = False Then Exit Sub
    
    'Set query
    sQuery = "SELECT * FROM Objects WHERE Layer = " + Str(nKey) + " ORDER BY Key"
    
    'Open temporary recordset by query
    If OpenRecordSetByQuery(sQuery, rsTemp, "") = False Then Exit Sub
        
    'Find data in recordset
    rsTemp.MoveFirst
    Do Until rsTemp.EOF
        'Find object
        Call rendFindObj(nObj, rsTemp!Key)
        
        'Get mode
        Call rendGetObjMode(nObj, nMode)
        If nMode = 0 Then nMode = 1
        
        'Set mode and color
        Call rendSetObjMode(nObj, nMode)
        Call rendSetObjCol(nObj, nViewCol)
        
        'Edit data in recordset
        rsTemp.Edit
        rsTemp!Layer = 0
        rsTemp.Update
        rsTemp.MoveNext
    Loop
    
    'Close temporary recordset
    rsTemp.Close
End Sub

Sub CopyObject(ByVal sSrcKey As String, ByVal sDstKey As String, ByVal bFlag As Boolean, ByVal sSrcFile As String)
    Dim nType As Integer
    
    Dim nKey As Long
    Dim nObj As Long
    Dim nLink As Long
    Dim nMode As Long
    Dim nCol As Long
    Dim nRLev As Long
    Dim nRObj As Long
    
    Dim sQuery As String
    Dim sFile As String
    
    Dim rsTemp As Recordset
    
    'Check DB
    If bDBFlag = False Then Exit Sub
    
    'Check source
    If sSrcKey = "" Then Exit Sub
    If Left(sSrcKey, 1) <> "o" Then Exit Sub
    
    'Check destination
    If sDstKey = "" Then Exit Sub
    If Left(sDstKey, 1) = "m" Then Exit Sub
    If Left(sDstKey, 1) = "a" Then Exit Sub
    
    'Check source file
    If sSrcFile = "" Then
        'Check recordset
        If rsObjects.BOF = True Then Exit Sub
    End If
    
    'Set query
    sQuery = "SELECT * FROM Objects WHERE Key = " + Mid(sSrcKey, 2)
    
    'Open temporary recordset by query
    If OpenRecordSetByQuery(sQuery, rsTemp, sSrcFile) = False Then Exit Sub
        
    'Get data from recordset
    rsTemp.MoveFirst

    'Add data to recordset
    rsObjects.AddNew
    nKey = rsObjects!Key
    
    'Check destination
    If Left(sDstKey, 1) = "l" Then
        rsObjects!Level = Val(Mid(sDstKey, 2))
    Else
        rsObjects!Level = 0
    End If
    
    'Check destination
    If Left(sDstKey, 1) = "o" Then
        rsObjects!Object = Val(Mid(sDstKey, 2))
    Else
        rsObjects!Object = 0
    End If
    
    'Copy data
    rsObjects!NumObjs = rsTemp!NumObjs
    rsObjects!NumAttribs = rsTemp!NumAttribs
    rsObjects!PosX = rsTemp!PosX
    rsObjects!PosY = rsTemp!PosY
    rsObjects!PosZ = rsTemp!PosZ
    rsObjects!ScaleX = rsTemp!ScaleX
    rsObjects!ScaleY = rsTemp!ScaleY
    rsObjects!ScaleZ = rsTemp!ScaleZ
    rsObjects!RotX = rsTemp!RotX
    rsObjects!RotY = rsTemp!RotY
    rsObjects!RotZ = rsTemp!RotZ
    rsObjects!Type = rsTemp!Type
    rsObjects!Layer = rsTemp!Layer
    rsObjects!Name = rsTemp!Name
    rsObjects!Info = rsTemp!Info
    rsObjects!File = rsTemp!File
        
    'Close temporary recordset
    Call CloseRecordSetByQuery(rsTemp, sSrcFile)
    
    'Get full filename
    sFile = rsObjects!File
    
    'Check filename
    If sFile <> "" Then
        If InStr(sFile, ":") = 0 Then
            'Validate and hash file
            If Dir(sObjDir + sFile) = "" Then sFile = Trim(Str(misGetHash(rsObjects!File))) + MIS_EXT_OBJ
            
            'Append filename to object dir
            sFile = sObjDir + sFile
        End If
    End If
        
    'Create object
    If rendNewObj(nObj, nKey, sFile) Then Call MsgBox("DLL error: Unable to create object!", vbOKOnly Or vbExclamation, "MissionMan")
        
    'Set mode and color
    Call frmLayers.GetColor(rsObjects!Layer, nMode, nCol)
    Call rendSetObjMode(nObj, nMode)
    Call rendSetObjCol(nObj, nCol)
    
    'Set selection
    Call frmLayers.SetLayer(rsObjects!Layer, 1)
    Call rendSetSel("o", "o" + Trim(Str(nKey)))
    
    'Position object
    Call rendRotObj(nObj, rsObjects!RotX, rsObjects!RotY, rsObjects!RotZ)
    Call rendScaleObj(nObj, rsObjects!ScaleX, rsObjects!ScaleY, rsObjects!ScaleZ)
    Call rendTransObj(nObj, rsObjects!PosX, rsObjects!PosY, rsObjects!PosZ)
    
    'Update data
    rsObjects.Update
    
    'Add to tree
    Call frmTree.AddTree(sDstKey, "o" + Trim(Str(nKey)))
    
    'Copy attrib
    Call frmAttribs.CopyAttribs(sSrcKey, "o" + Trim(Str(nKey)), sSrcFile)
   
    'Set link
    Call GetAll(nKey, nRLev, nRObj, nType)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -