mirror of https://github.com/OpenTTD/OpenTTD
(svn r20651) -Codechange: add a function to determine whether an object is available and use it
parent
6348aa7964
commit
0a86eac2f1
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "core/mem_func.hpp"
|
#include "core/mem_func.hpp"
|
||||||
|
#include "date_func.h"
|
||||||
#include "newgrf.h"
|
#include "newgrf.h"
|
||||||
#include "newgrf_class_func.h"
|
#include "newgrf_class_func.h"
|
||||||
#include "newgrf_object.h"
|
#include "newgrf_object.h"
|
||||||
|
@ -35,6 +36,16 @@ ObjectSpec _object_specs[NUM_OBJECTS];
|
||||||
return ObjectSpec::Get(GetObjectType(tile));
|
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. */
|
/** This function initialize the spec arrays of objects. */
|
||||||
void ResetObjects()
|
void ResetObjects()
|
||||||
{
|
{
|
||||||
|
|
|
@ -69,6 +69,12 @@ struct ObjectSpec {
|
||||||
uint8 height; ///< The height of this structure, in heightlevels; max MAX_TILE_HEIGHT.
|
uint8 height; ///< The height of this structure, in heightlevels; max MAX_TILE_HEIGHT.
|
||||||
bool enabled; ///< Is this spec enabled?
|
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.
|
* Get the cost for building a structure of this type.
|
||||||
* @return The cost for building.
|
* @return The cost for building.
|
||||||
|
|
|
@ -122,7 +122,7 @@ CommandCost CmdBuildObject(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||||
|
|
||||||
ObjectType type = (ObjectType)GB(p1, 0, 8);
|
ObjectType type = (ObjectType)GB(p1, 0, 8);
|
||||||
const ObjectSpec *spec = ObjectSpec::Get(type);
|
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_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;
|
if (spec->flags & OBJECT_FLAG_ONLY_IN_GAME && (_game_mode != GM_NORMAL || _current_company > MAX_COMPANIES)) return CMD_ERROR;
|
||||||
|
|
Loading…
Reference in New Issue