Review: Needs Fixing


Diff comments:

> === modified file 'campaigns/atl01.wmf/scripting/init.lua'
> --- campaigns/atl01.wmf/scripting/init.lua    2014-07-17 15:26:32 +0000
> +++ campaigns/atl01.wmf/scripting/init.lua    2014-07-19 09:00:26 +0000
> @@ -324,7 +324,7 @@
>        if not f.immovable then return end
>  
>        -- Flags are not so interesting
> -      if f.immovable.type == "flag" and
> +      if f.immovable.name == "flag" and
>           (f.tln.immovable and is_building(f.tln.immovable)) then
>           f = f.tln
>        end
> 
> === modified file 'campaigns/tutorial01.wmf/scripting/init.lua'
> --- campaigns/tutorial01.wmf/scripting/init.lua       2014-07-17 15:26:32 
> +0000
> +++ campaigns/tutorial01.wmf/scripting/init.lua       2014-07-19 09:00:26 
> +0000
> @@ -311,7 +311,7 @@
>     end
>  
>      -- buildings and constructionsite have a flag
> -   if is_building(i) or i.type == "constructionsite" then
> +   if is_building(i) or i.descr.type_name == "constructionsite" then
>        registered_player_immovables[_fmt(i.fields[1].brn)] = true
>     end
>  end
> @@ -350,15 +350,15 @@
>  -- Allows constructionsites for the given buildings, all others are invalid
>  -- as is any other immovable build by the player
>  function allow_constructionsite(i, buildings)
> -   if i.type == "constructionsite" then
> +   if i.descr.type_name == "constructionsite" then
>        if not buildings then return i end
>        for idx,n in ipairs(buildings) do
>           if i.building == n then return i end
>        end
>        return false
> -   elseif i.type == "flag" then
> +   elseif i.name == "flag" then
>        local tr = i.fields[1].tln.immovable
> -      if tr and tr.type == "constructionsite" then
> +      if tr and tr.descr.type_name == "constructionsite" then
>           return allow_constructionsite(tr, buildings)
>        end
>     end
> @@ -442,7 +442,7 @@
>     blocker:lift_blocks()
>  
>     -- Wait for flag
> -   while not (f.immovable and f.immovable.type == "flag") do sleep(300) end
> +   while not (f.immovable and f.immovable.name == "flag") do sleep(300) end
>     o.done = true
>  
>     sleep(300)
> @@ -506,7 +506,7 @@
>  
>     local function _rip_road()
>        for idx,f in ipairs(cs.fields[1].brn:region(2)) do
> -         if f.immovable and f.immovable.type == "road" then
> +         if f.immovable and f.immovable.name == "road" then
>              click_on_field(f)
>              click_on_panel(wl.ui.MapView().windows.
>                 field_action.buttons.destroy_road, 300)
> @@ -671,7 +671,7 @@
>     local function _find_nearby_flag()
>        for i=2,8 do
>           for idx, f in ipairs(conquer_field:region(i)) do
> -            if f.immovable and f.immovable.type == "flag" then
> +            if f.immovable and f.immovable.name == "flag" then
>                 return f
>              end
>           end
> 
> === modified file 'scripting/format_help.lua'
> --- scripting/format_help.lua 2014-07-17 09:42:13 +0000
> +++ scripting/format_help.lua 2014-07-19 09:00:26 +0000
> @@ -330,23 +330,23 @@
>               image_line("tribes/" .. tribename .. "/" .. resourcename  .. 
> "/menu.png", 1, p(purpose))
>       if (note) then  result = result .. rt(h3(_"Note:")) .. rt(p(note)) end
>  
> -     if(building_description.type == "productionsite") then
> +     if(building_description.type_name == "productionsite") then
>               if(building_description.workarea_radius and 
> building_description.workarea_radius > 0) then
>                       result = result .. text_line(_"Working radius:", 
> building_description.workarea_radius)
>               end
>  
> -     elseif(building_description.type == "warehouse") then
> +     elseif(building_description.type_name == "warehouse") then
>               result = result .. rt(h3(_"Healing:")
>                       .. p(_"Garrisoned soldiers heal %s per 
> second":bformat(building_description.heal_per_second)))
>               result = result .. text_line(_"Conquer range:", 
> building_description.conquers)
>  
> -     elseif(building_description.type == "militarysite") then
> +     elseif(building_description.type_name == "militarysite") then
>               result = result .. rt(h3(_"Healing:")
>                       .. p(_"Garrisoned soldiers heal %s per 
> second":bformat(building_description.heal_per_second)))
>               result = result .. text_line(_"Capacity:", 
> building_description.max_number_of_soldiers)
>               result = result .. text_line(_"Conquer range:", 
> building_description.conquers)
>  
> -     elseif(building_description.type == "trainingsite") then
> +     elseif(building_description.type_name == "trainingsite") then
>               result = result .. rt(h3(_"Training:"))
>               if(building_description.max_attack and 
> building_description.min_attack) then
>                       -- TRANSLATORS: %1$s = Health, Evade, Attack or 
> Defense. %2$s and %3$s are numbers.
> @@ -693,7 +693,7 @@
>       local building_description = 
> wl.Game():get_building_description(tribename, building_description.name)
>       local result = ""
>  
> -     if(building_description.type == "productionsite" or 
> building_description.type == "trainingsite") then
> +     if(building_description.type_name == "productionsite" or 
> building_description.type_name == "trainingsite") then
>  
>               result = result .. rt(h2(_"Workers")) .. rt(h3(_"Crew 
> required:"))
>  
> 
> === modified file 'scripting/infrastructure.lua'
> --- scripting/infrastructure.lua      2014-06-18 18:08:20 +0000
> +++ scripting/infrastructure.lua      2014-07-19 09:00:26 +0000
> @@ -169,8 +169,8 @@
>  --
>  --    :returns: true if the immovable is a building
>  function is_building(immovable)
> -     return immovable.type == "productionsite" or
> -             immovable.type == "warehouse" or
> -             immovable.type == "militarysite" or
> -             immovable.type == "trainingsite"
> +     return immovable.descr.type_name == "productionsite" or
> +             immovable.descr.type_name == "warehouse" or
> +             immovable.descr.type_name == "militarysite" or
> +             immovable.descr.type_name == "trainingsite"
>  end
> 
> === modified file 'src/economy/flag.h'
> --- src/economy/flag.h        2014-07-14 14:40:42 +0000
> +++ src/economy/flag.h        2014-07-19 09:00:26 +0000
> @@ -33,6 +33,16 @@
>  class WareInstance;
>  
>  
> +class Flag_Descr : public Map_Object_Descr
> +{
> +
> +public:
> +    Flag_Descr(char const * const name, char const * const descname);
> +    virtual ~Flag_Descr();
> +
> +    char const * type_name() const override {return "flag";}
> +};
> +
>  
>  /**
>   * Flag represents a flag, obviously.
> @@ -59,6 +69,8 @@
>       friend struct Map_Waredata_Data_Packet; // has to look at pending wares
>       friend struct Router;
>  
> +    MO_DESCR(Flag_Descr);
> +
>       Flag(); /// empty flag for savegame loading
>       Flag(Editor_Game_Base &, Player & owner, Coords); /// create a new flag
>       virtual ~Flag();
> @@ -67,7 +79,6 @@
>       virtual void destroy(Editor_Game_Base &) override;
>  
>       virtual int32_t  get_type    () const override;
> -     char const * type_name() const override {return "flag";}
>       virtual int32_t  get_size    () const override;
>       virtual bool get_passable() const override;
>  
> 
> === modified file 'src/economy/fleet.cc'
> --- src/economy/fleet.cc      2014-07-14 22:18:03 +0000
> +++ src/economy/fleet.cc      2014-07-19 09:00:26 +0000
> @@ -40,14 +40,11 @@
>  
>  namespace Widelands {
>  
> -namespace  {
> -
>  // Every Map_Object() needs to have a description. So we make a dummy one for
>  // Fleet.
>  Map_Object_Descr* fleet_description() {
>       static Map_Object_Descr fleet_descr("fleet", "Fleet");
>       return &fleet_descr;
> -}
>  
>  }  // namespace
>  
> @@ -70,11 +67,6 @@
>       return FLEET;
>  }
>  
> -char const * Fleet::type_name() const
> -{
> -     return "fleet";
> -}
> -
>  /**
>   * Whether the fleet is in fact useful for transporting goods.
>   */
> 
> === modified file 'src/economy/fleet.h'
> --- src/economy/fleet.h       2014-07-05 16:41:51 +0000
> +++ src/economy/fleet.h       2014-07-19 09:00:26 +0000
> @@ -32,6 +32,16 @@
>  struct RoutingNodeNeighbour;
>  struct Ship;
>  
> +class Fleet_Descr : public Map_Object_Descr
> +{
> +
> +public:
> +    Fleet_Descr(char const * const name, char const * const descname);
> +    virtual ~Fleet_Descr();
> +
> +    char const * type_name() const override {return "fleet";}
> +};
> +
>  /**
>   * Manage all ships and ports of a player that are connected
>   * by ocean.
> @@ -58,6 +68,8 @@
>               PortPath() : cost(-1) {}
>       };
>  
> +    MO_DESCR(Fleet_Descr);
> +
>       Fleet(Player & player);
>  
>       Player * get_owner() const {return &m_owner;}
> @@ -70,7 +82,6 @@
>       bool active() const;
>  
>       virtual int32_t get_type() const override;
> -     virtual char const * type_name() const override;
>  
>       virtual void init(Editor_Game_Base &) override;
>       virtual void cleanup(Editor_Game_Base &) override;
> 
> === modified file 'src/economy/portdock.cc'
> --- src/economy/portdock.cc   2014-07-16 05:33:19 +0000
> +++ src/economy/portdock.cc   2014-07-19 09:00:26 +0000
> @@ -99,11 +99,6 @@
>       return PORTDOCK;
>  }
>  
> -char const * PortDock::type_name() const
> -{
> -     return "portdock";
> -}
> -
>  PortDock::PositionList PortDock::get_positions
>       (const Editor_Game_Base &) const
>  {
> 
> === modified file 'src/economy/portdock.h'
> --- src/economy/portdock.h    2014-07-14 14:40:42 +0000
> +++ src/economy/portdock.h    2014-07-19 09:00:26 +0000
> @@ -34,6 +34,16 @@
>  class Warehouse;
>  class ExpeditionBootstrap;
>  
> +class PortDock_Descr : public Map_Object_Descr
> +{
> +
> +public:
> +    PortDock_Descr(char const * const name, char const * const descname);
> +    virtual ~PortDock_Descr();
> +
> +    char const * type_name() const override {return "portdock";}
> +};
> +
>  /**
>   * The PortDock occupies the fields in the water at which ships
>   * dock at a port. As such, this class cooperates closely with
> @@ -62,6 +72,8 @@
>   */
>  class PortDock : public PlayerImmovable {
>  public:
> +    MO_DESCR(PortDock_Descr);
> +
>       PortDock(Warehouse* warehouse);
>       virtual ~PortDock();
>  
> @@ -77,7 +89,6 @@
>       virtual int32_t get_size() const override;
>       virtual bool get_passable() const override;
>       virtual int32_t get_type() const override;
> -     virtual char const * type_name() const override;
>  
>       virtual Flag & base_flag() override;
>       virtual PositionList get_positions
> 
> === modified file 'src/economy/road.h'
> --- src/economy/road.h        2014-07-14 14:40:42 +0000
> +++ src/economy/road.h        2014-07-19 09:00:26 +0000
> @@ -30,6 +30,16 @@
>  struct Carrier;
>  class Request;
>  
> +class Road_Descr : public Map_Object_Descr
> +{
> +
> +public:
> +    Road_Descr(char const * const name, char const * const descname);
> +    virtual ~Road_Descr();
> +
> +    char const * type_name() const override {return "road";}
> +};
> +
>  /**
>   * Road is a special object which connects two flags.
>   * The Road itself is never rendered; however, the appropriate Field::roads 
> are
> @@ -49,6 +59,8 @@
>       friend class Map_Roaddata_Data_Packet; // For saving
>       friend class Map_Road_Data_Packet; // For init()
>  
> +    MO_DESCR(Road_Descr);
> +
>       static bool IsRoadDescr(Map_Object_Descr const *);
>  
>       enum FlagId {
> @@ -75,7 +87,6 @@
>  
>       virtual int32_t  get_type    () const override;
>       uint8_t get_roadtype() const {return m_type;}
> -     char const * type_name() const override {return "road";}
>       virtual int32_t  get_size    () const override;
>       virtual bool get_passable() const override;
>       virtual PositionList get_positions(const Editor_Game_Base &) const 
> override;
> 
> === modified file 'src/economy/ware_instance.h'
> --- src/economy/ware_instance.h       2014-07-05 16:41:51 +0000
> +++ src/economy/ware_instance.h       2014-07-19 09:00:26 +0000
> @@ -62,9 +62,6 @@
>       ~WareInstance();
>  
>       virtual int32_t get_type() const override;
> -     char const* type_name() const override {
> -             return "ware";
> -     }
>  
>       Map_Object* get_location(Editor_Game_Base& egbase) {
>               return m_location.get(egbase);
> 
> === modified file 'src/logic/battle.cc'
> --- src/logic/battle.cc       2014-07-03 20:11:14 +0000
> +++ src/logic/battle.cc       2014-07-19 09:00:26 +0000
> @@ -34,10 +34,9 @@
>  
>  namespace Widelands {
>  
> -namespace  {
> -Battle::Descr g_Battle_Descr("battle", "Battle");
> -}  // namespace
> -
> +namespace {
> +Map_Object_Descr g_Battle_Descr("battle", "Battle");

This must be a Battle_Descr. The other globals must be of the correct type too 
(Fleet_Descr, and so on). If this is not true, the behavior of MO_DESCR is 
undefined.

> +}
>  
>  Battle::Battle ()
>       :
> 
> === modified file 'src/logic/battle.h'
> --- src/logic/battle.h        2014-07-05 16:41:51 +0000
> +++ src/logic/battle.h        2014-07-19 09:00:26 +0000
> @@ -24,6 +24,16 @@
>  namespace Widelands {
>  class Soldier;
>  
> +class Battle_Descr : public Map_Object_Descr
> +{
> +
> +public:
> +    Battle_Descr(char const * const name, char const * const descname);
> +    virtual ~Battle_Descr();
> +
> +    char const * type_name() const override {return "battle";}
> +};
> +
>  /**
>   * Manages the battle between two opposing soldiers.
>   *
> @@ -34,14 +44,14 @@
>   */
>  class Battle : public Map_Object {
>  public:
> -     typedef Map_Object_Descr Descr;
> +
> +    MO_DESCR(Battle_Descr);
>  
>       Battle(); //  for loading an existing battle from a savegame
>       Battle(Game &, Soldier &, Soldier &); //  to create a new battle in the 
> game
>  
>       // Implements Map_Object.
>       virtual int32_t get_type() const override {return BATTLE;}
> -     virtual char const * type_name() const override {return "battle";}
>       virtual void init(Editor_Game_Base &) override;
>       virtual void cleanup(Editor_Game_Base &) override;
>       virtual bool has_new_save_support() override {return true;}
> 
> === modified file 'src/logic/bob.h'
> --- src/logic/bob.h   2014-07-16 08:25:35 +0000
> +++ src/logic/bob.h   2014-07-19 09:00:26 +0000
> @@ -55,7 +55,7 @@
>  public:
>       friend struct Map_Bobdata_Data_Packet;
>  
> -     std::string type() const override {return "bob";}
> +    char const * type_name() const override {return "bob";}
>  
>       BobDescr(const std::string& init_name,
>                const std::string& init_descname,
> @@ -229,7 +229,6 @@
>       int32_t get_animstart() const {return m_animstart;}
>  
>       virtual int32_t get_type() const override {return BOB;}
> -     virtual char const * type_name() const override {return "bob";}
>       virtual Type get_bob_type() const = 0;
>  
>       virtual void init(Editor_Game_Base &) override;
> 
> === modified file 'src/logic/building.h'
> --- src/logic/building.h      2014-07-16 08:25:35 +0000
> +++ src/logic/building.h      2014-07-19 09:00:26 +0000
> @@ -65,7 +65,7 @@
>                const std::string & directory, Profile &, Section & global_s,
>                const Tribe_Descr &);
>  
> -     std::string type() const override {
> +    char const * type_name() const override {
>               return "building";
>       }
>  
> @@ -183,7 +183,6 @@
>       void load_finish(Editor_Game_Base &) override;
>  
>       virtual int32_t  get_type    () const override;
> -     char const * type_name() const override {return "building";}
>       virtual int32_t  get_size    () const override;
>       virtual bool get_passable() const override;
>  
> 
> === modified file 'src/logic/carrier.h'
> --- src/logic/carrier.h       2014-07-11 22:53:34 +0000
> +++ src/logic/carrier.h       2014-07-19 09:00:26 +0000
> @@ -43,7 +43,7 @@
>  
>               virtual Worker_Type get_worker_type() const override {return 
> CARRIER;}
>               // class type needed for Lua stuffl TODO: redundant with 
> get_worker_type()?
> -             std::string type() const override {return "carrier";}
> +        char const * type_name() const override {return "carrier";}
>  
>       protected:
>               virtual Bob & create_object() const override {return *new 
> Carrier(*this);}
> 
> === modified file 'src/logic/constructionsite.h'
> --- src/logic/constructionsite.h      2014-07-11 22:53:34 +0000
> +++ src/logic/constructionsite.h      2014-07-19 09:00:26 +0000
> @@ -56,7 +56,7 @@
>                const Tribe_Descr & tribe);
>  
>       virtual Building & create_object() const override;
> -     std::string type() const override {return "constructionsite";}
> +    char const * type_name() const override {return "constructionsite";}
>  };
>  
>  class ConstructionSite : public Partially_Finished_Building {
> @@ -69,7 +69,6 @@
>  public:
>       ConstructionSite(const ConstructionSite_Descr & descr);
>  
> -     char const * type_name() const override {return "constructionsite";}
>       virtual std::string get_statistics_string() override;
>  
>       const Player::Constructionsite_Information & get_info() {return m_info;}
> 
> === modified file 'src/logic/critter_bob.h'
> --- src/logic/critter_bob.h   2014-07-16 08:25:35 +0000
> +++ src/logic/critter_bob.h   2014-07-19 09:00:26 +0000
> @@ -43,7 +43,7 @@
>       virtual ~Critter_Bob_Descr();
>  
>       Bob & create_object() const override;
> -     std::string type() const override {return "critterbob";}
> +    char const * type_name() const override {return "critterbob";}
>  
>       bool is_swimming() const;
>       uint32_t movecaps() const override;
> @@ -67,7 +67,6 @@
>  public:
>       Critter_Bob(const Critter_Bob_Descr &);
>  
> -     char const * type_name() const override {return "critter";}
>       virtual Bob::Type get_bob_type() const override {return Bob::CRITTER;}
>  
>       virtual void init_auto_task(Game &) override;
> 
> === modified file 'src/logic/dismantlesite.h'
> --- src/logic/dismantlesite.h 2014-07-11 22:53:34 +0000
> +++ src/logic/dismantlesite.h 2014-07-19 09:00:26 +0000
> @@ -48,7 +48,7 @@
>                const Tribe_Descr & tribe);
>  
>       virtual Building & create_object() const override;
> -     std::string type() const override {return "dismantlesite";}
> +    char const * type_name() const override {return "dismantlesite";}
>  };
>  
>  class DismantleSite : public Partially_Finished_Building {
> @@ -64,7 +64,6 @@
>               (const DismantleSite_Descr & descr, Editor_Game_Base &,
>                Coords const, Player &, bool, Building::FormerBuildings & 
> former_buildings);
>  
> -     char const * type_name() const override {return "dismantlesite";}
>       virtual std::string get_statistics_string() override;
>  
>       virtual bool burn_on_destroy() override;
> 
> === modified file 'src/logic/immovable.h'
> --- src/logic/immovable.h     2014-07-16 08:23:42 +0000
> +++ src/logic/immovable.h     2014-07-19 09:00:26 +0000
> @@ -118,7 +118,7 @@
>  
>       ~Immovable_Descr();
>  
> -     std::string type() const override {return "immovable";}
> +    char const * type_name() const override {return "immovable";}
>  
>       int32_t get_size() const {return m_size;}
>       ImmovableProgram const * get_program(const std::string &) const;
> @@ -179,7 +179,6 @@
>       virtual PositionList get_positions (const Editor_Game_Base &) const 
> override;
>  
>       virtual int32_t  get_type    () const override;
> -     char const * type_name() const override {return "immovable";}
>       virtual int32_t  get_size    () const override;
>       virtual bool get_passable() const override;
>       void start_animation(const Editor_Game_Base &, uint32_t anim);
> 
> === modified file 'src/logic/instances.h'
> --- src/logic/instances.h     2014-07-15 10:02:22 +0000
> +++ src/logic/instances.h     2014-07-19 09:00:26 +0000
> @@ -58,7 +58,7 @@
>       }
>       virtual ~Map_Object_Descr() {m_anims.clear();}
>  
> -     virtual std::string type() const {
> +    virtual char const * type_name() const {
>               return "mapobject";
>       }
>  
> @@ -201,7 +201,6 @@
>  
>  public:
>       virtual int32_t get_type() const = 0;
> -     virtual char const * type_name() const {return "map object";}
>  
>       Serial serial() const {return m_serial;}
>  
> 
> === modified file 'src/logic/militarysite.h'
> --- src/logic/militarysite.h  2014-07-11 22:53:34 +0000
> +++ src/logic/militarysite.h  2014-07-19 09:00:26 +0000
> @@ -39,7 +39,7 @@
>                const Tribe_Descr & tribe, const World& world);
>  
>       virtual Building & create_object() const override;
> -     virtual std::string type() const override {
> +    char const * type_name() const override {
>               return "militarysite";
>       }
>  
> @@ -82,7 +82,6 @@
>       MilitarySite(const MilitarySite_Descr &);
>       virtual ~MilitarySite();
>  
> -     char const * type_name() const override {return "militarysite";}
>       virtual std::string get_statistics_string() override;
>  
>       virtual void init(Editor_Game_Base &) override;
> 
> === modified file 'src/logic/productionsite.h'
> --- src/logic/productionsite.h        2014-07-11 22:53:34 +0000
> +++ src/logic/productionsite.h        2014-07-19 09:00:26 +0000
> @@ -62,7 +62,7 @@
>  
>       virtual Building & create_object() const override;
>  
> -     virtual std::string type() const override {
> +    char const * type_name() const override {
>               return "productionsite";
>       }
>  
> @@ -146,7 +146,6 @@
>  
>       virtual WaresQueue & waresqueue(Ware_Index) override;
>  
> -     char const * type_name() const override {return "productionsite";}
>       virtual void init(Editor_Game_Base &) override;
>       virtual void cleanup(Editor_Game_Base &) override;
>       virtual void act(Game &, uint32_t data) override;
> 
> === modified file 'src/logic/ship.h'
> --- src/logic/ship.h  2014-07-15 10:02:22 +0000
> +++ src/logic/ship.h  2014-07-19 09:00:26 +0000
> @@ -44,7 +44,7 @@
>  
>       virtual Bob & create_object() const override;
>  
> -     std::string type() const override {
> +    char const * type_name() const override {
>               return "ship";
>       }
>  
> 
> === modified file 'src/logic/soldier.h'
> --- src/logic/soldier.h       2014-07-15 10:02:22 +0000
> +++ src/logic/soldier.h       2014-07-19 09:00:26 +0000
> @@ -49,7 +49,7 @@
>       // NOTE as well defined in an enum in instances.h
>       virtual Worker_Type get_worker_type() const override {return 
> Worker_Descr::SOLDIER;}
>  
> -     std::string type() const override {return "soldier";}
> +    char const * type_name() const override {return "soldier";}
>  
>       virtual void load_graphics() override;
>  
> 
> === modified file 'src/logic/trainingsite.h'
> --- src/logic/trainingsite.h  2014-07-11 22:53:34 +0000
> +++ src/logic/trainingsite.h  2014-07-19 09:00:26 +0000
> @@ -36,7 +36,7 @@
>                const std::string & directory, Profile &, Section & global_s,
>                const Tribe_Descr & tribe, const World& world);
>  
> -     std::string type() const override {return "trainingsite";}
> +    char const * type_name() const override {return "trainingsite";}
>  
>       virtual Building & create_object() const override;
>  
> @@ -121,7 +121,6 @@
>  public:
>       TrainingSite(const TrainingSite_Descr &);
>  
> -     char const * type_name() const override {return "trainingsite";}
>       virtual std::string get_statistics_string() override;
>  
>       virtual void init(Editor_Game_Base &) override;
> 
> === modified file 'src/logic/ware_descr.h'
> --- src/logic/ware_descr.h    2014-07-11 22:53:34 +0000
> +++ src/logic/ware_descr.h    2014-07-19 09:00:26 +0000
> @@ -52,7 +52,7 @@
>  
>       virtual ~WareDescr() {}
>  
> -     std::string type() const override {return "ware";}
> +    char const * type_name() const override {return "ware";}
>  
>       const Tribe_Descr & tribe() const {return m_tribe;}
>  
> 
> === modified file 'src/logic/warehouse.cc'
> --- src/logic/warehouse.cc    2014-07-16 08:25:35 +0000
> +++ src/logic/warehouse.cc    2014-07-19 09:00:26 +0000
> @@ -450,7 +450,7 @@
>                       schedule_act
>                               (ref_cast<Game, Editor_Game_Base>(egbase), 
> 4000);
>  
> -     log("Message: adding (wh) (%s) %i \n", type_name(), 
> player.player_number());
> +    log("Message: adding (wh) (%s) %i \n", descr().type_name(), 
> player.player_number());
>       char message[2048];
>       snprintf
>               (message, sizeof(message),
> 
> === modified file 'src/logic/warehouse.h'
> --- src/logic/warehouse.h     2014-07-11 22:53:34 +0000
> +++ src/logic/warehouse.h     2014-07-19 09:00:26 +0000
> @@ -53,7 +53,7 @@
>                const std::string & directory, Profile &, Section & global_s,
>                const Tribe_Descr &);
>  
> -     std::string type() const override {return "warehouse";}
> +    char const * type_name() const override {return "warehouse";}
>  
>       virtual Building & create_object() const override;
>  
> @@ -115,8 +115,6 @@
>  
>       void load_finish(Editor_Game_Base &) override;
>  
> -     char const * type_name() const override {return "warehouse";}
> -
>       /// Called only when the oject is logically created in the simulation. 
> If
>       /// called again, such as when the object is loaded from a savegame, it 
> will
>       /// cause bugs.
> 
> === modified file 'src/logic/worker.h'
> --- src/logic/worker.h        2014-07-16 08:25:35 +0000
> +++ src/logic/worker.h        2014-07-19 09:00:26 +0000
> @@ -77,7 +77,6 @@
>       Worker(const Worker_Descr &);
>       virtual ~Worker();
>  
> -     char const * type_name() const override {return "worker";}
>       virtual Bob::Type get_bob_type() const override {return Bob::WORKER;}
>  
>       Player & owner() const {assert(get_owner()); return *get_owner();}
> 
> === modified file 'src/logic/worker_descr.h'
> --- src/logic/worker_descr.h  2014-07-11 22:53:34 +0000
> +++ src/logic/worker_descr.h  2014-07-19 09:00:26 +0000
> @@ -55,7 +55,7 @@
>                const Tribe_Descr &);
>       virtual ~Worker_Descr();
>  
> -     std::string type() const override {return "worker";}
> +    char const * type_name() const override {return "worker";}
>  
>       virtual Bob & create_object() const override;
>  
> 
> === modified file 'src/map_io/widelands_map_map_object_loader.h'
> --- src/map_io/widelands_map_map_object_loader.h      2014-07-05 16:41:51 
> +0000
> +++ src/map_io/widelands_map_map_object_loader.h      2014-07-19 09:00:26 
> +0000
> @@ -64,7 +64,7 @@
>               if (existing != m_objects.end()) {
>                       //delete &object; can not do this
>                       throw game_data_error
> -                             ("already loaded (%s)", 
> existing->second->type_name());
> +                ("already loaded (%s)", 
> existing->second->descr().type_name());
>               }
>               m_objects.insert(std::pair<Serial, Map_Object *>(n, &object));
>               m_loaded_obj[&object] = false;
> @@ -80,7 +80,7 @@
>               else
>                       throw game_data_error
>                               ("is a %s, expected a %s",
> -                              it->second->type_name(), typeid(T).name());
> +                 it->second->descr().type_name(), typeid(T).name());
>       }
>  
>       int32_t get_nr_unloaded_objects();
> 
> === modified file 'src/map_io/widelands_map_map_object_saver.cc'
> --- src/map_io/widelands_map_map_object_saver.cc      2014-07-05 12:17:03 
> +0000
> +++ src/map_io/widelands_map_map_object_saver.cc      2014-07-19 09:00:26 
> +0000
> @@ -61,7 +61,7 @@
>  
>       MapObjectRec rec;
>  #ifndef NDEBUG
> -     rec.description  = obj.type_name();
> +    rec.description  = obj.descr().type_name();
>       rec.description += " (";
>       rec.description += obj.serial();
>       rec.description += ')';
> 
> === modified file 'src/map_io/widelands_map_object_packet.cc'
> --- src/map_io/widelands_map_object_packet.cc 2014-06-21 10:24:12 +0000
> +++ src/map_io/widelands_map_object_packet.cc 2014-07-19 09:00:26 +0000
> @@ -112,7 +112,7 @@
>               try {
>                       (*i.current)->load_pointers();
>               } catch (const std::exception & e) {
> -                     throw wexception("load_pointers for %s: %s", 
> (*i.current)->get_object()->type_name(), e.what());
> +            throw wexception("load_pointers for %s: %s", 
> (*i.current)->get_object()->descr().type_name(), e.what());
>               }
>       }
>  
> @@ -121,7 +121,7 @@
>               try {
>                       (*i.current)->load_finish();
>               } catch (const std::exception & e) {
> -                     throw wexception("load_finish for %s: %s", 
> (*i.current)->get_object()->type_name(), e.what());
> +            throw wexception("load_finish for %s: %s", 
> (*i.current)->get_object()->descr().type_name(), e.what());
>               }
>               
> (*i.current)->mol().mark_object_as_loaded(*(*i.current)->get_object());
>       }
> 
> === modified file 'src/scripting/lua_map.cc'
> --- src/scripting/lua_map.cc  2014-07-17 14:49:37 +0000
> +++ src/scripting/lua_map.cc  2014-07-19 09:00:26 +0000
> @@ -562,7 +562,7 @@
>       switch  (mo->get_type()) {
>               case Map_Object::BUILDING:
>               {
> -                     const char * type_name = mo->type_name();
> +            const char * type_name = mo->descr().type_name();
>                       if (!strcmp(type_name, "constructionsite"))
>                               return CAST_TO_LUA(ConstructionSite);
>                       else if (!strcmp(type_name, "productionsite"))
> @@ -606,6 +606,9 @@
>       else if (is_a(ProductionSite_Descr, desc)) {
>               return CAST_TO_LUA(ProductionSite_Descr, 
> L_ProductionSiteDescription);
>       }
> +     else if (is_a(ConstructionSite_Descr, desc)) {
> +             return CAST_TO_LUA(ConstructionSite_Descr, 
> L_ConstructionSiteDescription);
> +     }
>       else if (is_a(Warehouse_Descr, desc)) {
>               return CAST_TO_LUA(Warehouse_Descr, L_WarehouseDescription);
>       }
> @@ -1023,7 +1026,7 @@
>  const PropertyType<L_MapObjectDescription> 
> L_MapObjectDescription::Properties[] = {
>       PROP_RO(L_MapObjectDescription, descname),
>       PROP_RO(L_MapObjectDescription, name),
> -     PROP_RO(L_MapObjectDescription, type),
> +     PROP_RO(L_MapObjectDescription, type_name),
>       {nullptr, nullptr, nullptr},
>  };
>  
> @@ -1059,8 +1062,8 @@
>  
>                       (RO) the name of the building, e.g. building.
>  */
> -int L_MapObjectDescription::get_type(lua_State * L) {
> -     lua_pushstring(L, get()->type());
> +int L_MapObjectDescription::get_type_name(lua_State * L) {
> +    lua_pushstring(L, get()->type_name());
>       return 1;
>  }
>  
> @@ -1289,6 +1292,24 @@
>       return 1;
>  }
>  
> +/* RST
> +ConstructionSiteDescription
> +----------
> +
> +.. class:: ConstructionSiteDescription
> +
> +    A static description of a tribe's constructionsite, so it can be used in 
> help files
> +    without having to access an actual building on the map.
> +    See also class BuildingDescription and class MapObjectDescription for 
> more properties.
> +*/
> +const char L_ConstructionSiteDescription::className[] = 
> "ConstructionSiteDescription";
> +const MethodType<L_ConstructionSiteDescription> 
> L_ConstructionSiteDescription::Methods[] = {
> +     {nullptr, nullptr},
> +};
> +const PropertyType<L_ConstructionSiteDescription> 
> L_ConstructionSiteDescription::Properties[] = {
> +     {nullptr, nullptr, nullptr},
> +};
> +
>  
>  /* RST
>  ProductionSiteDescription
> @@ -1706,7 +1727,7 @@
>                               if (std::string(get()->name()) ==
>                                       
> std::string(tribe.get_ware_descr(ware_index)->name())) {
>                                       lua_pushint32(L, index++);
> -                                     upcasted_building_descr_to_lua(L, 
> tribe.get_building_descr(i));
> +                                             
> upcasted_building_descr_to_lua(L, tribe.get_building_descr(i));
>                                       lua_rawset(L, -3);
>                               }
>                       }
> @@ -1745,7 +1766,7 @@
>                               if (std::string(get()->name()) ==
>                                       
> std::string(tribe.get_ware_descr(ware_amount.first)->name())) {
>                                       lua_pushint32(L, index++);
> -                                     upcasted_building_descr_to_lua(L, 
> tribe.get_building_descr(i));
> +                                             
> upcasted_building_descr_to_lua(L, tribe.get_building_descr(i));
>                                       lua_rawset(L, -3);
>                               }
>                       }
> @@ -1892,10 +1913,9 @@
>  };
>  const PropertyType<L_MapObject> L_MapObject::Properties[] = {
>       PROP_RO(L_MapObject, __hash),
> +     PROP_RO(L_MapObject, descr),
> +     PROP_RO(L_MapObject, name),
>       PROP_RO(L_MapObject, serial),
> -     PROP_RO(L_MapObject, type),
> -     PROP_RO(L_MapObject, name),
> -     PROP_RO(L_MapObject, descname),
>       {nullptr, nullptr, nullptr},
>  };
>  
> @@ -1944,17 +1964,6 @@
>       return 1;
>  }
>  
> -/* RST
> -     .. attribute:: type
> -
> -             (RO) the type name of this map object. You can determine with 
> what kind
> -             of object you cope by looking at this attribute. Some example 
> types:
> -             immovable, flag, road, productionsite, warehouse, 
> militarysite...
> -*/
> -int L_MapObject::get_type(lua_State * L) {
> -     lua_pushstring(L, get(L, get_egbase(L))->type_name());
> -     return 1;
> -}
>  
>  /* RST
>       .. attribute:: name
> @@ -1967,19 +1976,43 @@
>       return 1;
>  }
>  
> +// use the dynamic type of BuildingDescription
> +#define CAST_TO_LUA(klass, lua_klass) to_lua<lua_klass> \
> +     (L, new lua_klass(static_cast<const klass *>(desc)))
> +
>  /* RST
> -     .. attribute:: descname
> +    .. attribute:: descr
>  
> -             (RO) The descriptive (and translated) name of this Map Object. 
> Use this
> -             in messages to the player instead of name.
> +        (RO) The description object for this immovable, e.g. 
> BuildingDescription.
>  */
> -int L_MapObject::get_descname(lua_State * L) {
> -     lua_pushstring(L, get(L, get_egbase(L))->descr().descname().c_str());
> -     return 1;
> +int L_MapObject::get_descr(lua_State * L) {
> +     //TODO(GunChleoc) Flag_Descr would be nice for getting the type of 
> immovables,
> +     // at the moment the type for these can be faked by using their name 
> instead
> +     const Map_Object_Descr* desc = &get(L, get_egbase(L))->descr();
> +     assert(desc != nullptr);
> +
> +     if (is_a(MilitarySite_Descr, desc)) {
> +             return CAST_TO_LUA(MilitarySite_Descr, 
> L_MilitarySiteDescription);
> +     }
> +     else if (is_a(TrainingSite_Descr, desc)) {
> +             return CAST_TO_LUA(TrainingSite_Descr, 
> L_TrainingSiteDescription);
> +     }
> +     else if (is_a(ProductionSite_Descr, desc)) {
> +             return CAST_TO_LUA(ProductionSite_Descr, 
> L_ProductionSiteDescription);
> +     }
> +     else if (is_a(Warehouse_Descr, desc)) {
> +             return CAST_TO_LUA(Warehouse_Descr, L_WarehouseDescription);
> +     }
> +     else if (is_a(ConstructionSite_Descr, desc)) {
> +             return CAST_TO_LUA(ConstructionSite_Descr, 
> L_ConstructionSiteDescription);
> +     }
> +     else if (is_a(Building_Descr, desc)) {
> +             return CAST_TO_LUA(Building_Descr, L_BuildingDescription);
> +     }
> +     return CAST_TO_LUA(Map_Object_Descr, L_MapObjectDescription);
>  }
>  
> -
> -
> +#undef CAST_TO_LUA
>  
>  /*
>   ==========================================================
> @@ -3982,6 +4015,11 @@
>       add_parent<L_BuildingDescription, L_MapObjectDescription>(L);
>       lua_pop(L, 1); // Pop the meta table
>  
> +     register_class<L_ConstructionSiteDescription>(L, "map", true);
> +     add_parent<L_ConstructionSiteDescription, L_BuildingDescription>(L);
> +     add_parent<L_ConstructionSiteDescription, L_MapObjectDescription>(L);
> +     lua_pop(L, 1); // Pop the meta table
> +
>       register_class<L_ProductionSiteDescription>(L, "map", true);
>       add_parent<L_ProductionSiteDescription, L_BuildingDescription>(L);
>       add_parent<L_ProductionSiteDescription, L_MapObjectDescription>(L);
> 
> === modified file 'src/scripting/lua_map.h'
> --- src/scripting/lua_map.h   2014-07-16 08:23:42 +0000
> +++ src/scripting/lua_map.h   2014-07-19 09:00:26 +0000
> @@ -112,7 +112,7 @@
>        * Properties
>        */
>       int get_name(lua_State *);
> -     int get_type(lua_State *);
> +     int get_type_name(lua_State *);
>       int get_descname(lua_State *);
>  
>       /*
> @@ -189,6 +189,36 @@
>  };
>  
>  
> +class L_ConstructionSiteDescription : public L_BuildingDescription {
> +public:
> +     LUNA_CLASS_HEAD(L_ConstructionSiteDescription);
> +
> +     virtual ~L_ConstructionSiteDescription() {}
> +
> +     L_ConstructionSiteDescription() {}
> +     L_ConstructionSiteDescription(const Widelands::ConstructionSite_Descr* 
> const constructionsitedescr)
> +             : L_BuildingDescription(constructionsitedescr) {
> +     }
> +     L_ConstructionSiteDescription(lua_State* L) : L_BuildingDescription(L) {
> +     }
> +
> +     /*
> +      * Properties
> +      */
> +
> +     /*
> +      * Lua methods
> +      */
> +
> +     /*
> +      * C methods
> +      */
> +
> +private:
> +     CASTED_GET_DESCRIPTION(ConstructionSite_Descr);
> +};
> +
> +
>  class L_ProductionSiteDescription : public L_BuildingDescription {
>  public:
>       LUNA_CLASS_HEAD(L_ProductionSiteDescription);
> @@ -428,10 +458,9 @@
>        * attributes
>        */
>       int get___hash(lua_State *);
> +     int get_descr(lua_State *);
> +     int get_name(lua_State *);
>       int get_serial(lua_State *);
> -     int get_type(lua_State *);
> -     int get_name(lua_State *);
> -     int get_descname(lua_State *);
>  
>       /*
>        * Lua Methods
> 


-- 
https://code.launchpad.net/~widelands-dev/widelands/bug-1341081/+merge/227107
Your team Widelands Developers is subscribed to branch 
lp:~widelands-dev/widelands/bug-1341081.

_______________________________________________
Mailing list: https://launchpad.net/~widelands-dev
Post to     : widelands-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~widelands-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to