24 рддрд╛рд╕рд╛рдВрдд рдЧрдВрдЬ рдЦреЗрд│рдгреЗ: рд╡реИрдпрдХреНрддрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдЕрдиреБрднрд╡

24 рддрд╛рд╕рд╛рдВрдд рдЧрдВрдЬ рдЦреЗрд│рдгреЗ: рд╡реИрдпрдХреНрддрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдЕрдиреБрднрд╡

рдпрд╛ рд▓реЗрдЦрд╛рдд рдореА рд░рд╕реНрдЯрдордзреНрдпреЗ рдПрдХ рд▓рд╣рд╛рди рдЧреЗрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдорд╛рдЭреНрдпрд╛ рд╡реИрдпрдХреНрддрд┐рдХ рдЕрдиреБрднрд╡рд╛рдмрджреНрджрд▓ рдмреЛрд▓реЗрди. рдХрд╛рд░реНрдпрд░рдд рдЖрд╡реГрддреНрддреА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реБрдорд╛рд░реЗ 24 рддрд╛рд╕ рд▓рд╛рдЧрд▓реЗ (рдореА рдореБрдЦреНрдпрддрдГ рд╕рдВрдзреНрдпрд╛рдХрд╛рд│реА рдХрд┐рдВрд╡рд╛ рдЖрдард╡рдбреНрдпрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдХрд╛рдо рдХреЗрд▓реЗ). рдЦреЗрд│ рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рдкрд╛рд╕реВрди рджреВрд░ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рдЕрдиреБрднрд╡ рдлрд╛рдпрджреНрдпрд╛рдЪрд╛ рдЕрд╕реЗрд▓. рд╕реБрд░реБрд╡рд╛рддреАрдкрд╛рд╕реВрди рдЧреЗрдо рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рдореА рдХрд╛рдп рд╢рд┐рдХрд▓реЛ рдЖрдгрд┐ рдХрд╛рд╣реА рдирд┐рд░реАрдХреНрд╖рдгреЗ рдореА рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░реЗрди.

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ: рджреЛрди рд╡рд░реНрд╖рд╛рдВрдЪрд╛ рдкреНрд░реЕрдХреНрдЯрд┐рдХрд▓ рдХреЛрд░реНрд╕ "рдореА рдкреНрд░реЛ рд╡реЗрдм рдбреЗрд╡реНрд╣рд▓рдкрд░ рдЖрд╣реЗ".

рдЖрдореНрд╣реА рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ: рд╕рд░реНрд╡ Habr рд╡рд╛рдЪрдХрд╛рдВрд╕рд╛рдареА - Habr рдкреНрд░реЛрдореЛ рдХреЛрдб рд╡рд╛рдкрд░реВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕рдордзреНрдпреЗ рдирд╛рд╡рдиреЛрдВрджрдгреА рдХрд░рддрд╛рдирд╛ 10 рд░реВрдмрд▓ рд╕рд╡рд▓рдд.

рдЧрдВрдЬ рдХрд╛?

рдореА рд╣реА рднрд╛рд╖рд╛ рдирд┐рд╡рдбрд▓реА рдЖрд╣реЗ рдХрд╛рд░рдг рдореА рддреНрдпрд╛рдмрджреНрджрд▓ рдмрд░реНтАНрдпрд╛рдЪ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдЧреЛрд╖реНрдЯреА рдРрдХрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рдЧреЗрдо рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯрдордзреНрдпреЗ рддреА рдЕрдзрд┐рдХрд╛рдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛрдд рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рдорд▓рд╛ рджрд┐рд╕рдд рдЖрд╣реЗ. рдЧреЗрдо рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдорд▓рд╛ рд░рд╕реНрдЯрдордзреНрдпреЗ рд╕рд╛рдзреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдлрд╛рд░рд╕рд╛ рдЕрдиреБрднрд╡ рдирд╡реНрд╣рддрд╛. рдЦреЗрд│ рд▓рд┐рд╣рд┐рддрд╛рдирд╛ рдорд▓рд╛ рд╕реНрд╡рд╛рддрдВрддреНрд░реНрдпрд╛рдЪреА рдЬрд╛рдгреАрд╡ рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдкреБрд░реЗрд╕реЗ рд╣реЛрддреЗ.

рдЦреЗрд│ рдХрд╛ рдЖрдгрд┐ рдХрд╕рд▓рд╛ рдЦреЗрд│?

