9#include <unordered_map>
35 template <
typename LocalActors>
39 const LocalActors &local) {
40 const auto mirror = mirrors.find(primary_id);
41 if ((mirror != mirrors.end()) && local.IsSameKind(mirror->second)) {
42 return {mirror->second, 0u};
45 const auto is_free_map_actor = [&](uint32_t local_id) {
46 for (
const auto &item : mirrors) {
47 if (item.second == local_id) {
51 return local.IsMapActorLike(local_id);
54 const std::optional<uint32_t> map_actor = local.FindMapActor();
55 if (map_actor && is_free_map_actor(*map_actor)) {
56 return {map_actor, 0u};
58 if (is_free_map_actor(primary_id)) {
59 return {primary_id, 0u};
61 return {std::nullopt, local.Contains(primary_id) ? 0u : primary_id};
ReplayedActorPlan PlanReplayedActor(const MirroredActorMap &mirrors, uint32_t primary_id, const LocalActors &local)
Where a secondary replays the add event of primary actor primary_id.
std::unordered_map< uint32_t, uint32_t > MirroredActorMap
Primary actor id -> id of the local actor a secondary replayed it onto, for the current episode only.
This file contains definitions of common data structures used in traffic manager.
std::optional< uint32_t > reuse
Local actor to reuse; if empty, spawn a new one.
uint32_t spawn_id
Id to request for the new actor, 0 for a fresh one.