ToyMaker Game Engine 0.0.2
ToyMaker is a game engine developed and maintained by Zoheb Shujauddin.
Loading...
Searching...
No Matches
ToyMaker Namespace Reference

Namespace containing all class definitions and functions related to the ToyMaker engine. More...

Classes

class  Application
 Class that handles setup for the rest of the engine and application. More...
struct  CameraProperties
 Struct that encapsulates properties which define the (geometric) aspects of a scene camera. More...
class  CameraSystem
 System responsible for managing all active cameras belonging to this world, tracking and updating associated projection and view matrices. More...
class  BaseComponentArray
 An abstract base class for all ECS component arrays. More...
struct  ComponentFromJSON
 A struct that describes how a JSON component description is turned into a component. More...
struct  ComponentFromJSON< std::shared_ptr< TComponent >, Enable >
 A specialization of ComponentFromJSON that applies to components that are stored as shared pointers to components (as opposed to a value of the component type itself). More...
class  Interpolator
 A template class for interpolating components between simulation frames for various purposes. More...
class  ComponentArray
 A class that implements BaseComponentArray specializing it for a component of type TComponent. More...
class  ComponentManager
 An object that stores and manages updates to all the component arrays instantiated for this ECS World. More...
class  BaseSystem
 The base class that acts as the interface between the engine's ECS system and a particular built-in or user-defined System. More...
class  System
 A system template that disables systems with this form of declaration. More...
class  System< TSystemDerived, std::tuple< TListenedForComponents... >, std::tuple< TRequiredComponents... > >
 The base class for any built-in or user-defined system that would like to be hooked to the engine's event cycle or have access to entities and components. More...
class  SystemManager
 Holds references to all the systems belonging to this manager's ECSWorld. More...
class  ECSWorld
 A class that represents a set of systems, entities, and components, that are all interrelated, but isolated from other similar sets. More...
class  Entity
 The Entity is a wrapper on an entity ID, used as the primary interface between an application and the engine's ECS system. More...
struct  ComponentFromJSON< std::shared_ptr< TResource >, typename std::enable_if< std::is_base_of< IResource, TResource >::value >::type >
 Allows a shared pointer to a resource to be constructed as a component for an entity when loading a scene. More...
class  ResourceFactory
 Tracks pointers to all ResourceConstructors responsible for creating a resource of one type. More...
class  Resource
 The base class for any type whose creation and storage should be managed by the ResourceDatabase. More...
class  ResourceConstructor
 An object representing one method for creating a resource of a given kind. More...
class  IResource
 Base class of all Resource types. More...
class  IResourceFactory
 A class that holds references to all constructors for a type of Resource object. More...
class  IResourceConstructor
 A single way that a resource may be constructed. More...
class  ResourceDatabase
 A database of all Resource types available for this project, and the various ResourceConstructors responsible for making them. More...
class  RBO
 Wrapper class over OpenGL RBOs. More...
class  Framebuffer
 A wrapper class over OpenGL framebuffers. More...
class  FramebufferFromDescription
 Constructs a Framebuffer from its description in JSON. More...
struct  InputAttributesType
 A class that, perhaps just as unnecessarily, stores a value of InputAttributesValueType. More...
struct  InputSourceDescription
 Identifies a single control, such as a button, trigger, or joystick, on a single device. More...
struct  InputFilter
 Filter that uniquely defines ONE axis of one control of one input belonging to one device. More...
struct  InputCombo
 An input combo that whose value is recorded and mapped to an (axis of an) action value of some kind. More...
struct  UnmappedInputValue
 An input state that hasn't yet been mapped to its corresponding action. More...
struct  ActionDefinition
 The definition of a single action, including whether it represents state or change, whether it supports negative values, and the number of axes it has. More...
struct  CommonActionData
 A struct containing meta-info that will be present for all types of actions. More...
struct  OneAxisActionData
 Actions that have just one axis of data, eg., the accelerator on a car. More...
struct  TwoAxisActionData
 Actions that have two axes of data. (Pointer locations, movement direction input, pitch+roll, etc.). More...
