common.lua文件分析
来源:互联网 发布:毁灭战士4神优化 编辑:程序博客网 时间:2024/05/22 13:01
----------------------------------------------------
-- Common Globals and Definitions.
-- 公共的全局定义
----------------------------------------------------
----------------------------------------------------
-- data structure passed to the Signals, use this global to avoid temporary lua mem allocation
-- 数据结构发送到信号,使用全局定义避免lua的内存临时分配
-- 初始化坐标
g_SignalData_point = {x=0,y=0,z=0};
g_SignalData_point2 = {x=0,y=0,z=0};
-- REMEMBER! ALWAYS write
-- 内存总是写。
-- g_SignalData.point = g_SignalData_point
-- before doing direct value assignment (i.e. not referenced) like
-- 这个过程在Direct分配之前实现定义。
-- g_SignalData.point.x = ...
-- and any math.lua vector function on it (FastSumVectors(g_SignalData.point,..) etc
-- 并将在这些定义应用于向量函数中。
-- g_SignalData数据结构
g_SignalData = {
point = g_SignalData_point, -- since g_SignalData.point is always used as a handler
-- g_SignalData.point总是使用point这个句柄
point2 = g_SignalData_point2,
ObjectName = "", -- 对象名称,初始化为空
id = NULL_ENTITY, -- id初始化为空对象ID
fValue = 0,
iValue = 0,
iValue2 = 0,
}
g_StringTemp1 = " ";
-- 碰撞列表
-- 这里一共定义了10张这样的表
g_HitTable = {{},{},{},{},{},{},{},{},{},{},}
-- 时间函数
function ShowTime()
-- 获取系统时间函数
local ttime=System.GetLocalOSTime();
-- 这里调用了系统日志函数,将当前时间写入日志文件中
System.Log(string.format("%d/%d/%d, %02d:%02d", ttime.mday, ttime.mon+1, ttime.year+1900, ttime.hour, ttime.min));
end
-- 这里是一个计数器,不过不知道_tbl是一个什么对象?
function count(_tbl)
local count = 0;
if (_tbl) then
for i,v in pairs(_tbl) do
count = count+1;
end
end
return count;
end
-- 创建一个新对象,第一个参数数是对象类型,第二个参数为是否允许对象重复
function new(_obj, norecurse)
if (type(_obj) == "table") then
local _newobj = {};
if (norecurse) then
for i,f in pairs(_obj) do
_newobj[i] = f;
end
else
for i,f in pairs(_obj) do
if ((type(f) == "table") and (_obj~=f)) then -- avoid recursing into itself
_newobj[i] = new(f);
else
_newobj[i] = f;
end
end
end
return _newobj;
else
return _obj;
end
end
-- 合并【暂时不清楚这个函数的作用】
function merge(dst, src, recurse)
for i,v in pairs(src) do
if (type(v) ~= "function") then
if(recurse) then
if((type(v) == "table") and (v ~= src))then -- avoid recursing into itself
if (not dst[i]) then
dst[i] = {};
end
merge(dst[i], v, recurse);
elseif (not dst[i]) then
dst[i] = v;
end
elseif (not dst[i]) then
dst[i] = v;
end
end
end
return dst;
end
-- 合并【暂时不清楚这个函数的作用】
function mergef(dst, src, recursive)
for i,v in pairs(src) do
if (recursive) then
if((type(v) == "table") and (v ~= src))then -- avoid recursing into itself
if (not dst[i]) then
dst[i] = {};
end
mergef(dst[i], v, recursive);
elseif (not dst[i]) then
dst[i] = v;
end
elseif (not dst[i]) then
dst[i] = v;
end
end
return dst;
end
-- 向量字符串【暂时不清楚这个函数的作用】
function Vec2Str(vec)
return string.format("(x: %.3f y: %.3f z: %.3f)", vec.x, vec.y, vec.z);
end
-- 错误日志通过FontColors.txt中的查询可以看到用的字符是红色
function LogError(fmt, ...)
System.Log("$4"..string.format(fmt, ...));
end
-- 警告使用的黄色
function LogWarning(fmt, ...)
System.Log("$6"..string.format(fmt, ...));
end
-- 正常的日志
function Log(fmt, ...)
System.Log(string.format(fmt, ...));
end
-- 堆对象表长度为0
g_dump_tabs=0;
-- 堆处理函数
function dump(_class, no_func, depth)
if not _class then
System.Log("$2nil");
else
if (not depth) then
depth = 8;
end
local str="";
for n=0,g_dump_tabs,1 do
str=str.." ";
end
for i,field in pairs(_class) do
if(type(field)=="table") then
if (g_dump_tabs < depth) then
g_dump_tabs=g_dump_tabs+1;
System.Log(str.."$4"..tostring(i).."$1= {");
dump(field, no_func, depth);
System.Log(str.."$1}");
g_dump_tabs=g_dump_tabs-1;
else
System.Log(str.."$4"..tostring(i).."$1= { $4...$1 }");
end
else
if(type(field)=="number" ) then
System.Log("$2"..str.."$6"..tostring(i).."$1=$8"..field);
elseif(type(field) == "string") then
System.Log("$2"..str.."$6"..tostring(i).."$1=$8".."""..field..""");
elseif(type(field) == "boolean") then
System.Log("$2"..str.."$6"..tostring(i).."$1=$8".."""..tostring(field)..""");
else
if(not no_func)then
if(type(field)=="function")then
System.Log("$2"..str.."$5"..tostring(i).."()");
else
System.Log("$2"..str.."$7"..tostring(i).."$8<userdata>");
end
end
end
end
end
end
end
-- check if a string is set and it's length > 0
-- 检查字符串长度是否大于0
function EmptyString(str)
if (str and string.len(str) > 0) then
return false;
end
return true;
end
-- check if a number value is true or false
-- usefull for entity parameters
-- 检查一个数据是否为真,这里使用的是非零即为真
function NumberToBool(n)
if (n and (tonumber(n) ~= 0)) then
return true;
else
return false;
end
end
-- easy way to log entity id
-- accepts both entity table or entityid
-- 一种简单的方法用于记录实体id
-- 可以接受实体表或实体id
function EntityName(entity)
if (type(entity) == "userdata") then
local e = System.GetEntity(entity);
if (e) then
return e:GetName();
end
elseif (type(entity) == "table") then
return entity:GetName();
end
return "";
end
-- easy way to get entity by name
-- usefull for "console debugging"!
-- 用于通过名称获取实体
-- 这个函数主要用于控制台调试环境
function EntityNamed(name)
return System.GetEntityByName(name);
end
function SafeTableGet( table, name )
if table then return table[name] else return nil end
end
----------------------------------------------------
-- Load commonly used globals.
-- 加载普通全局脚本
----------------------------------------------------
-- 数学
Script.ReloadScript("scripts/Utils/Math.lua");
-- 实体工具
Script.ReloadScript("scripts/Utils/EntityUtils.lua");
-- 未知
Script.ReloadScript("scripts/Utils/ZeroG.lua");
----------------------------------------------------
--///////////////////////////////////////////////////////////////////////////////////
-- needed to reload ai related scripts from editor
-- 需要重新加载ai描述脚本
----------------------------------------------------
function AIReload()
Script.LoadScript("Scripts/AI/aiconfig.lua",true,true);
end
-- 是否开启AI调式
g_AIDebugToggleOn=0;
--///////////////////////////////////////////////////////////////////////////////////
--
-- AI调式函数
----------------------------------------------------
function AIDebugToggle()
if(g_AIDebugToggleOn == 0) then
-- System.Log("___AIDebugToggle switching on");
g_AIDebugToggleOn=1;
System.SetCVar( "ai_DebugDraw",1 );
else
-- System.Log("___AIDebugToggle switching off");
System.SetCVar( "ai_DebugDraw",0 );
g_AIDebugToggleOn=0;
end
end
----------------------------------------------------
-- 加载数学系统工具
Script.ReloadScript("scripts/entities/items/itemsystemmath.lua");
--///////////////////////////////////////////////////////////////////////////////////
-- VS2 hack until we find a better place to do that
-- precache bullet_hits sound so the wavebank is loaded statically
-- 似乎是声音相关的东西,这里包含了子弹、脚本、碰撞的声音缓存加载…………不过在显卡比较差的话,声音还是会先出来…………
Sound.Precache("Sounds/physics:bullet_impact:mat_grass", SOUND_PRECACHE_LOAD_SOUND); -- bullet_hit fsb
Sound.Precache("Sounds/physics:footstep_walk:mat_grass", SOUND_PRECACHE_LOAD_SOUND); -- footsteps fsb
Sound.Precache("Sounds/physics:mat_metal_sheet:mat_dirt", SOUND_PRECACHE_LOAD_SOUND); -- collision fsb
-- Common Globals and Definitions.
-- 公共的全局定义
----------------------------------------------------
----------------------------------------------------
-- data structure passed to the Signals, use this global to avoid temporary lua mem allocation
-- 数据结构发送到信号,使用全局定义避免lua的内存临时分配
-- 初始化坐标
g_SignalData_point = {x=0,y=0,z=0};
g_SignalData_point2 = {x=0,y=0,z=0};
-- REMEMBER! ALWAYS write
-- 内存总是写。
-- g_SignalData.point = g_SignalData_point
-- before doing direct value assignment (i.e. not referenced) like
-- 这个过程在Direct分配之前实现定义。
-- g_SignalData.point.x = ...
-- and any math.lua vector function on it (FastSumVectors(g_SignalData.point,..) etc
-- 并将在这些定义应用于向量函数中。
-- g_SignalData数据结构
g_SignalData = {
point = g_SignalData_point, -- since g_SignalData.point is always used as a handler
-- g_SignalData.point总是使用point这个句柄
point2 = g_SignalData_point2,
ObjectName = "", -- 对象名称,初始化为空
id = NULL_ENTITY, -- id初始化为空对象ID
fValue = 0,
iValue = 0,
iValue2 = 0,
}
g_StringTemp1 = " ";
-- 碰撞列表
-- 这里一共定义了10张这样的表
g_HitTable = {{},{},{},{},{},{},{},{},{},{},}
-- 时间函数
function ShowTime()
-- 获取系统时间函数
local ttime=System.GetLocalOSTime();
-- 这里调用了系统日志函数,将当前时间写入日志文件中
System.Log(string.format("%d/%d/%d, %02d:%02d", ttime.mday, ttime.mon+1, ttime.year+1900, ttime.hour, ttime.min));
end
-- 这里是一个计数器,不过不知道_tbl是一个什么对象?
function count(_tbl)
local count = 0;
if (_tbl) then
for i,v in pairs(_tbl) do
count = count+1;
end
end
return count;
end
-- 创建一个新对象,第一个参数数是对象类型,第二个参数为是否允许对象重复
function new(_obj, norecurse)
if (type(_obj) == "table") then
local _newobj = {};
if (norecurse) then
for i,f in pairs(_obj) do
_newobj[i] = f;
end
else
for i,f in pairs(_obj) do
if ((type(f) == "table") and (_obj~=f)) then -- avoid recursing into itself
_newobj[i] = new(f);
else
_newobj[i] = f;
end
end
end
return _newobj;
else
return _obj;
end
end
-- 合并【暂时不清楚这个函数的作用】
function merge(dst, src, recurse)
for i,v in pairs(src) do
if (type(v) ~= "function") then
if(recurse) then
if((type(v) == "table") and (v ~= src))then -- avoid recursing into itself
if (not dst[i]) then
dst[i] = {};
end
merge(dst[i], v, recurse);
elseif (not dst[i]) then
dst[i] = v;
end
elseif (not dst[i]) then
dst[i] = v;
end
end
end
return dst;
end
-- 合并【暂时不清楚这个函数的作用】
function mergef(dst, src, recursive)
for i,v in pairs(src) do
if (recursive) then
if((type(v) == "table") and (v ~= src))then -- avoid recursing into itself
if (not dst[i]) then
dst[i] = {};
end
mergef(dst[i], v, recursive);
elseif (not dst[i]) then
dst[i] = v;
end
elseif (not dst[i]) then
dst[i] = v;
end
end
return dst;
end
-- 向量字符串【暂时不清楚这个函数的作用】
function Vec2Str(vec)
return string.format("(x: %.3f y: %.3f z: %.3f)", vec.x, vec.y, vec.z);
end
-- 错误日志通过FontColors.txt中的查询可以看到用的字符是红色
function LogError(fmt, ...)
System.Log("$4"..string.format(fmt, ...));
end
-- 警告使用的黄色
function LogWarning(fmt, ...)
System.Log("$6"..string.format(fmt, ...));
end
-- 正常的日志
function Log(fmt, ...)
System.Log(string.format(fmt, ...));
end
-- 堆对象表长度为0
g_dump_tabs=0;
-- 堆处理函数
function dump(_class, no_func, depth)
if not _class then
System.Log("$2nil");
else
if (not depth) then
depth = 8;
end
local str="";
for n=0,g_dump_tabs,1 do
str=str.." ";
end
for i,field in pairs(_class) do
if(type(field)=="table") then
if (g_dump_tabs < depth) then
g_dump_tabs=g_dump_tabs+1;
System.Log(str.."$4"..tostring(i).."$1= {");
dump(field, no_func, depth);
System.Log(str.."$1}");
g_dump_tabs=g_dump_tabs-1;
else
System.Log(str.."$4"..tostring(i).."$1= { $4...$1 }");
end
else
if(type(field)=="number" ) then
System.Log("$2"..str.."$6"..tostring(i).."$1=$8"..field);
elseif(type(field) == "string") then
System.Log("$2"..str.."$6"..tostring(i).."$1=$8".."""..field..""");
elseif(type(field) == "boolean") then
System.Log("$2"..str.."$6"..tostring(i).."$1=$8".."""..tostring(field)..""");
else
if(not no_func)then
if(type(field)=="function")then
System.Log("$2"..str.."$5"..tostring(i).."()");
else
System.Log("$2"..str.."$7"..tostring(i).."$8<userdata>");
end
end
end
end
end
end
end
-- check if a string is set and it's length > 0
-- 检查字符串长度是否大于0
function EmptyString(str)
if (str and string.len(str) > 0) then
return false;
end
return true;
end
-- check if a number value is true or false
-- usefull for entity parameters
-- 检查一个数据是否为真,这里使用的是非零即为真
function NumberToBool(n)
if (n and (tonumber(n) ~= 0)) then
return true;
else
return false;
end
end
-- easy way to log entity id
-- accepts both entity table or entityid
-- 一种简单的方法用于记录实体id
-- 可以接受实体表或实体id
function EntityName(entity)
if (type(entity) == "userdata") then
local e = System.GetEntity(entity);
if (e) then
return e:GetName();
end
elseif (type(entity) == "table") then
return entity:GetName();
end
return "";
end
-- easy way to get entity by name
-- usefull for "console debugging"!
-- 用于通过名称获取实体
-- 这个函数主要用于控制台调试环境
function EntityNamed(name)
return System.GetEntityByName(name);
end
function SafeTableGet( table, name )
if table then return table[name] else return nil end
end
----------------------------------------------------
-- Load commonly used globals.
-- 加载普通全局脚本
----------------------------------------------------
-- 数学
Script.ReloadScript("scripts/Utils/Math.lua");
-- 实体工具
Script.ReloadScript("scripts/Utils/EntityUtils.lua");
-- 未知
Script.ReloadScript("scripts/Utils/ZeroG.lua");
----------------------------------------------------
--///////////////////////////////////////////////////////////////////////////////////
-- needed to reload ai related scripts from editor
-- 需要重新加载ai描述脚本
----------------------------------------------------
function AIReload()
Script.LoadScript("Scripts/AI/aiconfig.lua",true,true);
end
-- 是否开启AI调式
g_AIDebugToggleOn=0;
--///////////////////////////////////////////////////////////////////////////////////
--
-- AI调式函数
----------------------------------------------------
function AIDebugToggle()
if(g_AIDebugToggleOn == 0) then
-- System.Log("___AIDebugToggle switching on");
g_AIDebugToggleOn=1;
System.SetCVar( "ai_DebugDraw",1 );
else
-- System.Log("___AIDebugToggle switching off");
System.SetCVar( "ai_DebugDraw",0 );
g_AIDebugToggleOn=0;
end
end
----------------------------------------------------
-- 加载数学系统工具
Script.ReloadScript("scripts/entities/items/itemsystemmath.lua");
--///////////////////////////////////////////////////////////////////////////////////
-- VS2 hack until we find a better place to do that
-- precache bullet_hits sound so the wavebank is loaded statically
-- 似乎是声音相关的东西,这里包含了子弹、脚本、碰撞的声音缓存加载…………不过在显卡比较差的话,声音还是会先出来…………
Sound.Precache("Sounds/physics:bullet_impact:mat_grass", SOUND_PRECACHE_LOAD_SOUND); -- bullet_hit fsb
Sound.Precache("Sounds/physics:footstep_walk:mat_grass", SOUND_PRECACHE_LOAD_SOUND); -- footsteps fsb
Sound.Precache("Sounds/physics:mat_metal_sheet:mat_dirt", SOUND_PRECACHE_LOAD_SOUND); -- collision fsb
- common.lua文件分析
- lua源代码文件分析
- lua源代码文件分析
- Caffe源码中common文件分析
- 【thinkphp3.x】ThinkPHP/Common/runtime.php文件分析
- 【thinkphp3.x】ThinkPHP/Common/common.php文件中某些函数的分析
- lua 读取lua文件
- lua加载lua文件
- Lua源码分析——C文件说明
- common.h源文件分析
- [cocos2dx-lua]"Hello Lua"分析
- JS文件Common
- common-fileupload上传文件
- common-fileupload上传文件
- common-httpclient上传文件
- common-fileupload文件上传
- common-fileupload上传文件
- 博客文章common文件
- PHPer如何找工作
- windowsAPI一日一练(2)
- SHX和SMG文件资料和修改
- 关于权限控制的一点点想法(BS, Java)
- ByVal没事做写的JS页码跳转类
- common.lua文件分析
- 在java里使用oracle存储过程应注意的
- [摘]用Java生成Word文档
- 装操作系统
- 李维关于Together的讲座要点
- 一个数学系学生的情书(转载)
- 微软承诺在华开放源代码
- OpenGL的基本工作流程
- 最浪漫的事