local AnimComponent = class("AnimComponent") local FP=FP local LuaConst=LuaConst function AnimComponent:initialize(entity) self.Entity = entity --当前动画 ,【实际是动画连线的条件参数trigger】 self.CurAnimID = nil --当前移动类型:动画位移 / 非动画位移 self.CurMoveMode = LuaConst.MoveMode.ByAnimation -- run 动画速度(0 正常 ;1 慢 2 快) self.RunAnimSpeedState = 0 --当前动画是否播放完毕 self.IsCurAnimOver = false --当前状态经过的时间(目前代码上用的地方都是判断当前动画的时间) self.StatePassTime = FP.newV1(0) --当前状态在上一帧时经过的时间 self.StateLastPassTime = FP.newV1(0) --对动画水平位移的缩放比例 self.AnimDisPercent = FP.newV1(1) --对动画旋转角度的缩放比例(一定是个正数) self.AnimRotatePercent = FP.newV1(1) --需要改变徘徊方向 self.NeedChangeWanderDir = false --出生动画已播放过了 self.BirthAnimPlayed = false --动画因为模型缩放距离改变 self.MoveSize = FP.newV1(entity._logicInitData._modelData.ModelScale) --让当前动画不能位移(目前只是受击时设置) self.LockCurAnimMove = false ------------------------------------------------- local modelData = entity._logicInitData._modelData if modelData.AnimID ~= "-1" then self.AnimMoveDic,self.AnimConditionDic = LuaDataManager.GetAnimData(modelData.ID,modelData.AnimID,modelData.AnimTransID) else self.AnimMoveDic = {} self.AnimConditionDic = {} end --当前动画位移信息,在动画结束的时候置空 self.CurAnimMoveData = nil self.CurAnimDataCount = 0 self.CurAnimDataLock = false self.CurAnimStartDir = FP.newV2(0,1)--当前动画开始时的朝向,给动画位移使用,防止和美术的路径存在偏差 self.AnimIDOverrideDic = {} end function AnimComponent:InvalidateSetAnim() self.setAnimInvalid = true end function AnimComponent:SetAnimIDOverride(originID, overrideID) local oldOverrideID = self.AnimIDOverrideDic[originID] self.AnimIDOverrideDic[originID] = overrideID if overrideID then if self.CurAnimID == originID then self:SetCurAnimID(overrideID, self.CurMoveMode) end else if oldOverrideID ~= nil and self.CurAnimID == oldOverrideID then self:SetCurAnimID(originID, self.CurMoveMode) end end end function AnimComponent:SetCurAnimID(id, moveMode) if not self.setAnimInvalid then self.LockCurAnimMove = false if id and self.AnimIDOverrideDic[id] then id = self.AnimIDOverrideDic[id] end self.CurAnimID = id self.CurMoveMode = moveMode if moveMode == LuaConst.MoveMode.ByAnimation then -- 大部分都直接设置就行 ;但是技能、受击在此之后会改下朝向 ,所以需要在这些特殊操作后再保存朝向 self:SetCurAnimStartDir() end self:UpdateCurAnimDataCache() end end function AnimComponent:SetCurAnimStartDir() self.CurAnimStartDir:Reset(self.Entity:GetLogicRotateDir()) end function AnimComponent:UpdateCurAnimDataCache() self.IsCurAnimOver = false self.AnimDisPercent:Reset(FP.Const.One) self.CurAnimMoveData = self:GetAnimMoveData(self.CurAnimID) if self.CurAnimMoveData then self.CurAnimDataCount = self.CurAnimMoveData.Count self.CurAnimDataLock = self.CurAnimMoveData.IsLock else self.CurAnimDataCount = 0 self.CurAnimDataLock = false end end --[[ 通过动画条件 获取动画位移信息 。]]-- function AnimComponent:GetAnimMoveData(animCondition) if animCondition == "" or not animCondition then return nil end local playAnimName = self.AnimConditionDic[animCondition] if playAnimName == "" or not playAnimName then return nil end local moveData = self.AnimMoveDic[playAnimName] if not moveData then logging.error(LTAG.ERROR , self.Entity._logicInitData._modelData.AnimID, " 没有找到动画位移信息 :", playAnimName ) end return moveData end return AnimComponent