about summary refs log tree commit diff stats
path: root/data/maps/the_hive
Commit message (Collapse)AuthorAgeFilesLines
* Annotated RTE rooms for most mapsStar Rauchenberger2026-02-061-0/+1
|
* Added display names to portsStar Rauchenberger2025-09-281-0/+4
|
* [Data] Annotate shuffleable portsStar Rauchenberger2025-09-211-4/+8
|
* Added keyholder sanityStar Rauchenberger2025-09-021-0/+1
|
* [Data] Small tweaksStar Rauchenberger2025-08-301-1/+2
|
* Changed how door location names are formattedStar Rauchenberger2025-08-303-3/+0
| | | | | | | | | | | | | | | | | | STANDARD type doors with at most four panels in the same map area and no other trigger objects will have their location names generated from the names of the panels used to open the door, similar to Lingo 1. Other door types will use the door's name. In either case, the name can be overridden using the new location_name field. Rooms can also set a panel_display_name field, which will be used in location names for doors, and is used to group panels into areas. Panels themselves can set display names, which differentiates their locations from other panels in the same area. Many maps were updated for this, but note that the_symbolic and the_unyielding have validator failures because of duplicate panel names. This won't matter until panelsanity is implemented.
* Converted puzzle symbols to an enumStar Rauchenberger2025-08-202-42/+42
|
* Maps have display names nowStar Rauchenberger2025-08-201-0/+1
| | | | Also added endings to the apworld.
* Added the_impressiveStar Rauchenberger2025-08-141-2/+2
|
* Added the_hiveStar Rauchenberger2025-08-145-0/+393
"><map> #include <tuple> #include <list> #include "direction.h" #include "system.h" #include "vector.h" #include "sprite.h" #include "consts.h" class Game; struct CollisionResult { Direction dir; bool blocked = false; std::list<int> colliders; vec2i adjustedLoc; }; enum class CheckCollisionOptions { None = 0, AllowSliding = 1 << 0 }; class TransformSystem : public System { public: static constexpr SystemKey Key = SystemKey::Transform; TransformSystem(Game& game) : game_(game) {} void initSprite(int spriteId, vec2i loc, SpriteLayer layer = SpriteLayer::Normal); void setUpCollision(int spriteId, vec2i offset, vec2i size, bool solid); void undoCollision(int spriteId); void moveSprite(int spriteId, vec2i newLoc); auto getSpritesByY(SpriteLayer layer) const { return spritesByY_[static_cast<size_t>(layer)] | ranges::views::transform([] (const std::tuple<int, int>& val) { return std::get<1>(val); }); } CollisionResult checkCollision(int spriteId, vec2i curLoc, vec2i newLoc, Direction dir, CheckCollisionOptions options = CheckCollisionOptions::None); CharacterMedium getMediumAtPosition(int spriteId, vec2i newLoc); void destroySprite(int spriteId) override; private: Game& game_; std::set<std::tuple<int, int>> spritesByY_[static_cast<int>(SpriteLayer::NUM_SPRITE_LAYERS)]; struct Collidable { int lower; int upper; Collidable(int lower, int upper) : lower(lower), upper(upper) {} }; // The way these work is that the key is (axis position, entity ID). The // entity ID being there makes the mapping unique and makes removal easy. using asc_collidables_type = std::map< std::tuple<int, int>, const Collidable, std::less<std::tuple<int, int>>>; using desc_collidables_type = std::map< std::tuple<int, int>, const Collidable, std::greater<std::tuple<int, int>>>; desc_collidables_type leftCollidables_; asc_collidables_type rightCollidables_; desc_collidables_type upCollidables_; asc_collidables_type downCollidables_; void addCollidable(int spriteId); void removeCollidable(int spriteId); }; #endif /* end of include guard: TRANSFORM_SYSTEM_H_BA2633BC */