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;
|
missile_place_rect[i] = temp_rect;
|
||||||
|
|
||||||
// When the missile we're tracking goes off-screen, re-position the camera
|
// 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;
|
location old_center = center;
|
||||||
|
|
||||||
center = camera_dest;
|
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];
|
from_rect = missile_origin_rect[i];
|
||||||
if(store_missiles[i].missile_type >= 7)
|
if(store_missiles[i].missile_type >= 7)
|
||||||
from_rect.offset(18 * (t % 8),0);
|
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 {
|
} else {
|
||||||
// Custom missile graphics
|
// Custom missile graphics
|
||||||
// TODO: Test this!
|
// TODO: Test this!
|
||||||
@@ -498,7 +498,7 @@ void do_missile_anim(short num_steps,location missile_origin,short sound_num) {
|
|||||||
from_rect.height() = 18;
|
from_rect.height() = 18;
|
||||||
if(step >= 4)
|
if(step >= 4)
|
||||||
from_rect.offset(0,18);
|
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();
|
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));
|
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) {
|
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);
|
rectangle src_gworld_rect(src_gworld), targ_gworld_rect(targ_gworld);
|
||||||
src_rect &= src_gworld_rect;
|
src_rect &= src_gworld_rect;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
void init_shaders();
|
void init_shaders();
|
||||||
void rect_draw_some_item(sf::RenderTarget& targ_gworld,rectangle targ_rect);
|
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,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 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);
|
void draw_splash(const sf::Texture& splash, sf::RenderWindow& targ, rectangle dest_rect);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user