定义了一个基础AI组件类,它的作用是为游戏中的AI实体提供一个通用的框架和接口。以下是它提供的几个主要功能和概念:
-
**类定义**:继承`class` 函数
-
**构造函数 (`ctor`)**:类的构造函数用于初始化新创建的对象实例。它接受 `entity` 和 `priority` 两个参数,并将它们存储为对象的属性。
-
**属性管理**:
-
`_entity`:关联的实体或对象。
-
`_priority`:AI组件的优先级。
-
`_turnOn`:AI组件的开关状态。
-
`_timeTick`:用于跟踪时间或逻辑周期的变量。
-
`_type`:AI组件的类型,可能用于区分不同类型的AI行为。
-
`_name`:AI组件的名称,初始为 "undef"。
-
**状态管理**:提供 `OnEnter` 和 `OnLeave` 方法来管理AI组件的激活和停用状态。
-
**有效性检查**:`IsValid` 方法用于检查AI组件是否处于有效状态。
-
**更新逻辑**:`OnUpdate` 和 `OnLogic` 方法可能在游戏循环中被调用,用于更新AI组件的状态和逻辑。
-
**行为控制**:`OnStopAction` 和 `OnAttackAction` 方法为停止和执行攻击行为提供接口。
-
**组件创建**:`create_component` 函数用于创建 `ai_base` 类的新实例,这可能是为了方便在代码中快速生成AI组件。
-
**命名管理**:`SetName` 和 `GetName` 方法允许设置和获取AI组件的名称。
-
**开关控制**:`IsTurnOn` 和 `Switch` 方法用于检查和切换AI组件的状态。
这个脚本本身不包含具体的AI逻辑,但它定义了一套接口和属性,可以基于这个基础类派生出具有特定行为的AI组件。例如,可以创建追逐敌人的AI、巡逻的AI或使用特定策略的AI等,都继承自这个基础类。这种设计模式有助于保持代码的组织性和可维护性,同时促进代码的重用。
Lua
------------------------------------------------------
local require = require
------------------------------------------------------
ai_base = class("ai_base");
function ai_base:ctor(entity, priority)
self._entity = entity;
self._priority = priority;
self._turnOn = false;
self._timeTick = 0;
self._type = eAType_BASE;
self._name = "undef";
end
function ai_base:SetName(name)
self._name = name;
end
function ai_base:GetName()
return self._name;
end
function ai_base:OnAttach()
end
function ai_base:OnDetach()
end
function ai_base:OnEnter()
if not self._turnOn then
self._turnOn = true;
self._timeTick = 0;
return true;
end
return false;
end
function ai_base:OnLeave()
if self._turnOn then
self._turnOn = false;
return true;
end
return false;
end
function ai_base:IsTurnOn()
return self._turnOn;
end
function ai_base:Switch()
if not self:IsValid() then
return false;
end
return true;
end
function ai_base:IsValid()
return true;
end
function ai_base:OnUpdate(dTime)
if not self:IsValid() then
return false;
end
return true;
end
function ai_base:OnLogic(dTick)
if not self:IsValid() then
return false;
end
self._timeTick = self._timeTick + dTick * i3k_engine_get_tick_step();
return true;
end
function ai_base:OnStopAction(action)
end
function ai_base:OnAttackAction(id)
end
function create_component(entity, priority)
return ai_base.new(entity, priority);
end