房间内玩家对象管理单独做进新模块netPlayer,为未来消息气泡和发表情做准备
This commit is contained in:
158
parts/netPlayer.lua
Normal file
158
parts/netPlayer.lua
Normal file
@@ -0,0 +1,158 @@
|
||||
local gc=love.graphics
|
||||
local ins,rem=table.insert,table.remove
|
||||
|
||||
local posLists={
|
||||
--1~5
|
||||
(function()
|
||||
local L={}
|
||||
for i=1,5 do
|
||||
L[i]={x=40,y=65+50*i,w=1000,h=46}
|
||||
end
|
||||
return L
|
||||
end)(),
|
||||
--6~17
|
||||
(function()
|
||||
local L={}
|
||||
for i=1,17 do
|
||||
L[i]={x=40,y=65+50*i,w=1000,h=46}
|
||||
end
|
||||
return L
|
||||
end)(),
|
||||
--18~31
|
||||
(function()
|
||||
local L={}
|
||||
for i=1,31 do
|
||||
L[i]={x=40,y=65+50*i,w=1000,h=46}
|
||||
end
|
||||
return L
|
||||
end)(),
|
||||
--32~49
|
||||
(function()
|
||||
local L={}
|
||||
for i=1,49 do
|
||||
L[i]={x=40,y=65+50*i,w=1000,h=46}
|
||||
end
|
||||
return L
|
||||
end)(),
|
||||
}
|
||||
local posList
|
||||
|
||||
local PLY=setmetatable({},{
|
||||
__index=function(self,uid)
|
||||
for _,p in next,self do
|
||||
if p.uid==uid then
|
||||
return p
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
local netPLY={list=PLY}
|
||||
|
||||
local function freshPosList()
|
||||
if #PLY<=5 then
|
||||
posList=posLists[1]
|
||||
elseif #PLY<=15 then
|
||||
posList=posLists[2]
|
||||
elseif #PLY<=30 then
|
||||
posList=posLists[3]
|
||||
end
|
||||
end
|
||||
|
||||
function netPLY.clear()
|
||||
while PLY[1]do rem(PLY)end
|
||||
end
|
||||
function netPLY.add(p)
|
||||
ins(PLY,p.uid==USER.uid and 1 or #PLY+1,p)
|
||||
p.x,p.y,p.w,p.h=640,2600,0,0
|
||||
freshPosList()
|
||||
end
|
||||
function netPLY.remove(sid)
|
||||
for i=1,#PLY do
|
||||
if PLY[i].sid==sid then
|
||||
rem(PLY,i)
|
||||
break
|
||||
end
|
||||
end
|
||||
freshPosList()
|
||||
end
|
||||
|
||||
function netPLY.getCount()return #PLY end
|
||||
function netPLY.getUID(i)return PLY[i].uid end
|
||||
function netPLY.getUsername(uid)return PLY[uid].username end
|
||||
function netPLY.getSID(i)return PLY[i].sid end
|
||||
function netPLY.getReady(i)return PLY[i].ready end
|
||||
function netPLY.getConfig(i)return PLY[i].config end
|
||||
|
||||
function netPLY.setPlayerObj(uid,p)
|
||||
PLY[uid].p=p
|
||||
end
|
||||
function netPLY.setConf(uid,config)
|
||||
if tostring(USER.uid)~=uid then
|
||||
PLY[uid].config=config
|
||||
end
|
||||
end
|
||||
function netPLY.setReady(uid,ready)
|
||||
for i,p in next,PLY do
|
||||
if p.uid==uid then
|
||||
if p.ready~=ready then
|
||||
p.ready=ready
|
||||
if not ready then NET.allReady=false end
|
||||
SFX.play('spin_0',.6)
|
||||
if i==1 then
|
||||
NET.unlock('ready')
|
||||
elseif not PLY[1].ready then
|
||||
for j=2,#PLY do
|
||||
if not PLY[j].ready then
|
||||
return
|
||||
end
|
||||
end
|
||||
SFX.play('blip_2',.5)
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
function netPLY.resetReady()
|
||||
for i=1,#PLY do
|
||||
PLY[i].ready=false
|
||||
end
|
||||
end
|
||||
|
||||
function netPLY.update(dt)
|
||||
for i=1,#PLY do
|
||||
local p=PLY[i]
|
||||
local t=posList[i]
|
||||
p.x=p.x*.9+t.x*.1
|
||||
p.y=p.y*.9+t.y*.1
|
||||
p.w=p.w*.9+t.w*.1
|
||||
p.h=p.h*.9+t.h*.1
|
||||
end
|
||||
end
|
||||
|
||||
function netPLY.draw()
|
||||
for i=1,#PLY do
|
||||
local p=PLY[i]
|
||||
gc.translate(p.x,p.y)
|
||||
--Rectangle
|
||||
gc.setColor(COLOR[p.ready and'G'or'Z'])
|
||||
gc.setLineWidth(2)
|
||||
gc.rectangle('line',0,0,p.w,p.h)
|
||||
|
||||
--UID
|
||||
setFont(40)
|
||||
gc.setColor(.5,.5,.5)
|
||||
gc.print("#"..p.uid,10,-5)
|
||||
|
||||
--Avatar
|
||||
gc.setColor(1,1,1)
|
||||
gc.draw(USERS.getAvatar(p.uid),160,3,nil,.3125)
|
||||
|
||||
--Username
|
||||
gc.print(p.username,210,-5)
|
||||
gc.translate(-p.x,-p.y)
|
||||
end
|
||||
end
|
||||
|
||||
return netPLY
|
||||
Reference in New Issue
Block a user