struct  ThreeAxisActionData
 Actions described by 3 axes (I can't think of any examples for this). More...
union  ActionData
 A union that may contain any one of SimpleActionData, OneAxisActionData, TwoAxisActionData, ThreeAxisActionData. More...
class  InputManager
 The class that acts as the main interface between the rest of the project and the input system. More...
class  IActionHandler
 Class interface for systems that wish to be notified when action events occur in an action context. More...
class  ActionContext
 A container for actions that make sense within a given context. More...
class  ActionDispatch
 An object responsible for tracking action listeners for a given project. More...
struct  InstanceAttributeDescriptor
 A struct describing the name and type of each attribute designated as an instance attribute. More...
struct  InstanceLayout
 Object representing the layout of one set of related attributes representing (presumably) one object or instance. More...
class  BaseInstanceAllocator
 Class that is responsible for taking an instance layout and correctly uploading it to the GPU. More...
class  BuiltinModelMatrixAllocator
 An instance allocator initialized with the built in model matrix layout object. More...
struct  LightEmissionData
 A struct, used as a component, describing the emissive properties of the light it represents per the Blinn-Phong shading model. More...
class  LightInstanceAllocator
 The allocator associated with built in light sources used as attributes. More...
class  Material
 A collection of key value pairs used to control the behaviour of the rendering system when rendering a single "object.". More...
class  MaterialFromDescription
 A material resource constructor which converts a material represented in JSON to its Material equivalent. More...
class  StaticMesh
 A class whose current main purpose is to store geometry related info, and to upload it to GPU memory when requested. More...
class  StaticMeshFromDescription
 Creates a static mesh based on its description in JSON. More...
class  StaticModel
 This engine's representation of a single unrigged 3D model. More...
class  StaticModelFromFile
 A constructor method for StaticModels that loads such a model from its model file (w/ extensions such as .fbx, .obj, .gltf, and so on). More...
class  Registrator
 Helper class for registering a class at program startup. More...
struct  OpaqueRenderUnit
 An object representing a single opaque mesh-material pair, to be rendered this frame. More...
struct  LightRenderUnit
 Contains the model matrix, mesh, and light emission for a single light object being rendered this frame. More...
class  BaseRenderStage
 Represents a single render stage or a render step that applies to the default (window) framebuffer. More...
class  BaseOffscreenRenderStage
 Base class for render stages which render to an offscreen buffer. More...
class  GeometryRenderStage
 Render step responsible for translating mesh-material data into geometry buffers. More...
class  LightingRenderStage
 Render stage which takes geometry buffers and scene lights as inputs, and produces a lit scene as output. More...
class  BlurRenderStage
 Multipurpose render stage which at present is used to compute a simple bloom effect from a scene's "brightCutoff" texture. More...
class  SkyboxRenderStage
 Uses a skybox texture (i.e a texture with a supported cubemap format) to render a skybox behind geometry in the scene. More...
class  TonemappingRenderStage
 Takes lit scene (with bloom if it's used), and produces a tonemapped and gamma corrected version of the scene. More...
class  AdditionRenderStage
 Stage responsible for combining multiple textures together. More...
class  ScreenRenderStage
 Render stage responsible for rendering any texture attached as source to the screen. More...
class  ResizeRenderStage
 Render stage responsible for resizing a texture to its final intended resolution. More...
struct  RenderSet
 A collection of shaders, render configurations, cameras, and related framebuffers used by a viewport within an ECSWorld. More...
class  RenderSystem
 The render system for a single ECSWorld, which joins together various RenderStages into a render pipeline for objects present in that world. More...
struct  Placement
 A component representing the position, rotation, and scale of an entity. More...
struct  Transform
 The transform component, which moves the vertices of a model to their world space coordinates during rendering. More...
struct  SceneHierarchyData
 Component representing hierarchical information related to this entity. More...
class  SceneFromFile
 Constructs a scene tree from a file containing its JSON description. More...
class  SceneFromDescription
 Constructs a scene tree (separate from the scene tree) based on its description in JSON. More...
class  SceneNodeFromDescription
 Constructs a scene node based on its description in JSON. More...
class  SimObjectFromDescription
 Constructs a SimObject from its description in JSON. More...
class  ViewportNodeFromDescription
 Constructs a ViewportNode from its description in JSON. More...
class  SceneNodeCore
 The core of a node in the SceneSystem, a set of components and methods overridable or usable by all types of scene nodes. More...
class  BaseSceneNode
 A CRTP template for all the scene node types present in the project. More...
class  SceneNode
 The most basic vanilla flavour of scene node comprised of no more than a name and some components. More...
class  ViewportNode
 A type of node capable of and responsible for interacting sensibly with the engine's RenderSystem and ECSWorlds. More...
class  SceneSystem
 The SceneSystem, a singleton System, responsible for tracking all objects in the scene, computing their Transforms, and maintaining hierarchical relationships between scene nodes. More...
class  ShaderProgram
 A wrapper over OpenGL's shader programs. More...
class  ShaderProgramFromFile
 Constructs a ShaderProgram from its shader program header, found at a particular path. More...
class  StaticMeshSphereLatLong
 Mesh constructor that creates a spherical mesh using a latitude-longitude method. More...
class  StaticMeshRectangleDimensions
 Constructs a rectangle mesh based on its dimensions. More...
class  StaticMeshCuboidDimensions
 Constructs a cuboid mesh based on its dimensions. More...
class  StaticModelSphereLatLong
 Constructs a sphere model using the latitude-longitude method. More...
class  StaticModelRectangleDimensions
 Constructs a rectangle mesh using the latitude-longitude method. More...
class  StaticModelCuboidDimensions
 Constructs a cuboid mesh based on its dimensions. More...
class  SignalObserver_
 A class containing most of the implementation for this engine's SignalObserver concept. More...
class  Signal_
 A class containing most of the implementation of this engine's Signal concept. More...
class  SignalObserver
 A SignalObserver object, which can subscribe to Signals matching its data signature and receive signal events from them. More...
class  Signal
 A Signal object, designed to emit signals matching some data signature to be received by all the SignalObservers subscribed to it. More...
class  ISignalObserver
class  ISignal
 The base class for any signal that an object advertises. More...
class  SignalTracker
 A signal tracker, the main interface between an object and the signal system. More...
struct  SimCore
 The component associated with the SimSystem. More...
class  SimSystem
 The SimSystem is a system responsible for providing scriptability via SimObjects and SimObjectAspects. More...
class  SimObject
 A wrapper on entity that allows objects in the Scene to be scriptable. More...
class  FixedActionBinding
 A class representing the connection between an Action generated by the InputManager, and a BaseSimObjectAspect method that is interested in handling the action. More...
class  BaseSimObjectAspect
 The base class for all aspects, providing an interface to its attached SimObject, and consequently, the engine's SceneSystem. More...
class  SimObjectAspect
 An object containing closely related methods and data, and exposing object lifecycle and application event loops to a developer extending it. More...
class  OctreeNode
 A single node of an octree, representing a single octant of the 8 that make up its parent region. More...
class  Octree
 A data structure used for speeding up spatial queries about 3-dimensional objects in the scene. More...
class  SpatialQuerySystem
 The spatial query system, an ECS System that tracks and updates spatial query data for objects in the scene, and which exposes spatial query methods. More...
struct  Volume
struct  VolumeBase_
 The base class of all spatial query volumes. More...
struct  VolumeBox
 Holds the parameters describing the spatial query volume of a simple three-dimensionsal box. More...
struct  VolumeCapsule
 Holds the parameters describing the spatial query volume of a simple three-dimensionsal capsule (or pill, or whatever you like). More...
struct  VolumeSphere
 Holds parameters describing a spherical spatial query volume. More...
struct  AreaTriangle
 A set of 3 points located in the world forming a (hopefully sensible) triangle. More...
struct  AreaCircle
 A set of numbers representing a single circle situated somewhere in the world. More...
struct  Ray
 A set of numbers describing a ray with its source at some finite point in the world, projected in a direction for some positive length. More...
struct  Plane
 A set of numbers describing a plane situated somewhere in the world. More...
struct  Simplex
 Primitive for GJK algorithm. More...
class  Polytope
 Primitive for EPA algorithm. More...
struct  Contact
 Object representing contact information between a pair of convex shapes from the perspective of one of those shapes. More...
struct  Collision
 Data representing everything about a collision. More...
struct  ObjectBounds
 A component defining the true bounds of a spatially queryable object situated somewhere in the world. More...
class  AxisAlignedBounds
 An object containing a coarse simplified representation, AABB, of spatially queryable objects. More...
class  TextFont
 A wrapper class over SDL_ttf, providing methods to generate text textures from text using a font as a resource. More...
class  TextFontFromFile
 The ResourceConstructor responsible for loading a TextFont from its file path. More...
struct  ColorBufferDefinition
 A struct containing the definition of a color buffer, using which similar color buffers can be created. More...
class  Texture
 The class representation of textures on this engine, which are a type of Resource used both within and outside of the engine. More...
class  TextureFromFile
 A resource constructor which loads a texture from a supported image file located via its file path. More...
class  TextureFromColorBufferDefinition
 Generates a texture based on its color buffer definition. More...
class  RangeMapperLinear
 A simple linear interpolation implementation between a fixed input and output range. More...
struct  VertexAttributeDescriptor
 The description of a single vertex attribute associated with a vertex layout, giving its size and location id. More...
struct  VertexLayout
 A list of attribute descriptors that together define the layout and size of the vertex they make up in GPU memory. More...
struct  BuiltinVertexData
 The vertex data used by all this engine's in-built shader program's vertex shaders. More...
class  WindowContext
 A class providing access to various window management methods and window event Signals. More...
class  IUsePointer
 The interface used by aspects, objects, which cast pointer rays to interact with objects present in the world. More...
class  ILeftClickable
 The interface used by aspects which wish to respond to mouse left click events (or equivalent). More...
class  IHoverable
 The interface implemented by aspects which wish to respond to pointer hover related events. More...
class  NineSlicePanel
 Resource responsible for resizing a texture using the 9-slice technique, for use in UI elements. More...
class  NineSlicePanelFromDescription
 Resource constructor for creating new NineSlicePanel resources from their descriptions in JSON. More...
class  QueryClick
 The aspect responsible for conducting raycasts and calling pointer event callbacks on eligible objects. More...
class  RenderDebugViewer
 A utility aspect class used to log window events and change the debug texture rendered to the viewport it manages. More...
class  UIButton
 A UI component class for creating simple buttons comprised of a resizable panel and some text. More...
class  UIImage
 The aspect class responsible for displaying an image from a file scaled to some specific dimensions. More...
class  UIPanel
 UI aspect responsible for managing and rendering a NineSlicePanel texture on the UI. More...
class  UIText
 An aspect responsible for rendering text textures and displaying them on a surface in the scene. More...

Typedefs

using EntityID = std::uint64_t
 A single unsigned integer used as a name for an entity managed by an ECS system.
using WorldID = std::uint64_t
 An unsigned integer representing the name of an ECS world.
using UniversalEntityID = std::pair<WorldID, EntityID>
 An ID that uniquely identifies an entity.
using ECSType = std::uint8_t
 A number tag used to represent components and systems.
using ComponentType = ECSType
 An unsigned integer representing the type of a component.
using SystemType = ECSType
 An unsigned integer representing the type of a system.
using Signature = std::bitset<kMaxComponents>
 A 255 bit number, where each enabled bit represents a relationship between an entity and some ECS related object.
using ActionName = ::std::string
 The name of an action whose meaning is known within a specific context.
using ContextName = ::std::string
 The name of a context which contains definitions for actions that are valid within it.
typedef uint8_t AxisFilterType
 A type with multiple uses.
typedef uint8_t InputAttributesValueType
 A type that is quite possibly unnecessary now that DeviceType and ControlType exist.
typedef ::std::pair< DeviceType, ControlTypeInputSourceType
 A composite type which uniquely identifies a control attached to the platform running this application.
using QualifiedActionName = ::std::pair<ContextName, ActionName>
 An identifier that fully names one action present in the project.
typedef CommonActionData SimpleActionData
 Actions that ultimately act like a single button value, where mActivated is the state of the button.
using LightPackedData = std::pair<std::pair<glm::vec4, glm::vec4>, LightEmissionData>
 A version of light data where the first element represents the light's position and direction, and the second represents its emission properties.
using RenderSetID = uint32_t
using BoxCorner = uint8_t
 Type used to represent the name of the corner of a box.

Enumerations

enum class  DeviceType : uint8_t {
  DeviceType::NA , DeviceType::MOUSE , DeviceType::KEYBOARD , DeviceType::CONTROLLER ,
  DeviceType::TOUCH
}
 The type of input device that was responsible for creating the signal which will be mapped to an action. More...
enum class  ControlType : uint8_t {
  ControlType::NA , ControlType::AXIS , ControlType::MOTION , ControlType::POINT ,
  ControlType::BUTTON , ControlType::RADIO
}
 A single device may have multiple buttons and other controls, each of which will correspond to a type of input listed here. More...
enum  InputAttributes : InputAttributesValueType {
  N_AXES =0x3 , HAS_NEGATIVE =0x4 , HAS_CHANGE_VALUE =0x8 , HAS_BUTTON_VALUE =0x10 ,
  HAS_STATE_VALUE =0x20 , STATE_IS_LOCATION =0x40
}
 A collection of a few important input attribute value type values and masks. More...
enum  AxisFilter : AxisFilterType {
  SIMPLE =0x0 , X_POS =0x1 , X_NEG =0x5 , Y_POS =0x2 ,
  Y_NEG =0x6 , Z_POS =0x3 , Z_NEG =0x7 , X_CHANGE_POS =0x9 ,
  X_CHANGE_NEG =0xD , Y_CHANGE_POS =0xA , Y_CHANGE_NEG =0xE , Z_CHANGE_POS =0xB ,
  Z_CHANGE_NEG =0xF
}
 Enumeration of all possible axis filter values. More...
enum  AxisFilterMask : AxisFilterType { ID =0x3 , SIGN =0x4 , CHANGE =0x8 }
 Important values used with AxisFilterType for determining the type, direction, and sign, of an input.
enum class  ActionValueType : uint8_t { STATE , CHANGE }
 The type of value associated with this action.
enum class  ActionType { BUTTON , ONE_AXIS , TWO_AXIS , THREE_AXIS }
 A seemingly redundant type that is a part of the ActionData struct and not the ActionDefinition struct.
enum class  ActionTrigger : uint8_t { UPDATE , RESET }
 Helps describe what InputCombo related event was responsible for signaling this action.
enum  DefaultInstanceAttributeLocations : int { FIXED_MATRIXMODEL =7 , RUNTIME =-8 }
 Attribute locations, per existing shaders.
enum class  RelativeTo : uint8_t { PARENT =0 }
 (Presently unused) A marker to indicate how transforms should be computed for a given scene node. More...
enum  SpecialEntity : EntityID { ENTITY_NULL = kMaxEntities }
 (Perhaps unused) Special "reserved" entity IDs which the scene system might use. More...
enum  BoxCornerSpecifier : BoxCorner { RIGHT =0x1 , TOP =0x2 , FRONT =0x4 }
 Enum values correspond to bits on a BoxCorner which help specify which side of the box on each axis is being indicated.
enum  DefaultAttributeLocation {
  LOCATION_POSITION =0 , LOCATION_NORMAL =1 , LOCATION_TANGENT =2 , LOCATION_COLOR =3 ,
  LOCATION_UV1 =4 , LOCATION_UV2 =5 , LOCATION_UV3 =6
}
 Values for different attribute locations used by the engine's built-in shader programs.

Functions

 NLOHMANN_JSON_SERIALIZE_ENUM (CameraProperties::ProjectionType, { {CameraProperties::ProjectionType::FRUSTUM, "frustum"}, {CameraProperties::ProjectionType::ORTHOGRAPHIC, "orthographic"}, })
void from_json (const nlohmann::json &json, CameraProperties &cameraProperties)
void to_json (nlohmann::json &json, const CameraProperties &cameraProperties)
 NLOHMANN_JSON_SERIALIZE_ENUM (DeviceType, { {DeviceType::NA, "na"}, {DeviceType::MOUSE, "mouse"}, {DeviceType::KEYBOARD, "keyboard"}, {DeviceType::TOUCH, "touch"}, {DeviceType::CONTROLLER, "controller"}, })
 NLOHMANN_JSON_SERIALIZE_ENUM (ControlType, { {ControlType::NA, "na"}, {ControlType::AXIS, "axis"}, {ControlType::MOTION, "motion"}, {ControlType::POINT, "point"}, {ControlType::BUTTON, "button"}, {ControlType::RADIO, "radio"}, })
 NLOHMANN_JSON_SERIALIZE_ENUM (AxisFilter, { {AxisFilter::SIMPLE, "simple"}, {AxisFilter::X_POS, "+x"}, {AxisFilter::X_NEG, "-x"}, {AxisFilter::Y_POS, "+y"}, {AxisFilter::Y_NEG, "-y"}, {AxisFilter::Z_POS, "+z"}, {AxisFilter::Z_NEG, "-z"}, {AxisFilter::X_CHANGE_POS, "+dx"}, {AxisFilter::X_CHANGE_NEG, "-dx"}, {AxisFilter::Y_CHANGE_POS, "+dy"}, {AxisFilter::Y_CHANGE_NEG, "-dy"}, {AxisFilter::Z_CHANGE_POS, "+dz"}, {AxisFilter::Z_CHANGE_NEG, "-dz"}, })
 NLOHMANN_JSON_SERIALIZE_ENUM (InputCombo::Trigger, { {InputCombo::Trigger::ON_PRESS, "on-press"}, {InputCombo::Trigger::ON_RELEASE, "on-release"}, {InputCombo::Trigger::ON_CHANGE, "on-change"}, {InputCombo::Trigger::ON_BUTTON_PRESS, "on-button-press"}, {InputCombo::Trigger::ON_BUTTON_RELEASE, "on-button-release"}, {InputCombo::Trigger::ON_BUTTON_CHANGE, "on-button-change"}, })
 NLOHMANN_JSON_SERIALIZE_ENUM (ActionValueType, { {ActionValueType::STATE, "state"}, {ActionValueType::CHANGE, "change"}, })
void to_json (nlohmann::json &json, const ToyMaker::InputAttributesType &inputAttributes)
void from_json (const nlohmann::json &json, ToyMaker::InputAttributesType &inputAttributes)
void to_json (nlohmann::json &json, const ToyMaker::InputSourceDescription &inputSourceDescription)
void from_json (const nlohmann::json &json, ToyMaker::InputSourceDescription &inputSourceDescription)
void to_json (nlohmann::json &json, const ToyMaker::InputFilter &inputFilter)
void from_json (const nlohmann::json &json, ToyMaker::InputFilter &inputFilter)
void to_json (nlohmann::json &json, const ToyMaker::InputCombo &inputCombo)
void from_json (const nlohmann::json &json, ToyMaker::InputCombo &inputCombo)
void to_json (nlohmann::json &json, const ToyMaker::ActionDefinition &actionDefinition)
void from_json (const nlohmann::json &json, ToyMaker::ActionDefinition &actionDefinition)
 NLOHMANN_JSON_SERIALIZE_ENUM (LightEmissionData::LightType, { {LightEmissionData::LightType::directional, "directional"}, {LightEmissionData::LightType::point, "point"}, {LightEmissionData::LightType::spot, "spot"}, })
void from_json (const nlohmann::json &json, LightEmissionData &lightEmissionData)
void to_json (nlohmann::json &json, const LightEmissionData &lightEmissionData)
void from_json (const nlohmann::json &json, Placement &placement)
void to_json (nlohmann::json &json, const Placement &placement)
void to_json (nlohmann::json &json, const SceneHierarchyData &sceneHierarchyData)
void from_json (const nlohmann::json &json, SceneHierarchyData &sceneHierarchyData)
void to_json (nlohmann::json &json, const Transform &transform)
void from_json (const nlohmann::json &json, Transform &transform)
 NLOHMANN_JSON_SERIALIZE_ENUM (RelativeTo, { {RelativeTo::PARENT, "parent"}, })
 NLOHMANN_JSON_SERIALIZE_ENUM (ViewportNode::RenderConfiguration::ResizeType, { {ViewportNode::RenderConfiguration::ResizeType::OFF, "off"}, {ViewportNode::RenderConfiguration::ResizeType::VIEWPORT_DIMENSIONS, "viewport-dimensions"}, {ViewportNode::RenderConfiguration::ResizeType::TEXTURE_DIMENSIONS, "texture-dimensions"}, })
 NLOHMANN_JSON_SERIALIZE_ENUM (ViewportNode::RenderConfiguration::ResizeMode, { {ViewportNode::RenderConfiguration::ResizeMode::FIXED_ASPECT,"fixed-aspect"}, {ViewportNode::RenderConfiguration::ResizeMode::EXPAND_VERTICALLY, "expand-vertically"}, {ViewportNode::RenderConfiguration::ResizeMode::EXPAND_HORIZONTALLY, "expand-horizontally"}, {ViewportNode::RenderConfiguration::ResizeMode::EXPAND_FILL, "expand-fill"}, })
 NLOHMANN_JSON_SERIALIZE_ENUM (ViewportNode::RenderConfiguration::UpdateMode, { {ViewportNode::RenderConfiguration::UpdateMode::NEVER, "never"}, {ViewportNode::RenderConfiguration::UpdateMode::ONCE, "once"}, {ViewportNode::RenderConfiguration::UpdateMode::ON_FETCH, "on-fetch"}, {ViewportNode::RenderConfiguration::UpdateMode::ON_RENDER, "on-render"}, {ViewportNode::RenderConfiguration::UpdateMode::ON_RENDER_CAP_FPS, "on-render-cap-fps"}, })
 NLOHMANN_JSON_SERIALIZE_ENUM (ViewportNode::RenderConfiguration::RenderType, { {ViewportNode::RenderConfiguration::RenderType::BASIC_3D, "basic-3d"}, {ViewportNode::RenderConfiguration::RenderType::ADDITION, "addition"}, })
void to_json (nlohmann::json &json, const ViewportNode::RenderConfiguration &renderConfiguration)
void from_json (const nlohmann::json &json, ViewportNode::RenderConfiguration &renderConfiguration)
void from_json (const nlohmann::json &json, SimCore &simCore)
void to_json (nlohmann::json &json, const SimCore &simCore)
std::pair< bool, glm::vec3 > computeIntersection (const Ray &ray, const Plane &plane)
 Returns a bool-vector pair, with bool indicating whether a point of intersection was found, and the vector containing the point of intersection.
std::pair< bool, glm::vec3 > computeIntersection (const Ray &ray, const AreaTriangle &triangle)
 Returns a bool-vector pair, with bool indicating whether a point of intersection was found, and the vector containing the point of intersection.
std::pair< uint8_t, std::pair< glm::vec3, glm::vec3 > > computeIntersections (const Ray &ray, const AxisAlignedBounds &axisAlignedBounds)
 Returns an unsigned int and vector-pair pair, with unsigned indicating whether any and how many points of intersection were found with the AABB, and the vector containing the points of intersection.
std::pair< uint8_t, std::pair< glm::vec3, glm::vec3 > > computeIntersections (const Ray &ray, const ObjectBounds &objectbounds)
 Returns an unsigned int and vector pair pair, with int indicating whether and how many points of intersection were found, and the vector containing the points of intersection.
bool overlaps (const glm::vec3 &point, const ObjectBounds &bounds)
 Returns a bool value indicating whether point is contained by bounds.
bool overlaps (const ObjectBounds &bounds, const glm::vec3 &point)
 Returns a bool value indicating whether point is contained by bounds.
bool overlaps (const Ray &ray, const ObjectBounds &bounds)
 Returns a bool value indicating whether the ray passes through the object volume.
bool overlaps (const ObjectBounds &bounds, const Ray &ray)
 Returns a bool value indicating whether the ray passes through the object volume.
bool overlaps (const glm::vec3 &point, const AxisAlignedBounds &bounds)
 Returns whether point is contained by bounds.
bool overlaps (const AxisAlignedBounds &bounds, const glm::vec3 &point)
 Returns whether point is contained by bounds.
bool overlaps (const Ray &ray, const AxisAlignedBounds &bounds)
 Returns whether ray overlaps with bounds.
bool overlaps (const AxisAlignedBounds &bounds, const Ray &ray)
 Returns whether ray overlaps with bounds.
bool overlaps (const AxisAlignedBounds &one, const AxisAlignedBounds &two)
 Returns whether one overlaps two.
bool overlaps (const ObjectBounds &one, const ObjectBounds &two)
 Returns whether one overlaps two.
bool overlaps (const AxisAlignedBounds &one, const ObjectBounds &two)
 Returns whether one overlaps two.
bool overlaps (const ObjectBounds &one, const AxisAlignedBounds &two)
 Returns whether one overlaps two.
template<typename T, typename U>
std::pair< bool, SimplexgjkOverlaps (const T &one, const U &two)
 GJK implementation based on Casey Muratori's video lecture, which is available here.
template<typename T, typename U>
Polytope buildPolytope (const T &one, const U &two, const Simplex &gjkSimplex)
 EPA implementation, used to derive contact information for intersections between convex shapes.
template<typename T, typename U>
Collision checkCollision (const T &one, const U &two)
 Checks whether a pair of convex 3D shapes are colliding, returning information about the collision if they are.
bool contains (const glm::vec3 &point, const ObjectBounds &bounds)
 Returns whether point is contained by bounds.
bool contains (const glm::vec3 &point, const AxisAlignedBounds &bounds)
 Returns whether point is contained by bounds.
bool contains (const Ray &ray, const AxisAlignedBounds &bounds)
 Returns whether ray is contained by bounds.
bool contains (const Ray &ray, const ObjectBounds &bounds)
 Returns whether ray is contained by bounds.
bool contains (const AxisAlignedBounds &one, const AxisAlignedBounds &two)
 Returns whether one is contained by two.
bool contains (const ObjectBounds &one, const AxisAlignedBounds &two)
 Returns whether one is contained by two.
std::pair< glm::vec3, glm::vec3 > deriveTangents (const glm::vec3 &vector)
 Returns a pair of tangents to an input vector.
template<typename T, typename U>
glm::vec3 minkowskiDifference (const T &one, const U &two, const glm::vec3 &along)
 Closely associated with GJK; finds the Minkowski difference between two shapes situated somewhere in the world.
template<typename T, typename U>
std::tuple< glm::vec3, glm::vec3, glm::vec3 > minkowskiDifferenceFull (const T &one, const U &two, const glm::vec3 &along)
 Closely associated with GJK; finds the Minkowski difference between two shapes situated somewhere in the world.
template<>
void SceneNodeCore::setEnabled< SpatialQuerySystem::LightBoundsComputeSystem > (bool)
template<>
void SceneNodeCore::setEnabled< SpatialQuerySystem::StaticModelBoundsComputeSystem > (bool)
float squareDistance (const glm::vec3 &vector)
bool isFinite (float number)
 Tests whether a given number is finite.
bool isFinite (const glm::vec3 &vector)
 Tests whether a set of 3 numbers is finite.
bool isPositiveStrict (float number)
 Tests whether a number is strictly positive.
bool isPositiveStrict (const glm::vec3 &vector)
 Tests whether a set of 3 numbers is strictly positive.
bool isNonNegative (float number)
 Tests whether a number is non-negative.
bool isNonNegative (const glm::vec3 &vector)
 Tests whether a set of numbers is non-negative.
std::array< AreaTriangle, 12 > computeBoxFaceTriangles (const std::array< glm::vec3, 8 > &boxCorners)
 Generates a list of triangles making up the surface of a box situated somewhere in the world, given the coordinates of its corners.
 NLOHMANN_JSON_SERIALIZE_ENUM (ObjectBounds::TrueVolumeType, { {ObjectBounds::TrueVolumeType::BOX, "box"}, {ObjectBounds::TrueVolumeType::SPHERE, "sphere"}, {ObjectBounds::TrueVolumeType::CAPSULE, "capsule"}, }) inline void to_json(nlohmann
void from_json (const nlohmann::json &json, ObjectBounds &objectBounds)
void to_json (nlohmann::json &json, const AxisAlignedBounds &axisAlignedBounds)
void from_json (const nlohmann::json &json, AxisAlignedBounds &objectBounds)
GLenum deduceInternalFormat (const ColorBufferDefinition &colorBufferDefinition)
 A (quite possibly unnecessary) function to fetch the enum corresponding to the "internalFormat" argument of glTexImage2D based on some color buffer definition.
GLenum deduceExternalFormat (const ColorBufferDefinition &colorBufferDefinition)
 A (quite possibly unnecessary) function to fetch the enum corresponding to the "format" argument of glTexImage2D based on some color buffer definition.
void to_json (nlohmann::json &json, const ColorBufferDefinition &colorBufferDefinition)
void from_json (const nlohmann::json &json, ColorBufferDefinition &colorBufferDefinition)
 NLOHMANN_JSON_SERIALIZE_ENUM (ColorBufferDefinition::CubemapLayout, { {ColorBufferDefinition::CubemapLayout::NA, "na"}, {ColorBufferDefinition::CubemapLayout::ROW, "row"}, })
glm::mat4 buildModelMatrix (glm::vec4 position, glm::quat orientation, glm::vec3 scale=glm::vec3{1.f, 1.f, 1.f})
 Converts a position, orientation and scale into its model matrix equivalent.
void from_json (const nlohmann::json &json, BuiltinVertexData &builtinVertexData)
void to_json (nlohmann::json &json, const BuiltinVertexData &builtinVertexData)
 NLOHMANN_JSON_SERIALIZE_ENUM (NineSlicePanel::ScaleMode, { {NineSlicePanel::ScaleMode::STRETCH, "stretch"}, {NineSlicePanel::ScaleMode::TILE, "tile"}, })
 NLOHMANN_JSON_SERIALIZE_ENUM (UIButton::State, { {UIButton::State::ACTIVE, "active"}, {UIButton::State::HOVER, "hover"}, {UIButton::State::PRESSED, "pressed"}, {UIButton::State::INACTIVE, "inactive"}, })

Variables

constexpr EntityID kMaxEntities { 1000000 }
 A user-set constant which limits the number of creatable entities in a single ECS system.
constexpr ECSType kMaxECSTypes { 255 }
 A constant used to restrict the number of definable system and component types in a project.
constexpr ComponentType kMaxComponents { kMaxECSTypes }
 A constant that restricts the number of definable components in a project.
constexpr SystemType kMaxSystems { kMaxECSTypes }
 A constant that restricts the number of definable systems in a project.
const ::std::map< InputSourceType, InputAttributesTypekInputSourceTypeAttributes
 A mapping from each type of input control to the attributes associated with it.
static InstanceLayout BuiltinModelMatrixLayout
 The layout of the in-built model matrix instance attribute, present on pretty much every engine-defined shader.
static InstanceLayout LightInstanceLayout
 The layout for built-in light sources when used as instance attributes.
const RenderSetID kMaxRenderSetIDs { 10000 }
 The total number of RenderSets, per ECSWorld, that can be created.
const std::string kSceneRootName { "" }
 Special name for the scene root, unusable by any other scene object.
template<typename TSimObjectAspectDerived>
Registrator< SimObjectAspect< TSimObjectAspectDerived > > & SimObjectAspect< TSimObjectAspectDerived >::s_registrator
static constexpr uint8_t kMaxIterations { 64 }
VertexLayout BuiltinVertexLayout
 The vertex layout used by most shader programs built into the engine.

Detailed Description

Namespace containing all class definitions and functions related to the ToyMaker engine.

ToyMaker is a game engine developed by Zoheb Shujauddin in 2023-2025, first used to create an adaptation of a board game known as "The Game of Ur." It is built on top of well known C++ libraries such as SDL, OpenGL, assimp, nlohmann json, and glm, among others.

Function Documentation

◆ buildPolytope()

template<typename T, typename U>
Polytope ToyMaker::buildPolytope ( const T & one,
const U & two,
const Simplex & gjkSimplex )
inline

EPA implementation, used to derive contact information for intersections between convex shapes.

Given a valid GJK simplex enclosing origin, expands the polytope until it the closest Minksowski difference surface to the origin is found.

The distance between the origin and the closest difference surface gives us the "Minimum Translation Vector," which is the distance by which both shapes can be moved away from one another to remove their overlap.

◆ checkCollision()

template<typename T, typename U>
Collision ToyMaker::checkCollision ( const T & one,
const U & two )
inline

Checks whether a pair of convex 3D shapes are colliding, returning information about the collision if they are.

It does this by:

  1. Using GJK to determine whether an overlap exists, and to build a tetrahedron enclosing the origin of the Minkowski Difference of the two shapes.
  2. Using expanding polytope algorithm to find the minimum translation vector and direction between the shapes.
  3. Deriving penetration depth, normals, contacts, relative to each shape, based on the minimum translation vector returned in the previous step.

◆ gjkOverlaps()

template<typename T, typename U>
std::pair< bool, Simplex > ToyMaker::gjkOverlaps ( const T & one,
const U & two )
inline

GJK implementation based on Casey Muratori's video lecture, which is available here.

Computes furthest point along a given direction in one, minus furthest point along the opposite direction in shape 2. Performing this in all directions yields a surface which, if the two shapes overlap, contains origin (0, 0, 0)

GJK attempts to find a minimal tetrahedron whose points are points on the boundaries of the Minkowski difference shape which encloses (0, 0, 0)

Return values
trueIf overlap is found, with Tetrahedron enclosing origin;
falseIf the shapes don't overlap;

Variable Documentation

◆ SimObjectAspect< TSimObjectAspectDerived >::s_registrator

template<typename TSimObjectAspectDerived>
Registrator<SimObjectAspect<TSimObjectAspectDerived> >& ToyMaker::SimObjectAspect< TSimObjectAspectDerived >::s_registrator
Initial value:
{
}
Helper class for registering a class at program startup.
Definition registrator.hpp:64