aozhiwei bf985f9c81 1
2023-09-16 11:49:42 +08:00

90 lines
1.6 KiB
Go

package room
import (
"q5"
"cs"
"github.com/golang/protobuf/proto"
)
type team struct {
room *room
teamId int32
teamUuid string
members q5.ListHead
}
func (this *team) init(room *room, teamId int32, teamUuid string) {
this.room = room
this.teamId = teamId
this.members.Init(nil)
this.teamUuid = teamUuid
}
func (this *team) unInit() {
this.members.ForEach(
func (data interface{}) bool {
m := data.(*member)
m.unInit()
return true
})
this.room = nil
}
func (this *team) fillMFTeam(pb *cs.MFTeam) {
pb.TeamId = proto.Int32(this.teamId)
pb.TeamUuid = proto.String(this.teamUuid)
q5.NewSlice(&pb.Members, 0, 4)
this.members.ForEach(
func (data interface{}) bool {
m := data.(*member)
pbM := &cs.MFMember{}
m.fillMFMember(pbM)
q5.AppendSlice(&pb.Members, pbM)
return true
})
}
func (this *team) addMember(m *member) {
m.team = this
this.members.AddTail(&m.teamEntry)
}
func (this *team) getMemberNum() int32 {
return this.members.Size()
}
func (this *team) hasAlreadMember() bool {
ok := false
this.members.ForEach(
func (data interface{}) bool {
m := data.(*member)
if m.state == MEMBER_READY_STATE {
ok = true
return false
}
return true
})
return ok
}
func (this *team) getOwnerCandidate() *member {
var ownerCandidate *member
this.members.ForEach(
func (data interface{}) bool {
m := data.(*member)
if m.hum.IsOnline() {
ownerCandidate = m
return false
}
return true
})
return ownerCandidate
}
func newTeam(room *room, teamId int32, teamUuid string, leader *member) *team {
t := new(team)
t.init(room, teamId, teamUuid)
t.addMember(leader)
return t
}