рдЦреЗрд│ рдмрдирд╡рдгреЗ рдордЬреЗрджрд╛рд░ рдЖрд╣реЗ! рдорд╛рдЭреА рдЗрдЪреНрдЫрд╛ рдЖрд╣реЗ рдХреА рдЖрдгрдЦреА рдХрд╛рд╣реА рдХрд╛рд░рдгреЗ рдЕрд╕рддреА, рдкрд░рдВрддреБ "рд╣реЛрдо" рдкреНрд░рдХрд▓реНрдкрд╛рдВрд╕рд╛рдареА рдореА рдЕрд╕реЗ рд╡рд┐рд╖рдп рдирд┐рд╡рдбрддреЛ рдЬреЗ рдорд╛рдЭреНрдпрд╛ рдирд┐рдпрдорд┐рдд рдХрд╛рдорд╛рд╢реА рдЦреВрдк рдЬрд╡рд│реВрди рд╕рдВрдмрдВрдзрд┐рдд рдирд╛рд╣реАрдд. рд╣рд╛ рдХреЛрдгрддрд╛ рдЦреЗрд│ рдЖрд╣реЗ? рдорд▓рд╛ рдЯреЗрдирд┐рд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реАрддрд░реА рдмрдирд╡рд╛рдпрдЪреЗ рд╣реЛрддреЗ рдЬреЗ рд╕рд┐рдЯреА рд╕реНрдХрд╛рдпрд▓рд╛рдЗрдиреНрд╕, рдЭреВ рдЯрд╛рдпрдХреВрди, рдЬреЗрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдЖрдгрд┐ рдЯреЗрдирд┐рд╕ рд╕реНрд╡рддрдГ рдПрдХрддреНрд░ рдХрд░рддреЗ. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд╣рд╛ рдЯреЗрдирд┐рд╕ рдЕрдХрд╛рджрдореАрдЪрд╛ рдЦреЗрд│ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдЬреЗрдереЗ рд▓реЛрдХ рдЦреЗрд│рд╛рдпрд▓рд╛ рдпреЗрддрд╛рдд.

рддрд╛рдВрддреНрд░рд┐рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг

рдорд▓рд╛ рд░рд╕реНрдЯ рд╡рд╛рдкрд░рд╛рдпрдЪрд╛ рд╣реЛрддрд╛, рдкрдг рддреЗ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд┐рддреА рдЧреНрд░рд╛рдЙрдВрдбрд╡рд░реНрдХ рд▓рд╛рдЧреЗрд▓ рд╣реЗ рдорд▓рд╛ рдорд╛рд╣реАрдд рдирд╡реНрд╣рддреЗ. рдорд▓рд╛ рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбрд░реНрд╕ рд▓рд┐рд╣рд╛рдпрдЪреЗ рдирд╡реНрд╣рддреЗ рдЖрдгрд┐ рдбреНрд░реЕрдЧ-рдПрди-рдбреНрд░реЙрдк рд╡рд╛рдкрд░рд╛рдпрдЪреЗ рдирд╡реНрд╣рддреЗ, рдореНрд╣рдгреВрди рдореА рд╕рд░реНрд╡рд╛рдд рд▓рд╡рдЪрд┐рдХ рдЙрдкрд╛рдп рд╢реЛрдзрдд рд╣реЛрддреЛ.

рдореА рддреБрдордЪреНрдпрд╛рд╕реЛрдмрдд рд╢реЗрдЕрд░ рдХреЗрд▓реЗрд▓реА рдЙрдкрдпреБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЗ рдорд▓рд╛ рд╕рд╛рдкрдбрд▓реА:

рдореА рдЕрдиреЗрдХ рд░рд╕реНрдЯ рдЧреЗрдо рдЗрдВрдЬрд┐рди рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХреЗрд▓реЗ, рд╢реЗрд╡рдЯреА рдкрд┐рд╕реНрдЯрди рдЖрдгрд┐ ggez рдирд┐рд╡рдбрд▓реЗ. рдорд╛рдЧреАрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╡рд░ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рдореА рддреНрдпрд╛рдВрдирд╛ рднреЗрдЯрд▓реЛ. рд╕рд░рддреЗрд╢реЗрд╡рдЯреА, рдореА ggez рдирд┐рд╡рдбрд▓рд╛ рдХрд╛рд░рдг рддреЛ рд▓рд╣рд╛рди 2D рдЧреЗрдо рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХ рдпреЛрдЧреНрдп рд╡рд╛рдЯрд▓рд╛. рдкрд┐рд╕реНрдЯрдирдЪреА рдореЙрдбреНрдпреВрд▓рд░ рд░рдЪрдирд╛ рдирд╡рд╢рд┐рдХреНрдпрд╛ рд╡рд┐рдХрд╕рдХрд╛рд╕рд╛рдареА (рдХрд┐рдВрд╡рд╛ рдкреНрд░рдердордЪ рд░рд╕реНрдЯрд╕рд╣ рдХрд╛рдо рдХрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡реНрдпрдХреНрддреАрд╕рд╛рдареА) рдЦреВрдк рдЬрдЯрд┐рд▓ рдЖрд╣реЗ.

рдЦреЗрд│ рд░рдЪрдирд╛

рдореА рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдмрджреНрджрд▓ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдереЛрдбрд╛ рд╡реЗрд│ рдШрд╛рд▓рд╡рд▓рд╛. рдкрд╣рд┐рд▓реА рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ "рдЬрдореАрди", рд▓реЛрдХ рдЖрдгрд┐ рдЯреЗрдирд┐рд╕ рдХреЛрд░реНрдЯ рдмрдирд╡рдгреЗ. рд▓реЛрдХрд╛рдВрдирд╛ рдХреЛрд░реНрдЯрд╛рдЪреНрдпрд╛ рдлреЗрд▒реНрдпрд╛ рдорд╛рд░реВрди рд╡рд╛рдЯ рдкрд╣рд╛рд╡реА рд▓рд╛рдЧрддреЗ. рдЦреЗрд│рд╛рдбреВрдВрдХрдбреЗ рдХреМрд╢рд▓реНрдпреЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗ рдХрд╛рд▓рд╛рдВрддрд░рд╛рдиреЗ рд╕реБрдзрд╛рд░рддрд╛рдд. рд╢рд┐рд╡рд╛рдп, рдПрдХ рд╕рдВрдкрд╛рджрдХ рдЕрд╕рд╛рд╡рд╛ рдЬреЛ рддреБрдореНрд╣рд╛рд▓рд╛ рдирд╡реАрди рд▓реЛрдХ рдЖрдгрд┐ рдиреНрдпрд╛рдпрд╛рд▓рдпреЗ рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ, рдкрд░рдВрддреБ рд╣реЗ рдЖрддрд╛ рд╡рд┐рдирд╛рдореВрд▓реНрдп рдирд╛рд╣реА.

рд╕рд░реНрд╡ рдЧреЛрд╖реНрдЯреАрдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрди рдореА рдХрд╛рдорд╛рд▓рд╛ рд▓рд╛рдЧрд▓реЛ.

рдЦреЗрд│ рдирд┐рд░реНрдорд┐рддреА

рд╕реБрд░реБрд╡рд╛рдд: рдордВрдбрд│реЗ рдЖрдгрд┐ рдЕрдореВрд░реНрдд

рдореА ggez рд╡рд░реВрди рдПрдХ рдЙрджрд╛рд╣рд░рдг рдШреЗрддрд▓реЗ рдЖрдгрд┐ рд╕реНрдХреНрд░реАрдирд╡рд░ рдПрдХ рд╡рд░реНрддреБрд│ рдорд┐рд│рд╛рд▓реЗ. рдЕрдкреНрд░рддрд┐рдо! рдЖрддрд╛ рдХрд╛рд╣реА рдЧреЛрд╖рд╡рд╛рд░рд╛. рдорд▓рд╛ рд╡рд╛рдЯрд▓реЗ рдХреА рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯрдЪреНрдпрд╛ рдХрд▓реНрдкрдиреЗрдкрд╛рд╕реВрди рджреВрд░ рд░рд╛рд╣рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рд╣реЛрдИрд▓. рдпреЗрдереЗ рдирдореВрдж рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╕реНрддреБрдд рдЖрдгрд┐ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

// the game object trait
trait GameObject {
    fn update(&mut self, _ctx: &mut Context) -> GameResult<()>;
    fn draw(&mut self, ctx: &mut Context) -> GameResult<()>;
}
 
// a specific game object - Circle
struct Circle {
    position: Point2,
}
 
 impl Circle {
    fn new(position: Point2) -> Circle {
        Circle { position }
    }
}
impl GameObject for Circle {
    fn update(&mut self, _ctx: &mut Context) -> GameResult<()> {
        Ok(())
    }
    fn draw(&mut self, ctx: &mut Context) -> GameResult<()> {
        let circle =
            graphics::Mesh::new_circle(ctx, graphics::DrawMode::Fill, self.position, 100.0, 2.0)?;
 
         graphics::draw(ctx, &circle, na::Point2::new(0.0, 0.0), 0.0)?;
        Ok(())
    }
}

рдХреЛрдбрдЪреНрдпрд╛ рдпрд╛ рддреБрдХрдбреНрдпрд╛рдиреЗ рдорд▓рд╛ рд╡рд╕реНрддреВрдВрдЪреА рдПрдХ рдЫрд╛рди рдпрд╛рджреА рджрд┐рд▓реА рдЬреА рдореА рддрд┐рддрдХреНрдпрд╛рдЪ рдЫрд╛рди рд▓реВрдкрдордзреНрдпреЗ рдЕрджреНрдпрддрдирд┐рдд рдЖрдгрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░реВ рд╢рдХреЗрди.

