summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2021-02-13 10:11:23 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2021-02-13 10:11:23 -0500
commit59dfd3da4d3e5d4a368a664c51c22bbdc8ff2ca4 (patch)
treea86427d740156719879baba4b0577285a5849f7a
parent560ac0c3f5fc561a3db490d8f4a33c3e19296083 (diff)
downloadtanetane-59dfd3da4d3e5d4a368a664c51c22bbdc8ff2ca4.tar.gz
tanetane-59dfd3da4d3e5d4a368a664c51c22bbdc8ff2ca4.tar.bz2
tanetane-59dfd3da4d3e5d4a368a664c51c22bbdc8ff2ca4.zip
Added sprite shadows
-rw-r--r--res/maps/map1.tmx1
-rw-r--r--res/shadow.pngbin0 -> 175 bytes
-rw-r--r--src/game.cpp5
-rw-r--r--src/map.cpp2
-rw-r--r--src/map.h1
-rw-r--r--src/renderer.cpp6
-rw-r--r--src/sprite.h1
7 files changed, 16 insertions, 0 deletions
diff --git a/res/maps/map1.tmx b/res/maps/map1.tmx index e1a9049..5f18374 100644 --- a/res/maps/map1.tmx +++ b/res/maps/map1.tmx
@@ -768,6 +768,7 @@
768 <property name="collisionOffsetY" type="int" value="-8"/> 768 <property name="collisionOffsetY" type="int" value="-8"/>
769 <property name="collisionWidth" type="int" value="12"/> 769 <property name="collisionWidth" type="int" value="12"/>
770 <property name="interactionScript" value="script0001"/> 770 <property name="interactionScript" value="script0001"/>
771 <property name="shadow" type="bool" value="true"/>
771 </properties> 772 </properties>
772 <point/> 773 <point/>
773 </object> 774 </object>
diff --git a/res/shadow.png b/res/shadow.png new file mode 100644 index 0000000..047ac36 --- /dev/null +++ b/res/shadow.png
Binary files differ
diff --git a/src/game.cpp b/src/game.cpp index fcd5f44..d1e5b8e 100644 --- a/src/game.cpp +++ b/src/game.cpp
@@ -34,6 +34,7 @@ void Game::loadMap(std::string filename, std::string warpPoint, Direction dir) {
34 getSystem<TransformSystem>().setUpCollision(lucasSprite, {-8, -8}, {12, 8}, true); 34 getSystem<TransformSystem>().setUpCollision(lucasSprite, {-8, -8}, {12, 8}, true);
35 getSystem<AnimationSystem>().initSprite(lucasSprite, "../res/sprites/lucas_anim.txt"); 35 getSystem<AnimationSystem>().initSprite(lucasSprite, "../res/sprites/lucas_anim.txt");
36 getSystem<AnimationSystem>().setSpriteDirection(lucasSprite, dir); 36 getSystem<AnimationSystem>().setSpriteDirection(lucasSprite, dir);
37 getSprite(lucasSprite).hasShadow = true;
37 getSprite(lucasSprite).player = true; 38 getSprite(lucasSprite).player = true;
38 getSystem<CharacterSystem>().initSprite(lucasSprite); 39 getSystem<CharacterSystem>().initSprite(lucasSprite);
39 40
@@ -41,18 +42,21 @@ void Game::loadMap(std::string filename, std::string warpPoint, Direction dir) {
41 getSystem<TransformSystem>().initSprite(kumaSprite, warpLoc); 42 getSystem<TransformSystem>().initSprite(kumaSprite, warpLoc);
42 getSystem<AnimationSystem>().initSprite(kumaSprite, "../res/sprites/kuma_anim.txt"); 43 getSystem<AnimationSystem>().initSprite(kumaSprite, "../res/sprites/kuma_anim.txt");
43 getSystem<AnimationSystem>().setSpriteDirection(kumaSprite, dir); 44 getSystem<AnimationSystem>().setSpriteDirection(kumaSprite, dir);
45 getSprite(kumaSprite).hasShadow = true;
44 getSystem<CharacterSystem>().addSpriteToParty(lucasSprite, kumaSprite); 46 getSystem<CharacterSystem>().addSpriteToParty(lucasSprite, kumaSprite);
45 47
46 int dusterSprite = emplaceSprite("duster"); 48 int dusterSprite = emplaceSprite("duster");
47 getSystem<TransformSystem>().initSprite(dusterSprite, warpLoc); 49 getSystem<TransformSystem>().initSprite(dusterSprite, warpLoc);
48 getSystem<AnimationSystem>().initSprite(dusterSprite, "../res/sprites/duster_anim.txt"); 50 getSystem<AnimationSystem>().initSprite(dusterSprite, "../res/sprites/duster_anim.txt");
49 getSystem<AnimationSystem>().setSpriteDirection(dusterSprite, dir); 51 getSystem<AnimationSystem>().setSpriteDirection(dusterSprite, dir);
52 getSprite(dusterSprite).hasShadow = true;
50 getSystem<CharacterSystem>().addSpriteToParty(lucasSprite, dusterSprite); 53 getSystem<CharacterSystem>().addSpriteToParty(lucasSprite, dusterSprite);
51 54
52 int boneySprite = emplaceSprite("boney"); 55 int boneySprite = emplaceSprite("boney");
53 getSystem<TransformSystem>().initSprite(boneySprite, warpLoc); 56 getSystem<TransformSystem>().initSprite(boneySprite, warpLoc);
54 getSystem<AnimationSystem>().initSprite(boneySprite, "../res/sprites/boney_anim.txt"); 57 getSystem<AnimationSystem>().initSprite(boneySprite, "../res/sprites/boney_anim.txt");
55 getSystem<AnimationSystem>().setSpriteDirection(boneySprite, dir); 58 getSystem<AnimationSystem>().setSpriteDirection(boneySprite, dir);
59 getSprite(boneySprite).hasShadow = true;
56 getSystem<CharacterSystem>().addSpriteToParty(lucasSprite, boneySprite); 60 getSystem<CharacterSystem>().addSpriteToParty(lucasSprite, boneySprite);
57 61
58 for (const Prototype& p : map_->getPrototypes()) { 62 for (const Prototype& p : map_->getPrototypes()) {
@@ -61,6 +65,7 @@ void Game::loadMap(std::string filename, std::string warpPoint, Direction dir) {
61 getSystem<TransformSystem>().setUpCollision(spriteId, p.collisionOffset, p.collisionSize, true); 65 getSystem<TransformSystem>().setUpCollision(spriteId, p.collisionOffset, p.collisionSize, true);
62 if (!p.animationFilename.empty()) { 66 if (!p.animationFilename.empty()) {
63 getSystem<AnimationSystem>().initSprite(spriteId, p.animationFilename); 67 getSystem<AnimationSystem>().initSprite(spriteId, p.animationFilename);
68 getSprite(spriteId).hasShadow = p.shadow;
64 } 69 }
65 getSprite(spriteId).interactionScript = p.interactionScript; 70 getSprite(spriteId).interactionScript = p.interactionScript;
66 } 71 }
diff --git a/src/map.cpp b/src/map.cpp index da382fd..3686bbd 100644 --- a/src/map.cpp +++ b/src/map.cpp
@@ -74,6 +74,8 @@ Map::Map(std::string_view name) : name_(name) {
74 p.animationFilename = property.getStringValue(); 74 p.animationFilename = property.getStringValue();
75 } else if (property.getName() == "interactionScript") { 75 } else if (property.getName() == "interactionScript") {
76 p.interactionScript = property.getStringValue(); 76 p.interactionScript = property.getStringValue();
77 } else if (property.getName() == "shadow") {
78 p.shadow = property.getBoolValue();
77 } 79 }
78 } 80 }
79 81
diff --git a/src/map.h b/src/map.h index 2d448e4..7dbe613 100644 --- a/src/map.h +++ b/src/map.h
@@ -23,6 +23,7 @@ struct Prototype {
23 vec2i collisionSize; 23 vec2i collisionSize;
24 std::string animationFilename; 24 std::string animationFilename;
25 std::string interactionScript; 25 std::string interactionScript;
26 bool shadow = false;
26}; 27};
27 28
28struct Trigger { 29struct Trigger {
diff --git a/src/renderer.cpp b/src/renderer.cpp index 246b7fb..f07931b 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp
@@ -122,8 +122,14 @@ void Renderer::render(Game& game) {
122 122
123 SDL_RenderCopy(ren_.get(), renLay1_.get(), nullptr, nullptr); 123 SDL_RenderCopy(ren_.get(), renLay1_.get(), nullptr, nullptr);
124 124
125 int shadowTexId = loadImageFromFile("../res/shadow.png");
125 for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY() | game.spriteView()) { 126 for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY() | game.spriteView()) {
126 if (sprite.isAnimated) { 127 if (sprite.isAnimated) {
128 if (sprite.hasShadow) {
129 const SDL_Rect shadowDest { sprite.loc.x() - 8, sprite.loc.y() - 8, 16, 8 };
130 SDL_RenderCopy(ren_.get(), textures_.at(shadowTexId).get(), nullptr, &shadowDest);
131 }
132
127 const SpriteFrame& frame = sprite.frames.at(sprite.animations.at(sprite.animationId).at(sprite.animationFrame)); 133 const SpriteFrame& frame = sprite.frames.at(sprite.animations.at(sprite.animationId).at(sprite.animationFrame));
128 const SDL_Rect& src = frame.srcRect; 134 const SDL_Rect& src = frame.srcRect;
129 SDL_Rect dest { sprite.loc.x() - frame.center.x(), sprite.loc.y() - frame.center.y(), frame.size.w(), frame.size.h() }; 135 SDL_Rect dest { sprite.loc.x() - frame.center.x(), sprite.loc.y() - frame.center.y(), frame.size.w(), frame.size.h() };
diff --git a/src/sprite.h b/src/sprite.h index 6ef2f57..84a7b03 100644 --- a/src/sprite.h +++ b/src/sprite.h
@@ -50,6 +50,7 @@ public:
50 std::vector<SpriteFrame> frames; 50 std::vector<SpriteFrame> frames;
51 std::vector<std::vector<int>> animations; 51 std::vector<std::vector<int>> animations;
52 std::map<std::string, std::map<Direction, int>> nameDirToAnim; 52 std::map<std::string, std::map<Direction, int>> nameDirToAnim;
53 bool hasShadow = false;
53 54
54 // Character 55 // Character
55 bool orientable = false; 56 bool orientable = false;