Changeset - r15953:2c33a6b20161
[Not reviewed]
master
0 3 0
rubidium - 14 years ago 2010-08-28 17:36:28
rubidium@openttd.org
(svn r20651) -Codechange: add a function to determine whether an object is available and use it
3 files changed with 18 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/newgrf_object.cpp
Show inline comments
 
@@ -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 @@ ObjectSpec _object_specs[NUM_OBJECTS];
 
	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()
 
{
src/newgrf_object.h
Show inline comments
 
@@ -70,6 +70,12 @@ struct ObjectSpec {
 
	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.
 
	 */
src/object_cmd.cpp
Show inline comments
 
@@ -122,7 +122,7 @@ CommandCost CmdBuildObject(TileIndex til
 

	
 
	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;
0 comments (0 inline, 0 general)