рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рдЪреМрдереА рдзрд╛рд░рд╛
"рд╕реА ++ рдбреЗрд╡рд▓рдкрд░" рдпрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рд╣рдорд╛рд░реЗ рджреЗрд╢ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рдХреНрд░рд┐рдп рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреИрдардХреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЬрд╣рд╛рдВ рди рдХреЗрд╡рд▓ "рдХреНрд░реВрд╕реЗрдбрд░реНрд╕"
рджрд┐рдорд╛ рд╢реЗрдмрд░реНрдбреЗрд╡ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ :) рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд╛рдареНрдпрдХреНрд░рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдврд╝ рдЧрдпрд╛ рд╣реИ рд╣рдорд╛рд░реЗ рджреЗрд╢ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдореЗрдВ рд╕реЗ рдПрдХ, рдпрд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рд╛ рд╣реИ рдХрд┐ рдбрд┐рдорд╛ рдЦреБрд▓реЗ рд╕рдмрдХ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдкрд╛рдареНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред
рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рдЗрдХрд╛рдИ рдШрдЯрдХ рдкреНрд░рдгрд╛рд▓реА (рдИрд╕реАрдПрд╕, "рдЗрдХрд╛рдИ-рдШрдЯрдХ-рдкреНрд░рдгрд╛рд▓реА") рдЕрдм рдПрдХ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЗ рдЪрд░рдо рдкрд░ рд╣реИ рдЬреЛ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдЬреЛрд░ рджреЗрддреА рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрд╕рд╛рдзрди рд╣реИрдВред рдИрд╕реАрдПрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдФрд░, рд▓реЗрдХрд┐рди рдореИрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдмрд▓реНрдХрд┐ рдЬрдЯрд┐рд▓ рд▓реЛрдЧреЛрдВ рдХреЛ рдЪреБрдирддрд╛ рд╣реВрдВ рдЬреЛ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рд╕рдордп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдИрд╕реАрдПрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рддрд░реАрдХреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдХреЛрдИ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред

рдИрд╕реАрдПрд╕
ECS рдХреА рдмрд╛рдд рдХрд░реЗрдВ рддреЛ, рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдХреНрд╕рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЛрдВ рд╕реЗ рдорддрд▓рдм рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдИрд╕реАрдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдЬреЛ рдЖрдкрдХреЛ рд╢реВрдиреНрдп рдпрд╛ рдЕрдзрд┐рдХ рд╢реБрджреНрдз рдбреЗрдЯрд╛ рдШрдЯрдХреЛрдВ рд╡рд╛рд▓реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рдЪреБрдирд┐рдВрджрд╛ рд░реВрдк рд╕реЗ рд╢реБрджреНрдз рддрд░реНрдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐, рдЧрддрд┐, рд╣рд┐рдЯрдмреЙрдХреНрд╕ рдФрд░ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЗрдХрд╛рдИ рдИ рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИред рд╡реЗ рдмрд╕ рдЦреБрдж рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдШрдЯрдХ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рдЕрдзрд┐рдХрддрдо рдХреЗ рд▓рд┐рдПред рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдПрдХ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкреБрдирд░реНрдЬрдирди рдкреНрд░рдгрд╛рд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдПрдХ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдШрдЯрдХ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдвреВрдВрдврддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ 1 рд╣рд░ 120 рдлреНрд░реЗрдо рджреНрд╡рд╛рд░рд╛ рдмрдврд╝рд╛рддреА рд╣реИред
рдареЗрда рд╕реА ++ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
ECS рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рд╡реЗ рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЖрдЗрдЯрдо рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ:
GravitySystem : public ecs::System
рдШрдЯрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЖрдзрд╛рд░ рдШрдЯрдХ / рдкреНрд░рдгрд╛рд▓реА рдХрд╛ GravitySystem : public ecs::System
;- рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧ;
- рджреЛрдиреЛрдВ рдХрд┐, рдФрд░ рдХреБрдЫ CRTP рд▓реБрдХ рдореЗрдВ рдПрдХ рдФрд░;
EntityManager
рд╡рд░реНрдЧ, рдЬреЛ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг / рднрдВрдбрд╛рд░рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдХреБрдЫ рддреНрд╡рд░рд┐рдд Google рдЙрджрд╛рд╣рд░рдг:
рдЗрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рдХреБрдЫ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡реЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрд╛рд░рджрд░реНрд╢реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдВрджрд░ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдкреНрд░рджрд░реНрд╢рди рдзреАрдорд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдореВрд░реНрдд рдХреА рдкреВрд░реА рдкрд░рдд рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рдЫрд┐рдкреЗ рд╣реБрдП рдХреАрдбрд╝реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛, рдЬреЛ рд╕рдВрднрд╡рддрдГ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрдХрд▓рди рд╕рдордп рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рдмрд┐рд▓реНрдб рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЬрдмрдХрд┐ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдЖрдзрд╛рд░рд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдиреАрдЪрд╛ рджрд┐рдЦрд╛ рд╕рдХрддреА рд╣реИред
рдореБрдЦреНрдп рдХрд╛рд░рдг рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрддреНрдпрдзрд┐рдХ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдпреЗ рдЗрдХрд╛рдИ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдШрдЯрдХ, рдФрд░ рдЙрдирдХреЗ рдЪрдпрдирд╛рддреНрдордХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред рдиреАрдЪреЗ рдореИрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореЗрд░рд╛ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг
рд╕рд╛рд░рдХреБрдЫ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ, рдПрдВрдЯрд┐рдЯреА рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рджреВрд╕рд░реЛрдВ рдореЗрдВ, рд╡реЗ рдЖрдИрдбреА / рд╣реИрдВрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдШрдЯрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рдПрдХ рдЗрдХрд╛рдИ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдШрдЯрдХ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдЗрдХрд╛рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореМрдЬреВрдж рд╣реЛрдЧреАред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
using EntityID = int64_t;
рдЗрдХрд╛рдИ рдШрдЯрдХрдШрдЯрдХ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╣реИрдВ рдЬреЛ рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдерд╛рдУрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдИ рдХреЗ рд▓рд┐рдП, рдИ рдореЗрдВ рд╢реВрдиреНрдп рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд▓рдн рдкреНрд░рдХрд╛рд░ рдХреЗ рдШрдЯрдХ рд╣реЛрдВрдЧреЗред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдПрдХ рд╡рд┐рд╕реНрдлреЛрдЯрд┐рдд рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╕рдВрдмрдВрдз рд╣реИ рдФрд░, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдХрд░рдг рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
struct Position { float x; float y; }; struct Velocity { float x; float y; }; struct Health { int max; int current; }; template <typename Type> using ComponentMap = std::unordered_map<EntityID, Type>; using Positions = ComponentMap<Position>; using Velocities = ComponentMap<Velocity>; using Healths = ComponentMap<Health>; struct Components { Positions positions; Velocities velocities; Healths healths; };
рдпрд╣ рдИрд╕реАрдПрд╕ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдШрдЯрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдерд┐рддрд┐ рдФрд░ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдХрд╛рдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдЧрддрд┐ рдХреЗ рдмрд┐рдирд╛, рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдХрд╛рдИ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕
.erase()
рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдб рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд░рдгрд╛рд▓реАрдЕрдВрддрд┐рдо рдШрдЯрдХ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рд╕рд┐рд╕реНрдЯрдоред рдпрд╣ рд╡рд╣ рддрд░реНрдХ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкреБрдирд░реНрдЬрдирди рдкреНрд░рдгрд╛рд▓реА рдХреЗрд╡рд▓ рдЕрдЧрд▓рд╛ рдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
void updateHealthRegeneration(int64_t currentFrame, Healths& healths) { if(currentFrame % 120 == 0) { for(auto& [id, health] : healths) { if(health.current < health.max) ++health.current; } } }
рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореБрдЦреНрдп рд▓реВрдк рдореЗрдВ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рдкрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдШрдЯрдХ рдХреЗ рднрдВрдбрд╛рд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд░рдЦрдиреЗ рд╡рд╛рд▓реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдб рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдПрдХ рднреМрддрд┐рдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╣реЗрдВ рдЬреЛ рдЧрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рднреА рд╢рд╛рдорд┐рд▓ рдШрдЯрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдм рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
void updatePhysics(Positions& positions, const Velocities& velocities) {
рдпрд╛ рдЖрдк рдПрдХ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╕рд╣рд╛рдпрдХ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЦреЛрдЬ рдХреЗ рдмрдЬрд╛рдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
void updatePhysics(Positions& positions, const Velocities& velocities) {
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдПрдХ рдирд┐рдпрдорд┐рдд рдИрд╕реАрдПрд╕ рдХреА рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд┐рдпрд╛ред
рд▓рд╛рдн
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдореВрд░реНрддрддрд╛ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдпрд╛ рдПрдВрдЯрд┐рдЯреА / рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ / рд╕рд┐рд╕реНрдЯрдо рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЖрдзрд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдк рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдФрд░ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЧреЗрдо рдЬрд╛рдо'рдУрд╡ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдпрд╛ рдЧреЗрдо рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧреАред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреВрд░реЗ рдИрд╕реАрдПрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реАрдзреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред
рдкреНрд░рддрд┐рдмрдВрдз
рд▓реЗрдХрд┐рди, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣, рдХреБрдЫ рд╕реАрдорд╛рдПрдВ рд╣реИрдВред рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдпрд╣ рдХрд┐рд╕реА рднреА рдЧреИрд░-рддреБрдЪреНрдЫ рдЦреЗрд▓ рдореЗрдВ
unordered_map
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛ред
рдХрдИ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде
unordered_map
рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреМрд░рд╛рд╣реЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдХреЗрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
N*M
рд▓реБрдХрдЕрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ N рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдШрдЯрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, M рдорд┐рд▓рд╛рди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░
unordered_map
рдХреИрд╢рд┐рдВрдЧ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ
unordered_map
рдмрдЬрд╛рдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╕реНрдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдФрд░ рд╕реАрдорд╛ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯрд┐рдВрдЧ рд╣реИред рдЖрдк рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдП рдШрдЯрдХреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдердХрд╛рдК рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдШрдЯрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, рдмрд▓реНрдХрд┐ рд╕реНрдкреЙрди рдлрд╝рдВрдХреНрд╢рди, рдХреНрд░рдорд╛рдВрдХрди, рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЖрджрд┐ рдореЗрдВ рдПрдХ рдШреЛрд╖рдгрд╛ рднреА рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореИрдВ рдЦреБрдж рдЗрд╕рдХреЗ рдкрд╛рд░ рдЖрдпрд╛ рдФрд░ рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдХрд┐рдпрд╛ - рдореИрдВрдиреЗ рдмрд╛рд╣рд░реА json рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ C ++ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдФрд░ рд╣реЗрд▓реНрдкрд░ рдлрдВрдХреНрд╢рди рдХреЛ рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдЬ рдкрд░ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдВрдд
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╢реНрди рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдпрд╣рд╛рдБ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛
рджреАрдорд╛ рдХреЗ рд╕рд╛рде
рдПрдХ рдЦреБрд▓реЗ рдкрд╛рда рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХреА рдмрд╛рдд рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВред