-- 技能撤销操作 -- 删除技能轨迹 function Commands:deleteTrack(ce, track) local releaseTrack = false local function redo() -- 如果preTrack不为空 local preTrack = track:getPrevTrack() if preTrack ~= nil then track.PrevTrack = preTrack; preTrack:setNextTrack(-1); end -- nextTrack不为空 local nextTrack = track:getNextTrack() if nextTrack ~= nil then track.NextTrack = nextTrack track:setNextTrack(-1) end track:retain() releaseTrack = true -- 移除这个轨迹 track:removeFromParent(); -- 更新树 app.cs.updateCombineTree(); -- 选中空 app.cs.selectTrackObject(ce); return true; end local function undo() ce:addTrack(track); track:release() releaseTrack = false if not tolua.isnull(track.PrevTrack) then track.PrevTrack:setNextTrack(track:getTrackId()) end if not tolua.isnull(track.NextTrack) then track:setNextTrack(track.NextTrack:getTrackId()) end app.cs.updateCombineTree(); app.cs.selectTrackObject(track); end local function clear() if releaseTrack then track:release() end end return {redo = redo , undo = undo, clear = clear}; end -- 创建技能轨迹 function Commands:createTrack(ce, track) local releaseTrack = false local function redo() -- 如果preTrack不为空 local preTrack = track:getPrevTrack() if preTrack ~= nil then track.PrevTrack = preTrack; preTrack:setNextTrack(-1); end -- nextTrack不为空 local nextTrack = track:getNextTrack() if nextTrack ~= nil then track.NextTrack = nextTrack track:setNextTrack(-1) end -- 添加 ce:addTrack(track); if releaseTrack then track:release() releaseTrack = false end -- 更新树 app.cs.updateCombineTree(); -- 选中空 app.cs.selectTrackObject(track); return true; end local function undo() if not tolua.isnull(track.PrevTrack) then track.PrevTrack:setNextTrack(track:getTrackId()) end if not tolua.isnull(track.NextTrack) then track:setNextTrack(track.NextTrack:getTrackId()) end track:retain() releaseTrack = true -- 移除这个轨迹 track:removeFromParent(); app.cs.updateCombineTree(); app.cs.selectTrackObject(ce); end local function clear() if releaseTrack then track:release() end end return {redo = redo , undo = undo, clear = clear}; end