Пример #1
0
/* Makes a boulder trap that throws a boulder from the nearest wall
 * in the given direction */
func NewBoulderTrap(g interfaces.Game, wallDir interfaces.Direction) *Entity {
	me := newBasicTrigger(g)
	me.SetSubtype(interfaces.ENTITY_TRIGGER_SUBTYPE_BOULDER_TRAP)
	me.SetName("Boulder trap " + strconv.Itoa(me.GetEntityId()) +
		" from " + wallDir.Name() + " wall")

	me.TroddenFunction = func(by interfaces.Entity) {
		if by.IsTangible() == false || me.IsDead() {
			return
		}

		x, y := wallDir.XYDelta()
		boulderDir := wallDir.Opposite()

		boardId, boulderX, boulderY := me.GetPosition()
		for me.Game.IsWall(boardId, boulderX, boulderY) == false {
			boulderX += x
			boulderY += y
		}
		boulderX -= x
		boulderY -= y

		boulder := NewBoulder(me.Game, boulderDir)
		me.Game.PlaceAtNearestTile(boulder, boardId, boulderX, boulderY)
		me.Game.AddEntity(boulder)

		me.Die()
		sprungTrap := NewSprungTrap(g)
		sprungTrap.SetPosition(me.GetPosition())
		me.Game.AddEntity(sprungTrap)
	}

	return me
}