Files
@ r24860:fb2788d47d86
Branch filter:
Location: cpp/openttd-patchpack/source/src/group.h - annotation
r24860:fb2788d47d86
3.8 KiB
text/x-c
Codechange: [OSX] Only keep a total dirty rect for drawing.
When drawing an 8bpp screen buffer, palette resolving was done for each
dirty rectangle. In areas with high activity, this would mean a pixel might
have been resolved multiple times. Also, if too many individual updates
were queued, the whole screen would be refreshed, even if unnecessary.
All other drivers only keep one overall dirty rect, so do it here as well.
When drawing an 8bpp screen buffer, palette resolving was done for each
dirty rectangle. In areas with high activity, this would mean a pixel might
have been resolved multiple times. Also, if too many individual updates
were queued, the whole screen would be refreshed, even if unnecessary.
All other drivers only keep one overall dirty rect, so do it here as well.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r17675:70155598b958 r6643:fa000ce7441e r6643:fa000ce7441e r6643:fa000ce7441e r6643:fa000ce7441e r8770:06d779b8eed1 r11969:3526c3cc75dc r10208:ef8fcc3dc4ca r8254:b96be9ebfc6e r8786:f24a6d1fba34 r23241:d2e564fdfd80 r24214:a65c412aafcc r6643:fa000ce7441e r11967:df0600d2c7e7 r17675:70155598b958 r7382:750cdd87ddef r18141:0f3c67cfc488 r18141:0f3c67cfc488 r18141:0f3c67cfc488 r18141:0f3c67cfc488 r18141:0f3c67cfc488 r18150:7beac77bd864 r18150:7beac77bd864 r18150:7beac77bd864 r18149:d084e89bff7d r18149:d084e89bff7d r18149:d084e89bff7d r18141:0f3c67cfc488 r18141:0f3c67cfc488 r18141:0f3c67cfc488 r18141:0f3c67cfc488 r18142:429bd06a51e9 r18149:d084e89bff7d r18149:d084e89bff7d r18149:d084e89bff7d r18149:d084e89bff7d r18149:d084e89bff7d r18149:d084e89bff7d r18150:7beac77bd864 r18150:7beac77bd864 r18150:7beac77bd864 r18150:7beac77bd864 r18150:7beac77bd864 r18150:7beac77bd864 r18143:604ab298ba0c r18143:604ab298ba0c r18146:ad1a95532d6a r18143:604ab298ba0c r18143:604ab298ba0c r18144:d858ebd27b4b r18149:d084e89bff7d r18143:604ab298ba0c r18149:d084e89bff7d r18142:429bd06a51e9 r18150:7beac77bd864 r18141:0f3c67cfc488 r18141:0f3c67cfc488 r17675:70155598b958 r11967:df0600d2c7e7 r24214:a65c412aafcc r23674:a5bafa1a02c5 r23661:3655a2df3316 r6643:fa000ce7441e r23661:3655a2df3316 r23661:3655a2df3316 r23661:3655a2df3316 r7382:750cdd87ddef r23661:3655a2df3316 r23549:b0b438170a84 r23661:3655a2df3316 r21353:433db3a92931 r10207:a1fc2f2a33db 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 r6643:fa000ce7441e r10207:a1fc2f2a33db r23548:3cdac86631ad r23548:3cdac86631ad r23548:3cdac86631ad r7258:6dd7a1782071 r12290:442d5d533a57 r12290:442d5d533a57 r6643:fa000ce7441e r10207:a1fc2f2a33db r21353:433db3a92931 r6643:fa000ce7441e r10696:8dfe83e30d01 r10696:8dfe83e30d01 r6643:fa000ce7441e | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file group.h Base class for groups and group functions. */
#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"
#include "livery.h"
#include <string>
typedef Pool<Group, GroupID, 16, 64000> GroupPool;
extern GroupPool _group_pool; ///< Pool of groups.
/** Statistics and caches on the vehicles in a group. */
struct GroupStatistics {
uint16 num_vehicle; ///< Number of vehicles.
uint16 *num_engines; ///< Caches the number of engines of each type the company owns.
bool autoreplace_defined; ///< Are any autoreplace rules set?
bool autoreplace_finished; ///< Have all autoreplacement finished?
uint16 num_profit_vehicle; ///< Number of vehicles considered for profit statistics;
Money profit_last_year; ///< Sum of profits for all vehicles.
GroupStatistics();
~GroupStatistics();
void Clear();
void ClearProfits()
{
this->num_profit_vehicle = 0;
this->profit_last_year = 0;
}
void ClearAutoreplace()
{
this->autoreplace_defined = false;
this->autoreplace_finished = false;
}
static GroupStatistics &Get(CompanyID company, GroupID id_g, VehicleType type);
static GroupStatistics &Get(const Vehicle *v);
static GroupStatistics &GetAllGroup(const Vehicle *v);
static void CountVehicle(const Vehicle *v, int delta);
static void CountEngine(const Vehicle *v, int delta);
static void VehicleReachedProfitAge(const Vehicle *v);
static void UpdateProfits();
static void UpdateAfterLoad();
static void UpdateAutoreplace(CompanyID company);
};
/** Group data. */
struct Group : GroupPool::PoolItem<&_group_pool> {
std::string name; ///< Group Name
Owner owner; ///< Group Owner
VehicleType vehicle_type; ///< Vehicle type of the group
bool replace_protection; ///< If set to true, the global autoreplace have no effect on the group
Livery livery; ///< Custom colour scheme for vehicles in this group
GroupStatistics statistics; ///< NOSAVE: Statistics and caches on the vehicles in the group.
bool folded; ///< NOSAVE: Is this group folded in the group view?
GroupID parent; ///< Parent group
Group(CompanyID owner = INVALID_COMPANY);
};
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;
}
uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e);
uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type);
uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type);
Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type);
void SetTrainGroupID(Train *v, GroupID grp);
void UpdateTrainGroupID(Train *v);
void RemoveVehicleFromGroup(const Vehicle *v);
void RemoveAllGroupsForCompany(const CompanyID company);
bool GroupIsInGroup(GroupID search, GroupID group);
extern GroupID _new_group_id;
#endif /* GROUP_H */
|