mpl event::EventHandler for MainState {
    fn update(&mut self, context: &mut Context) -> GameResult<()> {
        // Update all objects
        for object in self.objects.iter_mut() {
            object.update(context)?;
        }
 
        Ok(())
    }
 
    fn draw(&mut self, context: &mut Context) -> GameResult<()> {
        graphics::clear(context);
 
        // Draw all objects
        for object in self.objects.iter_mut() {
            object.draw(context)?;
        }
 
        graphics::present(context);
 
        Ok(())
    }
}

main.rs рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХрд╛рд░рдг рддреНрдпрд╛рдд рдХреЛрдбрдЪреНрдпрд╛ рд╕рд░реНрд╡ рдУрд│реА рдЖрд╣реЗрдд. рдореА рдлрд╛рдЗрд▓реНрд╕ рд╡реЗрдЧрд│реЗ рдХрд░рдгреНрдпрд╛рдд рдЖрдгрд┐ рдбрд┐рд░реЗрдХреНрдЯрд░реА рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рдд рдереЛрдбрд╛ рд╡реЗрд│ рдШрд╛рд▓рд╡рд▓рд╛. рддреНрдпрд╛рдирдВрддрд░ рд╣реЗ рдЕрд╕реЗ рджрд┐рд╕рд▓реЗ:
рд╕рдВрд╕рд╛рдзрдиреЗ -> рдпреЗрдереЗ рд╕рд░реНрд╡ рдорд╛рд▓рдорддреНрддрд╛ рдЖрд╣реЗрдд (рдкреНрд░рддрд┐рдорд╛)
Src
- рд╕рдВрд╕реНрдерд╛
тАФ game_object.rs
тАФ circle.rs
тАФ main.rs -> рдореБрдЦреНрдп рд▓реВрдк

рд▓реЛрдХ, рдордЬрд▓рд╛ рдЖрдгрд┐ рдкреНрд░рддрд┐рдорд╛

рдкреБрдвреАрд▓ рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ рд╡реНрдпрдХреНрддреА рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рдкреНрд░рддрд┐рдорд╛ рд▓реЛрдб рдХрд░рдгреЗ. рд╕рд░реНрд╡ рдХрд╛рд╣реА 32*32 рдЯрд╛рдЗрд▓реНрд╕рдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ рдмрд╛рдВрдзрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.

24 рддрд╛рд╕рд╛рдВрдд рдЧрдВрдЬ рдЦреЗрд│рдгреЗ: рд╡реИрдпрдХреНрддрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдЕрдиреБрднрд╡

рдЯреЗрдирд┐рд╕рдЪреА рдореИрджрд╛рдиреЗ

рдЯреЗрдирд┐рд╕ рдХреЛрд░реНрдЯ рдХрд╕реЗ рджрд┐рд╕рддрд╛рдд рдпрд╛рдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдореА рддреНрдпрд╛рдВрдирд╛ 4*2 рдЯрд╛рдЗрд▓реНрд╕рдкрд╛рд╕реВрди рдмрдирд╡рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛. рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рдпрд╛ рдЖрдХрд╛рд░рд╛рдЪреА рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ рдХрд┐рдВрд╡рд╛ 8 рд╕реНрд╡рддрдВрддреНрд░ рдЯрд╛рдЗрд▓ рдПрдХрддреНрд░ рдареЗрд╡рдгреЗ рд╢рдХреНрдп рд╣реЛрддреЗ. рдкрдг рдирдВрддрд░ рдорд▓рд╛ рд╕рдордЬрд▓реЗ рдХреА рдлрдХреНрдд рджреЛрди рдЕрдирдиреНрдп рдЯрд╛рдЗрд▓реНрд╕рдЪреА рдЧрд░рдЬ рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рдХрд╛ рддреЗ рдпреЗрдереЗ рдЖрд╣реЗ.

рдПрдХреВрдг рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЕрд╢рд╛ рджреЛрди рдЯрд╛рдЗрд▓реНрд╕ рдЖрд╣реЗрдд: 1 рдЖрдгрд┐ 2.

рдиреНрдпрд╛рдпрд╛рд▓рдпрд╛рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЧрд╛рдд рдЯрд╛рдЗрд▓ 1 рдХрд┐рдВрд╡рд╛ рдЯрд╛рдЗрд▓ 2 рдЕрд╕рддреЗ. рддреЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд┐рдВрд╡рд╛ 180 рдЕрдВрд╢рд╛рдВрд╡рд░ рдлреНрд▓рд┐рдк рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

24 рддрд╛рд╕рд╛рдВрдд рдЧрдВрдЬ рдЦреЗрд│рдгреЗ: рд╡реИрдпрдХреНрддрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдЕрдиреБрднрд╡

рдореВрд▓рднреВрдд рдмрд╛рдВрдзрдХрд╛рдо (рд╡рд┐рдзрд╛рдирд╕рднрд╛) рдореЛрдб

рдореА рд╕рд╛рдЗрдЯреНрд╕, рд▓реЛрдХ рдЖрдгрд┐ рдирдХрд╛рд╢реЗ рдпрд╛рдВрдЪреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдорд▓рд╛ рд╕рдордЬрд▓реЗ рдХреА рдореВрд▓рднреВрдд рдЕрд╕реЗрдВрдмрд▓реА рдореЛрдб рджреЗрдЦреАрд▓ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдореА рд╣реЗ рдЕрд╕реЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ: рдЬреЗрд╡реНрд╣рд╛ рдмрдЯрдг рджрд╛рдмрд▓реЗ рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд╡рдбрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдХреНрд▓рд┐рдХ рдЗрдЪреНрдЫрд┐рдд рдард┐рдХрд╛рдгреА рдареЗрд╡рддреЛ. рддрд░, рдмрдЯрдг 1 рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрд░реНрдЯ рдирд┐рд╡рдбрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ рдЖрдгрд┐ рдмрдЯрдг 2 рддреБрдореНрд╣рд╛рд▓рд╛ рдЦреЗрд│рд╛рдбреВ рдирд┐рд╡рдбрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.

рдкрдг рддрд░реАрд╣реА 1 рдЖрдгрд┐ 2 рдЪрд╛ рдЕрд░реНрде рдХрд╛рдп рдЖрд╣реЗ рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдореА рдХреЛрдгрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд╡рдбрд▓рд╛ рдЖрд╣реЗ рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдпрд░рдлреНрд░реЗрдо рдЬреЛрдбрд▓реА рдЖрд╣реЗ. рд╣реЗ рдЕрд╕реЗ рджрд┐рд╕рддреЗ.

24 рддрд╛рд╕рд╛рдВрдд рдЧрдВрдЬ рдЦреЗрд│рдгреЗ: рд╡реИрдпрдХреНрддрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдЕрдиреБрднрд╡

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЖрдгрд┐ рд░рд┐рдлреЕрдХреНрдЯрд░рд┐рдВрдЧ рдкреНрд░рд╢реНрди

рдЖрддрд╛ рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рдЕрдиреЗрдХ рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЖрд╣реЗрдд: рд▓реЛрдХ, рдХреЛрд░реНрдЯ рдЖрдгрд┐ рдордЬрд▓реЗ. рдкрд░рдВрддреБ рд╡рд╛рдпрд░рдлреНрд░реЗрдореНрд╕ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдВрдЯрд┐рдЯреАрд▓рд╛ рд╣реЗ рд╕рд╛рдВрдЧрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реНрд╡рддрдГ рдкреНрд░рд╛рддреНрдпрдХреНрд╖рд┐рдХ рдореЛрдбрдордзреНрдпреЗ рдЖрд╣реЗрдд рдХрд┐рдВрд╡рд╛ рдлреНрд░реЗрдо рдлрдХреНрдд рдХрд╛рдврд▓реА рдЖрд╣реЗ рдХреА рдирд╛рд╣реА. рд╣реЗ рдлрд╛рд░ рд╕реЛрдпреАрдЪреЗ рдирд╛рд╣реА.

рдорд▓рд╛ рдЕрд╕реЗ рд╡рд╛рдЯрд▓реЗ рдХреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдЪрд╛ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреНрдпрд╛рдиреЗ рдХрд╛рд╣реА рдорд░реНрдпрд╛рджрд╛ рдкреНрд░рдХрдЯ рдХреЗрд▓реНрдпрд╛:

  • рд╕реНрд╡рддрдГрдЪ рд░реЗрдВрдбрд░ рдЖрдгрд┐ рдЕрдкрдбреЗрдЯ рдХрд░рдгрд╛рд░реА рдПрдЦрд╛рджреА рд╕рдВрд╕реНрдерд╛ рдЕрд╕рдгреЗ рд╣реА рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗ рдХрд╛рд░рдг рддреА рд╕рдВрд╕реНрдерд╛ рдХрд╛рдп рд░реЗрдВрдбрд░ рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ рддреЗ "рдорд╛рд╣рд┐рдд" рдХрд░реВ рд╢рдХрдгрд╛рд░ рдирд╛рд╣реА - рдПрдХ рдкреНрд░рддрд┐рдорд╛ рдЖрдгрд┐ рд╡рд╛рдпрд░рдлреНрд░реЗрдо;
  • рд╡реИрдпрдХреНрддрд┐рдХ рдШрдЯрдХрд╛рдВрдордзреАрд▓ рдЧреБрдгрдзрд░реНрдо рдЖрдгрд┐ рд╡рд░реНрддрдирд╛рдЪреА рджреЗрд╡рд╛рдгрдШреЗрд╡рд╛рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рдзрдирд╛рдЪрд╛ рдЕрднрд╛рд╡ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, is_build_mode рдЧреБрдгрдзрд░реНрдо рдХрд┐рдВрд╡рд╛ рд╡рд░реНрддрди рдкреНрд░рд╕реНрддреБрддреАрдХрд░рдг). рд╡рд╛рд░рд╕рд╛ рд╡рд╛рдкрд░рдгреЗ рд╢рдХреНрдп рд╣реЛрдИрд▓, рдЬрд░реА рддреЗ рд░рд╕реНрдЯрдордзреНрдпреЗ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рдпреЛрдЧреНрдп рдорд╛рд░реНрдЧ рдирд╛рд╣реА. рдорд▓рд╛ рдЦрд░реЛрдЦрд░ рд▓реЗрдЖрдЙрдЯрдЪреА рдЧрд░рдЬ рд╣реЛрддреА;
  • рд▓реЛрдХрд╛рдВрдирд╛ рдиреНрдпрд╛рдпрд╛рд▓рдпрд╛рдд рдирд┐рдпреБрдХреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрд╕реНрдерд╛рдВрдордзреАрд▓ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдЪреЗ рд╕рд╛рдзрди рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ;
  • рд╕рдВрд╕реНрдерд╛ рд╕реНрд╡рддрдГрдЪ рдбреЗрдЯрд╛ рдЖрдгрд┐ рддрд░реНрдХ рдпрд╛рдВрдЪреЗ рдорд┐рд╢реНрд░рдг рд╣реЛрддреЗ рдЬреЗ рддреНрд╡рд░реАрдд рдирд┐рдпрдВрддреНрд░рдгрд╛рдмрд╛рд╣реЗрд░ рдЧреЗрд▓реЗ.

рдореА рдЖрдгрдЦреА рдХрд╛рд╣реА рд╕рдВрд╢реЛрдзрди рдХреЗрд▓реЗ рдЖрдгрд┐ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╢реЛрдзрд▓реЗ ECS - рдШрдЯрдХ рдШрдЯрдХ рдкреНрд░рдгрд╛рд▓реА, рдЬреЗ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЧреЗрдордордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рдпреЗрдереЗ ECS рдЪреЗ рдлрд╛рдпрджреЗ рдЖрд╣реЗрдд:

  • рдбреЗрдЯрд╛ рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рдкрд╛рд╕реВрди рд╡рд┐рднрдХреНрдд рдЖрд╣реЗ;
  • рд╡рд╛рд░рд╕рд╛рдРрд╡рдЬреА рд░рдЪрдирд╛;
  • рдбреЗрдЯрд╛-рдХреЗрдВрджреНрд░рд┐рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░.

рдИрд╕реАрдПрд╕ рддреАрди рдореВрд▓рднреВрдд рд╕рдВрдХрд▓реНрдкрдирд╛рдВрджреНрд╡рд╛рд░реЗ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреАрдХреГрдд рдЖрд╣реЗ:

  • рд╕рдВрд╕реНрдерд╛ - рдЕрднрд┐рдЬреНрдЮрд╛рдкрдХрд╛рдиреЗ рд╕рдВрджрд░реНрднрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рдкреНрд░рдХрд╛рд░ (рддреЛ рдПрдХ рдЦреЗрд│рд╛рдбреВ, рдЪреЗрдВрдбреВ рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реАрддрд░реА рдЕрд╕реВ рд╢рдХрддреЛ);
  • рдШрдЯрдХ - рдШрдЯрдХ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдкрд╛рд╕реВрди рдмрдирд▓реЗрд▓реЗ рдЖрд╣реЗрдд. рдЙрджрд╛рд╣рд░рдг - рд░реЗрдВрдбрд░рд┐рдВрдЧ рдШрдЯрдХ, рд╕реНрдерд╛рдиреЗ рдЖрдгрд┐ рдЗрддрд░. рд╣реЗ рдбреЗрдЯрд╛ рд╡реЗрдЕрд░рд╣рд╛рдКрд╕ рдЖрд╣реЗрдд;
  • рд╕рд┐рд╕реНрдЯрдореНрд╕ - рддреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдгрд┐ рдШрдЯрдХ рджреЛрдиреНрд╣реА рд╡рд╛рдкрд░рддрд╛рдд, рддрд╕реЗрдЪ рдпрд╛ рдбреЗрдЯрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд░реНрддрди рдЖрдгрд┐ рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рддрд╛рдд. рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгрдЬреЗ рдкреНрд░рд╕реНрддреБрддреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдЬреА рдкреНрд░рд╕реНрддреБрддреАрдХрд░рдг рдШрдЯрдХрд╛рдВрд╕рд╣ рд╕рд░реНрд╡ рдШрдЯрдХрд╛рдВрджреНрд╡рд╛рд░реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рддреЗ рдЖрдгрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ.

рддреНрдпрд╛рдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдЭрд╛рд▓реЗ рдХреА ECS рдЦрд╛рд▓реАрд▓ рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рддреЗ:

  • рд╕рдВрд╕реНрдерд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рддрдкрдгреЗ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рд░рд╕рд╛рдРрд╡рдЬреА рд▓реЗрдЖрдЙрдЯ рд╡рд╛рдкрд░рдгреЗ;
  • рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реАрджреНрд╡рд╛рд░реЗ рдХреЛрдб рдЧреЛрдВрдзрд│рд╛рдкрд╛рд╕реВрди рдореБрдХреНрдд рд╣реЛрдгреЗ;
  • рд╡рд╛рдпрд░рдлреНрд░реЗрдо рд▓реЙрдЬрд┐рдХ рддреНрдпрд╛рдЪ рдард┐рдХрд╛рдгреА рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА is_build_mode рд╕рд╛рд░рдЦреНрдпрд╛ рдкрджреНрдзрддреА рд╡рд╛рдкрд░рдгреЗ - рдкреНрд░рд╕реНрддреБрдд рдкреНрд░рдгрд╛рд▓реАрдордзреНрдпреЗ.

рдИрд╕реАрдПрд╕ рд▓рд╛рдЧреВ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рд╣реЗрдЪ рдЭрд╛рд▓реЗ.

рд╕рдВрд╕рд╛рдзрдиреЗ -> рдпреЗрдереЗ рд╕рд░реНрд╡ рдорд╛рд▓рдорддреНрддрд╛ рдЖрд╣реЗрдд (рдкреНрд░рддрд┐рдорд╛)
Src
- рдШрдЯрдХ
тАФposition.rs
тАФ person.rs
тАФ tennis_court.rs
тАФ floor.rs
- wireframe.rs
тАФ mouse_tracked.rs
- рд╕рдВрд╕рд╛рдзрдиреЗ
тАФmouse.rs
- рдкреНрд░рдгрд╛рд▓реА
тАФ rendering.rs
тАФ constants.rs
тАФ utils.rs
тАФ world_factory.rs -> рдЬрд╛рдЧрддрд┐рдХ рдХрд╛рд░рдЦрд╛рдирд╛ рдХрд╛рд░реНрдпреЗ
тАФ main.rs -> рдореБрдЦреНрдп рд▓реВрдк

рдЖрдореНрд╣реА рд▓реЛрдХрд╛рдВрдирд╛ рдиреНрдпрд╛рдпрд╛рд▓рдпрд╛рдд рдирд┐рдпреБрдХреНрдд рдХрд░рддреЛ

ECS рдореБрд│реЗ рдЬреАрд╡рди рд╕реЛрдкреЗ рдЭрд╛рд▓реЗ рдЖрд╣реЗ. рдЖрддрд╛ рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рд╕рдВрд╕реНрдерд╛рдВрдордзреНрдпреЗ рдбреЗрдЯрд╛ рдЬреЛрдбрдгреНрдпрд╛рдЪрд╛ рдЖрдгрд┐ рддреНрдпрд╛ рдбреЗрдЯрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рддрд░реНрдХ рдЬреЛрдбрдгреНрдпрд╛рдЪрд╛ рдПрдХ рдкрджреНрдзрддрд╢реАрд░ рдорд╛рд░реНрдЧ рд╣реЛрддрд╛. рдЖрдгрд┐ рдпрд╛рдореБрд│реЗ, рдиреНрдпрд╛рдпрд╛рд▓рдпрд╛рдВрдордзреНрдпреЗ рд▓реЛрдХрд╛рдВрдЪреЗ рд╡рд┐рддрд░рдг рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреЗ рд╢рдХреНрдп рдЭрд╛рд▓реЗ.

рдореА рдХрд╛рдп рдХреЗрд▓реЗ рдЖрд╣реЗ:

  • рд╡реНрдпрдХреНрддреАрд▓рд╛ рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдиреНрдпрд╛рдпрд╛рд▓рдпрд╛рдВрдмрджреНрджрд▓ рдбреЗрдЯрд╛ рдЬреЛрдбрд▓рд╛;
  • рдЯреЗрдирд┐рд╕рдХреЛрд░реНрдЯрдордзреНрдпреЗ рд╡рд┐рддрд░рд┐рдд рд▓реЛрдХрд╛рдВрдмрджреНрджрд▓ рдбреЗрдЯрд╛ рдЬреЛрдбрд▓рд╛;
  • рдХреЛрд░реНрдЯрдЪреВрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдо рдЬреЛрдбрд▓реА, рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рд▓реЛрдХ рдЖрдгрд┐ рдиреНрдпрд╛рдпрд╛рд▓рдпрд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рд╕, рдЙрдкрд▓рдмреНрдз рдиреНрдпрд╛рдпрд╛рд▓рдпреЗ рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдЦреЗрд│рд╛рдбреВрдВрдЪреЗ рд╡рд┐рддрд░рдг рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ;
  • рдПрдХ PersonMovementSystem рдЬреЛрдбрд▓реА, рдЬреА рдиреНрдпрд╛рдпрд╛рд▓рдпрд╛рдВрдирд╛ рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд▓реЛрдХрд╛рдВрдЪрд╛ рд╢реЛрдз рдШреЗрддреЗ, рдЖрдгрд┐ рдЬрд░ рддреЗ рддреЗрдереЗ рдирд╕рддреАрд▓, рддрд░ рддреНрдпрд╛рдВрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдард┐рдХрд╛рдгреА рдкрд╛рдард╡рддреЗ.

24 рддрд╛рд╕рд╛рдВрдд рдЧрдВрдЬ рдЦреЗрд│рдгреЗ: рд╡реИрдпрдХреНрддрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдЕрдиреБрднрд╡

рдЧреЛрд│рд╛ рдХрд░реАрдд рдЖрд╣реЗ

рдпрд╛ рд╕реЛрдкреНрдпрд╛ рдЧреЗрдорд╡рд░ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рдорд▓рд╛ рдЦреВрдк рдЖрдирдВрдж рдЭрд╛рд▓рд╛. рд╢рд┐рд╡рд╛рдп, рдорд▓рд╛ рдЖрдирдВрдж рдЖрд╣реЗ рдХреА рдореА рддреЗ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд░рд╕реНрдЯ рд╡рд╛рдкрд░рд▓реЗ, рдХрд╛рд░рдг:

  • рдЧрдВрдЬ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рддреЗ рджреЗрддреЛ;
  • рддреНрдпрд╛рдд рдЙрддреНрдХреГрд╖реНрдЯ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдЖрд╣реЗ, рдЧрдВрдЬ рдЦреВрдкрдЪ рдореЛрд╣рдХ рдЖрд╣реЗ;
  • рд╕реБрд╕рдВрдЧрддрддрд╛ рдердВрдб рдЖрд╣реЗ;
  • рддреБрдореНрд╣рд╛рд▓рд╛ рдХреНрд▓реЛрдирд┐рдВрдЧ, рдХреЙрдкреА рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рддрддреНрд╕рдо рдХреНрд░рд┐рдпрд╛рдВрдЪрд╛ рдЕрд╡рд▓рдВрдм рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрдгрд╛рд░ рдирд╛рд╣реА, рдЬреНрдпрд╛ рдореА рдЕрдиреЗрдХрджрд╛ C++ рдордзреНрдпреЗ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд;
  • рдкрд░реНрдпрд╛рдп рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рдЕрддрд┐рд╢рдп рд╕реЛрдкреЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрд░реБрдЯреА рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╣рд╛рддрд╛рд│рддрд╛рдд;
  • рдЬрд░ рдкреНрд░рдХрд▓реНрдк рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдд рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓, рддрд░ 99% рд╡реЗрд│реЗрдд рддреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдЖрдгрд┐ рдЬрд╕реЗ рдкрд╛рд╣рд┐рдЬреЗ рддрд╕реЗ. рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯреА рд╕рдВрджреЗрд╢ рдореА рдкрд╛рд╣рд┐рд▓реЗрд▓реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдЖрд╣реЗрдд.

рд░рд╕реНрдЯрдордзреНрдпреЗ рдЧреЗрдо рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдиреБрдХрддреАрдЪ рд╕реБрд░реВ рдЖрд╣реЗ. рдкрд░рдВрддреБ рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рд░рд╕реНрдЯ рдЙрдШрдбрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдзреАрдЪ рдПрдХ рд╕реНрдерд┐рд░ рдЖрдгрд┐ рдмрд▒реНрдпрд╛рдкреИрдХреА рдореЛрдард╛ рд╕рдореБрджрд╛рдп рдХрд╛рд░реНрдпрд░рдд рдЖрд╣реЗ. рдореНрд╣рдгреВрдирдЪ, рдореА рднрд╛рд╖реЗрдЪреНрдпрд╛ рднрд╡рд┐рд╖реНрдпрд╛рдХрдбреЗ рдЖрд╢рд╛рд╡рд╛рджрд╛рдиреЗ рдкрд╛рд╣рддреЛ, рдЖрдордЪреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрд╛рдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдорд╛рдВрдЪреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЛ.

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ:

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