@@ -117,6 +117,7 @@ struct MediaIMG {
117
117
char bounce ;
118
118
char fixed ;
119
119
char ghost ;
120
+ char nodirani ;
120
121
};
121
122
typedef struct MediaIMG MediaIMG ;
122
123
@@ -866,7 +867,8 @@ void ctr_internal_media_detect_collisions(MediaIMG* m, SDL_Rect r) {
866
867
collider -> next = NULL ;
867
868
for (int j = 0 ; j < IMGCount ; j ++ ) {
868
869
MediaIMG * m2 = & mediaIMGs [j ];
869
- if (m2 == m || m -> fixed || m2 -> fixed ) continue ;
870
+ //skip if image is same, fixed or gc'ed (ref)
871
+ if (m2 == m || m -> fixed || m2 -> fixed || m -> ref == NULL || m2 -> ref == NULL ) continue ;
870
872
int h ,w ,w2 ;
871
873
h = (int ) m -> h ;
872
874
w = (int ) m -> w / (m -> anims ? m -> anims : 1 );
@@ -968,7 +970,7 @@ void ctr_internal_media_render_image(MediaIMG* m, SDL_Rect r, SDL_Rect s, MediaI
968
970
if (!r .w || !r .h ) {
969
971
return ;
970
972
}
971
- if (m -> dir > -1 && !m -> solid && CtrMediaControlMode == 1 ) {
973
+ if (m -> dir > -1 && !m -> solid && ! m -> nodirani && CtrMediaControlMode == 1 ) {
972
974
if (m -> gravity ) {
973
975
int xdir = m -> dir ;
974
976
if (m -> gravity < 1 ) {
@@ -990,7 +992,7 @@ void ctr_internal_media_render_image(MediaIMG* m, SDL_Rect r, SDL_Rect s, MediaI
990
992
SDL_RenderCopyEx (CtrMediaRenderer , m -> texture , & s , & r , (m -> dir == -1 ? 0 : m -> dir ), NULL , (m -> dir == 90 || m -> dir == 270 ) ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE );
991
993
}
992
994
}
993
- else if (CtrMediaControlMode == 4 ) {
995
+ else if (CtrMediaControlMode == 4 && ! m -> solid && ! m -> nodirani ) {
994
996
/* radius style (2D top-down racing), in this case adjust direction to exact degrees */
995
997
SDL_RenderCopyEx (CtrMediaRenderer , m -> texture , & s , & r , 360 - (m -> dir == -1 ? 0 : m -> dir ), NULL , SDL_FLIP_NONE );
996
998
}
@@ -2231,6 +2233,7 @@ ctr_object* ctr_img_new(ctr_object* myself, ctr_argument* argumentList) {
2231
2233
mediaImage -> mov = 0 ;
2232
2234
mediaImage -> anims = 1 ;
2233
2235
mediaImage -> animspeed = 5 ;
2236
+ mediaImage -> nodirani = 0 ;
2234
2237
mediaImage -> editable = 0 ;
2235
2238
mediaImage -> text = NULL ;
2236
2239
mediaImage -> paddingx = 0 ;
@@ -2309,6 +2312,12 @@ ctr_object* ctr_img_ghost_set(ctr_object* myself, ctr_argument* argumentList) {
2309
2312
return myself ;
2310
2313
}
2311
2314
2315
+ ctr_object * ctr_media_nodirani (ctr_object * myself , ctr_argument * argumentList ) {
2316
+ MediaIMG * mediaImage = ctr_internal_get_image_from_object (myself );
2317
+ mediaImage -> nodirani = ctr_internal_cast2bool ( argumentList -> object )-> value .bvalue ;
2318
+ return myself ;
2319
+ }
2320
+
2312
2321
/**
2313
2322
* @def
2314
2323
* [ Image ] controllable: [ Number ]
@@ -4373,6 +4382,7 @@ void begin(){
4373
4382
ctr_internal_create_func (imageObject , ctr_build_string_from_cstring ( "static:" ), & ctr_img_fixed_set );
4374
4383
ctr_internal_create_func (imageObject , ctr_build_string_from_cstring ( "ghost:" ), & ctr_img_ghost_set );
4375
4384
ctr_internal_create_func (imageObject , ctr_build_string_from_cstring ( "aspeed:" ), & ctr_media_anim_speed );
4385
+ ctr_internal_create_func (imageObject , ctr_build_string_from_cstring ( "nodirani:" ), & ctr_media_nodirani );
4376
4386
audioObject = ctr_audio_new (CtrStdObject , NULL );
4377
4387
audioObject -> link = CtrStdObject ;
4378
4388
ctr_internal_create_func (audioObject , ctr_build_string_from_cstring ( CTR_DICT_NEW ), & ctr_audio_new );
0 commit comments