新结算页面

master
罗家炜 2025-04-15 14:59:43 +08:00
parent 728a07e106
commit 9f240c2ae2
45 changed files with 4950 additions and 5745 deletions

View File

@ -2,7 +2,7 @@
--author--
-- a net client
NetClient = {
NetClient= {
}
ConnectionProtocol = {
@ -59,21 +59,21 @@ local LuaNetClient = taurus.unity.LuaNetClient
-- @param #string game
-- @param #number protocol
-- @return #NetClient the created NetClient
function NetClient.new(host, game, protocol)
function NetClient.new(host, game,protocol)
local self = {}
self.host = host or ""
self.game = game or ""
self.protocol = protocol or ConnectionProtocol.Tcp
-- self.responseMap = {}
self.onevent = event("onevent", false)
self.onconnect = event("onconnect", false)
---- print("222222222222222222222222222222222222222222 ",host," ",host," ",game," ",self.protocol)
self.onevent = event("onevent",false)
self.onconnect = event("onconnect",false)
--print("222222222222222222222222222222222222222222 ",host," ",host," ",game," ",self.protocol)
self.c__netClient = LuaNetClient(host, game, self, self.protocol)
self.c__netClient = LuaNetClient(host,game,self,self.protocol)
self.c__netClient:SetCallBackListener(R.c__ondata)
self.c__netClient:SetNetEventListener(R.c__onevent)
self.c__netClient:SetNetConnectListener(R.c__onconnect)
setmetatable(self, { __index = R })
setmetatable(self, {__index = R})
return self
end
@ -83,17 +83,16 @@ function R.connect(self)
end
self.c__netClient:Connect()
end
local TYPE_STRING = "string"
local TYPE_FUNC = "function"
local TYPE_TABLE = "table"
local NULL_JSON = "{}"
--- send
function R.send(self, cmd, data, callback)
if (debug_print) then
-- print("send host:" .. self.host)
end
function R.send(self,cmd, data, callback)
if(debug_print) then
print("send host:"..self.host)
end
if self.c__netClient == nil then
return
end
@ -105,11 +104,12 @@ function R.send(self, cmd, data, callback)
if data then
str = json.encode(data)
end
self.c__netClient:Send(cmd, str, callback)
self.c__netClient:Send(cmd,str,callback)
end
---c#网络层回调函数
function R.c__ondata(self, cmd, result, data, func)
function R.c__ondata(self,cmd,result,data,func)
local _response = nil
if type(data) == TYPE_STRING and string.len(data) > 0 then
@ -120,7 +120,7 @@ function R.c__ondata(self, cmd, result, data, func)
new_response.Data = _response
if self.holdCallback ~= nil then
if self.holdCallback ~=nil then
if self.holdCallback(new_response) then
return
end
@ -129,8 +129,8 @@ function R.c__ondata(self, cmd, result, data, func)
func(new_response)
end
function R.setSession(self, session)
printlog("setSession==>>>", session)
function R.setSession(self,session)
printlog("setSession==>>>",session)
self.session = session
if self.c__netClient == nil then
@ -140,7 +140,7 @@ function R.setSession(self, session)
end
function R.getSession(self)
printlog("getSession===>>>", self.session)
printlog("getSession===>>>",self.session)
return self.session
end
@ -151,13 +151,15 @@ function R.getAveragePingTime(self)
return self.c__netClient.AveragePingTime
end
---c#网络层回调函数
function R.c__onevent(self, cmd, data)
function R.c__onevent(self,cmd,data)
local new_response = {}
local _response = data and json.decode(data) or nil
new_response.Command = cmd
new_response.Data = _response
self.onevent(new_response)
end
function R.clearActionQueue(self)
@ -168,19 +170,19 @@ function R.clearActionQueue(self)
end
---c#网络层回调函数
function R.c__onconnect(self, code)
if (debug_print) then
-- print("codeccccccccccccccccccccccccccccccccccccccc" .. code)
function R.c__onconnect(self,code)
if(debug_print) then
print("codeccccccccccccccccccccccccccccccccccccccc"..code)
end
self.onconnect(code)
end
function R.clearEvent(self)
self.onevent:Clear()
self.onconnect:Clear()
self.onevent:Clear()
self.onconnect:Clear()
end
function R.setHold(self, func)
function R.setHold(self,func)
self.holdcallback = func
end
@ -188,5 +190,5 @@ function R.destroy(self)
if self.c__netClient then self.c__netClient:Destroy() end
self.onconnect:Clear()
self.onevent:Clear()
self.c__netClient = nil
self.c__netClient=nil
end

View File

@ -2,8 +2,8 @@ Queue = {}
function Queue.new(capacity)
local self = {}
setmetatable(self, { __index = Queue })
local self = {}
setmetatable(self,{__index = Queue})
self.capacity = capacity
self.queue = {}
self.size_ = 0
@ -20,11 +20,11 @@ function Queue:Enqueue(element)
self.queue[self.rear] = element
else
local temp = (self.rear + 1) % self.capacity
---- print("1111111111111111111====>>>>")
---- print(temp)
--print("1111111111111111111====>>>>")
--print(temp)
if temp == self.head then
error("Error: capacity is full.")
ViewUtil.ErrorTip(10001, "Error: capacity is full.")
ViewUtil.ErrorTip(10001,"Error: capacity is full.")
return
else
self.rear = temp
@ -33,11 +33,12 @@ function Queue:Enqueue(element)
self.queue[self.rear] = element
self.size_ = self.size_ + 1
end
end
function Queue:Dequeue()
if self:IsEmpty() then
ViewUtil.ErrorTip(10002, "Error: The Queue is empty.")
ViewUtil.ErrorTip(10002,"Error: The Queue is empty.")
error("Error: The Queue is empty.")
return
end
@ -73,16 +74,16 @@ function Queue:dump()
local first_flag = true
while h ~= r do
if first_flag == true then
str = "{" .. self.queue[h]
str = "{"..self.queue[h]
h = (h + 1) % self.capacity
first_flag = false
else
str = str .. "," .. self.queue[h]
str = str..","..self.queue[h]
h = (h + 1) % self.capacity
end
end
str = str .. "," .. self.queue[r] .. "}"
if (debug_print) then
-- print(str)
end
str = str..","..self.queue[r].."}"
if(debug_print) then
print(str)
end
end

View File

@ -5,131 +5,132 @@
bit = bit or {}
function bit.init32()
bit.data32 = {}
for i = 1, 32 do
bit.data32[i] = 2 ^ (32 - i)
for i=1,32 do
bit.data32[i]=2^(32-i)
end
end
bit.init32()
function bit:d2b(arg) --bit:d2b
local tr = {}
for i = 1, 32 do
function bit:d2b(arg) --bit:d2b
local tr={}
for i=1,32 do
if arg >= self.data32[i] then
tr[i] = 1
arg = arg - self.data32[i]
tr[i]=1
arg=arg-self.data32[i]
else
tr[i] = 0
tr[i]=0
end
end
return tr
return tr
end
function bit:b2d(arg) --bit:b2d
local nr = 0
for i = 1, 32 do
if arg[i] == 1 then
nr = nr + 2 ^ (32 - i)
function bit:b2d(arg) --bit:b2d
local nr=0
for i=1,32 do
if arg[i] ==1 then
nr=nr+2^(32-i)
end
end
return nr
return nr
end
function bit:_xor(a, b) --bit:xor
local op1 = self:d2b(a)
local op2 = self:d2b(b)
local r = {}
function bit:_xor(a,b) --bit:xor
local op1=self:d2b(a)
local op2=self:d2b(b)
local r={}
for i = 1, 32 do
if op1[i] == op2[i] then
r[i] = 0
for i=1,32 do
if op1[i]==op2[i] then
r[i]=0
else
r[i] = 1
r[i]=1
end
end
return self:b2d(r)
return self:b2d(r)
end
function bit:_and(a, b) --bit:_and
local op1 = self:d2b(a)
local op2 = self:d2b(b)
local r = {}
function bit:_and(a,b) --bit:_and
local op1=self:d2b(a)
local op2=self:d2b(b)
local r={}
for i = 1, 32 do
if op1[i] == 1 and op2[i] == 1 then
r[i] = 1
for i=1,32 do
if op1[i]==1 and op2[i]==1 then
r[i]=1
else
r[i] = 0
r[i]=0
end
end
return self:b2d(r)
return self:b2d(r)
end
function bit:_or(a, b) --bit:_or
local op1 = self:d2b(a)
local op2 = self:d2b(b)
local r = {}
function bit:_or(a,b) --bit:_or
local op1=self:d2b(a)
local op2=self:d2b(b)
local r={}
for i = 1, 32 do
if op1[i] == 1 or op2[i] == 1 then
r[i] = 1
for i=1,32 do
if op1[i]==1 or op2[i]==1 then
r[i]=1
else
r[i] = 0
r[i]=0
end
end
return self:b2d(r)
return self:b2d(r)
end
function bit:_not(a) --bit:_not
local op1 = self:d2b(a)
local r = {}
function bit:_not(a) --bit:_not
local op1=self:d2b(a)
local r={}
for i = 1, 32 do
if op1[i] == 1 then
r[i] = 0
for i=1,32 do
if op1[i]==1 then
r[i]=0
else
r[i] = 1
r[i]=1
end
end
return self:b2d(r)
return self:b2d(r)
end
function bit:_rshift(a, n) --bit:_rshift
local op1 = self:d2b(a)
local r = self:d2b(0)
function bit:_rshift(a,n) --bit:_rshift
local op1=self:d2b(a)
local r=self:d2b(0)
if n < 32 and n > 0 then
for i = 1, n do
for i = 31, 1, -1 do
op1[i + 1] = op1[i]
for i=1,n do
for i=31,1,-1 do
op1[i+1]=op1[i]
end
op1[1] = 0
op1[1]=0
end
r = op1
r=op1
end
return self:b2d(r)
return self:b2d(r)
end
function bit:_lshift(a, n) --bit:_lshift
local op1 = self:d2b(a)
local r = self:d2b(0)
function bit:_lshift(a,n) --bit:_lshift
local op1=self:d2b(a)
local r=self:d2b(0)
if n < 32 and n > 0 then
for i = 1, n do
for i = 1, 31 do
op1[i] = op1[i + 1]
for i=1,n do
for i=1,31 do
op1[i]=op1[i+1]
end
op1[32] = 0
op1[32]=0
end
r = op1
r=op1
end
return self:b2d(r)
return self:b2d(r)
end
function bit:print(ta)
local sr = ""
for i = 1, 32 do
sr = sr .. ta[i]
local sr=""
for i=1,32 do
sr=sr..ta[i]
end
-- print(sr)
print(sr)
end

View File

@ -1,3 +1,5 @@
string._htmlspecialchars_set = {}
string._htmlspecialchars_set["&"] = "&amp;"
string._htmlspecialchars_set["\""] = "&quot;"
@ -8,7 +10,7 @@ string._htmlspecialchars_set[">"] = "&gt;"
--[[--
HTML
~~~ lua
-- print(string.htmlspecialchars("<ABC>"))
print(string.htmlspecialchars("<ABC>"))
-- 输出 &lt;ABC&gt;
~~~
@param string input
@ -24,7 +26,7 @@ end
--[[--
HTML string.htmlspecialchars()
~~~ lua
-- print(string.restorehtmlspecialchars("&lt;ABC&gt;"))
print(string.restorehtmlspecialchars("&lt;ABC&gt;"))
-- 输出 <ABC>
~~~
@param string input
@ -40,7 +42,7 @@ end
--[[--
\n HTML
~~~ lua
-- print(string.nl2br("Hello\nWorld"))
print(string.nl2br("Hello\nWorld"))
-- 输出
-- Hello<br />World
~~~
@ -54,7 +56,7 @@ end
--[[--
\n HTML
~~~ lua
-- print(string.nl2br("<Hello>\nWorld"))
print(string.nl2br("<Hello>\nWorld"))
-- 输出
-- &lt;Hello&gt;<br />World
~~~
@ -86,10 +88,10 @@ local res = string.split(input, "-+-")
function string.split(input, delimiter)
input = tostring(input)
delimiter = tostring(delimiter)
if (delimiter == '') then return false end
local pos, arr = 0, {}
if (delimiter=='') then return false end
local pos,arr = 0, {}
-- for each divider found
for st, sp in function() return string.find(input, delimiter, pos, true) end do
for st,sp in function() return string.find(input, delimiter, pos, true) end do
table.insert(arr, string.sub(input, pos, st - 1))
pos = sp + 1
end
@ -101,7 +103,7 @@ end
~~~ lua
local input = " ABC"
-- print(string.ltrim(input))
print(string.ltrim(input))
-- 输出 ABC输入字符串前面的两个空格被去掉了
~~~
@ -121,7 +123,7 @@ end
~~~ lua
local input = "ABC "
-- print(string.ltrim(input))
print(string.ltrim(input))
-- 输出 ABC输入字符串最后的两个空格被去掉了
~~~
@param string input
@ -147,7 +149,7 @@ end
~~~ lua
local input = "hello"
-- print(string.ucfirst(input))
print(string.ucfirst(input))
-- 输出 Hello
~~~
@param string input
@ -165,7 +167,7 @@ end
URL
~~~ lua
local input = "hello world"
-- print(string.urlencode(input))
print(string.urlencode(input))
-- 输出
-- hello%20world
~~~
@ -186,7 +188,7 @@ end
URL
~~~ lua
local input = "hello%20world"
-- print(string.urldecode(input))
print(string.urldecode(input))
-- 输出
-- hello world
~~~
@ -195,9 +197,9 @@ local input = "hello%20world"
@see string.urlencode
]]
function string.urldecode(input)
input = string.gsub(input, "+", " ")
input = string.gsub(input, "%%(%x%x)", function(h) return string.char(checknumber(h, 16)) end)
input = string.gsub(input, "\r\n", "\n")
input = string.gsub (input, "+", " ")
input = string.gsub (input, "%%(%x%x)", function(h) return string.char(checknumber(h,16)) end)
input = string.gsub (input, "\r\n", "\n")
return input
end
@ -205,7 +207,7 @@ end
UTF8
~~~ lua
local input = "你好World"
-- print(string.utf8len(input))
print(string.utf8len(input))
-- 输出 7
~~~
@param string input
@ -217,7 +219,7 @@ function string.utf8len(input)
local len = string.len(input)
local left = len
local cnt = 0
local arr = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc }
local arr = {0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}
while left ~= 0 do
local tmp = string.byte(input, -left)
local i = #arr
@ -245,11 +247,11 @@ function string.utf8sub(input, index, endIndex)
endIndex = index
index = 1
end
local len = string.len(input)
local left = len
local cnt = 0
local len = string.len(input)
local left = len
local cnt = 0
local head, tail = 0, 0
local arr = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc }
local arr = {0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}
while left ~= 0 do
if cnt + 1 == index then
head = len - left + 1
@ -276,7 +278,7 @@ end
--[[--
~~~ lua
-- print(string.formatnumberthousands(1924235))
print(string.formatnumberthousands(1924235))
-- 输出 1,924,235
~~~
@param number num
@ -292,11 +294,12 @@ function string.formatnumberthousands(num)
return formatted
end
function string.concat(...)
function string.concat( ... )
local str = {}
local tem = { ... }
for _, v in ipairs(tem) do
local tem = {...}
for _,v in ipairs(tem) do
str[#str + 1] = v
end
return table.concat(str, "")
return table.concat(str , "")
end

View File

@ -1,46 +1,46 @@
EventContext = FairyGUI.EventContext
EventListener = FairyGUI.EventListener
EventContext = FairyGUI.EventContext
EventListener = FairyGUI.EventListener
EventDispatcher = FairyGUI.EventDispatcher
InputEvent = FairyGUI.InputEvent
NTexture = FairyGUI.NTexture
Container = FairyGUI.Container
Image = FairyGUI.Image
Stage = FairyGUI.Stage
Controller = FairyGUI.Controller
GObject = FairyGUI.GObject
GGraph = FairyGUI.GGraph
GGroup = FairyGUI.GGroup
GImage = FairyGUI.GImage
GLoader = FairyGUI.GLoader
GMovieClip = FairyGUI.GMovieClip
TextFormat = FairyGUI.TextFormat
GTextField = FairyGUI.GTextField
GRichTextField = FairyGUI.GRichTextField
GTextInput = FairyGUI.GTextInput
GComponent = FairyGUI.GComponent
GList = FairyGUI.GList
GRoot = FairyGUI.GRoot
GLabel = FairyGUI.GLabel
GButton = FairyGUI.GButton
GComboBox = FairyGUI.GComboBox
GProgressBar = FairyGUI.GProgressBar
GSlider = FairyGUI.GSlider
PopupMenu = FairyGUI.PopupMenu
ScrollPane = FairyGUI.ScrollPane
Transition = FairyGUI.Transition
UIPackage = FairyGUI.UIPackage
Window = FairyGUI.Window
GObjectPool = FairyGUI.GObjectPool
Relations = FairyGUI.Relations
RelationType = FairyGUI.RelationType
UIPanel = FairyGUI.UIPanel
UIPainter = FairyGUI.UIPainter
TypingEffect = FairyGUI.TypingEffect
GTween = FairyGUI.GTween
GTweener = FairyGUI.GTweener
EaseType = FairyGUI.EaseType
InputEvent = FairyGUI.InputEvent
NTexture = FairyGUI.NTexture
Container = FairyGUI.Container
Image = FairyGUI.Image
Stage = FairyGUI.Stage
Controller = FairyGUI.Controller
GObject = FairyGUI.GObject
GGraph = FairyGUI.GGraph
GGroup = FairyGUI.GGroup
GImage = FairyGUI.GImage
GLoader = FairyGUI.GLoader
GMovieClip = FairyGUI.GMovieClip
TextFormat = FairyGUI.TextFormat
GTextField = FairyGUI.GTextField
GRichTextField = FairyGUI.GRichTextField
GTextInput = FairyGUI.GTextInput
GComponent = FairyGUI.GComponent
GList = FairyGUI.GList
GRoot = FairyGUI.GRoot
GLabel = FairyGUI.GLabel
GButton = FairyGUI.GButton
GComboBox = FairyGUI.GComboBox
GProgressBar = FairyGUI.GProgressBar
GSlider = FairyGUI.GSlider
PopupMenu = FairyGUI.PopupMenu
ScrollPane = FairyGUI.ScrollPane
Transition = FairyGUI.Transition
UIPackage = FairyGUI.UIPackage
Window = FairyGUI.Window
GObjectPool = FairyGUI.GObjectPool
Relations = FairyGUI.Relations
RelationType = FairyGUI.RelationType
UIPanel = FairyGUI.UIPanel
UIPainter = FairyGUI.UIPainter
TypingEffect = FairyGUI.TypingEffect
GTween = FairyGUI.GTween
GTweener = FairyGUI.GTweener
EaseType = FairyGUI.EaseType
fgui = {}
fgui = {}
--[[
FairyGUIWindowWindowWindow
@ -48,11 +48,11 @@ OnInit、DoHideAnimation、DoShowAnimation、OnShown、OnHide。
MyWinClass = fgui.window_class()
function MyWinClass:ctor()
-- print('MyWinClass-ctor')
print('MyWinClass-ctor')
self.contentPane = UIPackage.CreateObject("Basics", "WindowA")
end
function MyWinClass:OnShown()
-- print('MyWinClass-onShown')
print('MyWinClass-onShown')
end
local win = MyWinClass.New()
win:Show()
@ -74,7 +74,7 @@ function fgui.window_class(base)
tolua.setpeer(ins, t)
ins:SetLuaPeer(t)
if t.ctor then
t.ctor(ins, ...)
t.ctor(ins,...)
end
return ins
@ -92,12 +92,12 @@ MyButton = fgui.extension_class(GButton)
fgui.register_extension("ui://包名/我的按钮", MyButton)
function MyButton:ctor() --当组件构建完成时此方法被调用
-- print(self:GetChild("n1"))
print(self:GetChild("n1"))
end
--添加自定义的方法和字段
function MyButton:Test()
-- print('test')
print('test')
end
local get = tolua.initget(MyButton)
@ -133,7 +133,7 @@ function fgui.extension_class(base)
o.Extend = function(ins)
local t = {}
setmetatable(t, o)
tolua.setpeer(ins, t)
tolua.setpeer(ins,t)
return t
end

View File

@ -30,9 +30,9 @@ function ControllerManager.Init()
_controllerMap[GroupMgrController] = GroupMgrController.new()
local hostIp = GetGameInfo("login_url")
if (debug_print) then
-- print("hostIp:::" .. hostIp)
end
if(debug_print) then
print("hostIp:::"..hostIp)
end
ControllerManager.WebClient = NetClient.new(hostIp, "majiang", ConnectionProtocol.Web)
--ControllerManager.GroupClient = nil--NetClient.new("http://192.168.0.1:8081/", "web_group", ConnectionProtocol.Web)
end
@ -76,7 +76,6 @@ function ControllerManager.SetGameNetClient(client)
end
function ControllerManager.OnConnect(code)
-- print("=======================================ControllerManager", code)
if (code ~= SocketCode.Connect) then
ControllerManager.SetGameNetClient(nil)
if code ~= SocketCode.DisconnectByServer then

View File

@ -49,12 +49,12 @@ end
function TableBG.GetTableBG(game_id)
local id = -1
local json_data = Utils.LoadLocalFile(DataManager.SelfUser.account_id .. DataManager.SelfUser.invite_code)
-- -- print(DataManager.SelfUser.invite_code, DataManager.SelfUser.account_id)
if json_data ~= nil then
local config_data = json.decode(json_data)
id = GetBG(config_data, game_id)
end
return id
-- print(DataManager.SelfUser.invite_code, DataManager.SelfUser.account_id)
if json_data ~= nil then
local config_data = json.decode(json_data)
id = GetBG(config_data, game_id)
end
return id
end
function TableBG.LoadTableBG(id, game_id, main_view, config)

View File

@ -303,9 +303,6 @@ function M:UpdateFamilyRoom(fgCtr, id)
}
end
local roomList = self._group.rooms
-- print("=========================playList,rooms")
pt(playList)
pt(roomList)
local roomCtr = ControllerManager.GetController(RoomController)
list_room.itemRenderer = function(index, obj)
if index < #roomList then

View File

@ -53,7 +53,7 @@ local function __NetTip(txt_msg)
end
local function __OnGameConnectAction(state)
---- print("state:"..state)
--print("state:"..state)
NetResetConnectWindow.CloseNetReset()
if state == SocketCode.Connect then
ViewManager.ChangeView(ViewManager.View_Main, DataManager.CurrenRoom.game_id)
@ -150,14 +150,14 @@ function ViewManager.ChangeView(id, game_id, callback)
end
function ViewManager.OnApplicationPause()
-- -- print("game pause")
if (_currenView ~= nil) then
-- print("game pause")
if (_currenView ~= nil) then
_currenView:OnApplicationPause()
end
end
function ViewManager.OnApplicationActive()
-- -- print("game active")
-- print("game active")
if (_currenView ~= nil) then
_currenView:OnApplicationActive()
end

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -152,34 +152,34 @@ function ShareScreenShot(n, callback)
end)
end
function shareQRCodePicture(url, secene)
---- print(debug.traceback())
-- print(url)
-- print(secene)
function shareQRCodePicture(url,secene)
--print(debug.traceback())
print(url)
print(secene)
local json_data = {}
json_data["title"] = "湘北联赛"
local mediaObject = {}
local filename = "qrcode" .. DataManager.SelfUser.account_id
-- print(Application.persistentDataPath)
print(Application.persistentDataPath)
mediaObject["path"] = Application.persistentDataPath
mediaObject["filename"] = filename
mediaObject["type"] = 1
json_data["mediaObject"] = mediaObject
json_data["description"] = "一款现实中朋友约局休闲娱乐的场所!速度约朋友一起来玩吧!"
json_data["scene"] = secene
-- print("json_data==================")
print("json_data==================")
local json_str = json.encode(json_data)
pt(json_str)
pt(json_str)
local tex2 = QRCodePicture.GenerateQRcode(url, 250, 250)
local tex1 = ResourcesManager.LoadObject("base/lobby/bg/bg.png", typeof(UnityEngine.Texture2D))
filename = filename .. ".jpg"
-- print("text2==========")
-- print(tex2)
-- print("text1==========")
-- print(tex1)
-- print("filename==========")
-- print(filename)
QRCodePicture.CombanitePicture(tex1, tex2, 393, 1334 - 802 - 250, filename)
local tex1 = ResourcesManager.LoadObject("base/lobby/bg/bg.png",typeof(UnityEngine.Texture2D))
filename = filename ..".jpg"
print("text2==========")
print(tex2)
print("text1==========")
print(tex1)
print("filename==========")
print(filename)
QRCodePicture.CombanitePicture(tex1,tex2,393,1334-802-250,filename)
GameApplication.Instance:ShareLink(1, json_str, nil)
end
@ -201,9 +201,7 @@ local bg_url = nil
function LoadGameBg(url, main_view)
local win_mode = main_view:GetChild("win_mode")
win_mode:RemoveChildren(0, -1, true)
local tex_bg = ResourcesManager.LoadObjectByGroup(url .. ".png", typeof(UnityEngine.Texture), url)
-- print("===========================mainbg")
-- print(url..".png",typeof(UnityEngine.Texture), url)
local tex_bg = ResourcesManager.LoadObjectByGroup(url..".png",typeof(UnityEngine.Texture), url)
local bg = GImage()
bg.texture = FairyGUI.NTexture(tex_bg)
bg.width = win_mode.width
@ -364,7 +362,7 @@ function LuaPrint(lua_table, limit, indent, step)
end
function printlog(...)
if debug_print then
-- print(...)
end
if debug_print then
print(...)
end
end

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -6,585 +6,236 @@ local EXClearingView = {}
local M = EXClearingView
function EXClearingView.new(blur_view)
setmetatable(M, { __index = ResultView })
local self = setmetatable({}, { __index = M })
self._full = true
ResultView.init(self, "ui://Main_Majiang/clearing")
setmetatable(M, { __index = ResultView })
local self = setmetatable({}, { __index = M })
self._full = true
ResultView.init(self, "ui://Main_Majiang/clearing_jiangxi")
self._currenIndex = 0
self._blur_view = blur_view
self._close_zone = false
self:InitMaPai()
self._currenIndex = 0
self._blur_view = blur_view
self._close_zone = false
-- self:InitMaPai()
return self
return self
end
function M:InitMaPai()
self.maPaiCtr = self._view:GetController("mapai")
self.maPaiCtr.selectedIndex = 0
-- function M:InitMaPai()
-- self.maPaiCtr = self._view:GetController("mapai")
-- self.maPaiCtr.selectedIndex = 0
self.maPaiList = {}
-- self.maPaiList = {}
for i = 1, 8 do
local tempMP = self._view:GetChild("niao" .. i)
table.insert(self.maPaiList, tempMP)
end
end
function M:IsMapaiShow(niao, isShow)
if niao then
niao.visible = isShow
end
end
function M:SetMaPaiValue(niao, value)
if niao then
niao.icon = 'ui://Main_Majiang/' .. get_majiang_prefix(DataManager.CurrenRoom.game_id) .. "201_" .. value
end
end
function M:SetMaPaiColor(niao, num)
niao:GetController("color").selectedIndex = num
end
function M:HideAllMapai()
for i = 1, #self.maPaiList do
self:IsMapaiShow(self.maPaiList[i], false)
self:SetMaPaiColor(self.maPaiList[i], 0)
end
end
function M:ShowSelectMaPai(niaoList)
if niaoList and #niaoList > 0 then
self.maPaiCtr.selectedIndex = 1
self:HideAllMapai()
for i = 1, #niaoList do
self:IsMapaiShow(self.maPaiList[i], true)
self:SetMaPaiValue(self.maPaiList[i], niaoList[i].card)
if niaoList[i].score > 0 then
self:SetMaPaiColor(self.maPaiList[i], 2)
end
end
else
self.maPaiCtr.selectedIndex = 0
end
end
function M:CalculatePaixingInfo(result)
self.WinList = {}
if result.info_list and #result.info_list > 0 then
for i = 1, #result.info_list do
if result.info_list[i].win_list and #result.info_list[i].win_list > 0 then
table.insert(self.WinList, result.info_list[i].win_list)
end
end
end
printlog("牌型列表====>>>")
pt(self.WinList)
end
function M:SetPaixingxiangqing(num)
for i = 1, #self.PaiXingXiangQingCtrList do
if self.PaiXingXiangQingCtrList[i] then
self.PaiXingXiangQingCtrList[i].selectedIndex = num
end
end
end
-- for i = 1, 8 do
-- local tempMP = self._view:GetChild("niao" .. i)
-- table.insert(self.maPaiList, tempMP)
-- end
-- end
function M:InitData(over, room, result, total_result, callback)
self._callback = callback
local _overCtr = self._view:GetController("over")
local btn_confirm = self._view:GetChild("btn_confirm")
local btn_result = self._view:GetChild("btn_showResult")
local btn_close = self._view:GetChild("big_result"):GetChild("btn_close")
local _btnCtr = self._view:GetController("button")
local _sdkCtr = self._view:GetController("sdk")
local ctr_type = self._view:GetController("type")
self._callback = callback
local showClearMainBtn = self._view:GetChild("btn_showClearMain")
local nextRoundBtn = self._view:GetChild("btn_nextRound")
local nextRoundBtn2 = self._view:GetChild("Btn_NextRound2")
local endRound = self._view:GetChild("Btn_EndRound")
local _overCtr = self._view:GetController("over")
local mainCtr = self._view:GetController("main")
local playerNum = self._view:GetController("playerNum")
self._view:GetChild("tex_roominfo").text = string.format("房号%s 局%s/%s %s", room.room_id, room.curren_round,
room.room_config.round, os.date("%Y-%m-%d %H:%M:%S", os.time()))
self._view:GetChild("tex_gameinfo").text = string.gsub(room.room_config:GetDes2(), "\r", "")
local peopleNum = room.room_config.people_num
if result then
self:ShowSelectMaPai(result.niao)
self:CalculatePaixingInfo(result)
end
playerNum.selectedIndex = peopleNum - 2
self.PaiXingXiangQingCtrList = {}
showClearMainBtn.onClick:Set(function()
mainCtr.selectedIndex = 1
end)
local paixingxiangqing = self._view:GetChild("btn_detal")
local fanhuipaixing = self._view:GetChild("btn_fanhuipaixing")
fanhuipaixing.visible = false
paixingxiangqing.visible = true
paixingxiangqing.onClick:Add(function()
paixingxiangqing.visible = false
fanhuipaixing.visible = true
self:SetPaixingxiangqing(1)
end)
fanhuipaixing.onClick:Add(function()
paixingxiangqing.visible = true
fanhuipaixing.visible = false
self:SetPaixingxiangqing(0)
end)
nextRoundBtn.onClick:Set(function()
local _gamectr = ControllerManager.GetController(GameController)
_gamectr:PlayerReady()
self:DestroyWithCallback()
end)
nextRoundBtn2.onClick:Set(function()
local _gamectr = ControllerManager.GetController(GameController)
_gamectr:PlayerReady()
self:DestroyWithCallback()
end)
if over ~= 2 then
if result.liuju then
ctr_type.selectedIndex = 3
else
local info_list = result.info_list
for i = 1, #info_list do
local is_win = info_list[i].is_win
if is_win then
if info_list[i].seat == room.self_player.seat then
ctr_type.selectedIndex = 1
else
ctr_type.selectedIndex = 2
end
end
end
end
endRound.onClick:Set(function()
ViewManager.ChangeView(ViewManager.View_Family)
end)
if over == 0 then
_btnCtr.selectedIndex = 0
_sdkCtr.selectedIndex = 1
btn_confirm.onClick:Add(function()
local _gamectr = ControllerManager.GetController(GameController)
_gamectr:PlayerReady()
self:DestroyWithCallback()
end)
self:AddClearItem(room, result.info_list, nil, over, result.niao, result.active_player)
elseif over == 1 then
_btnCtr.selectedIndex = 1
_sdkCtr.selectedIndex = 1
btn_result.onClick:Add(function()
self.maPaiCtr.selectedIndex = 0
_overCtr.selectedIndex = 1
_btnCtr.selectedIndex = 0
_sdkCtr.selectedIndex = 0
if self._qsinfo_view then
self._qsinfo_view:Dispose()
end
end)
btn_close.onClick:Add(function()
ViewManager.ChangeView(ViewManager.View_Lobby)
end)
self:AddClearItem(room, result.info_list, total_result.info_list, over, result.niao, result.active_player)
end
else
_overCtr.selectedIndex = 1
self.maPaiCtr.selectedIndex = 0
btn_close.onClick:Add(function()
ViewManager.ChangeView(ViewManager.View_Lobby)
end)
self:AddClearItem(room, nil, total_result.info_list, over)
end
if over == 0 then
_overCtr.selectedIndex = 0
self:fillResult0(room, peopleNum, result)
else
_overCtr.selectedIndex = 1
self:fillResult1(room, peopleNum, total_result)
end
end
function M:AddClearItem(room, data, total_data, over, niao, active_player)
local n = over + 1
local list_view1 = self._view:GetChild("player_list_1")
local list_view2 = self._view:GetChild("player_list_2")
function M:fillResult0(room, peopleNum, result)
local config = ExtendManager.GetExtendConfig(room.game_id)
local mode = config:GetGameInfo()
local gamePlay = mode:LoadConfigToDetail(json.encode(room.room_config.config))
self._view:GetChild("Label_GamePlay").title = string.format("第%s/%s局,%s", room.curren_round,
room.room_config.round, gamePlay)
for i = 1, peopleNum do
local playerInfoComp = self._view:GetChild(string.format("Comp_Player%d", i))
if 0 == over or 1 == over then
table.sort(data, function(a, b) return a.seat < b.seat end)
list_view1:RemoveChildrenToPool()
local allCardsList = playerInfoComp:GetChild("list_allCards")
local huCardBtn = playerInfoComp:GetChild("Btn_Card_Hu")
local jiangMaList = playerInfoComp:GetChild("list_JiangMa")
local ziMoCtr = playerInfoComp:GetController("isZiMo")
local dianPaoCtr = playerInfoComp:GetController("isPao")
local isMeCtr = playerInfoComp:GetController("IsMe")
for i = 1, #data do
local item = list_view1:AddItemFromPool()
self:FillItemData(room, data[i], item, active_player, niao)
end
if #data == 3 then
list_view1.lineGap = 54
elseif #data == 2 then
list_view1.lineGap = 108
end
if 1 == over then
self:FillItemData2(room, total_data, list_view2)
end
elseif 2 == over then
self:FillItemData2(room, total_data, list_view2)
end
local infoList = result.info_list[i]
local playInfo = room:GetPlayerBySeat(infoList.seat)
local fzCardInfo = playInfo.fz_list
local fzInfoNum = #fzCardInfo
local handInfoNum = #infoList.hand_card
self:fillHead(playInfo.self_user.head_url, playerInfoComp)
playerInfoComp:GetChild("text_name").text = playInfo.self_user.nick_name
playerInfoComp:GetChild("Text_BoJing").text = infoList.jing_score >= 0 and
string.format("+%d", infoList.jing_score) or infoList.jing_score
playerInfoComp:GetChild("Text_Gang").text = infoList.gang_score >= 0 and
string.format("+%d", infoList.gang_score) or infoList.gang_score
playerInfoComp:GetChild("Text_Hu").text = infoList.hu_score >= 0 and string.format("+%d", infoList.hu_score) or
infoList.hu_score
playerInfoComp:GetChild("Text_Tatal").text = infoList.round_score >= 0 and
string.format("+%d", infoList.round_score) or infoList.round_score
for j = 1, fzInfoNum do
if fzCardInfo[j].type == FZType.Peng then
local item = allCardsList:AddItemFromPool("ui://Main_Majiang/Comp_FZ_3")
for l = 1, 3 do
local card = item:GetChild(string.format("Btn_Card%d", l))
card.icon = string.format("ui://Main_Majiang/%s202_%d", self:GetPrefix(), fzCardInfo[j].card)
end
elseif fzCardInfo[j].type == FZType.Chi then
local item = allCardsList:AddItemFromPool("ui://Main_Majiang/Comp_FZ_3")
for l = 1, 3 do
local card = item:GetChild(string.format("Btn_Card%d", l))
card.icon = string.format("ui://Main_Majiang/%s202_%d", self:GetPrefix(), fzCardInfo[j].opcard
[l])
end
elseif fzCardInfo[j].type == FZType.Gang or fzCardInfo[j].type == FZType.Gang_An or fzCardInfo[j].type == FZType.Gang_Peng then
local item = allCardsList:AddItemFromPool("ui://Main_Majiang/Comp_FZ_4")
for l = 1, 4 do
local card = item:GetChild(string.format("Btn_Card%d", l))
if fzCardInfo[j].type == FZType.Gang_An and j == 4 then
card.icon = "ui://Main_Majiang/202_00"
else
card.icon = string.format("ui://Main_Majiang/%s202_%d", self:GetPrefix(), fzCardInfo[j].card)
end
end
end
end
local handCardItem = allCardsList:AddItemFromPool("ui://Main_Majiang/Comp_HandCard")
local handCardList = handCardItem:GetChild("list")
handCardList:SetVirtual()
handCardList.itemRenderer = function(index, obj)
obj.icon = string.format("ui://Main_Majiang/%s202_%d", self:GetPrefix(), infoList.hand_card[index + 1])
end
handCardList.numItems = handInfoNum
allCardsList.width = 172 * fzInfoNum + 60 + (handInfoNum - 1) * 56 + 36 * (fzInfoNum)
if infoList.seat == room.self_player.seat then
isMeCtr.selectedIndex = 1
end
if infoList.is_win then
local winInfo = ""
for j = 1, #infoList.win_list do
winInfo = string.format("%s,%s", winInfo, Hu_Type_Name[infoList.win_list[j].type])
end
winInfo = string.sub(winInfo, 2, -1)
playerInfoComp:GetChild("text_huShow").text = winInfo
if room.isZiMoHu then
ziMoCtr.selectedIndex = 1
end
huCardBtn.icon = string.format("ui://Main_Majiang/202_%d", infoList.win_card)
huCardBtn.visible = true
jiangMaList.visible = false
else
playerInfoComp:GetChild("text_huShow").text = ""
if not room.isZiMoHu and playInfo.self_user.account_id == result.active_player then
dianPaoCtr.selectedIndex = 1
end
huCardBtn.visible = false
jiangMaList.visible = false
end
end
end
function M:FillItemData(room, data, item, active_player, niao)
local _gamectr = ControllerManager.GetController(GameController)
local p = room:GetPlayerBySeat(data["seat"])
item:GetChild("playerName").text = p.self_user.nick_name
item:GetChild("lab_hp").text = "" --抓马
local user = room:GetPlayerBySeat(data["seat"]).self_user
local head = item:GetChild('head'):GetChild('n4')
ImageLoad.Load(user.head_url, head)
function M:fillResult1(room, peopleNum, total_result)
local gameNameAndRoomIDText = self._view:GetChild("Text_GameNameAndRoomID")
local familyIDText = self._view:GetChild("Text_FamilyID")
for i, v in pairs(room.self_player.self_user.games) do
if v.game_id == room.game_id then
gameNameAndRoomIDText.text = string.format("%s 房号:%s", v.name, room.room_id)
end
end
if #gameNameAndRoomIDText.text <= 0 then
gameNameAndRoomIDText.text = string.format("房号:%s", room.room_id)
end
if room.group_id ~= 0 then
familyIDText.text = string.format("俱乐部:%s", room.group_id)
else
familyIDText.visible = false
end
self._view:GetChild("Text_RoundNum").text = string.format("局数:%s/%s", room.curren_round, room.room_config.round)
self._view:GetChild("Text_Time").text = os.date("%Y-%m-%d %H:%M:%S", os.time())
-- 手牌
local hand_cards = data["hand_card"]
table.sort(hand_cards, ViewUtil.HandCardSort)
local hand_list_view = item:GetChild("hand_card_list")
hand_list_view:RemoveChildrenToPool()
for i = 1, #hand_cards do
local card = hand_list_view:AddItemFromPool()
card.icon = "ui://Main_Majiang/202_" .. hand_cards[i]
end
hand_list_view.width = 52 * #hand_cards
for i = 1, peopleNum do
local resultInfoComp = self._view:GetChild(string.format("Comp_ResultInfo%d", i))
local totalInfoList = total_result.info_list[i]
local playInfo = room:GetPlayerBySeat(totalInfoList.seat)
local fz_card = p.fz_list
local fz_card_list = item:GetChild("fz_card_list")
fz_card_list.width = 157 * #fz_card * 0.8
fz_card_list:RemoveChildrenToPool()
self:fillHead(playInfo.self_user.head_url, resultInfoComp)
for i = 1, #fz_card do
if fz_card[i].type == FZType.Peng then
local item = fz_card_list:AddItemFromPool("ui://Main_Majiang/clearing_fz_3")
for j = 1, 3 do
local card = item:GetChild("card_" .. j)
card.icon = "ui://Main_Majiang/202_" .. fz_card[i].card
end
elseif fz_card[i].type == FZType.Chi then
local item = fz_card_list:AddItemFromPool("ui://Main_Majiang/clearing_fz_3")
for j = 1, 3 do
local card = item:GetChild("card_" .. j)
card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_" .. fz_card[i].opcard[j]
end
elseif fz_card[i].type == FZType.Gang or fz_card[i].type == FZType.Gang_An or fz_card[i].type == FZType.Gang_Peng then
local item = fz_card_list:AddItemFromPool("ui://Main_Majiang/clearing_fz_4")
for j = 1, 4 do
local card = item:GetChild("card_" .. j)
if fz_card[i].type == FZType.Gang_An and j == 4 then
card.icon = "ui://Main_Majiang/202_00"
else
card.icon = "ui://Main_Majiang/202_" .. fz_card[i].card
end
end
end
end
resultInfoComp:GetChild('Text_Name').text = playInfo.self_user.nick_name
resultInfoComp:GetChild('Text_ID').text = string.format("ID:%s", playInfo.self_user.account_id)
resultInfoComp:GetChild('Text_TotalScore').text = totalInfoList.total_score >= 0 and
string.format("+%s", totalInfoList.total_score) or totalInfoList.total_score
resultInfoComp:GetChild('Text_ZiMo').text = string.format("自摸 %d次", totalInfoList.settle_log.zimo or 0)
resultInfoComp:GetChild('Text_JiePao').text = string.format("接炮 %d次", totalInfoList.settle_log.jiepao or 0)
resultInfoComp:GetChild('Text_FangPao').text = string.format("放炮 %d次", totalInfoList.settle_log.fangpao or 0)
resultInfoComp:GetChild('Text_AnGang').text = string.format("暗杠 %d次", totalInfoList.settle_log.an_kong or 0)
resultInfoComp:GetChild('Text_MingGang').text = string.format("明杠 %d次",
totalInfoList.settle_log.ming_kong or 0)
resultInfoComp:GetChild('Text_FangGang').text = string.format("放杠 %d次",
totalInfoList.settle_log.fanggang or 0)
local huadd = data["hu_score"]
local gangadd = data["gang_score"]
local jingadd = data["jing_score"]
local total = data["round_score"]
local geng_zhuan = data["geng_zhuan"]
local sp = " "
local str = "胡:" .. huadd .. ""
if gangadd then
str = str .. sp .. "杠:" .. gangadd .. ""
end
if jingadd then
str = str .. sp .. "博精:" .. jingadd .. ""
end
item:GetChild("score1").text = str
-- local total_score = data["total_score"]
if total >= 0 then
item:GetChild("score2").text = "+" .. total
item:GetChild("score2").grayed = false
else
item:GetChild("score2").text = total
item:GetChild("score2").grayed = true
end
--计算牌型
local totalPeson = DataManager.CurrenRoom.room_config.people_num - 1
local win_list = data["win_list"]
local is_win = data["is_win"] or false
local str1 = ""
sp = ""
if is_win then
if win_list then
if DataManager.CurrenRoom.isZiMoHu then
str1 = "自摸"
else
str1 = "接炮"
end
for i = 1, #win_list do
local huName = Hu_Type_Name[win_list[i].type]
if huName then
str1 = str1 .. sp .. huName .. "x" .. win_list[i].score
end
end
str1 = str1 .. " +" .. huadd .. ""
end
else
printlog("输家============")
if DataManager.CurrenRoom.isZiMoHu then
printlog("自摸处理============")
--str1=""
if #self.WinList == 1 then
for i = 1, #self.WinList do
for j = 1, #self.WinList[i] do
local huName = Hu_Type_Name[self.WinList[i][j].type]
if huName then
if j == 1 then
str1 = str1 .. huName .. "x" .. self.WinList[i][j].score
else
str1 = str1 .. sp .. huName .. "x" .. self.WinList[i][j].score
end
end
end
end
str1 = str1 .. " " .. huadd .. ""
else
printlog("服务端自摸计算异常===>>>")
end
else
printlog("非自摸处理====>>>")
--点炮 一炮多响
local yipaoduoxiang = false
if #self.WinList > 1 then
yipaoduoxiang = true
end
if yipaoduoxiang then
printlog("一炮多响====>>>")
str = "点炮"
local allTypeList = {}
local isHas = false
for i = 1, #self.WinList do
for j = 1, #self.WinList[i] do
isHas = IsHasDictionary(self.WinList[i][j].type, allTypeList)
if isHas == false then
table.insert(allTypeList, self.WinList[i][j].type)
end
end
end
if #allTypeList > 0 then
for i = 1, #allTypeList do
local huName = Hu_Type_Name[allTypeList[i]]
if huName then
str1 = str1 .. huName .. ""
end
end
str1 = str1 .. " " .. huadd .. ""
end
else
if p.self_user.account_id == active_player and is_win == false and not data["liuju"] then
str1 = "点炮"
if #self.WinList == 1 then
for i = 1, # self.WinList do
for j = 1, #self.WinList[i] do
local huName = Hu_Type_Name[self.WinList[i][j].type]
if huName then
str1 = str1 .. sp .. huName .. "x" .. self.WinList[i][j].score
end
end
end
str1 = str1 .. " " .. huadd .. ""
else
printlog("服务端自摸计算异常===>>>")
end
end
end
end
end
--
printlog("牌型计算==>>>", str1)
if data["ming_gang_num"] > 0 then
str1 = str1 .. " 明杠x" .. data["ming_gang_num"]
end
if data["an_gang_num"] > 0 then
str1 = str1 .. " 暗杠x" .. data["an_gang_num"]
end
if data["dian_gang_num"] > 0 then
str1 = str1 .. " 点杠x" .. data["dian_gang_num"]
end
if gangadd ~= 0 then
if gangadd > 0 then
str1 = str1 .. " +" .. gangadd .. ""
else
str1 = str1 .. " " .. gangadd .. ""
end
end
if data["ma_geng_gong"] and data["ma_geng_gong"] ~= 0 then
if data["ma_geng_gong"] > 0 then
str1 = str1 .. " 马跟杠:+" .. data["ma_geng_gong"] .. ""
else
str1 = str1 .. " 马跟杠:" .. data["ma_geng_gong"] .. ""
end
end
if geng_zhuan and geng_zhuan ~= 0 then
if geng_zhuan > 0 then
str1 = str1 .. " 跟庄:+" .. geng_zhuan .. ""
else
str1 = str1 .. " 跟庄:" .. geng_zhuan .. ""
end
end
item:GetChild("score3").text = str1
item:GetChild("score4").text = str1
local paixingCtr = item:GetController("detail")
table.insert(self.PaiXingXiangQingCtrList, paixingCtr)
-------------------------
local hp_nonnegative = room:checkHpNonnegative()
item:GetController("nonnegative").selectedIndex = hp_nonnegative and 1 or 0
if hp_nonnegative then
local hp_info = data.hp_info
local ctr_hp_limit = item:GetController("hp_limit")
local hp = d2ad(hp_info.round_actual_hp)
if hp >= 0 then hp = "+" .. tostring(hp) end
item:GetChild("tex_hp").text = hp
ctr_hp_limit.selectedIndex = hp_info.upper_limit and 1 or 0
end
item:GetController("win").selectedIndex = is_win and 0 or 1
if p.self_user.account_id == active_player and is_win == false and total < 0 then
item:GetController("win").selectedIndex = 2
end
if is_win then
item:GetController("bg").selectedIndex = 1
else
item:GetController("bg").selectedIndex = 0
end
local win_card = item:GetChild("win_card")
win_card.icon = "ui://Main_Majiang/202_" .. data["win_card"]
if niao and #niao > 0 then
local currentNiaoList = self:CalculateNiao(niao, data["seat"])
if currentNiaoList and #currentNiaoList > 0 then
local lst_niao = item:GetChild("list_niao")
lst_niao:RemoveChildrenToPool()
for i = 1, #currentNiaoList do
if currentNiaoList[i].score > 0 then
local card_niao = lst_niao:AddItemFromPool()
card_niao.icon = "ui://Main_Majiang/202_" .. currentNiaoList[i].card
end
end
end
end
if p.seat == room.banker_seat then
item:GetController("bank").selectedIndex = 1
end
resultInfoComp:GetController("win").selectedIndex = totalInfoList.total_score >= 0 and 1 or 0
end
end
function M:CalculateNiao(niaoList, seat)
local tempNiao = {}
for i = 1, #niaoList do
if niaoList[i].seat == seat then
table.insert(tempNiao, niaoList[i])
end
end
return tempNiao
end
function M:FillItemData2(room, data, list)
-- 赋值result_info聊天室分享需要
local player_list = {}
for i = 1, #data do
player_list[i] = {}
local user = room:GetPlayerBySeat(data[i].seat).self_user
player_list[i].id = user.account_id
player_list[i].hp_info = data[i].hp_info
player_list[i].score = data[i].total_score
player_list[i].house = room.owner_id == player_list[i].id and 1 or 0
player_list[i].nick = user.nick_name
player_list[i].head_url = user.head_url
local settle_log = data[i].settle_log
player_list[i].param = {}
player_list[i].param[1] = {}
player_list[i].param[1].key = "自摸次数:"
player_list[i].param[1].value = tostring(data[i].settle_log.zimo)
player_list[i].param[2] = {}
player_list[i].param[2].key = "接炮次数:"
player_list[i].param[2].value = tostring(data[i].settle_log.jie_pao)
player_list[i].param[3] = {}
player_list[i].param[3].key = "点炮次数:"
player_list[i].param[3].value = tostring(data[i].settle_log.dian_pao)
player_list[i].param[4] = {}
player_list[i].param[4].key = "暗杠次数:"
player_list[i].param[4].value = tostring(data[i].settle_log.an_kong)
player_list[i].param[5] = {}
player_list[i].param[5].key = "明杠次数:"
player_list[i].param[5].value = tostring(data[i].settle_log.ming_kong)
end
local round = room.room_config.round
self:GenerateRoomResultInfo(round, room.room_config:GetGameName(), room.room_id, room.create_time, player_list)
local big_result = self._view:GetChild("big_result")
big_result:GetChild("txt_room_info").text = string.format("%s 房号%s 局%s/%s", os.date("%Y/%m/%d", os.time()),
room.room_id, room.curren_round, room.room_config.round)
local lst_p = big_result:GetChild("player_list")
if #player_list == 3 then
lst_p.columnGap = 108
elseif #player_list == 2 then
lst_p.columnGap = 208
end
self:InitBigResult(room, 30)
local show_detail = room.hpOnOff == 1
for i = 1, lst_p.numChildren do
local com_p = lst_p:GetChildAt(i - 1)
com_p:GetController("jsicon").selectedIndex = i - 1
local list_param = com_p:GetChild("list_param")
for j = 1, list_param.numChildren do
local tem = list_param:GetChildAt(j - 1)
tem:GetChild("txt_value").textFormat.size = 30
end
if show_detail then
local score = 0
if com_p:GetController("pn").selectedIndex == 0 then
score = com_p:GetChild("txt_navigate").text
else
score = com_p:GetChild("txt_positive").text
end
score = score / room.score_times
com_p:GetChild("tex_detail_score").text = string.format("%s × %s倍", score, room.score_times)
end
end
if room.group_id ~= 0 then
big_result:GetController("group").selectedIndex = 1
end
DataManager.CurrenRoom = nil
end
function M:LoadHead(p, room)
local btn_head = self._view:GetChild("btn_head")
for i = 1, #room.player_list do
local player = room.player_list[i]
if p.seat == player.seat and player.self_user.head_url ~= "" then
ImageLoad.Load(player.self_user.head_url, btn_head.icon)
end
end
function M:fillHead(url, view)
ImageLoad.Load(url, view:GetChild("Btn_Head")._iconObject)
end
local prefix
function M:GetPrefix()
-- if not prefix then
prefix = get_majiang_prefix(10)
-- end
return prefix
-- if not prefix then
prefix = get_majiang_prefix(10)
-- end
return prefix
end
function M:DestroyWithCallback()
if self._callback then
self._callback()
end
self:Destroy()
if self._callback then
self._callback()
end
self:Destroy()
end
return M

View File

@ -1,605 +0,0 @@
require("Game.View.ResultView")
local Hu_Type_Name = import(".CS_Win_Type")
local EXClearingView = {}
local M = EXClearingView
function EXClearingView.new(blur_view)
setmetatable(M, { __index = ResultView })
local self = setmetatable({}, { __index = M })
self._full = true
ResultView.init(self, "ui://Main_Majiang/clearing_jiangxi")
self._currenIndex = 0
self._blur_view = blur_view
self._close_zone = false
self:InitMaPai()
return self
end
function M:InitMaPai()
self.maPaiCtr = self._view:GetController("mapai")
self.maPaiCtr.selectedIndex = 0
self.maPaiList = {}
for i = 1, 8 do
local tempMP = self._view:GetChild("niao" .. i)
table.insert(self.maPaiList, tempMP)
end
end
function M:IsMapaiShow(niao, isShow)
if niao then
niao.visible = isShow
end
end
function M:SetMaPaiValue(niao, value)
if niao then
niao.icon = 'ui://Main_Majiang/' .. get_majiang_prefix(DataManager.CurrenRoom.game_id) .. "201_" .. value
end
end
function M:SetMaPaiColor(niao, num)
niao:GetController("color").selectedIndex = num
end
function M:HideAllMapai()
for i = 1, #self.maPaiList do
self:IsMapaiShow(self.maPaiList[i], false)
self:SetMaPaiColor(self.maPaiList[i], 0)
end
end
function M:ShowSelectMaPai(niaoList)
if niaoList and #niaoList > 0 then
self.maPaiCtr.selectedIndex = 1
self:HideAllMapai()
for i = 1, #niaoList do
self:IsMapaiShow(self.maPaiList[i], true)
self:SetMaPaiValue(self.maPaiList[i], niaoList[i].card)
if niaoList[i].score > 0 then
self:SetMaPaiColor(self.maPaiList[i], 2)
end
end
else
self.maPaiCtr.selectedIndex = 0
end
end
function M:CalculatePaixingInfo(result)
self.WinList = {}
if result.info_list and #result.info_list > 0 then
for i = 1, #result.info_list do
if result.info_list[i].win_list and #result.info_list[i].win_list > 0 then
table.insert(self.WinList, result.info_list[i].win_list)
end
end
end
printlog("牌型列表====>>>")
pt(self.WinList)
end
function M:SetPaixingxiangqing(num)
for i = 1, #self.PaiXingXiangQingCtrList do
if self.PaiXingXiangQingCtrList[i] then
self.PaiXingXiangQingCtrList[i].selectedIndex = num
end
end
end
function M:InitData(over, room, result, total_result, callback)
self._callback = callback
local _overCtr = self._view:GetController("over")
local btn_confirm = self._view:GetChild("btn_confirm")
local btn_result = self._view:GetChild("btn_showResult")
local btn_close = self._view:GetChild("big_result"):GetChild("btn_close")
local _btnCtr = self._view:GetController("button")
local _sdkCtr = self._view:GetController("sdk")
local ctr_type = self._view:GetController("type")
self._view:GetChild("tex_roominfo").text = string.format("房号%s 局%s/%s %s", room.room_id, room.curren_round,
room.room_config.round, os.date("%Y-%m-%d %H:%M:%S", os.time()))
self._view:GetChild("tex_gameinfo").text = string.gsub(room.room_config:GetDes2(), "\r", "")
if result then
self:ShowSelectMaPai(result.niao)
self:CalculatePaixingInfo(result)
end
self.PaiXingXiangQingCtrList = {}
local paixingxiangqing = self._view:GetChild("btn_detal")
local fanhuipaixing = self._view:GetChild("btn_fanhuipaixing")
fanhuipaixing.visible = false
paixingxiangqing.visible = true
paixingxiangqing.onClick:Add(function()
paixingxiangqing.visible = false
fanhuipaixing.visible = true
self:SetPaixingxiangqing(1)
end)
fanhuipaixing.onClick:Add(function()
paixingxiangqing.visible = true
fanhuipaixing.visible = false
self:SetPaixingxiangqing(0)
end)
if over ~= 2 then
if result.liuju then
ctr_type.selectedIndex = 3
else
local info_list = result.info_list
for i = 1, #info_list do
local is_win = info_list[i].is_win
if is_win then
if info_list[i].seat == room.self_player.seat then
ctr_type.selectedIndex = 1
else
ctr_type.selectedIndex = 2
end
end
end
end
if over == 0 then
_btnCtr.selectedIndex = 0
_sdkCtr.selectedIndex = 1
btn_confirm.onClick:Add(function()
local _gamectr = ControllerManager.GetController(GameController)
_gamectr:PlayerReady()
self:DestroyWithCallback()
end)
self:AddClearItem(room, result.info_list, nil, over, result.niao, result.active_player)
elseif over == 1 then
_btnCtr.selectedIndex = 1
_sdkCtr.selectedIndex = 1
btn_result.onClick:Add(function()
self.maPaiCtr.selectedIndex = 0
_overCtr.selectedIndex = 1
_btnCtr.selectedIndex = 0
_sdkCtr.selectedIndex = 0
if self._qsinfo_view then
self._qsinfo_view:Dispose()
end
end)
btn_close.onClick:Add(function()
ViewManager.ChangeView(ViewManager.View_Lobby)
end)
self:AddClearItem(room, result.info_list, total_result.info_list, over, result.niao, result.active_player)
end
else
_overCtr.selectedIndex = 1
self.maPaiCtr.selectedIndex = 0
btn_close.onClick:Add(function()
ViewManager.ChangeView(ViewManager.View_Lobby)
end)
self:AddClearItem(room, nil, total_result.info_list, over)
end
-----------------------lingmeng----------------------------
local showClearMainBtn = self._view:GetChild("btn_showClearMain")
local nextRoundBtn = self._view:GetChild("btn_nextRound")
local MainCtr = self._view:GetController("main")
showClearMainBtn.onClick:Set(function()
MainCtr.selectedIndex = 1
end)
nextRoundBtn.onClick:Set(function()
local _gamectr = ControllerManager.GetController(GameController)
_gamectr:PlayerReady()
self:DestroyWithCallback()
end)
-----------------------------------------------------------
end
function M:AddClearItem(room, data, total_data, over, niao, active_player)
local n = over + 1
local list_view1 = self._view:GetChild("player_list_1")
local list_view2 = self._view:GetChild("player_list_2")
if 0 == over or 1 == over then
table.sort(data, function(a, b) return a.seat < b.seat end)
list_view1:RemoveChildrenToPool()
for i = 1, #data do
local item = list_view1:AddItemFromPool()
self:FillItemData(room, data[i], item, active_player, niao)
end
if #data == 3 then
list_view1.lineGap = 54
elseif #data == 2 then
list_view1.lineGap = 108
end
if 1 == over then
self:FillItemData2(room, total_data, list_view2)
end
elseif 2 == over then
self:FillItemData2(room, total_data, list_view2)
end
end
function M:FillItemData(room, data, item, active_player, niao)
local _gamectr = ControllerManager.GetController(GameController)
local p = room:GetPlayerBySeat(data["seat"])
item:GetChild("playerName").text = p.self_user.nick_name
item:GetChild("lab_hp").text = "" --抓马
local user = room:GetPlayerBySeat(data["seat"]).self_user
local head = item:GetChild('head'):GetChild('n4')
ImageLoad.Load(user.head_url, head)
-- 手牌
local hand_cards = data["hand_card"]
table.sort(hand_cards, ViewUtil.HandCardSort)
local hand_list_view = item:GetChild("hand_card_list")
hand_list_view:RemoveChildrenToPool()
for i = 1, #hand_cards do
local card = hand_list_view:AddItemFromPool()
card.icon = "ui://Main_Majiang/202_" .. hand_cards[i]
end
hand_list_view.width = 52 * #hand_cards
local fz_card = p.fz_list
local fz_card_list = item:GetChild("fz_card_list")
fz_card_list.width = 157 * #fz_card * 0.8
fz_card_list:RemoveChildrenToPool()
for i = 1, #fz_card do
if fz_card[i].type == FZType.Peng then
local item = fz_card_list:AddItemFromPool("ui://Main_Majiang/clearing_fz_3")
for j = 1, 3 do
local card = item:GetChild("card_" .. j)
card.icon = "ui://Main_Majiang/202_" .. fz_card[i].card
end
elseif fz_card[i].type == FZType.Chi then
local item = fz_card_list:AddItemFromPool("ui://Main_Majiang/clearing_fz_3")
for j = 1, 3 do
local card = item:GetChild("card_" .. j)
card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_" .. fz_card[i].opcard[j]
end
elseif fz_card[i].type == FZType.Gang or fz_card[i].type == FZType.Gang_An or fz_card[i].type == FZType.Gang_Peng then
local item = fz_card_list:AddItemFromPool("ui://Main_Majiang/clearing_fz_4")
for j = 1, 4 do
local card = item:GetChild("card_" .. j)
if fz_card[i].type == FZType.Gang_An and j == 4 then
card.icon = "ui://Main_Majiang/202_00"
else
card.icon = "ui://Main_Majiang/202_" .. fz_card[i].card
end
end
end
end
local huadd = data["hu_score"]
local gangadd = data["gang_score"]
local jingadd = data["jing_score"]
local total = data["round_score"]
local geng_zhuan = data["geng_zhuan"]
local sp = " "
local str = "胡:" .. huadd .. ""
if gangadd then
str = str .. sp .. "杠:" .. gangadd .. ""
end
if jingadd then
str = str .. sp .. "博精:" .. jingadd .. ""
end
item:GetChild("score1").text = str
-- local total_score = data["total_score"]
if total >= 0 then
item:GetChild("score2").text = "+" .. total
item:GetChild("score2").grayed = false
else
item:GetChild("score2").text = total
item:GetChild("score2").grayed = true
end
--计算牌型
local totalPeson = DataManager.CurrenRoom.room_config.people_num - 1
local win_list = data["win_list"]
local is_win = data["is_win"] or false
local str1 = ""
sp = ""
if is_win then
if win_list then
if DataManager.CurrenRoom.isZiMoHu then
str1 = "自摸"
else
str1 = "接炮"
end
for i = 1, #win_list do
local huName = Hu_Type_Name[win_list[i].type]
if huName then
str1 = str1 .. sp .. huName .. "x" .. win_list[i].score
end
end
str1 = str1 .. " +" .. huadd .. ""
end
else
printlog("输家============")
if DataManager.CurrenRoom.isZiMoHu then
printlog("自摸处理============")
--str1=""
if #self.WinList == 1 then
for i = 1, #self.WinList do
for j = 1, #self.WinList[i] do
local huName = Hu_Type_Name[self.WinList[i][j].type]
if huName then
if j == 1 then
str1 = str1 .. huName .. "x" .. self.WinList[i][j].score
else
str1 = str1 .. sp .. huName .. "x" .. self.WinList[i][j].score
end
end
end
end
str1 = str1 .. " " .. huadd .. ""
else
printlog("服务端自摸计算异常===>>>")
end
else
printlog("非自摸处理====>>>")
--点炮 一炮多响
local yipaoduoxiang = false
if #self.WinList > 1 then
yipaoduoxiang = true
end
if yipaoduoxiang then
printlog("一炮多响====>>>")
str = "点炮"
local allTypeList = {}
local isHas = false
for i = 1, #self.WinList do
for j = 1, #self.WinList[i] do
isHas = IsHasDictionary(self.WinList[i][j].type, allTypeList)
if isHas == false then
table.insert(allTypeList, self.WinList[i][j].type)
end
end
end
if #allTypeList > 0 then
for i = 1, #allTypeList do
local huName = Hu_Type_Name[allTypeList[i]]
if huName then
str1 = str1 .. huName .. ""
end
end
str1 = str1 .. " " .. huadd .. ""
end
else
if p.self_user.account_id == active_player and is_win == false and not data["liuju"] then
str1 = "点炮"
if #self.WinList == 1 then
for i = 1, # self.WinList do
for j = 1, #self.WinList[i] do
local huName = Hu_Type_Name[self.WinList[i][j].type]
if huName then
str1 = str1 .. sp .. huName .. "x" .. self.WinList[i][j].score
end
end
end
str1 = str1 .. " " .. huadd .. ""
else
printlog("服务端自摸计算异常===>>>")
end
end
end
end
end
--
printlog("牌型计算==>>>", str1)
if data["ming_gang_num"] > 0 then
str1 = str1 .. " 明杠x" .. data["ming_gang_num"]
end
if data["an_gang_num"] > 0 then
str1 = str1 .. " 暗杠x" .. data["an_gang_num"]
end
if data["dian_gang_num"] > 0 then
str1 = str1 .. " 点杠x" .. data["dian_gang_num"]
end
if gangadd ~= 0 then
if gangadd > 0 then
str1 = str1 .. " +" .. gangadd .. ""
else
str1 = str1 .. " " .. gangadd .. ""
end
end
if data["ma_geng_gong"] and data["ma_geng_gong"] ~= 0 then
if data["ma_geng_gong"] > 0 then
str1 = str1 .. " 马跟杠:+" .. data["ma_geng_gong"] .. ""
else
str1 = str1 .. " 马跟杠:" .. data["ma_geng_gong"] .. ""
end
end
if geng_zhuan and geng_zhuan ~= 0 then
if geng_zhuan > 0 then
str1 = str1 .. " 跟庄:+" .. geng_zhuan .. ""
else
str1 = str1 .. " 跟庄:" .. geng_zhuan .. ""
end
end
item:GetChild("score3").text = str1
item:GetChild("score4").text = str1
local paixingCtr = item:GetController("detail")
table.insert(self.PaiXingXiangQingCtrList, paixingCtr)
-------------------------
local hp_nonnegative = room:checkHpNonnegative()
item:GetController("nonnegative").selectedIndex = hp_nonnegative and 1 or 0
if hp_nonnegative then
local hp_info = data.hp_info
local ctr_hp_limit = item:GetController("hp_limit")
local hp = d2ad(hp_info.round_actual_hp)
if hp >= 0 then hp = "+" .. tostring(hp) end
item:GetChild("tex_hp").text = hp
ctr_hp_limit.selectedIndex = hp_info.upper_limit and 1 or 0
end
item:GetController("win").selectedIndex = is_win and 0 or 1
if p.self_user.account_id == active_player and is_win == false and total < 0 then
item:GetController("win").selectedIndex = 2
end
if is_win then
item:GetController("bg").selectedIndex = 1
else
item:GetController("bg").selectedIndex = 0
end
local win_card = item:GetChild("win_card")
win_card.icon = "ui://Main_Majiang/202_" .. data["win_card"]
if niao and #niao > 0 then
local currentNiaoList = self:CalculateNiao(niao, data["seat"])
if currentNiaoList and #currentNiaoList > 0 then
local lst_niao = item:GetChild("list_niao")
lst_niao:RemoveChildrenToPool()
for i = 1, #currentNiaoList do
if currentNiaoList[i].score > 0 then
local card_niao = lst_niao:AddItemFromPool()
card_niao.icon = "ui://Main_Majiang/202_" .. currentNiaoList[i].card
end
end
end
end
if p.seat == room.banker_seat then
item:GetController("bank").selectedIndex = 1
end
end
function M:CalculateNiao(niaoList, seat)
local tempNiao = {}
for i = 1, #niaoList do
if niaoList[i].seat == seat then
table.insert(tempNiao, niaoList[i])
end
end
return tempNiao
end
function M:FillItemData2(room, data, list)
-- 赋值result_info聊天室分享需要
local player_list = {}
for i = 1, #data do
player_list[i] = {}
local user = room:GetPlayerBySeat(data[i].seat).self_user
player_list[i].id = user.account_id
player_list[i].hp_info = data[i].hp_info
player_list[i].score = data[i].total_score
player_list[i].house = room.owner_id == player_list[i].id and 1 or 0
player_list[i].nick = user.nick_name
player_list[i].head_url = user.head_url
local settle_log = data[i].settle_log
player_list[i].param = {}
player_list[i].param[1] = {}
player_list[i].param[1].key = "自摸次数:"
player_list[i].param[1].value = tostring(data[i].settle_log.zimo)
player_list[i].param[2] = {}
player_list[i].param[2].key = "接炮次数:"
player_list[i].param[2].value = tostring(data[i].settle_log.jie_pao)
player_list[i].param[3] = {}
player_list[i].param[3].key = "点炮次数:"
player_list[i].param[3].value = tostring(data[i].settle_log.dian_pao)
player_list[i].param[4] = {}
player_list[i].param[4].key = "暗杠次数:"
player_list[i].param[4].value = tostring(data[i].settle_log.an_kong)
player_list[i].param[5] = {}
player_list[i].param[5].key = "明杠次数:"
player_list[i].param[5].value = tostring(data[i].settle_log.ming_kong)
end
local round = room.room_config.round
self:GenerateRoomResultInfo(round, room.room_config:GetGameName(), room.room_id, room.create_time, player_list)
local big_result = self._view:GetChild("big_result")
big_result:GetChild("txt_room_info").text = string.format("%s 房号%s 局%s/%s", os.date("%Y/%m/%d", os.time()),
room.room_id, room.curren_round, room.room_config.round)
local lst_p = big_result:GetChild("player_list")
if #player_list == 3 then
lst_p.columnGap = 108
elseif #player_list == 2 then
lst_p.columnGap = 208
end
self:InitBigResult(room, 30)
local show_detail = room.hpOnOff == 1
for i = 1, lst_p.numChildren do
local com_p = lst_p:GetChildAt(i - 1)
com_p:GetController("jsicon").selectedIndex = i - 1
local list_param = com_p:GetChild("list_param")
for j = 1, list_param.numChildren do
local tem = list_param:GetChildAt(j - 1)
tem:GetChild("txt_value").textFormat.size = 30
end
if show_detail then
local score = 0
if com_p:GetController("pn").selectedIndex == 0 then
score = com_p:GetChild("txt_navigate").text
else
score = com_p:GetChild("txt_positive").text
end
score = score / room.score_times
com_p:GetChild("tex_detail_score").text = string.format("%s × %s倍", score, room.score_times)
end
end
if room.group_id ~= 0 then
big_result:GetController("group").selectedIndex = 1
end
DataManager.CurrenRoom = nil
end
function M:LoadHead(p, room)
local btn_head = self._view:GetChild("btn_head")
for i = 1, #room.player_list do
local player = room.player_list[i]
if p.seat == player.seat and player.self_user.head_url ~= "" then
ImageLoad.Load(player.self_user.head_url, btn_head.icon)
end
end
end
local prefix
function M:GetPrefix()
-- if not prefix then
prefix = get_majiang_prefix(10)
-- end
return prefix
end
function M:DestroyWithCallback()
if self._callback then
self._callback()
end
self:Destroy()
end
return M

View File

@ -306,7 +306,7 @@ end
function M:OneventResult1(evt_data)
local over = evt_data.type
printlog("OneventResult1")
print("OneventResult1")
pt(evt_data)
--0小结算 1小大结算 2大结算
self._room._reload_flag = false

View File

@ -4,181 +4,181 @@ local M = EXGameInfo
function EXGameInfo.new(blur_view)
setmetatable(M, { __index = IGameInfo })
local self = setmetatable({}, { __index = M })
self.class = "EXGameInfo"
UIPackage.AddPackage("extend/majiang/lichuan/ui/Info_MJ_LiChuan")
return self
setmetatable(M, { __index = IGameInfo })
local self = setmetatable({}, { __index = M })
self.class = "EXGameInfo"
UIPackage.AddPackage("extend/majiang/lichuan/ui/Info_MJ_LiChuan")
return self
end
function M:FillData()
self._maxPlayer = 4 -- 默认玩家人数
self._roundChoice = 3 -- 回合选项数
self._config = UIPackage.CreateObjectFromURL("ui://Info_MJ_LiChuan/Label_Detail_83")
self._maxPlayer = 4 -- 默认玩家人数
self._roundChoice = 3 -- 回合选项数
self._config = UIPackage.CreateObjectFromURL("ui://Info_MJ_LiChuan/Label_Detail_83")
-- if oldGameVersion == 2 then
-- self._config:GetController("xipai").selectedIndex = 0
-- if oldGameVersion == 2 then
-- self._config:GetController("xipai").selectedIndex = 0
-- self.xipaiValueText = self._config:GetChild('xipaifen')
-- self.xipaiValueText.text = 1
-- self.xipaiValue = 1
-- self.xipaiValueText = self._config:GetChild('xipaifen')
-- self.xipaiValueText.text = 1
-- self.xipaiValue = 1
-- self.anchouValueText = self._config:GetChild('anchoufen')
-- self.anchouValueText.text = 1
-- self.anchouValue = 1
-- self.anchouValueText = self._config:GetChild('anchoufen')
-- self.anchouValueText.text = 1
-- self.anchouValue = 1
-- local btn_cr = self._config:GetChild('sdsrbtn')
-- btn_cr.onClick:Set(
-- function()
-- local gniv = GroupNumberInputView_Game.new(nil, function(num)
-- local value = limit
-- if otype == 1 then
-- value = value + ad2d(num)
-- elseif otype == -1 then
-- value = value - ad2d(num)
-- else
-- value = ad2d(num)
-- end
-- local btn_cr = self._config:GetChild('sdsrbtn')
-- btn_cr.onClick:Set(
-- function()
-- local gniv = GroupNumberInputView_Game.new(nil, function(num)
-- local value = limit
-- if otype == 1 then
-- value = value + ad2d(num)
-- elseif otype == -1 then
-- value = value - ad2d(num)
-- else
-- value = ad2d(num)
-- end
-- if value < 0 then
-- ViewUtil.ErrorTip(1, "输入数据异常!")
-- end
-- if value < 0 then
-- ViewUtil.ErrorTip(1, "输入数据异常!")
-- end
-- self.xipaiValueText.text = value / 1000
-- self.xipaiValue = value / 1000
-- end, 3, nil)
-- gniv:Show()
-- end
-- )
-- self.xipaiValueText.text = value / 1000
-- self.xipaiValue = value / 1000
-- end, 3, nil)
-- gniv:Show()
-- end
-- )
-- local btn_cr2 = self._config:GetChild('anchoubtn')
-- btn_cr2.onClick:Set(
-- function()
-- local gniv = GroupNumberInputView_Game.new(nil, function(num)
-- local value = limit
-- if otype == 1 then
-- value = value + ad2d(num)
-- elseif otype == -1 then
-- value = value - ad2d(num)
-- else
-- value = ad2d(num)
-- end
-- local btn_cr2 = self._config:GetChild('anchoubtn')
-- btn_cr2.onClick:Set(
-- function()
-- local gniv = GroupNumberInputView_Game.new(nil, function(num)
-- local value = limit
-- if otype == 1 then
-- value = value + ad2d(num)
-- elseif otype == -1 then
-- value = value - ad2d(num)
-- else
-- value = ad2d(num)
-- end
-- if value < 0 then
-- ViewUtil.ErrorTip(1, "输入数据异常!")
-- end
-- if value < 0 then
-- ViewUtil.ErrorTip(1, "输入数据异常!")
-- end
-- self.anchouValueText.text = value / 1000
-- self.anchouValue = value / 1000
-- end, 3, nil)
-- gniv:Show()
-- end
-- )
-- end
-- self.anchouValueText.text = value / 1000
-- self.anchouValue = value / 1000
-- end, 3, nil)
-- gniv:Show()
-- end
-- )
-- end
end
local _help_url = "ui://Info_MJ_LiChuan/Com_help"
function M:GetHelpUrl()
return _help_url
return _help_url
end
local _icon_url = "ui://Info_MJ_LiChuan/icon"
function M:GetIconUrl()
return _icon_url
return _icon_url
end
local _icon_url1 = "ui://Info_MJ_LiChuan/icon1"
function M:GetIconUrl1()
return _icon_url1
return _icon_url1
end
local _play_list = {}
function M:GetPlayList()
return _play_list
return _play_list
end
function M:SelectedConfigData()
local _config = self._config
local round = _config:GetController("round").selectedIndex + 1
local people = _config:GetController("peopleNum").selectedIndex + 2
local _config = self._config
local round = _config:GetController("round").selectedIndex + 1
local people = _config:GetController("peopleNum").selectedIndex + 2
local zimo = _config:GetController("ZiMo").selectedIndex
local jingbibo = _config:GetController("jingbibo").selectedIndex
local zimo = _config:GetController("ZiMo").selectedIndex
local jingbibo = _config:GetController("jingbibo").selectedIndex
local xi_pai = false
local xi_paifen = 0
if _config:GetChild("xipai") then
xi_pai = _config:GetChild("xipai").selected
end
local xi_pai = false
local xi_paifen = 0
if _config:GetChild("xipai") then
xi_pai = _config:GetChild("xipai").selected
end
------
local _data = {}
_data["opt"] = round
_data["maxPlayers"] = people
------
local _data = {}
_data["opt"] = round
_data["maxPlayers"] = people
_data["zimo"] = zimo
_data["jingbibo"] = jingbibo
_data["jiangma"] = 0
_data["zimo"] = zimo
_data["jingbibo"] = jingbibo
_data["jiangma"] = 0
_data['xi_pai'] = xi_pai
_data['xi_pai'] = xi_pai
local xi_pai_score = 0
local an_chou_score = 0
-- if oldGameVersion == 2 then
-- xi_pai_score = self.xipaiValue
-- an_chou_score = self.anchouValue
-- end
local xi_pai_score = 0
local an_chou_score = 0
-- if oldGameVersion == 2 then
-- xi_pai_score = self.xipaiValue
-- an_chou_score = self.anchouValue
-- end
_data['xi_pai_score'] = xi_pai_score * 1000
_data['an_chou_score'] = an_chou_score * 1000
_data['xi_pai_score'] = xi_pai_score * 1000
_data['an_chou_score'] = an_chou_score * 1000
return _data
return _data
end
function M:LoadConfigData(data)
--printlog("加载房间配置=========>>>")
--pt(data)
local _config = self._config
_config:GetController("round").selectedIndex = data.opt - 1
_config:GetController("play_list").selectedIndex = data.maxPlayers - 2
--printlog("加载房间配置=========>>>")
--pt(data)
local _config = self._config
_config:GetController("round").selectedIndex = data.opt - 1
_config:GetController("play_list").selectedIndex = data.maxPlayers - 2
_config:GetController("fengding").selectedIndex = data.fengding
_config:GetController("fengding").selectedIndex = data.fengding
_config:GetController("wanfa").selectedIndex = data.wanfa
_config:GetChild("btn_qidui").selected = data.qiduijiafan
_config:GetChild("btn_shoudailong").selected = data.shoudailongjiafan
_config:GetChild("btn_loudilong").selected = data.loudilongjiafan
_config:GetChild("btn_bunengchi").selected = data.bunengchi
_config:GetController("wanfa").selectedIndex = data.wanfa
_config:GetChild("btn_qidui").selected = data.qiduijiafan
_config:GetChild("btn_shoudailong").selected = data.shoudailongjiafan
_config:GetChild("btn_loudilong").selected = data.loudilongjiafan
_config:GetChild("btn_bunengchi").selected = data.bunengchi
_config:GetChild("btn_doudizhu").selected = data.doudizhu
_config:GetChild("btn_doudizhufanbei").selected = data.doudizhufanbei
_config:GetChild("btn_doudizhu").selected = data.doudizhu
_config:GetChild("btn_doudizhufanbei").selected = data.doudizhufanbei
if _config:GetChild("xipai") then
_config:GetChild("xipai").selected = data.xi_pai
end
if _config:GetChild("xipai") then
_config:GetChild("xipai").selected = data.xi_pai
end
if oldGameVersion == 2 then
self.xipaiValueText.text = data.xi_pai_score / 1000
self.xipaiValue = data.xi_pai_score / 1000
if oldGameVersion == 2 then
self.xipaiValueText.text = data.xi_pai_score / 1000
self.xipaiValue = data.xi_pai_score / 1000
self.anchouValueText.text = data.an_chou_score / 1000
self.anchouValue = data.an_chou_score / 1000
end
self.anchouValueText.text = data.an_chou_score / 1000
self.anchouValue = data.an_chou_score / 1000
end
end
function M:LoadConfigToDetail(data)
local configData = json.decode(data)
local returnString = string.format("人数%s人%s%s,%s", configData.maxPlayers,
configData.zimo and ",只能自摸" or ",自摸可点炮",
configData.tuoguan and string.format(",%d秒后自动托管", configData.tuoguan_active_time) or "不能托管",
configData.jingbibo and "有精必博" or "有精可胡")
return returnString
local configData = json.decode(data)
local returnString = string.format("人数%s人,%s,%s,%s", configData.maxPlayers,
configData.zimo and "只能自摸" or "自摸可点炮",
configData.tuoguan and string.format("%d秒后自动托管", configData.tuoguan_active_time) or "不能托管",
configData.jingbibo and "有精必博" or "有精可胡")
return returnString
end
return M

View File

@ -1,7 +1,7 @@
local MJPlayerSelfCardInfoView = import(".MJPlayerSelfCardInfoView")
local MJPlayerCardInfoView = require("main.majiang.MJPlayerCardInfoView")
local MJMainView = require("main.majiang.MJMainView")
local EXClearingView = import(".EXClearingView_JiangXi")
local EXClearingView = import(".EXClearingView")
local TX_GameEvent = import(".GameEvent")
local HuTipView = import("main.majiang.HuTipView")
local SettingView = import(".EXSettingView")
@ -473,7 +473,7 @@ function M:EventInit()
-- info:UpdateScore()
info._view:GetChild("zhanji").visible = true
local num = data[i].hp_info.total_hp
if num > 0 then
if num >= 0 then
info._view:GetController("text_color").selectedIndex = 0
info._view:GetChild("text_jifen").text = "+" .. d2ad(num)
else

View File

@ -186,7 +186,7 @@ local function run_test(testname, func, input, should_work, output)
if status ~= nil then
name = name .. statusmap[status]
end
-- print(("[%s] %s"):format(name, serialise_value(value, false)))
print(("[%s] %s"):format(name, serialise_value(value, false)))
end
local result = { pcall(func, unpack(input)) }
@ -200,7 +200,7 @@ local function run_test(testname, func, input, should_work, output)
test_count_total = test_count_total + 1
local teststatus = { [true] = "PASS", [false] = "FAIL" }
-- print(("==> Test [%d] %s: %s"):format(test_count_total, testname,
print(("==> Test [%d] %s: %s"):format(test_count_total, testname,
teststatus[correct]))
status_line("Input", nil, input)
@ -208,7 +208,7 @@ local function run_test(testname, func, input, should_work, output)
status_line("Expected", should_work, output)
end
status_line("Received", success, result)
-- print()
print()
return correct, result
end
@ -216,11 +216,11 @@ end
local function run_test_group(tests)
local function run_helper(name, func, input)
if type(name) == "string" and #name > 0 then
-- print("==> " .. name)
print("==> " .. name)
end
-- Not a protected call, these functions should never generate errors.
func(unpack(input or {}))
-- print()
print()
end
for _, v in ipairs(tests) do

View File

@ -18,49 +18,49 @@ local ilist = ilist
local _xpcall = {}
_xpcall.__call = function(self, ...)
if jit then
if nil == self.obj then
return xpcall(self.func, traceback, ...)
else
return xpcall(self.func, traceback, self.obj, ...)
end
else
local args = { ... }
if jit then
if nil == self.obj then
return xpcall(self.func, traceback, ...)
else
return xpcall(self.func, traceback, self.obj, ...)
end
else
local args = { ... }
if nil == self.obj then
local func = function() self.func(unpack(args, 1, maxn(args))) end
return xpcall(func, traceback)
else
local func = function() self.func(self.obj, unpack(args, 1, maxn(args))) end
return xpcall(func, traceback)
end
end
if nil == self.obj then
local func = function() self.func(unpack(args, 1, maxn(args))) end
return xpcall(func, traceback)
else
local func = function() self.func(self.obj, unpack(args, 1, maxn(args))) end
return xpcall(func, traceback)
end
end
end
_xpcall.__eq = function(lhs, rhs)
return lhs.func == rhs.func and lhs.obj == rhs.obj
return lhs.func == rhs.func and lhs.obj == rhs.obj
end
local function xfunctor(func, obj)
return setmetatable({ func = func, obj = obj }, _xpcall)
return setmetatable({ func = func, obj = obj }, _xpcall)
end
local _pcall = {}
_pcall.__call = function(self, ...)
if nil == self.obj then
return pcall(self.func, ...)
else
return pcall(self.func, self.obj, ...)
end
if nil == self.obj then
return pcall(self.func, ...)
else
return pcall(self.func, self.obj, ...)
end
end
_pcall.__eq = function(lhs, rhs)
return lhs.func == rhs.func and lhs.obj == rhs.obj
return lhs.func == rhs.func and lhs.obj == rhs.obj
end
local function functor(func, obj)
return setmetatable({ func = func, obj = obj }, _pcall)
return setmetatable({ func = func, obj = obj }, _pcall)
end
local _event = {}
@ -68,123 +68,122 @@ _event.__index = _event
--废弃
function _event:Add(func, obj)
assert(func)
assert(func)
if self.keepSafe then
func = xfunctor(func, obj)
else
func = functor(func, obj)
end
if self.keepSafe then
func = xfunctor(func, obj)
else
func = functor(func, obj)
end
if self.lock then
local node = { value = func, _prev = 0, _next = 0, removed = true }
table.insert(self.opList, function() self.list:pushnode(node) end)
return node
else
return self.list:push(func)
end
if self.lock then
local node = { value = func, _prev = 0, _next = 0, removed = true }
table.insert(self.opList, function() self.list:pushnode(node) end)
return node
else
return self.list:push(func)
end
end
--废弃
function _event:Remove(func, obj)
for i, v in ilist(self.list) do
if v.func == func and v.obj == obj then
if self.lock then
table.insert(self.opList, function() self.list:remove(i) end)
else
self.list:remove(i)
end
break
end
end
for i, v in ilist(self.list) do
if v.func == func and v.obj == obj then
if self.lock then
table.insert(self.opList, function() self.list:remove(i) end)
else
self.list:remove(i)
end
break
end
end
end
function _event:CreateListener(func, obj)
if self.keepSafe then
func = xfunctor(func, obj)
else
func = functor(func, obj)
end
if self.keepSafe then
func = xfunctor(func, obj)
else
func = functor(func, obj)
end
return { value = func, _prev = 0, _next = 0, removed = true }
return { value = func, _prev = 0, _next = 0, removed = true }
end
function _event:AddListener(handle)
assert(handle)
assert(handle)
if self.lock then
table.insert(self.opList, function() self.list:pushnode(handle) end)
else
self.list:pushnode(handle)
end
if self.lock then
table.insert(self.opList, function() self.list:pushnode(handle) end)
else
self.list:pushnode(handle)
end
end
function _event:RemoveListener(handle)
assert(handle)
assert(handle)
if self.lock then
table.insert(self.opList, function() self.list:remove(handle) end)
else
self.list:remove(handle)
end
if self.lock then
table.insert(self.opList, function() self.list:remove(handle) end)
else
self.list:remove(handle)
end
end
function _event:Count()
return self.list.length
return self.list.length
end
function _event:Clear()
self.list:clear()
self.opList = {}
self.lock = false
self.keepSafe = false
self.current = nil
self.list:clear()
self.opList = {}
self.lock = false
self.keepSafe = false
self.current = nil
end
function _event:Dump()
local count = 0
local count = 0
for _, v in ilist(self.list) do
if v.obj then
-- print("update function:", v.func, "object name:", v.obj.name)
else
-- print("update function: ", v.func)
end
for _, v in ilist(self.list) do
if v.obj then
print("update function:", v.func, "object name:", v.obj.name)
else
print("update function: ", v.func)
end
count = count + 1
end
count = count + 1
end
-- print("all function is:", count)
print("all function is:", count)
end
_event.__call = function(self, ...)
local _list = self.list
self.lock = true
local ilist = ilist
local _list = self.list
self.lock = true
local ilist = ilist
for i, f in ilist(_list) do
self.current = i
local flag, msg = f(...)
for i, f in ilist(_list) do
self.current = i
local flag, msg = f(...)
if not flag then
_list:remove(i)
self.lock = false
error(msg)
end
end
if not flag then
_list:remove(i)
self.lock = false
error(msg)
end
end
local opList = self.opList
self.lock = false
local opList = self.opList
self.lock = false
for i, op in ipairs(opList) do
op()
opList[i] = nil
end
for i, op in ipairs(opList) do
op()
opList[i] = nil
end
end
function event(name, safe)
safe = safe or false
return setmetatable({ name = name, keepSafe = safe, lock = false, opList = {}, list = list:new() }, _event)
safe = safe or false
return setmetatable({ name = name, keepSafe = safe, lock = false, opList = {}, list = list:new() }, _event)
end
UpdateBeat = event("Update", true)
@ -200,23 +199,23 @@ local CoUpdateBeat = CoUpdateBeat
--逻辑update
function Update(deltaTime, unscaledDeltaTime)
Time:SetDeltaTime(deltaTime, unscaledDeltaTime)
UpdateBeat()
Time:SetDeltaTime(deltaTime, unscaledDeltaTime)
UpdateBeat()
end
function LateUpdate()
LateUpdateBeat()
CoUpdateBeat()
Time:SetFrameCount()
LateUpdateBeat()
CoUpdateBeat()
Time:SetFrameCount()
end
--物理update
function FixedUpdate(fixedDeltaTime)
Time:SetFixedDelta(fixedDeltaTime)
FixedUpdateBeat()
Time:SetFixedDelta(fixedDeltaTime)
FixedUpdateBeat()
end
function PrintEvents()
UpdateBeat:Dump()
FixedUpdateBeat:Dump()
UpdateBeat:Dump()
FixedUpdateBeat:Dump()
end

View File

@ -11,7 +11,7 @@
--
-- Example usage:
--
-- luajit -jbc -e 'local x=0; for i=1,1e6 do x=x+i end; -- print(x)'
-- luajit -jbc -e 'local x=0; for i=1,1e6 do x=x+i end; print(x)'
-- luajit -jbc=- foo.lua
-- luajit -jbc=foo.list foo.lua
--
@ -24,10 +24,10 @@
--
-- local bc = require("jit.bc")
--
-- local function foo() -- print("hello") end
-- local function foo() print("hello") end
--
-- bc.dump(foo) --> -- BYTECODE -- [...]
-- -- print(bc.line(foo, 2)) --> 0002 KSTR 1 1 ; "hello"
-- print(bc.line(foo, 2)) --> 0002 KSTR 1 1 ; "hello"
--
-- local out = {
-- -- Do something with each line:
@ -55,14 +55,10 @@ local stdout, stderr = io.stdout, io.stderr
------------------------------------------------------------------------------
local function ctlsub(c)
if c == "\n" then
return "\\n"
elseif c == "\r" then
return "\\r"
elseif c == "\t" then
return "\\t"
else
return format("\\%03d", byte(c))
if c == "\n" then return "\\n"
elseif c == "\r" then return "\\r"
elseif c == "\t" then return "\\t"
else return format("\\%03d", byte(c))
end
end
@ -70,41 +66,41 @@ end
local function bcline(func, pc, prefix)
local ins, m = funcbc(func, pc)
if not ins then return end
local ma, mb, mc = band(m, 7), band(m, 15 * 8), band(m, 15 * 128)
local ma, mb, mc = band(m, 7), band(m, 15*8), band(m, 15*128)
local a = band(shr(ins, 8), 0xff)
local oidx = 6 * band(ins, 0xff)
local op = sub(bcnames, oidx + 1, oidx + 6)
local oidx = 6*band(ins, 0xff)
local op = sub(bcnames, oidx+1, oidx+6)
local s = format("%04d %s %-6s %3s ",
pc, prefix or " ", op, ma == 0 and "" or a)
local d = shr(ins, 16)
if mc == 13 * 128 then -- BCMjump
return format("%s=> %04d\n", s, pc + d - 0x7fff)
if mc == 13*128 then -- BCMjump
return format("%s=> %04d\n", s, pc+d-0x7fff)
end
if mb ~= 0 then
d = band(d, 0xff)
elseif mc == 0 then
return s .. "\n"
return s.."\n"
end
local kc
if mc == 10 * 128 then -- BCMstr
kc = funck(func, -d - 1)
if mc == 10*128 then -- BCMstr
kc = funck(func, -d-1)
kc = format(#kc > 40 and '"%.40s"~' or '"%s"', gsub(kc, "%c", ctlsub))
elseif mc == 9 * 128 then -- BCMnum
elseif mc == 9*128 then -- BCMnum
kc = funck(func, d)
if op == "TSETM " then kc = kc - 2 ^ 52 end
elseif mc == 12 * 128 then -- BCMfunc
local fi = funcinfo(funck(func, -d - 1))
if op == "TSETM " then kc = kc - 2^52 end
elseif mc == 12*128 then -- BCMfunc
local fi = funcinfo(funck(func, -d-1))
if fi.ffid then
kc = vmdef.ffnames[fi.ffid]
else
kc = fi.loc
end
elseif mc == 5 * 128 then -- BCMuv
elseif mc == 5*128 then -- BCMuv
kc = funcuvname(func, d)
end
if ma == 5 then -- BCMuv
local ka = funcuvname(func, a)
if kc then kc = ka .. " ; " .. kc else kc = ka end
if kc then kc = ka.." ; "..kc else kc = ka end
end
if mb ~= 0 then
local b = shr(ins, 24)
@ -112,17 +108,17 @@ local function bcline(func, pc, prefix)
return format("%s%3d %3d\n", s, b, d)
end
if kc then return format("%s%3d ; %s\n", s, d, kc) end
if mc == 7 * 128 and d > 32767 then d = d - 65536 end -- BCMlits
if mc == 7*128 and d > 32767 then d = d - 65536 end -- BCMlits
return format("%s%3d\n", s, d)
end
-- Collect branch targets of a function.
local function bctargets(func)
local target = {}
for pc = 1, 1000000000 do
for pc=1,1000000000 do
local ins, m = funcbc(func, pc)
if not ins then break end
if band(m, 15 * 128) == 13 * 128 then target[pc + shr(ins, 16) - 0x7fff] = true end
if band(m, 15*128) == 13*128 then target[pc+shr(ins, 16)-0x7fff] = true end
end
return target
end
@ -132,7 +128,7 @@ local function bcdump(func, out, all)
if not out then out = stdout end
local fi = funcinfo(func)
if all and fi.children then
for n = -1, -1000000000, -1 do
for n=-1,-1000000000,-1 do
local k = funck(func, n)
if not k then break end
if type(k) == "proto" then bcdump(k, out, true) end
@ -140,7 +136,7 @@ local function bcdump(func, out, all)
end
out:write(format("-- BYTECODE -- %s-%d\n", fi.loc, fi.lastlinedefined))
local target = bctargets(func)
for pc = 1, 1000000000 do
for pc=1,1000000000 do
local s = bcline(func, pc, target[pc] and "=>")
if not s then break end
out:write(s)
@ -191,3 +187,4 @@ return {
off = bclistoff,
start = bcliston -- For -j command line option.
}

View File

@ -10,7 +10,7 @@
--
-- Example usage:
--
-- luajit -jdump -e "local x=0; for i=1,1e6 do x=x+i end; -- print(x)"
-- luajit -jdump -e "local x=0; for i=1,1e6 do x=x+i end; print(x)"
-- luajit -jdump=im -e "for i=1,1000 do for j=1,1000 do end end" | less -R
-- luajit -jdump=is myapp.lua | less -R
-- luajit -jdump=-b myapp.lua
@ -28,15 +28,15 @@
--
-- The following dump features are available (* marks the default):
--
-- * t -- print a line for each started, ended or aborted trace (see also -jv).
-- * t Print a line for each started, ended or aborted trace (see also -jv).
-- * b Dump the traced bytecode.
-- * i Dump the IR (intermediate representation).
-- r Augment the IR with register/stack slots.
-- s Dump the snapshot map.
-- * m Dump the generated machine code.
-- x -- print each taken trace exit.
-- X -- print each taken trace exit and the contents of all registers.
-- a -- print the IR of aborted traces, too.
-- x Print each taken trace exit.
-- X Print each taken trace exit and the contents of all registers.
-- a Print the IR of aborted traces, too.
--
-- The output format can be set with the following characters:
--
@ -89,9 +89,9 @@ local function fillsymtab_tr(tr, nexit)
t[traceexitstub(tr, 0)] = "exit"
return
end
for i = 0, nexit - 1 do
for i=0,nexit-1 do
local addr = traceexitstub(tr, i)
if addr < 0 then addr = addr + 2 ^ 32 end
if addr < 0 then addr = addr + 2^32 end
t[addr] = tostring(i)
end
local addr = traceexitstub(tr, nexit)
@ -103,26 +103,26 @@ local function fillsymtab(tr, nexit)
local t = symtab
if nexitsym == 0 then
local ircall = vmdef.ircall
for i = 0, #ircall do
for i=0,#ircall do
local addr = ircalladdr(i)
if addr ~= 0 then
if addr < 0 then addr = addr + 2 ^ 32 end
t[addr] = ircall[i]
if addr < 0 then addr = addr + 2^32 end
t[addr] = ircall[i]
end
end
end
if nexitsym == 1000000 then -- Per-trace exit stubs.
if nexitsym == 1000000 then -- Per-trace exit stubs.
fillsymtab_tr(tr, nexit)
elseif nexit > nexitsym then -- Shared exit stubs.
for i = nexitsym, nexit - 1 do
for i=nexitsym,nexit-1 do
local addr = traceexitstub(i)
if addr == nil then -- Fall back to per-trace exit stubs.
fillsymtab_tr(tr, nexit)
setmetatable(symtab, symtabmt)
nexit = 1000000
break
fillsymtab_tr(tr, nexit)
setmetatable(symtab, symtabmt)
nexit = 1000000
break
end
if addr < 0 then addr = addr + 2 ^ 32 end
if addr < 0 then addr = addr + 2^32 end
t[addr] = tostring(i)
end
nexitsym = nexit
@ -140,18 +140,18 @@ local function dump_mcode(tr)
if not info then return end
local mcode, addr, loop = tracemc(tr)
if not mcode then return end
if not disass then disass = require("jit.dis_" .. jit.arch) end
if addr < 0 then addr = addr + 2 ^ 32 end
if not disass then disass = require("jit.dis_"..jit.arch) end
if addr < 0 then addr = addr + 2^32 end
out:write("---- TRACE ", tr, " mcode ", #mcode, "\n")
local ctx = disass.create(mcode, addr, dumpwrite)
ctx.hexdump = 0
ctx.symtab = fillsymtab(tr, info.nexit)
if loop ~= 0 then
symtab[addr + loop] = "LOOP"
symtab[addr+loop] = "LOOP"
ctx:disass(0, loop)
out:write("->LOOP:\n")
ctx:disass(loop, #mcode - loop)
symtab[addr + loop] = nil
ctx:disass(loop, #mcode-loop)
symtab[addr+loop] = nil
else
ctx:disass(0, #mcode)
end
@ -222,11 +222,8 @@ local function colorize_ansi(s, t)
end
local irtype_ansi = setmetatable({},
{
__index = function(tab, t)
local s = colorize_ansi(irtype_text[t], t); tab[t] = s; return s;
end
})
{ __index = function(tab, t)
local s = colorize_ansi(irtype_text[t], t); tab[t] = s; return s; end })
local html_escape = { ["<"] = "&lt;", [">"] = "&gt;", ["&"] = "&amp;", }
@ -236,11 +233,8 @@ local function colorize_html(s, t)
end
local irtype_html = setmetatable({},
{
__index = function(tab, t)
local s = colorize_html(irtype_text[t], t); tab[t] = s; return s;
end
})
{ __index = function(tab, t)
local s = colorize_html(irtype_text[t], t); tab[t] = s; return s; end })
local header_html = [[
<style type="text/css">
@ -267,31 +261,27 @@ local colorize, irtype
-- Lookup tables to convert some literals into names.
local litname = {
["SLOAD "] = setmetatable({}, {
__index = function(t, mode)
local s = ""
if band(mode, 1) ~= 0 then s = s .. "P" end
if band(mode, 2) ~= 0 then s = s .. "F" end
if band(mode, 4) ~= 0 then s = s .. "T" end
if band(mode, 8) ~= 0 then s = s .. "C" end
if band(mode, 16) ~= 0 then s = s .. "R" end
if band(mode, 32) ~= 0 then s = s .. "I" end
t[mode] = s
return s
end
}),
["SLOAD "] = setmetatable({}, { __index = function(t, mode)
local s = ""
if band(mode, 1) ~= 0 then s = s.."P" end
if band(mode, 2) ~= 0 then s = s.."F" end
if band(mode, 4) ~= 0 then s = s.."T" end
if band(mode, 8) ~= 0 then s = s.."C" end
if band(mode, 16) ~= 0 then s = s.."R" end
if band(mode, 32) ~= 0 then s = s.."I" end
t[mode] = s
return s
end}),
["XLOAD "] = { [0] = "", "R", "V", "RV", "U", "RU", "VU", "RVU", },
["CONV "] = setmetatable({}, {
__index = function(t, mode)
local s = irtype[band(mode, 31)]
s = irtype[band(shr(mode, 5), 31)] .. "." .. s
if band(mode, 0x800) ~= 0 then s = s .. " sext" end
local c = shr(mode, 14)
if c == 2 then s = s .. " index" elseif c == 3 then s = s .. " check" end
t[mode] = s
return s
end
}),
["CONV "] = setmetatable({}, { __index = function(t, mode)
local s = irtype[band(mode, 31)]
s = irtype[band(shr(mode, 5), 31)].."."..s
if band(mode, 0x800) ~= 0 then s = s.." sext" end
local c = shr(mode, 14)
if c == 2 then s = s.." index" elseif c == 3 then s = s.." check" end
t[mode] = s
return s
end}),
["FLOAD "] = vmdef.irfield,
["FREF "] = vmdef.irfield,
["FPMATH"] = vmdef.irfpm,
@ -300,14 +290,10 @@ local litname = {
}
local function ctlsub(c)
if c == "\n" then
return "\\n"
elseif c == "\r" then
return "\\r"
elseif c == "\t" then
return "\\t"
else
return format("\\%03d", byte(c))
if c == "\n" then return "\\n"
elseif c == "\r" then return "\\r"
elseif c == "\t" then return "\\t"
else return format("\\%03d", byte(c))
end
end
@ -331,7 +317,7 @@ local function formatk(tr, idx, sn)
if tn == "number" then
if band(sn or 0, 0x30000) ~= 0 then
s = band(sn, 0x20000) ~= 0 and "contpc" or "ftsz"
elseif k == 2 ^ 52 + 2 ^ 51 then
elseif k == 2^52+2^51 then
s = "bias"
else
s = format(0 < k and k < 0x1p-1026 and "%+a" or "%+.14g", k)
@ -351,11 +337,11 @@ local function formatk(tr, idx, sn)
end
elseif t == 21 then -- int64_t
s = sub(tostring(k), 1, -3)
if sub(s, 1, 1) ~= "-" then s = "+" .. s end
if sub(s, 1, 1) ~= "-" then s = "+"..s end
elseif sn == 0x1057fff then -- SNAP(1, SNAP_FRAME | SNAP_NORESTORE, REF_NIL)
return "----" -- Special case for LJ_FR2 slot 1.
return "----" -- Special case for LJ_FR2 slot 1.
else
s = tostring(k) -- For primitives.
s = tostring(k) -- For primitives.
end
s = colorize(format("%-4s", s), t)
if slot then
@ -366,18 +352,18 @@ end
local function printsnap(tr, snap)
local n = 2
for s = 0, snap[1] - 1 do
for s=0,snap[1]-1 do
local sn = snap[n]
if shr(sn, 24) == s then
n = n + 1
local ref = band(sn, 0xffff) - 0x8000 -- REF_BIAS
if ref < 0 then
out:write(formatk(tr, ref, sn))
out:write(formatk(tr, ref, sn))
elseif band(sn, 0x80000) ~= 0 then -- SNAP_SOFTFPNUM
out:write(colorize(format("%04d/%04d", ref, ref + 1), 14))
out:write(colorize(format("%04d/%04d", ref, ref+1), 14))
else
local m, ot, op1, op2 = traceir(tr, ref)
out:write(colorize(format("%04d", ref), band(ot, 31)))
local m, ot, op1, op2 = traceir(tr, ref)
out:write(colorize(format("%04d", ref), band(ot, 31)))
end
out:write(band(sn, 0x10000) == 0 and " " or "|") -- SNAP_FRAME
else
@ -390,7 +376,7 @@ end
-- Dump snapshots (not interleaved with IR).
local function dump_snap(tr)
out:write("---- TRACE ", tr, " snapshots\n")
for i = 0, 1000000000 do
for i=0,1000000000 do
local snap = tracesnap(tr, i)
if not snap then break end
out:write(format("#%-3d %04d [ ", i, snap[0]))
@ -400,12 +386,12 @@ end
-- Return a register name or stack slot for a rid/sp location.
local function ridsp_name(ridsp, ins)
if not disass then disass = require("jit.dis_" .. jit.arch) end
if not disass then disass = require("jit.dis_"..jit.arch) end
local rid, slot = band(ridsp, 0xff), shr(ridsp, 8)
if rid == 253 or rid == 254 then
return (slot == 0 or slot == 255) and " {sink" or format(" {%04d", ins - slot)
return (slot == 0 or slot == 255) and " {sink" or format(" {%04d", ins-slot)
end
if ridsp > 255 then return format("[%x]", slot * 4) end
if ridsp > 255 then return format("[%x]", slot*4) end
if rid < 128 then return disass.regname(rid) end
return ""
end
@ -434,14 +420,14 @@ local function dumpcallargs(tr, ins)
out:write(formatk(tr, ins))
else
local m, ot, op1, op2 = traceir(tr, ins)
local oidx = 6 * shr(ot, 8)
local op = sub(vmdef.irnames, oidx + 1, oidx + 6)
local oidx = 6*shr(ot, 8)
local op = sub(vmdef.irnames, oidx+1, oidx+6)
if op == "CARG " then
dumpcallargs(tr, op1)
if op2 < 0 then
out:write(" ", formatk(tr, op2))
out:write(" ", formatk(tr, op2))
else
out:write(" ", format("%04d", op2))
out:write(" ", format("%04d", op2))
end
else
out:write(format("%04d", ins))
@ -463,12 +449,12 @@ local function dump_ir(tr, dumpsnap, dumpreg)
snapref = snap[0]
snapno = 0
end
for ins = 1, nins do
for ins=1,nins do
if ins >= snapref then
if dumpreg then
out:write(format(".... SNAP #%-3d [ ", snapno))
out:write(format(".... SNAP #%-3d [ ", snapno))
else
out:write(format(".... SNAP #%-3d [ ", snapno))
out:write(format(".... SNAP #%-3d [ ", snapno))
end
printsnap(tr, snap)
snapno = snapno + 1
@ -476,62 +462,62 @@ local function dump_ir(tr, dumpsnap, dumpreg)
snapref = snap and snap[0] or 65536
end
local m, ot, op1, op2, ridsp = traceir(tr, ins)
local oidx, t = 6 * shr(ot, 8), band(ot, 31)
local op = sub(irnames, oidx + 1, oidx + 6)
local oidx, t = 6*shr(ot, 8), band(ot, 31)
local op = sub(irnames, oidx+1, oidx+6)
if op == "LOOP " then
if dumpreg then
out:write(format("%04d ------------ LOOP ------------\n", ins))
out:write(format("%04d ------------ LOOP ------------\n", ins))
else
out:write(format("%04d ------ LOOP ------------\n", ins))
out:write(format("%04d ------ LOOP ------------\n", ins))
end
elseif op ~= "NOP " and op ~= "CARG " and
(dumpreg or op ~= "RENAME") then
(dumpreg or op ~= "RENAME") then
local rid = band(ridsp, 255)
if dumpreg then
out:write(format("%04d %-6s", ins, ridsp_name(ridsp, ins)))
out:write(format("%04d %-6s", ins, ridsp_name(ridsp, ins)))
else
out:write(format("%04d ", ins))
out:write(format("%04d ", ins))
end
out:write(format("%s%s %s %s ",
(rid == 254 or rid == 253) and "}" or
(band(ot, 128) == 0 and " " or ">"),
band(ot, 64) == 0 and " " or "+",
irtype[t], op))
local m1, m2 = band(m, 3), band(m, 3 * 4)
(rid == 254 or rid == 253) and "}" or
(band(ot, 128) == 0 and " " or ">"),
band(ot, 64) == 0 and " " or "+",
irtype[t], op))
local m1, m2 = band(m, 3), band(m, 3*4)
if sub(op, 1, 4) == "CALL" then
local ctype
if m2 == 1 * 4 then -- op2 == IRMlit
out:write(format("%-10s (", vmdef.ircall[op2]))
else
ctype = dumpcallfunc(tr, op2)
end
if op1 ~= -1 then dumpcallargs(tr, op1) end
out:write(")")
if ctype then out:write(" ctype ", ctype) end
local ctype
if m2 == 1*4 then -- op2 == IRMlit
out:write(format("%-10s (", vmdef.ircall[op2]))
else
ctype = dumpcallfunc(tr, op2)
end
if op1 ~= -1 then dumpcallargs(tr, op1) end
out:write(")")
if ctype then out:write(" ctype ", ctype) end
elseif op == "CNEW " and op2 == -1 then
out:write(formatk(tr, op1))
out:write(formatk(tr, op1))
elseif m1 ~= 3 then -- op1 != IRMnone
if op1 < 0 then
out:write(formatk(tr, op1))
else
out:write(format(m1 == 0 and "%04d" or "#%-3d", op1))
end
if m2 ~= 3 * 4 then -- op2 != IRMnone
if m2 == 1 * 4 then -- op2 == IRMlit
local litn = litname[op]
if litn and litn[op2] then
out:write(" ", litn[op2])
elseif op == "UREFO " or op == "UREFC " then
out:write(format(" #%-3d", shr(op2, 8)))
else
out:write(format(" #%-3d", op2))
end
elseif op2 < 0 then
out:write(" ", formatk(tr, op2))
else
out:write(format(" %04d", op2))
end
end
if op1 < 0 then
out:write(formatk(tr, op1))
else
out:write(format(m1 == 0 and "%04d" or "#%-3d", op1))
end
if m2 ~= 3*4 then -- op2 != IRMnone
if m2 == 1*4 then -- op2 == IRMlit
local litn = litname[op]
if litn and litn[op2] then
out:write(" ", litn[op2])
elseif op == "UREFO " or op == "UREFC " then
out:write(format(" #%-3d", shr(op2, 8)))
else
out:write(format(" #%-3d", op2))
end
elseif op2 < 0 then
out:write(" ", formatk(tr, op2))
else
out:write(format(" %04d", op2))
end
end
end
out:write("\n")
end
@ -563,11 +549,8 @@ end
-- Dump trace states.
local function dump_trace(what, tr, func, pc, otr, oex)
if what == "stop" or (what == "abort" and dumpmode.a) then
if dumpmode.i then
dump_ir(tr, dumpmode.s, dumpmode.r and what == "stop")
elseif dumpmode.s then
dump_snap(tr)
end
if dumpmode.i then dump_ir(tr, dumpmode.s, dumpmode.r and what == "stop")
elseif dumpmode.s then dump_snap(tr) end
if dumpmode.m then dump_mcode(tr) end
end
if what == "start" then
@ -583,11 +566,11 @@ local function dump_trace(what, tr, func, pc, otr, oex)
local info = traceinfo(tr)
local link, ltype = info.link, info.linktype
if link == tr or link == 0 then
out:write(" -> ", ltype, "\n")
out:write(" -> ", ltype, "\n")
elseif ltype == "root" then
out:write(" -> ", link, "\n")
out:write(" -> ", link, "\n")
else
out:write(" -> ", link, " ", ltype, "\n")
out:write(" -> ", link, " ", ltype, "\n")
end
end
if dumpmode.H then out:write("</pre>\n\n") else out:write("\n") end
@ -609,7 +592,7 @@ local function dump_record(tr, func, pc, depth, callee)
line = bcline(func, pc, recprefix)
if dumpmode.H then line = gsub(line, "[<>&]", html_escape) end
else
line = "0000 " .. recprefix .. " FUNCC \n"
line = "0000 "..recprefix.." FUNCC \n"
callee = func
end
if pc <= 0 then
@ -618,7 +601,7 @@ local function dump_record(tr, func, pc, depth, callee)
out:write(line)
end
if pc >= 0 and band(funcbc(func, pc), 0xff) < 16 then -- ORDER BC
out:write(bcline(func, pc + 1, recprefix)) -- Write JMP for cond.
out:write(bcline(func, pc+1, recprefix)) -- Write JMP for cond.
end
end
@ -628,27 +611,27 @@ end
local function dump_texit(tr, ex, ngpr, nfpr, ...)
out:write("---- TRACE ", tr, " exit ", ex, "\n")
if dumpmode.X then
local regs = { ... }
local regs = {...}
if jit.arch == "x64" then
for i = 1, ngpr do
out:write(format(" %016x", regs[i]))
if i % 4 == 0 then out:write("\n") end
for i=1,ngpr do
out:write(format(" %016x", regs[i]))
if i % 4 == 0 then out:write("\n") end
end
else
for i = 1, ngpr do
out:write(" ", tohex(regs[i]))
if i % 8 == 0 then out:write("\n") end
for i=1,ngpr do
out:write(" ", tohex(regs[i]))
if i % 8 == 0 then out:write("\n") end
end
end
if jit.arch == "mips" or jit.arch == "mipsel" then
for i = 1, nfpr, 2 do
out:write(format(" %+17.14g", regs[ngpr + i]))
if i % 8 == 7 then out:write("\n") end
for i=1,nfpr,2 do
out:write(format(" %+17.14g", regs[ngpr+i]))
if i % 8 == 7 then out:write("\n") end
end
else
for i = 1, nfpr do
out:write(format(" %+17.14g", regs[ngpr + i]))
if i % 4 == 0 then out:write("\n") end
for i=1,nfpr do
out:write(format(" %+17.14g", regs[ngpr+i]))
if i % 4 == 0 then out:write("\n") end
end
end
end
@ -675,16 +658,14 @@ local function dumpon(opt, outfile)
local term = os.getenv("TERM")
local colormode = (term and term:match("color") or os.getenv("COLORTERM")) and "A" or "T"
if opt then
opt = gsub(opt, "[TAH]", function(mode)
colormode = mode; return "";
end)
opt = gsub(opt, "[TAH]", function(mode) colormode = mode; return ""; end)
end
local m = { t = true, b = true, i = true, m = true, }
local m = { t=true, b=true, i=true, m=true, }
if opt and opt ~= "" then
local o = sub(opt, 1, 1)
if o ~= "+" and o ~= "-" then m = {} end
for i = 1, #opt do m[sub(opt, i, i)] = (o ~= "-") end
for i=1,#opt do m[sub(opt, i, i)] = (o ~= "-") end
end
dumpmode = m
@ -728,3 +709,4 @@ return {
off = dumpoff,
start = dumpon -- For -j command line option.
}

View File

@ -99,31 +99,31 @@ end
local function dump_trace(what, tr, func, pc, otr, oex)
if what == "start" then
startloc = fmtfunc(func, pc)
startex = otr and "(" .. otr .. "/" .. (oex == -1 and "stitch" or oex) .. ") " or ""
startex = otr and "("..otr.."/"..(oex == -1 and "stitch" or oex)..") " or ""
else
if what == "abort" then
local loc = fmtfunc(func, pc)
if loc ~= startloc then
-- print(format("[TRACE --- %s%s -- %s at %s]\n", startex, startloc, fmterr(otr, oex), loc))
print(format("[TRACE --- %s%s -- %s at %s]\n", startex, startloc, fmterr(otr, oex), loc))
else
-- print(format("[TRACE --- %s%s -- %s]\n", startex, startloc, fmterr(otr, oex)))
print(format("[TRACE --- %s%s -- %s]\n", startex, startloc, fmterr(otr, oex)))
end
elseif what == "stop" then
local info = traceinfo(tr)
local link, ltype = info.link, info.linktype
if ltype == "interpreter" then
-- print(format("[TRACE %3s %s%s -- fallback to interpreter]\n", tr, startex, startloc))
print(format("[TRACE %3s %s%s -- fallback to interpreter]\n", tr, startex, startloc))
elseif ltype == "stitch" then
-- print(format("[TRACE %3s %s%s %s %s]\n", tr, startex, startloc, ltype, fmtfunc(func, pc)))
print(format("[TRACE %3s %s%s %s %s]\n", tr, startex, startloc, ltype, fmtfunc(func, pc)))
elseif link == tr or link == 0 then
-- print(format("[TRACE %3s %s%s %s]\n", tr, startex, startloc, ltype))
print(format("[TRACE %3s %s%s %s]\n", tr, startex, startloc, ltype))
elseif ltype == "root" then
-- print(format("[TRACE %3s %s%s -> %d]\n", tr, startex, startloc, link))
print(format("[TRACE %3s %s%s -> %d]\n", tr, startex, startloc, link))
else
-- print(format("[TRACE %3s %s%s -> %d %s]\n", tr, startex, startloc, link, ltype))
print(format("[TRACE %3s %s%s -> %d %s]\n", tr, startex, startloc, link, ltype))
end
else
-- print(format("[TRACE %s]\n", what))
print(format("[TRACE %s]\n", what))
end
out:flush()
end
@ -160,3 +160,4 @@ return {
off = dumpoff,
start = dumpon -- For -j command line option.
}

View File

@ -2,362 +2,361 @@
return {
bcnames =
"ISLT ISGE ISLE ISGT ISEQV ISNEV ISEQS ISNES ISEQN ISNEN ISEQP ISNEP ISTC ISFC IST ISF ISTYPEISNUM MOV NOT UNM LEN ADDVN SUBVN MULVN DIVVN MODVN ADDNV SUBNV MULNV DIVNV MODNV ADDVV SUBVV MULVV DIVVV MODVV POW CAT KSTR KCDATAKSHORTKNUM KPRI KNIL UGET USETV USETS USETN USETP UCLO FNEW TNEW TDUP GGET GSET TGETV TGETS TGETB TGETR TSETV TSETS TSETB TSETM TSETR CALLM CALL CALLMTCALLT ITERC ITERN VARG ISNEXTRETM RET RET0 RET1 FORI JFORI FORL IFORL JFORL ITERL IITERLJITERLLOOP ILOOP JLOOP JMP FUNCF IFUNCFJFUNCFFUNCV IFUNCVJFUNCVFUNCC FUNCCW",
bcnames = "ISLT ISGE ISLE ISGT ISEQV ISNEV ISEQS ISNES ISEQN ISNEN ISEQP ISNEP ISTC ISFC IST ISF ISTYPEISNUM MOV NOT UNM LEN ADDVN SUBVN MULVN DIVVN MODVN ADDNV SUBNV MULNV DIVNV MODNV ADDVV SUBVV MULVV DIVVV MODVV POW CAT KSTR KCDATAKSHORTKNUM KPRI KNIL UGET USETV USETS USETN USETP UCLO FNEW TNEW TDUP GGET GSET TGETV TGETS TGETB TGETR TSETV TSETS TSETB TSETM TSETR CALLM CALL CALLMTCALLT ITERC ITERN VARG ISNEXTRETM RET RET0 RET1 FORI JFORI FORL IFORL JFORL ITERL IITERLJITERLLOOP ILOOP JLOOP JMP FUNCF IFUNCFJFUNCFFUNCV IFUNCVJFUNCVFUNCC FUNCCW",
irnames =
"LT GE LE GT ULT UGE ULE UGT EQ NE ABC RETF NOP BASE PVAL GCSTEPHIOP LOOP USE PHI RENAMEPROF KPRI KINT KGC KPTR KKPTR KNULL KNUM KINT64KSLOT BNOT BSWAP BAND BOR BXOR BSHL BSHR BSAR BROL BROR ADD SUB MUL DIV MOD POW NEG ABS ATAN2 LDEXP MIN MAX FPMATHADDOV SUBOV MULOV AREF HREFK HREF NEWREFUREFO UREFC FREF STRREFLREF ALOAD HLOAD ULOAD FLOAD XLOAD SLOAD VLOAD ASTOREHSTOREUSTOREFSTOREXSTORESNEW XSNEW TNEW TDUP CNEW CNEWI BUFHDRBUFPUTBUFSTRTBAR OBAR XBAR CONV TOBIT TOSTR STRTO CALLN CALLA CALLL CALLS CALLXSCARG ",
irnames = "LT GE LE GT ULT UGE ULE UGT EQ NE ABC RETF NOP BASE PVAL GCSTEPHIOP LOOP USE PHI RENAMEPROF KPRI KINT KGC KPTR KKPTR KNULL KNUM KINT64KSLOT BNOT BSWAP BAND BOR BXOR BSHL BSHR BSAR BROL BROR ADD SUB MUL DIV MOD POW NEG ABS ATAN2 LDEXP MIN MAX FPMATHADDOV SUBOV MULOV AREF HREFK HREF NEWREFUREFO UREFC FREF STRREFLREF ALOAD HLOAD ULOAD FLOAD XLOAD SLOAD VLOAD ASTOREHSTOREUSTOREFSTOREXSTORESNEW XSNEW TNEW TDUP CNEW CNEWI BUFHDRBUFPUTBUFSTRTBAR OBAR XBAR CONV TOBIT TOSTR STRTO CALLN CALLA CALLL CALLS CALLXSCARG ",
irfpm = { [0] = "floor", "ceil", "trunc", "sqrt", "exp", "exp2", "log", "log2", "log10", "sin", "cos", "tan", "other", },
irfpm = { [0]="floor", "ceil", "trunc", "sqrt", "exp", "exp2", "log", "log2", "log10", "sin", "cos", "tan", "other", },
irfield = { [0] = "str.len", "func.env", "func.pc", "func.ffid", "thread.env", "tab.meta", "tab.array", "tab.node", "tab.asize", "tab.hmask", "tab.nomm", "udata.meta", "udata.udtype", "udata.file", "cdata.ctypeid", "cdata.ptr", "cdata.int", "cdata.int64", "cdata.int64_4", },
irfield = { [0]="str.len", "func.env", "func.pc", "func.ffid", "thread.env", "tab.meta", "tab.array", "tab.node", "tab.asize", "tab.hmask", "tab.nomm", "udata.meta", "udata.udtype", "udata.file", "cdata.ctypeid", "cdata.ptr", "cdata.int", "cdata.int64", "cdata.int64_4", },
ircall = {
[0] = "lj_str_cmp",
"lj_str_find",
"lj_str_new",
"lj_strscan_num",
"lj_strfmt_int",
"lj_strfmt_num",
"lj_strfmt_char",
"lj_strfmt_putint",
"lj_strfmt_putnum",
"lj_strfmt_putquoted",
"lj_strfmt_putfxint",
"lj_strfmt_putfnum_int",
"lj_strfmt_putfnum_uint",
"lj_strfmt_putfnum",
"lj_strfmt_putfstr",
"lj_strfmt_putfchar",
"lj_buf_putmem",
"lj_buf_putstr",
"lj_buf_putchar",
"lj_buf_putstr_reverse",
"lj_buf_putstr_lower",
"lj_buf_putstr_upper",
"lj_buf_putstr_rep",
"lj_buf_puttab",
"lj_buf_tostr",
"lj_tab_new_ah",
"lj_tab_new1",
"lj_tab_dup",
"lj_tab_clear",
"lj_tab_newkey",
"lj_tab_len",
"lj_gc_step_jit",
"lj_gc_barrieruv",
"lj_mem_newgco",
"lj_math_random_step",
"lj_vm_modi",
"sinh",
"cosh",
"tanh",
"fputc",
"fwrite",
"fflush",
"lj_vm_floor",
"lj_vm_ceil",
"lj_vm_trunc",
"sqrt",
"exp",
"lj_vm_exp2",
"log",
"lj_vm_log2",
"log10",
"sin",
"cos",
"tan",
"lj_vm_powi",
"pow",
"atan2",
"ldexp",
"lj_vm_tobit",
"softfp_add",
"softfp_sub",
"softfp_mul",
"softfp_div",
"softfp_cmp",
"softfp_i2d",
"softfp_d2i",
"lj_vm_sfmin",
"lj_vm_sfmax",
"softfp_ui2d",
"softfp_f2d",
"softfp_d2ui",
"softfp_d2f",
"softfp_i2f",
"softfp_ui2f",
"softfp_f2i",
"softfp_f2ui",
"fp64_l2d",
"fp64_ul2d",
"fp64_l2f",
"fp64_ul2f",
"fp64_d2l",
"fp64_d2ul",
"fp64_f2l",
"fp64_f2ul",
"lj_carith_divi64",
"lj_carith_divu64",
"lj_carith_modi64",
"lj_carith_modu64",
"lj_carith_powi64",
"lj_carith_powu64",
"lj_cdata_newv",
"lj_cdata_setfin",
"strlen",
"memcpy",
"memset",
"lj_vm_errno",
"lj_carith_mul64",
"lj_carith_shl64",
"lj_carith_shr64",
"lj_carith_sar64",
"lj_carith_rol64",
"lj_carith_ror64",
},
ircall = {
[0]="lj_str_cmp",
"lj_str_find",
"lj_str_new",
"lj_strscan_num",
"lj_strfmt_int",
"lj_strfmt_num",
"lj_strfmt_char",
"lj_strfmt_putint",
"lj_strfmt_putnum",
"lj_strfmt_putquoted",
"lj_strfmt_putfxint",
"lj_strfmt_putfnum_int",
"lj_strfmt_putfnum_uint",
"lj_strfmt_putfnum",
"lj_strfmt_putfstr",
"lj_strfmt_putfchar",
"lj_buf_putmem",
"lj_buf_putstr",
"lj_buf_putchar",
"lj_buf_putstr_reverse",
"lj_buf_putstr_lower",
"lj_buf_putstr_upper",
"lj_buf_putstr_rep",
"lj_buf_puttab",
"lj_buf_tostr",
"lj_tab_new_ah",
"lj_tab_new1",
"lj_tab_dup",
"lj_tab_clear",
"lj_tab_newkey",
"lj_tab_len",
"lj_gc_step_jit",
"lj_gc_barrieruv",
"lj_mem_newgco",
"lj_math_random_step",
"lj_vm_modi",
"sinh",
"cosh",
"tanh",
"fputc",
"fwrite",
"fflush",
"lj_vm_floor",
"lj_vm_ceil",
"lj_vm_trunc",
"sqrt",
"exp",
"lj_vm_exp2",
"log",
"lj_vm_log2",
"log10",
"sin",
"cos",
"tan",
"lj_vm_powi",
"pow",
"atan2",
"ldexp",
"lj_vm_tobit",
"softfp_add",
"softfp_sub",
"softfp_mul",
"softfp_div",
"softfp_cmp",
"softfp_i2d",
"softfp_d2i",
"lj_vm_sfmin",
"lj_vm_sfmax",
"softfp_ui2d",
"softfp_f2d",
"softfp_d2ui",
"softfp_d2f",
"softfp_i2f",
"softfp_ui2f",
"softfp_f2i",
"softfp_f2ui",
"fp64_l2d",
"fp64_ul2d",
"fp64_l2f",
"fp64_ul2f",
"fp64_d2l",
"fp64_d2ul",
"fp64_f2l",
"fp64_f2ul",
"lj_carith_divi64",
"lj_carith_divu64",
"lj_carith_modi64",
"lj_carith_modu64",
"lj_carith_powi64",
"lj_carith_powu64",
"lj_cdata_newv",
"lj_cdata_setfin",
"strlen",
"memcpy",
"memset",
"lj_vm_errno",
"lj_carith_mul64",
"lj_carith_shl64",
"lj_carith_shr64",
"lj_carith_sar64",
"lj_carith_rol64",
"lj_carith_ror64",
},
traceerr = {
[0] = "error thrown or hook called during recording",
"trace too short",
"trace too long",
"trace too deep",
"too many snapshots",
"blacklisted",
"retry recording",
"NYI: bytecode %d",
"leaving loop in root trace",
"inner loop in root trace",
"loop unroll limit reached",
"bad argument type",
"JIT compilation disabled for function",
"call unroll limit reached",
"down-recursion, restarting",
"NYI: unsupported variant of FastFunc %s",
"NYI: return to lower frame",
"store with nil or NaN key",
"missing metamethod",
"looping index lookup",
"NYI: mixed sparse/dense table",
"symbol not in cache",
"NYI: unsupported C type conversion",
"NYI: unsupported C function type",
"guard would always fail",
"too many PHIs",
"persistent type instability",
"failed to allocate mcode memory",
"machine code too long",
"hit mcode limit (retrying)",
"too many spill slots",
"inconsistent register allocation",
"NYI: cannot assemble IR instruction %d",
"NYI: PHI shuffling too complex",
"NYI: register coalescing too complex",
},
traceerr = {
[0]="error thrown or hook called during recording",
"trace too short",
"trace too long",
"trace too deep",
"too many snapshots",
"blacklisted",
"retry recording",
"NYI: bytecode %d",
"leaving loop in root trace",
"inner loop in root trace",
"loop unroll limit reached",
"bad argument type",
"JIT compilation disabled for function",
"call unroll limit reached",
"down-recursion, restarting",
"NYI: unsupported variant of FastFunc %s",
"NYI: return to lower frame",
"store with nil or NaN key",
"missing metamethod",
"looping index lookup",
"NYI: mixed sparse/dense table",
"symbol not in cache",
"NYI: unsupported C type conversion",
"NYI: unsupported C function type",
"guard would always fail",
"too many PHIs",
"persistent type instability",
"failed to allocate mcode memory",
"machine code too long",
"hit mcode limit (retrying)",
"too many spill slots",
"inconsistent register allocation",
"NYI: cannot assemble IR instruction %d",
"NYI: PHI shuffling too complex",
"NYI: register coalescing too complex",
},
ffnames = {
[0] = "Lua",
"C",
"assert",
"type",
"next",
"pairs",
"ipairs_aux",
"ipairs",
"getmetatable",
"setmetatable",
"getfenv",
"setfenv",
"rawget",
"rawset",
"rawequal",
"unpack",
"select",
"tonumber",
"tostring",
"error",
"pcall",
"xpcall",
"loadfile",
"load",
"loadstring",
"dofile",
"gcinfo",
"collectgarbage",
"newproxy",
"print",
"coroutine.status",
"coroutine.running",
"coroutine.create",
"coroutine.yield",
"coroutine.resume",
"coroutine.wrap_aux",
"coroutine.wrap",
"math.abs",
"math.floor",
"math.ceil",
"math.sqrt",
"math.log10",
"math.exp",
"math.sin",
"math.cos",
"math.tan",
"math.asin",
"math.acos",
"math.atan",
"math.sinh",
"math.cosh",
"math.tanh",
"math.frexp",
"math.modf",
"math.log",
"math.atan2",
"math.pow",
"math.fmod",
"math.ldexp",
"math.min",
"math.max",
"math.random",
"math.randomseed",
"bit.tobit",
"bit.bnot",
"bit.bswap",
"bit.lshift",
"bit.rshift",
"bit.arshift",
"bit.rol",
"bit.ror",
"bit.band",
"bit.bor",
"bit.bxor",
"bit.tohex",
"string.byte",
"string.char",
"string.sub",
"string.rep",
"string.reverse",
"string.lower",
"string.upper",
"string.dump",
"string.find",
"string.match",
"string.gmatch_aux",
"string.gmatch",
"string.gsub",
"string.format",
"table.maxn",
"table.insert",
"table.concat",
"table.sort",
"table.new",
"table.clear",
"io.method.close",
"io.method.read",
"io.method.write",
"io.method.flush",
"io.method.seek",
"io.method.setvbuf",
"io.method.lines",
"io.method.__gc",
"io.method.__tostring",
"io.open",
"io.popen",
"io.tmpfile",
"io.close",
"io.read",
"io.write",
"io.flush",
"io.input",
"io.output",
"io.lines",
"io.type",
"os.execute",
"os.remove",
"os.rename",
"os.tmpname",
"os.getenv",
"os.exit",
"os.clock",
"os.date",
"os.time",
"os.difftime",
"os.setlocale",
"debug.getregistry",
"debug.getmetatable",
"debug.setmetatable",
"debug.getfenv",
"debug.setfenv",
"debug.getinfo",
"debug.getlocal",
"debug.setlocal",
"debug.getupvalue",
"debug.setupvalue",
"debug.upvalueid",
"debug.upvaluejoin",
"debug.sethook",
"debug.gethook",
"debug.debug",
"debug.traceback",
"jit.on",
"jit.off",
"jit.flush",
"jit.status",
"jit.attach",
"jit.util.funcinfo",
"jit.util.funcbc",
"jit.util.funck",
"jit.util.funcuvname",
"jit.util.traceinfo",
"jit.util.traceir",
"jit.util.tracek",
"jit.util.tracesnap",
"jit.util.tracemc",
"jit.util.traceexitstub",
"jit.util.ircalladdr",
"jit.opt.start",
"jit.profile.start",
"jit.profile.stop",
"jit.profile.dumpstack",
"ffi.meta.__index",
"ffi.meta.__newindex",
"ffi.meta.__eq",
"ffi.meta.__len",
"ffi.meta.__lt",
"ffi.meta.__le",
"ffi.meta.__concat",
"ffi.meta.__call",
"ffi.meta.__add",
"ffi.meta.__sub",
"ffi.meta.__mul",
"ffi.meta.__div",
"ffi.meta.__mod",
"ffi.meta.__pow",
"ffi.meta.__unm",
"ffi.meta.__tostring",
"ffi.meta.__pairs",
"ffi.meta.__ipairs",
"ffi.clib.__index",
"ffi.clib.__newindex",
"ffi.clib.__gc",
"ffi.callback.free",
"ffi.callback.set",
"ffi.cdef",
"ffi.new",
"ffi.cast",
"ffi.typeof",
"ffi.typeinfo",
"ffi.istype",
"ffi.sizeof",
"ffi.alignof",
"ffi.offsetof",
"ffi.errno",
"ffi.string",
"ffi.copy",
"ffi.fill",
"ffi.abi",
"ffi.metatype",
"ffi.gc",
"ffi.load",
},
ffnames = {
[0]="Lua",
"C",
"assert",
"type",
"next",
"pairs",
"ipairs_aux",
"ipairs",
"getmetatable",
"setmetatable",
"getfenv",
"setfenv",
"rawget",
"rawset",
"rawequal",
"unpack",
"select",
"tonumber",
"tostring",
"error",
"pcall",
"xpcall",
"loadfile",
"load",
"loadstring",
"dofile",
"gcinfo",
"collectgarbage",
"newproxy",
"print",
"coroutine.status",
"coroutine.running",
"coroutine.create",
"coroutine.yield",
"coroutine.resume",
"coroutine.wrap_aux",
"coroutine.wrap",
"math.abs",
"math.floor",
"math.ceil",
"math.sqrt",
"math.log10",
"math.exp",
"math.sin",
"math.cos",
"math.tan",
"math.asin",
"math.acos",
"math.atan",
"math.sinh",
"math.cosh",
"math.tanh",
"math.frexp",
"math.modf",
"math.log",
"math.atan2",
"math.pow",
"math.fmod",
"math.ldexp",
"math.min",
"math.max",
"math.random",
"math.randomseed",
"bit.tobit",
"bit.bnot",
"bit.bswap",
"bit.lshift",
"bit.rshift",
"bit.arshift",
"bit.rol",
"bit.ror",
"bit.band",
"bit.bor",
"bit.bxor",
"bit.tohex",
"string.byte",
"string.char",
"string.sub",
"string.rep",
"string.reverse",
"string.lower",
"string.upper",
"string.dump",
"string.find",
"string.match",
"string.gmatch_aux",
"string.gmatch",
"string.gsub",
"string.format",
"table.maxn",
"table.insert",
"table.concat",
"table.sort",
"table.new",
"table.clear",
"io.method.close",
"io.method.read",
"io.method.write",
"io.method.flush",
"io.method.seek",
"io.method.setvbuf",
"io.method.lines",
"io.method.__gc",
"io.method.__tostring",
"io.open",
"io.popen",
"io.tmpfile",
"io.close",
"io.read",
"io.write",
"io.flush",
"io.input",
"io.output",
"io.lines",
"io.type",
"os.execute",
"os.remove",
"os.rename",
"os.tmpname",
"os.getenv",
"os.exit",
"os.clock",
"os.date",
"os.time",
"os.difftime",
"os.setlocale",
"debug.getregistry",
"debug.getmetatable",
"debug.setmetatable",
"debug.getfenv",
"debug.setfenv",
"debug.getinfo",
"debug.getlocal",
"debug.setlocal",
"debug.getupvalue",
"debug.setupvalue",
"debug.upvalueid",
"debug.upvaluejoin",
"debug.sethook",
"debug.gethook",
"debug.debug",
"debug.traceback",
"jit.on",
"jit.off",
"jit.flush",
"jit.status",
"jit.attach",
"jit.util.funcinfo",
"jit.util.funcbc",
"jit.util.funck",
"jit.util.funcuvname",
"jit.util.traceinfo",
"jit.util.traceir",
"jit.util.tracek",
"jit.util.tracesnap",
"jit.util.tracemc",
"jit.util.traceexitstub",
"jit.util.ircalladdr",
"jit.opt.start",
"jit.profile.start",
"jit.profile.stop",
"jit.profile.dumpstack",
"ffi.meta.__index",
"ffi.meta.__newindex",
"ffi.meta.__eq",
"ffi.meta.__len",
"ffi.meta.__lt",
"ffi.meta.__le",
"ffi.meta.__concat",
"ffi.meta.__call",
"ffi.meta.__add",
"ffi.meta.__sub",
"ffi.meta.__mul",
"ffi.meta.__div",
"ffi.meta.__mod",
"ffi.meta.__pow",
"ffi.meta.__unm",
"ffi.meta.__tostring",
"ffi.meta.__pairs",
"ffi.meta.__ipairs",
"ffi.clib.__index",
"ffi.clib.__newindex",
"ffi.clib.__gc",
"ffi.callback.free",
"ffi.callback.set",
"ffi.cdef",
"ffi.new",
"ffi.cast",
"ffi.typeof",
"ffi.typeinfo",
"ffi.istype",
"ffi.sizeof",
"ffi.alignof",
"ffi.offsetof",
"ffi.errno",
"ffi.string",
"ffi.copy",
"ffi.fill",
"ffi.abi",
"ffi.metatype",
"ffi.gc",
"ffi.load",
},
}

View File

@ -14,11 +14,11 @@
-- ...
-- zone("A*")
-- ...
-- -- print(zone:get()) --> "A*"
-- print(zone:get()) --> "A*"
-- ...
-- zone()
-- ...
-- -- print(zone:get()) --> "AI"
-- print(zone:get()) --> "AI"
-- ...
-- zone()
--
@ -28,7 +28,7 @@ local remove = table.remove
return setmetatable({
flush = function(t)
for i = #t, 1, -1 do t[i] = nil end
for i=#t,1,-1 do t[i] = nil end
end,
get = function(t)
return t[#t]
@ -36,9 +36,10 @@ return setmetatable({
}, {
__call = function(t, zone)
if zone then
t[#t + 1] = zone
t[#t+1] = zone
else
return (assert(remove(t), "empty zone stack"))
end
end
})

View File

@ -3,7 +3,7 @@
-- imported functions and modules
local tonumber, type, print, error = tonumber, type, print, error
local setmetatable = setmetatable
local m = require "lpeg"
local m = require"lpeg"
-- 'm' will be used to parse expressions, and 'mm' will be used to
-- create expressions; that is, 're' runs on 'm', creating patterns
@ -24,7 +24,7 @@ local any = m.P(1)
-- Pre-defined names
local Predef = { nl = m.P "\n" }
local Predef = { nl = m.P"\n" }
local mem
@ -32,7 +32,7 @@ local fmem
local gmem
local function updatelocale()
local function updatelocale ()
mm.locale(Predef)
Predef.a = Predef.alpha
Predef.c = Predef.cntrl
@ -54,10 +54,10 @@ local function updatelocale()
Predef.U = any - Predef.u
Predef.W = any - Predef.w
Predef.X = any - Predef.x
mem = {} -- restart memoization
mem = {} -- restart memoization
fmem = {}
gmem = {}
local mt = { __mode = "v" }
local mt = {__mode = "v"}
setmetatable(mem, mt)
setmetatable(fmem, mt)
setmetatable(gmem, mt)
@ -68,49 +68,47 @@ updatelocale()
local I = m.P(function(s, i)
print(i, s:sub(1, i - 1)); return i
end)
local I = m.P(function (s,i) print(i, s:sub(1, i-1)); return i end)
local function getdef(id, defs)
local function getdef (id, defs)
local c = defs and defs[id]
if not c then error("undefined name: " .. id) end
return c
end
local function patt_error(s, i)
local function patt_error (s, i)
local msg = (#s < i + 20) and s:sub(i)
or s:sub(i, i + 20) .. "..."
or s:sub(i,i+20) .. "..."
msg = ("pattern error near '%s'"):format(msg)
error(msg, 2)
end
local function mult(p, n)
local function mult (p, n)
local np = mm.P(true)
while n >= 1 do
if n % 2 >= 1 then np = np * p end
if n%2 >= 1 then np = np * p end
p = p * p
n = n / 2
n = n/2
end
return np
end
local function equalcap(s, i, c)
local function equalcap (s, i, c)
if type(c) ~= "string" then return nil end
local e = #c + i
if s:sub(i, e - 1) == c then return e else return nil end
end
local S = (Predef.space + "--" * (any - Predef.nl) ^ 0) ^ 0
local S = (Predef.space + "--" * (any - Predef.nl)^0)^0
local name = m.R("AZ", "az", "__") * m.R("AZ", "az", "__", "09") ^ 0
local name = m.R("AZ", "az", "__") * m.R("AZ", "az", "__", "09")^0
local arrow = S * "<-"
local seq_follow = m.P "/" + ")" + "}" + ":}" + "~}" + "|}" + (name * arrow) + -1
local seq_follow = m.P"/" + ")" + "}" + ":}" + "~}" + "|}" + (name * arrow) + -1
name = m.C(name)
@ -118,102 +116,101 @@ name = m.C(name)
-- a defined name only have meaning in a given environment
local Def = name * m.Carg(1)
local num = m.C(m.R "09" ^ 1) * S / tonumber
local num = m.C(m.R"09"^1) * S / tonumber
local String = "'" * m.C((any - "'") ^ 0) * "'" +
'"' * m.C((any - '"') ^ 0) * '"'
local String = "'" * m.C((any - "'")^0) * "'" +
'"' * m.C((any - '"')^0) * '"'
local defined = "%" * Def / function(c, Defs)
local cat = Defs and Defs[c] or Predef[c]
if not cat then error("name '" .. c .. "' undefined") end
local defined = "%" * Def / function (c,Defs)
local cat = Defs and Defs[c] or Predef[c]
if not cat then error ("name '" .. c .. "' undefined") end
return cat
end
local Range = m.Cs(any * (m.P "-" / "") * (any - "]")) / mm.R
local Range = m.Cs(any * (m.P"-"/"") * (any - "]")) / mm.R
local item = defined + Range + m.C(any)
local Class =
"["
* (m.C(m.P "^" ^ -1)) -- optional complement symbol
* m.Cf(item * (item - "]") ^ 0, mt.__add) /
function(c, p) return c == "^" and any - p or p end
* "]"
* (m.C(m.P"^"^-1)) -- optional complement symbol
* m.Cf(item * (item - "]")^0, mt.__add) /
function (c, p) return c == "^" and any - p or p end
* "]"
local function adddef(t, k, exp)
local function adddef (t, k, exp)
if t[k] then
error("'" .. k .. "' already defined as a rule")
error("'"..k.."' already defined as a rule")
else
t[k] = exp
end
return t
end
local function firstdef(n, r) return adddef({ n }, n, r) end
local function firstdef (n, r) return adddef({n}, n, r) end
local function NT(n, b)
local function NT (n, b)
if not b then
error("rule '" .. n .. "' used outside a grammar")
else
return mm.V(n)
error("rule '"..n.."' used outside a grammar")
else return mm.V(n)
end
end
local exp = m.P { "Exp",
Exp = S * (m.V "Grammar"
+ m.Cf(m.V "Seq" * ("/" * S * m.V "Seq") ^ 0, mt.__add)),
Seq = m.Cf(m.Cc(m.P "") * m.V "Prefix" ^ 0, mt.__mul)
* (#seq_follow + patt_error),
Prefix = "&" * S * m.V "Prefix" / mt.__len
+ "!" * S * m.V "Prefix" / mt.__unm
+ m.V "Suffix",
Suffix = m.Cf(m.V "Primary" * S *
((m.P "+" * m.Cc(1, mt.__pow)
+ m.P "*" * m.Cc(0, mt.__pow)
+ m.P "?" * m.Cc(-1, mt.__pow)
+ "^" * (m.Cg(num * m.Cc(mult))
+ m.Cg(m.C(m.S "+-" * m.R "09" ^ 1) * m.Cc(mt.__pow))
)
+ "->" * S * (m.Cg((String + num) * m.Cc(mt.__div))
+ m.P "{}" * m.Cc(nil, m.Ct)
+ m.Cg(Def / getdef * m.Cc(mt.__div))
)
+ "=>" * S * m.Cg(Def / getdef * m.Cc(m.Cmt))
) * S
) ^ 0, function(a, b, f) return f(a, b) end),
Primary = "(" * m.V "Exp" * ")"
+ String / mm.P
+ Class
+ defined
+ "{:" * (name * ":" + m.Cc(nil)) * m.V "Exp" * ":}" /
function(n, p) return mm.Cg(p, n) end
+ "=" * name / function(n) return mm.Cmt(mm.Cb(n), equalcap) end
+ m.P "{}" / mm.Cp
+ "{~" * m.V "Exp" * "~}" / mm.Cs
+ "{|" * m.V "Exp" * "|}" / mm.Ct
+ "{" * m.V "Exp" * "}" / mm.C
+ m.P "." * m.Cc(any)
+ (name * -arrow + "<" * name * ">") * m.Cb("G") / NT,
Definition = name * arrow * m.V "Exp",
local exp = m.P{ "Exp",
Exp = S * ( m.V"Grammar"
+ m.Cf(m.V"Seq" * ("/" * S * m.V"Seq")^0, mt.__add) );
Seq = m.Cf(m.Cc(m.P"") * m.V"Prefix"^0 , mt.__mul)
* (#seq_follow + patt_error);
Prefix = "&" * S * m.V"Prefix" / mt.__len
+ "!" * S * m.V"Prefix" / mt.__unm
+ m.V"Suffix";
Suffix = m.Cf(m.V"Primary" * S *
( ( m.P"+" * m.Cc(1, mt.__pow)
+ m.P"*" * m.Cc(0, mt.__pow)
+ m.P"?" * m.Cc(-1, mt.__pow)
+ "^" * ( m.Cg(num * m.Cc(mult))
+ m.Cg(m.C(m.S"+-" * m.R"09"^1) * m.Cc(mt.__pow))
)
+ "->" * S * ( m.Cg((String + num) * m.Cc(mt.__div))
+ m.P"{}" * m.Cc(nil, m.Ct)
+ m.Cg(Def / getdef * m.Cc(mt.__div))
)
+ "=>" * S * m.Cg(Def / getdef * m.Cc(m.Cmt))
) * S
)^0, function (a,b,f) return f(a,b) end );
Primary = "(" * m.V"Exp" * ")"
+ String / mm.P
+ Class
+ defined
+ "{:" * (name * ":" + m.Cc(nil)) * m.V"Exp" * ":}" /
function (n, p) return mm.Cg(p, n) end
+ "=" * name / function (n) return mm.Cmt(mm.Cb(n), equalcap) end
+ m.P"{}" / mm.Cp
+ "{~" * m.V"Exp" * "~}" / mm.Cs
+ "{|" * m.V"Exp" * "|}" / mm.Ct
+ "{" * m.V"Exp" * "}" / mm.C
+ m.P"." * m.Cc(any)
+ (name * -arrow + "<" * name * ">") * m.Cb("G") / NT;
Definition = name * arrow * m.V"Exp";
Grammar = m.Cg(m.Cc(true), "G") *
m.Cf(m.V "Definition" / firstdef * m.Cg(m.V "Definition") ^ 0,
adddef) / mm.P
m.Cf(m.V"Definition" / firstdef * m.Cg(m.V"Definition")^0,
adddef) / mm.P
}
local pattern = S * m.Cg(m.Cc(false), "G") * exp / mm.P * (-any + patt_error)
local function compile(p, defs)
if mm.type(p) == "pattern" then return p end -- already compiled
local function compile (p, defs)
if mm.type(p) == "pattern" then return p end -- already compiled
local cp = pattern:match(p, 1, defs)
if not cp then error("incorrect pattern", 3) end
return cp
end
local function match(s, p, i)
local function match (s, p, i)
local cp = mem[p]
if not cp then
cp = compile(p)
@ -222,28 +219,26 @@ local function match(s, p, i)
return cp:match(s, i or 1)
end
local function find(s, p, i)
local function find (s, p, i)
local cp = fmem[p]
if not cp then
cp = compile(p) / 0
cp = mm.P { mm.Cp() * cp * mm.Cp() + 1 * mm.V(1) }
cp = mm.P{ mm.Cp() * cp * mm.Cp() + 1 * mm.V(1) }
fmem[p] = cp
end
local i, e = cp:match(s, i or 1)
if i then
return i, e - 1
else
return i
if i then return i, e - 1
else return i
end
end
local function gsub(s, p, rep)
local g = gmem[p] or {} -- ensure gmem[p] is not collected while here
local function gsub (s, p, rep)
local g = gmem[p] or {} -- ensure gmem[p] is not collected while here
gmem[p] = g
local cp = g[rep]
if not cp then
cp = compile(p)
cp = mm.Cs((cp / rep + 1) ^ 0)
cp = mm.Cs((cp / rep + 1)^0)
g[rep] = cp
end
return cp:match(s)

View File

@ -42,7 +42,7 @@ local function _SimpleDecoder(wire_type, decode_value)
return function(field_number, is_repeated, is_packed, key, new_default)
if is_packed then
local DecodeVarint = _DecodeVarint
return function(buffer, pos, pend, message, field_dict)
return function (buffer, pos, pend, message, field_dict)
local value = field_dict[key]
if value == nil then
value = new_default(message)
@ -79,7 +79,7 @@ local function _SimpleDecoder(wire_type, decode_value)
local element, new_pos = decode_value(buffer, pos)
value:append(element)
pos = new_pos + tag_len
if sub(buffer, new_pos + 1, pos) ~= tag_bytes or new_pos >= pend then
if sub(buffer, new_pos+1, pos) ~= tag_bytes or new_pos >= pend then
if new_pos > pend then
error('Truncated message.')
end
@ -88,7 +88,7 @@ local function _SimpleDecoder(wire_type, decode_value)
end
end
else
return function(buffer, pos, pend, message, field_dict)
return function (buffer, pos, pend, message, field_dict)
field_dict[key], pos = decode_value(buffer, pos)
if pos > pend then
field_dict[key] = nil
@ -101,7 +101,7 @@ local function _SimpleDecoder(wire_type, decode_value)
end
local function _ModifiedDecoder(wire_type, decode_value, modify_value)
local InnerDecode = function(buffer, pos)
local InnerDecode = function (buffer, pos)
local result, new_pos = decode_value(buffer, pos)
return modify_value(result), new_pos
end
@ -116,7 +116,6 @@ local function _StructPackDecoder(wire_type, value_size, format)
local result = struct_unpack(format, buffer, pos)
return result, new_pos
end
return _SimpleDecoder(wire_type, InnerDecode)
end
@ -124,16 +123,16 @@ local function _Boolean(value)
return value ~= 0
end
Int32Decoder = _SimpleDecoder(wire_format.WIRETYPE_VARINT, _DecodeSignedVarint32)
EnumDecoder = Int32Decoder
Int32Decoder = _SimpleDecoder(wire_format.WIRETYPE_VARINT, _DecodeSignedVarint32)
EnumDecoder = Int32Decoder
Int64Decoder = _SimpleDecoder(wire_format.WIRETYPE_VARINT, _DecodeSignedVarint64)
Int64Decoder = _SimpleDecoder(wire_format.WIRETYPE_VARINT, _DecodeSignedVarint64)
UInt32Decoder = _SimpleDecoder(wire_format.WIRETYPE_VARINT, _DecodeVarint32)
UInt64Decoder = _SimpleDecoder(wire_format.WIRETYPE_VARINT, _DecodeVarint64)
UInt32Decoder = _SimpleDecoder(wire_format.WIRETYPE_VARINT, _DecodeVarint32)
UInt64Decoder = _SimpleDecoder(wire_format.WIRETYPE_VARINT, _DecodeVarint64)
SInt32Decoder = _ModifiedDecoder(wire_format.WIRETYPE_VARINT, _DecodeVarint32, wire_format.ZigZagDecode32)
SInt64Decoder = _ModifiedDecoder(wire_format.WIRETYPE_VARINT, _DecodeVarint64, wire_format.ZigZagDecode64)
SInt32Decoder = _ModifiedDecoder(wire_format.WIRETYPE_VARINT, _DecodeVarint32, wire_format.ZigZagDecode32)
SInt64Decoder = _ModifiedDecoder(wire_format.WIRETYPE_VARINT, _DecodeVarint64, wire_format.ZigZagDecode64)
Fixed32Decoder = _StructPackDecoder(wire_format.WIRETYPE_FIXED32, 4, string.byte('I'))
Fixed64Decoder = _StructPackDecoder(wire_format.WIRETYPE_FIXED64, 8, string.byte('Q'))
@ -154,7 +153,7 @@ function StringDecoder(field_number, is_repeated, is_packed, key, new_default)
if is_repeated then
local tag_bytes = encoder.TagBytes(field_number, wire_format.WIRETYPE_LENGTH_DELIMITED)
local tag_len = #tag_bytes
return function(buffer, pos, pend, message, field_dict)
return function (buffer, pos, pend, message, field_dict)
local value = field_dict[key]
if value == nil then
value = new_default(message)
@ -167,7 +166,7 @@ function StringDecoder(field_number, is_repeated, is_packed, key, new_default)
if new_pos > pend then
error('Truncated string.')
end
value:append(sub(buffer, pos + 1, new_pos))
value:append(sub(buffer, pos+1, new_pos))
pos = new_pos + tag_len
if sub(buffer, new_pos + 1, pos) ~= tag_bytes or new_pos == pend then
return new_pos
@ -175,7 +174,7 @@ function StringDecoder(field_number, is_repeated, is_packed, key, new_default)
end
end
else
return function(buffer, pos, pend, message, field_dict)
return function (buffer, pos, pend, message, field_dict)
local size, new_pos
size, pos = DecodeVarint(buffer, pos)
new_pos = pos + size
@ -195,7 +194,7 @@ function BytesDecoder(field_number, is_repeated, is_packed, key, new_default)
if is_repeated then
local tag_bytes = encoder.TagBytes(field_number, wire_format.WIRETYPE_LENGTH_DELIMITED)
local tag_len = #tag_bytes
return function(buffer, pos, pend, message, field_dict)
return function (buffer, pos, pend, message, field_dict)
local value = field_dict[key]
if value == nil then
value = new_default(message)
@ -237,7 +236,7 @@ function MessageDecoder(field_number, is_repeated, is_packed, key, new_default)
if is_repeated then
local tag_bytes = encoder.TagBytes(field_number, wire_format.WIRETYPE_LENGTH_DELIMITED)
local tag_len = #tag_bytes
return function(buffer, pos, pend, message, field_dict)
return function (buffer, pos, pend, message, field_dict)
local value = field_dict[key]
if value == nil then
value = new_default(message)
@ -260,7 +259,7 @@ function MessageDecoder(field_number, is_repeated, is_packed, key, new_default)
end
end
else
return function(buffer, pos, pend, message, field_dict)
return function (buffer, pos, pend, message, field_dict)
local value = field_dict[key]
if value == nil then
value = new_default(message)
@ -328,11 +327,11 @@ function _FieldSkipper()
_RaiseInvalidWireType,
}
-- wiretype_mask = wire_format.TAG_TYPE_MASK
-- wiretype_mask = wire_format.TAG_TYPE_MASK
local ord = string.byte
local sub = string.sub
return function(buffer, pos, pend, tag_bytes)
return function (buffer, pos, pend, tag_bytes)
local wire_type = ord(sub(tag_bytes, 1, 1)) % 8 + 1
return WIRETYPE_TO_SKIPPER[wire_type](buffer, pos, pend)
end

View File

@ -47,7 +47,7 @@ local function make_descriptor(name, descriptor, usable_key)
if usable_key[key] then
rawset(self, key, value)
else
error("error key: " .. key)
error("error key: "..key)
end
end
};
@ -60,7 +60,7 @@ local function make_descriptor(name, descriptor, usable_key)
end
make_descriptor("Descriptor", {}, {
make_descriptor("Descriptor", {}, {
name = true,
full_name = true,
filename = true,
@ -92,11 +92,11 @@ make_descriptor("FieldDescriptor", FieldDescriptor, {
})
make_descriptor("EnumDescriptor", {}, {
name = true,
full_name = true,
values = true,
containing_type = true,
options = true
name = true,
full_name = true,
values = true,
containing_type = true,
options = true
})
make_descriptor("EnumValueDescriptor", {}, {
@ -138,14 +138,14 @@ local NON_PACKABLE_TYPES = {
local _VALUE_CHECKERS = {
[FieldDescriptor.CPPTYPE_INT32] = type_checkers.Int32ValueChecker(),
[FieldDescriptor.CPPTYPE_INT64] = type_checkers.TypeChecker({ string = true, number = true }),
[FieldDescriptor.CPPTYPE_INT64] = type_checkers.TypeChecker({string = true, number = true}),
[FieldDescriptor.CPPTYPE_UINT32] = type_checkers.Uint32ValueChecker(),
[FieldDescriptor.CPPTYPE_UINT64] = type_checkers.TypeChecker({ string = true, number = true }),
[FieldDescriptor.CPPTYPE_DOUBLE] = type_checkers.TypeChecker({ number = true }),
[FieldDescriptor.CPPTYPE_FLOAT] = type_checkers.TypeChecker({ number = true }),
[FieldDescriptor.CPPTYPE_BOOL] = type_checkers.TypeChecker({ boolean = true, bool = true, int = true }),
[FieldDescriptor.CPPTYPE_UINT64] = type_checkers.TypeChecker({string = true, number = true}),
[FieldDescriptor.CPPTYPE_DOUBLE] = type_checkers.TypeChecker({number = true}),
[FieldDescriptor.CPPTYPE_FLOAT] = type_checkers.TypeChecker({number = true}),
[FieldDescriptor.CPPTYPE_BOOL] = type_checkers.TypeChecker({boolean = true, bool = true, int=true}),
[FieldDescriptor.CPPTYPE_ENUM] = type_checkers.Int32ValueChecker(),
[FieldDescriptor.CPPTYPE_STRING] = type_checkers.TypeChecker({ string = true })
[FieldDescriptor.CPPTYPE_STRING] = type_checkers.TypeChecker({string = true})
}
@ -267,30 +267,30 @@ end
local function _DefaultValueConstructorForField(field)
if field.label == FieldDescriptor.LABEL_REPEATED then
if type(field.default_value) ~= "table" or #(field.default_value) ~= 0 then
if type(field.default_value) ~= "table" or #(field.default_value) ~= 0 then
error('Repeated field default value not empty list:' .. tostring(field.default_value))
end
if field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE then
local message_type = field.message_type
return function(message)
return function (message)
return containers.RepeatedCompositeFieldContainer(message._listener_for_children, message_type)
end
else
local type_checker = GetTypeChecker(field.cpp_type, field.type)
return function(message)
return function (message)
return containers.RepeatedScalarFieldContainer(message._listener_for_children, type_checker)
end
end
end
if field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE then
local message_type = field.message_type
return function(message)
return function (message)
result = message_type._concrete_class()
result._SetListener(message._listener_for_children)
return result
end
end
return function(message)
return function (message)
return field.default_value
end
end
@ -299,16 +299,13 @@ local function _AttachFieldHelpers(message_meta, field_descriptor)
local is_repeated = (field_descriptor.label == FieldDescriptor.LABEL_REPEATED)
local is_packed = (field_descriptor.has_options and field_descriptor.GetOptions().packed)
rawset(field_descriptor, "_encoder",
TYPE_TO_ENCODER[field_descriptor.type](field_descriptor.number, is_repeated, is_packed))
rawset(field_descriptor, "_sizer",
TYPE_TO_SIZER[field_descriptor.type](field_descriptor.number, is_repeated, is_packed))
rawset(field_descriptor, "_encoder", TYPE_TO_ENCODER[field_descriptor.type](field_descriptor.number, is_repeated, is_packed))
rawset(field_descriptor, "_sizer", TYPE_TO_SIZER[field_descriptor.type](field_descriptor.number, is_repeated, is_packed))
rawset(field_descriptor, "_default_constructor", _DefaultValueConstructorForField(field_descriptor))
local AddDecoder = function(wiretype, is_packed)
local tag_bytes = encoder.TagBytes(field_descriptor.number, wiretype)
message_meta._decoders_by_tag[tag_bytes] = TYPE_TO_DECODER[field_descriptor.type](field_descriptor.number,
is_repeated, is_packed, field_descriptor, field_descriptor._default_constructor)
message_meta._decoders_by_tag[tag_bytes] = TYPE_TO_DECODER[field_descriptor.type](field_descriptor.number, is_repeated, is_packed, field_descriptor, field_descriptor._default_constructor)
end
AddDecoder(FIELD_TYPE_TO_WIRE_TYPE[field_descriptor.type], False)
@ -377,7 +374,7 @@ local function _AddPropertiesForNonRepeatedCompositeField(field, message_meta)
return field_value
end
message_meta._setter[property_name] = function(self, new_value)
error('Assignment not allowed to composite field' .. property_name .. 'in protocol message object.')
error('Assignment not allowed to composite field' .. property_name .. 'in protocol message object.' )
end
end
@ -387,7 +384,7 @@ local function _AddPropertiesForNonRepeatedScalarField(field, message)
local default_value = field.default_value
message._getter[property_name] = function(self)
local value = self._fields[field]
local value = self._fields[field]
if value ~= nil then
return self._fields[field]
else
@ -438,9 +435,8 @@ local _ED_meta = {
__newindex = function(self, extension_handle, value)
local _extended_message = rawget(self, "_extended_message")
if (extension_handle.label == FieldDescriptor.LABEL_REPEATED or
extension_handle.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE) then
error('Cannot assign to extension "' ..
extension_handle.full_name .. '" because it is a repeated or composite type.')
extension_handle.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE) then
error('Cannot assign to extension "'.. extension_handle.full_name .. '" because it is a repeated or composite type.')
end
local type_checker = GetTypeChecker(extension_handle.cpp_type, extension_handle.type)
@ -466,11 +462,11 @@ local function _AddPropertiesForFields(descriptor, message_meta)
end
local function _AddPropertiesForExtensions(descriptor, message_meta)
local extension_dict = descriptor._extensions_by_name
for extension_name, extension_field in pairs(extension_dict) do
local constant_name = string.upper(extension_name) .. "_FIELD_NUMBER"
message_meta._member[constant_name] = extension_field.number
end
local extension_dict = descriptor._extensions_by_name
for extension_name, extension_field in pairs(extension_dict) do
local constant_name = string.upper(extension_name) .. "_FIELD_NUMBER"
message_meta._member[constant_name] = extension_field.number
end
end
local function _AddStaticMethods(message_meta)
@ -509,28 +505,25 @@ end
function sortFunc(a, b)
return a.index < b.index
end
function pairsByKeys(t, f)
function pairsByKeys (t, f)
local a = {}
for n in pairs(t) do table.insert(a, n) end
table.sort(a, f)
local i = 0 -- iterator variable
local iter = function() -- iterator function
i = i + 1
if a[i] == nil then
return nil
else
return a[i], t[a[i]]
end
local i = 0 -- iterator variable
local iter = function () -- iterator function
i = i + 1
if a[i] == nil then return nil
else return a[i], t[a[i]]
end
end
return iter
end
local function _AddListFieldsMethod(message_descriptor, message_meta)
message_meta._member.ListFields = function(self)
message_meta._member.ListFields = function (self)
local list_field = function(fields)
--local f, s, v = pairs(self._fields)
local f, s, v = pairsByKeys(self._fields, sortFunc)
local f,s,v = pairsByKeys(self._fields, sortFunc)
local iter = function(a, i)
while true do
local descriptor, value = f(a, i)
@ -554,23 +547,23 @@ local function _AddHasFieldMethod(message_descriptor, message_meta)
singular_fields[field.name] = field
end
end
message_meta._member.HasField = function(self, field_name)
message_meta._member.HasField = function (self, field_name)
field = singular_fields[field_name]
if field == nil then
error('Protocol message has no singular "' .. field_name .. '" field.')
error('Protocol message has no singular "'.. field_name.. '" field.')
end
if field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE then
value = self._fields[field]
return value ~= nil and value._is_present_in_parent
return value ~= nil and value._is_present_in_parent
else
local valueTmp = self._fields[field]
local valueTmp = self._fields[field]
return valueTmp ~= nil
end
end
end
local function _AddClearFieldMethod(message_descriptor, message_meta)
local singular_fields = {}
local singular_fields = {}
for _, field in ipairs(message_descriptor.fields) do
if field.label ~= FieldDescriptor.LABEL_REPEATED then
singular_fields[field.name] = field
@ -578,16 +571,16 @@ local function _AddClearFieldMethod(message_descriptor, message_meta)
end
message_meta._member.ClearField = function(self, field_name)
field = singular_fields[field_name]
if field == nil then
error('Protocol message has no singular "' .. field_name .. '" field.')
end
field = singular_fields[field_name]
if field == nil then
error('Protocol message has no singular "'.. field_name.. '" field.')
end
if self._fields[field] then
self._fields[field] = nil
end
message_meta._member._Modified(self)
end
if self._fields[field] then
self._fields[field] = nil
end
message_meta._member._Modified(self)
end
end
local function _AddClearExtensionMethod(message_meta)
@ -792,7 +785,7 @@ local function _AddIsInitializedMethod(message_descriptor, message_meta)
message_meta._member.FindInitializationErrors = function(self)
local errors = {}
for _, field in ipairs(required_fields) do
for _,field in ipairs(required_fields) do
if not message_meta._member.HasField(self, field.name) then
errors[#errors + 1] = field.name
end
@ -830,7 +823,7 @@ local function _AddMergeFromMethod(message_meta)
local LABEL_REPEATED = FieldDescriptor.LABEL_REPEATED
local CPPTYPE_MESSAGE = FieldDescriptor.CPPTYPE_MESSAGE
message_meta._member.MergeFrom = function(self, msg)
message_meta._member.MergeFrom = function (self, msg)
assert(msg ~= self)
message_meta._member._Modified(self)
@ -860,7 +853,7 @@ local function _AddMessageMethods(message_descriptor, message_meta)
_AddHasExtensionMethod(message_meta)
end
_AddClearMethod(message_descriptor, message_meta)
-- _AddEqualsMethod(message_descriptor, message_meta)
-- _AddEqualsMethod(message_descriptor, message_meta)
_AddStrMethod(message_meta)
_AddSetListenerMethod(message_meta)
_AddByteSizeMethod(message_descriptor, message_meta)
@ -872,7 +865,7 @@ local function _AddMessageMethods(message_descriptor, message_meta)
end
local function _AddPrivateHelperMethods(message_meta)
local Modified = function(self)
local Modified = function (self)
if not self._cached_byte_size_dirty then
self._cached_byte_size_dirty = true
self._listener_for_children.dirty = true
@ -888,27 +881,27 @@ local function property_getter(message_meta)
local getter = message_meta._getter
local member = message_meta._member
return function(self, property)
local g = getter[property]
if g then
return g(self)
else
return member[property]
end
end
return function (self, property)
local g = getter[property]
if g then
return g(self)
else
return member[property]
end
end
end
local function property_setter(message_meta)
local setter = message_meta._setter
local setter = message_meta._setter
return function(self, property, value)
local s = setter[property]
if s then
s(self, value)
else
error(property .. " not found")
end
end
return function (self, property, value)
local s = setter[property]
if s then
s(self, value)
else
error(property .. " not found")
end
end
end
function _AddClassAttributesForNestedExtensions(descriptor, message_meta)
@ -936,7 +929,7 @@ local function Message(descriptor)
message_meta._getter = {}
message_meta._setter = {}
message_meta._member = {}
-- message_meta._name = descriptor.full_name
-- message_meta._name = descriptor.full_name
local ns = setmetatable({}, message_meta._member)
message_meta._member.__call = _InitMethod(message_meta)
@ -964,3 +957,4 @@ local function Message(descriptor)
end
_M.Message = Message

View File

@ -27,13 +27,13 @@ local descriptor = require "protobuf.descriptor"
module "protobuf.text_format"
function format(buffer)
local len = string.len(buffer)
local len = string.len( buffer )
for i = 1, len, 16 do
local text = ""
for j = i, math.min(i + 16 - 1, len) do
text = string.format("%s %02x", text, string.byte(buffer, j))
for j = i, math.min( i + 16 - 1, len ) do
text = string.format( "%s %02x", text, string.byte( buffer, j ) )
end
print(text)
print( text )
end
end
@ -76,3 +76,4 @@ function msg_format(msg)
msg_format_indent(write, msg, 0)
return table.concat(out)
end

View File

@ -8,31 +8,31 @@ if jit then
jit.opt.start(3)
end
-- print("ver"..jit.version_num.." jit: ", jit.status())
-- print(string.format("os: %s, arch: %s", jit.os, jit.arch))
print("ver"..jit.version_num.." jit: ", jit.status())
print(string.format("os: %s, arch: %s", jit.os, jit.arch))
end
if DebugServerIp then
require("mobdebug").start(DebugServerIp)
require("mobdebug").start(DebugServerIp)
end
require "misc.functions"
Mathf = require "UnityEngine.Mathf"
Vector3 = require "UnityEngine.Vector3"
Quaternion = require "UnityEngine.Quaternion"
Vector2 = require "UnityEngine.Vector2"
Vector4 = require "UnityEngine.Vector4"
Color = require "UnityEngine.Color"
Ray = require "UnityEngine.Ray"
Bounds = require "UnityEngine.Bounds"
RaycastHit = require "UnityEngine.RaycastHit"
Touch = require "UnityEngine.Touch"
LayerMask = require "UnityEngine.LayerMask"
Plane = require "UnityEngine.Plane"
Time = reimport "UnityEngine.Time"
Mathf = require "UnityEngine.Mathf"
Vector3 = require "UnityEngine.Vector3"
Quaternion = require "UnityEngine.Quaternion"
Vector2 = require "UnityEngine.Vector2"
Vector4 = require "UnityEngine.Vector4"
Color = require "UnityEngine.Color"
Ray = require "UnityEngine.Ray"
Bounds = require "UnityEngine.Bounds"
RaycastHit = require "UnityEngine.RaycastHit"
Touch = require "UnityEngine.Touch"
LayerMask = require "UnityEngine.LayerMask"
Plane = require "UnityEngine.Plane"
Time = reimport "UnityEngine.Time"
list = require "list"
utf8 = require "misc.utf8"
list = require "list"
utf8 = require "misc.utf8"
require "event"
require "typeof"

View File

@ -88,5 +88,5 @@ TextureImporter:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName: base/main_majiang/d2fa434d27dc07bf09395dc32491060b
assetBundleName: base/main_majiang/abf0e2af8fb6daf78fa8ebcdd8acc4f0
assetBundleVariant:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 965 KiB

After

Width:  |  Height:  |  Size: 483 KiB

View File

@ -88,5 +88,5 @@ TextureImporter:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleName: base/main_majiang/abf0e2af8fb6daf78fa8ebcdd8acc4f0
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View File

@ -0,0 +1,92 @@
fileFormatVersion: 2
guid: ffe28b30c5a6cf24298b352cb37c18b2
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: -1
wrapV: -1
wrapW: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName: base/main_majiang/abf0e2af8fb6daf78fa8ebcdd8acc4f0
assetBundleVariant:

View File

@ -88,5 +88,5 @@ TextureImporter:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName: base/main_majiang/d2fa434d27dc07bf09395dc32491060b
assetBundleName: base/main_majiang/abf0e2af8fb6daf78fa8ebcdd8acc4f0
assetBundleVariant:

View File

@ -88,5 +88,5 @@ TextureImporter:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName: base/main_majiang/d2fa434d27dc07bf09395dc32491060b
assetBundleName: base/main_majiang/abf0e2af8fb6daf78fa8ebcdd8acc4f0
assetBundleVariant:

View File

@ -88,5 +88,5 @@ TextureImporter:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName: base/main_majiang/d2fa434d27dc07bf09395dc32491060b
assetBundleName: base/main_majiang/abf0e2af8fb6daf78fa8ebcdd8acc4f0
assetBundleVariant:

View File

@ -88,5 +88,5 @@ TextureImporter:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName: base/main_majiang/d2fa434d27dc07bf09395dc32491060b
assetBundleName: base/main_majiang/abf0e2af8fb6daf78fa8ebcdd8acc4f0
assetBundleVariant:

View File

@ -3,5 +3,5 @@ guid: 326fa64ee0dd8b94aa86fa1978e56fa5
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName: base/main_majiang/d2fa434d27dc07bf09395dc32491060b
assetBundleName: base/main_majiang/abf0e2af8fb6daf78fa8ebcdd8acc4f0
assetBundleVariant: