/* 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 }