Documentation ¶
Overview ¶
Package game 提供了通用游戏相关的接口和一组内置的实现。
主要特性:
- 包 builtin 内提供了大量的常用游戏功能的内置实现,包括房间、状态机等。
- 包 poker 内提供了用于处理扑克牌游戏的函数和数据结构。
Index ¶
- type AOI2D
- type AOIEntity2D
- type Actor
- type ActorAnnihilationEventHandle
- type ActorGeneratedEventHandle
- type ActorOwnerChangeEventHandle
- type AttrChangeEventHandle
- type Attrs
- type EntityJoinVisionEventHandle
- type EntityLeaveVisionEventHandle
- type FSM
- type FSMState
- type FSMStateEnterHandle
- type FSMStateExitHandle
- type FSMStateUpdateHandle
- type Gameplay
- type GameplayOver
- type GameplayOverEventHandle
- type GameplayReleaseEventHandle
- type GameplayStartEventHandle
- type GameplayTime
- type GameplayTimeChangeEventHandle
- type Item
- type ItemContainer
- type ItemContainerMember
- type Player
- type PlayerJoinRoomEventHandle
- type PlayerJoinWorldEventHandle
- type PlayerKickedOutEventHandle
- type PlayerLeaveRoomEventHandle
- type PlayerLeaveWorldEventHandle
- type Position2D
- type Position2DSet
- type Position3D
- type RankChangeEventHandle
- type RankClearBeforeEventHandle
- type RankingList
- type Room
- type RoomSeat
- type Terrain2D
- type Terrain2DBlock
- type World
- type WorldReleaseEventHandle
- type WorldResetEventHandle
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AOI2D ¶
type AOI2D interface { // AddEntity 添加对象 AddEntity(entity AOIEntity2D) // DeleteEntity 移除对象 DeleteEntity(entity AOIEntity2D) // Refresh 刷新对象焦点 Refresh(entity AOIEntity2D) // GetFocus 获取对象焦点列表 GetFocus(guid int64) map[int64]AOIEntity2D // SetSize 设置总区域大小 // - 将会导致区域的重新划分 SetSize(width, height int) // SetAreaSize 设置区域大小 // - 将会导致区域的重新划分 SetAreaSize(width, height int) // RegEntityJoinVisionEvent 在新对象进入视野时将会立刻执行被注册的事件处理函数 RegEntityJoinVisionEvent(handle EntityJoinVisionEventHandle) OnEntityJoinVisionEvent(entity, target AOIEntity2D) // RegEntityLeaveVisionEvent 在对象离开视野时将会立刻执行被注册的事件处理函数 RegEntityLeaveVisionEvent(handle EntityLeaveVisionEventHandle) OnEntityLeaveVisionEvent(entity, target AOIEntity2D) }
AOI2D 基于2D定义的AOI功能接口
- AOI(Area Of Interest)翻译过来叫感兴趣的区域,是大型多人在线的游戏服务器中一个非常重要的基础模块,用于游戏对象在场景中的视野管理
- 透过 AOI 系统可以在其他玩家或怪物进入视野时得到感知,从而进行相应处理
- 内置实现:builtin.AOI2D
- 构建函数:builtin.NewAOI2D
type AOIEntity2D ¶
type AOIEntity2D interface { Actor Position2D // GetVision 获取视距 GetVision() float64 }
AOIEntity2D 基于2D定义的AOI对象功能接口
- AOI 对象提供了 AOI 系统中常用的属性,诸如位置坐标和视野范围等
type Actor ¶
type Actor interface { // SetGuid 设置对象的唯一标识符 // - 需要注意的是该函数不应该主动执行,否则可能产生意想不到的情况 SetGuid(guid int64) // GetGuid 获取对象的唯一标识符 GetGuid() int64 }
Actor 表示游戏中的可以放到游戏场景中的游戏对象的基本类型
- 需要注意 Actor 不等于 Player
- 在 Minotaur 中,每个网络连接可以表示一个 Player,而每个玩家可以拥有多个 Actor
- Actor 并非 Player 独有,场景中也可包含各类无主的 Actor
- 内置实现:builtin.Actor
- 构建函数:builtin.NewActor
type ActorAnnihilationEventHandle ¶
type ActorAnnihilationEventHandle[ID comparable, P Player[ID]] func(world World[ID, P], actor Actor)
type ActorGeneratedEventHandle ¶
type ActorGeneratedEventHandle[ID comparable, P Player[ID]] func(world World[ID, P], actor Actor)
type ActorOwnerChangeEventHandle ¶
type ActorOwnerChangeEventHandle[ID comparable, P Player[ID]] func(world World[ID, P], actor Actor, old, new ID, isolated bool)
type AttrChangeEventHandle ¶
type Attrs ¶
type Attrs interface { SetAttrInt(id int, value int) SetAttrInt8(id int, value int8) SetAttrInt16(id int, value int16) SetAttrInt32(id int, value int32) SetAttrInt64(id int, value int64) SetAttrUint(id int, value uint) SetAttrUint8(id int, value uint8) SetAttrUint16(id int, value uint16) SetAttrUint32(id int, value uint32) SetAttrUint64(id int, value uint64) SetAttrFloat32(id int, value float32) SetAttrFloat64(id int, value float64) SetAttrHugeInt(id int, value *huge.Int) GetAttrInt(id int) int GetAttrInt8(id int) int8 GetAttrInt16(id int) int16 GetAttrInt32(id int) int32 GetAttrInt64(id int) int64 GetAttrUint(id int) uint GetAttrUint8(id int) uint8 GetAttrUint16(id int) uint16 GetAttrUint32(id int) uint32 GetAttrUint64(id int) uint64 GetAttrFloat32(id int) float32 GetAttrFloat64(id int) float64 GetAttrHugeInt(id int) *huge.Int ChangeAttrInt(id int, value int) ChangeAttrInt8(id int, value int8) ChangeAttrInt16(id int, value int16) ChangeAttrInt32(id int, value int32) ChangeAttrInt64(id int, value int64) ChangeAttrUint(id int, value uint) ChangeAttrUint8(id int, value uint8) ChangeAttrUint16(id int, value uint16) ChangeAttrUint32(id int, value uint32) ChangeAttrUint64(id int, value uint64) ChangeAttrFloat32(id int, value float32) ChangeAttrFloat64(id int, value float64) ChangeAttrHugeInt(id int, value *huge.Int) // RegAttrChangeEvent 任一属性发生变化将立即执行被注册的事件处理函数 RegAttrChangeEvent(handle AttrChangeEventHandle) OnAttrChangeEvent(id int) // RegAttrIdChangeEvent 特定属性发生变化将立即执行被注册的事件处理函数 RegAttrIdChangeEvent(id int, handle AttrChangeEventHandle) OnAttrIdChangeEvent(id int) }
Attrs 游戏属性接口定义
- 属性通常为直接读取配置,是否合理暂不清晰,目前不推荐使用
type EntityJoinVisionEventHandle ¶
type EntityJoinVisionEventHandle func(entity, target AOIEntity2D)
type EntityLeaveVisionEventHandle ¶
type EntityLeaveVisionEventHandle func(entity, target AOIEntity2D)
type FSM ¶
type FSM[State comparable, Data comparable] interface { // Update 执行当前状态行为 Update() // Register 注册一个状态到当前状态机中 Register(state FSMState[State, Data]) // Unregister 取消一个状态的注册 Unregister(state State) // HasState 检查是否某状态已注册 HasState(state State) bool // Change 改变当前状态为输入的状态 Change(state State) }
FSM 有限状态机接口定义
- 有限状态机(Finite State Machine,简称FSM),它将系统看做一系列状态,而每个状态都有其对应的行为和转换条件
- 在游戏中,可以将各种游戏对象和游戏系统抽象为状态和转移,使用有限状态机来描述它们之间的关系,来实现游戏的逻辑和行为
使用场景
- 角色行为控制:游戏角色的行为通常会根据不同状态来变化,例如走、跑、跳、攻击等。通过使用有限状态机来描述角色的状态和状态之间的转移,可以实现角色行为的流畅切换和控制
- NPC行为控制:游戏中的 NPC 通常需要有一定的 AI 行为,例如巡逻、追击、攻击等。通过使用有限状态机来描述 NPC 的行为状态和转移条件,可以实现 NPC 行为的智能控制
- 游戏流程控制:游戏的各个流程可以看做状态,例如登录、主界面、游戏场景等。通过使用有限状态机来描述游戏的流程状态和转移条件,可以实现游戏流程的控制和管理
在服务端中使用 FSM 可以使游戏状态管理更加清晰和简单,清晰各状态职责
- 内置实现:builtin.FSM
- 构建函数:builtin.NewFSM
type FSMState ¶
type FSMState[State comparable, Data any] interface { // GetState 获取当前状态 GetState() State // Enter 状态开始行为 Enter(data Data) // Update 当前状态行为 Update(data Data) // Exit 状态退出行为 Exit(data Data) }
FSMState 有限状态机状态接口定义
- 描述了 FSM 中的状态行为
需要一个可比较的状态类型及相应的数据类型,数据类型在无需使用时支持传入 nil
- 内置实现:builtin.FSMState
- 构建函数:builtin.NewFSMState
type FSMStateEnterHandle ¶
type FSMStateEnterHandle[Data any] func(data Data)
type FSMStateExitHandle ¶
type FSMStateExitHandle[Data any] func(data Data)
type FSMStateUpdateHandle ¶
type FSMStateUpdateHandle[Data any] func(data Data)
type Gameplay ¶
type Gameplay interface { // GameStart 游戏玩法开始 GameStart(handle func() error) error // GetTime 获取游戏玩法的时间偏移 GetTime() *offset.Time // GetCurrentTime 获取玩法当前存在偏移的时间 GetCurrentTime() time.Time // SetTimeOffset 设置玩法时间偏移 SetTimeOffset(offset time.Duration) // Release 释放游戏玩法资源 Release() // RegGameplayStartEvent 在游戏玩法开始时将立即执行被注册的事件处理函数 RegGameplayStartEvent(handle GameplayStartEventHandle) OnGameplayStartEvent() // RegGameplayTimeChangeEvent 游戏玩法的时间被改变(非自然流逝)时将立刻执行被注册的事件处理函数 RegGameplayTimeChangeEvent(handle GameplayTimeChangeEventHandle) OnGameplayTimeChangeEvent() // RegGameplayReleaseEvent 游戏玩法资源被释放前将立即执行被注册的事件处理函数 RegGameplayReleaseEvent(handle GameplayReleaseEventHandle) OnGameplayReleaseEvent() }
Gameplay 游戏玩法
type GameplayOver ¶
type GameplayOver interface { // GameOver 游戏玩法结束 GameOver() // RegGameplayOverEvent 游戏玩法结束时将立即调用被注册的事件处理函数 RegGameplayOverEvent(handle GameplayOverEventHandle) OnGameplayOverEvent() }
type GameplayOverEventHandle ¶
type GameplayOverEventHandle func()
type GameplayReleaseEventHandle ¶
type GameplayReleaseEventHandle func()
type GameplayTime ¶
type GameplayTime interface { Gameplay GameplayOver // GetEndTime 获取游戏结束时间 GetEndTime() time.Time // SetEndTime 设置游戏结束时间 SetEndTime(t time.Time) // ChangeEndTime 通过相对时间的方式改变游戏结束时间 ChangeEndTime(d time.Duration) // Release 释放资源 Release() }
GameplayTime 为游戏玩法添加游戏时长的特性
type Item ¶
type Item[ID comparable] interface { // GetID 获取物品ID GetID() ID // IsSame 与另一个物品比较是否相同 IsSame(item Item[ID]) bool }
type ItemContainer ¶
type ItemContainer[ItemID comparable, I Item[ItemID]] interface { // GetSize 获取容器物品非堆叠数量 GetSize() int // GetSizeLimit 获取容器物品非堆叠数量上限 GetSizeLimit() int // SetExpandSize 设置拓展非堆叠数量上限 SetExpandSize(size int) // GetItem 获取物品 GetItem(guid int64) (ItemContainerMember[ItemID, I], error) // GetItems 获取所有非空物品 // - 物品顺序为容器内顺序 // - 空的容器空间将被忽略 GetItems() []ItemContainerMember[ItemID, I] // GetItemsFull 获取所有物品 // - 物品顺序为容器内顺序 // - 空的容器空间将被设置为nil // - 当容器非堆叠物品上限为0时,最后一个非空物品之后的所有空物品都将被忽略 // - 当容器非堆叠物品未达到上限时,其余空间将使用nil填充 GetItemsFull() []ItemContainerMember[ItemID, I] // GetItemsMap 获取所有物品 GetItemsMap() map[int64]ItemContainerMember[ItemID, I] // ExistItem 物品是否存在 ExistItem(guid int64) bool // ExistItemWithID 是否存在特定ID的物品 ExistItemWithID(id ItemID) bool // AddItem 添加物品 AddItem(item I, count *huge.Int) (guid int64, err error) // DeductItem 扣除特定物品数量,当数量为0将被移除,数量不足时将不进行任何改变 DeductItem(guid int64, count *huge.Int) error // TransferTo 转移特定物品到另一个容器中 TransferTo(guid int64, count *huge.Int, target ItemContainer[ItemID, I]) error // CheckAllowAdd 检查是否允许添加特定物品 CheckAllowAdd(item I, count *huge.Int) error // CheckDeductItem 检查是否允许扣除特定物品 CheckDeductItem(guid int64, count *huge.Int) error // Remove 移除特定guid的物品 Remove(guid int64) // RemoveWithID 移除所有物品ID匹配的物品 RemoveWithID(id ItemID) // Clear 清空物品容器 Clear() }
ItemContainer 物品容器
type ItemContainerMember ¶
type ItemContainerMember[ItemID comparable, I Item[ItemID]] interface { // GetID 获取物品ID GetID() ItemID // GetGUID 获取物品GUID GetGUID() int64 // GetCount 获取物品数量 GetCount() *huge.Int // GetItem 获取物品 GetItem() I }
ItemContainerMember 物品容器成员信息
type Player ¶
type Player[ID comparable] interface { // GetID 获取玩家ID GetID() ID // UseConn 指定连接 UseConn(conn *server.Conn) // Close 关闭玩家并且释放其资源 Close() }
Player 玩家
type PlayerJoinRoomEventHandle ¶
type PlayerJoinRoomEventHandle[ID comparable, P Player[ID]] func(room Room[ID, P], player P)
type PlayerJoinWorldEventHandle ¶
type PlayerJoinWorldEventHandle[ID comparable, P Player[ID]] func(world World[ID, P], player P)
type PlayerKickedOutEventHandle ¶
type PlayerKickedOutEventHandle[ID comparable, P Player[ID]] func(room Room[ID, P], executor, kicked ID, reason string)
type PlayerLeaveRoomEventHandle ¶
type PlayerLeaveRoomEventHandle[ID comparable, P Player[ID]] func(room Room[ID, P], player P)
type PlayerLeaveWorldEventHandle ¶
type PlayerLeaveWorldEventHandle[ID comparable, P Player[ID]] func(world World[ID, P], player P)
type Position2D ¶
type Position2D interface { // GetPosition 获取对象位置 GetPosition() (x, y float64) }
Position2D 2D位置接口定义
type Position2DSet ¶
type Position2DSet interface {
SetPosition(x, y float64)
}
Position2DSet 2D位置设置接口定义
type Position3D ¶
type Position3D interface {
GetPosition() (x, y, z float64)
}
type RankChangeEventHandle ¶
type RankChangeEventHandle[CompetitorID comparable, Score generic.Ordered] func(rankingList RankingList[CompetitorID, Score], competitorId CompetitorID, oldRank, newRank int, oldScore, newScore Score)
type RankClearBeforeEventHandle ¶
type RankClearBeforeEventHandle[CompetitorID comparable, Score generic.Ordered] func(rankingList RankingList[CompetitorID, Score])
type RankingList ¶
type RankingList[CompetitorID comparable, Score generic.Ordered] interface { // Competitor 声明排行榜竞争者 // - 如果竞争者存在的情况下,会更新已有成绩,否则新增竞争者 Competitor(competitorId CompetitorID, score Score) // RemoveCompetitor 删除特定竞争者 RemoveCompetitor(competitorId CompetitorID) // Size 获取竞争者数量 Size() int // GetRank 获取竞争者排名 // - 排名从 0 开始 GetRank(competitorId CompetitorID) (int, error) // GetCompetitor 获取特定排名的竞争者 GetCompetitor(rank int) (CompetitorID, error) // GetCompetitorWithRange 获取第start名到第end名竞争者 GetCompetitorWithRange(start, end int) ([]CompetitorID, error) // GetScore 获取竞争者成绩 GetScore(competitorId CompetitorID) (Score, error) // GetAllCompetitor 获取所有竞争者ID // - 结果为名次有序的 GetAllCompetitor() []CompetitorID // Clear 清空排行榜 Clear() // RegRankChangeEvent 排名改变时将立即执行注册的事件处理函数 // - 排名为-1时表示未上榜 RegRankChangeEvent(handle RankChangeEventHandle[CompetitorID, Score]) OnRankChangeEvent(competitorId CompetitorID, oldRank, newRank int, oldScore, newScore Score) // RegRankClearBeforeEvent 在排行榜被清空前执行被注册的事件处理函数 RegRankClearBeforeEvent(handle RankClearBeforeEventHandle[CompetitorID, Score]) OnRankClearBeforeEvent() }
RankingList 排行榜
type Room ¶
type Room[PlayerID comparable, P Player[PlayerID]] interface { // GetGuid 获取房间的唯一标识符 GetGuid() int64 // GetPlayerLimit 获取玩家人数上限 GetPlayerLimit() int // GetPlayer 根据玩家id获取玩家 GetPlayer(id PlayerID) P // GetPlayers 获取房间中的所有玩家 GetPlayers() hash.MapReadonly[PlayerID, P] // GetPlayerCount 获取玩家数量 GetPlayerCount() int // IsExistPlayer 检查房间中是否存在特定玩家 IsExistPlayer(id PlayerID) bool // IsOwner 检查玩家是否是房主 IsOwner(id PlayerID) bool // ChangeOwner 设置玩家为房主 ChangeOwner(id PlayerID) // Join 使特定玩家加入房间 Join(player P) error // Leave 使特定玩家离开房间 Leave(id PlayerID) // KickOut 将特定玩家踢出房间 KickOut(id, target PlayerID, reason string) error // RegPlayerJoinRoomEvent 玩家进入房间时将立即执行被注册的事件处理函数 RegPlayerJoinRoomEvent(handle PlayerJoinRoomEventHandle[PlayerID, P]) OnPlayerJoinRoomEvent(player P) // RegPlayerLeaveRoomEvent 玩家离开房间时将立即执行被注册的事件处理函数 RegPlayerLeaveRoomEvent(handle PlayerLeaveRoomEventHandle[PlayerID, P]) OnPlayerLeaveRoomEvent(player P) // RegPlayerKickedOutEvent 当玩家被踢出游戏时将立即执行被注册的事件处理函数 RegPlayerKickedOutEvent(handle PlayerKickedOutEventHandle[PlayerID, P]) OnPlayerKickedOutEvent(executor, kicked PlayerID, reason string) }
Room 房间类似于简版的游戏世界(World),不过没有游戏实体
type RoomSeat ¶
type RoomSeat[PlayerID comparable, P Player[PlayerID]] interface { Room[PlayerID, P] // AddSeat 将玩家添加到座位号中 AddSeat(id PlayerID) // AddSeatWithAssign 将玩家添加到座位号中,并分配特定的座位号 AddSeatWithAssign(id PlayerID, seat int) // RemovePlayerSeat 移除玩家的座位号 RemovePlayerSeat(id PlayerID) // RemoveSeat 移除特定座位号 RemoveSeat(seat int) // SetSeat 设置玩家座位号,当玩家没有座位号时,将会返回错误信息 // - 如果座位号有其他玩家,他们的位置将互换 SetSeat(id PlayerID, seat int) error // GetSeat 获取玩家座位号 GetSeat(id PlayerID) (int, error) // GetPlayerIDWithSeat 根据座位号获取玩家ID GetPlayerIDWithSeat(seat int) (PlayerID, error) // GetSeatInfo 获取座位信息,空缺的位置将为空 GetSeatInfo() []*PlayerID // GetSeatInfoMap 以map的方式获取座位号 GetSeatInfoMap() map[int]PlayerID // GetSeatInfoMapVacancy 以map的方式获取座位号,空缺的位置将被保留为nil GetSeatInfoMapVacancy() map[int]*PlayerID // GetSeatInfoWithPlayerIDMap 获取座位信息,将以玩家ID作为key GetSeatInfoWithPlayerIDMap() map[PlayerID]int // GetFirstSeat 获取第一个非空缺座位号,不存在时将返回-1 GetFirstSeat() int // GetNextSeat 获取下一个座位号,空缺的位置将会被跳过 // - 超出范围将返回-1 // - 当没有下一个座位号时将始终返回本身 GetNextSeat(seat int) int // GetNextSeatVacancy 获取下一个座位号,空缺的位置将被保留 // - 超出范围将返回-1 // - 当没有下一个座位号时将始终返回本身 GetNextSeatVacancy(seat int) int }
RoomSeat 带有座位号的房间实现
type Terrain2D ¶
type Terrain2D interface { GetBlock(x, y int) Terrain2DBlock GetBlocks() [][]Terrain2DBlock GetWidth() int GetHeight() int }
Terrain2D 地形
type Terrain2DBlock ¶
type Terrain2DBlock interface { // GetTerrain 获取归属的地形 GetTerrain() Terrain2D // GetCost 获取移动消耗 GetCost() float64 }
Terrain2DBlock 地形块
type World ¶
type World[PlayerID comparable, P Player[PlayerID]] interface { // GetGuid 获取世界的唯一标识符 GetGuid() int64 // GetPlayerLimit 获取玩家人数上限 GetPlayerLimit() int // GetPlayer 根据玩家id获取玩家 GetPlayer(id PlayerID) P // GetPlayers 获取世界中的所有玩家 GetPlayers() hash.MapReadonly[PlayerID, P] // GetActor 根据唯一标识符获取世界中的游戏对象 GetActor(guid int64) Actor // GetActors 获取世界中的所有游戏对象 GetActors() hash.MapReadonly[int64, Actor] // GetPlayerActor 获取游戏世界中归属特定玩家的特定游戏对象 GetPlayerActor(id PlayerID, guid int64) Actor // GetPlayerActors 获取游戏世界中归属特定玩家的所有游戏对象 GetPlayerActors(id PlayerID) hash.MapReadonly[int64, Actor] // IsExistPlayer 检查游戏世界中是否存在特定玩家 IsExistPlayer(id PlayerID) bool // IsExistActor 检查游戏世界中是否存在特定游戏对象 IsExistActor(guid int64) bool // IsOwner 检查游戏世界中的特定游戏对象是否归属特定玩家 IsOwner(id PlayerID, guid int64) bool // Join 使特定玩家加入游戏世界 Join(player P) error // Leave 使特定玩家离开游戏世界 Leave(id PlayerID) // AddActor 添加游戏对象 AddActor(actor Actor) // RemoveActor 移除游戏对象 RemoveActor(guid int64) // SetActorOwner 设置游戏对象归属玩家 SetActorOwner(guid int64, id PlayerID) // RemoveActorOwner 移除游戏对象归属,置为无主的 RemoveActorOwner(guid int64) // Reset 重置世界资源 Reset() // Release 释放世界资源,释放后世界将不可用 Release() // RegWorldResetEvent 世界被重置后将立即执行被注册的事件处理函数 RegWorldResetEvent(handle WorldResetEventHandle[PlayerID, P]) OnWorldResetEvent() // RegWorldReleaseEvent 世界被释放前将立即执行被注册的事件处理函数,此刻世界仍然可用 RegWorldReleaseEvent(handle WorldReleaseEventHandle[PlayerID, P]) OnWorldReleaseEvent() // RegPlayerJoinWorldEvent 玩家进入世界时将立即执行被注册的事件处理函数 RegPlayerJoinWorldEvent(handle PlayerJoinWorldEventHandle[PlayerID, P]) OnPlayerJoinWorldEvent(player P) // RegPlayerLeaveWorldEvent 玩家离开世界时将立即执行被注册的事件处理函数 RegPlayerLeaveWorldEvent(handle PlayerLeaveWorldEventHandle[PlayerID, P]) OnPlayerLeaveWorldEvent(player P) // RegActorGeneratedEvent 游戏世界中的游戏对象生成完成时将立即执行被注册的事件处理函数 RegActorGeneratedEvent(handle ActorGeneratedEventHandle[PlayerID, P]) OnActorGeneratedEvent(actor Actor) // RegActorAnnihilationEvent 游戏世界中的游戏对象被移除前执行被注册的事件处理函数 RegActorAnnihilationEvent(handle ActorAnnihilationEventHandle[PlayerID, P]) OnActorAnnihilationEvent(actor Actor) // RegActorOwnerChangeEvent 游戏对象的归属被改变时立刻执行被注册的事件处理函数 RegActorOwnerChangeEvent(handle ActorOwnerChangeEventHandle[PlayerID, P]) OnActorOwnerChangeEvent(actor Actor, old, new PlayerID, isolated bool) }
World 游戏世界接口定义
type WorldReleaseEventHandle ¶
type WorldReleaseEventHandle[ID comparable, P Player[ID]] func(world World[ID, P])
type WorldResetEventHandle ¶
type WorldResetEventHandle[ID comparable, P Player[ID]] func(world World[ID, P])
Source Files ¶
- actor.go
- aoi2d.go
- aoi2d_entity.go
- attrs.go
- doc.go
- fsm.go
- fsm_state.go
- gameplay.go
- gameplay_over.go
- gameplay_time.go
- item.go
- item_container.go
- item_container_member.go
- player.go
- position2d.go
- position2d_set.go
- position3d.go
- ranking_list.go
- room.go
- room_seat.go
- terrain_2d.go
- terrain_2d_block.go
- world.go
Click to show internal directories.
Click to hide internal directories.