|
用这个系统做的一个简单演示地图:
test.w3x
(40 KB, 下载次数: 48)
忘记说明了,演示地图里按ESC触发效果
预览什么的
预览什么的
[jass]// Objects 空间物体模型函数
// 可建立Objects对象, 并向其中添加点, 添加的点会随物体的转动而转动
// ------ 常用操作
// NewObject(x,y,z) //新建一个物体, 返回物体obj值
// DeleteObject(obj) //删除物体
// SetObjectPosition(obj,x,y,z) //设置物体坐标(移动物体)
// ObjectCreateLoc(obj,x,y,z) //创建一个点然后添加到物体,与中心点相对坐标x,y,z,返回loc在物体内的index
// GetObjectLocX(obj,index) //获得物体第index个点的坐标x,y,z
// GetObjectLocY(obj,index)
// GetObjectLocZ(obj,index)
// ObjectAttachObject(whichObj,toObj) //将whichObj绑定到toObj上,绑定后将当前朝向作为默认朝向,并且会随着toObj的移动而改变默认朝向
// ------ 操作物体
// AdjustObjectRotationX(obj,rad) //调整物体x,y,z轴旋转角度
// AdjustObjectRotationY(obj,rad)
// AdjustObjectRotationZ(obj,rad)
// ResetObjectRotation(obj) //重置物体到默认旋转角度
// SetObjectRotation(obj,ax,ay,az) //设置物体x,y,z轴旋转角度(实际上是重置+调整)
// AdjustObjectScale(obj,scaleX,scaleY,scaleZ) //调整物体缩放倍率(会被重置动作恢复)
// AdjustObjectDefaultScale(obj,scaleX,scaleY,scaleZ) //调整物体默认缩放倍率
// ------ 改变物体默认性质
// AdjustObjectDefaultRotationX(baseobj,obj,a) //设置物体x,y,z轴的默认旋转角度(一般不会用到)
// AdjustObjectDefaultRotationY(baseobj,obj,a) // baseobj:作为旋转轴的obj 非绑定的使用自身obj值
// AdjustObjectDefaultRotationZ(baseobj,obj,a)
// ResetObjectDefaultRotation(obj) //重置默认旋转角度到标准x,y,z轴朝向
// SetObjectDefaultRotation(obj,ax,ay,az) //设置物体默认的x,y,z轴旋转角度,实际是重置+调整
// ------ 有关点和物体的操作
// CreateLoc(x,y,z) //创建一个新的点,返回loc值,创建的点可以被添加到物体内
// GetObjectOriginLoc(obj) //获得物体中心点 返回loc值
// MoveLoc(loc) //改变点的坐标x,y,z
// GetLocX(loc) //获得点坐标x,y,z
// GetLocY(loc)
// GetLocZ(loc)
// GetObjectX(obj) //获得物体中心点坐标x,y,z
// GetObjectY(obj)
// GetObjectZ(obj)
// ObjectAddLoc(obj,loc) //向物体内添加一个点 loc
// ObjectCountLoc(obj) //获得物体点的个数
// GetObjectLoc(obj,index) //获得物体第index个点,返回loc值
globals
    real glrf_x=0.
    real glrf_y=0.
    real glrf_z=0.
    hashtable tdo_loc_ht=InitHashtable()
    hashtable tdo_obj_ht=InitHashtable()
endglobals
//glRotatef
function Rotatef takes real old_x,real old_y,real old_z,real angle,real x,real y,real z returns nothing
    local real cos=Cos(angle)
    local real sin=Sin(angle)
    set glrf_x=(x*x*(1-cos)+cos)*old_x+(x*y*(1-cos)-z*sin)*old_y+(x*z*(1-cos)+y*sin)*old_z
    set glrf_y=(y*y*(1-cos)+cos)*old_y+(y*z*(1-cos)-x*sin)*old_z+(y*x*(1-cos)+z*sin)*old_x
    set glrf_z=(z*z*(1-cos)+cos)*old_z+(x*z*(1-cos)-y*sin)*old_x+(y*z*(1-cos)+x*sin)*old_y
endfunction
//objects
function AdjustObjectDefaultRotationX takes integer baseobj,integer obj,real a returns nothing
    //设置obj的默认x轴旋转角度
    local integer i
    local integer loc
    //
    local real x=LoadReal(tdo_obj_ht,baseobj,4)
    local real y=LoadReal(tdo_obj_ht,baseobj,5)
    local real z=LoadReal(tdo_obj_ht,baseobj,6)
    // - y
    call Rotatef(LoadReal(tdo_obj_ht,obj,7),LoadReal(tdo_obj_ht,obj,8),LoadReal(tdo_obj_ht,obj,9),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,7,glrf_x)
    call SaveReal(tdo_obj_ht,obj,8,glrf_y)
    call SaveReal(tdo_obj_ht,obj,9,glrf_z)
    // - z
    call Rotatef(LoadReal(tdo_obj_ht,obj,10),LoadReal(tdo_obj_ht,obj,11),LoadReal(tdo_obj_ht,obj,12),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,10,glrf_x)
    call SaveReal(tdo_obj_ht,obj,11,glrf_y)
    call SaveReal(tdo_obj_ht,obj,12,glrf_z)
    // - dy
    call Rotatef(LoadReal(tdo_obj_ht,obj,-7),LoadReal(tdo_obj_ht,obj,-8),LoadReal(tdo_obj_ht,obj,-9),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,-7,glrf_x)
    call SaveReal(tdo_obj_ht,obj,-8,glrf_y)
    call SaveReal(tdo_obj_ht,obj,-9,glrf_z)
    // - dz
    call Rotatef(LoadReal(tdo_obj_ht,obj,-10),LoadReal(tdo_obj_ht,obj,-11),LoadReal(tdo_obj_ht,obj,-12),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,-10,glrf_x)
    call SaveReal(tdo_obj_ht,obj,-11,glrf_y)
    call SaveReal(tdo_obj_ht,obj,-12,glrf_z)
    // - locs
    set i=LoadInteger(tdo_obj_ht,obj,0)
    loop
        exitwhen i<=0
        set x=LoadReal(tdo_obj_ht,baseobj,4)
        set y=LoadReal(tdo_obj_ht,baseobj,5)
        set z=LoadReal(tdo_obj_ht,baseobj,6)
        set loc=LoadInteger(tdo_obj_ht,obj,i)
        call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
        call SaveReal(tdo_loc_ht,loc,1,glrf_x)
        call SaveReal(tdo_loc_ht,loc,2,glrf_y)
        call SaveReal(tdo_loc_ht,loc,3,glrf_z)
        if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
            set baseobj=obj
            set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
            call AdjustObjectDefaultRotationX(baseobj,obj,a) //改变默认轴角度
        endif
        set i=i-1
    endloop
endfunction
function AdjustObjectDefaultRotationY takes integer baseobj,integer obj,real a returns nothing
    //设置obj的默认Y轴旋转角度
    local integer i
    local integer loc
    //
    local real x=LoadReal(tdo_obj_ht,baseobj,7)
    local real y=LoadReal(tdo_obj_ht,baseobj,8)
    local real z=LoadReal(tdo_obj_ht,baseobj,9)
    // - x
    call Rotatef(LoadReal(tdo_obj_ht,obj,4),LoadReal(tdo_obj_ht,obj,5),LoadReal(tdo_obj_ht,obj,6),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,4,glrf_x)
    call SaveReal(tdo_obj_ht,obj,5,glrf_y)
    call SaveReal(tdo_obj_ht,obj,6,glrf_z)
    // - z
    call Rotatef(LoadReal(tdo_obj_ht,obj,10),LoadReal(tdo_obj_ht,obj,11),LoadReal(tdo_obj_ht,obj,12),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,10,glrf_x)
    call SaveReal(tdo_obj_ht,obj,11,glrf_y)
    call SaveReal(tdo_obj_ht,obj,12,glrf_z)
    // - dx
    call Rotatef(LoadReal(tdo_obj_ht,obj,-4),LoadReal(tdo_obj_ht,obj,-5),LoadReal(tdo_obj_ht,obj,-6),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,-4,glrf_x)
    call SaveReal(tdo_obj_ht,obj,-5,glrf_y)
    call SaveReal(tdo_obj_ht,obj,-6,glrf_z)
    // - dz
    call Rotatef(LoadReal(tdo_obj_ht,obj,-10),LoadReal(tdo_obj_ht,obj,-11),LoadReal(tdo_obj_ht,obj,-12),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,-10,glrf_x)
    call SaveReal(tdo_obj_ht,obj,-11,glrf_y)
    call SaveReal(tdo_obj_ht,obj,-12,glrf_z)
    // - locs
    set i=LoadInteger(tdo_obj_ht,obj,0)
    loop
        exitwhen i<=0
        set x=LoadReal(tdo_obj_ht,baseobj,7)
        set y=LoadReal(tdo_obj_ht,baseobj,8)
        set z=LoadReal(tdo_obj_ht,baseobj,9)
        set loc=LoadInteger(tdo_obj_ht,obj,i)
        call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
        call SaveReal(tdo_loc_ht,loc,1,glrf_x)
        call SaveReal(tdo_loc_ht,loc,2,glrf_y)
        call SaveReal(tdo_loc_ht,loc,3,glrf_z)
        if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
            set baseobj=obj
            set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
            call AdjustObjectDefaultRotationY(baseobj,obj,a) //改变默认轴角度
        endif
        set i=i-1
    endloop
endfunction
function AdjustObjectDefaultRotationZ takes integer baseobj,integer obj,real a returns nothing
    //设置obj的默认Z轴旋转角度
    local integer i
    local integer loc
    //
    local real x=LoadReal(tdo_obj_ht,baseobj,10)
    local real y=LoadReal(tdo_obj_ht,baseobj,11)
    local real z=LoadReal(tdo_obj_ht,baseobj,12)
    // - x
    call Rotatef(LoadReal(tdo_obj_ht,obj,4),LoadReal(tdo_obj_ht,obj,5),LoadReal(tdo_obj_ht,obj,6),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,4,glrf_x)
    call SaveReal(tdo_obj_ht,obj,5,glrf_y)
    call SaveReal(tdo_obj_ht,obj,6,glrf_z)
    // - y
    call Rotatef(LoadReal(tdo_obj_ht,obj,7),LoadReal(tdo_obj_ht,obj,8),LoadReal(tdo_obj_ht,obj,9),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,7,glrf_x)
    call SaveReal(tdo_obj_ht,obj,8,glrf_y)
    call SaveReal(tdo_obj_ht,obj,9,glrf_z)
    // - dx
    call Rotatef(LoadReal(tdo_obj_ht,obj,-4),LoadReal(tdo_obj_ht,obj,-5),LoadReal(tdo_obj_ht,obj,-6),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,-4,glrf_x)
    call SaveReal(tdo_obj_ht,obj,-5,glrf_y)
    call SaveReal(tdo_obj_ht,obj,-6,glrf_z)
    // - dy
    call Rotatef(LoadReal(tdo_obj_ht,obj,-7),LoadReal(tdo_obj_ht,obj,-8),LoadReal(tdo_obj_ht,obj,-9),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,-7,glrf_x)
    call SaveReal(tdo_obj_ht,obj,-8,glrf_y)
    call SaveReal(tdo_obj_ht,obj,-9,glrf_z)
    // - locs
    set i=LoadInteger(tdo_obj_ht,obj,0)
    loop
        exitwhen i<=0
        set x=LoadReal(tdo_obj_ht,baseobj,10)
        set y=LoadReal(tdo_obj_ht,baseobj,11)
        set z=LoadReal(tdo_obj_ht,baseobj,12)
        set loc=LoadInteger(tdo_obj_ht,obj,i)
        call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
        call SaveReal(tdo_loc_ht,loc,1,glrf_x)
        call SaveReal(tdo_loc_ht,loc,2,glrf_y)
        call SaveReal(tdo_loc_ht,loc,3,glrf_z)
        if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
            set baseobj=obj
            set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
            call AdjustObjectDefaultRotationZ(baseobj,obj,a) //改变默认轴角度
        endif
        set i=i-1
    endloop
endfunction
function AdjustLocRotationX takes integer obj,integer loc,real a returns nothing
    local real x=LoadReal(tdo_obj_ht,obj,4)
    local real y=LoadReal(tdo_obj_ht,obj,5)
    local real z=LoadReal(tdo_obj_ht,obj,6)
    local integer baseobj=obj
    call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
    call SaveReal(tdo_loc_ht,loc,1,glrf_x)
    call SaveReal(tdo_loc_ht,loc,2,glrf_y)
    call SaveReal(tdo_loc_ht,loc,3,glrf_z)
    if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
        set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
        call AdjustObjectDefaultRotationX(baseobj,obj,a) //改变默认轴角度
    endif
endfunction
function AdjustLocRotationY takes integer obj,integer loc,real a returns nothing
    local real x=LoadReal(tdo_obj_ht,obj,7)
    local real y=LoadReal(tdo_obj_ht,obj,8)
    local real z=LoadReal(tdo_obj_ht,obj,9)
    local integer baseobj=obj
    call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
    call SaveReal(tdo_loc_ht,loc,1,glrf_x)
    call SaveReal(tdo_loc_ht,loc,2,glrf_y)
    call SaveReal(tdo_loc_ht,loc,3,glrf_z)
    if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
        set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
        call AdjustObjectDefaultRotationY(baseobj,obj,a) //改变默认轴角度
    endif
endfunction
function AdjustLocRotationZ takes integer obj,integer loc,real a returns nothing
    local real x=LoadReal(tdo_obj_ht,obj,10)
    local real y=LoadReal(tdo_obj_ht,obj,11)
    local real z=LoadReal(tdo_obj_ht,obj,12)
    local integer baseobj=obj
    call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
    call SaveReal(tdo_loc_ht,loc,1,glrf_x)
    call SaveReal(tdo_loc_ht,loc,2,glrf_y)
    call SaveReal(tdo_loc_ht,loc,3,glrf_z)
    if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
        set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
        call AdjustObjectDefaultRotationZ(baseobj,obj,a) //改变默认轴角度
    endif
endfunction
function AdjustObjectRotationX takes integer obj,real a returns nothing
    //设置obj的x轴旋转角度
    local integer i
    //
    local real x=LoadReal(tdo_obj_ht,obj,4)
    local real y=LoadReal(tdo_obj_ht,obj,5)
    local real z=LoadReal(tdo_obj_ht,obj,6)
    // - y
    call Rotatef(LoadReal(tdo_obj_ht,obj,7),LoadReal(tdo_obj_ht,obj,8),LoadReal(tdo_obj_ht,obj,9),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,7,glrf_x)
    call SaveReal(tdo_obj_ht,obj,8,glrf_y)
    call SaveReal(tdo_obj_ht,obj,9,glrf_z)
    // - z
    call Rotatef(LoadReal(tdo_obj_ht,obj,10),LoadReal(tdo_obj_ht,obj,11),LoadReal(tdo_obj_ht,obj,12),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,10,glrf_x)
    call SaveReal(tdo_obj_ht,obj,11,glrf_y)
    call SaveReal(tdo_obj_ht,obj,12,glrf_z)
    // - locs
    set i=LoadInteger(tdo_obj_ht,obj,0)
    loop
        exitwhen i<=0
        call AdjustLocRotationX(obj,LoadInteger(tdo_obj_ht,obj,i),a)
        set i=i-1
    endloop
