require "XLuaBase"
--{ {XFUN EVENT
--在此处添加事件
X_ON_LUAINIT(OnItemInit)
X_ONSPRITECLOSETO(OnSpriteCloseTo)
X_ON_TIMER(OnItemTimer)
--}}XFUN EVENT
--范围半径
#define NRADIUS 1000
--精灵移动时两个节点之间的最短距离
#define NMOVE_MINDISTANCE 100
--人物靠近的触发距离
#define NPERSON_CLOSEDISTANCE 5
--检查是否主控
#define NTIMER_MAINCTRL_ID 1000
#define NTIMER_MAINCTRL_TIME 10000
--检查命令是否快结束了
#define NTIMER_CMDEND_ID 1001
---------------------------------------------
--事件处理函数
---------------------------------------------
LXRandomMove = {}
LXRandomMove.__index = LXRandomMove
objRandomMove = {}
setmetatable(objRandomMove,LXRandomMove) ---设置元表数据
---------------------------------------------
--类实现函数
---------------------------------------------
--物体初始化
function LXRandomMove:OnItemInit(objSprite)
math.randomseed(os.time())
--初始化
self:Init(objSprite, NRADIUS)
--精灵靠近
objSprite.EnableClosetoEvent(NPERSON_CLOSEDISTANCE)
--设置定时器
objSprite.SetTimer(NTIMER_MAINCTRL_ID, NTIMER_MAINCTRL_TIME)
end
--初始化数据
function LXRandomMove:Init(objSprite, fRadius)
self.objSprite = objSprite --精灵对象
local objTrans = objSprite.GetTranslate() --中心点位置
self.ptCenter = objTrans.GetPosition()
--todo
objTrans.SetScale(1.2)
objSprite.ApplyTranslate(objTrans)
self.fRadius = fRadius --范围半径
self.Nodes = {} --当前路径的节点
self.nNodeMoveCount = 10 --当前移动次数
self.nNodeAnimateCount = 10 --当前动作次数
if self.Nodes then
for i = 1, self.nNodeMoveCount + self.nNodeAnimateCount, 1 do --节点数据
self.Nodes[i] = {}
self.Nodes[i].ptStart = X3DPoint.CreateObject() --起始移动位置
self.Nodes[i].ptEnd = X3DPoint.CreateObject() --目标移动位置
self.Nodes[i].ptDir = X3DPoint.CreateObject() --移动方向
self.Nodes[i].vMove = math.random(1.2*10, 1.6*10) /10 --移动速度
self.Nodes[i].fTime = 0 --时间
self.Nodes[i].fStartTime = 0 --多长时间开始
self.Nodes[i].bMoveByTerrain = true --是否沿着地表移动
self.Nodes[i].bActionLoop = true --动作循环
self.Nodes[i].nAction = NANIMATEID_MOVE --动作索引
self.Nodes[i].strMove = "Move" --是否要移动位置
end
end
self.bMainCtrl = false --是否主控
self.fStartTime = 0 --当前动画总共时间
--{ {XFUN EVENT
--在此处添加事件
X_ON_LUAINIT(OnItemInit)
X_ONSPRITECLOSETO(OnSpriteCloseTo)
X_ON_TIMER(OnItemTimer)
--}}XFUN EVENT
--范围半径
#define NRADIUS 1000
--精灵移动时两个节点之间的最短距离
#define NMOVE_MINDISTANCE 100
--人物靠近的触发距离
#define NPERSON_CLOSEDISTANCE 5
--检查是否主控
#define NTIMER_MAINCTRL_ID 1000
#define NTIMER_MAINCTRL_TIME 10000
--检查命令是否快结束了
#define NTIMER_CMDEND_ID 1001
---------------------------------------------
--事件处理函数
---------------------------------------------
LXRandomMove = {}
LXRandomMove.__index = LXRandomMove
objRandomMove = {}
setmetatable(objRandomMove,LXRandomMove) ---设置元表数据
---------------------------------------------
--类实现函数
---------------------------------------------
--物体初始化
function LXRandomMove:OnItemInit(objSprite)
math.randomseed(os.time())
--初始化
self:Init(objSprite, NRADIUS)
--精灵靠近
objSprite.EnableClosetoEvent(NPERSON_CLOSEDISTANCE)
--设置定时器
objSprite.SetTimer(NTIMER_MAINCTRL_ID, NTIMER_MAINCTRL_TIME)
end
--初始化数据
function LXRandomMove:Init(objSprite, fRadius)
self.objSprite = objSprite --精灵对象
local objTrans = objSprite.GetTranslate() --中心点位置
self.ptCenter = objTrans.GetPosition()
--todo
objTrans.SetScale(1.2)
objSprite.ApplyTranslate(objTrans)
self.fRadius = fRadius --范围半径
self.Nodes = {} --当前路径的节点
self.nNodeMoveCount = 10 --当前移动次数
self.nNodeAnimateCount = 10 --当前动作次数
if self.Nodes then
for i = 1, self.nNodeMoveCount + self.nNodeAnimateCount, 1 do --节点数据
self.Nodes[i] = {}
self.Nodes[i].ptStart = X3DPoint.CreateObject() --起始移动位置
self.Nodes[i].ptEnd = X3DPoint.CreateObject() --目标移动位置
self.Nodes[i].ptDir = X3DPoint.CreateObject() --移动方向
self.Nodes[i].vMove = math.random(1.2*10, 1.6*10) /10 --移动速度
self.Nodes[i].fTime = 0 --时间
self.Nodes[i].fStartTime = 0 --多长时间开始
self.Nodes[i].bMoveByTerrain = true --是否沿着地表移动
self.Nodes[i].bActionLoop = true --动作循环
self.Nodes[i].nAction = NANIMATEID_MOVE --动作索引
self.Nodes[i].strMove = "Move" --是否要移动位置
end
end
self.bMainCtrl = false --是否主控
self.fStartTime = 0 --当前动画总共时间