Mercurial > hg > openttd
changeset 15963:3877138a17d5 draft
(svn r20651) -Codechange: add a function to determine whether an object is available and use it
author | rubidium <rubidium@openttd.org> |
---|---|
date | Sat, 28 Aug 2010 17:36:28 +0000 |
parents | 397063a81cfa |
children | f8b2485b1bd7 |
files | src/newgrf_object.cpp src/newgrf_object.h src/object_cmd.cpp |
diffstat | 3 files changed, 18 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -11,6 +11,7 @@ #include "stdafx.h" #include "core/mem_func.hpp" +#include "date_func.h" #include "newgrf.h" #include "newgrf_class_func.h" #include "newgrf_object.h" @@ -35,6 +36,16 @@ return ObjectSpec::Get(GetObjectType(tile)); } +bool ObjectSpec::IsAvailable() const +{ + return + this->enabled && + _date > this->introduction_date && + (_date < this->end_of_life_date || this->end_of_life_date < this->introduction_date + 365) && + HasBit(this->climate, _settings_game.game_creation.landscape) && + (flags & (_game_mode != GM_EDITOR ? OBJECT_FLAG_ONLY_IN_SCENEDIT : OBJECT_FLAG_ONLY_IN_GAME)) == 0; +} + /** This function initialize the spec arrays of objects. */ void ResetObjects() {
--- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -70,6 +70,12 @@ bool enabled; ///< Is this spec enabled? /** + * Check whether the object is available at this time. + * @return true if it is available. + */ + bool IsAvailable() const; + + /** * Get the cost for building a structure of this type. * @return The cost for building. */
--- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -122,7 +122,7 @@ ObjectType type = (ObjectType)GB(p1, 0, 8); const ObjectSpec *spec = ObjectSpec::Get(type); - if (!spec->enabled) return CMD_ERROR; + if (!spec->IsAvailable()) return CMD_ERROR; if (spec->flags & OBJECT_FLAG_ONLY_IN_SCENEDIT && (_game_mode != GM_EDITOR || _current_company != OWNER_NONE)) return CMD_ERROR; if (spec->flags & OBJECT_FLAG_ONLY_IN_GAME && (_game_mode != GM_NORMAL || _current_company > MAX_COMPANIES)) return CMD_ERROR;