游戏基本元素优化、完善游戏世界
This commit is contained in:
+61
-24
@@ -1,5 +1,7 @@
|
||||
package builtin
|
||||
|
||||
import "minotaur/game"
|
||||
|
||||
// NewPosition 创建一个新的Position对象。
|
||||
func NewPosition(x, y, z float64) *Position {
|
||||
return &Position{
|
||||
@@ -11,58 +13,93 @@ func NewPosition(x, y, z float64) *Position {
|
||||
|
||||
// Position 是一个具有位置信息的对象。
|
||||
type Position struct {
|
||||
x, y, z float64
|
||||
x, y, z float64
|
||||
positionChangeEventHandles []game.PositionChangeEventHandle
|
||||
}
|
||||
|
||||
// GetX 返回Position对象的X坐标。
|
||||
func (p *Position) GetX() float64 {
|
||||
return p.x
|
||||
func (slf *Position) GetX() float64 {
|
||||
return slf.x
|
||||
}
|
||||
|
||||
// GetY 返回Position对象的Y坐标。
|
||||
func (p *Position) GetY() float64 {
|
||||
return p.y
|
||||
func (slf *Position) GetY() float64 {
|
||||
return slf.y
|
||||
}
|
||||
|
||||
// GetZ 返回Position对象的Z坐标。
|
||||
func (p *Position) GetZ() float64 {
|
||||
return p.z
|
||||
func (slf *Position) GetZ() float64 {
|
||||
return slf.z
|
||||
}
|
||||
|
||||
// GetXY 返回Position对象的X和Y坐标。
|
||||
func (p *Position) GetXY() (float64, float64) {
|
||||
return p.x, p.y
|
||||
func (slf *Position) GetXY() (float64, float64) {
|
||||
return slf.x, slf.y
|
||||
}
|
||||
|
||||
// GetXYZ 返回Position对象的X、Y和Z坐标。
|
||||
func (p *Position) GetXYZ() (float64, float64, float64) {
|
||||
return p.x, p.y, p.z
|
||||
func (slf *Position) GetXYZ() (float64, float64, float64) {
|
||||
return slf.x, slf.y, slf.z
|
||||
}
|
||||
|
||||
// SetX 设置Position对象的X坐标。
|
||||
func (p *Position) SetX(x float64) {
|
||||
p.x = x
|
||||
func (slf *Position) SetX(x float64) {
|
||||
old := slf.Clone()
|
||||
defer slf.OnPositionChangeEvent(old, slf)
|
||||
slf.x = x
|
||||
}
|
||||
|
||||
// SetY 设置Position对象的Y坐标。
|
||||
func (p *Position) SetY(y float64) {
|
||||
p.y = y
|
||||
func (slf *Position) SetY(y float64) {
|
||||
old := slf.Clone()
|
||||
defer slf.OnPositionChangeEvent(old, slf)
|
||||
slf.y = y
|
||||
}
|
||||
|
||||
// SetZ 设置Position对象的Z坐标。
|
||||
func (p *Position) SetZ(z float64) {
|
||||
p.z = z
|
||||
func (slf *Position) SetZ(z float64) {
|
||||
old := slf.Clone()
|
||||
defer slf.OnPositionChangeEvent(old, slf)
|
||||
slf.z = z
|
||||
}
|
||||
|
||||
// SetXY 设置Position对象的X和Y坐标。
|
||||
func (p *Position) SetXY(x, y float64) {
|
||||
p.x = x
|
||||
p.y = y
|
||||
func (slf *Position) SetXY(x, y float64) {
|
||||
old := slf.Clone()
|
||||
defer slf.OnPositionChangeEvent(old, slf)
|
||||
slf.x = x
|
||||
slf.y = y
|
||||
}
|
||||
|
||||
// SetXYZ 设置Position对象的X、Y和Z坐标。
|
||||
func (p *Position) SetXYZ(x, y, z float64) {
|
||||
p.x = x
|
||||
p.y = y
|
||||
p.z = z
|
||||
func (slf *Position) SetXYZ(x, y, z float64) {
|
||||
old := slf.Clone()
|
||||
defer slf.OnPositionChangeEvent(old, slf)
|
||||
slf.x = x
|
||||
slf.y = y
|
||||
slf.z = z
|
||||
}
|
||||
|
||||
func (slf *Position) Clone() game.Position {
|
||||
return &Position{
|
||||
x: slf.x,
|
||||
y: slf.y,
|
||||
z: slf.z,
|
||||
}
|
||||
}
|
||||
|
||||
func (slf *Position) Compare(position game.Position) bool {
|
||||
return slf.x == position.GetX() && slf.y == position.GetY() && slf.z == position.GetZ()
|
||||
}
|
||||
|
||||
func (slf *Position) RegPositionChangeEvent(handle game.PositionChangeEventHandle) {
|
||||
slf.positionChangeEventHandles = append(slf.positionChangeEventHandles, handle)
|
||||
}
|
||||
|
||||
func (slf *Position) OnPositionChangeEvent(old, new game.Position) {
|
||||
if !old.Compare(new) {
|
||||
for _, handle := range slf.positionChangeEventHandles {
|
||||
handle(old, new)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user