1739 |
}; |
}; |
1740 |
} |
} |
1741 |
|
|
1742 |
|
// ------------------- |
1743 |
|
// BrakeStone |
1744 |
|
// ------------------- |
1745 |
|
|
1746 |
|
/** \page st-brake Brake |
1747 |
|
|
1748 |
|
Blocks bolder stones and other movable stones. |
1749 |
|
May be carried. |
1750 |
|
|
1751 |
|
\image html st-brake.png |
1752 |
|
*/ |
1753 |
|
|
1754 |
|
namespace |
1755 |
|
{ |
1756 |
|
class BrakeStone : public Stone { |
1757 |
|
CLONEOBJ(BrakeStone); |
1758 |
|
public: |
1759 |
|
BrakeStone() : Stone("st-brake") {} |
1760 |
|
|
1761 |
|
void on_creation() { |
1762 |
|
Stone::on_creation(); |
1763 |
|
|
1764 |
|
GridPos p = get_pos(); |
1765 |
|
Item *it = GetItem(p); |
1766 |
|
if (it && 0 == strcmp(it->get_kind(), "it-blocker")) { |
1767 |
|
KillItem(p); |
1768 |
|
play_sound("explosion1"); |
1769 |
|
} |
1770 |
|
} |
1771 |
|
|
1772 |
|
StoneResponse collision_response(const StoneContact &/*sc*/) { |
1773 |
|
return STONE_PASS; |
1774 |
|
} |
1775 |
|
|
1776 |
|
void actor_inside(Actor *a) { |
1777 |
|
const double BRAKE_RADIUS = 0.3; |
1778 |
|
GridPos p = get_pos(); |
1779 |
|
double dist = length(a->get_pos() - p.center()); |
1780 |
|
|
1781 |
|
if (dist < BRAKE_RADIUS) { |
1782 |
|
player::PickupStoneAsItem(a, p); |
1783 |
|
} |
1784 |
|
} |
1785 |
|
|
1786 |
|
bool on_laserhit(Direction) { |
1787 |
|
GridPos p = get_pos(); |
1788 |
|
KillStone(p); |
1789 |
|
SetItem(p, MakeItem("it-explosion1")); |
1790 |
|
return false; // block laser |
1791 |
|
} |
1792 |
|
}; |
1793 |
|
} |
1794 |
|
|
1795 |
// -------------------------------------------------------------------------------- |
// -------------------------------------------------------------------------------- |
1796 |
|
|
1836 |
|
|
1837 |
Register(new BlockStone); |
Register(new BlockStone); |
1838 |
Register(new BombStone); |
Register(new BombStone); |
1839 |
|
Register(new BrakeStone); |
1840 |
|
|
1841 |
Register(new Break_acblack); |
Register(new Break_acblack); |
1842 |
Register(new Break_acwhite); |
Register(new Break_acwhite); |