tgonta
Pixelated Sora Coder
offline
Опыт:
3,160
Активность:
|
И снова о DGUI
Если эти три библиотеки вставить в карту, то worldedit.exe выдаст FATAL ERROR. Пожалуйста, помогите выяснить причину.
» Math
//library Math:
//~~REQUIRES: udg_VectorHash | udg_Matrix3Hash | udg_Matrix4Hash - Hashtable ~~
//~~ udg_VECTOR3_Zero | udg_VECTOR3_oneX | udg_VECTOR3_oneY | udg_VECTOR3_oneZ - Integer ~~
//~~ udg_MATRIX3_Zero | udg_MATRIX3_E | udg_MATRIX4_Zero | udg_MATRIX4_E - Integer ~~
function R2I_n takes real r returns integer
local integer i = R2I(r)
if r < I2R(i)+.5 then
return i
else
return i+1
endif
endfunction
//=====================================================================
function SetVectorX takes integer vec, real x returns nothing
call SaveReal(udg_VectorHash,vec,0,x)
endfunction
function SetVectorY takes integer vec, real y returns nothing
call SaveReal(udg_VectorHash,vec,1,y)
endfunction
function SetVectorZ takes integer vec, real z returns nothing
call SaveReal(udg_VectorHash,vec,2,z)
endfunction
function GetVectorX takes integer vec returns real
return LoadReal(udg_VectorHash,vec,0)
endfunction
function GetVectorY takes integer vec returns real
return LoadReal(udg_VectorHash,vec,1)
endfunction
function GetVectorZ takes integer vec returns real
return LoadReal(udg_VectorHash,vec,2)
endfunction
//=====================================================================
function GetMatrix3m11 takes integer m returns real
return LoadReal(udg_Matrix3Hash,m,0)
endfunction
function GetMatrix3m12 takes integer m returns real
return LoadReal(udg_Matrix3Hash,m,1)
endfunction
function GetMatrix3m13 takes integer m returns real
return LoadReal(udg_Matrix3Hash,m,2)
endfunction
function GetMatrix3m21 takes integer m returns real
return LoadReal(udg_Matrix3Hash,m,3)
endfunction
function GetMatrix3m22 takes integer m returns real
return LoadReal(udg_Matrix3Hash,m,4)
endfunction
function GetMatrix3m23 takes integer m returns real
return LoadReal(udg_Matrix3Hash,m,5)
endfunction
function GetMatrix3m31 takes integer m returns real
return LoadReal(udg_Matrix3Hash,m,6)
endfunction
function GetMatrix3m32 takes integer m returns real
return LoadReal(udg_Matrix3Hash,m,7)
endfunction
function GetMatrix3m33 takes integer m returns real
return LoadReal(udg_Matrix3Hash,m,8)
endfunction
function SetMatrix3m11 takes integer m, real m11 returns nothing
call SaveReal(udg_Matrix3Hash,m,0,m11)
endfunction
function SetMatrix3m12 takes integer m, real m12 returns nothing
call SaveReal(udg_Matrix3Hash,m,1,m12)
endfunction
function SetMatrix3m13 takes integer m, real m13 returns nothing
call SaveReal(udg_Matrix3Hash,m,2,m13)
endfunction
function SetMatrix3m21 takes integer m, real m21 returns nothing
call SaveReal(udg_Matrix3Hash,m,3,m21)
endfunction
function SetMatrix3m22 takes integer m, real m22 returns nothing
call SaveReal(udg_Matrix3Hash,m,4,m22)
endfunction
function SetMatrix3m23 takes integer m, real m23 returns nothing
call SaveReal(udg_Matrix3Hash,m,5,m23)
endfunction
function SetMatrix3m31 takes integer m, real m31 returns nothing
call SaveReal(udg_Matrix3Hash,m,6,m31)
endfunction
function SetMatrix3m32 takes integer m, real m32 returns nothing
call SaveReal(udg_Matrix3Hash,m,7,m32)
endfunction
function SetMatrix3m33 takes integer m, real m33 returns nothing
call SaveReal(udg_Matrix3Hash,m,8,m33)
endfunction
//=====================================================================
function GetMatrix4m11 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,0)
endfunction
function GetMatrix4m12 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,1)
endfunction
function GetMatrix4m13 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,2)
endfunction
function GetMatrix4m14 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,3)
endfunction
function GetMatrix4m21 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,4)
endfunction
function GetMatrix4m22 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,5)
endfunction
function GetMatrix4m23 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,6)
endfunction
function GetMatrix4m24 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,7)
endfunction
function GetMatrix4m31 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,8)
endfunction
function GetMatrix4m32 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,9)
endfunction
function GetMatrix4m33 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,10)
endfunction
function GetMatrix4m34 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,11)
endfunction
function GetMatrix4m41 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,12)
endfunction
function GetMatrix4m42 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,13)
endfunction
function GetMatrix4m43 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,14)
endfunction
function GetMatrix4m44 takes integer m returns real
return LoadReal(udg_Matrix4Hash,m,15)
endfunction
function SetMatrix4m11 takes integer m, real m11 returns nothing
call SaveReal(udg_Matrix4Hash,m,0,m11)
endfunction
function SetMatrix4m12 takes integer m, real m12 returns nothing
call SaveReal(udg_Matrix4Hash,m,1,m12)
endfunction
function SetMatrix4m13 takes integer m, real m13 returns nothing
call SaveReal(udg_Matrix4Hash,m,2,m13)
endfunction
function SetMatrix4m14 takes integer m, real m14 returns nothing
call SaveReal(udg_Matrix4Hash,m,3,m14)
endfunction
function SetMatrix4m21 takes integer m, real m21 returns nothing
call SaveReal(udg_Matrix4Hash,m,4,m21)
endfunction
function SetMatrix4m22 takes integer m, real m22 returns nothing
call SaveReal(udg_Matrix4Hash,m,5,m22)
endfunction
function SetMatrix4m23 takes integer m, real m23 returns nothing
call SaveReal(udg_Matrix4Hash,m,6,m23)
endfunction
function SetMatrix4m24 takes integer m, real m24 returns nothing
call SaveReal(udg_Matrix4Hash,m,7,m24)
endfunction
function SetMatrix4m31 takes integer m, real m31 returns nothing
call SaveReal(udg_Matrix4Hash,m,8,m31)
endfunction
function SetMatrix4m32 takes integer m, real m32 returns nothing
call SaveReal(udg_Matrix4Hash,m,9,m32)
endfunction
function SetMatrix4m33 takes integer m, real m33 returns nothing
call SaveReal(udg_Matrix4Hash,m,10,m33)
endfunction
function SetMatrix4m34 takes integer m, real m34 returns nothing
call SaveReal(udg_Matrix4Hash,m,11,m34)
endfunction
function SetMatrix4m41 takes integer m, real m41 returns nothing
call SaveReal(udg_Matrix4Hash,m,12,m41)
endfunction
function SetMatrix4m42 takes integer m, real m42 returns nothing
call SaveReal(udg_Matrix4Hash,m,13,m42)
endfunction
function SetMatrix4m43 takes integer m, real m43 returns nothing
call SaveReal(udg_Matrix4Hash,m,14,m43)
endfunction
function SetMatrix4m44 takes integer m, real m44 returns nothing
call SaveReal(udg_Matrix4Hash,m,15,m44)
endfunction
//=====================================================================
function CreateVector_0 takes nothing returns integer
local integer i = LoadInteger(udg_VectorHash,0,0) + 1
call SetVectorX(i,0.)
call SetVectorY(i,0.)
call SetVectorZ(i,0.)
call SaveInteger(udg_VectorHash,0,0,i)
return i
endfunction
function CreateVector_1 takes real x, real y, real z returns integer
local integer i = LoadInteger(udg_VectorHash,0,0) + 1
call SetVectorX(i,x)
call SetVectorY(i,y)
call SetVectorZ(i,z)
call SaveInteger(udg_VectorHash,0,0,i)
return i
endfunction
function CreateVector_2 takes integer v returns integer
local integer i = LoadInteger(udg_VectorHash,0,0) + 1
call SetVectorX(i,GetVectorX(v))
call SetVectorY(i,GetVectorY(v))
call SetVectorZ(i,GetVectorZ(v))
call SaveInteger(udg_VectorHash,0,0,i)
return i
endfunction
function SetVectorValues takes integer v, real x, real y, real z returns integer
call SetVectorX(v,x)
call SetVectorY(v,y)
call SetVectorZ(v,z)
return v
endfunction
function GetVectorLength takes integer v returns real
return SquareRoot(GetVectorX(v)*GetVectorX(v)+GetVectorY(v)*GetVectorY(v)+GetVectorZ(v)*GetVectorZ(v))
endfunction
function GetVectorLengthSq takes integer v returns real
return GetVectorX(v)*GetVectorX(v)+GetVectorY(v)*GetVectorY(v)+GetVectorZ(v)*GetVectorZ(v)
endfunction
function GetVectorData takes integer v returns string
return "Vector3 id " + I2S(v) + "\nx = " + R2S(GetVectorX(v)) + " y = " + R2S(GetVectorY(v)) + " z = " + R2S(GetVectorZ(v))
endfunction
function Vec3Add takes integer Output,integer v1,integer v2 returns integer
call SetVectorX(Output,GetVectorX(v1)+GetVectorX(v2))
call SetVectorY(Output,GetVectorY(v1)+GetVectorY(v2))
call SetVectorZ(Output,GetVectorZ(v1)+GetVectorZ(v2))
return Output
endfunction
function Vec3Subtract takes integer Output,integer v1,integer v2 returns integer
call SetVectorX(Output,GetVectorX(v1)-GetVectorX(v2))
call SetVectorY(Output,GetVectorY(v1)-GetVectorY(v2))
call SetVectorZ(Output,GetVectorZ(v1)-GetVectorZ(v2))
return Output
endfunction
function Vec3Scale takes integer Output, integer v, real r returns integer
call SetVectorX(Output,GetVectorX(v)*r)
call SetVectorY(Output,GetVectorY(v)*r)
call SetVectorZ(Output,GetVectorZ(v)*r)
return Output
endfunction
function Vec3Division takes integer Output,integer v,real r returns integer
call SetVectorX(Output,GetVectorX(v)/r)
call SetVectorY(Output,GetVectorY(v)/r)
call SetVectorZ(Output,GetVectorZ(v)/r)
return Output
endfunction
function Vec3Normalize takes integer Output,integer v returns integer
local real len = GetVectorLength(v)
call SetVectorX(Output,GetVectorX(v)/len)
call SetVectorY(Output,GetVectorY(v)/len)
call SetVectorZ(Output,GetVectorZ(v)/len)
return Output
endfunction
function Vec3Dot takes integer v1,integer v2 returns real
return GetVectorX(v1)*GetVectorX(v2)+GetVectorY(v1)*GetVectorY(v2)+GetVectorZ(v1)*GetVectorZ(v2)
endfunction
function Vec3Cross takes integer Output,integer v1,integer v2 returns integer
local real x = GetVectorY(v1)*GetVectorZ(v2)-GetVectorZ(v1)*GetVectorY(v2)
local real y = GetVectorZ(v1)*GetVectorX(v2)-GetVectorX(v1)*GetVectorZ(v2)
local real z = GetVectorX(v1)*GetVectorY(v2)-GetVectorY(v1)*GetVectorX(v2)
call SetVectorX(Output,x)
call SetVectorY(Output,y)
call SetVectorZ(Output,z)
return Output
endfunction
function Vec3Transform_1 takes integer Output,integer v,integer m returns integer
local real x = GetVectorX(v)*GetMatrix3m11(m)+GetVectorY(v)*GetMatrix3m21(m)+GetVectorZ(v)*GetMatrix3m31(m)
local real y = GetVectorX(v)*GetMatrix3m12(m)+GetVectorY(v)*GetMatrix3m22(m)+GetVectorZ(v)*GetMatrix3m32(m)
local real z = GetVectorX(v)*GetMatrix3m13(m)+GetVectorY(v)*GetMatrix3m23(m)+GetVectorZ(v)*GetMatrix3m33(m)
call SetVectorX(Output,x)
call SetVectorY(Output,y)
call SetVectorZ(Output,z)
return Output
endfunction
function Vec3Transform_2 takes integer Output,integer v,integer m returns integer
local real x = GetVectorX(v)*GetMatrix4m11(m)+GetVectorY(v)*GetMatrix4m21(m)+GetVectorZ(v)*GetMatrix4m31(m)+GetMatrix4m41(m)
local real y = GetVectorX(v)*GetMatrix4m12(m)+GetVectorY(v)*GetMatrix4m22(m)+GetVectorZ(v)*GetMatrix4m32(m)+GetMatrix4m42(m)
local real z = GetVectorX(v)*GetMatrix4m13(m)+GetVectorY(v)*GetMatrix4m23(m)+GetVectorZ(v)*GetMatrix4m33(m)+GetMatrix4m43(m)
local real w = GetVectorX(v)*GetMatrix4m14(m)+GetVectorY(v)*GetMatrix4m24(m)+GetVectorZ(v)*GetMatrix4m34(m)+GetMatrix4m44(m)
call SetVectorX(Output,x/w)
call SetVectorY(Output,y/w)
call SetVectorZ(Output,z/w)
return Output
endfunction
//=====================================================================
function CreateMatrix3_0 takes nothing returns integer
local integer i = LoadInteger(udg_Matrix3Hash,0,0) + 1
call SetMatrix3m11(i,0.)
call SetMatrix3m12(i,0.)
call SetMatrix3m13(i,0.)
call SetMatrix3m21(i,0.)
call SetMatrix3m22(i,0.)
call SetMatrix3m23(i,0.)
call SetMatrix3m31(i,0.)
call SetMatrix3m32(i,0.)
call SetMatrix3m33(i,0.)
call SaveInteger(udg_Matrix3Hash,0,0,i)
return i
endfunction
function CreateMatrix3_1 takes real r11,real r12,real r13,real r21,real r22,real r23,real r31,real r32,real r33 returns integer
local integer i = LoadInteger(udg_Matrix3Hash,0,0) + 1
call SetMatrix3m11(i,r11)
call SetMatrix3m12(i,r12)
call SetMatrix3m13(i,r13)
call SetMatrix3m21(i,r21)
call SetMatrix3m22(i,r22)
call SetMatrix3m23(i,r23)
call SetMatrix3m31(i,r31)
call SetMatrix3m32(i,r32)
call SetMatrix3m33(i,r33)
call SaveInteger(udg_Matrix3Hash,0,0,i)
return i
endfunction
function CreateMatrix3_2 takes integer m returns integer
local integer i = LoadInteger(udg_Matrix3Hash,0,0) + 1
call SetMatrix3m11(i,GetMatrix3m11(m))
call SetMatrix3m12(i,GetMatrix3m12(m))
call SetMatrix3m13(i,GetMatrix3m13(m))
call SetMatrix3m21(i,GetMatrix3m21(m))
call SetMatrix3m22(i,GetMatrix3m22(m))
call SetMatrix3m23(i,GetMatrix3m23(m))
call SetMatrix3m31(i,GetMatrix3m31(m))
call SetMatrix3m32(i,GetMatrix3m32(m))
call SetMatrix3m33(i,GetMatrix3m33(m))
call SaveInteger(udg_Matrix3Hash,0,0,i)
return i
endfunction
function SetMatrix3Values takes integer m,real r11,real r12,real r13,real r21,real r22,real r23,real r31,real r32,real r33 returns integer
call SetMatrix3m11(m,r11)
call SetMatrix3m12(m,r12)
call SetMatrix3m13(m,r13)
call SetMatrix3m21(m,r21)
call SetMatrix3m22(m,r22)
call SetMatrix3m23(m,r23)
call SetMatrix3m31(m,r31)
call SetMatrix3m32(m,r32)
call SetMatrix3m33(m,r33)
return m
endfunction
function GetMatrix3Data takes integer m returns string
return "Matrux3 id " + I2S(m) + "\n" + R2S(GetMatrix3m11(m)) + " " + R2S(GetMatrix3m12(m)) + " " + R2S(GetMatrix3m13(m)) + "\n" + R2S(GetMatrix3m21(m)) + " " + R2S(GetMatrix3m22(m)) + " " + R2S(GetMatrix3m23(m)) + "\n" + R2S(GetMatrix3m31(m)) + " " + R2S(GetMatrix3m32(m)) + " " + R2S(GetMatrix3m33(m))
endfunction
function Matrix3Multiply takes integer Output,integer m1,integer m2 returns integer
local real r11 = GetMatrix3m11(m1)*GetMatrix3m11(m2)+GetMatrix3m21(m1)*GetMatrix3m12(m2)+GetMatrix3m31(m1)*GetMatrix3m13(m2)
local real r12 = GetMatrix3m12(m1)*GetMatrix3m11(m2)+GetMatrix3m22(m1)*GetMatrix3m12(m2)+GetMatrix3m32(m1)*GetMatrix3m13(m2)
local real r13 = GetMatrix3m13(m1)*GetMatrix3m11(m2)+GetMatrix3m23(m1)*GetMatrix3m12(m2)+GetMatrix3m33(m1)*GetMatrix3m13(m2)
local real r21 = GetMatrix3m11(m1)*GetMatrix3m21(m2)+GetMatrix3m21(m1)*GetMatrix3m22(m2)+GetMatrix3m31(m1)*GetMatrix3m23(m2)
local real r22 = GetMatrix3m12(m1)*GetMatrix3m21(m2)+GetMatrix3m22(m1)*GetMatrix3m22(m2)+GetMatrix3m32(m1)*GetMatrix3m23(m2)
local real r23 = GetMatrix3m13(m1)*GetMatrix3m21(m2)+GetMatrix3m23(m1)*GetMatrix3m22(m2)+GetMatrix3m33(m1)*GetMatrix3m23(m2)
local real r31 = GetMatrix3m11(m1)*GetMatrix3m31(m2)+GetMatrix3m21(m1)*GetMatrix3m32(m2)+GetMatrix3m31(m1)*GetMatrix3m33(m2)
local real r32 = GetMatrix3m12(m1)*GetMatrix3m31(m2)+GetMatrix3m22(m1)*GetMatrix3m32(m2)+GetMatrix3m32(m1)*GetMatrix3m33(m2)
local real r33 = GetMatrix3m13(m1)*GetMatrix3m31(m2)+GetMatrix3m23(m1)*GetMatrix3m32(m2)+GetMatrix3m33(m1)*GetMatrix3m33(m2)
return SetMatrix3Values(Output,r11,r12,r13,r21,r22,r23,r31,r32,r33)
endfunction
function Matrix3Scaling takes integer Output,real x,real y,real z returns integer
return SetMatrix3Values(Output,x,0.,0.,0.,y,0.,0.,0.,z)
endfunction
function Matrix3RotationX takes integer Output,real a returns integer
return SetMatrix3Values(Output,1.,0.,0.,0.,Cos(a),-1.*Sin(a),0.,Sin(a),Cos(a))
endfunction
function Matrix3RotationY takes integer Output,real a returns integer
return SetMatrix3Values(Output,Cos(a),0.,Sin(a),0.,1.,0.,-1.*Sin(a),0.,Cos(a))
endfunction
function Matrix3RotationZ takes integer Output,real a returns integer
return SetMatrix3Values(Output,Cos(a),-1.*Sin(a),0.,Sin(a),Cos(a),0.,0.,0.,1.)
endfunction
function Matrix3RotationAxis takes integer Output,integer v,real a returns integer
local real cosa = Cos(a)
local real sina = Sin(a)
local real r11 = cosa+(1-cosa)*GetVectorX(v)*GetVectorX(v)
local real r12 = (1-cosa)*GetVectorX(v)*GetVectorY(v)-sina*GetVectorZ(v)
local real r13 = (1-cosa)*GetVectorX(v)*GetVectorZ(v)+ sina*GetVectorY(v)
local real r21 = (1-cosa)*GetVectorY(v)*GetVectorX(v)+sina*GetVectorZ(v)
local real r22 = cosa+(1-cosa)*GetVectorY(v)*GetVectorY(v)
local real r23 = (1-cosa)*GetVectorY(v)*GetVectorZ(v)-sina*GetVectorX(v)
local real r31 = (1-cosa)*GetVectorZ(v)*GetVectorX(v)-sina*GetVectorY(v)
local real r32 = (1-cosa)*GetVectorZ(v)*GetVectorY(v)+ sina*GetVectorX(v)
local real r33 = cosa+(1-cosa)*GetVectorZ(v)*GetVectorZ(v)
return SetMatrix3Values(Output,r11,r12,r13,r21,r22,r23,r31,r32,r33)
endfunction
function Matrix3RotationYawPitchRoll takes integer Output,real Yaw,real Pitch,real Roll returns integer
local real cosa = Cos(Yaw)
local real sina = Sin(Yaw)
local real cosb = Cos(Pitch)
local real sinb = Sin(Pitch)
local real cosy = Cos(Roll)
local real siny = Sin(Roll)
local real r11 = cosa*cosb
local real r12 = cosa*sinb*siny-sina*cosy
local real r13 = cosa*sinb*cosy+sina*siny
local real r21 = sina*cosb
local real r22 = sina*sinb*siny+cosa*cosy
local real r23 = sina*sinb*cosy-cosa*siny
local real r31 = -1.*sinb
local real r32 = cosb*siny
local real r33 = cosb*cosy
return SetMatrix3Values(Output,r11,r12,r13,r21,r22,r23,r31,r32,r33)
endfunction
//=====================================================================
function CreateMatrix4_0 takes nothing returns integer
local integer i = LoadInteger(udg_Matrix4Hash,0,0) + 1
call SetMatrix4m11(i,0.)
call SetMatrix4m12(i,0.)
call SetMatrix4m13(i,0.)
call SetMatrix4m14(i,0.)
call SetMatrix4m21(i,0.)
call SetMatrix4m22(i,0.)
call SetMatrix4m23(i,0.)
call SetMatrix4m24(i,0.)
call SetMatrix4m31(i,0.)
call SetMatrix4m32(i,0.)
call SetMatrix4m33(i,0.)
call SetMatrix4m34(i,0.)
call SetMatrix4m41(i,0.)
call SetMatrix4m42(i,0.)
call SetMatrix4m43(i,0.)
call SetMatrix4m44(i,0.)
call SaveInteger(udg_Matrix4Hash,0,0,i)
return i
endfunction
function CreateMatrix4_1 takes real r11,real r12,real r13,real r14,real r21,real r22,real r23,real r24,real r31,real r32,real r33,real r34,real r41,real r42,real r43,real r44 returns integer
local integer i = LoadInteger(udg_Matrix4Hash,0,0) + 1
call SetMatrix4m11(i,r11)
call SetMatrix4m12(i,r12)
call SetMatrix4m13(i,r13)
call SetMatrix4m14(i,r14)
call SetMatrix4m21(i,r21)
call SetMatrix4m22(i,r22)
call SetMatrix4m23(i,r23)
call SetMatrix4m24(i,r24)
call SetMatrix4m31(i,r31)
call SetMatrix4m32(i,r32)
call SetMatrix4m33(i,r33)
call SetMatrix4m34(i,r34)
call SetMatrix4m41(i,r41)
call SetMatrix4m42(i,r42)
call SetMatrix4m43(i,r43)
call SetMatrix4m44(i,r44)
call SaveInteger(udg_Matrix4Hash,0,0,i)
return i
endfunction
function CreateMatrix4_2 takes integer m returns integer
local integer i = LoadInteger(udg_Matrix4Hash,0,0) + 1
call SetMatrix4m11(i,GetMatrix4m11(m))
call SetMatrix4m12(i,GetMatrix4m12(m))
call SetMatrix4m13(i,GetMatrix4m13(m))
call SetMatrix4m14(i,GetMatrix4m14(m))
call SetMatrix4m21(i,GetMatrix4m21(m))
call SetMatrix4m22(i,GetMatrix4m22(m))
call SetMatrix4m23(i,GetMatrix4m23(m))
call SetMatrix4m24(i,GetMatrix4m24(m))
call SetMatrix4m31(i,GetMatrix4m31(m))
call SetMatrix4m32(i,GetMatrix4m32(m))
call SetMatrix4m33(i,GetMatrix4m33(m))
call SetMatrix4m34(i,GetMatrix4m34(m))
call SetMatrix4m41(i,GetMatrix4m41(m))
call SetMatrix4m42(i,GetMatrix4m42(m))
call SetMatrix4m43(i,GetMatrix4m43(m))
call SetMatrix4m44(i,GetMatrix4m44(m))
call SaveInteger(udg_Matrix4Hash,0,0,i)
return i
endfunction
function CreateMatrix4_3 takes integer m returns integer
local integer i = LoadInteger(udg_Matrix4Hash,0,0) + 1
call SetMatrix4m11(i,GetMatrix3m11(m))
call SetMatrix4m12(i,GetMatrix3m12(m))
call SetMatrix4m13(i,GetMatrix3m13(m))
call SetMatrix4m14(i,0.)
call SetMatrix4m21(i,GetMatrix3m21(m))
call SetMatrix4m22(i,GetMatrix3m22(m))
call SetMatrix4m23(i,GetMatrix3m23(m))
call SetMatrix4m24(i,0.)
call SetMatrix4m31(i,GetMatrix3m31(m))
call SetMatrix4m32(i,GetMatrix3m32(m))
call SetMatrix4m33(i,GetMatrix3m33(m))
call SetMatrix4m34(i,0.)
call SetMatrix4m41(i,0.)
call SetMatrix4m42(i,0.)
call SetMatrix4m43(i,0.)
call SetMatrix4m44(i,1.)
call SaveInteger(udg_Matrix4Hash,0,0,i)
return i
endfunction
function SetMatrix4Values takes integer m,real r11,real r12,real r13,real r14,real r21,real r22,real r23,real r24,real r31,real r32,real r33,real r34,real r41,real r42,real r43,real r44 returns integer
call SetMatrix4m11(m,r11)
call SetMatrix4m12(m,r12)
call SetMatrix4m13(m,r13)
call SetMatrix4m14(m,r14)
call SetMatrix4m21(m,r21)
call SetMatrix4m22(m,r22)
call SetMatrix4m23(m,r23)
call SetMatrix4m24(m,r24)
call SetMatrix4m31(m,r31)
call SetMatrix4m32(m,r32)
call SetMatrix4m33(m,r33)
call SetMatrix4m34(m,r34)
call SetMatrix4m41(m,r41)
call SetMatrix4m42(m,r42)
call SetMatrix4m43(m,r43)
call SetMatrix4m44(m,r44)
return m
endfunction
function GetMatrix4Data takes integer m returns string
return "Matrux4 id " + I2S(m) + "\n" + R2S(GetMatrix4m11(m)) + " " + R2S(GetMatrix4m12(m)) + " " + R2S(GetMatrix4m13(m)) + " " + R2S(GetMatrix4m14(m)) + "\n" + R2S(GetMatrix4m21(m)) + " " + R2S(GetMatrix4m22(m)) + " " + R2S(GetMatrix4m23(m)) + " " + R2S(GetMatrix4m24(m)) + "\n" + R2S(GetMatrix4m31(m)) + " " + R2S(GetMatrix4m32(m)) + " " + R2S(GetMatrix4m33(m)) + " " + R2S(GetMatrix4m34(m)) + "\n" + R2S(GetMatrix4m41(m)) + " " + R2S(GetMatrix4m42(m)) + " " + R2S(GetMatrix4m43(m)) + " " + R2S(GetMatrix4m44(m))
endfunction
function Matrix4Multiply takes integer Output,integer m1,integer m2 returns integer
local real r11 = GetMatrix4m11(m1)*GetMatrix4m11(m2)+GetMatrix4m21(m1)*GetMatrix4m12(m2)+GetMatrix4m31(m1)*GetMatrix4m13(m2)+GetMatrix4m41(m1)*GetMatrix4m14(m2)
local real r12 = GetMatrix4m12(m1)*GetMatrix4m11(m2)+GetMatrix4m22(m1)*GetMatrix4m12(m2)+GetMatrix4m32(m1)*GetMatrix4m13(m2)+GetMatrix4m42(m1)*GetMatrix4m14(m2)
local real r13 = GetMatrix4m13(m1)*GetMatrix4m11(m2)+GetMatrix4m23(m1)*GetMatrix4m12(m2)+GetMatrix4m33(m1)*GetMatrix4m13(m2)+GetMatrix4m43(m1)*GetMatrix4m14(m2)
local real r14 = GetMatrix4m14(m1)*GetMatrix4m11(m2)+GetMatrix4m24(m1)*GetMatrix4m12(m2)+GetMatrix4m34(m1)*GetMatrix4m13(m2)+GetMatrix4m44(m1)*GetMatrix4m14(m2)
local real r21 = GetMatrix4m11(m1)*GetMatrix4m21(m2)+GetMatrix4m21(m1)*GetMatrix4m22(m2)+GetMatrix4m31(m1)*GetMatrix4m23(m2)+GetMatrix4m41(m1)*GetMatrix4m24(m2)
local real r22 = GetMatrix4m12(m1)*GetMatrix4m21(m2)+GetMatrix4m22(m1)*GetMatrix4m22(m2)+GetMatrix4m32(m1)*GetMatrix4m23(m2)+GetMatrix4m42(m1)*GetMatrix4m24(m2)
local real r23 = GetMatrix4m13(m1)*GetMatrix4m21(m2)+GetMatrix4m23(m1)*GetMatrix4m22(m2)+GetMatrix4m33(m1)*GetMatrix4m23(m2)+GetMatrix4m43(m1)*GetMatrix4m24(m2)
local real r24 = GetMatrix4m14(m1)*GetMatrix4m21(m2)+GetMatrix4m24(m1)*GetMatrix4m22(m2)+GetMatrix4m34(m1)*GetMatrix4m23(m2)+GetMatrix4m44(m1)*GetMatrix4m24(m2)
local real r31 = GetMatrix4m11(m1)*GetMatrix4m31(m2)+GetMatrix4m21(m1)*GetMatrix4m32(m2)+GetMatrix4m31(m1)*GetMatrix4m33(m2)+GetMatrix4m41(m1)*GetMatrix4m34(m2)
local real r32 = GetMatrix4m12(m1)*GetMatrix4m31(m2)+GetMatrix4m22(m1)*GetMatrix4m32(m2)+GetMatrix4m32(m1)*GetMatrix4m33(m2)+GetMatrix4m42(m1)*GetMatrix4m34(m2)
local real r33 = GetMatrix4m13(m1)*GetMatrix4m31(m2)+GetMatrix4m22(m1)*GetMatrix4m32(m2)+GetMatrix4m33(m1)*GetMatrix4m33(m2)+GetMatrix4m43(m1)*GetMatrix4m34(m2)
local real r34 = GetMatrix4m14(m1)*GetMatrix4m31(m2)+GetMatrix4m24(m1)*GetMatrix4m32(m2)+GetMatrix4m34(m1)*GetMatrix4m33(m2)+GetMatrix4m44(m1)*GetMatrix4m34(m2)
local real r41 = GetMatrix4m11(m1)*GetMatrix4m41(m2)+GetMatrix4m21(m1)*GetMatrix4m42(m2)+GetMatrix4m31(m1)*GetMatrix4m43(m2)+GetMatrix4m41(m1)*GetMatrix4m44(m2)
local real r42 = GetMatrix4m12(m1)*GetMatrix4m41(m2)+GetMatrix4m22(m1)*GetMatrix4m42(m2)+GetMatrix4m32(m1)*GetMatrix4m43(m2)+GetMatrix4m42(m1)*GetMatrix4m44(m2)
local real r43 = GetMatrix4m13(m1)*GetMatrix4m41(m2)+GetMatrix4m23(m1)*GetMatrix4m42(m2)+GetMatrix4m33(m1)*GetMatrix4m43(m2)+GetMatrix4m43(m1)*GetMatrix4m44(m2)
local real r44 = GetMatrix4m14(m1)*GetMatrix4m41(m2)+GetMatrix4m24(m1)*GetMatrix4m42(m2)+GetMatrix4m34(m1)*GetMatrix4m43(m2)+GetMatrix4m44(m1)*GetMatrix4m44(m2)
return SetMatrix4Values(Output,r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,r44)
endfunction
function InitMathLib takes nothing returns nothing
set udg_VECTOR3_Zero = CreateVector_0()
set udg_VECTOR3_oneX = CreateVector_1(1.,0.,0.)
set udg_VECTOR3_oneY = CreateVector_1(0.,1.,0.)
set udg_VECTOR3_oneZ = CreateVector_1(0.,0.,1.)
set udg_MATRIX3_Zero = CreateMatrix3_0()
set udg_MATRIX3_E = CreateMatrix3_1(1.,0.,0.,0.,1.,0.,0.,0.,1.)
set udg_MATRIX4_Zero = CreateMatrix4_0()
set udg_MATRIX4_E = CreateMatrix4_1(1.,0.,0.,0.,0.,1.,0.,0.,0.,0.,1.,0.,0.,0.,0.,1.)
endfunction
//library Math ends
» Camera
//library Camera:
//~~REQUIRES: udg_CameraHash - Hashtable ~~
//~~ udg_TypeUnit - Integer ~~
//~~ udg_GL4Cam - Location
//~~ udg_AtUnit - Unit ~~
//~~ udg_WidthScreen | udg_HeightScreen | udg_AspectRatio | udg_DeltaZ - Real ~~
//library Camera:
function GetCamCustomValue takes integer cam returns integer
return LoadInteger(udg_CameraHash,cam,0)
endfunction
function GetCamChange takes integer cam returns boolean
return LoadBoolean(udg_CameraHash,cam,1)
endfunction
function GetCamEye takes integer cam returns integer
return LoadInteger(udg_CameraHash,cam,2)
endfunction
function GetCamAt takes integer cam returns integer
return LoadInteger(udg_CameraHash,cam,3)
endfunction
function GetCamDistance takes integer cam returns real
return LoadReal(udg_CameraHash,cam,4)
endfunction
function GetCamYaw takes integer cam returns real
return LoadReal(udg_CameraHash,cam,5)
endfunction
function GetCamPitch takes integer cam returns real
return LoadReal(udg_CameraHash,cam,6)
endfunction
function GetCamRoll takes integer cam returns real
return LoadReal(udg_CameraHash,cam,7)
endfunction
function GetCamAxisX takes integer cam returns integer
return LoadInteger(udg_CameraHash,cam,8)
endfunction
function GetCamAxisY takes integer cam returns integer
return LoadInteger(udg_CameraHash,cam,9)
endfunction
function GetCamAxisZ takes integer cam returns integer
return LoadInteger(udg_CameraHash,cam,10)
endfunction
function GetCamView takes integer cam returns integer
return LoadInteger(udg_CameraHash,cam,11)
endfunction
function GetCamProjection takes integer cam returns integer
return LoadInteger(udg_CameraHash,cam,12)
endfunction
function SetCamCustomValue takes integer cam, integer cv returns nothing
call SaveInteger(udg_CameraHash,cam,0,cv)
endfunction
function SetCamChange takes integer cam, boolean change returns nothing
call SaveBoolean(udg_CameraHash,cam,1,change)
endfunction
function SetCamEye takes integer cam, integer eye returns nothing
call SaveInteger(udg_CameraHash,cam,2,eye)
endfunction
function SetCamAt takes integer cam, integer at returns nothing
call SaveInteger(udg_CameraHash,cam,3,at)
endfunction
function SetCamDistance takes integer cam, real distance returns nothing
call SaveReal(udg_CameraHash,cam,4,distance)
endfunction
function SetCamYaw takes integer cam, real yaw returns nothing
call SaveReal(udg_CameraHash,cam,5,yaw)
endfunction
function SetCamPitch takes integer cam, real pitch returns nothing
call SaveReal(udg_CameraHash,cam,6,pitch)
endfunction
function SetCamRoll takes integer cam, real roll returns nothing
call SaveReal(udg_CameraHash,cam,7,roll)
endfunction
function SetCamAxisX takes integer cam, integer axisx returns nothing
call SaveInteger(udg_CameraHash,cam,8,axisx)
endfunction
function SetCamAxisY takes integer cam, integer axisy returns nothing
call SaveInteger(udg_CameraHash,cam,9,axisy)
endfunction
function SetCamAxisZ takes integer cam, integer axisz returns nothing
call SaveInteger(udg_CameraHash,cam,10,axisz)
endfunction
function SetCamView takes integer cam, integer view returns nothing
call SaveInteger(udg_CameraHash,cam,11,view)
endfunction
function SetCamProjection takes integer cam, integer projection returns nothing
call SaveInteger(udg_CameraHash,cam,12,projection)
endfunction
//=====================================================================
function Matrix4Perspective1 takes integer Output,real fovy,real Aspect,real zn,real zf returns integer
local real r11 = 2. * zn / fovy
local real r12 = 0.
local real r13 = 0.
local real r14 = 0.
local real r21 = 0.
local real r22 = 2. * zn / Aspect
local real r23 = 0.
local real r24 = 0.
local real r31 = 0.
local real r32 = 0.
local real r33 = zf / ( zf - zn )
local real r34 = 1.
local real r41 = 0.
local real r42 = 0.
local real r43 = zn*zf/(zn-zf)
local real r44 = 0.
//return SetMatrix4Values(Output,r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,r44)
endfunction
function Matrix4Perspective2 takes integer Output,real n,real f,real r,real l,real t,real b returns integer
local real r11 = 2.*n/(r-l)
local real r12 = 0.
local real r13 = (r+l)/(r-l)
local real r14 = 0.
local real r21 = 0.
local real r22 = 2.*n/(t-b)
local real r23 = (t+b)/(t-b)
local real r24 = 0.
local real r31 = 0.
local real r32 = 0.
local real r33 = -1.*(f+n)/(f-n)
local real r34 = -2.*f*n/(f-n)
local real r41 = 0.
local real r42 = 0.
local real r43 = -1
local real r44 = 0.
return SetMatrix4Values(Output,r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,r44)
endfunction
function Matrix4Look takes integer Output,integer PosCamera,integer AxisX,integer AxisY,integer AxisZ returns integer
local real r11 = GetVectorX(AxisX)
local real r12 = GetVectorX(AxisY)
local real r13 = GetVectorX(AxisZ)
local real r14 = 0.
local real r21 = GetVectorY(AxisX)
local real r22 = GetVectorY(AxisY)
local real r23 = GetVectorY(AxisZ)
local real r24 = 0.
local real r31 = GetVectorZ(AxisX)
local real r32 = GetVectorZ(AxisY)
local real r33 = GetVectorZ(AxisZ)
local real r34 = 0.
local real r41 = -1.*Vec3Dot(AxisX,PosCamera)
local real r42 = -1.*Vec3Dot(AxisY,PosCamera)
local real r43 = -1.*Vec3Dot(AxisZ,PosCamera)
local real r44 = 1.
return SetMatrix4Values(Output,r11,r12,r13,r14,r21,r22,r23,r24,r31,r32,r33,r34,r41,r42,r43,r44)
endfunction
function Win2World takes integer cam,real X,real Y,real Range returns integer
local integer eye = GetCamEye(cam)
local integer axisx = GetCamAxisZ(cam)
local integer axisy = GetCamAxisY(cam)
local integer axisz = GetCamAxisZ(cam)
local real x = GetVectorX(eye) + GetVectorX(axisz) * Range + X * GetVectorX(axisx) * udg_WidthScreen * Range + Y * GetVectorX(axisy) * udg_HeightScreen * Range
local real y = GetVectorY(eye) + GetVectorX(axisz) * Range + X * GetVectorY(axisx) * udg_WidthScreen * Range + Y * GetVectorY(axisy) * udg_HeightScreen * Range
local real z = GetVectorZ(eye) + GetVectorX(axisz) * Range + X * GetVectorZ(axisx) * udg_WidthScreen * Range + Y * GetVectorZ(axisy) * udg_HeightScreen * Range
return CreateVector_1(x,y,z)
endfunction
function World2Win takes integer cam,real X,real Y,real Z returns integer
local integer Pos = CreateVector_1(X,Y,Z)
local boolean b
call Vec3Transform_2(Pos,Pos,GetCamView(cam))
set b = GetVectorZ(Pos) < 0
call Vec3Transform_2(Pos,Pos,GetCamProjection(cam))
if b then
call SetVectorZ(Pos,-1.*GetVectorZ(Pos))
endif
return Pos
endfunction
function UpdateDistanceYawPitch takes integer cam returns nothing
local integer eye = GetCamEye(cam)
local integer at = GetCamAt(cam)
local real dx = GetVectorX(at) - GetVectorX(eye)
local real dy = GetVectorY(at) - GetVectorY(eye)
local real dz = GetVectorZ(at) - GetVectorZ(eye)
local real dist = SquareRoot(dx*dx+dy*dy+dz*dz)
local real len2d = SquareRoot(dx*dx+dy*dy)
local real yaw = Atan2(dy,dx)
local real pitch = Atan2(dz,len2d)
call SetCamDistance(cam,dist)
call SetCamYaw(cam,yaw)
call SetCamPitch(cam,pitch)
endfunction
function UpdateAxisMatrix takes integer cam returns nothing
local integer eye = GetCamEye(cam)
local integer at = GetCamAt(cam)
local integer view = GetCamView(cam)
local real roll = GetCamRoll(cam)
local integer axisx = GetCamAxisZ(cam)
local integer axisy = GetCamAxisY(cam)
local integer axisz = GetCamAxisZ(cam)
local integer normalizer = Vec3Subtract(axisz,at,eye)
local integer crossnorm = Vec3Cross(axisx,axisz,udg_VECTOR3_oneZ)
local integer crosstrans = Vec3Cross(axisy,axisx,axisz)
local integer mat = CreateMatrix3_0()
call Vec3Normalize(axisz,normalizer)
set mat = Matrix3RotationAxis(mat,axisz,-1.*roll)
call Vec3Normalize(axisx,crossnorm)
call Vec3Transform_1(axisy,crosstrans,mat)
call Vec3Transform_1(axisx,axisx,mat)
call Matrix4Look(view,eye,axisx,axisy,axisz)
endfunction
function ApplyCameraForPlayer takes integer cam,player p,boolean IgnorChange returns boolean
local real yaw = GetCamYaw(cam)
local real pitch = GetCamPitch(cam)
local real roll = GetCamRoll(cam)
local real dist = GetCamDistance(cam)
local integer at = GetCamAt(cam)
local boolean change = GetCamChange(cam)
if GetLocalPlayer() == p then
call SetCameraField(CAMERA_FIELD_ROTATION,yaw*57.295827,0.)
call SetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK,pitch*57.295827,0.)
call SetCameraField(CAMERA_FIELD_ROLL,roll*57.295827,0.)
call SetCameraField(CAMERA_FIELD_TARGET_DISTANCE,dist,0.)
call SetCameraTargetController(udg_AtUnit,GetVectorX(at),GetVectorY(at),false)
call SetCameraField(CAMERA_FIELD_ZOFFSET,GetVectorZ(at)-udg_DeltaZ,0.)
endif
if change or IgnorChange then
call SetCamChange(cam,false)
return true
endif
return false
endfunction
function SetPosition takes integer cam,real x,real y,real z returns nothing
local integer eye = GetCamEye(cam)
local integer at = GetCamAt(cam)
local real dx = x - GetVectorX(at)
local real dy = y - GetVectorY(at)
local real dz = z - GetVectorZ(at)
local real nx = GetVectorX(eye) + dx
local real ny = GetVectorY(eye) + dy
local real nz = GetVectorZ(eye) + dz
call SetVectorX(eye,nx)
call SetVectorY(eye,ny)
call SetVectorZ(eye,nz)
call SetVectorX(at,x)
call SetVectorY(at,y)
call SetVectorZ(at,z)
call SetCamChange(cam,true)
endfunction
function SetEyeAndAt takes integer cam,real ex,real ey,real ez,real tx,real ty,real tz returns nothing
local integer eye = GetCamEye(cam)
local integer at = GetCamAt(cam)
call SetVectorX(eye,ex)
call SetVectorY(eye,ey)
call SetVectorZ(eye,ez)
call SetVectorX(at,tx)
call SetVectorY(at,ty)
call SetVectorZ(at,tz)
call UpdateDistanceYawPitch(cam)
call UpdateAxisMatrix(cam)
call SetCamChange(cam,true)
endfunction
function SetYawPitchRoll takes integer cam,real yaw,real pitch,real roll,boolean EyeLock returns nothing
local integer eye = GetCamEye(cam)
local integer at = GetCamAt(cam)
local real dist = GetCamDist(cam)
local real Z = dist * Sin(pitch)
local real XY = dist * Cos(pitch)
local real X = XY * Cos(yaw)
local real Y = XY * Sin(yaw)
local real tx = GetVectorX(eye) + X
local real ty = GetVectorY(eye) + Y
local real tz = GetVectorZ(eye) + Z
local real ex = GetVectorX(at) - X
local real ey = GetVectorY(at) - Y
local real ez = GetVectorZ(at) - Z
call SetCamYaw(cam,yaw)
call SetCamPitch(cam,pitch)
call SetCamRoll(cam,roll)
if EyeLock then
call SetVectorX(at,tx)
call SetVectorY(at,ty)
call SetVectorZ(at,tz)
else
call SetVectorX(eye,ex)
call SetVectorY(eye,ey)
call SetVectorZ(eye,ez)
endif
call UpdateAxisMatrix(cam)
call SetCamChange(cam,true)
endfunction
function CreateCamera takes nothing returns integer
local integer i = LoadInteger(udg_CameraHash,0,0) + 1
local integer eye = CreateVector_1(0.,-922.668,udg_DeltaZ+1367.912)
local integer at = CreateVector_1(0.,0.,udg_DeltaZ)
local integer axisx = CreateVector_0()
local integer axisy = CreateVector_0()
local integer axisz = CreateVector_0()
local integer view = CreateMatrix4_0()
local integer projection = Matrix4Perspective2(CreateMatrix4_0(),.5,10000.,-1.*udg_WidthScreen/2.,udg_WidthScreen/2.,-1.*udg_HeightScreen/2.,udg_HeightScreen/2.)
call SetCamCustomValue(i,0)
call SetCamChange(i,true)
call SetCamEye(i,eye)
call SetCamAt(i,at)
call SetCamDistance(i,0.)
call SetCamYaw(i,0.)
call SetCamPitch(i,0.)
call SetCamRoll(i,0.)
call SetCamAxisX(i,axisx)
call SetCamAxisY(i,axisy)
call SetCamAxisZ(i,axisz)
call SetCamView(i,view)
call SetCamProjection(i,projection)
call UpdateDistanceYawPitch(i)
call UpdateAxisMatrix(i)
call SaveInteger(udg_CameraHash,0,0,i)
return i
endfunction
function InitDeltaZ_Timer takes nothing returns nothing
set udg_DeltaZ = GetCameraTargetPositionZ()
call SetCameraPosition(udg_TempX,udg_TempY)
call DestroyTimer(GetExpiredTimer())
endfunction
function InitDeltaZ takes nothing returns nothing
set udg_TempX = GetCameraTargetPositionX()
set udg_TempY = GetCameraTargetPositionY()
call SetCameraPosition(0,0)
call TimerStart(CreateTimer(),.04,false,function InitDeltaZ_Timer)
endfunction
function CameraInit takes nothing returns nothing
set udg_TypeUnit = 'dgui'
set udg_DeltaZ = 0.
set udg_GL4Cam = Location(0,0)
set udg_AtUnit = CreateUnit(Player(15),udg_TypeUnit,0.,0.,0.)
set udg_WidthScreen = .544
set udg_HeightScreen = .302
set udg_AspectRatio = udg_WidthScreen / udg_HeightScreen
call ShowUnit(udg_AtUnit,false)
call InitDeltaZ()
endfunction
//library Camera ends
tgonta добавил:
» DGUI
//library DGUI:
function GetTriggerButton takes nothing returns integer
return udg_TriggerButton
endfunction
function GetZ4DGUI takes real X,real Y returns real
call MoveLocation(udg_GL4DGUI , X , Y)
return GetLocationZ(udg_GL4DGUI)
endfunction
function FineIndexAnimModel takes real w,real h,real z returns integer
local real W = w * udg_WidthScreen * z
local real H = h * udg_HeightScreen * z
local real anim
if H < W then
set anim = 10.*(W/H-1)
return R2I_n(anim)
else
set anim = 10.*(H/W-1.)
if anim >= .5 then
return 100 + R2I_n(anim)
endif
endif
return 0
endfunction
function FineSizeModel takes real w,real h,real z returns real
local real W = w * udg_WidthScreen * z
local real H = h * udg_HeightScreen * z
if H < W then
return .5 * H
else
return .5 * W
endif
endfunction
constant function TypeSkinChanger takes nothing returns integer
return 'A000'
endfunction
//=====================================================================
function GetButtonCustomValue takes integer btn returns integer
return LoadInteger(udg_ButtonHash,btn,0)
endfunction
function GetButtonCamera takes integer btn returns integer
return LoadInteger(udg_ButtonHash,btn,1)
endfunction
function GetButtonWidth takes integer btn returns real
return LoadReal(udg_ButtonHash,btn,2)
endfunction
function GetButtonHeight takes integer btn returns real
return LoadReal(udg_ButtonHash,btn,3)
endfunction
function GetButtonMinX takes integer btn returns real
return LoadReal(udg_ButtonHash,btn,4)
endfunction
function GetButtonMaxX takes integer btn returns real
return LoadReal(udg_ButtonHash,btn,5)
endfunction
function GetButtonMaxY takes integer btn returns real
return LoadReal(udg_ButtonHash,btn,6)
endfunction
function GetButtonMinY takes integer btn returns real
return LoadReal(udg_ButtonHash,btn,7)
endfunction
function GetButtonZ takes integer btn returns real
return LoadReal(udg_ButtonHash,btn,8)
endfunction
function GetButtonCenterX takes integer btn returns real
return LoadReal(udg_ButtonHash,btn,9)
endfunction
function GetButtonCenterY takes integer btn returns real
return LoadReal(udg_ButtonHash,btn,10)
endfunction
function GetButtonShow takes integer btn returns boolean
return LoadBoolean(udg_ButtonHash,btn,11)
endfunction
function GetButtonTrigLClick takes integer btn returns trigger
return LoadTriggerHandle(udg_ButtonHash,btn,12)
endfunction
function GetButtonTrigRClick takes integer btn returns trigger
return LoadTriggerHandle(udg_ButtonHash,btn,13)
endfunction
function GetButtonPicture takes integer btn returns unit
return LoadUnitHandle(udg_ButtonHash,btn,14)
endfunction
function GetButtonIndexAnim takes integer btn returns integer
return LoadInteger(udg_ButtonHash,btn,15)
endfunction
function SetButtonCustomValue takes integer btn, integer cv returns nothing
call SaveInteger(udg_ButtonHash,btn,0,cv)
endfunction
function SetButtonCamera takes integer btn, integer cam returns nothing
call SaveInteger(udg_ButtonHash,btn,1,cam)
endfunction
function SetButtonWidth takes integer btn, real w returns nothing
call SaveReal(udg_ButtonHash,btn,2,w)
endfunction
function SetButtonHeight takes integer btn, real h returns nothing
call SaveReal(udg_ButtonHash,btn,3,h)
endfunction
function SetButtonMinX takes integer btn, real minx returns nothing
call SaveReal(udg_ButtonHash,btn,4,minx)
endfunction
function SetButtonMaxX takes integer btn, real maxx returns nothing
call SaveReal(udg_ButtonHash,btn,5,maxx)
endfunction
function SetButtonMaxY takes integer btn, real maxy returns nothing
call SaveReal(udg_ButtonHash,btn,6,maxy)
endfunction
function SetButtonMinY takes integer btn, real miny returns nothing
call SaveReal(udg_ButtonHash,btn,7,miny)
endfunction
function SetButtonZ takes integer btn, real z returns nothing
call SaveReal(udg_ButtonHash,btn,8,z)
endfunction
function SetButtonCenterX takes integer btn, real cx returns nothing
call SaveReal(udg_ButtonHash,btn,9,cx)
endfunction
function SetButtonCenterY takes integer btn, real cy returns nothing
call SaveReal(udg_ButtonHash,btn,10,cy)
endfunction
function SetButtonShow takes integer btn, boolean show returns nothing
call SaveBoolean(udg_ButtonHash,btn,11,show)
endfunction
function SetButtonTrigLClick takes integer btn, trigger lcl returns nothing
call SaveTriggerHandle(udg_ButtonHash,btn,12,lcl)
endfunction
function SetButtonTrigRClick takes integer btn, trigger rcl returns nothing
call SaveTriggerHandle(udg_ButtonHash,btn,13,rcl)
endfunction
function SetButtonPicture takes integer btn, unit pict returns nothing
call SaveUnitHandle(udg_ButtonHash,btn,14,pict)
endfunction
function SetButtonIndexAnim takes integer btn, integer ianim returns nothing
call SaveInteger(udg_ButtonHash,btn,15,ianim)
endfunction
//=====================================================================
function CreateButton takes real minx, real maxy, real W, real H, real z, integer texture returns integer
local integer i = LoadInteger(udg_ButtonHash,0,0) + 1
local unit pic = CreateUnit(Player(15),udg_TypeUnit,0.,0.,0.)
local destructable tree
local integer animindex
local real size
call SetButtonCustomValue(i,0)
call SetButtonCamera(i,0)
call SetButtonWidth(i,W)
call SetButtonHeight(i,H)
call SetButtonMinX(i,minx)
call SetButtonMaxX(i,minx+W)
call SetButtonMaxY(i,maxy)
call SetButtonMinY(i,maxy-H)
call SetButtonZ(i,100.2+z)
call SetButtonCenterX(i,minx+W/2.)
call SetButtonCenterY(i,maxy-H/2.)
call SetButtonShow(i,false)
call SetButtonTrigLClick(i,CreateTrigger())
call SetButtonTrigRClick(i,CreateTrigger())
call SetButtonPicture(i,pic)
call UnitAddAbility(pic,TypeSkinChanger())
if texture != 0 then
set tree = CreateDestructable(texture,0.,0.,0.,0.,1)
call IssueTargetOrder(pic,"grabtree",tree)
call RemoveDestructable(tree)
set tree = null
endif
set animindex = FineIndexAnimModel(W,H,GetButtonZ(i))
call SetButtonIndexAnim(i,animindex)
call SetUnitAnimationByIndex(pic,animindex)
set size = FineSizeModel(W,H,GetButtonZ(i))
call SetUnitScale(pic,size,0.,0.)
call UnitAddAbility(pic,'Aave')
call UnitRemoveAbility(pic,'Aave')
call ShowUnit(pic,false)
call SetUnitUserData(pic,i)
call SaveInteger(udg_ButtonHash,0,0,i)
set picture = null
return i
endfunction
function AddActionL takes integer btn, code func returns triggeraction
return TriggerAddAction(GetButtonTrigLClick(btn),func)
endfunction
function RemoveActionL takes integer btn, triggeraction action returns nothing
call TriggerRemoveAction(GetButtonTrigLClick(btn),action)
endfunction
function AddActionR takes integer btn, code func returns triggeraction
return TriggerAddAction(GetButtonTrigRClick(btn),func)
endfunction
function RemoveActionR takes integer btn, triggeraction action returns nothing
call TriggerRemoveAction(GetButtonTrigRClick(btn),action)
endfunction
function DeleteButton takes integer btn returns nothing
call DestroyTrigger(GetButtonTrigLClick(btn))
call DestroyTrigger(GetButtonTrigRClick(btn))
call RemoveUnit(GetButtonPicture(btn))
endfunction
function UpdateButton takes integer btn returns nothing
local integer cam = GetButtonCamera(btn)
local real cx = GetButtonCenterX(btn)
local real cy = GetButtonCenterY(btn)
local real z = GetButtonZ(btn)
local integer Pos = Win2World(cam,cx,cy,z)
local real vx = GetVectorX(Pos)
local real vy = GetVectorY(Pos)
local real vz = GetVectorZ(Pos)
local unit pic = GetButtonPicture(btn)
call SetUnitX(pic,vx)
call SetUnitY(pic,vy)
call MoveLocation(udg_GL4DGUI,vx,vy)
call SetUnitFlyHeight(pic,vz-GetLocationZ(udg_GL4DGUI),0.)
set pic = null
endfunction
function ShowButton takes integer btn, boolean show, integer Cam returns nothing
local unit pic = GetButtonPicture(btn)
local integer indexanim = GetButtonIndexAnim(btn)
if Cam != -1 then
call SetButtonCamera(btn,Cam)
endif
call ShowUnit(pic,show)
if show != GetButtonShow(btn) then
if show then
call UpdateButton(btn)
call SetUnitAnimationByIndex(pic,indexanim)
endif
endif
call SetButtonShow(i,show)
set pic = null
endfunction
function IsButtonClick takes integer btn, unit u returns boolean
return GetButtonPicture(btn) == u
endfunction
function IsButtonClickEx takes integer btn, real x, real y returns boolean
local real minx = GetButtonMinX(btn)
local real miny = GetButtonMinY(btn)
local real maxx = GetButtonMaxX(btn)
local real maxy = GetButtonMaxY(btn)
return minx < x and x < maxx and miny < y and y < maxy
endfunction
function ButtonClickL takes integer btn returns nothing
set udg_TriggerButton = btn
call TriggerExecute(GetButtonTrigLClick(btn))
endfunction
function ButtonClickR takes integer btn returns nothing
set udg_TriggerButton = btn
call TriggerExecute(GetButtonTrigRClick(btn))
endfunction
function SetButtonPosition takes integer btn,real minx,real maxy returns nothing
local real w = GetButtonWidth(btn)
local real h = GetButtonHeight(btn)
local boolean show = GetButtonShow(btn)
call SetButtonMinX(btn,minx)
call SetButtonMaxX(btn,minx+w)
call SetButtonMaxY(btn,maxy)
call SetButtonMinY(btn,maxy-h)
call SetButtonCenterX(btn,minx+w/2.)
call SetButtonCenterY(btn,maxy-h/2.)
if show then
call UpdateButton(btn)
endif
endfunction
function SetButtonTexture takes integer btn,integer texture returns nothing
local unit pic = GetButtonPicture(btn)
local destructable tree = CreateDestructable(texture,0.,0.,0.,0.,1)
local boolean show = GetButtonShow(btn)
call ShowUnit(pic,true)
call SetUnitX(pic,0.)
call SetUnitY(pic,0.)
call IssueTargetOrder(pic,"grabtree",tree)
call ShowUnit(pic,show)
call RemoveDestructable(tree)
if show then
call UpdateButton(btn)
endif
set tree = null
set pic = null
endfunction
function UpdateAllButtons takes nothing returns nothing
local integer i = LoadInteger(udg_ButtonHash,0,0)
loop
exitwhen i < 0
if GetButtonShow(i) then
call UpdateButton(i)
endif
set i = i - 1
endloop
endfunction
function ClickButton takes unit u, boolean IsLeft returns boolean
local integer b
if GetUnitTypeId(u) == udg_TypeUnit then
set b = GetUnitUserData(u)
if b != 0 and GetButtonShow(b) then
if IsLeft then
call ButtonClickL(b)
else
call ButtonClickR(b)
endif
return true
endif
endif
return false
endfunction
function ClickButtonEx takes real x,real y,boolean IsLeft returns boolean
local integer i = LoadInteger(udg_ButtonHash,0,0)
loop
exitwhen i < 0
if IsButtonClickEx(i,x,y) then
if IsLeft then
call ButtonClickL(i)
else
call ButtonClickR(i)
endif
return true
endif
set i = i - 1
endloop
return false
endfunction
function ClickButtonPeriodicSelect takes player p,boolean IsLeft returns boolean
local integer i = LoadInteger(udg_ButtonHash,0,0)
local unit pic
loop
exitwhen i < 0
set pic = GetButtonPicture(i)
if IsUnitSelected(pic,p) then
if IsLeft then
call ButtonClickL(i)
else
call ButtonClickR(i)
endif
return true
endif
set i = i - 1
endloop
return false
endfunction
function DGUIClickEx takes real x,real y,boolean IsLeft returns boolean
local integer i = LoadInteger(udg_ButtonHash,0,0)
loop
exitwhen i < 0
if IsButtonClickEx(i,x,y) then
if IsLeft then
call ButtonClickL(i)
else
call ButtonClickR(i)
endif
return true
endif
set i = i - 1
endloop
return false
endfunction
//=======================================================================
function GetPictureCustomValue takes integer pic returns integer
return LoadInteger(udg_PictureHash,pic,0)
endfunction
function GetPictureCamera takes integer pic returns integer
return LoadInteger(udg_PictureHash,pic,1)
endfunction
function GetPictureWidth takes integer pic returns real
return LoadReal(udg_PictureHash,pic,2)
endfunction
function GetPictureHeight takes integer pic returns real
return LoadReal(udg_PictureHash,pic,3)
endfunction
function GetPictureCenterX takes integer pic returns real
return LoadReal(udg_PictureHash,pic,4)
endfunction
function GetPictureCenterY takes integer pic returns real
return LoadReal(udg_PictureHash,pic,5)
endfunction
function GetPictureZ takes integer pic returns real
return LoadReal(udg_PictureHash,pic,6)
endfunction
function GetPictureShow takes integer pic returns boolean
return LoadBoolean(udg_PictureHash,pic,7)
endfunction
function GetPicturePic takes integer pic returns unit
return LoadUnitHandle(udg_PictureHash,pic,8)
endfunction
function GetPictureIndexAnim takes integer pic returns integer
return LoadInteger(udg_PictureHash,pic,9)
endfunction
function SetPictureCustomValue takes integer pic, integer cv returns nothing
call SaveInteger(udg_PictureHash,pic,0,cv)
endfunction
function SetPictureCamera takes integer pic, integer cam returns nothing
call SaveInteger(udg_PictureHash,pic,1,cam)
endfunction
function SetPictureWidth takes integer pic, real w returns nothing
call SaveReal(udg_PictureHash,pic,2,w)
endfunction
function SetPictureHeight takes integer pic, real h returns nothing
call SaveReal(udg_PictureHash,pic,3,h)
endfunction
function SetPictureCenterX takes integer pic, real cx returns nothing
call SaveReal(udg_PictureHash,pic,4,cx)
endfunction
function SetPictureCenterY takes integer pic, real cy returns nothing
call SaveReal(udg_PictureHash,pic,5,cy)
endfunction
function SetPictureZ takes integer pic, real z returns nothing
call SaveReal(udg_PictureHash,pic,6,z)
endfunction
function SetPictureShow takes integer pic, boolean show returns nothing
call SaveBoolean(udg_PictureHash,pic,7,show)
endfunction
function SetPicturePic takes integer pic, unit pict returns nothing
call SaveUnitHandle(udg_PictureHash,pic,8,pict)
endfunction
function SetPictureIndexAnim takes integer pic, integer index returns nothing
call SaveInteger(udg_PictureHash,pic,9,index)
endfunction
//=======================================================================
function CreatePicture takes real minx,real maxy,real W,real H,real z,integer texture returns integer
local integer i = LoadInteger(udg_PictureHash,0,0)
local unit pic = CreateUnit(Player(15),udg_TypeUnit,0.,0.,0.)
local destructable tree
local integer indexanim
local real size
call SetPictureCustomValue(i,0)
call SetPictureCamera(i,0)
call SetPictureWidth(i,W)
call SetPictureHeight(i,H)
call SetPictureCenterX(i,minx+W/2.)
call SetPictureCenterY(i,maxy-H/2.)
call SetPictureZ(i,100.2+z)
call SetPictureShow(i,false)
call SetPicturePic(i,pic)
call UnitAddAbility(pic,TypeSkinChanger())
if texture != 0 then
set tree = CreateDestructable(texture,0.,0.,0.,0.,1)
call IssueTargetOrder(pic,"grabtree",tree)
call RemoveDestructable(tree)
set tree = null
endif
set indexanim = FineIndexAnimModel(W,H,GetPictureZ(i))
call SetPictureIndexAnim(i,indexanim)
call SetUnitAnimationByIndex(pic,indexanim)
set size = FineSizeModel(W,H,GetPictureZ(i))
call SetUnitScale(pic,size,0.,0.)
call UnitAddAbility(pic,'Aave')
call UnitRemoveAbility(pic,'Aave')
call UnitAddAbility(pic,'Aloc')
call UnitRemoveAbility(pic,'Aloc')
call ShowUnit(pic,false)
call SaveInteger(udg_PictureHash,0,0,i)
set pic = null
return i
endfunction
function DeletePicture takes integer pic returns nothing
call RemoveUnit(GetPicturePic(pic))
endfunction
function UpdatePicture takes integer pic returns nothing
local integer cam = GetPictureCamera(pic)
local real cx = GetPictureCenterX(pic)
local real cy = GetPictureCenterY(pic)
local real z = GetPictureZ(pic)
local integer Pos = Win2World(cam,cx,cy,z)
local real vx = GetVectorX(Pos)
local real vy = GetVectorY(Pos)
local real vz = GetVectorZ(Pos)
local unit pic = GetPicturePic(pic)
call SetUnitX(pic,vx)
call SetUnitY(pic,vy)
call MoveLocation(udg_GL4DGUI,vx,vy)
call SetUnitFlyHeight(pic,vz-GetLocationZ(udg_GL4DGUI),0.)
set pic = null
endfunction
function ShowPicture takes integer pic, boolean show, integer Cam returns nothing
local unit pict = GetPicturePic(pic)
local integer indexanim = GetPictureIndexAnim(pic)
if Cam != -1 then
call SetPictureCamera(pic,Cam)
endif
call ShowUnit(pic,show)
if show != GetPictureShow(pic) then
if show then
call UpdatePicture(pic)
call SetUnitAnimationByIndex(pict,indexanim)
call UnitAddAbility(pict,'Aloc')
call UnitRemoveAbility(pict,'Aloc')
endif
endif
call SetPictureShow(pic,show)
set pict = null
endfunction
function SetPicturePosition takes integer pic,real minx,real maxy returns nothing
local real w = GetPictureWidth(pic)
local real h = GetPictureHeight(pic)
local boolean show = GetPictureShow(pic)
call SetPictureCenterX(pic,minx+w/2.)
call SetPictureCenterY(pic,maxy-h/2.)
if show then
call UpdatePicture(pic)
endif
endfunction
function SetPictureTexture takes integer pic, integer texture returns nothing
local destructable tree = CreateDestructable(texture,0.,0.,0.,0.,1)
local unit pict = GetPicturePic(pic)
call ShowUnit(pict,true)
call SetUnitX(pict,0.)
call SetUnitY(pict,0.)
call IssueTargetOrder(pict,"grabtree",tree)
call ShowUnit(pict,GetPictureShow(pic))
call RemoveDestructable(tree)
if GetPictureShow(pic) then
call UpdatePicture(pic)
endif
set tree = null
set pict = null
endfunction
function UpdateAllPictures takes nothing returns nothing
local integer i = LoadInteger(udg_PictureHash,0,0)
loop
exitwhen i < 0
call UpdatePicture(i)
set i = i - 1
endloop
endfunction
//=======================================================================
function GetTextCustomValue takes integer text returns integer
return LoadInteger(udg_TextHash,text,0)
endfunction
function GetTextCamera takes integer text returns integer
return LoadInteger(udg_TextHash,text,1)
endfunction
function GetTextMinX takes integer text returns real
return LoadReal(udg_TextHash,text,2)
endfunction
function GetTextMaxY takes integer text returns real
return LoadReal(udg_TextHash,text,3)
endfunction
function GetTextZ takes integer text returns real
return LoadReal(udg_TextHash,text,4)
endfunction
function GetTextShow takes integer text returns boolean
return LoadBoolean(udg_TextHash,text,5)
endfunction
function GetTextText takes integer text returns texttag
return LoadTextTagHandle(udg_TextHash,text,6)
endfunction
function SetTextCustomValue takes integer text, integer cv returns nothing
call SaveInteger(udg_TextHash,text,0,cv)
endfunction
function SetTextCamera takes integer text, integer cam returns nothing
call SaveInteger(udg_TextHash,text,1,cam)
endfunction
function SetTextMinX takes integer text, real minx returns nothing
call SaveReal(udg_TextHash,text,2,minx)
endfunction
function SetTextMaxY takes integer text, real maxy returns nothing
call SaveReal(udg_TextHash,text,3,maxy)
endfunction
function SetTextZ takes integer text, real z returns nothing
call SaveReal(udg_TextHash,text,4,z)
endfunction
function SetTextShow takes integer text, boolean show returns nothing
call SaveBoolean(udg_TextHash,text,5,show)
endfunction
function SetTextText takes integer text, texttag txt returns nothing
call SaveTextTagHandle(udg_TextHash,text,6,txt)
endfunction
//=======================================================================
function CreateText takes real minx,real maxy,real z returns integer
local integer i = LoadInteger(udg_TextHash,0,0)
call SetTextCustomValue(i,0)
call SetTextCamera(i,0)
call SetTextMinX(i,minx)
call SetTextMaxY(i,maxy)
call SetTextZ(i,100.+z)
call SetTextShow(i,false)
call SetTextText(i,CreateTextTag())
call SetTextTagVisibility(GetTextText(i),false)
call SaveInteger(udg_TextHash,0,0,i)
return i
endfunction
function DeleteText takes integer text returns nothing
call DestroyTextTag(GetTextText(text))
endfunction
function UpdateText takes integer text returns nothing
local integer cam = GetTextCamera(text)
local real minx = GetTextMinX(text)
local real maxy = GetTextMaxY(text)
local real z = GetTextZ(text)
local integer Pos = Win2World(cam,minx,maxy,z)
local real vx = GetVectorX(Pos)
local real vy = GetVectorY(Pos)
local real vz = GetVectorZ(Pos)
call SetTextTagPos(GetTextText(text),vx,vy,vz-GetZ4DGUI(vx,vy))
endfunction
function SetTextPosition takes integer text,real minx,real maxy returns nothing
call SetTextMinX(text,minx)
call SetTextMaxY(text,maxy)
if GetTextShow(text) then
call UpdateText(text)
endif
endfunction
function ShowText takes integer text,boolean show,integer Cam returns nothing
if Cam != -1 then
call SetTextCamera(text,Cam)
endif
call SetTextTagVisibility(GetTextText(text),show)
if show != GetTextShow(text) then
if show then
call UpdateText(text)
endif
endif
call SetTextShow(text,show)
endfunction
function UpdateAllTexts takes nothing returns nothing
local integer i = LoadInteger(udg_TextHash,0,0)
loop
exitwhen i < 0
call UpdateText(i)
set i = i - 1
endloop
endfunction
function DGUIUpdate takes boolean but,boolean pic,boolean tex returns nothing
if but then
call UpdateAllButtons()
endif
if pic then
call UpdateAllPictures()
endif
if tex then
call UpdateAllTexts()
endif
endfunction
//library DGUI ends
|