/[enigma]/enigma/src/items.cc
ViewVC logotype

Diff of /enigma/src/items.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.75 by mhawlisch, Thu Jul 31 09:15:22 2003 UTC revision 1.76 by mhawlisch, Wed Aug 6 13:58:03 2003 UTC
# Line 1684  namespace Line 1684  namespace
1684      };      };
1685  }  }
1686    
1687    //----------------------------------------
1688    // Burning floors
1689    //
1690    // This items can burn. The fire spreads and destroys items and actors.
1691    //----------------------------------------
1692    namespace
1693    {
1694        class Burnable : public Item {
1695            CLONEOBJ(Burnable);
1696        public:
1697            enum State { IDLE, IGNITE, BURNING, ASH };
1698            Burnable( bool burn=false): Item("it-burnable") {
1699                state = burn ? IGNITE : IDLE;
1700            }
1701        private:
1702            State state;
1703    
1704            void message(const string &msg, const Value &val) {
1705                if ((msg == "trigger" || msg == "ignite")&& state==IDLE) {
1706                    state = IGNITE;
1707                    init_model();
1708                }
1709                if (msg == "extinguish") {
1710                    state = ASH;
1711                    init_model();
1712                }
1713            }
1714    
1715            void animcb() {
1716                if (state == IGNITE || state == BURNING) {
1717                    GridPos p = get_pos();
1718                    if( DoubleRand(0, 1) > 0.3) ignite (move(p, NORTH));
1719                    if( DoubleRand(0, 1) > 0.3) ignite (move(p, EAST));
1720                    if( DoubleRand(0, 1) > 0.3) ignite (move(p, SOUTH));
1721                    if( DoubleRand(0, 1) > 0.3) ignite (move(p, WEST));
1722                }
1723                if (state == IGNITE) {
1724                        state = BURNING;
1725                        init_model();
1726                } else if (state == BURNING) {
1727                    if( DoubleRand(0, 1) > 0.7)
1728                        state = ASH;
1729                    else
1730                        state = BURNING;
1731                        
1732                    init_model();
1733                }
1734            }
1735            void init_model() {
1736                switch (state) {
1737                    case IDLE:    set_model("invisible"); break;
1738                    case IGNITE:  set_anim("it-burnable_ignite"); break;
1739                    case BURNING: set_anim("it-burnable_burning"); break;
1740                    case ASH:     set_anim("it-burnable_ash"); break;
1741                }
1742            }
1743    
1744            bool actor_hit(Actor *a) {
1745                if (state == IGNITE || state == BURNING)
1746                    SendMessage(a, "shatter");
1747                return false;
1748            }
1749    
1750            void ignite( GridPos p) {
1751                if (Item *it = GetItem(p)) {
1752                    string model = it->get_kind();
1753                    if( model=="it-burnable" || model=="it-dynamite"
1754                            || model=="it-blackbomb" || model=="it-whitebomb")
1755                        SendMessage (it, "ignite");
1756                    else if (model != "it-extinguisher" && model != "it-hill" && model != "it-hollow"
1757                                && model != "it-tinyhill" && model != "it-tinyhollow") {
1758                        SetItem( p, MakeItem("it-burnable-ignited"));
1759                        //SendMessage (it, "ignite");
1760                    }
1761                }
1762            }
1763        };
1764    }
1765    
1766    //----------------------------------------
1767    // Fire Extinguisher
1768    //
1769    // This items can extinguish burning floor.
1770    //----------------------------------------
1771    namespace
1772    {
1773        class Extinguisher : public Item {
1774            CLONEOBJ(Extinguisher);
1775        public:
1776            Extinguisher( int initload=2): Item("it-extinguisher") {
1777                load=initload;
1778            }
1779        private:
1780            int load;
1781    
1782            ItemAction activate(Actor *a, GridPos p) {
1783                fprintf(stderr, "Activate %d\n",load);
1784                if( load > 0) {
1785                    load--;
1786                    KillItem(p);
1787                    extinguish (move(p, NORTH));
1788                    extinguish (move(move(p, NORTH),NORTH));
1789                    extinguish (move(move(p, NORTH),EAST));
1790                    extinguish (move(p, SOUTH));
1791                    extinguish (move(move(p, SOUTH),SOUTH));
1792                    extinguish (move(move(p, SOUTH),WEST));
1793                    extinguish (move(p, EAST));
1794                    extinguish (move(move(p, EAST),EAST));
1795                    extinguish (move(move(p, EAST),SOUTH));
1796                    extinguish (move(p, WEST));
1797                    extinguish (move(move(p, WEST),WEST));
1798                    extinguish (move(move(p, WEST),NORTH));
1799                }
1800                return ITEM_DROP;
1801            }
1802    
1803            void extinguish( GridPos p) {
1804                if (Item *it = GetItem(p)) {
1805                    SendMessage (it, "extinguish");
1806                }
1807            }
1808    
1809        };
1810    }
1811    
1812    
1813  //----------------------------------------  //----------------------------------------
1814  // Flags  // Flags
# Line 2094  void items::Init() Line 2219  void items::Init()
2219      Register(new Blocker(false));      Register(new Blocker(false));
2220      Register(new Brake);      Register(new Brake);
2221      Register(new Brush);      Register(new Brush);
2222        Register(new Burnable);
2223        Register("it-burnable-ignited", new Burnable(true));
2224      Register(new Cherry);      Register(new Cherry);
2225      Register(new Coffee);      Register(new Coffee);
2226      Register(new Coin);      Register(new Coin);
# Line 2112  void items::Init() Line 2239  void items::Init()
2239      Register("it-explosion1", new Explosion(Explosion::WEAK));      Register("it-explosion1", new Explosion(Explosion::WEAK));
2240      Register("it-explosion2", new Explosion(Explosion::MEDIUM));      Register("it-explosion2", new Explosion(Explosion::MEDIUM));
2241      Register("it-explosion3", new Explosion(Explosion::STRONG));      Register("it-explosion3", new Explosion(Explosion::STRONG));
2242        Register(new Extinguisher);
2243        Register("it-extinguisher-full", new Extinguisher(2));
2244      Register(new ExtraLife);      Register(new ExtraLife);
2245      Register(new EasyModeItem);      Register(new EasyModeItem);
2246      Register(new FlagBlack);      Register(new FlagBlack);

Legend:
Removed from v.1.75  
changed lines
  Added in v.1.76

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26