endfunction
function AdjustObjectRotationY takes integer obj,real a returns nothing
    //设置obj的Y轴旋转角度
    local integer i
    //
    local real x=LoadReal(tdo_obj_ht,obj,7)
    local real y=LoadReal(tdo_obj_ht,obj,8)
    local real z=LoadReal(tdo_obj_ht,obj,9)
    // - x
    call Rotatef(LoadReal(tdo_obj_ht,obj,4),LoadReal(tdo_obj_ht,obj,5),LoadReal(tdo_obj_ht,obj,6),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,4,glrf_x)
    call SaveReal(tdo_obj_ht,obj,5,glrf_y)
    call SaveReal(tdo_obj_ht,obj,6,glrf_z)
    // - z
    call Rotatef(LoadReal(tdo_obj_ht,obj,10),LoadReal(tdo_obj_ht,obj,11),LoadReal(tdo_obj_ht,obj,12),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,10,glrf_x)
    call SaveReal(tdo_obj_ht,obj,11,glrf_y)
    call SaveReal(tdo_obj_ht,obj,12,glrf_z)
    // - locs
    set i=LoadInteger(tdo_obj_ht,obj,0)
    loop
        exitwhen i<=0
        call AdjustLocRotationY(obj,LoadInteger(tdo_obj_ht,obj,i),a)
        set i=i-1
    endloop
endfunction
function AdjustObjectRotationZ takes integer obj,real a returns nothing
    //设置obj的Z轴旋转角度
    local integer i
    //
    local real x=LoadReal(tdo_obj_ht,obj,10)
    local real y=LoadReal(tdo_obj_ht,obj,11)
    local real z=LoadReal(tdo_obj_ht,obj,12)
    // - x
    call Rotatef(LoadReal(tdo_obj_ht,obj,4),LoadReal(tdo_obj_ht,obj,5),LoadReal(tdo_obj_ht,obj,6),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,4,glrf_x)
    call SaveReal(tdo_obj_ht,obj,5,glrf_y)
    call SaveReal(tdo_obj_ht,obj,6,glrf_z)
    // - y
    call Rotatef(LoadReal(tdo_obj_ht,obj,7),LoadReal(tdo_obj_ht,obj,8),LoadReal(tdo_obj_ht,obj,9),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,7,glrf_x)
    call SaveReal(tdo_obj_ht,obj,8,glrf_y)
    call SaveReal(tdo_obj_ht,obj,9,glrf_z)
    // - locs
    set i=LoadInteger(tdo_obj_ht,obj,0)
    loop
        exitwhen i<=0
        call AdjustLocRotationZ(obj,LoadInteger(tdo_obj_ht,obj,i),a)
        set i=i-1
    endloop
endfunction
function ResetObjectRotation takes integer obj returns nothing
    local integer i=LoadInteger(tdo_obj_ht,obj,0)
    local integer loc
    //中轴线恢复默认
    call SaveReal(tdo_obj_ht,obj,4,LoadReal(tdo_obj_ht,obj,-4)) // x_x 4~6 中轴线
    call SaveReal(tdo_obj_ht,obj,5,LoadReal(tdo_obj_ht,obj,-5)) // x_y
    call SaveReal(tdo_obj_ht,obj,6,LoadReal(tdo_obj_ht,obj,-6)) // x_z
    call SaveReal(tdo_obj_ht,obj,7,LoadReal(tdo_obj_ht,obj,-7)) // y_x 7~9 中轴线
    call SaveReal(tdo_obj_ht,obj,8,LoadReal(tdo_obj_ht,obj,-8)) // y_y
    call SaveReal(tdo_obj_ht,obj,9,LoadReal(tdo_obj_ht,obj,-9)) // y_z
    call SaveReal(tdo_obj_ht,obj,10,LoadReal(tdo_obj_ht,obj,-10)) // z_x 10~12 中轴线
    call SaveReal(tdo_obj_ht,obj,11,LoadReal(tdo_obj_ht,obj,-11)) // z_y
    call SaveReal(tdo_obj_ht,obj,12,LoadReal(tdo_obj_ht,obj,-12)) // z_z
    loop
        exitwhen i<=0
        set loc=LoadInteger(tdo_obj_ht,obj,i)
        call SaveReal(tdo_loc_ht,loc,1,LoadReal(tdo_loc_ht,loc,-1))
        call SaveReal(tdo_loc_ht,loc,2,LoadReal(tdo_loc_ht,loc,-2))
        call SaveReal(tdo_loc_ht,loc,3,LoadReal(tdo_loc_ht,loc,-3))
        set i=i-1
    endloop
endfunction
function AdjustObjectDefaultScale takes integer obj,real scaleX,real scaleY,real scaleZ, returns nothing
    local integer i=LoadInteger(tdo_obj_ht,obj,0)
    local integer loc
    loop
        exitwhen i<=0
        set loc=LoadInteger(tdo_obj_ht,obj,i)
        call SaveReal(tdo_loc_ht,loc,-1,LoadReal(tdo_loc_ht,loc,-1)*scaleX)
        call SaveReal(tdo_loc_ht,loc,-2,LoadReal(tdo_loc_ht,loc,-2)*scaleY)
        call SaveReal(tdo_loc_ht,loc,-3,LoadReal(tdo_loc_ht,loc,-3)*scaleZ)
        set i=i-1
    endloop
endfunction
function AdjustObjectScale takes integer obj,real scaleX,real scaleY,real scaleZ, returns nothing
    local integer i=LoadInteger(tdo_obj_ht,obj,0)
    local integer loc
    loop
        exitwhen i<=0
        set loc=LoadInteger(tdo_obj_ht,obj,i)
        call SaveReal(tdo_loc_ht,loc,1,LoadReal(tdo_loc_ht,loc,1)*scaleX)
        call SaveReal(tdo_loc_ht,loc,2,LoadReal(tdo_loc_ht,loc,2)*scaleY)
        call SaveReal(tdo_loc_ht,loc,3,LoadReal(tdo_loc_ht,loc,3)*scaleZ)
        set i=i-1
    endloop
endfunction
function SetObjectRotation takes integer obj,real ax,real ay,real az returns nothing
    call ResetObjectRotation(obj)
    call AdjustObjectRotationX(obj,ax)
    call AdjustObjectRotationY(obj,ay)
    call AdjustObjectRotationZ(obj,az)
endfunction
function SetObjectPosition takes integer obj,real x,real y,real z returns nothing
    //设置obj的位置
    call SaveReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),1,x)
    call SaveReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),2,y)
    call SaveReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),3,z)
endfunction
function GetObjectX takes integer obj returns real
    return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),1)
endfunction
function GetObjectY takes integer obj returns real
    return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),2)
endfunction
function GetObjectZ takes integer obj returns real
    return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),3)
endfunction
function GetObjectLoc takes integer obj,integer index returns integer
    return LoadInteger(tdo_obj_ht,obj,index)
endfunction
function GetObjectLocX takes integer obj,integer index returns real
    return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),1)+LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,index),1)
endfunction
function GetObjectLocY takes integer obj,integer index returns real
    return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),2)+LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,index),2)
endfunction
function GetObjectLocZ takes integer obj,integer index returns real
    return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),3)+LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,index),3)
endfunction
function ObjectCountLocs takes integer obj returns integer
    return LoadInteger(tdo_obj_ht,obj,0)
endfunction
function CreateLoc takes real x,real y,real z returns integer
    //新建一个点,(相对)坐标为x,y,z, 返回loc
    local integer i
    set i=1+LoadInteger(tdo_loc_ht,0,0) //点index
    call SaveInteger(tdo_loc_ht,0,0,i) //设置点总数量增加1
    call SaveReal(tdo_loc_ht,i,1,x)  //设置 点的相对坐标
    call SaveReal(tdo_loc_ht,i,2,y)
    call SaveReal(tdo_loc_ht,i,3,z)
    call SaveReal(tdo_loc_ht,i,-1,x)  //记录点的原始相对坐标
    call SaveReal(tdo_loc_ht,i,-2,y)
    call SaveReal(tdo_loc_ht,i,-3,z)
    call SaveBoolean(tdo_loc_ht,i,0,false) //设置点非obj的中心点(默认)
    return i
endfunction
function ObjectAddLoc takes integer obj,integer loc returns integer
    //为obj添加点
    local integer oi
    if HaveSavedInteger(tdo_obj_ht,obj,0) and HaveSavedReal(tdo_loc_ht,loc,1) then
        call SaveInteger(tdo_loc_ht,loc,0,obj) //设置所属obj(被该obj所控制)
        set oi=1+LoadInteger(tdo_obj_ht,obj,0)
        call SaveInteger(tdo_obj_ht,obj,0,oi) //设置数量增加1
        call SaveInteger(tdo_obj_ht,obj,oi,loc) //obj储存点
        return oi //返回在obj内存储的顺序 loc
    endif
    return 0
endfunction
function ObjectCreateLoc takes integer obj,real x,real y,real z returns integer
    //为obj添加点,与中心点的相对坐标,x,y,z
    return ObjectAddLoc(obj,CreateLoc(x,y,z))
endfunction
function MoveLoc takes integer loc,real x,real y,real z returns nothing
    call SaveReal(tdo_loc_ht,loc,1,x)
    call SaveReal(tdo_loc_ht,loc,2,y)
    call SaveReal(tdo_loc_ht,loc,3,z)
endfunction
function GetLocX takes integer loc returns real
    return LoadReal(tdo_loc_ht,loc,1)
endfunction
function GetLocY takes integer loc returns real
    return LoadReal(tdo_loc_ht,loc,2)
endfunction
function GetLocZ takes integer loc returns real
    return LoadReal(tdo_loc_ht,loc,3)
endfunction
function GetObjectOriginLoc takes integer obj returns integer
    //获得obj的中心点 返回loc
    return LoadInteger(tdo_obj_ht,obj,-1)
endfunction
function SetObjectOriginLoc takes integer obj,integer loc returns nothing
    call SaveInteger(tdo_obj_ht,obj,-1,loc) //储存中心点
    call SaveBoolean(tdo_loc_ht,loc,0,true) //设置点属性: 中心点
    call SaveInteger(tdo_loc_ht,loc,-1,obj) //记录是obj的中心点
endfunction
function ResetObjectDefaultRotation takes integer whichObj returns nothing
    call SaveReal(tdo_obj_ht,whichObj,-4,1)
    call SaveReal(tdo_obj_ht,whichObj,-5,0)
    call SaveReal(tdo_obj_ht,whichObj,-6,0)
    call SaveReal(tdo_obj_ht,whichObj,-7,0)
    call SaveReal(tdo_obj_ht,whichObj,-8,1)
    call SaveReal(tdo_obj_ht,whichObj,-9,0)
    call SaveReal(tdo_obj_ht,whichObj,-10,0)
    call SaveReal(tdo_obj_ht,whichObj,-11,0)
    call SaveReal(tdo_obj_ht,whichObj,-12,1)
endfunction
function SetObjectDefaultRotation takes integer obj,real ax,real ay,real az returns nothing
    call ResetObjectDefaultRotation(obj)
    call AdjustObjectDefaultRotationX(obj,obj,ax)
    call AdjustObjectDefaultRotationY(obj,obj,ay)
    call AdjustObjectDefaultRotationZ(obj,obj,az)
