18 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
19 if (entityModels[i].lock() == modelComponent.lock()) {
23 return eastl::vector<eastl::string>();
28 if (entityModels.size()>index) {
29 if (!entityModels[index].expired())
30 return entityModels[index].lock()->GetModel().lock()->GetAnimations();
32 return eastl::vector<eastl::string>();
37 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
38 if (entityModels[i].lock() == modelComponent.lock()) {
46 if (index < entityModels.size())
47 if (!entityModels[index].expired())
48 entityModels[index].lock()->GetModel().lock()->SetAnimation(name, resetTime);
53 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
54 if (entityModels[i].lock() == modelComponent.lock()) {
63 if (index < entityModels.size())
64 if (!entityModels[index].expired())
65 return entityModels[index].lock()->GetModel().lock()->GetCurrentAnimationName();
71 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
72 if (entityModels[i].lock() == modelComponent.lock()) {
80 if (index < entityModels.size())
81 if (!entityModels[index].expired())
82 entityModels[index].lock()->GetModel().lock()->ResetAnimation();
87 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
88 if (entityModels[i].lock() == modelComponent.lock()) {
96 if (index < entityModels.size())
97 if (!entityModels[index].expired())
98 entityModels[index].lock()->GetModel().lock()->SetAnimationTime(time);
103 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
104 if (entityModels[i].lock() == modelComponent.lock()) {
113 if (index < entityModels.size())
114 if (!entityModels[index].expired())
115 return entityModels[index].lock()->GetModel().lock()->GetAnimationTime();
121 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
122 if (entityModels[i].lock() == modelComponent.lock()) {
131 if (index < entityModels.size())
132 if (!entityModels[index].expired())
133 return entityModels[index].lock()->GetModel().lock()->GetAnimationDuration();
139 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
140 if (entityModels[i].lock() == modelComponent.lock()) {
148 if (index < entityModels.size())
149 if (!entityModels[index].expired())
150 entityModels[index].lock()->GetModel().lock()->SetPaused(paused);
155 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
156 if (entityModels[i].lock() == modelComponent.lock()) {
165 if (index < entityModels.size())
166 if (!entityModels[index].expired())
167 return entityModels[index].lock()->GetModel().lock()->IsPaused();
173 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
174 if (entityModels[i].lock() == modelComponent.lock()) {
182 if (index < entityModels.size())
183 if (!entityModels[index].expired())
184 entityModels[index].lock()->GetModel().lock()->SetLooping(looping);
189 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
190 if (entityModels[i].lock() == modelComponent.lock()) {
199 if (index < entityModels.size())
200 if (!entityModels[index].expired())
201 return entityModels[index].lock()->GetModel().lock()->IsLooping();
207 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
208 if (entityModels[i].lock() == modelComponent.lock()) {
216 if (index < entityModels.size())
217 if (!entityModels[index].expired())
218 entityModels[index].lock()->GetModel().lock()->SetSpeed(speed);
223 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
224 if (entityModels[i].lock() == modelComponent.lock()) {
233 if (index < entityModels.size())
234 if (!entityModels[index].expired())
235 return entityModels[index].lock()->GetModel().lock()->GetSpeed();
239 AnimationComponent::AnimationComponent() noexcept
243 void AnimationComponent::InitializeComponent()
248 void AnimationComponent::Update()
250 for (
size_t i = 0, size = entityModels.size(); i < size; ++i) {
251 if (entityModels[i].expired())
254 if (!entityModels[i].lock()->isEnabled)
257 entityModels[i].lock()->GetModel().lock()->UpdateAnimation(
262 void AnimationComponent::OnComponentAdded(eastl::weak_ptr<Component> addedComponent)
264 if (eastl::dynamic_pointer_cast<ModelComponent, Component>(addedComponent.lock())) {
265 if (eastl::dynamic_pointer_cast<ModelComponent, Component>(addedComponent.lock())->GetModel().lock()->HasAnimations())
266 entityModels.push_back(eastl::dynamic_pointer_cast<ModelComponent, Component>(addedComponent.lock()));
270 void AnimationComponent::OnComponentRemoved(eastl::weak_ptr<Component> removedComponent)
272 if (eastl::dynamic_pointer_cast<ModelComponent, Component>(removedComponent.lock())) {
273 eastl::vector<eastl::weak_ptr<ModelComponent>>::iterator it;
274 for (it = entityModels.begin(); it != entityModels.end(); ++it) {
275 if (it->lock() == removedComponent.lock())
278 if (it != entityModels.end()) {
279 entityModels.erase(it);
void SetModelAnimationLooping(eastl::weak_ptr< ModelComponent > modelComponent, bool looping)
Sets whether or not the model's animation should loop.
float GetModelAnimationTime(eastl::weak_ptr< ModelComponent > modelComponent)
Returns the progress of the model's current animation.
void SetModelAnimationSpeed(eastl::weak_ptr< ModelComponent > modelComponent, float speed)
Sets the speed modifier of the model's animation. The default is 1.0f.
float GetModelAnimationSpeed(eastl::weak_ptr< ModelComponent > modelComponent)
Returns the speed modifier of the model's animation.
float GetModelAnimationDuration(eastl::weak_ptr< ModelComponent > modelComponent)
Returns the duration of the model's current animation.
eastl::vector< eastl::weak_ptr< ModelComponent > > GetEntityModels() const
Returns all model components owned by the entity.
bool isModelAnimationPaused(eastl::weak_ptr< ModelComponent > modelComponent)
Returns whether or not the model's animation is paused.
IMGUI_API float GetTime()
void SetModelAnimationTime(eastl::weak_ptr< ModelComponent > modelComponent, float time)
Sets the progress of the model's animation to the specified time.
void SetModelAnimation(eastl::weak_ptr< ModelComponent > modelComponent, eastl::string name, bool resetTime)
Sets the animation of the specified model to the animation with the specified name.
eastl::vector< eastl::string > GetModelAnimations(eastl::weak_ptr< ModelComponent > modelComponent)
Returns the names of all animations of the given model component.
void ResetModelAnimation(eastl::weak_ptr< ModelComponent > modelComponent)
Resets the animation of the specified model component.
void SetModelAnimationPaused(eastl::weak_ptr< ModelComponent > modelComponent, bool paused)
Sets whether or not the model's animation should be paused.
eastl::string GetModelCurrentAnimation(eastl::weak_ptr< ModelComponent > modelComponent)
Returns the name of the model's current animation.
static eastl::weak_ptr< Engine > GetEngine() noexcept
This method allows you to get the instance of the Engine. This method will automatically initialize t...
bool IsModelAnimationLooping(eastl::weak_ptr< ModelComponent > modelComponent)
Returns whether or not the model's animation is looping.