mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2026-07-22 02:29:43 +00:00
Codechange: replace 'new PoolItem(...' with 'PoolItem::Create(...'
This commit is contained in:
@@ -275,8 +275,8 @@ CommandCost CmdBuildAircraft(DoCommandFlags flags, TileIndex tile, const Engine
|
||||
tile = st->airport.GetHangarTile(st->airport.GetHangarNum(tile));
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
Aircraft *v = new Aircraft(); // aircraft
|
||||
Aircraft *u = new Aircraft(); // shadow
|
||||
Aircraft *v = Aircraft::Create(); // aircraft
|
||||
Aircraft *u = Aircraft::Create(); // shadow
|
||||
*ret = v;
|
||||
|
||||
v->direction = DIR_SE;
|
||||
@@ -366,7 +366,7 @@ CommandCost CmdBuildAircraft(DoCommandFlags flags, TileIndex tile, const Engine
|
||||
|
||||
/* Aircraft with 3 vehicles (chopper)? */
|
||||
if (v->subtype == AIR_HELICOPTER) {
|
||||
Aircraft *w = new Aircraft();
|
||||
Aircraft *w = Aircraft::Create();
|
||||
w->engine_type = e->index;
|
||||
w->direction = DIR_N;
|
||||
w->owner = _current_company;
|
||||
|
||||
@@ -82,7 +82,7 @@ uint CountArticulatedParts(EngineID engine_type, bool purchase_window)
|
||||
|
||||
std::unique_ptr<Vehicle> v;
|
||||
if (!purchase_window) {
|
||||
v = std::make_unique<Vehicle>();
|
||||
v = std::unique_ptr<Vehicle>(Vehicle::Create());
|
||||
v->engine_type = engine_type;
|
||||
v->owner = _current_company;
|
||||
}
|
||||
@@ -357,7 +357,7 @@ void AddArticulatedParts(Vehicle *first)
|
||||
|
||||
case VEH_TRAIN: {
|
||||
Train *front = Train::From(first);
|
||||
Train *t = new Train();
|
||||
Train *t = Train::Create();
|
||||
v->SetNext(t);
|
||||
v = t;
|
||||
|
||||
@@ -381,7 +381,7 @@ void AddArticulatedParts(Vehicle *first)
|
||||
|
||||
case VEH_ROAD: {
|
||||
RoadVehicle *front = RoadVehicle::From(first);
|
||||
RoadVehicle *rv = new RoadVehicle();
|
||||
RoadVehicle *rv = RoadVehicle::Create();
|
||||
v->SetNext(rv);
|
||||
v = rv;
|
||||
|
||||
|
||||
+1
-1
@@ -109,7 +109,7 @@ CommandCost AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, Engi
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
/* Insert before the first element */
|
||||
*erl = new EngineRenew(old_engine, new_engine, group, replace_when_old, *erl);
|
||||
*erl = EngineRenew::Create(old_engine, new_engine, group, replace_when_old, *erl);
|
||||
}
|
||||
|
||||
return CommandCost();
|
||||
|
||||
@@ -269,6 +269,17 @@ struct SpecializedStation : public BaseStation {
|
||||
return GetIfValid(GetStationIndex(tile));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new T-object in the station pool.
|
||||
* @param args... The arguments to the constructor.
|
||||
* @return The created object.
|
||||
*/
|
||||
template <typename... Targs>
|
||||
static inline T *Create(Targs &&... args)
|
||||
{
|
||||
return BaseStation::Create<T>(std::forward<Targs&&>(args)...);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a BaseStation to SpecializedStation with type checking.
|
||||
* @param st BaseStation pointer
|
||||
|
||||
+1
-1
@@ -96,7 +96,7 @@ CargoPacket *CargoPacket::Split(uint new_size)
|
||||
if (!CargoPacket::CanAllocateItem()) return nullptr;
|
||||
|
||||
Money fs = this->GetFeederShare(new_size);
|
||||
CargoPacket *cp_new = new CargoPacket(new_size, fs, *this);
|
||||
CargoPacket *cp_new = CargoPacket::Create(new_size, fs, *this);
|
||||
this->feeder_share -= fs;
|
||||
this->count -= new_size;
|
||||
return cp_new;
|
||||
|
||||
+1
-1
@@ -605,7 +605,7 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = CompanyID::Invalid(
|
||||
|
||||
Company *c;
|
||||
if (company == CompanyID::Invalid()) {
|
||||
c = new Company(STR_SV_UNNAMED, is_ai);
|
||||
c = Company::Create(STR_SV_UNNAMED, is_ai);
|
||||
} else {
|
||||
if (Company::IsValidID(company)) return nullptr;
|
||||
c = new (company) Company(STR_SV_UNNAMED, is_ai);
|
||||
|
||||
+15
-10
@@ -288,16 +288,8 @@ public:
|
||||
/** Type of the pool this item is going to be part of */
|
||||
typedef struct Pool<Titem, Tindex, Tgrowth_step, Tpool_type, Tcache> Pool;
|
||||
|
||||
/**
|
||||
* Allocates space for new Titem
|
||||
* @param size size of Titem
|
||||
* @return pointer to allocated memory
|
||||
* @note can never fail (return nullptr), use CanAllocate() to check first!
|
||||
*/
|
||||
inline void *operator new(size_t size)
|
||||
{
|
||||
return Tpool->GetNew(size);
|
||||
}
|
||||
/** Do not use new PoolItem, but rather PoolItem::Create. */
|
||||
inline void *operator new(size_t) = delete;
|
||||
|
||||
/**
|
||||
* Marks Titem as free. Its memory is released
|
||||
@@ -347,6 +339,19 @@ public:
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new T-object in the associated pool.
|
||||
* @param args... The arguments to the constructor.
|
||||
* @return The created object.
|
||||
*/
|
||||
template <typename T = Titem, typename... Targs>
|
||||
requires std::is_base_of_v<Titem, T>
|
||||
static inline T *Create(Targs &&... args)
|
||||
{
|
||||
void *data = Tpool->GetNew(sizeof(T));
|
||||
return ::new (data) T(std::forward<Targs&&>(args)...);
|
||||
}
|
||||
|
||||
/** Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function() */
|
||||
|
||||
/**
|
||||
|
||||
+14
-14
@@ -569,8 +569,8 @@ static bool DisasterTick_Big_Ufo(DisasterVehicle *v)
|
||||
delete v;
|
||||
return false;
|
||||
}
|
||||
DisasterVehicle *u = new DisasterVehicle(-6 * (int)TILE_SIZE, v->y_pos, DIR_SW, ST_BIG_UFO_DESTROYER, v->index);
|
||||
DisasterVehicle *w = new DisasterVehicle(-6 * (int)TILE_SIZE, v->y_pos, DIR_SW, ST_BIG_UFO_DESTROYER_SHADOW);
|
||||
DisasterVehicle *u = DisasterVehicle::Create(-6 * (int)TILE_SIZE, v->y_pos, DIR_SW, ST_BIG_UFO_DESTROYER, v->index);
|
||||
DisasterVehicle *w = DisasterVehicle::Create(-6 * (int)TILE_SIZE, v->y_pos, DIR_SW, ST_BIG_UFO_DESTROYER_SHADOW);
|
||||
u->SetNext(w);
|
||||
} else if (v->state == 0) {
|
||||
int x = TileX(v->dest_tile) * TILE_SIZE;
|
||||
@@ -743,9 +743,9 @@ static void Disaster_Zeppeliner_Init()
|
||||
}
|
||||
}
|
||||
|
||||
DisasterVehicle *v = new DisasterVehicle(x, 0, DIR_SE, ST_ZEPPELINER);
|
||||
DisasterVehicle *v = DisasterVehicle::Create(x, 0, DIR_SE, ST_ZEPPELINER);
|
||||
/* Allocate shadow */
|
||||
DisasterVehicle *u = new DisasterVehicle(x, 0, DIR_SE, ST_ZEPPELINER_SHADOW);
|
||||
DisasterVehicle *u = DisasterVehicle::Create(x, 0, DIR_SE, ST_ZEPPELINER_SHADOW);
|
||||
v->SetNext(u);
|
||||
}
|
||||
|
||||
@@ -759,11 +759,11 @@ static void Disaster_Small_Ufo_Init()
|
||||
if (!Vehicle::CanAllocateItem(2)) return;
|
||||
|
||||
int x = TileX(RandomTile()) * TILE_SIZE + TILE_SIZE / 2;
|
||||
DisasterVehicle *v = new DisasterVehicle(x, 0, DIR_SE, ST_SMALL_UFO);
|
||||
DisasterVehicle *v = DisasterVehicle::Create(x, 0, DIR_SE, ST_SMALL_UFO);
|
||||
v->dest_tile = TileXY(Map::SizeX() / 2, Map::SizeY() / 2);
|
||||
|
||||
/* Allocate shadow */
|
||||
DisasterVehicle *u = new DisasterVehicle(x, 0, DIR_SE, ST_SMALL_UFO_SHADOW);
|
||||
DisasterVehicle *u = DisasterVehicle::Create(x, 0, DIR_SE, ST_SMALL_UFO_SHADOW);
|
||||
v->SetNext(u);
|
||||
}
|
||||
|
||||
@@ -788,8 +788,8 @@ static void Disaster_Airplane_Init()
|
||||
int x = (Map::SizeX() + 9) * TILE_SIZE - 1;
|
||||
int y = TileY(found->location.tile) * TILE_SIZE + 37;
|
||||
|
||||
DisasterVehicle *v = new DisasterVehicle(x, y, DIR_NE, ST_AIRPLANE);
|
||||
DisasterVehicle *u = new DisasterVehicle(x, y, DIR_NE, ST_AIRPLANE_SHADOW);
|
||||
DisasterVehicle *v = DisasterVehicle::Create(x, y, DIR_NE, ST_AIRPLANE);
|
||||
DisasterVehicle *u = DisasterVehicle::Create(x, y, DIR_NE, ST_AIRPLANE_SHADOW);
|
||||
v->SetNext(u);
|
||||
}
|
||||
|
||||
@@ -813,11 +813,11 @@ static void Disaster_Helicopter_Init()
|
||||
int x = -16 * (int)TILE_SIZE;
|
||||
int y = TileY(found->location.tile) * TILE_SIZE + 37;
|
||||
|
||||
DisasterVehicle *v = new DisasterVehicle(x, y, DIR_SW, ST_HELICOPTER);
|
||||
DisasterVehicle *u = new DisasterVehicle(x, y, DIR_SW, ST_HELICOPTER_SHADOW);
|
||||
DisasterVehicle *v = DisasterVehicle::Create(x, y, DIR_SW, ST_HELICOPTER);
|
||||
DisasterVehicle *u = DisasterVehicle::Create(x, y, DIR_SW, ST_HELICOPTER_SHADOW);
|
||||
v->SetNext(u);
|
||||
|
||||
DisasterVehicle *w = new DisasterVehicle(x, y, DIR_SW, ST_HELICOPTER_ROTORS);
|
||||
DisasterVehicle *w = DisasterVehicle::Create(x, y, DIR_SW, ST_HELICOPTER_ROTORS);
|
||||
u->SetNext(w);
|
||||
}
|
||||
|
||||
@@ -831,11 +831,11 @@ static void Disaster_Big_Ufo_Init()
|
||||
int x = TileX(RandomTile()) * TILE_SIZE + TILE_SIZE / 2;
|
||||
int y = Map::MaxX() * TILE_SIZE - 1;
|
||||
|
||||
DisasterVehicle *v = new DisasterVehicle(x, y, DIR_NW, ST_BIG_UFO);
|
||||
DisasterVehicle *v = DisasterVehicle::Create(x, y, DIR_NW, ST_BIG_UFO);
|
||||
v->dest_tile = TileXY(Map::SizeX() / 2, Map::SizeY() / 2);
|
||||
|
||||
/* Allocate shadow */
|
||||
DisasterVehicle *u = new DisasterVehicle(x, y, DIR_NW, ST_BIG_UFO_SHADOW);
|
||||
DisasterVehicle *u = DisasterVehicle::Create(x, y, DIR_NW, ST_BIG_UFO_SHADOW);
|
||||
v->SetNext(u);
|
||||
}
|
||||
|
||||
@@ -859,7 +859,7 @@ static void Disaster_Submarine_Init(DisasterSubType subtype)
|
||||
}
|
||||
if (!IsWaterTile(TileVirtXY(x, y))) return;
|
||||
|
||||
new DisasterVehicle(x, y, dir, subtype);
|
||||
DisasterVehicle::Create(x, y, dir, subtype);
|
||||
}
|
||||
|
||||
/* Curious submarine #1, just floats around */
|
||||
|
||||
+1
-1
@@ -1259,7 +1259,7 @@ void PrepareUnload(Vehicle *front_v)
|
||||
* limit in number of CargoPayments. Can't go wrong. */
|
||||
static_assert(CargoPaymentPool::MAX_SIZE == VehiclePool::MAX_SIZE);
|
||||
assert(CargoPayment::CanAllocateItem());
|
||||
front_v->cargo_payment = new CargoPayment(front_v);
|
||||
front_v->cargo_payment = CargoPayment::Create(front_v);
|
||||
|
||||
std::vector<StationID> next_station;
|
||||
front_v->GetNextStoppingStation(next_station);
|
||||
|
||||
@@ -567,7 +567,7 @@ EffectVehicle *CreateEffectVehicle(int x, int y, int z, EffectVehicleType type)
|
||||
{
|
||||
if (!Vehicle::CanAllocateItem()) return nullptr;
|
||||
|
||||
EffectVehicle *v = new EffectVehicle();
|
||||
EffectVehicle *v = EffectVehicle::Create();
|
||||
v->subtype = type;
|
||||
v->x_pos = x;
|
||||
v->y_pos = y;
|
||||
|
||||
+1
-1
@@ -85,7 +85,7 @@ std::tuple<CommandCost, GoalID> CmdCreateGoal(DoCommandFlags flags, CompanyID co
|
||||
if (!Goal::IsValidGoalDestination(company, type, dest)) return { CMD_ERROR, GoalID::Invalid() };
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
Goal *g = new Goal(type, dest, company, text);
|
||||
Goal *g = Goal::Create(type, dest, company, text);
|
||||
|
||||
if (g->company == CompanyID::Invalid()) {
|
||||
InvalidateWindowClassesData(WC_GOALS_LIST);
|
||||
|
||||
+1
-1
@@ -349,7 +349,7 @@ std::tuple<CommandCost, GroupID> CmdCreateGroup(DoCommandFlags flags, VehicleTyp
|
||||
}
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
Group *g = new Group(_current_company, vt);
|
||||
Group *g = Group::Create(_current_company, vt);
|
||||
|
||||
Company *c = Company::Get(g->owner);
|
||||
g->number = c->freegroups.UseID(c->freegroups.NextID());
|
||||
|
||||
@@ -2043,7 +2043,7 @@ static CommandCost CreateNewIndustryHelper(TileIndex tile, IndustryType type, Do
|
||||
if (!Industry::CanAllocateItem()) return CommandCost(STR_ERROR_TOO_MANY_INDUSTRIES);
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
*ip = new Industry(tile);
|
||||
*ip = Industry::Create(tile);
|
||||
if (!custom_shape_check) CheckIfCanLevelIndustryPlatform(tile, {DoCommandFlag::NoWater, DoCommandFlag::Execute}, layout);
|
||||
DoCreateNewIndustry(*ip, tile, type, layout, layout_index, t, founder, random_initial_bits);
|
||||
}
|
||||
|
||||
+2
-2
@@ -60,7 +60,7 @@ std::tuple<CommandCost, LeagueTableID> CmdCreateLeagueTable(DoCommandFlags flags
|
||||
if (title.empty()) return { CMD_ERROR, LeagueTableID::Invalid() };
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
LeagueTable *lt = new LeagueTable(title, header, footer);
|
||||
LeagueTable *lt = LeagueTable::Create(title, header, footer);
|
||||
return { CommandCost(), lt->index };
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ std::tuple<CommandCost, LeagueTableElementID> CmdCreateLeagueTableElement(DoComm
|
||||
if (company != CompanyID::Invalid() && !Company::IsValidID(company)) return { CMD_ERROR, LeagueTableElementID::Invalid() };
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
LeagueTableElement *lte = new LeagueTableElement(table, rating, company, text, score, link);
|
||||
LeagueTableElement *lte = LeagueTableElement::Create(table, rating, company, text, score, link);
|
||||
InvalidateWindowData(WC_COMPANY_LEAGUE, table);
|
||||
return { CommandCost(), lte->index };
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ void LinkGraphSchedule::SpawnNext()
|
||||
assert(next == LinkGraph::Get(next->index));
|
||||
this->schedule.pop_front();
|
||||
if (LinkGraphJob::CanAllocateItem()) {
|
||||
LinkGraphJob *job = new LinkGraphJob(*next);
|
||||
LinkGraphJob *job = LinkGraphJob::Create(*next);
|
||||
job->SpawnThread();
|
||||
this->running.push_back(job);
|
||||
} else {
|
||||
|
||||
@@ -568,7 +568,7 @@ NetworkAddress ParseConnectionString(std::string_view connection_string, uint16_
|
||||
/* Register the login */
|
||||
_network_clients_connected++;
|
||||
|
||||
ServerNetworkGameSocketHandler *cs = new ServerNetworkGameSocketHandler(s);
|
||||
ServerNetworkGameSocketHandler *cs = ServerNetworkGameSocketHandler::Create(s);
|
||||
cs->client_address = address; // Save the IP of the client
|
||||
|
||||
InvalidateWindowData(WC_CLIENT_LIST, 0);
|
||||
@@ -836,7 +836,7 @@ static void NetworkInitGameInfo()
|
||||
|
||||
/* There should be always space for the server. */
|
||||
assert(NetworkClientInfo::CanAllocateItem());
|
||||
NetworkClientInfo *ci = new NetworkClientInfo(CLIENT_ID_SERVER);
|
||||
NetworkClientInfo *ci = NetworkClientInfo::Create(CLIENT_ID_SERVER);
|
||||
ci->client_playas = COMPANY_SPECTATOR;
|
||||
|
||||
ci->client_name = _settings_client.network.client_name;
|
||||
|
||||
@@ -115,7 +115,7 @@ ServerNetworkAdminSocketHandler::~ServerNetworkAdminSocketHandler()
|
||||
*/
|
||||
/* static */ void ServerNetworkAdminSocketHandler::AcceptConnection(SOCKET s, const NetworkAddress &address)
|
||||
{
|
||||
ServerNetworkAdminSocketHandler *as = new ServerNetworkAdminSocketHandler(s);
|
||||
ServerNetworkAdminSocketHandler *as = ServerNetworkAdminSocketHandler::Create(s);
|
||||
as->address = address; // Save the IP of the client
|
||||
}
|
||||
|
||||
|
||||
@@ -565,7 +565,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Pac
|
||||
if (!NetworkClientInfo::CanAllocateItem()) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
||||
|
||||
/* We don't have this client_id yet, find an empty client_id, and put the data there */
|
||||
ci = new NetworkClientInfo(client_id);
|
||||
ci = NetworkClientInfo::Create(client_id);
|
||||
ci->client_playas = playas;
|
||||
if (client_id == _network_own_client_id) this->SetInfo(ci);
|
||||
|
||||
|
||||
@@ -914,7 +914,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_IDENTIFY(Packet
|
||||
}
|
||||
|
||||
assert(NetworkClientInfo::CanAllocateItem());
|
||||
NetworkClientInfo *ci = new NetworkClientInfo(this->client_id);
|
||||
NetworkClientInfo *ci = NetworkClientInfo::Create(this->client_id);
|
||||
this->SetInfo(ci);
|
||||
ci->join_date = TimerGameEconomy::date;
|
||||
ci->client_name = std::move(client_name);
|
||||
|
||||
+1
-1
@@ -263,7 +263,7 @@ Engine *GetNewEngine(const GRFFile *file, VehicleType type, uint16_t internal_id
|
||||
size_t engine_pool_size = Engine::GetPoolSize();
|
||||
|
||||
/* ... it's not, so create a new one based off an existing engine */
|
||||
Engine *e = new Engine(type, internal_id);
|
||||
Engine *e = Engine::Create(type, internal_id);
|
||||
e->grf_prop.SetGRFFile(file);
|
||||
|
||||
/* Reserve the engine slot */
|
||||
|
||||
@@ -286,7 +286,7 @@ static const SpriteGroup *GetCallbackResultGroup(uint16_t value)
|
||||
|
||||
/* Result value is not present, so make it and add to cache. */
|
||||
assert(CallbackResultSpriteGroup::CanAllocateItem());
|
||||
const SpriteGroup *group = new CallbackResultSpriteGroup(value);
|
||||
const SpriteGroup *group = CallbackResultSpriteGroup::Create(value);
|
||||
it = _cached_callback_groups.emplace(it, value, group->index);
|
||||
return group;
|
||||
}
|
||||
@@ -330,7 +330,7 @@ static const SpriteGroup *CreateGroupFromGroupID(GrfSpecFeature feature, uint8_t
|
||||
assert(spriteset_start + num_sprites <= _cur_gps.spriteid);
|
||||
|
||||
assert(ResultSpriteGroup::CanAllocateItem());
|
||||
return new ResultSpriteGroup(spriteset_start, num_sprites);
|
||||
return ResultSpriteGroup::Create(spriteset_start, num_sprites);
|
||||
}
|
||||
|
||||
/* Action 0x02 */
|
||||
@@ -374,7 +374,7 @@ static void NewSpriteGroup(ByteReader &buf)
|
||||
uint8_t varsize;
|
||||
|
||||
assert(DeterministicSpriteGroup::CanAllocateItem());
|
||||
DeterministicSpriteGroup *group = new DeterministicSpriteGroup();
|
||||
DeterministicSpriteGroup *group = DeterministicSpriteGroup::Create();
|
||||
group->nfo_line = _cur_gps.nfo_line;
|
||||
act_group = group;
|
||||
group->var_scope = HasBit(type, 1) ? VSG_SCOPE_PARENT : VSG_SCOPE_SELF;
|
||||
@@ -494,7 +494,7 @@ static void NewSpriteGroup(ByteReader &buf)
|
||||
case 0x84: // Relative scope
|
||||
{
|
||||
assert(RandomizedSpriteGroup::CanAllocateItem());
|
||||
RandomizedSpriteGroup *group = new RandomizedSpriteGroup();
|
||||
RandomizedSpriteGroup *group = RandomizedSpriteGroup::Create();
|
||||
group->nfo_line = _cur_gps.nfo_line;
|
||||
act_group = group;
|
||||
group->var_scope = HasBit(type, 1) ? VSG_SCOPE_PARENT : VSG_SCOPE_SELF;
|
||||
@@ -593,7 +593,7 @@ static void NewSpriteGroup(ByteReader &buf)
|
||||
}
|
||||
|
||||
assert(RealSpriteGroup::CanAllocateItem());
|
||||
RealSpriteGroup *group = new RealSpriteGroup();
|
||||
RealSpriteGroup *group = RealSpriteGroup::Create();
|
||||
group->nfo_line = _cur_gps.nfo_line;
|
||||
act_group = group;
|
||||
|
||||
@@ -622,7 +622,7 @@ static void NewSpriteGroup(ByteReader &buf)
|
||||
uint8_t num_building_sprites = std::max((uint8_t)1, type);
|
||||
|
||||
assert(TileLayoutSpriteGroup::CanAllocateItem());
|
||||
TileLayoutSpriteGroup *group = new TileLayoutSpriteGroup();
|
||||
TileLayoutSpriteGroup *group = TileLayoutSpriteGroup::Create();
|
||||
group->nfo_line = _cur_gps.nfo_line;
|
||||
act_group = group;
|
||||
|
||||
@@ -638,7 +638,7 @@ static void NewSpriteGroup(ByteReader &buf)
|
||||
}
|
||||
|
||||
assert(IndustryProductionSpriteGroup::CanAllocateItem());
|
||||
IndustryProductionSpriteGroup *group = new IndustryProductionSpriteGroup();
|
||||
IndustryProductionSpriteGroup *group = IndustryProductionSpriteGroup::Create();
|
||||
group->nfo_line = _cur_gps.nfo_line;
|
||||
act_group = group;
|
||||
group->version = type;
|
||||
|
||||
@@ -213,7 +213,7 @@ uint32_t AirportResolverObject::GetDebugID() const
|
||||
/* Create storage on first modification. */
|
||||
uint32_t grfid = (this->ro.grffile != nullptr) ? this->ro.grffile->grfid : 0;
|
||||
assert(PersistentStorage::CanAllocateItem());
|
||||
this->st->airport.psa = new PersistentStorage(grfid, GSF_AIRPORTS, this->st->airport.tile);
|
||||
this->st->airport.psa = PersistentStorage::Create(grfid, GSF_AIRPORTS, this->st->airport.tile);
|
||||
}
|
||||
this->st->airport.psa->StoreValue(pos, value);
|
||||
}
|
||||
|
||||
@@ -448,7 +448,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(const ResolverObject &objec
|
||||
/* Create storage on first modification. */
|
||||
const IndustrySpec *indsp = GetIndustrySpec(this->industry->type);
|
||||
assert(PersistentStorage::CanAllocateItem());
|
||||
this->industry->psa = new PersistentStorage(indsp->grf_prop.grfid, GSF_INDUSTRIES, this->industry->location.tile);
|
||||
this->industry->psa = PersistentStorage::Create(indsp->grf_prop.grfid, GSF_INDUSTRIES, this->industry->location.tile);
|
||||
}
|
||||
|
||||
this->industry->psa->StoreValue(pos, value);
|
||||
|
||||
+34
-14
@@ -59,10 +59,30 @@ public:
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Class defining some overloaded accessors so we don't have to cast SpriteGroups that often
|
||||
*/
|
||||
template <class T>
|
||||
struct SpecializedSpriteGroup : public SpriteGroup {
|
||||
inline SpecializedSpriteGroup() : SpriteGroup() {}
|
||||
|
||||
/**
|
||||
* Creates a new T-object in the SpriteGroup pool.
|
||||
* @param args... The arguments to the constructor.
|
||||
* @return The created object.
|
||||
*/
|
||||
template <typename... Targs>
|
||||
static inline T *Create(Targs &&... args)
|
||||
{
|
||||
return SpriteGroup::Create<T>(std::forward<Targs&&>(args)...);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/* 'Real' sprite groups contain a list of other result or callback sprite
|
||||
* groups. */
|
||||
struct RealSpriteGroup : SpriteGroup {
|
||||
RealSpriteGroup() : SpriteGroup() {}
|
||||
struct RealSpriteGroup : SpecializedSpriteGroup<RealSpriteGroup> {
|
||||
RealSpriteGroup() : SpecializedSpriteGroup<RealSpriteGroup>() {}
|
||||
|
||||
/* Loaded = in motion, loading = not moving
|
||||
* Each group contains several spritesets, for various loading stages */
|
||||
@@ -156,8 +176,8 @@ struct DeterministicSpriteGroupRange {
|
||||
};
|
||||
|
||||
|
||||
struct DeterministicSpriteGroup : SpriteGroup {
|
||||
DeterministicSpriteGroup() : SpriteGroup() {}
|
||||
struct DeterministicSpriteGroup : SpecializedSpriteGroup<DeterministicSpriteGroup> {
|
||||
DeterministicSpriteGroup() : SpecializedSpriteGroup<DeterministicSpriteGroup>() {}
|
||||
|
||||
VarSpriteGroupScope var_scope{};
|
||||
DeterministicSpriteGroupSize size{};
|
||||
@@ -178,8 +198,8 @@ enum RandomizedSpriteGroupCompareMode : uint8_t {
|
||||
RSG_CMP_ALL,
|
||||
};
|
||||
|
||||
struct RandomizedSpriteGroup : SpriteGroup {
|
||||
RandomizedSpriteGroup() : SpriteGroup() {}
|
||||
struct RandomizedSpriteGroup : SpecializedSpriteGroup<RandomizedSpriteGroup> {
|
||||
RandomizedSpriteGroup() : SpecializedSpriteGroup<RandomizedSpriteGroup>() {}
|
||||
|
||||
VarSpriteGroupScope var_scope{}; ///< Take this object:
|
||||
|
||||
@@ -198,12 +218,12 @@ protected:
|
||||
|
||||
/* This contains a callback result. A failed callback has a value of
|
||||
* CALLBACK_FAILED */
|
||||
struct CallbackResultSpriteGroup : SpriteGroup {
|
||||
struct CallbackResultSpriteGroup : SpecializedSpriteGroup<CallbackResultSpriteGroup> {
|
||||
/**
|
||||
* Creates a spritegroup representing a callback result
|
||||
* @param value The value that was used to represent this callback result
|
||||
*/
|
||||
explicit CallbackResultSpriteGroup(CallbackResult value) : SpriteGroup(), result(value) {}
|
||||
explicit CallbackResultSpriteGroup(CallbackResult value) : SpecializedSpriteGroup<CallbackResultSpriteGroup>(), result(value) {}
|
||||
|
||||
CallbackResult result = 0;
|
||||
|
||||
@@ -214,14 +234,14 @@ protected:
|
||||
|
||||
/* A result sprite group returns the first SpriteID and the number of
|
||||
* sprites in the set */
|
||||
struct ResultSpriteGroup : SpriteGroup {
|
||||
struct ResultSpriteGroup : SpecializedSpriteGroup<ResultSpriteGroup> {
|
||||
/**
|
||||
* Creates a spritegroup representing a sprite number result.
|
||||
* @param sprite The sprite number.
|
||||
* @param num_sprites The number of sprites per set.
|
||||
* @return A spritegroup representing the sprite number result.
|
||||
*/
|
||||
ResultSpriteGroup(SpriteID sprite, uint8_t num_sprites) : SpriteGroup(), num_sprites(num_sprites), sprite(sprite) {}
|
||||
ResultSpriteGroup(SpriteID sprite, uint8_t num_sprites) : SpecializedSpriteGroup<ResultSpriteGroup>(), num_sprites(num_sprites), sprite(sprite) {}
|
||||
|
||||
uint8_t num_sprites = 0;
|
||||
SpriteID sprite = 0;
|
||||
@@ -233,8 +253,8 @@ protected:
|
||||
/**
|
||||
* Action 2 sprite layout for houses, industry tiles, objects and airport tiles.
|
||||
*/
|
||||
struct TileLayoutSpriteGroup : SpriteGroup {
|
||||
TileLayoutSpriteGroup() : SpriteGroup() {}
|
||||
struct TileLayoutSpriteGroup : SpecializedSpriteGroup<TileLayoutSpriteGroup> {
|
||||
TileLayoutSpriteGroup() : SpecializedSpriteGroup<TileLayoutSpriteGroup>() {}
|
||||
|
||||
NewGRFSpriteLayout dts{};
|
||||
|
||||
@@ -244,8 +264,8 @@ protected:
|
||||
ResolverResult Resolve(ResolverObject &) const override { return this; }
|
||||
};
|
||||
|
||||
struct IndustryProductionSpriteGroup : SpriteGroup {
|
||||
IndustryProductionSpriteGroup() : SpriteGroup() {}
|
||||
struct IndustryProductionSpriteGroup : SpecializedSpriteGroup<IndustryProductionSpriteGroup> {
|
||||
IndustryProductionSpriteGroup() : SpecializedSpriteGroup<IndustryProductionSpriteGroup>() {}
|
||||
|
||||
uint8_t version = 0; ///< Production callback version used, or 0xFF if marked invalid
|
||||
uint8_t num_input = 0; ///< How many subtract_input values are valid
|
||||
|
||||
+1
-1
@@ -156,7 +156,7 @@ static uint16_t TownHistoryHelper(const Town *t, CargoLabel label, uint period,
|
||||
|
||||
/* Create a new storage. */
|
||||
assert(PersistentStorage::CanAllocateItem());
|
||||
PersistentStorage *psa = new PersistentStorage(grfid, GSF_FAKE_TOWNS, this->t->xy);
|
||||
PersistentStorage *psa = PersistentStorage::Create(grfid, GSF_FAKE_TOWNS, this->t->xy);
|
||||
psa->StoreValue(pos, value);
|
||||
t->psa_list.push_back(psa);
|
||||
}
|
||||
|
||||
+1
-1
@@ -90,7 +90,7 @@ void BuildObject(ObjectType type, TileIndex tile, CompanyID owner, Town *town, u
|
||||
const ObjectSpec *spec = ObjectSpec::Get(type);
|
||||
|
||||
TileArea ta(tile, GB(spec->size, HasBit(view, 0) ? 4 : 0, 4), GB(spec->size, HasBit(view, 0) ? 0 : 4, 4));
|
||||
Object *o = new Object(type, town == nullptr ? CalcClosestTownFromTile(tile) : town, ta, TimerGameCalendar::date, view);
|
||||
Object *o = Object::Create(type, town == nullptr ? CalcClosestTownFromTile(tile) : town, ta, TimerGameCalendar::date, view);
|
||||
|
||||
/* If nothing owns the object, the colour will be random. Otherwise
|
||||
* get the colour from the company's livery settings. */
|
||||
|
||||
@@ -57,7 +57,7 @@ void OrderBackup::DoRestore(Vehicle *v)
|
||||
if (this->clone != nullptr) {
|
||||
Command<CMD_CLONE_ORDER>::Do(DoCommandFlag::Execute, CO_SHARE, v->index, this->clone->index);
|
||||
} else if (!this->orders.empty() && OrderList::CanAllocateItem()) {
|
||||
v->orders = new OrderList(std::move(this->orders), v);
|
||||
v->orders = OrderList::Create(std::move(this->orders), v);
|
||||
/* Make sure buoys/oil rigs are updated in the station list. */
|
||||
InvalidateWindowClassesData(WC_STATION_LIST, 0);
|
||||
}
|
||||
@@ -89,7 +89,7 @@ void OrderBackup::DoRestore(Vehicle *v)
|
||||
if (ob->user == user) delete ob;
|
||||
}
|
||||
if (OrderBackup::CanAllocateItem()) {
|
||||
new OrderBackup(v, user);
|
||||
OrderBackup::Create(v, user);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -45,12 +45,13 @@ private:
|
||||
std::vector<Order> orders; ///< The actual orders if the vehicle was not a clone.
|
||||
uint32_t old_order_index = 0;
|
||||
|
||||
void DoRestore(Vehicle *v);
|
||||
|
||||
friend OrderBackupPool::PoolItem<&_order_backup_pool>;
|
||||
/** Creation for savegame restoration. */
|
||||
OrderBackup() = default;
|
||||
OrderBackup(const Vehicle *v, uint32_t user);
|
||||
|
||||
void DoRestore(Vehicle *v);
|
||||
|
||||
public:
|
||||
~OrderBackup();
|
||||
|
||||
|
||||
+2
-2
@@ -847,7 +847,7 @@ void InsertOrder(Vehicle *v, Order &&new_o, VehicleOrderID sel_ord)
|
||||
{
|
||||
/* Create new order and link in list */
|
||||
if (v->orders == nullptr) {
|
||||
v->orders = new OrderList(std::move(new_o), v);
|
||||
v->orders = OrderList::Create(std::move(new_o), v);
|
||||
} else {
|
||||
v->orders->InsertOrderAt(std::move(new_o), sel_ord);
|
||||
}
|
||||
@@ -1604,7 +1604,7 @@ CommandCost CmdCloneOrder(DoCommandFlags flags, CloneOptions action, VehicleID v
|
||||
}
|
||||
|
||||
assert(OrderList::CanAllocateItem());
|
||||
dst->orders = new OrderList(std::move(dst_orders), dst);
|
||||
dst->orders = OrderList::Create(std::move(dst_orders), dst);
|
||||
|
||||
InvalidateVehicleOrder(dst, VIWD_REMOVE_ALL_ORDERS);
|
||||
|
||||
|
||||
+1
-1
@@ -1008,7 +1008,7 @@ CommandCost CmdBuildTrainDepot(DoCommandFlags flags, TileIndex tile, RailType ra
|
||||
if (rotate_existing_depot) {
|
||||
SetRailDepotExitDirection(tile, dir);
|
||||
} else {
|
||||
Depot *d = new Depot(tile);
|
||||
Depot *d = Depot::Create(tile);
|
||||
|
||||
MakeRailDepot(tile, _current_company, d->index, dir, railtype);
|
||||
MakeDefaultName(d);
|
||||
|
||||
+1
-1
@@ -1176,7 +1176,7 @@ CommandCost CmdBuildRoadDepot(DoCommandFlags flags, TileIndex tile, RoadType rt,
|
||||
if (rotate_existing_depot) {
|
||||
SetRoadDepotExitDirection(tile, dir);
|
||||
} else {
|
||||
Depot *dep = new Depot(tile);
|
||||
Depot *dep = Depot::Create(tile);
|
||||
MakeRoadDepot(tile, _current_company, dep->index, dir, rt);
|
||||
MakeDefaultName(dep);
|
||||
|
||||
|
||||
+1
-1
@@ -269,7 +269,7 @@ CommandCost CmdBuildRoadVehicle(DoCommandFlags flags, TileIndex tile, const Engi
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
const RoadVehicleInfo *rvi = &e->VehInfo<RoadVehicleInfo>();
|
||||
|
||||
RoadVehicle *v = new RoadVehicle();
|
||||
RoadVehicle *v = RoadVehicle::Create();
|
||||
*ret = v;
|
||||
v->direction = DiagDirToDir(GetRoadDepotDirection(tile));
|
||||
v->owner = _current_company;
|
||||
|
||||
@@ -961,7 +961,7 @@ bool AfterLoadGame()
|
||||
/* From this version on there can be multiple road stops of the
|
||||
* same type per station. Convert the existing stops to the new
|
||||
* internal data structure. */
|
||||
RoadStop *rs = new RoadStop(t);
|
||||
RoadStop *rs = RoadStop::Create(t);
|
||||
|
||||
RoadStop **head =
|
||||
IsTruckStop(t) ? &st->truck_stops : &st->bus_stops;
|
||||
@@ -2156,7 +2156,7 @@ bool AfterLoadGame()
|
||||
SlError(STR_ERROR_TOO_MANY_OBJECTS);
|
||||
}
|
||||
|
||||
Object *o = new Object();
|
||||
Object *o = Object::Create();
|
||||
o->location.tile = (TileIndex)t;
|
||||
o->location.w = size;
|
||||
o->location.h = size;
|
||||
@@ -2251,7 +2251,7 @@ bool AfterLoadGame()
|
||||
* assert() in Pool::GetNew() happy by calling CanAllocateItem(). */
|
||||
static_assert(CargoPaymentPool::MAX_SIZE == VehiclePool::MAX_SIZE);
|
||||
assert(CargoPayment::CanAllocateItem());
|
||||
if (v->cargo_payment == nullptr) v->cargo_payment = new CargoPayment(v);
|
||||
if (v->cargo_payment == nullptr) v->cargo_payment = CargoPayment::Create(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,7 +260,7 @@ struct INDYChunkHandler : ChunkHandler {
|
||||
if (IsSavegameVersionBefore(SLV_161) && !IsSavegameVersionBefore(SLV_76)) {
|
||||
/* Store the old persistent storage. The GRFID will be added later. */
|
||||
assert(PersistentStorage::CanAllocateItem());
|
||||
i->psa = new PersistentStorage(0, GSF_INVALID, TileIndex{});
|
||||
i->psa = PersistentStorage::Create(0, GSF_INVALID, TileIndex{});
|
||||
std::copy(std::begin(_old_ind_persistent_storage.storage), std::end(_old_ind_persistent_storage.storage), std::begin(i->psa->storage));
|
||||
}
|
||||
if (IsSavegameVersionBefore(SLV_EXTEND_INDUSTRY_CARGO_SLOTS)) {
|
||||
|
||||
@@ -735,7 +735,7 @@ static bool LoadOldGood(LoadgameState &ls, int num)
|
||||
ge->status.Set(GoodsEntry::State::Acceptance, HasBit(_waiting_acceptance, 15));
|
||||
ge->status.Set(GoodsEntry::State::Rating, _cargo_source != 0xFF);
|
||||
if (GB(_waiting_acceptance, 0, 12) != 0 && CargoPacket::CanAllocateItem()) {
|
||||
ge->GetOrCreateData().cargo.Append(new CargoPacket(GB(_waiting_acceptance, 0, 12), _cargo_periods, (_cargo_source == 0xFF) ? StationID::Invalid() : StationID{_cargo_source}, INVALID_TILE, 0),
|
||||
ge->GetOrCreateData().cargo.Append(CargoPacket::Create(GB(_waiting_acceptance, 0, 12), _cargo_periods, (_cargo_source == 0xFF) ? StationID::Invalid() : StationID{_cargo_source}, INVALID_TILE, 0),
|
||||
StationID::Invalid());
|
||||
}
|
||||
|
||||
@@ -1383,7 +1383,7 @@ bool LoadOldVehicle(LoadgameState &ls, int num)
|
||||
if (_cargo_count != 0 && CargoPacket::CanAllocateItem()) {
|
||||
StationID source = (_cargo_source == 0xFF) ? StationID::Invalid() : StationID{_cargo_source};
|
||||
TileIndex source_xy = (source != StationID::Invalid()) ? Station::Get(source)->xy : (TileIndex)0;
|
||||
v->cargo.Append(new CargoPacket(_cargo_count, _cargo_periods, source, source_xy, 0));
|
||||
v->cargo.Append(CargoPacket::Create(_cargo_count, _cargo_periods, source, source_xy, 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -399,7 +399,7 @@ public:
|
||||
if (IsSavegameVersionBefore(SLV_161) && !IsSavegameVersionBefore(SLV_145) && st->facilities.Test(StationFacility::Airport)) {
|
||||
/* Store the old persistent storage. The GRFID will be added later. */
|
||||
assert(PersistentStorage::CanAllocateItem());
|
||||
st->airport.psa = new PersistentStorage(0, GSF_INVALID, TileIndex{});
|
||||
st->airport.psa = PersistentStorage::Create(0, GSF_INVALID, TileIndex{});
|
||||
std::copy(std::begin(_old_st_persistent_storage.storage), std::end(_old_st_persistent_storage.storage), std::begin(st->airport.psa->storage));
|
||||
}
|
||||
|
||||
@@ -426,7 +426,7 @@ public:
|
||||
assert(CargoPacket::CanAllocateItem());
|
||||
|
||||
/* Don't construct the packet with station here, because that'll fail with old savegames */
|
||||
CargoPacket *cp = new CargoPacket(GB(_waiting_acceptance, 0, 12), _cargo_periods, source, TileIndex{_cargo_source_xy}, _cargo_feeder_share);
|
||||
CargoPacket *cp = CargoPacket::Create(GB(_waiting_acceptance, 0, 12), _cargo_periods, source, TileIndex{_cargo_source_xy}, _cargo_feeder_share);
|
||||
ge.GetOrCreateData().cargo.Append(cp, StationID::Invalid());
|
||||
ge.status.Set(GoodsEntry::State::Rating);
|
||||
}
|
||||
|
||||
@@ -290,7 +290,7 @@ void AfterLoadVehiclesPhase1(bool part_of_load)
|
||||
for (const OldOrderSaveLoadItem *old_order = GetOldOrder(v->old_orders); old_order != nullptr; old_order = GetOldOrder(old_order->next)) {
|
||||
orders.push_back(std::move(old_order->order));
|
||||
}
|
||||
v->orders = mapping[v->old_orders] = new OrderList(std::move(orders), v);
|
||||
v->orders = mapping[v->old_orders] = OrderList::Create(std::move(orders), v);
|
||||
} else {
|
||||
v->orders = mapping[v->old_orders];
|
||||
/* For old games (case a) we must create the shared vehicle chain */
|
||||
@@ -324,7 +324,7 @@ void AfterLoadVehiclesPhase1(bool part_of_load)
|
||||
|
||||
/* As above, allocating OrderList here is safe. */
|
||||
assert(OrderList::CanAllocateItem());
|
||||
v->orders = new OrderList();
|
||||
v->orders = OrderList::Create();
|
||||
v->orders->first_shared = v;
|
||||
for (Vehicle *u = v; u != nullptr; u = u->next_shared) {
|
||||
u->orders = v->orders;
|
||||
@@ -1143,7 +1143,7 @@ struct VEHSChunkHandler : ChunkHandler {
|
||||
|
||||
if (_cargo_count != 0 && IsCompanyBuildableVehicleType(v) && CargoPacket::CanAllocateItem()) {
|
||||
/* Don't construct the packet with station here, because that'll fail with old savegames */
|
||||
CargoPacket *cp = new CargoPacket(_cargo_count, _cargo_periods, _cargo_source, _cargo_source_xy, _cargo_feeder_share);
|
||||
CargoPacket *cp = CargoPacket::Create(_cargo_count, _cargo_periods, _cargo_source, _cargo_source_xy, _cargo_feeder_share);
|
||||
v->cargo.Append(cp);
|
||||
}
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@ void MoveWaypointsToBaseStations()
|
||||
SlErrorCorrupt("Waypoint with invalid tile");
|
||||
}
|
||||
|
||||
Waypoint *new_wp = new Waypoint(t);
|
||||
Waypoint *new_wp = Waypoint::Create(t);
|
||||
new_wp->town = wp.town;
|
||||
new_wp->town_cn = wp.town_cn;
|
||||
new_wp->name = wp.name;
|
||||
|
||||
+1
-1
@@ -871,7 +871,7 @@ CommandCost CmdBuildShip(DoCommandFlags flags, TileIndex tile, const Engine *e,
|
||||
|
||||
const ShipVehicleInfo *svi = &e->VehInfo<ShipVehicleInfo>();
|
||||
|
||||
Ship *v = new Ship();
|
||||
Ship *v = Ship::Create();
|
||||
*ret = v;
|
||||
|
||||
v->owner = _current_company;
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ std::tuple<CommandCost, SignID> CmdPlaceSign(DoCommandFlags flags, TileIndex til
|
||||
int x = TileX(tile) * TILE_SIZE;
|
||||
int y = TileY(tile) * TILE_SIZE;
|
||||
|
||||
Sign *si = new Sign(_game_mode == GM_EDITOR ? OWNER_DEITY : _current_company, x, y, GetSlopePixelZ(x, y), text);
|
||||
Sign *si = Sign::Create(_game_mode == GM_EDITOR ? OWNER_DEITY : _current_company, x, y, GetSlopePixelZ(x, y), text);
|
||||
|
||||
si->UpdateVirtCoord();
|
||||
InvalidateWindowData(WC_SIGN_LIST, 0, 0);
|
||||
|
||||
+6
-6
@@ -701,7 +701,7 @@ static CommandCost BuildStationPart(Station **st, DoCommandFlags flags, bool reu
|
||||
if (!Station::CanAllocateItem()) return CommandCost(STR_ERROR_TOO_MANY_STATIONS_LOADING);
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
*st = new Station(area.tile);
|
||||
*st = Station::Create(area.tile);
|
||||
_station_kdtree.Insert((*st)->index);
|
||||
|
||||
(*st)->town = ClosestTownFromTile(area.tile, UINT_MAX);
|
||||
@@ -2165,7 +2165,7 @@ CommandCost CmdBuildRoadStop(DoCommandFlags flags, TileIndex tile, uint8_t width
|
||||
st->cached_roadstop_anim_triggers.Set(roadstopspec->animation.triggers);
|
||||
}
|
||||
|
||||
RoadStop *road_stop = new RoadStop(cur_tile);
|
||||
RoadStop *road_stop = RoadStop::Create(cur_tile);
|
||||
/* Insert into linked list of RoadStops. */
|
||||
RoadStop **currstop = FindRoadStopSpot(is_truck_stop, st);
|
||||
*currstop = road_stop;
|
||||
@@ -4268,7 +4268,7 @@ void IncreaseStats(Station *st, CargoType cargo, StationID next_station_id, uint
|
||||
if (ge1.link_graph == LinkGraphID::Invalid()) {
|
||||
if (ge2.link_graph == LinkGraphID::Invalid()) {
|
||||
if (LinkGraph::CanAllocateItem()) {
|
||||
lg = new LinkGraph(cargo);
|
||||
lg = LinkGraph::Create(cargo);
|
||||
LinkGraphSchedule::instance.Queue(lg);
|
||||
ge2.link_graph = lg->index;
|
||||
ge2.node = lg->AddNode(st2);
|
||||
@@ -4413,11 +4413,11 @@ static uint UpdateStationWaiting(Station *st, CargoType cargo, uint amount, Sour
|
||||
if (amount == 0) return 0;
|
||||
|
||||
StationID next = ge.GetVia(st->index);
|
||||
ge.GetOrCreateData().cargo.Append(new CargoPacket(st->index, amount, source), next);
|
||||
ge.GetOrCreateData().cargo.Append(CargoPacket::Create(st->index, amount, source), next);
|
||||
LinkGraph *lg = nullptr;
|
||||
if (ge.link_graph == LinkGraphID::Invalid()) {
|
||||
if (LinkGraph::CanAllocateItem()) {
|
||||
lg = new LinkGraph(cargo);
|
||||
lg = LinkGraph::Create(cargo);
|
||||
LinkGraphSchedule::instance.Queue(lg);
|
||||
ge.link_graph = lg->index;
|
||||
ge.node = lg->AddNode(st);
|
||||
@@ -4714,7 +4714,7 @@ void BuildOilRig(TileIndex tile)
|
||||
return;
|
||||
}
|
||||
|
||||
Station *st = new Station(tile);
|
||||
Station *st = Station::Create(tile);
|
||||
_station_kdtree.Insert(st->index);
|
||||
st->town = ClosestTownFromTile(tile, UINT_MAX);
|
||||
|
||||
|
||||
+2
-2
@@ -228,7 +228,7 @@ std::tuple<CommandCost, StoryPageID> CmdCreateStoryPage(DoCommandFlags flags, Co
|
||||
_story_page_next_sort_value = 0;
|
||||
}
|
||||
|
||||
StoryPage *s = new StoryPage(_story_page_next_sort_value, TimerGameCalendar::date, company, text);
|
||||
StoryPage *s = StoryPage::Create(_story_page_next_sort_value, TimerGameCalendar::date, company, text);
|
||||
|
||||
InvalidateWindowClassesData(WC_STORY_BOOK, -1);
|
||||
if (StoryPage::GetNumItems() == 1) InvalidateWindowData(WC_MAIN_TOOLBAR, 0);
|
||||
@@ -272,7 +272,7 @@ std::tuple<CommandCost, StoryPageElementID> CmdCreateStoryPageElement(DoCommandF
|
||||
_story_page_element_next_sort_value = 0;
|
||||
}
|
||||
|
||||
StoryPageElement *pe = new StoryPageElement(_story_page_element_next_sort_value, type, page_id);
|
||||
StoryPageElement *pe = StoryPageElement::Create(_story_page_element_next_sort_value, type, page_id);
|
||||
UpdateElement(*pe, tile, reference, text);
|
||||
|
||||
InvalidateWindowClassesData(WC_STORY_BOOK, page_id);
|
||||
|
||||
+1
-1
@@ -172,7 +172,7 @@ static bool CheckSubsidyDistance(Source src, Source dst)
|
||||
*/
|
||||
void CreateSubsidy(CargoType cargo_type, Source src, Source dst)
|
||||
{
|
||||
Subsidy *s = new Subsidy(cargo_type, src, dst, SUBSIDY_OFFER_MONTHS);
|
||||
Subsidy *s = Subsidy::Create(cargo_type, src, dst, SUBSIDY_OFFER_MONTHS);
|
||||
|
||||
const CargoSpec *cs = CargoSpec::Get(s->cargo_type);
|
||||
EncodedString headline = GetEncodedString(STR_NEWS_SERVICE_SUBSIDY_OFFERED, cs->name, s->src.GetFormat(), s->src.id, s->dst.GetFormat(), s->dst.id, _settings_game.difficulty.subsidy_duration);
|
||||
|
||||
+2
-2
@@ -2253,7 +2253,7 @@ std::tuple<CommandCost, Money, TownID> CmdFoundTown(DoCommandFlags flags, TileIn
|
||||
if (random_location) {
|
||||
t = CreateRandomTown(20, townnameparts, size, city, layout);
|
||||
} else {
|
||||
t = new Town(tile);
|
||||
t = Town::Create(tile);
|
||||
DoCreateTown(t, tile, townnameparts, size, city, layout, true);
|
||||
}
|
||||
|
||||
@@ -2401,7 +2401,7 @@ static Town *CreateRandomTown(uint attempts, uint32_t townnameparts, TownSize si
|
||||
} else if (TownCanBePlacedHere(tile, true).Failed()) continue;
|
||||
|
||||
/* Allocate a town struct */
|
||||
Town *t = new Town(tile);
|
||||
Town *t = Town::Create(tile);
|
||||
|
||||
DoCreateTown(t, tile, townnameparts, size, city, layout, false);
|
||||
|
||||
|
||||
+3
-3
@@ -641,7 +641,7 @@ static CommandCost CmdBuildRailWagon(DoCommandFlags flags, TileIndex tile, const
|
||||
if (!IsCompatibleRail(rvi->railtypes, GetRailType(tile))) return CMD_ERROR;
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
Train *v = new Train();
|
||||
Train *v = Train::Create();
|
||||
*ret = v;
|
||||
v->spritenum = rvi->image_index;
|
||||
|
||||
@@ -723,7 +723,7 @@ void NormalizeTrainVehInDepot(const Train *u)
|
||||
|
||||
static void AddRearEngineToMultiheadedTrain(Train *v)
|
||||
{
|
||||
Train *u = new Train();
|
||||
Train *u = Train::Create();
|
||||
v->value >>= 1;
|
||||
u->value = v->value;
|
||||
u->direction = v->direction;
|
||||
@@ -782,7 +782,7 @@ CommandCost CmdBuildRailVehicle(DoCommandFlags flags, TileIndex tile, const Engi
|
||||
int x = TileX(tile) * TILE_SIZE + _vehicle_initial_x_fract[dir];
|
||||
int y = TileY(tile) * TILE_SIZE + _vehicle_initial_y_fract[dir];
|
||||
|
||||
Train *v = new Train();
|
||||
Train *v = Train::Create();
|
||||
*ret = v;
|
||||
v->direction = DiagDirToDir(dir);
|
||||
v->tile = tile;
|
||||
|
||||
+1
-1
@@ -2960,7 +2960,7 @@ void Vehicle::AddToShared(Vehicle *shared_chain)
|
||||
if (shared_chain->orders == nullptr) {
|
||||
assert(shared_chain->previous_shared == nullptr);
|
||||
assert(shared_chain->next_shared == nullptr);
|
||||
this->orders = shared_chain->orders = new OrderList(shared_chain);
|
||||
this->orders = shared_chain->orders = OrderList::Create(shared_chain);
|
||||
}
|
||||
|
||||
this->next_shared = shared_chain->next_shared;
|
||||
|
||||
@@ -1126,6 +1126,17 @@ struct SpecializedVehicle : public Vehicle {
|
||||
return IsValidID(index) ? Get(index) : nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new T-object in the vehicle pool.
|
||||
* @param args... The arguments to the constructor.
|
||||
* @return The created object.
|
||||
*/
|
||||
template <typename... Targs>
|
||||
static inline T *Create(Targs &&... args)
|
||||
{
|
||||
return Vehicle::Create<T>(std::forward<Targs&&>(args)...);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a Vehicle to SpecializedVehicle with type checking.
|
||||
* @param v Vehicle pointer
|
||||
|
||||
+1
-1
@@ -145,7 +145,7 @@ CommandCost CmdBuildShipDepot(DoCommandFlags flags, TileIndex tile, Axis axis)
|
||||
}
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
Depot *depot = new Depot(tile);
|
||||
Depot *depot = Depot::Create(tile);
|
||||
|
||||
uint new_water_infra = 2 * LOCK_DEPOT_TILE_FACTOR;
|
||||
/* Update infrastructure counts after the tile clears earlier.
|
||||
|
||||
@@ -281,7 +281,7 @@ CommandCost CmdBuildRailWaypoint(DoCommandFlags flags, TileIndex start_tile, Axi
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
if (wp == nullptr) {
|
||||
wp = new Waypoint(start_tile);
|
||||
wp = Waypoint::Create(start_tile);
|
||||
} else if (!wp->IsInUse()) {
|
||||
/* Move existing (recently deleted) waypoint to the new location */
|
||||
wp->xy = start_tile;
|
||||
@@ -401,7 +401,7 @@ CommandCost CmdBuildRoadWaypoint(DoCommandFlags flags, TileIndex start_tile, Axi
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
if (wp == nullptr) {
|
||||
wp = new Waypoint(start_tile);
|
||||
wp = Waypoint::Create(start_tile);
|
||||
SetBit(wp->waypoint_flags, WPF_ROAD);
|
||||
} else if (!wp->IsInUse()) {
|
||||
/* Move existing (recently deleted) waypoint to the new location */
|
||||
@@ -492,7 +492,7 @@ CommandCost CmdBuildBuoy(DoCommandFlags flags, TileIndex tile)
|
||||
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
if (wp == nullptr) {
|
||||
wp = new Waypoint(tile);
|
||||
wp = Waypoint::Create(tile);
|
||||
} else {
|
||||
/* Move existing (recently deleted) buoy to the new location */
|
||||
wp->xy = tile;
|
||||
|
||||
Reference in New Issue
Block a user