summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--res/scripts/common.lua9
-rw-r--r--src/renderer.cpp8
-rw-r--r--src/script_system.cpp3
-rw-r--r--src/sprite.h1
4 files changed, 18 insertions, 3 deletions
diff --git a/res/scripts/common.lua b/res/scripts/common.lua index 1d4879f..e355a32 100644 --- a/res/scripts/common.lua +++ b/res/scripts/common.lua
@@ -414,6 +414,15 @@ function SetAnimationSlowdown(spriteName, amount)
414 sprite.animSlowdown = amount 414 sprite.animSlowdown = amount
415end 415end
416 416
417--- Sets the opacity of the sprite when it is rendered.
418-- @param spriteName the alias of the sprite to modify
419-- @param amount a value from 0.0 to 1.0
420function SetOpacity(spriteName, amount)
421 local spriteId = getSpriteByAlias(spriteName)
422 local sprite = getSprite(spriteId)
423 sprite.opacity = amount
424end
425
417--- Sets the enclosure zone for a sprite. 426--- Sets the enclosure zone for a sprite.
418-- The sprite will be prevented from exiting the area defined by that zone. 427-- The sprite will be prevented from exiting the area defined by that zone.
419function AddEnclosureZone(spriteName, zone) 428function AddEnclosureZone(spriteName, zone)
diff --git a/src/renderer.cpp b/src/renderer.cpp index b28e3cb..25c5669 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp
@@ -112,7 +112,9 @@ void Renderer::renderSprite(const Sprite& sprite) {
112 if (sprite.hasShadow) { 112 if (sprite.hasShadow) {
113 int shadowTexId = loadImageFromFile("../res/shadow.png"); 113 int shadowTexId = loadImageFromFile("../res/shadow.png");
114 const SDL_Rect shadowDest { sprite.loc.x() - 8, sprite.loc.y() - 8, 16, 8 }; 114 const SDL_Rect shadowDest { sprite.loc.x() - 8, sprite.loc.y() - 8, 16, 8 };
115 SDL_RenderCopy(ren_.get(), textures_.at(shadowTexId).get(), nullptr, &shadowDest); 115 SDL_Texture* shadowTex = textures_.at(shadowTexId).get();
116 SDL_SetTextureAlphaMod(shadowTex, sprite.opacity * 255);
117 SDL_RenderCopy(ren_.get(), shadowTex, nullptr, &shadowDest);
116 } 118 }
117 119
118 const SpriteFrame& frame = sprite.frames.at(sprite.animations.at(sprite.animationId).frameIndices.at(sprite.animationFrame)); 120 const SpriteFrame& frame = sprite.frames.at(sprite.animations.at(sprite.animationId).frameIndices.at(sprite.animationFrame));
@@ -121,7 +123,9 @@ void Renderer::renderSprite(const Sprite& sprite) {
121 if (sprite.bobbing) { 123 if (sprite.bobbing) {
122 dest.y -= sprite.bobAmount; 124 dest.y -= sprite.bobAmount;
123 } 125 }
124 SDL_RenderCopy(ren_.get(), textures_.at(loadImageFromFile(sprite.spritesheet)).get(), &src, &dest); 126 SDL_Texture* textureToRender = textures_.at(loadImageFromFile(sprite.spritesheet)).get();
127 SDL_SetTextureAlphaMod(textureToRender, sprite.opacity * 255);
128 SDL_RenderCopy(ren_.get(), textureToRender, &src, &dest);
125 } 129 }
126} 130}
127 131
diff --git a/src/script_system.cpp b/src/script_system.cpp index 7889148..56a6012 100644 --- a/src/script_system.cpp +++ b/src/script_system.cpp
@@ -55,7 +55,8 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) {
55 "solid", &Sprite::solid, 55 "solid", &Sprite::solid,
56 "behaviourType", &Sprite::behaviourType, 56 "behaviourType", &Sprite::behaviourType,
57 "followSpriteId", &Sprite::followSpriteId, 57 "followSpriteId", &Sprite::followSpriteId,
58 "interactionScript", &Sprite::interactionScript); 58 "interactionScript", &Sprite::interactionScript,
59 "opacity", &Sprite::opacity);
59 60
60 engine_.new_usertype<MessageSystem>( 61 engine_.new_usertype<MessageSystem>(
61 "message", 62 "message",
diff --git a/src/sprite.h b/src/sprite.h index 413c20d..782ae14 100644 --- a/src/sprite.h +++ b/src/sprite.h
@@ -100,6 +100,7 @@ public:
100 int bobAmount = 0; 100 int bobAmount = 0;
101 bool bobbingDown = false; 101 bool bobbingDown = false;
102 int animSlowdownProgress = 0; 102 int animSlowdownProgress = 0;
103 double opacity = 1.0;
103 104
104 // Animation (controls) 105 // Animation (controls)
105 bool normallyHasShadow = false; 106 bool normallyHasShadow = false;