component

package
v0.0.13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 12, 2023 License: MIT Imports: 1 Imported by: 0

Documentation

Overview

Package component 定义了通用组件的接口

  • lockstep.go:帧同步组件接口定义
  • lockstep_client.go:帧同步组件客户端接口定义

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Lockstep

type Lockstep[ClientID comparable, Command any] interface {
	// JoinClient 加入客户端
	JoinClient(client LockstepClient[ClientID])
	// JoinClientWithFrame 加入客户端,并且指定从特定帧开始
	JoinClientWithFrame(client LockstepClient[ClientID], frameIndex int)
	// LeaveClient 离开客户端
	LeaveClient(clientId ClientID)
	// StartBroadcast 开始广播
	StartBroadcast()
	// StopBroadcast 停止广播
	StopBroadcast()
	// AddCommand 增加指令
	AddCommand(command Command)
	// GetCurrentFrame 获取当前帧
	GetCurrentFrame() int
	// GetClientCurrentFrame 获取客户端当前帧
	GetClientCurrentFrame(clientId ClientID) int
	// GetFrameLimit 获取帧上限
	GetFrameLimit() int
	// GetFrames 获取所有帧数据
	GetFrames() [][]Command

	// RegLockstepStoppedEvent 当停止广播时将立即执行被注册的事件处理函数
	RegLockstepStoppedEvent(handle LockstepStoppedEventHandle[ClientID, Command])
	OnLockstepStoppedEvent()
}

Lockstep 定义了帧同步组件的接口,用于处理客户端之间的同步操作。 每个客户端需要拥有可比较的ID,同时需要定义帧数据的数据格式。

  • ClientID:客户端ID类型
  • Command:帧数据类型

客户端ID类型通常为玩家ID类型,即通常将玩家作为帧同步客户端使用。

  • 内置实现:components.Lockstep
  • 构建函数:components.NewLockstep

type LockstepClient

type LockstepClient[ID comparable] interface {
	// GetID 用户玩家ID
	GetID() ID
	// Send 发送数据包
	//   - messageType: websocket模式中指定消息类型
	Send(packet []byte, messageType ...int)
}

LockstepClient 帧同步客户端接口定义

  • 客户端应该具备ID及写入数据包的实现

type LockstepStoppedEventHandle

type LockstepStoppedEventHandle[ClientID comparable, Command any] func(lockstep Lockstep[ClientID, Command])

LockstepStoppedEventHandle 帧同步停止广播事件处理函数

type Moving2D

type Moving2D interface {
	// MoveTo 设置对象移动至特定位置
	MoveTo(entity Moving2DEntity, x float64, y float64)
	// StopMove 终止特定对象的移动
	StopMove(guid int64)

	// RegPosition2DChangeEvent 对象位置改变时将立即执行被注册的事件处理函数
	RegPosition2DChangeEvent(handle Position2DChangeEventHandle)
	OnPosition2DChangeEvent(entity Moving2DEntity, oldX, oldY float64)

	// RegPosition2DDestinationEvent 对象抵达终点时将立即执行被注册的事件处理函数
	RegPosition2DDestinationEvent(handle Position2DDestinationEventHandle)
	OnPosition2DDestinationEvent(entity Moving2DEntity)
}

Moving2D 2D移动功能接口定义

type Moving2DEntity

type Moving2DEntity interface {
	game.Actor
	game.Position2D
	game.Position2DSet

	// GetSpeed 获取移动速度
	GetSpeed() float64
}

Moving2DEntity 2D移动对象接口定义

type Position2DChangeEventHandle

type Position2DChangeEventHandle func(moving Moving2D, entity Moving2DEntity, oldX, oldY float64)

type Position2DDestinationEventHandle

type Position2DDestinationEventHandle func(moving Moving2D, entity Moving2DEntity)

type Position2DStopMoveEventHandle added in v0.0.4

type Position2DStopMoveEventHandle func(moving Moving2D, entity Moving2DEntity)

Directories

Path Synopsis
Package components 通用组件的内置实现
Package components 通用组件的内置实现

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL