#pragma once #include "Component.h" #include "FieldTypes.h" #include "src/FileSystem/File.h" #include "src/FileSystem/FileSystem.h" #include "src/Resource/Serializable.h" #include "src/Resource/SkinnedModel.h" #include #include namespace Nuake { class Scene; class SkinnedModelComponent : public Component { NUAKECOMPONENT(SkinnedModelComponent, "Skinned Model") static void InitializeComponentClass() { //BindComponentField<&SkinnedModelComponent::ModelPath>("ModelPath", "Model Path"); BindComponentProperty<&SkinnedModelComponent::SetModel, &SkinnedModelComponent::GetModel>("ModelPath", "Model"); ResourceFileRestriction("_Model"); BindComponentProperty<&SkinnedModelComponent::SetPlaying, &SkinnedModelComponent::GetIsPlaying>("Playing", "Playing"); SetFlags(ComponentFieldTrait::Transient); BindComponentProperty<&SkinnedModelComponent::SetAnimationList, &SkinnedModelComponent::GetAnimationList>("Animation", "Animation"); SetFlags(ComponentFieldTrait::Transient); } Ref ModelResource; ResourceFile ModelPath; DynamicItemList animationList; void SetModel(ResourceFile file); ResourceFile GetModel() { return ModelPath; } void LoadModel(entt::entity e, Scene* scene); void SetPlaying(bool play); bool GetIsPlaying() const; DynamicItemList& GetAnimationList() { return animationList; } void SetAnimationList(int i); void RegenerateAnimationList(); json Serialize(); bool Deserialize(const json& j); }; }