baba-is-auto
C++17 Baba Is You simulator
Loading...
Searching...
No Matches
Map.hpp
Go to the documentation of this file.
1// Copyright (c) 2020-2026 Chris Ohk
2
3// I am making my contributions/submissions to this project solely in our
4// personal capacity and am not conveying any rights to any intellectual
5// property of any third parties.
6
7#ifndef BABA_IS_AUTO_MAP_HPP
8#define BABA_IS_AUTO_MAP_HPP
9
12
13#include <optional>
14#include <string_view>
15#include <vector>
16
17namespace baba_is_auto
18{
20using Position = std::pair<std::size_t, std::size_t>;
21
27class Map
28{
29 public:
31 Map() = default;
32
36 Map(std::size_t width, std::size_t height);
37
39 void Reset();
40
43 std::size_t GetWidth() const;
44
47 std::size_t GetHeight() const;
48
52 void Load(std::string_view filename);
53
58 void AddObject(std::size_t x, std::size_t y, ObjectType type);
59
65 void AddObject(std::size_t x, std::size_t y, ObjectType type,
66 Direction direction);
67
72 void RemoveObject(std::size_t x, std::size_t y, ObjectType type);
73
78
84 bool MoveObject(ObjectID id, std::size_t x, std::size_t y);
85
89 std::optional<Position> GetPosition(ObjectID id) const;
90
95
100
105 bool SetDirection(ObjectID id, Direction direction);
106
111 std::optional<Direction> GetDirection(ObjectID id) const;
112
117 Object& At(std::size_t x, std::size_t y);
118
123 const Object& At(std::size_t x, std::size_t y) const;
124
128 std::vector<Position> GetPositions(ObjectType type) const;
129
130 private:
131 friend class Game;
132
138 void AddGeneratedObject(std::size_t x, std::size_t y, ObjectType type,
139 Direction direction);
140
142 void AssignMissingObjectIDs();
143
144 std::size_t m_width = 0;
145 std::size_t m_height = 0;
146
147 ObjectID m_initNextObjectID = 1;
148 ObjectID m_nextObjectID = 1;
149
150 bool m_mayHaveMissingObjectIDs = false;
151
152 std::vector<Object> m_initObjects;
153 std::vector<Object> m_objects;
154};
155} // namespace baba_is_auto
156
157#endif
Game class.
Definition Game.hpp:27
Map class.
Definition Map.hpp:28
void AddObject(std::size_t x, std::size_t y, ObjectType type, Direction direction)
void AddObject(std::size_t x, std::size_t y, ObjectType type)
void RemoveObject(std::size_t x, std::size_t y, ObjectType type)
std::optional< Position > GetPosition(ObjectID id) const
const ObjectInstance * GetInstance(ObjectID id) const
Map()=default
Default constructor.
std::size_t GetHeight() const
void Reset()
Resets map data.
Object & At(std::size_t x, std::size_t y)
std::size_t GetWidth() const
std::optional< Direction > GetDirection(ObjectID id) const
const Object & At(std::size_t x, std::size_t y) const
Map(std::size_t width, std::size_t height)
std::vector< Position > GetPositions(ObjectType type) const
bool RemoveObject(ObjectID id)
bool SetDirection(ObjectID id, Direction direction)
ObjectInstance * GetInstance(ObjectID id)
bool MoveObject(ObjectID id, std::size_t x, std::size_t y)
void Load(std::string_view filename)
Object class.
Definition Object.hpp:47
Definition IAgent.hpp:14
std::uint64_t ObjectID
Definition Object.hpp:17
ObjectType
An enumerator for identifying the object.
Definition GameEnums.hpp:14
Direction
An enumerator for identifying the direction.
Definition GameEnums.hpp:142
std::pair< std::size_t, std::size_t > Position
A zero-based (x, y) map position.
Definition Map.hpp:20
Object instance struct.
Definition Object.hpp:26