clip missiles when they go beyond the ter screen
This commit is contained in:
@@ -452,7 +452,7 @@ void do_missile_anim(short num_steps,location missile_origin,short sound_num) {
|
||||
missile_place_rect[i] = temp_rect;
|
||||
|
||||
// When the missile we're tracking goes off-screen, re-position the camera
|
||||
if(tracking_missile == i && (missile_place_rect[i] & ter_rects.in_frame) != missile_place_rect[i] && !recentered){
|
||||
if(tracking_missile == i && (missile_place_rect[i] & ter_rects.to) != missile_place_rect[i] && !recentered){
|
||||
location old_center = center;
|
||||
|
||||
center = camera_dest;
|
||||
@@ -479,7 +479,7 @@ void do_missile_anim(short num_steps,location missile_origin,short sound_num) {
|
||||
from_rect = missile_origin_rect[i];
|
||||
if(store_missiles[i].missile_type >= 7)
|
||||
from_rect.offset(18 * (t % 8),0);
|
||||
rect_draw_some_item(missiles_gworld,from_rect, mainPtr,temp_rect,sf::BlendAlpha);
|
||||
rect_draw_some_item(missiles_gworld,from_rect, mainPtr,temp_rect,ter_rects.in_frame,sf::BlendAlpha);
|
||||
} else {
|
||||
// Custom missile graphics
|
||||
// TODO: Test this!
|
||||
@@ -498,7 +498,7 @@ void do_missile_anim(short num_steps,location missile_origin,short sound_num) {
|
||||
from_rect.height() = 18;
|
||||
if(step >= 4)
|
||||
from_rect.offset(0,18);
|
||||
rect_draw_some_item(*from_gw,from_rect, mainPtr,temp_rect,sf::BlendAlpha);
|
||||
rect_draw_some_item(*from_gw,from_rect, mainPtr,temp_rect,ter_rects.in_frame,sf::BlendAlpha);
|
||||
}
|
||||
}
|
||||
mainPtr.setActive();
|
||||
|
@@ -77,6 +77,18 @@ void rect_draw_some_item(const sf::Texture& src_gworld,rectangle src_rect,sf::Re
|
||||
rect_draw_some_item(src_gworld, src_rect, targ_gworld, targ_rect, sf::RenderStates(mode));
|
||||
}
|
||||
|
||||
// I added this because I tried using clip_rect to fix missiles/booms and it didn't work.
|
||||
void rect_draw_some_item(const sf::Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,rectangle in_frame,sf::BlendMode mode){
|
||||
rectangle targ_clipped = targ_rect & in_frame;
|
||||
if(targ_clipped.empty()) return;
|
||||
rectangle src_clipped = src_rect;
|
||||
src_clipped.top += (targ_clipped.top - targ_rect.top);
|
||||
src_clipped.left += (targ_clipped.left - targ_rect.left);
|
||||
src_clipped.bottom += (targ_clipped.bottom - targ_rect.bottom);
|
||||
src_clipped.right += (targ_clipped.right - targ_rect.right);
|
||||
rect_draw_some_item(src_gworld, src_rect, targ_gworld, targ_clipped, sf::RenderStates(mode));
|
||||
}
|
||||
|
||||
void rect_draw_some_item(const sf::Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,sf::RenderStates mode) {
|
||||
rectangle src_gworld_rect(src_gworld), targ_gworld_rect(targ_gworld);
|
||||
src_rect &= src_gworld_rect;
|
||||
|
@@ -21,6 +21,7 @@
|
||||
void init_shaders();
|
||||
void rect_draw_some_item(sf::RenderTarget& targ_gworld,rectangle targ_rect);
|
||||
void rect_draw_some_item(const sf::Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,sf::BlendMode mode = sf::BlendNone);
|
||||
void rect_draw_some_item(const sf::Texture& src_gworld,rectangle src_rect,sf::RenderTarget& targ_gworld,rectangle targ_rect,rectangle in_frame,sf::BlendMode mode = sf::BlendNone);
|
||||
void rect_draw_some_item(const sf::Texture& src_gworld,rectangle src_rect,const sf::Texture& mask_gworld,sf::RenderTarget& targ_gworld,rectangle targ_rect);
|
||||
void draw_splash(const sf::Texture& splash, sf::RenderWindow& targ, rectangle dest_rect);
|
||||
|
||||
|
Reference in New Issue
Block a user