Brunot
Loading...
Searching...
No Matches
Menu Class Reference

A menu that organizes its parents' children (in the node) either horizontally or vertically. More...

#include <Menu.h>

Inheritance diagram for Menu:
[legend]
Collaboration diagram for Menu:
[legend]

Classes

struct  PositioningInformation

Public Member Functions

 Menu (float gapSize, int widthSize, int heightSize, menuType typeMenu)
 Menu ()
 Menu (const Menu &)=default
auto operator= (const Menu &) -> Menu &=default
 ~Menu () override=default
 Menu (Menu &&other) noexcept=default
auto operator= (Menu &&other) noexcept -> Menu &=default
auto clone () const -> std::unique_ptr< GameObject > override
 makes a copy a GameObject even if it's held polymorphically
auto componentShowMenu () -> void override
auto onUpdate (float dt) -> void override
 called once every frame.
auto endWindow () -> void override
 currently unused, but intended to but was assumed to be necessary for a proper ImGui editor
auto onRender () -> void override
 called every frame after update has been called for every object.
auto onEnterEngine () -> void override
 hook that is called when a GameObject enters the Engine tree.
auto load (const Stream &stream) -> void override
 Implementations will load the state of a GameObject from a th::Json Object.
auto save (Stream &stream) const -> void override
 Implementations will load the state of a GameObject to a th::Json object.
auto width () const -> int
 Returns the maximum width of the menu.
auto sizeWidth () const -> int
 Returns the current width of the menu.
auto height () const -> int
 Returns the height of the menu.
auto setOrigin (Vector4D newOrigin) -> void
 Changes the origin point to a new value.
auto setOrigin (float x, float y) -> void
 Changes the origin point to a new value.
auto setOriginX (float x) -> void
 Sets just the X of the origin point.
auto setOriginY (float y) -> void
 Sets just the Y of the origin point.
auto moveOrigin (float x, float y) -> void
 Adjusts the current x and y of the origin point.
auto createEmptyButton () -> std::unique_ptr< Entity >
 Creates an empty button, intended for filling the board.
auto getTranslationOfIndex (int x, int y) -> Point2D
 Returns the translation of an item at given index.
auto pushEntityHorizontal (Entity *entity) -> void
 Pushes an item to the first row of a menu, intended for the cards.
auto pushEntity (Entity *entity) -> bool
 A universal push function that automatically fills in empty spaces The Entity should already be a child of the menu (or added as a child right after) may or may not succeed, depending on if the menu has space.
Public Member Functions inherited from Component
auto getType () const -> ComponentTypeEnum
auto getKey () const -> Key override
 Generates a unique Key that corresponds to the GameObject.
auto showMenu () -> void override
 Called before update each frame, for calling ImGui editor code relevant to the gameObject.
auto getEntityParent () const -> Entity *
 gets the parent as an Entity.
auto pop () const -> std::unique_ptr< Component >
 Removes the Component from its Entity parent, and gives ownership to the caller.
Public Member Functions inherited from GameObject
 GameObject (std::string typeName, gobj::Type parentType, gobj::Type type)
 constructor for gameobject.
virtual ~GameObject ()
 destructor for GameObject.
 GameObject (const GameObject &other)
 Copy Constructor.
auto operator= (const GameObject &other) -> GameObject &
 copy assignment operator
 GameObject (GameObject &&other) noexcept
 Move constructor.
auto operator= (GameObject &&other) noexcept -> GameObject &
 Move assignment operator.
virtual auto update (float dt) -> void
 called once every frame.
virtual auto render () -> void
 called every frame after update has been called for every object.
virtual auto destroy () -> void
 Marks an GameObject to be destroyed.
virtual auto onSceneStart (const std::string &sceneName) -> void
 Hook that is called before the first frame a scene is run, but after the entire scene is loaded into the engine To receive the hook, simply override the function in your class.
virtual auto onSceneExit (const std::string &sceneName) -> void
 Hook that is called right before a scene is unloaded To receive the hook, simply override the function in your class.
virtual auto for_each (std::function< void(GameObject &)> func) -> void
 applies a function to every child.
virtual auto for_each (std::function< void(const GameObject &)> func) const -> void
 applies a const function to every child.
virtual auto getParent () const -> GameObject *
 Gets the parent of a GameObject.
virtual auto parentTo (GameObject *newParent) -> bool
 Sets the GameObject as a child of another GameObject.
auto getInternalParent () const -> GameObject *
 returns the actual owning parent of the GameObject
virtual auto addChild (std::unique_ptr< GameObject > newChild) -> bool
 Adds a child to a GameObject.
auto addChildLua (std::unique_ptr< GameObject > &newChild) -> bool
 for lua
auto destroyed () const -> bool
auto getUUID () const -> gobj::UUID
auto coolerGetUUID () const -> unsigned int
auto isUUID (gobj::UUID compareUUID) const -> bool
auto getName () const -> const std::string &
 Gets the type of the object as a string.
auto getNickname () const -> const std::string &
 Gets the nickname (custom, writable name) of a GameObject.
auto getFormattedName () const -> const std::string &
 combines a GameObjects Type, Nickname, and UUID into one string, for use with logging.
auto nameEquals (const std::string &compareString) const -> bool
 check whether a GameObjects typeName is equivilent to a given string.
auto isType (gobj::Type otherType) const -> bool
 check whether the GameObject is the same as a given type.
auto getObjectType () const -> gobj::Type
 gets the internal type of the GameObject, as an enum
auto setNickname (const std::string &newNickname) -> void
 sets the GameObjects nickname.
auto updates () const -> bool
auto renders () const -> bool
auto receivesMessages () const -> bool
auto isActive () const -> bool
virtual auto setShouldUpdate (bool _shouldUpdate) -> void
 set whether the GameObject should update every frame, and whether all of it's children should update every frame
virtual auto setShouldRender (bool _shouldRender) -> void
 set whether the GameObject should render every frame, and whether all of it's children should render every frame
virtual auto setShouldReceiveMessages (bool _shouldReceiveMessages) -> void
 set whether the GameObject should Receive Messags, and whether all of it's children should receive messages
auto setActive (bool shouldBeActive) -> void
 set the GameObject should update, render, and receive messages
auto getGameObjectJson () const -> json
 Used for serializing GameObjects.
auto setGameObjectJson (const json &stream) -> void
 used for deserializing GameObjects

Static Public Member Functions

static auto bindLuaTypes (sol::state &lua) -> void
static auto getEnum () -> ComponentTypeEnum

Friends

auto to_json (json &j, const Menu &m) ->void
auto from_json (const json &j, Menu &m) ->void

the path to the json to load, just like what would be passed into th::make()

makes a Node from Factory and adds it to the menu.

Handles adding the Node Tree as a child of the Menu's entity parent

float gapBetweenObjects = 0.01f
 How much visual space is put between objects in the menu.
int maxItemsWide = 3
 How wide menu grid is (how many objects it can hold horizontally).
int maxItemsHeight = 3
 How tall the menu grid is (how many objects it can hold vertically).
Vector4D originPoint {0.f, 0.f, 0, 1}
Vector4D menuScale {1.f, 1.f, 0.f, 0.f}
menuType type = menuType::mDefault
 How to tell if the menu wraps.
PositioningInformation posInfo
 Used to keep track of where items in the menu should be put in the game.
std::vector< std::vector< Entity * > > buttons
 The managed items/entities for the menu.
auto makeAndPush (const std::string &name) -> void
auto removeEntity (int x, int y) -> void
 Removes a specific entity at given index.
auto removeEntity (Entity *entity) -> void
 Removes a specific entity from menu.
auto getAboveEntity (Entity *entity) -> Entity *
 When given an entity, it will return the one above in the menu.
auto getBelowEntity (Entity *entity) -> Entity *
 When given an entity, it will return the one below in the menu.
auto getLeftEntity (Entity *entity) -> Entity *
 When given an entity, it will return the one left in the menu.
auto getRightEntity (Entity *entity) -> Entity *
 When given an entity, it will return the one right in the menu.
auto getMenuElementPosition (Entity *entity) const -> std::pair< int, int >
 Returns the index of the entity in the menu.
auto updateMenuChildren () -> void
 Resizes menu in memory, allocates new items, and then calls compact menu.
auto compactMenu () -> void
 Visually shrinks the menu, intended for when an element gets removed.
auto horizontalCompactMenu () -> void
 Visually shrinks the menu, intended for when an element gets removed from a player hand.
auto at (int x, int y) -> Entity *
 takes in a position, and gets the entity in the position, blocking overflow by locking to edges, or wrapping, based on type of menu
auto getButtonRow (int x) const -> std::vector< Entity * >
 Returns every item in a given row.
auto getButtonColumn (int y) const -> std::vector< Entity * >
 Returns every item in a given column.
auto clear () const -> void
 Deletes all entities inside of the grid.
auto fillMenu () -> void
auto getChildScale () const -> Vector4D
 Returns what the scale of a child inside the menu should be.
auto setGapBetweenObjects (float newGap) -> void
 Manually sets the gaps between objects.
auto drawDebugLines (AffineMatrix transform) -> void
auto getChildTranslation (Entity *child) const -> Vector4D
 Returns where a child inside the menu should be positioned.
auto linkMessages () -> void
auto returnWrappedMenuPosition (int x, int y) -> Point2D
 Returns the menu position while accounting for wrapped logic, intended as a helper function for returnMenuPosition.
auto returnDefaultMenuPosition (int x, int y) -> Point2D
 Returns the menu position while accounting for default logic, intended as a helper function for returnMenuPosition.
auto returnButtonIndexWrapped (int x, int y) -> Entity *
 Returns the menu position while accounting for wrapped logic, intended as a helper function for getButtonEntity.
auto returnButtonIndexDefault (int x, int y) -> Entity *
 Returns the menu position while accounting for default logic, intended as a helper function for getButtonEntity.
auto getButtonPosition (Entity *ent) -> std::pair< int, int >
 takes in the entity and returns the index (x and y) of where it is in the menu
void recalculatePositioning ()
 Recalculates where children inside the menu should be positioned + scaled in the game.
void recalculateHorizontalPositioning ()
 Recalculates where children inside the menu should be positioned + scaled in the game.
auto repositionItems (const std::vector< Entity * > &ent, int column) -> void
 Visually arranges the entities in a given column, intended as a helper function for compactMenu.
auto repositionHorizontalItems (const std::vector< Entity * > &ent, int column) -> void
 Visually arranges the entities in a given column, intended as a helper function for compactMenu.

Additional Inherited Members

Public Types inherited from Component
enum  ComponentTypeEnum : unsigned short { cErrorType = 0 , cNewComponentStub = 1 }
 This enum lists out every type of component we have. More...
Public Attributes inherited from GameObject
friend Entity
friend Node
friend Engine
Protected Member Functions inherited from Component
 Component (ComponentTypeEnum type, const char *typeName)
auto getComponentJson () const -> json
auto getChildren () const -> std::shared_ptr< std::vector< GameObject * > > override
 override for component to return a vector of no children
Protected Member Functions inherited from GameObject
auto setInternalParent (GameObject *parent) -> bool
 sets the internal parent of a GameObject directly, avoiding abstractions provided by ParentTo().
auto checkAddToSceneHook () -> void
 Determine if the GameObject was recently added to the engine, and if it was, call onEngineEnter.

Detailed Description

A menu that organizes its parents' children (in the node) either horizontally or vertically.

Inherently supports 2D grids. Typically used with Button s and a Selector, but doesn't depend on them in any way

Author

Bryley Elder (bryle.nosp@m.y.el.nosp@m.der@d.nosp@m.igip.nosp@m.en.ed.nosp@m.u) pair programmed initial set-up, filled out in-depth functionality Aidan Hartman (aidan.nosp@m..har.nosp@m.tman@.nosp@m.digi.nosp@m.pen.e.nosp@m.du) Assisted Bryley with functionality, bug clean-up Ori Balashov (ori.b.nosp@m.alas.nosp@m.hov@d.nosp@m.igip.nosp@m.en.ed.nosp@m.u) pair programmed initial set-up
Date
2026 / 01 / 23

Constructor & Destructor Documentation

◆ Menu() [1/4]

Menu::Menu ( float gapSize,
int widthSize,
int heightSize,
menuType typeMenu )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Menu() [2/4]

Menu::Menu ( )
inline
Here is the call graph for this function:

◆ Menu() [3/4]

Menu::Menu ( const Menu & )
default
Here is the call graph for this function:

◆ ~Menu()

Menu::~Menu ( )
overridedefault

◆ Menu() [4/4]

Menu::Menu ( Menu && other)
defaultnoexcept
Here is the call graph for this function:

Member Function Documentation

◆ at()

auto Menu::at ( int x,
int y )->Entity *

takes in a position, and gets the entity in the position, blocking overflow by locking to edges, or wrapping, based on type of menu

Parameters
xHow far into the x direction (to the right) you want to go
yHow far into the y direction (to the top) you want to go
Returns
The entity at the position
Here is the call graph for this function:
Here is the caller graph for this function:

◆ bindLuaTypes()

auto Menu::bindLuaTypes ( sol::state & lua) ->void
static
Here is the call graph for this function:

◆ clear()

auto Menu::clear ( ) const->void

Deletes all entities inside of the grid.

Here is the caller graph for this function:

◆ clone()

auto Menu::clone ( ) const->std::unique_ptr< GameObject >
inlineoverridevirtual

makes a copy a GameObject even if it's held polymorphically

Warning
When overriding this function, make sure to set the parents object to this
Returns
a unique_ptr to a new stack allocated object that is a copy of the object

Implements GameObject.

Here is the call graph for this function:

◆ compactMenu()

auto Menu::compactMenu ( ) ->void

Visually shrinks the menu, intended for when an element gets removed.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ componentShowMenu()

auto Menu::componentShowMenu ( ) ->void
overridevirtual

Reimplemented from Component.

Here is the call graph for this function:

◆ createEmptyButton()

auto Menu::createEmptyButton ( ) ->std::unique_ptr< Entity >

Creates an empty button, intended for filling the board.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ drawDebugLines()

auto Menu::drawDebugLines ( AffineMatrix transform) ->void
Here is the call graph for this function:
Here is the caller graph for this function:

◆ endWindow()

auto Menu::endWindow ( ) ->void
inlineoverridevirtual

currently unused, but intended to but was assumed to be necessary for a proper ImGui editor

Implements GameObject.

◆ fillMenu()

auto Menu::fillMenu ( ) ->void

@TODO this shouldn't delete itself, and should be refactored as soon as something is changed in it

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getAboveEntity()

auto Menu::getAboveEntity ( Entity * entity) ->Entity *

When given an entity, it will return the one above in the menu.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getBelowEntity()

auto Menu::getBelowEntity ( Entity * entity) ->Entity *

When given an entity, it will return the one below in the menu.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getButtonColumn()

auto Menu::getButtonColumn ( int y) const->std::vector< Entity * >

Returns every item in a given column.

◆ getButtonPosition()

auto Menu::getButtonPosition ( Entity * ent) ->std::pair< int, int >
private

takes in the entity and returns the index (x and y) of where it is in the menu

Returns
The x and y index of the entity's position inside the menu

◆ getButtonRow()

auto Menu::getButtonRow ( int x) const->std::vector< Entity * >

Returns every item in a given row.

◆ getChildScale()

auto Menu::getChildScale ( ) const->Vector4D

Returns what the scale of a child inside the menu should be.

Here is the caller graph for this function:

◆ getChildTranslation()

auto Menu::getChildTranslation ( Entity * child) const->Vector4D

Returns where a child inside the menu should be positioned.

◆ getEnum()

auto Menu::getEnum ( ) ->ComponentTypeEnum
inlinestatic

◆ getLeftEntity()

auto Menu::getLeftEntity ( Entity * entity) ->Entity *

When given an entity, it will return the one left in the menu.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getMenuElementPosition()

auto Menu::getMenuElementPosition ( Entity * entity) const->std::pair< int, int >

Returns the index of the entity in the menu.

Here is the caller graph for this function:

◆ getRightEntity()

auto Menu::getRightEntity ( Entity * entity) ->Entity *

When given an entity, it will return the one right in the menu.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getTranslationOfIndex()

auto Menu::getTranslationOfIndex ( int x,
int y )->Point2D

Returns the translation of an item at given index.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ height()

auto Menu::height ( ) const->int

Returns the height of the menu.

Here is the caller graph for this function:

◆ horizontalCompactMenu()

auto Menu::horizontalCompactMenu ( ) ->void

Visually shrinks the menu, intended for when an element gets removed from a player hand.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ linkMessages()

auto Menu::linkMessages ( ) ->void
Here is the caller graph for this function:

◆ load()

auto Menu::load ( const Stream & stream) ->void
overridevirtual

Implementations will load the state of a GameObject from a th::Json Object.

Unimplemented in GameObject

Parameters
streamth::Json Object

Implements GameObject.

◆ makeAndPush()

auto Menu::makeAndPush ( const std::string & name) ->void
Here is the call graph for this function:

◆ moveOrigin()

auto Menu::moveOrigin ( float x,
float y )->void

Adjusts the current x and y of the origin point.

Here is the call graph for this function:

◆ onEnterEngine()

auto Menu::onEnterEngine ( ) ->void
overridevirtual

hook that is called when a GameObject enters the Engine tree.

The hook is called immediately after a GameObject's parent is called. Functionality may not be correct if an object was removed from the engine then re-added. To receive the hook, simply override the function in your class

Reimplemented from GameObject.

Here is the call graph for this function:

◆ onRender()

auto Menu::onRender ( ) ->void
overridevirtual

called every frame after update has been called for every object.

Generally used for rendering an object to the screen, when applicable. Unimplemented in GameObject

Implements GameObject.

◆ onUpdate()

auto Menu::onUpdate ( float dt) ->void
overridevirtual

called once every frame.

Generally used for timers, movement, condition checks, etc. Unimplemented in GameObject

Parameters
dtthe time in seconds that has elapsed

Implements GameObject.

Here is the call graph for this function:

◆ operator=() [1/2]

auto Menu::operator= ( const Menu & ) ->Menu &=default
default
Here is the call graph for this function:

◆ operator=() [2/2]

auto Menu::operator= ( Menu && other) ->Menu &=default
defaultnoexcept
Here is the call graph for this function:

◆ pushEntity()

auto Menu::pushEntity ( Entity * entity) ->bool

A universal push function that automatically fills in empty spaces The Entity should already be a child of the menu (or added as a child right after) may or may not succeed, depending on if the menu has space.

Returns
whether the menu has space for the entity, and it was added
Here is the call graph for this function:
Here is the caller graph for this function:

◆ pushEntityHorizontal()

auto Menu::pushEntityHorizontal ( Entity * entity) ->void

Pushes an item to the first row of a menu, intended for the cards.

Warning
currently this doesn't respect menu sizes, AND OUR GAME RELIES ON THAT
Todo
: this maybe should respect max size now
Here is the call graph for this function:
Here is the caller graph for this function:

◆ recalculateHorizontalPositioning()

void Menu::recalculateHorizontalPositioning ( )
private

Recalculates where children inside the menu should be positioned + scaled in the game.

Only accounts for horizontal elements.

Here is the caller graph for this function:

◆ recalculatePositioning()

void Menu::recalculatePositioning ( )
private

Recalculates where children inside the menu should be positioned + scaled in the game.

Should be called when the dimensions of the menu are changed

Here is the caller graph for this function:

◆ removeEntity() [1/2]

auto Menu::removeEntity ( Entity * entity) ->void

Removes a specific entity from menu.

Here is the call graph for this function:

◆ removeEntity() [2/2]

auto Menu::removeEntity ( int x,
int y )->void

Removes a specific entity at given index.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ repositionHorizontalItems()

auto Menu::repositionHorizontalItems ( const std::vector< Entity * > & ent,
int column )->void
private

Visually arranges the entities in a given column, intended as a helper function for compactMenu.

Only accounts for horizontal elements.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ repositionItems()

auto Menu::repositionItems ( const std::vector< Entity * > & ent,
int column )->void
private

Visually arranges the entities in a given column, intended as a helper function for compactMenu.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ returnButtonIndexDefault()

auto Menu::returnButtonIndexDefault ( int x,
int y )->Entity *
private

Returns the menu position while accounting for default logic, intended as a helper function for getButtonEntity.

Here is the caller graph for this function:

◆ returnButtonIndexWrapped()

auto Menu::returnButtonIndexWrapped ( int x,
int y )->Entity *
private

Returns the menu position while accounting for wrapped logic, intended as a helper function for getButtonEntity.

Here is the caller graph for this function:

◆ returnDefaultMenuPosition()

auto Menu::returnDefaultMenuPosition ( int x,
int y )->Point2D
private

Returns the menu position while accounting for default logic, intended as a helper function for returnMenuPosition.

Here is the caller graph for this function:

◆ returnWrappedMenuPosition()

auto Menu::returnWrappedMenuPosition ( int x,
int y )->Point2D
private

Returns the menu position while accounting for wrapped logic, intended as a helper function for returnMenuPosition.

Here is the caller graph for this function:

◆ save()

auto Menu::save ( Stream & stream) const->void
overridevirtual

Implementations will load the state of a GameObject to a th::Json object.

Unimplemented in GameObject

Parameters
streamth::Json Object

Implements GameObject.

◆ setGapBetweenObjects()

auto Menu::setGapBetweenObjects ( float newGap) ->void

Manually sets the gaps between objects.

◆ setOrigin() [1/2]

auto Menu::setOrigin ( float x,
float y )->void

Changes the origin point to a new value.

Here is the call graph for this function:

◆ setOrigin() [2/2]

auto Menu::setOrigin ( Vector4D newOrigin) ->void

Changes the origin point to a new value.

Here is the call graph for this function:

◆ setOriginX()

auto Menu::setOriginX ( float x) ->void

Sets just the X of the origin point.

Here is the call graph for this function:

◆ setOriginY()

auto Menu::setOriginY ( float y) ->void

Sets just the Y of the origin point.

Here is the call graph for this function:

◆ sizeWidth()

auto Menu::sizeWidth ( ) const->int

Returns the current width of the menu.

Here is the caller graph for this function:

◆ updateMenuChildren()

auto Menu::updateMenuChildren ( ) ->void

Resizes menu in memory, allocates new items, and then calls compact menu.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ width()

auto Menu::width ( ) const->int

Returns the maximum width of the menu.

Here is the caller graph for this function:

◆ from_json

auto from_json ( const json & j,
Menu & m )->void
friend

◆ to_json

auto to_json ( json & j,
const Menu & m )->void
friend

Member Data Documentation

◆ buttons

std::vector<std::vector<Entity*> > Menu::buttons
private

The managed items/entities for the menu.

◆ gapBetweenObjects

float Menu::gapBetweenObjects = 0.01f
private

How much visual space is put between objects in the menu.

◆ maxItemsHeight

int Menu::maxItemsHeight = 3
private

How tall the menu grid is (how many objects it can hold vertically).

◆ maxItemsWide

int Menu::maxItemsWide = 3
private

How wide menu grid is (how many objects it can hold horizontally).

◆ menuScale

Vector4D Menu::menuScale {1.f, 1.f, 0.f, 0.f}
private

◆ originPoint

Vector4D Menu::originPoint {0.f, 0.f, 0, 1}
private

◆ posInfo

PositioningInformation Menu::posInfo
private

Used to keep track of where items in the menu should be put in the game.

◆ type

menuType Menu::type = menuType::mDefault
private

How to tell if the menu wraps.


The documentation for this class was generated from the following files:
  • /home/egrazil/sites/Brunot/The House/source/Component/Menu.h
  • /home/egrazil/sites/Brunot/The House/source/Component/Menu.cpp