Files @ r12162:c4894f5339c3
Branch filter:

Location: cpp/openttd-patchpack/source/src/group.h - annotation

rubidium
(svn r16583) -Update: the order of the language files so it's in sync with english.txt. Normally WT2 would do this, but only with activity for those languages. Now we'd like to the order to match so we can more easily spot import bugs while developing WT3.
r6643:fa000ce7441e
r6643:fa000ce7441e
r9111:983de9c5a848
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r8770:06d779b8eed1
r11969:3526c3cc75dc
r10208:ef8fcc3dc4ca
r8254:b96be9ebfc6e
r8786:f24a6d1fba34
r6643:fa000ce7441e
r11967:df0600d2c7e7
r11967:df0600d2c7e7
r7382:750cdd87ddef
r11967:df0600d2c7e7
r8258:08100da56269
r6643:fa000ce7441e
r6643:fa000ce7441e
r10207:a1fc2f2a33db
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r10207:a1fc2f2a33db
r7382:750cdd87ddef
r10207:a1fc2f2a33db
r11967:df0600d2c7e7
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r7258:6dd7a1782071
r7258:6dd7a1782071
r7258:6dd7a1782071
r7258:6dd7a1782071
r10207:a1fc2f2a33db
r7258:6dd7a1782071
r7258:6dd7a1782071
r7258:6dd7a1782071
r7258:6dd7a1782071
r7258:6dd7a1782071
r7258:6dd7a1782071
r6643:fa000ce7441e
r6643:fa000ce7441e
r11966:921bea0ca112
r11966:921bea0ca112
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r11962:0e3a6981e508
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r7258:6dd7a1782071
r7258:6dd7a1782071
r7258:6dd7a1782071
r7258:6dd7a1782071
r7258:6dd7a1782071
r7258:6dd7a1782071
r7258:6dd7a1782071
r10207:a1fc2f2a33db
r7258:6dd7a1782071
r6643:fa000ce7441e
r6643:fa000ce7441e
r11944:3b8f9f948e8d
r11944:3b8f9f948e8d
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r11944:3b8f9f948e8d
r11944:3b8f9f948e8d
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r6643:fa000ce7441e
r10207:a1fc2f2a33db
r6643:fa000ce7441e
r10696:8dfe83e30d01
r10696:8dfe83e30d01
r6643:fa000ce7441e
/* $Id$ */

/** @file group.h Base class from groups. */

#ifndef GROUP_H
#define GROUP_H

#include "group_type.h"
#include "core/pool_type.hpp"
#include "company_type.h"
#include "vehicle_type.h"
#include "engine_type.h"

typedef Pool<Group, GroupID, 16, 64000> GroupPool;
extern GroupPool _group_pool;

struct Group : GroupPool::PoolItem<&_group_pool> {
	char *name;                             ///< Group Name

	uint16 num_vehicle;                     ///< Number of vehicles wich belong to the group
	OwnerByte owner;                        ///< Group Owner
	VehicleTypeByte vehicle_type;           ///< Vehicle type of the group

	bool replace_protection;                ///< If set to true, the global autoreplace have no effect on the group
	uint16 *num_engines;                    ///< Caches the number of engines of each type the company owns (no need to save this)

	Group(CompanyID owner = INVALID_COMPANY);
	~Group();
};


static inline bool IsDefaultGroupID(GroupID index)
{
	return index == DEFAULT_GROUP;
}

/**
 * Checks if a GroupID stands for all vehicles of a company
 * @param id_g The GroupID to check
 * @return true is id_g is identical to ALL_GROUP
 */
static inline bool IsAllGroupID(GroupID id_g)
{
	return id_g == ALL_GROUP;
}

#define FOR_ALL_GROUPS_FROM(var, start) FOR_ALL_ITEMS_FROM(Group, group_index, var, start)
#define FOR_ALL_GROUPS(var) FOR_ALL_GROUPS_FROM(var, 0)

/**
 * Get the current size of the GroupPool
 */
static inline uint GetGroupArraySize()
{
	const Group *g;
	uint num = 0;

	FOR_ALL_GROUPS(g) num++;

	return num;
}

/**
 * Get the number of engines with EngineID id_e in the group with GroupID
 * id_g
 * @param id_g The GroupID of the group used
 * @param id_e The EngineID of the engine to count
 * @return The number of engines with EngineID id_e in the group
 */
uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e);

static inline void IncreaseGroupNumVehicle(GroupID id_g)
{
	Group *g = Group::GetIfValid(id_g);
	if (g != NULL) g->num_vehicle++;
}

static inline void DecreaseGroupNumVehicle(GroupID id_g)
{
	Group *g = Group::GetIfValid(id_g);
	if (g != NULL) g->num_vehicle--;
}


void InitializeGroup();
void SetTrainGroupID(Vehicle *v, GroupID grp);
void UpdateTrainGroupID(Vehicle *v);
void RemoveVehicleFromGroup(const Vehicle *v);
void RemoveAllGroupsForCompany(const CompanyID company);

extern GroupID _new_group_id;

#endif /* GROUP_H */