libultraship
Reimplementations of libultra (N64 SDK) functions for modern hardware
Loading...
Searching...
No Matches
TickableComponent.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdint.h>
4#include <memory>
5#include <vector>
6
9#include "ship/core/Action.h"
11
12namespace Ship {
13
14class Context;
15
17enum class TickGroup : uint32_t { TickGroupDefault = 0 };
18
20enum class TickPriority : uint32_t { TickPriorityDefault = 0 };
21
42class TickableComponent : public Tickable, public Component, public std::enable_shared_from_this<TickableComponent> {
43 public:
54 TickableComponent(const std::string& name, std::shared_ptr<Context> context,
55 const TickGroup tickGroup = TickGroup::TickGroupDefault,
57 const std::vector<EventID>& eventIds = {});
58
67 TickableComponent(const std::string& name, std::shared_ptr<Context> context, const TickGroup tickGroup,
68 const TickPriority tickPriority, const std::vector<std::shared_ptr<Action>>& actions);
70
80
83
85 std::shared_ptr<Context> GetContext() const;
86
89
92
94 uint64_t GetOrder() const;
95
102
109
115 TickableComponent& SetContext(std::shared_ptr<Context> context);
116
124 virtual bool ActionRan(EventID eventId);
125
126 private:
127 TickGroup mTickGroup;
128 TickPriority mTickPriority;
129 std::vector<EventID> mPendingEventIds;
130 std::vector<std::shared_ptr<Action>> mPendingActions;
131};
132
133} // namespace Ship
int32_t EventID
Numeric identifier for an event. -1 is uninitialized, IDs < -1 are internally registered,...
Definition EventTypes.h:8
A named Part with a parent/child hierarchy and optional thread safety.
Definition Component.h:34
Combines Tickable and Component, auto-registering with a Context.
Definition TickableComponent.h:42
TickableComponent & SetContext(std::shared_ptr< Context > context)
Changes the Context this component is associated with.
TickableComponent(const std::string &name, std::shared_ptr< Context > context, const TickGroup tickGroup, const TickPriority tickPriority, const std::vector< std::shared_ptr< Action > > &actions)
Constructs a TickableComponent with an explicit list of Actions.
TickableComponent(const std::string &name, std::shared_ptr< Context > context, const TickGroup tickGroup=TickGroup::TickGroupDefault, const TickPriority tickPriority=TickPriority::TickPriorityDefault, const std::vector< EventID > &eventIds={})
Constructs a TickableComponent with EventID subscriptions.
TickPriority GetTickPriority() const
Returns the tick priority within the TickGroup.
TickableComponent & SetTickGroup(const TickGroup tickGroup)
Sets the TickGroup for this component.
virtual bool ActionRan(EventID eventId)
Virtual hook invoked when an EventAction runs on this component.
std::shared_ptr< Context > GetContext() const
Returns the Context this component is registered with.
TickGroup GetTickGroup() const
Returns the TickGroup this component belongs to.
TickableComponent & SetTickPriority(const TickPriority tickPriority)
Sets the tick priority for this component.
uint64_t GetOrder() const
Returns a composite order value derived from TickGroup and TickPriority.
void UnregisterFromContext()
Unregisters this component from its Context.
bool RegisterWithContext()
Registers this component with its Context.
Manages a collection of Actions and indexed EventActions.
Definition Tickable.h:29
Core namespace for the libultraship engine framework.
Definition gfx_direct3d_common.h:14
TickPriority
Controls execution order within a TickGroup (lower runs first).
Definition TickableComponent.h:20
TickGroup
Groups TickableComponents into logical tick categories.
Definition TickableComponent.h:17