endfunction
function ObjectAttachObject takes integer whichObj,integer toObj returns nothing
    //将whichObj绑定到toObj上
    //设置默认中轴线为当前中轴线
    call SaveReal(tdo_obj_ht,whichObj,-4,LoadReal(tdo_obj_ht,whichObj,4))
    call SaveReal(tdo_obj_ht,whichObj,-5,LoadReal(tdo_obj_ht,whichObj,5))
    call SaveReal(tdo_obj_ht,whichObj,-6,LoadReal(tdo_obj_ht,whichObj,6))
    call SaveReal(tdo_obj_ht,whichObj,-7,LoadReal(tdo_obj_ht,whichObj,7))
    call SaveReal(tdo_obj_ht,whichObj,-8,LoadReal(tdo_obj_ht,whichObj,8))
    call SaveReal(tdo_obj_ht,whichObj,-9,LoadReal(tdo_obj_ht,whichObj,9))
    call SaveReal(tdo_obj_ht,whichObj,-10,LoadReal(tdo_obj_ht,whichObj,10))
    call SaveReal(tdo_obj_ht,whichObj,-11,LoadReal(tdo_obj_ht,whichObj,11))
    call SaveReal(tdo_obj_ht,whichObj,-12,LoadReal(tdo_obj_ht,whichObj,12))
    call ObjectAddLoc(toObj,GetObjectOriginLoc(whichObj))
endfunction
function NewObject takes real x,real y,real z returns integer
    //新建obj,中心坐标x,y,z 返回obj值
    local integer i=1+LoadInteger(tdo_obj_ht,0,0)
    call SaveInteger(tdo_obj_ht,0,0,i)
    call SaveInteger(tdo_obj_ht,i,0,0)  //点数初始0
    call SetObjectOriginLoc(i,CreateLoc(x,y,z)) //设置中心点
    //LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,i,-1),1~3) //获得坐标
    call SaveReal(tdo_obj_ht,i,4,1) // x_x 4~6 中轴线
    call SaveReal(tdo_obj_ht,i,5,0) // x_y
    call SaveReal(tdo_obj_ht,i,6,0) // x_z
    call SaveReal(tdo_obj_ht,i,7,0) // y_x 7~9 中轴线
    call SaveReal(tdo_obj_ht,i,8,1) // y_y
    call SaveReal(tdo_obj_ht,i,9,0) // y_z
    call SaveReal(tdo_obj_ht,i,10,0) // z_x 10~12 中轴线
    call SaveReal(tdo_obj_ht,i,11,0) // z_y
    call SaveReal(tdo_obj_ht,i,12,1) // z_z
    //默认中轴线 //恢复默认时用
    call SaveReal(tdo_obj_ht,i,-4,1) // x_x 4~6 中轴线
    call SaveReal(tdo_obj_ht,i,-5,0) // x_y
    call SaveReal(tdo_obj_ht,i,-6,0) // x_z
    call SaveReal(tdo_obj_ht,i,-7,0) // y_x 7~9 中轴线
    call SaveReal(tdo_obj_ht,i,-8,1) // y_y
    call SaveReal(tdo_obj_ht,i,-9,0) // y_z
    call SaveReal(tdo_obj_ht,i,-10,0) // z_x 10~12 中轴线
    call SaveReal(tdo_obj_ht,i,-11,0) // z_y
    call SaveReal(tdo_obj_ht,i,-12,1) // z_z
    return i
endfunction
function DeleteObject takes integer index returns nothing
    local integer i=LoadInteger(tdo_obj_ht,index,0)
    loop
        exitwhen i<=0
        call FlushChildHashtable(tdo_loc_ht,LoadInteger(tdo_obj_ht,index,i))
        set i=i-1
    endloop
    call FlushChildHashtable(tdo_obj_ht,index)
endfunction[/jass] |
评分
-
查看全部评分
|