diff --git a/example/override/sfmlboneinstanceinfo.cpp b/example/override/sfmlboneinstanceinfo.cpp index ef3d4c6..40654b6 100644 --- a/example/override/sfmlboneinstanceinfo.cpp +++ b/example/override/sfmlboneinstanceinfo.cpp @@ -24,7 +24,7 @@ namespace SpriterEngine boneShape.setOutlineThickness(1); } - void SfmlBoneInstanceInfo::render() + void SfmlBoneInstanceInfo::render(const EntityInstance* instance) { if (Settings::renderDebugBones) { diff --git a/example/override/sfmlboneinstanceinfo.h b/example/override/sfmlboneinstanceinfo.h index aca579e..7175c19 100644 --- a/example/override/sfmlboneinstanceinfo.h +++ b/example/override/sfmlboneinstanceinfo.h @@ -15,7 +15,7 @@ namespace SpriterEngine public: SfmlBoneInstanceInfo(point initialSize, sf::RenderWindow *validRenderWindow); - void render() override; + void render(const EntityInstance* instance) override; private: sf::RenderWindow *renderWindow; diff --git a/example/override/sfmlboxinstanceinfo.cpp b/example/override/sfmlboxinstanceinfo.cpp index a8493fc..0876015 100644 --- a/example/override/sfmlboxinstanceinfo.cpp +++ b/example/override/sfmlboxinstanceinfo.cpp @@ -12,7 +12,7 @@ namespace SpriterEngine { } - void SfmlBoxInstanceInfo::render() + void SfmlBoxInstanceInfo::render(const EntityInstance* instance) { if (Settings::renderDebugBoxes) { diff --git a/example/override/sfmlboxinstanceinfo.h b/example/override/sfmlboxinstanceinfo.h index 7223175..28c8f85 100644 --- a/example/override/sfmlboxinstanceinfo.h +++ b/example/override/sfmlboxinstanceinfo.h @@ -15,7 +15,7 @@ namespace SpriterEngine public: SfmlBoxInstanceInfo(point initialSize, sf::RenderWindow *validRenderWindow); - void render() override; + void render(const EntityInstance* instance) override; private: sf::RenderWindow *renderWindow; diff --git a/example/override/sfmlimagefile.cpp b/example/override/sfmlimagefile.cpp index cd06b8d..d5ebe55 100644 --- a/example/override/sfmlimagefile.cpp +++ b/example/override/sfmlimagefile.cpp @@ -29,7 +29,7 @@ namespace SpriterEngine } } - void SfmlImageFile::renderSprite(UniversalObjectInterface * spriteInfo) + void SfmlImageFile::renderSprite(const EntityInstance* instance, UniversalObjectInterface * spriteInfo) { sprite.setColor(sf::Color(255, 255, 255, 255 * spriteInfo->getAlpha())); diff --git a/example/override/sfmlimagefile.h b/example/override/sfmlimagefile.h index b217633..3f3f3b7 100644 --- a/example/override/sfmlimagefile.h +++ b/example/override/sfmlimagefile.h @@ -12,7 +12,7 @@ namespace SpriterEngine public: SfmlImageFile(std::string initialFilePath, point initialDefaultPivot, sf::RenderWindow *validRenderWindow); - void renderSprite(UniversalObjectInterface *spriteInfo) override; + void renderSprite(const EntityInstance* instance, UniversalObjectInterface *spriteInfo) override; void setAtlasFile(AtlasFile *initialAtlasFile, atlasframedata initialAtlasFrameData) override; diff --git a/example/override/sfmlpointinstanceinfo.cpp b/example/override/sfmlpointinstanceinfo.cpp index 10847a6..0fe1656 100644 --- a/example/override/sfmlpointinstanceinfo.cpp +++ b/example/override/sfmlpointinstanceinfo.cpp @@ -13,7 +13,7 @@ namespace SpriterEngine circle.setOrigin(5, 5); } - void SfmlPointInstanceInfo::render() + void SfmlPointInstanceInfo::render(const EntityInstance* instance) { if (Settings::renderDebugPoints) { diff --git a/example/override/sfmlpointinstanceinfo.h b/example/override/sfmlpointinstanceinfo.h index 4925a6d..a4a54e1 100644 --- a/example/override/sfmlpointinstanceinfo.h +++ b/example/override/sfmlpointinstanceinfo.h @@ -15,7 +15,7 @@ namespace SpriterEngine public: SfmlPointInstanceInfo(sf::RenderWindow *validRenderWindow); - void render() override; + void render(const EntityInstance* instance) override; private: sf::RenderWindow *renderWindow; diff --git a/spriterengine/animation/animation.h b/spriterengine/animation/animation.h index 18fd10c..a52b625 100644 --- a/spriterengine/animation/animation.h +++ b/spriterengine/animation/animation.h @@ -32,6 +32,11 @@ namespace SpriterEngine std::string getName(); real getLength(); bool getIsLooping(); + + point getBoundsPosition() const { return boundsPosition; } + void setBoundsPosition(point position) { boundsPosition = position; } + point getBoundsSize() const { return boundsSize; } + void setBoundsSize(point size) { boundsSize = size; } void setupAnimationInstance(EntityInstance *entityInstance, EntityInstanceData *entityInstanceData, MainlineKeyInstanceVector *mainlineKeyInstances, TimelineInstanceVector *timelineInstances, real *length, bool *looping); @@ -58,7 +63,9 @@ namespace SpriterEngine TimelineVector tagTimelines; TimelineVector soundTimelines; TimelineVector triggerTimelines; - + + point boundsPosition; + point boundsSize; real animationLength; bool isLooping; }; diff --git a/spriterengine/entity/entity.cpp b/spriterengine/entity/entity.cpp index 015a392..2f59cf8 100644 --- a/spriterengine/entity/entity.cpp +++ b/spriterengine/entity/entity.cpp @@ -51,7 +51,12 @@ namespace SpriterEngine entityInstanceData->setTagInstance(THIS_ENTITY, ""); setupAnimationInstances(entityInstance, entityInstanceData); } - + + AnimationVector* Entity::getAnimations() + { + return &animations; + } + Object *Entity::setObject(std::string objectName, Object::ObjectType objectType) { switch (objectType) diff --git a/spriterengine/entity/entity.h b/spriterengine/entity/entity.h index 238100b..02e022d 100644 --- a/spriterengine/entity/entity.h +++ b/spriterengine/entity/entity.h @@ -39,6 +39,7 @@ namespace SpriterEngine EntityInstance *getNewEntityInstance(SpriterModel *model, ObjectFactory *objectFactory); void setupInstance(SpriterModel *model, EntityInstance *entityInstance, EntityInstanceData *entityInstanceData, ObjectFactory *objectFactory); + AnimationVector* getAnimations(); Animation *pushBackAnimation(std::string animationName, real length, bool looping); Object *setObject(std::string objectName, Object::ObjectType objectType); diff --git a/spriterengine/entity/entityinstance.cpp b/spriterengine/entity/entityinstance.cpp index 5931ed3..b9818c2 100644 --- a/spriterengine/entity/entityinstance.cpp +++ b/spriterengine/entity/entityinstance.cpp @@ -692,7 +692,7 @@ namespace SpriterEngine { for (auto& it : *zOrder) { - it->render(); + it->render(this); } } } diff --git a/spriterengine/entity/entityinstance.h b/spriterengine/entity/entityinstance.h index e4e85eb..1c76738 100644 --- a/spriterengine/entity/entityinstance.h +++ b/spriterengine/entity/entityinstance.h @@ -40,8 +40,7 @@ namespace SpriterEngine void blend(real blendRatio, real timeRatio); void reprocessCurrentTime() override; - - + UniversalObjectInterface *getObjectInstance(int objectId); UniversalObjectInterface * getObjectInstance(const std::string &objectName); FileReference *getFile(int fileId); @@ -125,7 +124,7 @@ namespace SpriterEngine void removeCharacterMap(const std::string &mapName); void removeAllCharacterMaps(); - void render() override; + void render(); void playAllTriggers(); void playSoundTriggers(); diff --git a/spriterengine/loading/spriterdocumentloader.cpp b/spriterengine/loading/spriterdocumentloader.cpp index 29506c4..69f395c 100644 --- a/spriterengine/loading/spriterdocumentloader.cpp +++ b/spriterengine/loading/spriterdocumentloader.cpp @@ -699,10 +699,10 @@ namespace SpriterEngine Animation *SpriterDocumentLoader::getNewAnimationFromAnimationElement(SpriterFileElementWrapper *animationElement, Entity *entity) { - Animation *newAnimation = 0; real animationLength = 0; bool animationLooping = true; SpriterFileAttributeWrapper *att = animationElement->getFirstAttribute("name"); + SpriterFileAttributeWrapper *att2 = nullptr; if (att->isValid()) { std::string animationName = att->getStringValue(); @@ -724,7 +724,23 @@ namespace SpriterEngine animationLooping = att->getStringValue() != "false"; } - return entity->pushBackAnimation(animationName, animationLength, animationLooping); + Animation *newAnimation = entity->pushBackAnimation(animationName, animationLength, animationLooping); + att = animationElement->getFirstAttribute("l"); + att2 = animationElement->getFirstAttribute("t"); + if (att->isValid() && att2->isValid()) + { + real l = att->getRealValue(), t = att2->getRealValue(); + newAnimation->setBoundsPosition({ l, t }); + + att = animationElement->getFirstAttribute("r"); + att2 = animationElement->getFirstAttribute("b"); + if (att->isValid() && att2->isValid()) + { + real r = att->getRealValue(), b = att2->getRealValue(); + newAnimation->setBoundsSize({ r - l, b - t }); + } + } + return newAnimation; } else { diff --git a/spriterengine/model/spritermodel.cpp b/spriterengine/model/spritermodel.cpp index 16cbd13..4817f45 100644 --- a/spriterengine/model/spritermodel.cpp +++ b/spriterengine/model/spritermodel.cpp @@ -121,6 +121,11 @@ namespace SpriterEngine fileReferences->push_back(new FileReference(it)); } } + + EntityVector* SpriterModel::getEntities() + { + return &entities; + } Entity *SpriterModel::pushBackEntity(std::string entityName) { diff --git a/spriterengine/model/spritermodel.h b/spriterengine/model/spritermodel.h index e42b409..f94f6e0 100644 --- a/spriterengine/model/spritermodel.h +++ b/spriterengine/model/spritermodel.h @@ -39,6 +39,7 @@ namespace SpriterEngine void appendEntityToInstanceByName(EntityInstance * entityInstance, std::string entityName); void setupFileReferences(FileReferenceVector *fileReferences); + EntityVector* getEntities(); Entity *pushBackEntity(std::string entityName); void pushBackImageFile(std::string initialFilePath, point initialDefaultPivot, atlasdata atlasData); void pushBackSoundFile(std::string initialFilePath); diff --git a/spriterengine/objectinfo/boneinstanceinfo.cpp b/spriterengine/objectinfo/boneinstanceinfo.cpp index c55bde8..ee47d31 100644 --- a/spriterengine/objectinfo/boneinstanceinfo.cpp +++ b/spriterengine/objectinfo/boneinstanceinfo.cpp @@ -73,7 +73,7 @@ namespace SpriterEngine setAlpha(linear(tempAlpha, alpha, blendRatio)); } - void BoneInstanceInfo::render() + void BoneInstanceInfo::render(const EntityInstance* instance) { // if (renderDebugBones) // TODO: override and add drawing code here to enable bone debug rendering diff --git a/spriterengine/objectinfo/boneinstanceinfo.h b/spriterengine/objectinfo/boneinstanceinfo.h index e57f250..1e4e6de 100644 --- a/spriterengine/objectinfo/boneinstanceinfo.h +++ b/spriterengine/objectinfo/boneinstanceinfo.h @@ -27,7 +27,7 @@ namespace SpriterEngine void setToBlendedLinear(UniversalObjectInterface *aObject, UniversalObjectInterface *bObject, real t, real blendRatio, ObjectRefInstance *blendedRefInstance = 0) override; - void render() override; + void render(const EntityInstance* instance) override; private: point position; diff --git a/spriterengine/objectinfo/boxinstanceinfo.cpp b/spriterengine/objectinfo/boxinstanceinfo.cpp index 0024bef..a6bc95e 100644 --- a/spriterengine/objectinfo/boxinstanceinfo.cpp +++ b/spriterengine/objectinfo/boxinstanceinfo.cpp @@ -78,7 +78,7 @@ namespace SpriterEngine setPivot(linear(tempPivot, pivot, blendRatio)); } - void BoxInstanceInfo::render() + void BoxInstanceInfo::render(const EntityInstance* instance) { // if (renderDebugBoxes) // TODO: add drawing code here to enable bone debug rendering diff --git a/spriterengine/objectinfo/boxinstanceinfo.h b/spriterengine/objectinfo/boxinstanceinfo.h index f181c12..3a4fe12 100644 --- a/spriterengine/objectinfo/boxinstanceinfo.h +++ b/spriterengine/objectinfo/boxinstanceinfo.h @@ -28,7 +28,7 @@ namespace SpriterEngine void setToBlendedLinear(UniversalObjectInterface *aObject, UniversalObjectInterface *bObject, real t, real blendRatio, ObjectRefInstance *blendedRefInstance = 0) override; - void render() override; + void render(const EntityInstance* instance) override; private: point position; diff --git a/spriterengine/objectinfo/pointinstanceinfo.cpp b/spriterengine/objectinfo/pointinstanceinfo.cpp index 64fe313..aadc715 100644 --- a/spriterengine/objectinfo/pointinstanceinfo.cpp +++ b/spriterengine/objectinfo/pointinstanceinfo.cpp @@ -65,7 +65,7 @@ namespace SpriterEngine setPosition(linear(tempPosition, position, blendRatio)); } - void PointInstanceInfo::render() + void PointInstanceInfo::render(const EntityInstance* instance) { // if (renderDebugPoints) // TODO: override and add drawing code here to enable point debug rendering diff --git a/spriterengine/objectinfo/pointinstanceinfo.h b/spriterengine/objectinfo/pointinstanceinfo.h index 9b46a56..e2e1ae1 100644 --- a/spriterengine/objectinfo/pointinstanceinfo.h +++ b/spriterengine/objectinfo/pointinstanceinfo.h @@ -27,7 +27,7 @@ namespace SpriterEngine void setToBlendedLinear(UniversalObjectInterface *aObject, UniversalObjectInterface *bObject, real t, real blendRatio, ObjectRefInstance *blendedRefInstance = 0) override; - void render() override; + void render(const EntityInstance* instance) override; private: point position; diff --git a/spriterengine/objectinfo/spriteobjectinfo.cpp b/spriterengine/objectinfo/spriteobjectinfo.cpp index bd983f0..be490ac 100644 --- a/spriterengine/objectinfo/spriteobjectinfo.cpp +++ b/spriterengine/objectinfo/spriteobjectinfo.cpp @@ -102,11 +102,11 @@ namespace SpriterEngine } } - void SpriteObjectInfo::render() + void SpriteObjectInfo::render(const EntityInstance* instance) { if (imageFile) { - imageFile->renderSprite(this); + imageFile->renderSprite(instance, this); } } diff --git a/spriterengine/objectinfo/spriteobjectinfo.h b/spriterengine/objectinfo/spriteobjectinfo.h index bf4a7e8..f6142d9 100644 --- a/spriterengine/objectinfo/spriteobjectinfo.h +++ b/spriterengine/objectinfo/spriteobjectinfo.h @@ -33,7 +33,7 @@ namespace SpriterEngine void setToBlendedLinear(UniversalObjectInterface *aObject, UniversalObjectInterface *bObject, real t, real blendRatio, ObjectRefInstance *blendedRefInstance = 0) override; - void render() override; + void render(const EntityInstance* instance) override; private: point position; diff --git a/spriterengine/objectinfo/universalobjectinterface.cpp b/spriterengine/objectinfo/universalobjectinterface.cpp index 6984b86..9c53cc9 100644 --- a/spriterengine/objectinfo/universalobjectinterface.cpp +++ b/spriterengine/objectinfo/universalobjectinterface.cpp @@ -257,7 +257,7 @@ namespace SpriterEngine Settings::error("UniversalObjectInterface::setObjectToBlendedLinear - object does not contain this component - no action taken"); } - void UniversalObjectInterface::render() + void UniversalObjectInterface::render(const EntityInstance*) { Settings::error("UniversalObjectInterface::render - object does not contain this component - no action taken"); } diff --git a/spriterengine/objectinfo/universalobjectinterface.h b/spriterengine/objectinfo/universalobjectinterface.h index 1aaad37..0afb4fd 100644 --- a/spriterengine/objectinfo/universalobjectinterface.h +++ b/spriterengine/objectinfo/universalobjectinterface.h @@ -12,6 +12,7 @@ namespace SpriterEngine class ImageFile; class SoundFile; class EntityInstanceData; + class EntityInstance; class AnimationInstance; class TagList; class VariableInstanceNameAndIdMap; @@ -92,7 +93,7 @@ namespace SpriterEngine virtual void setObjectToLinear(UniversalObjectInterface *bObject, real t, UniversalObjectInterface *resultObject); virtual void setToBlendedLinear(UniversalObjectInterface *aObject, UniversalObjectInterface *bObject, real t, real blendRatio, ObjectRefInstance *blendedRefInstance = 0); - virtual void render(); + virtual void render(const EntityInstance* instance); virtual void playTrigger(); }; diff --git a/spriterengine/override/imagefile.cpp b/spriterengine/override/imagefile.cpp index 9f4af2d..84c244b 100644 --- a/spriterengine/override/imagefile.cpp +++ b/spriterengine/override/imagefile.cpp @@ -24,7 +24,7 @@ namespace SpriterEngine atlasFrameData = initialAtlasFrameData; } - void ImageFile::renderSprite(UniversalObjectInterface * spriteInfo) + void ImageFile::renderSprite(const EntityInstance* instance, UniversalObjectInterface * spriteInfo) { if(atlasFile) { atlasFile->renderSprite(spriteInfo, atlasFrameData); diff --git a/spriterengine/override/imagefile.h b/spriterengine/override/imagefile.h index fed4b08..1026a23 100644 --- a/spriterengine/override/imagefile.h +++ b/spriterengine/override/imagefile.h @@ -12,6 +12,7 @@ namespace SpriterEngine { class UniversalObjectInterface; class AtlasFile; + class EntityInstance; class ImageFile : public File { @@ -24,7 +25,7 @@ namespace SpriterEngine point defaultPivot; - virtual void renderSprite(UniversalObjectInterface *spriteInfo); + virtual void renderSprite(const EntityInstance* instance, UniversalObjectInterface *spriteInfo); protected: AtlasFile* atlasFile;