DEKI/ENGINE docs
Deki 0.19.0
Modular C++ 2D engine for embedded displays and desktop
Loading...
Searching...
No Matches

Keeps its object at a point on the screen, such as the top-left corner, on every screen size and while the camera moves. More...

#include <deki/ScreenAnchor.h>

Inherits Deki::Component.

Public Member Functions

 ScreenAnchor ()
 ~ScreenAnchor () override
Public Member Functions inherited from Deki::Component
 Component ()
virtual ~Component ()=default
 Component (const Component &)=delete
Component & operator= (const Component &)=delete
ComponentType GetType () const
 The class's type id (TypeId<T>()), 0 for an instance with no type info.
ComponentType GetBaseType () const
 The direct component base's type id, so GetComponent<Base>() finds subclasses.
const ComponentTypeInfo * GetTypeInfo () const
 The class entry this instance runs through.
void SetTypeInfo (const ComponentTypeInfo *info)
 Attaches the class entry.
bool DeclaresUpdate () const
 True when this class (or a reflected base) declares Update(), as the codegen read it from the class declaration.
Object * GetOwner () const
void SetOwner (Object *owner)
virtual void Awake ()
 Called once, after AssetRefs and ObjectRefs are resolved.
virtual void Start ()
 Called once before the first Update, after every component's Awake has run.
virtual void Update ()
 Called every frame, only on classes that declare it.
bool HasAwoken () const
bool HasStarted () const
void MarkAwoken ()
void MarkStarted ()
virtual void LoadAssets ()
 Loads the assets this component needs (sprites, fonts, ...).
virtual void UnloadAssets ()
 Drops this component's asset pointers before shutdown.
virtual void RuntimeUpdate (float deltaTime)
 Engine-driven per-frame work (physics, animation, ...), separate from the script-facing Update(): it runs in every mode, including the editor in edit mode, on components whose NeedsRuntimeUpdate() is true.
virtual void OnAssetRefResolved (const char *propertyName, void *asset, const char *guid)
 Called after LifecycleManager resolves the AssetRef field propertyName to asset, loaded from guid.
virtual bool NeedsAssetLoading () const
 True when LoadAssets() should be called.
virtual bool NeedsRuntimeUpdate () const
 True when RuntimeUpdate() should be called each frame.
bool Deserialize (SceneFormat::SceneMsgPackParser &parser, uint32_t mapSize)
 Reads this component's fields from the MessagePack map the parser is at (mapSize key-value pairs), through the codegen's hash-switch deserializer.
void ResolveObjectRefs (Scene *scene)
 Points every ObjectRef field at its object in scene (ObjectRef.id -> ObjectRef.resolved).
void RemapObjectRefs (const std::unordered_map< uint32_t, uint32_t > &idRemap)
 Rewrites ObjectRef ids through idRemap (old id -> new id), after Instantiate() gave the copies new ids.
bool HasRefsResolved () const
void MarkRefsResolved ()
void ResetRefsResolved ()
virtual void OnPropertyChanged (const char *propertyName)
 Called when the editor changes the field propertyName, after both Execute() and Undo() of ModifyComponentPropertyCommand.

Static Public Member Functions

static void PlaceAll (const Scene *scene, const ICamera &camera, int screenWidth, int screenHeight)
 Moves every anchored object of scene, and every persistent one, to its point on a screen screenWidth x screenHeight pixels seen through camera.

Public Attributes

ScreenPoint anchor = ScreenPoint::TopLeft
float offsetX = 0.0f
float offsetY = 0.0f
AnchorUpdate update = AnchorUpdate::Always

Additional Inherited Members

Protected Attributes inherited from Deki::Component
Object * m_Owner
const ComponentTypeInfo * m_TypeInfo
bool m_RefsResolved
bool m_HasAwoken
bool m_HasStarted

Detailed Description

Keeps its object at a point on the screen, such as the top-left corner, on every screen size and while the camera moves.

For a HUD: hearts at Top Left, a score at Top Right.

The object sits at the anchor plus the offset, in meters, with Y up. Its position in the Transform is set from these, so it is not edited there; rotation and scale still come from the Transform, and children follow the object as usual.

Placement runs once per frame, before drawing, from the scene's camera and the screen size (PlaceAll). The object then has a normal world position, so input and other scripts see it where it is drawn. With update set to Once, the game places it on its first frame only; the editor, outside play, places it every frame so the Play view shows the picked screen.

Constructor & Destructor Documentation

◆ ScreenAnchor()

Deki::ScreenAnchor::ScreenAnchor ( )

◆ ~ScreenAnchor()

Deki::ScreenAnchor::~ScreenAnchor ( )
override

Member Function Documentation

◆ PlaceAll()

void Deki::ScreenAnchor::PlaceAll ( const Scene * scene,
const ICamera & camera,
int screenWidth,
int screenHeight )
static

Moves every anchored object of scene, and every persistent one, to its point on a screen screenWidth x screenHeight pixels seen through camera.

The render system calls it before each frame; the editor calls it for the screen the Play view shows.

Member Data Documentation

◆ anchor

ScreenPoint Deki::ScreenAnchor::anchor = ScreenPoint::TopLeft

◆ offsetX

float Deki::ScreenAnchor::offsetX = 0.0f

◆ offsetY

float Deki::ScreenAnchor::offsetY = 0.0f

◆ update

AnchorUpdate Deki::ScreenAnchor::update = AnchorUpdate::Always

The documentation for this class was generated from the following file: