From 83acad54912a0609c1033c63cfcde1071d9d2c04 Mon Sep 17 00:00:00 2001 From: Ivan Mahonin Date: Nov 26 2020 15:19:13 +0000 Subject: fix sprites --- diff --git a/src/sprite.c b/src/sprite.c index 79af469..1a0c93a 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -434,8 +434,23 @@ void spriteSetAnimation(Sprite sprite, Animation animation) void spriteSetNoAnimation(Sprite sprite) { spriteSetAnimation(sprite, NULL); } +unsigned int spriteGetShapeColor(Sprite sprite) { + return colorByRGBA( + sprite->shapeColor[0], + sprite->shapeColor[1], + sprite->shapeColor[2], + sprite->shapeColor[3] ); +} void spriteSetShapeColor(Sprite sprite, unsigned int colorCode) { heliColorToDouble(colorCode, sprite->shapeColor); } + +unsigned int spriteGetTintColor(Sprite sprite) { + return colorByRGBA( + sprite->tintColor[0], + sprite->tintColor[1], + sprite->tintColor[2], + sprite->tintColor[3] ); +} void spriteSetTintColor(Sprite sprite, unsigned int colorCode) { heliColorToDouble(colorCode, sprite->tintColor); } @@ -600,13 +615,21 @@ void drawSprites() { void heliSpriteUpdate(double dt) { // auto-remove - for(int i = sprites.count - 1; i > 0; --i) { - Sprite s = (Sprite)sprites.items[i].value; - if (s->frozen) continue; - if (s->lifeTime >= -HELI_PRECISION) { - s->lifeTime -= dt; - if (s->lifeTime <= HELI_PRECISION) - spriteDestroy(s); + for(int i = sprites.count - 1; i >= 0; --i) { + if (i < sprites.count) { + Sprite s = (Sprite)sprites.items[i].value; + if (s->frozen) continue; + if (s->lifeTime >= -HELI_PRECISION) { + s->lifeTime -= dt; + if (s->lifeTime <= HELI_PRECISION) + s->lifeTime = 0; + } + } + } + for(int i = sprites.count - 1; i >= 0; --i) { + if (i < sprites.count) { + Sprite s = (Sprite)sprites.items[i].value; + if (s->lifeTime == 0) spriteDestroy(s); } } diff --git a/src/sprite.h b/src/sprite.h index 6a5f425..34f33c7 100644 --- a/src/sprite.h +++ b/src/sprite.h @@ -118,7 +118,10 @@ Animation spriteGetAnimation(Sprite sprite); void spriteSetAnimation(Sprite sprite, Animation animation); void spriteSetNoAnimation(Sprite sprite); +unsigned int spriteGetShapeColor(Sprite sprite); void spriteSetShapeColor(Sprite sprite, unsigned int colorCode); + +unsigned int spriteGetTintColor(Sprite sprite); void spriteSetTintColor(Sprite sprite, unsigned int colorCode); void spriteSetSpeedAndDirection(Sprite sprite, double speed, double angle);