本文整理汇总了Golang中pulogic.ICreature.SetTile方法的典型用法代码示例。如果您正苦于以下问题:Golang ICreature.SetTile方法的具体用法?Golang ICreature.SetTile怎么用?Golang ICreature.SetTile使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pulogic.ICreature
的用法示例。
在下文中一共展示了ICreature.SetTile方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: internalCreatureTeleport
func (g *Game) internalCreatureTeleport(_creature pul.ICreature, _from pul.ITile, _to pul.ITile) (ret int) {
ret = RET_NOERROR
if _from == nil || _to == nil {
ret = RET_NOTPOSSIBLE
} else {
// Move creature object to destination tile
if ret = _from.RemoveCreature(_creature, true); ret == RET_NOTPOSSIBLE {
return
}
if ret = _to.AddCreature(_creature, false); ret == RET_NOTPOSSIBLE {
_from.AddCreature(_creature, false) // Something went wrong, put creature back on old tile
return
}
_creature.SetTile(_to)
// Tell creatures this creature has been teleported
g.mutexCreatureList.RLock()
defer g.mutexCreatureList.RUnlock()
for _, value := range g.Creatures {
if value != nil {
value.OnCreatureMove(_creature, _from, _to, true)
}
}
}
// No error, played succesfully teleported
if ret == RET_NOERROR {
ret = RET_PLAYERISTELEPORTED
}
return
}
示例2: OnCreatureMove
func (g *Game) OnCreatureMove(_creature pul.ICreature, _direction int) (ret int) {
ret = RET_NOTPOSSIBLE
if !CreatureCanMove(_creature) {
return
}
currentTile := _creature.GetTile()
destinationPosition := currentTile.GetPosition()
switch _direction {
case DIR_NORTH:
destinationPosition.Y -= 1
case DIR_SOUTH:
destinationPosition.Y += 1
case DIR_WEST:
destinationPosition.X -= 1
case DIR_EAST:
destinationPosition.X += 1
}
// Check if destination tile exists
destinationTile, ok := g_map.GetTileFromPosition(destinationPosition)
if !ok {
return
}
// Check if we can move to the destination tile
if ret = destinationTile.CheckMovement(_creature, _direction); ret == RET_NOTPOSSIBLE {
return
}
// Update position
_creature.SetTile(destinationTile)
// fmt.Printf("[%v] From (%v,%v) To (%v,%v)\n", _creature.GetName(), currentTile.Position.X, currentTile.Position.Y, destinationPosition.X, destinationPosition.Y)
// Tell creatures this creature has moved
g.mutexCreatureList.RLock()
defer g.mutexCreatureList.RUnlock()
for _, value := range g.Creatures {
if value != nil {
value.OnCreatureMove(_creature, currentTile, destinationTile, false)
}
}
// Move creature object to destination tile
if ret = currentTile.RemoveCreature(_creature, true); ret == RET_NOTPOSSIBLE {
return
}
if ret = destinationTile.AddCreature(_creature, true); ret == RET_NOTPOSSIBLE {
currentTile.AddCreature(_creature, false) // Something went wrong, put creature back on old tile
_creature.SetTile(currentTile)
return
}
// If ICreature is a player type we can check for wild encounter
g.checkForWildEncounter(_creature)
return
}