代码拉取完成,页面将自动刷新
package main
import (
"strings"
"regexp"
"github.com/xiaonanln/goworld/engine/common"
"github.com/xiaonanln/goworld/engine/entity"
"github.com/xiaonanln/goworld/engine/gwlog"
)
// Avatar 对象代表一名玩家
type Avatar struct {
entity.Entity
}
func (a *Avatar) DescribeEntityType(desc *entity.EntityTypeDesc) {
desc.SetPersistent(true).SetUseAOI(true)
desc.DefineAttr("name", "Client", "Persistent")
desc.DefineAttr("chatroom", "Client")
}
// OnCreated 在Avatar对象创建后被调用
func (a *Avatar) OnCreated() {
a.Entity.OnCreated()
a.setDefaultAttrs()
}
// setDefaultAttrs 设置玩家的一些默认属性
func (a *Avatar) setDefaultAttrs() {
a.Attrs.SetDefaultStr("name", "noname")
a.SetClientFilterProp("chatroom", "1")
a.Attrs.SetStr("chatroom", "1")
}
// GetSpaceID 获得玩家的场景ID并发给调用者
func (a *Avatar) GetSpaceID(callerID common.EntityID) {
a.Call(callerID, "OnGetAvatarSpaceID", a.ID, a.Space.ID)
}
var spaceSep *regexp.Regexp = regexp.MustCompile("\\s")
// SendChat_Client 是用来发送聊天信息的客户端RPC
func (a *Avatar) SendChat_Client(text string) {
text = strings.TrimSpace(text)
if text[0] == '/' {
// this is a command
cmd := spaceSep.Split(text[1:], -1)
if cmd[0] == "join" {
a.enterRoom(cmd[1])
} else {
a.CallClient("ShowError", "无法识别的命令:"+cmd[0])
}
} else {
a.CallFilteredClients("chatroom", "=", a.GetStr("chatroom"), "OnRecvChat", a.GetStr("name"), text)
}
}
// enterRoom 进入一个聊天室,本质上就是设置Filter属性
func (a *Avatar) enterRoom(name string) {
gwlog.Debugf("%s enter room %s", a, name)
a.SetClientFilterProp("chatroom", name)
a.Attrs.SetStr("chatroom", name)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。