Sprites now have a distance lighting calculation that's the same as the raycaster using a shader.
This commit is contained in:
parent
a19bc47904
commit
3986e6978e
4 changed files with 21 additions and 8 deletions
5
gui.cpp
5
gui.cpp
|
@ -1,4 +1,3 @@
|
|||
#define FSM_DEBUG 1
|
||||
#include "gui.hpp"
|
||||
#include <iostream>
|
||||
#include <chrono>
|
||||
|
@ -41,8 +40,8 @@ namespace gui {
|
|||
}
|
||||
|
||||
void FSM::START(Event ) {
|
||||
// ZED: this must die
|
||||
generate_map();
|
||||
$rayview.init_shaders();
|
||||
$rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y);
|
||||
$rayview.position_camera($player.x + 0.5, $player.y + 0.5);
|
||||
state(State::IDLE);
|
||||
|
@ -199,7 +198,7 @@ namespace gui {
|
|||
$stats.sample(1/elapsed.count());
|
||||
|
||||
draw_gui();
|
||||
draw_weapon();
|
||||
// draw_weapon();
|
||||
$window.display();
|
||||
}
|
||||
|
||||
|
|
|
@ -136,7 +136,11 @@ void Raycaster::sprite_casting(sf::RenderTarget &target) {
|
|||
$anim.step(*sf_sprite, texX, texY, texX_end - texX, textureHeight);
|
||||
sf_sprite->setPosition({x, y});
|
||||
|
||||
target.draw(*sf_sprite);
|
||||
$brightness.setUniform("offsetFactor", sf::Glsl::Vec2{0.0f, 0.0f});
|
||||
|
||||
float level = sqrt(rec.first);
|
||||
$brightness.setUniform("darkness", level);
|
||||
target.draw(*sf_sprite, &$brightness);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -351,3 +355,10 @@ void Raycaster::set_level(GameLevel level) {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
void Raycaster::init_shaders() {
|
||||
dbc::check(sf::Shader::isAvailable(), "no shaders?!");
|
||||
bool good = $brightness.loadFromFile("shaders/modal.frag", sf::Shader::Type::Fragment);
|
||||
dbc::check(good, "shader could not be loaded");
|
||||
$brightness.setUniform("source", sf::Shader::CurrentTexture);
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ using RGBA = uint32_t;
|
|||
struct Raycaster {
|
||||
int $pitch=0;
|
||||
sf::Clock $clock;
|
||||
|
||||
sf::Shader $brightness;
|
||||
TexturePack &$textures;
|
||||
double $posX = 0;
|
||||
double $posY = 0;
|
||||
|
@ -56,4 +56,5 @@ struct Raycaster {
|
|||
}
|
||||
|
||||
void set_level(GameLevel level);
|
||||
void init_shaders();
|
||||
};
|
||||
|
|
|
@ -19,5 +19,7 @@ void main()
|
|||
|
||||
vec4 sourceFragment = texture2D(source, gl_TexCoord[0].xy);
|
||||
vec4 bloomFragment = texture2D(bloom, gl_TexCoord[0].xy);
|
||||
gl_FragColor = color + sourceFragment - bloomFragment - darkness;
|
||||
float alpha = color.a;
|
||||
gl_FragColor = (color + sourceFragment - bloomFragment) / darkness;
|
||||
gl_FragColor.a = alpha;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue