рдЧреЛрдбреЙрдЯреНрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб ( core/list.h ) рдореЗрдВ рдПрдХ рдбрдмрд▓ рд▓рд┐рдВрдХреНрдб рд▓рд┐рд╕реНрдЯ рд╣реЛрддреА рд╣реИред
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реЗ рдХреБрдЫ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рдбрдмрд▓ рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рд╡реЗрдХреНрдЯрд░ рдЖрдзрд╛рд░рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреА рд╣реИред
рдЦрд╛рд╕рдХрд░ рдЬрдм рдЕрдВрдд рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд/рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИред
рдореИрдВ рдЗрд╕ рдкрд░ рдХреБрдЫ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓реЙрдХрд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдРрд░реЗ рдХреНрд▓рд╛рд╕ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдорд┐рд░рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ)ред
рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реВрдЪреА рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛
рдЗрд╕реЗ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ рднреА рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдРрд░реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд (рдФрд░ рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реВрдВ) рдХреЛрд░/ring_buffer.h рдХреЛ рдХрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдХрддрд╛рд░ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕реЗ рдПрдХ рдбрдмрд▓ рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА (рдФрд░ рд╡реЗрдХреНрдЯрд░ рдЖрдзрд╛рд░рд┐рдд рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдХрд┐ рдЗрд╕рдХрд╛ "рдирд┐рд╢реНрдЪрд┐рдд" рдЖрдХрд╛рд░ рд╣реИ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкреНрд░рдпреБрдХреНрдд рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
3.1 рдорд╛рд╕реНрдЯрд░ 9e7cee2 рдореЗрдВ рдЕрднреА рднреА рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд/рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ: рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЕрднреА рддрдХ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред
рд░реЗрдбрд┐рдЯ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЙрдЪрд┐рдд рд▓рд┐рдВрдХреНрдб-рд▓рд┐рд╕реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рдПрдХ рддреЗрдЬрд╝ рдлреАрдлреЛ рд╕реВрдЪреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рд░рдгреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИред
рдмрд╕ рдЗрд╕реЗ рдПрдХ рд╕рд░рдгреА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛, рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрддрд┐ рд╕реБрдзрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛:
extends Node
var front_space = 0
var array_len = 0
var array_data = []
func push_back(val):
if array_data.size() < front_space+array_len+1:
enlarge()
array_len += 1
array_data[front_space+array_len-1] = val
func pop_back():
if array_data.size() > array_len*8:
reseat()
array_len -= 1
return array_data[front_space+array_len]
func back():
return array_data[front_space+array_len-1]
func pop_front():
if front_space > array_len:
reseat()
if array_data.size() > array_len*8:
reseat()
front_space += 1
array_len -= 1
return array_data[front_space-1]
func front():
return array_data[front_space]
func size():
return array_len
func enlarge():
array_data.resize(front_space+array_len*2+1)
func reseat():
var new_array = []
new_array.resize(array_len*2)
for i in range(array_len):
new_array[i] = array_data[i+front_space]
front_space = 0
array_data = new_array
func print_debug():
print("front: ", front_space,", len: ",arr
рдЧреЛрдбреЛрдЯ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдлреАрдЪрд░ рдФрд░ рд╕реБрдзрд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдкрд░ рдЕрдм рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдЧреЛрдбреЛрдЯ рдЗрдореНрдкреНрд░реВрд╡рдореЗрдВрдЯ рдкреНрд░рдкреЛрдЬрд▓ (рдЬреАрдЖрдИрдкреА) ( godotengine/godot-proposals ) рдЗрд╢реНрдпреВ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдФрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдЬреАрдЖрдИрдкреА рдЯреНрд░реИрдХрд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдореБрджреНрджрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рдЙрддреНрдкрд╛рджрдХ рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реЛ рдФрд░ рд╕рдореБрджрд╛рдп рдХреЛ рдЗрдВрдЬрди рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рд╡реИрдзрддрд╛ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдорд┐рд▓ рд╕рдХреЗред
рдореБрдЦреНрдп ( godotengine/godot ) рдЯреНрд░реИрдХрд░ рдЕрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдЧ рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдп рдкрд░ рдмреЗрд╣рддрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж
рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рджрд┐рдП рдЧрдП рд╕рдорд╕реНрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реБрдП GIP рдЯреНрд░реИрдХрд░ рдкрд░ рдПрдХ рдирдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЦреЛрд▓реЗрдВ (рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ)ред рдЗрд╕ рдмрдВрдж рдореБрджреНрджреЗ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдпрджрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЪрд░реНрдЪрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ (рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдирдП рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
3.1 рдорд╛рд╕реНрдЯрд░ 9e7cee2 рдореЗрдВ рдЕрднреА рднреА рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд/рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ: рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЕрднреА рддрдХ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред