19#include <fmt/format.h>
25#include <unordered_map>
28#include <entt/entt.hpp>
39class Node :
public entt::handle {
42 Node(
const entt::handle handle,
const entt::entity entity);
47 std::ranges::views::transform([
this](entt::entity entity) {
return Node(
universe(), entity); }));
53 friend bool operator==(
const Node& lhs,
const entt::null_t&) {
return lhs.entity() == entt::null; }
54 friend bool operator==(
const entt::null_t&,
const Node& rhs) {
return rhs.entity() == entt::null; }
55 friend bool operator!=(
const Node& lhs,
const entt::null_t&) {
return lhs.entity() != entt::null; }
56 friend bool operator!=(
const entt::null_t&,
const Node& rhs) {
return rhs.entity() != entt::null; }
66 std::map<std::string, entt::entity>
goods;
68 std::map<std::string, entt::entity>
recipes;
71 std::map<std::string, entt::entity>
fields;
73 std::map<std::string, entt::entity>
planets;
77 std::map<std::string, entt::entity>
cities;
78 std::map<std::string, entt::entity>
jobs;
79 std::map<std::string, entt::entity>
zoning;
100 std::unordered_map<entt::entity, components::GoodEntity>
good_map;
107 return (std::views::iota(0,
static_cast<int>(
good_vector.size())) |
108 std::ranges::views::transform(
114 using entt::registry::all_of;
115 using entt::registry::any_of;
116 using entt::registry::get;
118 template <
typename... Component>
120 return entt::registry::all_of<Component...>(
GetGood(entity));
123 template <
typename... Component>
125 return entt::registry::any_of<Component...>(
GetGood(entity));
128 template <
typename... Component>
130 return entt::registry::get<Component...>(
GetGood(entity));
133 template <
typename... Component>
135 return entt::registry::get<
const Component...>(
GetGood(entity));
144 std::unique_ptr<cqsp::core::util::IRandom>
random;
154 return (
entities | std::ranges::views::transform([
this](entt::entity entity) {
return Node(*
this, entity); }));
159 template <
typename... Components>
161 return this->
template view<Components...>() |
NodeTransform();
163 template <
typename... Components>
165 return this->
template view<Components...>() |
NodeTransform();
167 template <
typename... Components,
typename... Exclude>
168 auto nodes(entt::exclude_t<Exclude...> exclude) {
169 return this->
template view<Components...>(exclude) |
NodeTransform();
171 template <
typename... Components,
typename... Exclude>
172 auto nodes(entt::exclude_t<Exclude...> exclude)
const {
173 return this->
template view<Components...>(exclude) |
NodeTransform();
204 template <
typename FormatContext>
205 constexpr auto format(entt::entity entity, FormatContext& ctx)
const {
206 return formatter<std::string>::format(std::to_string((uint64_t)entity), ctx);
212 template <
typename FormatContext>
Definition: universe.h:39
auto Convert(const std::vector< entt::entity > &entities) const
Definition: universe.h:45
friend bool operator!=(const entt::null_t &, const Node &rhs)
Definition: universe.h:56
Universe & universe() const
Definition: universe.cpp:48
friend bool operator==(const entt::null_t &, const Node &rhs)
Definition: universe.h:54
friend bool operator==(const Node &lhs, const entt::null_t &)
Definition: universe.h:53
Node(const Universe &universe, const entt::entity entity)
Definition: universe.cpp:45
friend bool operator!=(const Node &lhs, const entt::null_t &)
Definition: universe.h:55
Definition: universe.h:59
std::map< std::string, entt::entity > provinces
Definition: universe.h:76
void EnableTick()
Definition: universe.h:138
std::vector< entt::entity > consumergoods
Definition: universe.h:67
auto nodes() const
Definition: universe.h:164
std::unique_ptr< cqsp::core::util::IRandom > random
Definition: universe.h:144
std::map< std::string, entt::entity > modifiers
Definition: universe.h:80
int GetDate() const
Definition: universe.h:143
size_t GoodCount() const
Definition: universe.h:112
std::function< Node(entt::entity)> nodeFactory
Definition: universe.h:151
auto Convert(const std::vector< entt::entity > &entities) const
Definition: universe.h:153
std::string uuid
Definition: universe.h:145
std::map< std::string, entt::entity > terrain_data
Definition: universe.h:69
auto nodes()
Definition: universe.h:160
auto nodes(entt::exclude_t< Exclude... > exclude)
Definition: universe.h:168
bool any_of(const components::GoodEntity entity) const
Definition: universe.h:124
entt::entity GetPlayer() const
Definition: universe.cpp:43
bool all_of(const components::GoodEntity entity) const
Definition: universe.h:119
entt::entity default_job
Definition: universe.h:102
void ToggleTick()
Definition: universe.h:141
systems::EconomyConfig economy_config
Definition: universe.h:191
std::map< std::string, entt::entity > jobs
Definition: universe.h:78
std::map< std::string, entt::entity > fields
Definition: universe.h:71
void DisableTick()
Definition: universe.h:139
Node operator()(const entt::entity entity)
Definition: universe.h:179
Node operator()()
Definition: universe.h:184
std::map< std::string, entt::entity > infrastructure
Definition: universe.h:81
bool to_tick
Definition: universe.h:198
std::unordered_map< entt::entity, components::GoodEntity > good_map
Definition: universe.h:100
auto nodes(entt::exclude_t< Exclude... > exclude) const
Definition: universe.h:172
decltype(auto) get(const components::GoodEntity entity)
Definition: universe.h:129
std::map< std::string, entt::entity > goods
Definition: universe.h:66
std::map< std::string, entt::entity > planets
Definition: universe.h:73
std::map< entt::entity, std::map< entt::entity, int > > colors_province
Definition: universe.h:86
std::map< std::string, actions::NameGenerator > name_generators
Definition: universe.h:70
bool ToTick() const
Definition: universe.h:140
std::map< std::string, entt::entity > countries
Definition: universe.h:75
std::vector< entt::entity > good_vector
Definition: universe.h:92
decltype(auto) get(const components::GoodEntity entity) const
Definition: universe.h:134
double tick_fraction
What is the current fraction of the wait of the tick we are processing
Definition: universe.h:150
auto GoodIterator() const
Definition: universe.h:106
std::map< std::string, entt::entity > recipes
Definition: universe.h:68
std::map< entt::entity, std::map< int, entt::entity > > province_colors
Definition: universe.h:84
std::map< std::string, entt::entity > cities
Definition: universe.h:77
std::map< std::string, entt::entity > time_zones
Definition: universe.h:74
entt::entity GetGood(const components::GoodEntity entity) const
Definition: universe.h:104
auto NodeTransform() const
Definition: universe.h:152
entt::dispatcher event_dispatcher
Definition: universe.h:195
std::map< std::string, entt::entity > zoning
Definition: universe.h:79
std::unordered_map< entt::entity, double > good_prices
Definition: universe.h:96
components::StarDate date
Definition: universe.h:64
std::map< std::string, entt::entity > technologies
Definition: universe.h:72
Universe()
Definition: universe.cpp:28
entt::entity sun
Definition: universe.h:87
Holds and calculates the tick that is on going. Date is the number of hours that has been ongoing sin...
Definition: stardate.h:46
uint64_t GetDate() const
Definition: stardate.h:61
std::vector< std::string > entities
Definition: loadcities.cpp:42
GoodEntity
Definition: resourceledger.h:28
Definition: cityactions.cpp:23