From 0004269c2178b3fcc25714411264849f33d5263a Mon Sep 17 00:00:00 2001 From: Rodrigo Alfonso Date: Wed, 24 Jun 2020 05:19:40 -0300 Subject: [PATCH] Replacing dynamic_cast with boolean --- engine/include/libgba-sprite-engine/sprites/sprite.h | 1 + engine/src/sprites/affine_sprite.cpp | 4 ++-- engine/src/sprites/sprite.cpp | 2 +- engine/src/sprites/sprite_manager.cpp | 5 ++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/engine/include/libgba-sprite-engine/sprites/sprite.h b/engine/include/libgba-sprite-engine/sprites/sprite.h index e3d6adc..86459b1 100644 --- a/engine/include/libgba-sprite-engine/sprites/sprite.h +++ b/engine/include/libgba-sprite-engine/sprites/sprite.h @@ -61,6 +61,7 @@ protected: u8 animationDelay, numberOfFrames, beginFrame, currentFrame, previousFrame, animationCounter; bool animating; OBJ_ATTR oam; + bool isAffine; void syncAnimation(); virtual void syncOam(); diff --git a/engine/src/sprites/affine_sprite.cpp b/engine/src/sprites/affine_sprite.cpp index 65710c3..b629dcc 100644 --- a/engine/src/sprites/affine_sprite.cpp +++ b/engine/src/sprites/affine_sprite.cpp @@ -13,11 +13,11 @@ void AffineSprite::identity() { } AffineSprite::AffineSprite(const AffineSprite &other) : Sprite(other), affIndex(other.affIndex) { - + isAffine = true; } AffineSprite::AffineSprite(const void *imgData, int imgSize, int xC, int yC, SpriteSize spriteSize) : Sprite(imgData, imgSize, xC, yC, spriteSize), affIndex(0) { - + isAffine = true; } void AffineSprite::rotate(u16 alpha) { diff --git a/engine/src/sprites/sprite.cpp b/engine/src/sprites/sprite.cpp index 9801522..cc4d115 100644 --- a/engine/src/sprites/sprite.cpp +++ b/engine/src/sprites/sprite.cpp @@ -17,7 +17,7 @@ Sprite::Sprite(const Sprite &other) : Sprite(nullptr, 0, other.x, other.y, other } Sprite::Sprite(const void *imageData, int imageSize, int x, int y, SpriteSize size) - : x(x), y(y), data(imageData), imageSize(imageSize), spriteSize(size), priority(0), + : x(x), y(y), data(imageData), imageSize(imageSize), spriteSize(size), priority(0), isAffine(false), animationDelay(0), numberOfFrames(0), beginFrame(0), currentFrame(0), animationCounter(0) { setAttributesBasedOnSize(size); } diff --git a/engine/src/sprites/sprite_manager.cpp b/engine/src/sprites/sprite_manager.cpp index 67dd4b1..4b775d3 100644 --- a/engine/src/sprites/sprite_manager.cpp +++ b/engine/src/sprites/sprite_manager.cpp @@ -47,11 +47,10 @@ void SpriteManager::copyOverSpriteOAMToVRAM() { oam_mem[i] = sprite->oam; - auto affine = dynamic_cast(sprite); - if(affine) { + if(sprite->isAffine) { // WHY warning: can't do this: obj_aff_mem[affineIndex] = *affineShadow; // because that would override OAM also! only want to set non-overlapping affine attribs - + auto affine = static_cast(sprite); affine->setTransformationMatrix(&obj_aff_mem[affineIndex]); affine->setAffineIndex(affineIndex); affineIndex++;