Scirra / Construct-bugs

Public bug report submissions for Construct 3 and Construct Animate. Please read the guidelines then click the 'Issues' tab to get started.
https://www.construct.net
104 stars 83 forks source link

"Orphaned" Stop Loop action may interrupt a loop somewhere else #4823

Closed dop2000 closed 3 years ago

dop2000 commented 3 years ago

Problem description

If you have a Stop Loop action without a loop (or in a loop which cannot be stopped, like "Array for each element"), it may interrupt a loop in some other event.

Attach a .c3p

https://www.dropbox.com/s/o7yrr2l7tbffw0t/StopLoopProblem.c3p?dl=0

Observed result

"Stop Loop" actions in events 4 and 5 interrupt loops in event 1.

Expected result

I am not sure if this is a bug, but it's definitely an undesirable behavior. I had this issue once in a large project and it took me a lot of time to find the cause. I believe Stop Loop should be restricted to its events branch only.

More details

Affected browsers/platforms: all

System details

View details Platform information Browser: Chrome Browser version: 90.0.4430.93 Browser engine: Chromium Browser architecture: 64-bit Context: browser Operating system: Windows Operating system version: 10 Operating system architecture: 64-bit Device type: desktop Device pixel ratio: 1.25 Logical CPU cores: 4 Approx. device memory: 8 GB User agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 C3 release: r241 (stable) Language setting: en-US Local storage Storage quota (approx): 127 gb Storage usage (approx): 515 mb (0.4%) Persistant storage: Yes Browser support notes This list contains missing features that are not required, but could improve performance or user experience if supported. Nothing is missing. Everything is OK! WebGL information Version string: WebGL 2.0 (OpenGL ES 3.0 Chromium) Numeric version: 2 Supports NPOT textures: yes Supports GPU profiling: yes Supports highp precision: yes Vendor: Google Inc. (Intel) Renderer: ANGLE (Intel, Intel(R) HD Graphics 620 Direct3D11 vs_5_0 ps_5_0, D3D11-27.20.100.8681) Major performance caveat: no Maximum texture size: 16384 Point size range: 1 to 1024 Extensions: EXT_color_buffer_float EXT_color_buffer_half_float EXT_disjoint_timer_query_webgl2 EXT_float_blend EXT_texture_compression_bptc EXT_texture_compression_rgtc EXT_texture_filter_anisotropic EXT_texture_norm16 KHR_parallel_shader_compile OES_draw_buffers_indexed OES_texture_float_linear WEBGL_compressed_texture_s3tc WEBGL_compressed_texture_s3tc_srgb WEBGL_debug_renderer_info WEBGL_debug_shaders WEBGL_draw_instanced_base_vertex_base_instance WEBGL_lose_context WEBGL_multi_draw WEBGL_multi_draw_instanced_base_vertex_base_instance WEBGL_video_texture WEBGL_webcodecs_video_frame OVR_multiview2 Audio information System sample rate: 48000 Hz Output channels: 2 Output interpretation: speakers Supported decode formats: WebM Opus (audio/webm; codecs=opus) Ogg Opus (audio/ogg; codecs=opus) WebM Vorbis (audio/webm; codecs=vorbis) Ogg Vorbis (audio/ogg; codecs=vorbis) MPEG-4 AAC (audio/mp4; codecs=mp4a.40.5) MP3 (audio/mpeg) FLAC (audio/flac) PCM WAV (audio/wav; codecs=1) Supported encode formats: WebM Opus (audio/webm; codecs=opus) Video information Supported decode formats: WebM AV1 (video/webm; codecs=av01.0.00M.08) MP4 AV1 (video/mp4; codecs=av01.0.00M.08) WebM VP9 (video/webm; codecs=vp9) WebM VP8 (video/webm; codecs=vp8) Ogg Theora (video/ogg; codecs=theora) H.264 (video/mp4; codecs=avc1.42E01E) Supported encode formats: WebM VP9 (video/webm; codecs=vp9) WebM VP8 (video/webm; codecs=vp8)
AshleyScirra commented 3 years ago

This is by design. "Stop loop" in this case is not "orphaned", it is nested within a running loop, and in that case is allowed to stop that running loop. Changing this would also be a breaking change.

dop2000 commented 3 years ago

I really doubt anyone is using Stop Loop like that. It may be difficult or impossible to predict which loop it is nested within, for example when this function is called from multiple different events. I am not trying to convince you, just saying that this opens possibilities to very obscure bugs.