diff --git a/term1/questions_1.pdf b/term1/questions_1.pdf new file mode 100644 index 0000000..4d288c6 Binary files /dev/null and b/term1/questions_1.pdf differ diff --git a/seminar01_overload/01_myspace/myspace.cpp b/term1/seminar01_overload/01_myspace/myspace.cpp similarity index 100% rename from seminar01_overload/01_myspace/myspace.cpp rename to term1/seminar01_overload/01_myspace/myspace.cpp diff --git a/seminar01_overload/02_cubev/cubev.cpp b/term1/seminar01_overload/02_cubev/cubev.cpp similarity index 100% rename from seminar01_overload/02_cubev/cubev.cpp rename to term1/seminar01_overload/02_cubev/cubev.cpp diff --git a/seminar01_overload/03_cuber/cuber.cpp b/term1/seminar01_overload/03_cuber/cuber.cpp similarity index 100% rename from seminar01_overload/03_cuber/cuber.cpp rename to term1/seminar01_overload/03_cuber/cuber.cpp diff --git a/seminar01_overload/04_count_letters/count_letters.cpp b/term1/seminar01_overload/04_count_letters/count_letters.cpp similarity index 100% rename from seminar01_overload/04_count_letters/count_letters.cpp rename to term1/seminar01_overload/04_count_letters/count_letters.cpp diff --git a/seminar01_overload/05_add_price/add_price.cpp b/term1/seminar01_overload/05_add_price/add_price.cpp similarity index 100% rename from seminar01_overload/05_add_price/add_price.cpp rename to term1/seminar01_overload/05_add_price/add_price.cpp diff --git a/seminar01_overload/06_is_expensive/is_expensive.cpp b/term1/seminar01_overload/06_is_expensive/is_expensive.cpp similarity index 100% rename from seminar01_overload/06_is_expensive/is_expensive.cpp rename to term1/seminar01_overload/06_is_expensive/is_expensive.cpp diff --git a/seminar01_overload/07_vector3f/main.cpp b/term1/seminar01_overload/07_vector3f/main.cpp similarity index 100% rename from seminar01_overload/07_vector3f/main.cpp rename to term1/seminar01_overload/07_vector3f/main.cpp diff --git a/seminar01_overload/07_vector3f/vector3f.h b/term1/seminar01_overload/07_vector3f/vector3f.h similarity index 100% rename from seminar01_overload/07_vector3f/vector3f.h rename to term1/seminar01_overload/07_vector3f/vector3f.h diff --git a/seminar01_overload/08_complex/complex.h b/term1/seminar01_overload/08_complex/complex.h similarity index 100% rename from seminar01_overload/08_complex/complex.h rename to term1/seminar01_overload/08_complex/complex.h diff --git a/seminar01_overload/08_complex/complex_image.cpp b/term1/seminar01_overload/08_complex/complex_image.cpp similarity index 100% rename from seminar01_overload/08_complex/complex_image.cpp rename to term1/seminar01_overload/08_complex/complex_image.cpp diff --git a/seminar01_overload/08_complex/complex_movie.cpp b/term1/seminar01_overload/08_complex/complex_movie.cpp similarity index 100% rename from seminar01_overload/08_complex/complex_movie.cpp rename to term1/seminar01_overload/08_complex/complex_movie.cpp diff --git a/seminar01_overload/08_complex/complex_movie.mp4 b/term1/seminar01_overload/08_complex/complex_movie.mp4 similarity index 100% rename from seminar01_overload/08_complex/complex_movie.mp4 rename to term1/seminar01_overload/08_complex/complex_movie.mp4 diff --git a/seminar01_overload/08_complex/complex_test.cpp b/term1/seminar01_overload/08_complex/complex_test.cpp similarity index 100% rename from seminar01_overload/08_complex/complex_test.cpp rename to term1/seminar01_overload/08_complex/complex_test.cpp diff --git a/seminar01_overload/08_complex/julia.cpp b/term1/seminar01_overload/08_complex/julia.cpp similarity index 100% rename from seminar01_overload/08_complex/julia.cpp rename to term1/seminar01_overload/08_complex/julia.cpp diff --git a/seminar01_overload/08_complex/julia_images/-0.4+0.6i.ppm b/term1/seminar01_overload/08_complex/julia_images/-0.4+0.6i.ppm similarity index 100% rename from seminar01_overload/08_complex/julia_images/-0.4+0.6i.ppm rename to term1/seminar01_overload/08_complex/julia_images/-0.4+0.6i.ppm diff --git a/seminar01_overload/08_complex/julia_images/-0.7-0.38i.ppm b/term1/seminar01_overload/08_complex/julia_images/-0.7-0.38i.ppm similarity index 100% rename from seminar01_overload/08_complex/julia_images/-0.7-0.38i.ppm rename to term1/seminar01_overload/08_complex/julia_images/-0.7-0.38i.ppm diff --git a/seminar01_overload/08_complex/julia_images/-0.8+0.16i.ppm b/term1/seminar01_overload/08_complex/julia_images/-0.8+0.16i.ppm similarity index 100% rename from seminar01_overload/08_complex/julia_images/-0.8+0.16i.ppm rename to term1/seminar01_overload/08_complex/julia_images/-0.8+0.16i.ppm diff --git a/seminar01_overload/08_complex/julia_images/0.28+0.011i.ppm b/term1/seminar01_overload/08_complex/julia_images/0.28+0.011i.ppm similarity index 100% rename from seminar01_overload/08_complex/julia_images/0.28+0.011i.ppm rename to term1/seminar01_overload/08_complex/julia_images/0.28+0.011i.ppm diff --git a/seminar01_overload/08_complex/julia_movie.cpp b/term1/seminar01_overload/08_complex/julia_movie.cpp similarity index 100% rename from seminar01_overload/08_complex/julia_movie.cpp rename to term1/seminar01_overload/08_complex/julia_movie.cpp diff --git a/seminar01_overload/08_complex/mandelbrot.cpp b/term1/seminar01_overload/08_complex/mandelbrot.cpp similarity index 100% rename from seminar01_overload/08_complex/mandelbrot.cpp rename to term1/seminar01_overload/08_complex/mandelbrot.cpp diff --git a/seminar01_overload/08_complex/mandelbrot_images/mandelbrot.ppm b/term1/seminar01_overload/08_complex/mandelbrot_images/mandelbrot.ppm similarity index 100% rename from seminar01_overload/08_complex/mandelbrot_images/mandelbrot.ppm rename to term1/seminar01_overload/08_complex/mandelbrot_images/mandelbrot.ppm diff --git a/seminar01_overload/homework_overload.pdf b/term1/seminar01_overload/homework_overload.pdf similarity index 100% rename from seminar01_overload/homework_overload.pdf rename to term1/seminar01_overload/homework_overload.pdf diff --git a/seminar02_encapsulation/0circle/circle.cpp b/term1/seminar02_encapsulation/0circle/circle.cpp similarity index 100% rename from seminar02_encapsulation/0circle/circle.cpp rename to term1/seminar02_encapsulation/0circle/circle.cpp diff --git a/seminar02_encapsulation/0circle/circle.h b/term1/seminar02_encapsulation/0circle/circle.h similarity index 100% rename from seminar02_encapsulation/0circle/circle.h rename to term1/seminar02_encapsulation/0circle/circle.h diff --git a/seminar02_encapsulation/0circle/main.cpp b/term1/seminar02_encapsulation/0circle/main.cpp similarity index 100% rename from seminar02_encapsulation/0circle/main.cpp rename to term1/seminar02_encapsulation/0circle/main.cpp diff --git a/seminar02_encapsulation/0circle/point.cpp b/term1/seminar02_encapsulation/0circle/point.cpp similarity index 100% rename from seminar02_encapsulation/0circle/point.cpp rename to term1/seminar02_encapsulation/0circle/point.cpp diff --git a/seminar02_encapsulation/0circle/point.h b/term1/seminar02_encapsulation/0circle/point.h similarity index 100% rename from seminar02_encapsulation/0circle/point.h rename to term1/seminar02_encapsulation/0circle/point.h diff --git a/seminar02_encapsulation/1number/main.cpp b/term1/seminar02_encapsulation/1number/main.cpp similarity index 100% rename from seminar02_encapsulation/1number/main.cpp rename to term1/seminar02_encapsulation/1number/main.cpp diff --git a/seminar02_encapsulation/1number/number.cpp b/term1/seminar02_encapsulation/1number/number.cpp similarity index 100% rename from seminar02_encapsulation/1number/number.cpp rename to term1/seminar02_encapsulation/1number/number.cpp diff --git a/seminar02_encapsulation/1number/number.h b/term1/seminar02_encapsulation/1number/number.h similarity index 100% rename from seminar02_encapsulation/1number/number.h rename to term1/seminar02_encapsulation/1number/number.h diff --git a/seminar02_encapsulation/homework_encapsulation.pdf b/term1/seminar02_encapsulation/homework_encapsulation.pdf similarity index 100% rename from seminar02_encapsulation/homework_encapsulation.pdf rename to term1/seminar02_encapsulation/homework_encapsulation.pdf diff --git a/seminar03_initialization/01_letter_case_switch/main.cpp b/term1/seminar03_initialization/01_letter_case_switch/main.cpp similarity index 100% rename from seminar03_initialization/01_letter_case_switch/main.cpp rename to term1/seminar03_initialization/01_letter_case_switch/main.cpp diff --git a/seminar03_initialization/01_letter_case_switch/main.cpp~ b/term1/seminar03_initialization/01_letter_case_switch/main.cpp~ similarity index 100% rename from seminar03_initialization/01_letter_case_switch/main.cpp~ rename to term1/seminar03_initialization/01_letter_case_switch/main.cpp~ diff --git a/seminar03_initialization/02_repeat/a.out~ b/term1/seminar03_initialization/02_repeat/a.out~ similarity index 100% rename from seminar03_initialization/02_repeat/a.out~ rename to term1/seminar03_initialization/02_repeat/a.out~ diff --git a/seminar03_initialization/02_repeat/main.cpp b/term1/seminar03_initialization/02_repeat/main.cpp similarity index 100% rename from seminar03_initialization/02_repeat/main.cpp rename to term1/seminar03_initialization/02_repeat/main.cpp diff --git a/seminar03_initialization/02_repeat/main.cpp~ b/term1/seminar03_initialization/02_repeat/main.cpp~ similarity index 100% rename from seminar03_initialization/02_repeat/main.cpp~ rename to term1/seminar03_initialization/02_repeat/main.cpp~ diff --git a/seminar03_initialization/03_string_multiplication/main.cpp b/term1/seminar03_initialization/03_string_multiplication/main.cpp similarity index 100% rename from seminar03_initialization/03_string_multiplication/main.cpp rename to term1/seminar03_initialization/03_string_multiplication/main.cpp diff --git a/seminar03_initialization/04_truncate_to_dot/main.cpp b/term1/seminar03_initialization/04_truncate_to_dot/main.cpp similarity index 100% rename from seminar03_initialization/04_truncate_to_dot/main.cpp rename to term1/seminar03_initialization/04_truncate_to_dot/main.cpp diff --git a/seminar03_initialization/05_string_sum/main.cpp b/term1/seminar03_initialization/05_string_sum/main.cpp similarity index 100% rename from seminar03_initialization/05_string_sum/main.cpp rename to term1/seminar03_initialization/05_string_sum/main.cpp diff --git a/seminar03_initialization/06_new/main.cpp b/term1/seminar03_initialization/06_new/main.cpp similarity index 100% rename from seminar03_initialization/06_new/main.cpp rename to term1/seminar03_initialization/06_new/main.cpp diff --git a/seminar03_initialization/07_placement/main.cpp b/term1/seminar03_initialization/07_placement/main.cpp similarity index 100% rename from seminar03_initialization/07_placement/main.cpp rename to term1/seminar03_initialization/07_placement/main.cpp diff --git a/seminar03_initialization/07_placement/miptstring.cpp b/term1/seminar03_initialization/07_placement/miptstring.cpp similarity index 100% rename from seminar03_initialization/07_placement/miptstring.cpp rename to term1/seminar03_initialization/07_placement/miptstring.cpp diff --git a/seminar03_initialization/08_stringview/main.cpp b/term1/seminar03_initialization/08_stringview/main.cpp similarity index 100% rename from seminar03_initialization/08_stringview/main.cpp rename to term1/seminar03_initialization/08_stringview/main.cpp diff --git a/seminar03_initialization/08_stringview/miptstring.cpp b/term1/seminar03_initialization/08_stringview/miptstring.cpp similarity index 100% rename from seminar03_initialization/08_stringview/miptstring.cpp rename to term1/seminar03_initialization/08_stringview/miptstring.cpp diff --git a/seminar03_initialization/08_stringview/miptstring.h b/term1/seminar03_initialization/08_stringview/miptstring.h similarity index 100% rename from seminar03_initialization/08_stringview/miptstring.h rename to term1/seminar03_initialization/08_stringview/miptstring.h diff --git a/seminar03_initialization/08_stringview/miptstringview.cpp b/term1/seminar03_initialization/08_stringview/miptstringview.cpp similarity index 100% rename from seminar03_initialization/08_stringview/miptstringview.cpp rename to term1/seminar03_initialization/08_stringview/miptstringview.cpp diff --git a/seminar03_initialization/08_stringview/miptstringview.h b/term1/seminar03_initialization/08_stringview/miptstringview.h similarity index 100% rename from seminar03_initialization/08_stringview/miptstringview.h rename to term1/seminar03_initialization/08_stringview/miptstringview.h diff --git a/seminar03_initialization/homework_initialization.pdf b/term1/seminar03_initialization/homework_initialization.pdf similarity index 100% rename from seminar03_initialization/homework_initialization.pdf rename to term1/seminar03_initialization/homework_initialization.pdf diff --git a/seminar04_templates/01_sum_even/main.cpp b/term1/seminar04_templates/01_sum_even/main.cpp similarity index 100% rename from seminar04_templates/01_sum_even/main.cpp rename to term1/seminar04_templates/01_sum_even/main.cpp diff --git a/seminar04_templates/02_last_digits/main.cpp b/term1/seminar04_templates/02_last_digits/main.cpp similarity index 100% rename from seminar04_templates/02_last_digits/main.cpp rename to term1/seminar04_templates/02_last_digits/main.cpp diff --git a/seminar04_templates/03_factorization/main.cpp b/term1/seminar04_templates/03_factorization/main.cpp similarity index 100% rename from seminar04_templates/03_factorization/main.cpp rename to term1/seminar04_templates/03_factorization/main.cpp diff --git a/seminar04_templates/04_time/main.cpp b/term1/seminar04_templates/04_time/main.cpp similarity index 100% rename from seminar04_templates/04_time/main.cpp rename to term1/seminar04_templates/04_time/main.cpp diff --git a/seminar04_templates/04_time/time.cpp b/term1/seminar04_templates/04_time/time.cpp similarity index 100% rename from seminar04_templates/04_time/time.cpp rename to term1/seminar04_templates/04_time/time.cpp diff --git a/seminar04_templates/04_time/time.h b/term1/seminar04_templates/04_time/time.h similarity index 100% rename from seminar04_templates/04_time/time.h rename to term1/seminar04_templates/04_time/time.h diff --git a/seminar04_templates/05_maximum/main.cpp b/term1/seminar04_templates/05_maximum/main.cpp similarity index 100% rename from seminar04_templates/05_maximum/main.cpp rename to term1/seminar04_templates/05_maximum/main.cpp diff --git a/seminar04_templates/06_pairing/main.cpp b/term1/seminar04_templates/06_pairing/main.cpp similarity index 100% rename from seminar04_templates/06_pairing/main.cpp rename to term1/seminar04_templates/06_pairing/main.cpp diff --git a/seminar04_templates/07_manager/main.cpp b/term1/seminar04_templates/07_manager/main.cpp similarity index 100% rename from seminar04_templates/07_manager/main.cpp rename to term1/seminar04_templates/07_manager/main.cpp diff --git a/seminar04_templates/08_ref/main.cpp b/term1/seminar04_templates/08_ref/main.cpp similarity index 100% rename from seminar04_templates/08_ref/main.cpp rename to term1/seminar04_templates/08_ref/main.cpp diff --git a/seminar04_templates/homework_templates.pdf b/term1/seminar04_templates/homework_templates.pdf similarity index 100% rename from seminar04_templates/homework_templates.pdf rename to term1/seminar04_templates/homework_templates.pdf diff --git a/seminar05_iterators/01_slide/main.cpp b/term1/seminar05_iterators/01_slide/main.cpp similarity index 100% rename from seminar05_iterators/01_slide/main.cpp rename to term1/seminar05_iterators/01_slide/main.cpp diff --git a/seminar05_iterators/02_string_vector_reverse/main.cpp b/term1/seminar05_iterators/02_string_vector_reverse/main.cpp similarity index 100% rename from seminar05_iterators/02_string_vector_reverse/main.cpp rename to term1/seminar05_iterators/02_string_vector_reverse/main.cpp diff --git a/seminar05_iterators/03_is_uppper/main.cpp b/term1/seminar05_iterators/03_is_uppper/main.cpp similarity index 100% rename from seminar05_iterators/03_is_uppper/main.cpp rename to term1/seminar05_iterators/03_is_uppper/main.cpp diff --git a/seminar05_iterators/04_is_identifier/main.cpp b/term1/seminar05_iterators/04_is_identifier/main.cpp similarity index 100% rename from seminar05_iterators/04_is_identifier/main.cpp rename to term1/seminar05_iterators/04_is_identifier/main.cpp diff --git a/seminar05_iterators/05_move_spaces/main.cpp b/term1/seminar05_iterators/05_move_spaces/main.cpp similarity index 100% rename from seminar05_iterators/05_move_spaces/main.cpp rename to term1/seminar05_iterators/05_move_spaces/main.cpp diff --git a/seminar05_iterators/homework_iterators.pdf b/term1/seminar05_iterators/homework_iterators.pdf similarity index 100% rename from seminar05_iterators/homework_iterators.pdf rename to term1/seminar05_iterators/homework_iterators.pdf diff --git a/seminar09_libraries/01_balls/Makefile b/term1/seminar09_libraries/01_balls/Makefile similarity index 100% rename from seminar09_libraries/01_balls/Makefile rename to term1/seminar09_libraries/01_balls/Makefile diff --git a/seminar09_libraries/01_balls/balls.cpp b/term1/seminar09_libraries/01_balls/balls.cpp similarity index 100% rename from seminar09_libraries/01_balls/balls.cpp rename to term1/seminar09_libraries/01_balls/balls.cpp diff --git a/seminar09_libraries/02_thor/Makefile b/term1/seminar09_libraries/02_thor/Makefile similarity index 100% rename from seminar09_libraries/02_thor/Makefile rename to term1/seminar09_libraries/02_thor/Makefile diff --git a/seminar09_libraries/02_thor/balls.cpp b/term1/seminar09_libraries/02_thor/balls.cpp similarity index 100% rename from seminar09_libraries/02_thor/balls.cpp rename to term1/seminar09_libraries/02_thor/balls.cpp diff --git a/seminar09_libraries/03_walls/balls.cpp b/term1/seminar09_libraries/03_walls/balls.cpp similarity index 100% rename from seminar09_libraries/03_walls/balls.cpp rename to term1/seminar09_libraries/03_walls/balls.cpp diff --git a/seminar09_libraries/04_n_bodies/balls.cpp b/term1/seminar09_libraries/04_n_bodies/balls.cpp similarity index 100% rename from seminar09_libraries/04_n_bodies/balls.cpp rename to term1/seminar09_libraries/04_n_bodies/balls.cpp diff --git a/seminar09_libraries/05_n_bodies_mass/balls.cpp b/term1/seminar09_libraries/05_n_bodies_mass/balls.cpp similarity index 100% rename from seminar09_libraries/05_n_bodies_mass/balls.cpp rename to term1/seminar09_libraries/05_n_bodies_mass/balls.cpp diff --git a/seminar09_libraries/06_n_bodies_charges/balls.cpp b/term1/seminar09_libraries/06_n_bodies_charges/balls.cpp similarity index 100% rename from seminar09_libraries/06_n_bodies_charges/balls.cpp rename to term1/seminar09_libraries/06_n_bodies_charges/balls.cpp diff --git a/seminar09_libraries/07_n_bodies_charges_mouse/balls.cpp b/term1/seminar09_libraries/07_n_bodies_charges_mouse/balls.cpp similarity index 100% rename from seminar09_libraries/07_n_bodies_charges_mouse/balls.cpp rename to term1/seminar09_libraries/07_n_bodies_charges_mouse/balls.cpp diff --git a/seminar09_libraries/final b/term1/seminar09_libraries/final similarity index 100% rename from seminar09_libraries/final rename to term1/seminar09_libraries/final diff --git a/seminar09_libraries/homework_libraries.pdf b/term1/seminar09_libraries/homework_libraries.pdf similarity index 100% rename from seminar09_libraries/homework_libraries.pdf rename to term1/seminar09_libraries/homework_libraries.pdf diff --git a/seminar11_events/01_select_move_delete/Makefile b/term1/seminar11_events/01_select_move_delete/Makefile similarity index 100% rename from seminar11_events/01_select_move_delete/Makefile rename to term1/seminar11_events/01_select_move_delete/Makefile diff --git a/seminar11_events/01_select_move_delete/consolas.ttf b/term1/seminar11_events/01_select_move_delete/consolas.ttf similarity index 100% rename from seminar11_events/01_select_move_delete/consolas.ttf rename to term1/seminar11_events/01_select_move_delete/consolas.ttf diff --git a/seminar11_events/01_select_move_delete/context_menu.hpp b/term1/seminar11_events/01_select_move_delete/context_menu.hpp similarity index 100% rename from seminar11_events/01_select_move_delete/context_menu.hpp rename to term1/seminar11_events/01_select_move_delete/context_menu.hpp diff --git a/seminar11_events/01_select_move_delete/select_move_delete.cpp b/term1/seminar11_events/01_select_move_delete/select_move_delete.cpp similarity index 100% rename from seminar11_events/01_select_move_delete/select_move_delete.cpp rename to term1/seminar11_events/01_select_move_delete/select_move_delete.cpp diff --git a/term1/seminar11_events/01_select_move_delete/tags b/term1/seminar11_events/01_select_move_delete/tags new file mode 100644 index 0000000..35703df --- /dev/null +++ b/term1/seminar11_events/01_select_move_delete/tags @@ -0,0 +1,11 @@ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ +!_TAG_OUTPUT_FILESEP slash /slash or backslash/ +!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ +!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ +!_TAG_PROC_CWD /home/nihonium/projects/mipt_cpp/seminar11_events/01_select_move_delete/ // +!_TAG_PROGRAM_AUTHOR Universal Ctags Team // +!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ +!_TAG_PROGRAM_URL https://ctags.io/ /official site/ +!_TAG_PROGRAM_VERSION 5.9.0 /p5.9.20220828.0/ diff --git a/seminar11_events/02_slider/Makefile b/term1/seminar11_events/02_slider/Makefile similarity index 100% rename from seminar11_events/02_slider/Makefile rename to term1/seminar11_events/02_slider/Makefile diff --git a/seminar11_events/02_slider/circle.cpp b/term1/seminar11_events/02_slider/circle.cpp similarity index 100% rename from seminar11_events/02_slider/circle.cpp rename to term1/seminar11_events/02_slider/circle.cpp diff --git a/seminar11_events/02_slider/consolas.ttf b/term1/seminar11_events/02_slider/consolas.ttf similarity index 100% rename from seminar11_events/02_slider/consolas.ttf rename to term1/seminar11_events/02_slider/consolas.ttf diff --git a/seminar11_events/02_slider/slider.cpp b/term1/seminar11_events/02_slider/slider.cpp similarity index 100% rename from seminar11_events/02_slider/slider.cpp rename to term1/seminar11_events/02_slider/slider.cpp diff --git a/seminar11_events/02_slider/slider.hpp b/term1/seminar11_events/02_slider/slider.hpp similarity index 100% rename from seminar11_events/02_slider/slider.hpp rename to term1/seminar11_events/02_slider/slider.hpp diff --git a/term1/seminar11_events/02_slider/tags b/term1/seminar11_events/02_slider/tags new file mode 100644 index 0000000..1ea4ee7 --- /dev/null +++ b/term1/seminar11_events/02_slider/tags @@ -0,0 +1,11 @@ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ +!_TAG_OUTPUT_FILESEP slash /slash or backslash/ +!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ +!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ +!_TAG_PROC_CWD /home/nihonium/projects/mipt_cpp/seminar11_events/02_slider/ // +!_TAG_PROGRAM_AUTHOR Universal Ctags Team // +!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ +!_TAG_PROGRAM_URL https://ctags.io/ /official site/ +!_TAG_PROGRAM_VERSION 5.9.0 /p5.9.20220828.0/ diff --git a/seminar11_events/homework_events.pdf b/term1/seminar11_events/homework_events.pdf similarity index 100% rename from seminar11_events/homework_events.pdf rename to term1/seminar11_events/homework_events.pdf diff --git a/seminar13_polymorphism/arkanoid/Makefile b/term1/seminar13_polymorphism/arkanoid/Makefile similarity index 100% rename from seminar13_polymorphism/arkanoid/Makefile rename to term1/seminar13_polymorphism/arkanoid/Makefile diff --git a/term1/seminar13_polymorphism/arkanoid/arkanoid b/term1/seminar13_polymorphism/arkanoid/arkanoid new file mode 100755 index 0000000..e3ad455 Binary files /dev/null and b/term1/seminar13_polymorphism/arkanoid/arkanoid differ diff --git a/seminar13_polymorphism/arkanoid/arkanoid.cpp b/term1/seminar13_polymorphism/arkanoid/arkanoid.cpp similarity index 100% rename from seminar13_polymorphism/arkanoid/arkanoid.cpp rename to term1/seminar13_polymorphism/arkanoid/arkanoid.cpp diff --git a/seminar13_polymorphism/arkanoid/arkanoid.hpp b/term1/seminar13_polymorphism/arkanoid/arkanoid.hpp similarity index 100% rename from seminar13_polymorphism/arkanoid/arkanoid.hpp rename to term1/seminar13_polymorphism/arkanoid/arkanoid.hpp diff --git a/seminar13_polymorphism/arkanoid/ball.cpp b/term1/seminar13_polymorphism/arkanoid/ball.cpp similarity index 100% rename from seminar13_polymorphism/arkanoid/ball.cpp rename to term1/seminar13_polymorphism/arkanoid/ball.cpp diff --git a/seminar13_polymorphism/arkanoid/ball.hpp b/term1/seminar13_polymorphism/arkanoid/ball.hpp similarity index 100% rename from seminar13_polymorphism/arkanoid/ball.hpp rename to term1/seminar13_polymorphism/arkanoid/ball.hpp diff --git a/seminar13_polymorphism/arkanoid/bonus.cpp b/term1/seminar13_polymorphism/arkanoid/bonus.cpp similarity index 100% rename from seminar13_polymorphism/arkanoid/bonus.cpp rename to term1/seminar13_polymorphism/arkanoid/bonus.cpp diff --git a/seminar13_polymorphism/arkanoid/bonus.hpp b/term1/seminar13_polymorphism/arkanoid/bonus.hpp similarity index 100% rename from seminar13_polymorphism/arkanoid/bonus.hpp rename to term1/seminar13_polymorphism/arkanoid/bonus.hpp diff --git a/seminar13_polymorphism/arkanoid/brick.hpp b/term1/seminar13_polymorphism/arkanoid/brick.hpp similarity index 100% rename from seminar13_polymorphism/arkanoid/brick.hpp rename to term1/seminar13_polymorphism/arkanoid/brick.hpp diff --git a/seminar13_polymorphism/arkanoid/brick_grid.cpp b/term1/seminar13_polymorphism/arkanoid/brick_grid.cpp similarity index 100% rename from seminar13_polymorphism/arkanoid/brick_grid.cpp rename to term1/seminar13_polymorphism/arkanoid/brick_grid.cpp diff --git a/seminar13_polymorphism/arkanoid/brick_grid.hpp b/term1/seminar13_polymorphism/arkanoid/brick_grid.hpp similarity index 100% rename from seminar13_polymorphism/arkanoid/brick_grid.hpp rename to term1/seminar13_polymorphism/arkanoid/brick_grid.hpp diff --git a/seminar13_polymorphism/arkanoid/consola.ttf b/term1/seminar13_polymorphism/arkanoid/consola.ttf similarity index 100% rename from seminar13_polymorphism/arkanoid/consola.ttf rename to term1/seminar13_polymorphism/arkanoid/consola.ttf diff --git a/seminar13_polymorphism/arkanoid/main.cpp b/term1/seminar13_polymorphism/arkanoid/main.cpp similarity index 100% rename from seminar13_polymorphism/arkanoid/main.cpp rename to term1/seminar13_polymorphism/arkanoid/main.cpp diff --git a/seminar13_polymorphism/arkanoid/paddle.cpp b/term1/seminar13_polymorphism/arkanoid/paddle.cpp similarity index 100% rename from seminar13_polymorphism/arkanoid/paddle.cpp rename to term1/seminar13_polymorphism/arkanoid/paddle.cpp diff --git a/seminar13_polymorphism/arkanoid/paddle.hpp b/term1/seminar13_polymorphism/arkanoid/paddle.hpp similarity index 100% rename from seminar13_polymorphism/arkanoid/paddle.hpp rename to term1/seminar13_polymorphism/arkanoid/paddle.hpp diff --git a/term1/seminar13_polymorphism/arkanoid/tags b/term1/seminar13_polymorphism/arkanoid/tags new file mode 100644 index 0000000..49b5484 --- /dev/null +++ b/term1/seminar13_polymorphism/arkanoid/tags @@ -0,0 +1,11 @@ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ +!_TAG_OUTPUT_FILESEP slash /slash or backslash/ +!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ +!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ +!_TAG_PROC_CWD /home/nihonium/projects/mipt_cpp/seminar13_polymorphism/arkanoid/ // +!_TAG_PROGRAM_AUTHOR Universal Ctags Team // +!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ +!_TAG_PROGRAM_URL https://ctags.io/ /official site/ +!_TAG_PROGRAM_VERSION 5.9.0 /p5.9.20220828.0/ diff --git a/term1/seminar13_polymorphism/homework_polymorphism.pdf b/term1/seminar13_polymorphism/homework_polymorphism.pdf new file mode 100644 index 0000000..4c6f885 Binary files /dev/null and b/term1/seminar13_polymorphism/homework_polymorphism.pdf differ diff --git a/term2/seminar03_state/CMakeLists.txt b/term2/seminar03_state/CMakeLists.txt new file mode 100644 index 0000000..6164d21 --- /dev/null +++ b/term2/seminar03_state/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 2.8.0) +project(player_movement) + +# Найдём библиотеку SFML в системе +find_package(SFML 2.5 REQUIRED graphics window system) + +# Создадим исполняемый файл по имени player_movement из исходных файлов +add_executable(player_movement src/main.cpp src/player.cpp src/player_states.cpp) + +# Укажем, что нужно использовать стандарт C++20 +target_compile_features(player_movement PRIVATE cxx_std_20) + +# Подключим библиотеку SFML к нашему проекту +target_link_libraries(player_movement PRIVATE sfml-graphics sfml-system sfml-window) + +# Добавим файл со спрайтами +configure_file(src/hero.png hero.png COPYONLY) diff --git a/term2/seminar03_state/homework_state.pdf b/term2/seminar03_state/homework_state.pdf new file mode 100644 index 0000000..62b2b3c Binary files /dev/null and b/term2/seminar03_state/homework_state.pdf differ diff --git a/term2/seminar03_state/src/animation.hpp b/term2/seminar03_state/src/animation.hpp new file mode 100644 index 0000000..8d902fb --- /dev/null +++ b/term2/seminar03_state/src/animation.hpp @@ -0,0 +1,69 @@ +#pragma once +#include +#include +using std::cout, std::endl; + + +class Animation +{ +public: + enum class AnimationType {Repeat, OneIteration}; + + Animation(AnimationType type = AnimationType::Repeat) : mType{type} + { + } + + void addTextureRect(sf::IntRect rect) + { + mTextureRects.push_back(rect); + } + + void setAnimationSpeed(float animationSpeed) + { + mAnimationSpeed = animationSpeed; + } + + sf::Vector2i getSize() + { + return {mTextureRects[mCurrentFrame].width, mTextureRects[mCurrentFrame].height}; + } + + void update(float dt) + { + mTime += dt; + mCurrentFrame = static_cast(mAnimationSpeed * mTime); + + if (mCurrentFrame >= mTextureRects.size()) + { + if (mType == AnimationType::Repeat) + { + mCurrentFrame = 0; + mTime = 0; + } + else if (mType == AnimationType::OneIteration) + { + mCurrentFrame = mTextureRects.size() - 1; + mTime = mCurrentFrame / mAnimationSpeed; + mHasEnded = true; + } + } + } + + void updateSprite(sf::Sprite& sprite) const + { + sprite.setTextureRect(mTextureRects[mCurrentFrame]); + } + + bool hasEnded() { + return mHasEnded; + } +private: + + std::vector mTextureRects {}; + + int mCurrentFrame {0}; + float mAnimationSpeed {1}; + float mTime {0}; + AnimationType mType {AnimationType::OneIteration}; + bool mHasEnded = false; +}; diff --git a/term2/seminar03_state/src/block.hpp b/term2/seminar03_state/src/block.hpp new file mode 100644 index 0000000..63199ce --- /dev/null +++ b/term2/seminar03_state/src/block.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include +#include + +struct Block { + sf::FloatRect mBlock; + bool mIsDestructable = false; + Block(sf::FloatRect b, bool isDestructable = false) : mBlock(b), mIsDestructable{isDestructable} {}; +}; + + diff --git a/term2/seminar03_state/src/hero.png b/term2/seminar03_state/src/hero.png new file mode 100644 index 0000000..32e82ea Binary files /dev/null and b/term2/seminar03_state/src/hero.png differ diff --git a/term2/seminar03_state/src/main.cpp b/term2/seminar03_state/src/main.cpp new file mode 100644 index 0000000..948f636 --- /dev/null +++ b/term2/seminar03_state/src/main.cpp @@ -0,0 +1,51 @@ +#include +#include +#include "world.hpp" + +int main() +{ + sf::ContextSettings settings; + settings.antialiasingLevel = 8.0; + sf::RenderWindow window(sf::VideoMode(1200, 900), "Player states", sf::Style::Close, settings); + window.setVerticalSyncEnabled(true); + window.setFramerateLimit(60); + + double time = 0; + double dt = 1.0 / 60; + + World world; + world.addBlock(sf::FloatRect{-500, 770, 20000, 400}); + /* Разрушаемый блок слева от точки спавна игрока */ + world.addBlock({sf::FloatRect{-200,700, 100, 500}, true}); + world.addBlock(sf::FloatRect{-400, 100, 700, 300}); + world.addBlock(sf::FloatRect{600, 500, 300, 120}); + world.addBlock(sf::FloatRect{800, 0, 400, 200}); + world.addBlock(sf::FloatRect{-100, -700, 400, 100}); + world.addBlock(sf::FloatRect{700, -700, 400, 100}); + world.addBlock(sf::FloatRect{1500, -700, 400, 100}); + world.addBlock(sf::FloatRect{1100, -300, 400, 100}); + world.addBlock(sf::FloatRect{1100, 400, 400, 400}); + world.addBlock(sf::FloatRect{1900, -100, 200, 800}); + world.addBlock(sf::FloatRect{3000, 500, 1000, 200}); + + while (window.isOpen()) + { + sf::Event event; + while(window.pollEvent(event)) + { + if(event.type == sf::Event::Closed) + window.close(); + + world.handleEvents(event); + } + window.clear(sf::Color::Black); + world.update(dt); + world.draw(window); + + window.display(); + + time += dt; + } + + return 0; +} diff --git a/term2/seminar03_state/src/player.cpp b/term2/seminar03_state/src/player.cpp new file mode 100644 index 0000000..c600210 --- /dev/null +++ b/term2/seminar03_state/src/player.cpp @@ -0,0 +1,167 @@ +#include +#include +#include +#include +#include "player.hpp" +#include "player_states.hpp" +#include "block.hpp" + +Player::Player(sf::Vector2f position) : mPosition{position} +{ + if (!mTexture.loadFromFile("./hero.png")) + { + std::cerr << "Can't load image ./hero.png for Player class" << std::endl; + std::exit(1); + } + + setState(new Idle(this)); + + mSprite.setTexture(mTexture); + mSprite.setOrigin(mSprite.getLocalBounds().width / 2, mSprite.getLocalBounds().height / 2); + mSprite.setPosition(mPosition); + + + mScaleFactor = 4; + mSprite.setScale(mScaleFactor, mScaleFactor); +} + +void Player::setState(PlayerState* pNewState) +{ + delete mpState; + mpState = pNewState; +} + + +sf::Vector2f Player::getCenter() const +{ + return mPosition; +} + + +void Player::applyVelocity(sf::Vector2f velocity) +{ + mVelocity += velocity; +} + +void Player::update(float dt) +{ + mpState->update(this, dt); + mPosition += mVelocity * dt; + + mSprite.setOrigin(mSprite.getLocalBounds().width / 2, mSprite.getLocalBounds().height / 2); + mSprite.setPosition(mPosition); + mpState->updateSprite(mSprite, mIsFacedRight, mScaleFactor); +} + +void Player::draw(sf::RenderWindow& window) +{ + window.draw(mSprite); + +#ifdef _DEBUG + sf::RectangleShape shape {{mCollisionRect.width, mCollisionRect.height}}; + shape.setPosition(mPosition.x + mCollisionRect.left, mPosition.y + mCollisionRect.top); + shape.setFillColor(sf::Color(150, 50, 50, 50)); + window.draw(shape); + + sf::CircleShape center {6}; + center.setFillColor(sf::Color::Red); + center.setOrigin(center.getRadius(), center.getRadius()); + center.setPosition(mPosition); + window.draw(center); +#endif +} + + +void Player::handleEvents(const sf::Event& event) +{ + mpState->handleEvents(this, event); +} + +bool Player::handleCollision(const Block& rect) +{ + sf::FloatRect playerRect = {mPosition.x + mCollisionRect.left, mPosition.y + mCollisionRect.top, mCollisionRect.width, mCollisionRect.height}; + + float overlapx1 = playerRect.left + playerRect.width - rect.mBlock.left; + float overlapx2 = rect.mBlock.left + rect.mBlock.width - playerRect.left; + float overlapy1 = playerRect.top + playerRect.height - rect.mBlock.top; + float overlapy2 = rect.mBlock.top + rect.mBlock.height - playerRect.top; + + if (overlapx1 < 0 || overlapx2 < 0 || overlapy1 < 0 || overlapy2 < 0) + return false; + + + int minOverlapDirection = 0; + float minOvelap = overlapx1; + if (overlapx2 < minOvelap) {minOverlapDirection = 1; minOvelap = overlapx2;} + if (overlapy1 < minOvelap) {minOverlapDirection = 2; minOvelap = overlapy1;} + if (overlapy2 < minOvelap) {minOverlapDirection = 3;} + + switch (minOverlapDirection) + { + case 0: + mPosition.x -= overlapx1 - 1; + if (mVelocity.y > 0 && playerRect.top < rect.mBlock.top + Hooked::kMaxHookOffset && playerRect.top > rect.mBlock.top - Hooked::kMaxHookOffset) + { + mpState->hook(this); + } + break; + case 1: + mPosition.x += overlapx2 - 1; + if (mVelocity.y > 0 && playerRect.top < rect.mBlock.top + Hooked::kMaxHookOffset && playerRect.top > rect.mBlock.top - Hooked::kMaxHookOffset) + { + mpState->hook(this); + } + break; + case 2: + mPosition.y -= overlapy1 - 1; + mVelocity.y = 0; + mVelocity.y = 0; + mpState->hitGround(this); + break; + case 3: + mPosition.y += overlapy2 - 1; + if (mVelocity.y < 0) + { + mVelocity.y = 0; + mVelocity.y = 0; + } + break; + } + return true; +} + +void Player::handleAllCollisions(std::vector& blocks) +{ + mIsColliding = false; + bool toRemove; + auto it = blocks.begin(); + /* Remove destructable blocks */ + while (it != blocks.end()) { + toRemove = false; + if (handleCollision(*it)) { + if (it->mIsDestructable && mIsAttacking && + (((it->mBlock.left < mPosition.x) && !mIsFacedRight) || + ((it->mBlock.left > mPosition.x) && mIsFacedRight)) && + (it->mBlock.top < mPosition.y + mCollisionRect.height) + ) { + toRemove = true; + } + mIsColliding = true; + } + if (toRemove) { + it = blocks.erase(it); + } + else + it++; + } + + if (!mIsColliding) + mpState->startFalling(this); +} + + +Player::~Player() +{ + delete mpState; +} + diff --git a/term2/seminar03_state/src/player.hpp b/term2/seminar03_state/src/player.hpp new file mode 100644 index 0000000..e5f13d3 --- /dev/null +++ b/term2/seminar03_state/src/player.hpp @@ -0,0 +1,56 @@ +#pragma once + +#include +#include +#include "player_states.hpp" +#include "block.hpp" + +class PlayerState; + +class Player +{ +public: + + Player(sf::Vector2f position); + + sf::Vector2f getCenter() const; + void applyVelocity(sf::Vector2f velocity); + + void update(float dt); + void draw(sf::RenderWindow& window); + void handleEvents(const sf::Event& event); + bool handleCollision(const Block& rect); + void handleAllCollisions(std::vector& blocks); + bool isAttacking(); + ~Player(); + + friend class PlayerState; + friend class Idle; + friend class Running; + friend class Falling; + friend class Sliding; + friend class Hooked; + friend class Sitting; + friend class FirstAttack; + friend class SecondAttack; + friend class ThirdAttack; + + +private: + + sf::Vector2f mPosition {0, 0}; + sf::Vector2f mVelocity {0, 0}; + + bool mIsColliding {false}; + sf::FloatRect mCollisionRect {-40, -60, 80, 120}; + + PlayerState* mpState {nullptr}; + sf::Texture mTexture {}; + sf::Sprite mSprite {}; + float mScaleFactor {1}; + bool mIsFacedRight {true}; + bool mIsAttacking {false}; + + + void setState(PlayerState* pNewState); +}; diff --git a/term2/seminar03_state/src/player_states.cpp b/term2/seminar03_state/src/player_states.cpp new file mode 100644 index 0000000..f67d7e5 --- /dev/null +++ b/term2/seminar03_state/src/player_states.cpp @@ -0,0 +1,602 @@ +#include +#include +#include +#include +#include "animation.hpp" +#include "player.hpp" +#include "player_states.hpp" + +using std::cout, std::endl; + +PlayerState::PlayerState() {} + + +void PlayerState::updateSprite(sf::Sprite& sprite, bool isFacedRight, float scaleFactor) +{ + mAnimation.updateSprite(sprite); + + if (!isFacedRight) + { + sprite.setScale({-scaleFactor, scaleFactor}); + } + else + { + sprite.setScale({scaleFactor, scaleFactor}); + } +} + + +void PlayerState::jump(Player* player) +{ + player->mPosition.y -= 1; + player->mVelocity.y = -kJumpingVelocity; + startFalling(player); +} + +PlayerState::~PlayerState() +{ +} + + + +sf::FloatRect operator*(float x, sf::FloatRect rect) +{ + return {x * rect.left, x * rect.top, x * rect.width, x * rect.height}; +} + + + +Idle::Idle(Player* player) +{ + player->mVelocity = {0, 0}; + mAnimation = Animation(); + mAnimation.setAnimationSpeed(6); + mAnimation.addTextureRect({ 14, 6, 21, 30}); + mAnimation.addTextureRect({ 64, 6, 21, 30}); + mAnimation.addTextureRect({114, 6, 21, 30}); + mAnimation.addTextureRect({164, 6, 21, 30}); + + player->mCollisionRect = player->mScaleFactor * sf::FloatRect(-10, -15, 20, 30); + + cout << "Creating Idle state" << endl; +} + + +void Idle::hook(Player* player) +{ +} + +void Idle::update(Player* player, float dt) +{ + mAnimation.update(dt); + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) + { + player->setState(new Running(player)); + } +} + +void Idle::handleEvents(Player* player, const sf::Event& event) +{ + if (event.type == sf::Event::KeyPressed) + { + if (event.key.code == sf::Keyboard::Left || event.key.code == sf::Keyboard::Right) + { + player->setState(new Running(player)); + } + + else if (event.key.code == sf::Keyboard::Space) + { + jump(player); + } + else if (event.key.code == sf::Keyboard::LShift) + { + player->mVelocity.x = player->mIsFacedRight ? -100 : 100; + player->setState(new Sitting(player)); + } + else if (event.key.code == sf::Keyboard::X) + { + player->setState(new FirstAttack(player)); + } + } +} + +void Idle::startFalling(Player* player) +{ + player->setState(new Falling(player)); +} + +void Idle::hitGround(Player* player) +{ +} + + + + + + + + + +Running::Running(Player* player) : PlayerState() +{ + mRunningSpeed = 900; + mAnimation = Animation(); + mAnimation.setAnimationSpeed(12); + mAnimation.addTextureRect({ 67, 45, 20, 27}); + mAnimation.addTextureRect({116, 46, 20, 27}); + mAnimation.addTextureRect({166, 48, 20, 27}); + mAnimation.addTextureRect({217, 45, 20, 27}); + mAnimation.addTextureRect({266, 46, 20, 27}); + mAnimation.addTextureRect({316, 48, 20, 27}); + + player->mCollisionRect = player->mScaleFactor * sf::FloatRect(-10, -15, 20, 30);; + + cout << "Creating Running state" << endl; +} + +void Running::hook(Player* player) +{ +} + + +void Running::update(Player* player, float dt) +{ + mAnimation.update(dt); + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) + { + player->mVelocity.x = -mRunningSpeed; + player->mIsFacedRight = false; + } + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) + { + player->mVelocity.x = mRunningSpeed; + player->mIsFacedRight = true; + } +} + +void Running::handleEvents(Player* player, const sf::Event& event) +{ + if (event.type == sf::Event::KeyPressed) + { + if (event.key.code == sf::Keyboard::Space) + { + jump(player); + return; + } + + else if (event.key.code == sf::Keyboard::LShift) + { + player->setState(new Sliding(player)); + } + else if (event.key.code == sf::Keyboard::X) + { + player->setState(new FirstAttack(player)); + } + + } + else if (event.type == sf::Event::KeyReleased) + { + if (event.key.code == sf::Keyboard::Left && !sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) + { + player->setState(new Idle(player)); + player->mVelocity.x = 0; + } + + else if (event.key.code == sf::Keyboard::Right && !sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) + { + player->setState(new Idle(player)); + player->mVelocity.x = 0; + } + } +} + +void Running::startFalling(Player* player) +{ + player->setState(new Falling(player)); +} + +void Running::hitGround(Player* player) +{ +} + + + + + + + +Sliding::Sliding(Player* player) : PlayerState() +{ + if (player->mVelocity.x > 0) + player->mVelocity.x = kSlidingVelocity; + else if (player->mVelocity.x < 0) + player->mVelocity.x = -kSlidingVelocity; + + mAnimation = Animation(Animation::AnimationType::OneIteration); + mAnimation.setAnimationSpeed(10); + mAnimation.addTextureRect({155, 119, 34, 28}); + mAnimation.addTextureRect({205, 119, 34, 28}); + mAnimation.addTextureRect({255, 119, 34, 28}); + mAnimation.addTextureRect({307, 119, 34, 28}); + mAnimation.addTextureRect({ 9, 156, 34, 28}); + + player->mCollisionRect = sf::FloatRect(-80, -20, 160, 80); + player->mCollisionRect = player->mScaleFactor * sf::FloatRect(-20, -5, 40, 20);; + mCurrentTime = kSlidingTime; + + cout << "Creating Sliding state" << endl; +} + +void Sliding::hook(Player* player) +{ +} + + +void Sliding::update(Player* player, float dt) +{ + mAnimation.update(dt); + player->mVelocity.x *= kVelocityDecay; + mCurrentTime -= dt; + if (mCurrentTime < 0 && player->mIsColliding) + { + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) + player->setState(new Running(player)); + else + player->setState(new Idle(player)); + return; + } +} +void Sliding::handleEvents(Player* player, const sf::Event& event) +{ + if (event.type == sf::Event::KeyPressed) + { + if (event.key.code == sf::Keyboard::Left || event.key.code == sf::Keyboard::Right) + player->setState(new Running(player)); + + + if (event.key.code == sf::Keyboard::Space && player->mIsColliding) + { + jump(player); + player->setState(new Falling(player)); + } + } +} + +void Sliding::startFalling(Player* player) +{ + +} + +void Sliding::hitGround(Player* player) +{ +} + + + + + + + +Falling::Falling(Player* player) : PlayerState() +{ + mAnimation = Animation(); + mAnimation.setAnimationSpeed(12); + mAnimation.addTextureRect({321, 155, 15, 26}); + + player->mCollisionRect = player->mScaleFactor * sf::FloatRect(-10, -15, 20, 30);; + + cout << "Creating Falling state" << endl; +} + +void Falling::hook(Player* player) +{ + player->setState(new Hooked(player)); +} + + +void Falling::update(Player* player, float dt) +{ + mAnimation.update(dt); + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) + { + player->mVelocity.x = -kHorizontalVelocity; + player->mIsFacedRight = false; + } + + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) + { + player->mVelocity.x = kHorizontalVelocity; + player->mIsFacedRight = true; + } +} + +void Falling::handleEvents(Player* player, const sf::Event& event) +{ + if (event.type == sf::Event::KeyPressed) + { + if (event.key.code == sf::Keyboard::Space && !hasJumped) { + kJumpingVelocity = 1000; + jump(player); + hasJumped = true; + } + } +} + +void Falling::startFalling(Player* player) +{ +} + +void Falling::hitGround(Player* player) +{ + player->setState(new Idle(player)); +} + + + + + + + +Hooked::Hooked(Player* player) : PlayerState() +{ + mAnimation = Animation(Animation::AnimationType::OneIteration); + mAnimation.setAnimationSpeed(12); + mAnimation.addTextureRect({ 70, 151, 16, 34}); + mAnimation.addTextureRect({119, 151, 16, 34}); + mAnimation.addTextureRect({169, 151, 16, 34}); + mAnimation.addTextureRect({219, 151, 16, 34}); + + player->mCollisionRect = player->mScaleFactor * sf::FloatRect(-10, -15, 20, 30);; + + cout << "Creating Hooked state" << endl; +} + +void Hooked::hook(Player* player) +{ +} + + +void Hooked::update(Player* player, float dt) +{ + player->mVelocity = {0, 0}; + mAnimation.update(dt); +} + +void Hooked::handleEvents(Player* player, const sf::Event& event) +{ + if (event.type == sf::Event::KeyPressed) + { + if (event.key.code == sf::Keyboard::Space) + jump(player); + + else if (event.key.code == sf::Keyboard::Down) + { + player->mVelocity.x = player->mIsFacedRight ? -100 : 100; + player->setState(new Falling(player)); + } + } +} + +void Hooked::startFalling(Player* player) +{ + player->setState(new Falling(player)); +} + +void Hooked::hitGround(Player* player) +{ + player->setState(new Idle(player)); +} + + +/* Sitting */ +Sitting::Sitting(Player* player) : PlayerState() +{ + mAnimation = Animation(); + mAnimation.setAnimationSpeed(4); + + mAnimation.addTextureRect({168, 340, 18, 30}); + mAnimation.addTextureRect({219, 340, 18, 30}); + mAnimation.addTextureRect({267, 340, 18, 30}); + + player->mCollisionRect = player->mScaleFactor * sf::FloatRect(-10, -10, 20, 25); + cout << "Creating Sitting state" << endl; +} + +void Sitting::update(Player* player, float dt) +{ + player->mVelocity = {0, 0}; + mAnimation.update(dt); +} + +void Sitting::handleEvents(Player* player, const sf::Event& event) +{ + if (event.type == sf::Event::KeyPressed) + { + if (event.key.code == sf::Keyboard::LShift) + { + player->mVelocity.x = player->mIsFacedRight ? -100 : 100; + player->setState(new Idle(player)); + } + } +} + +void Sitting::hook(Player* player) {} + +void Sitting::startFalling(Player* player) {} + +void Sitting::hitGround(Player* player) {} + + + +/* FirstAttack */ +FirstAttack::FirstAttack(Player* player) : PlayerState() +{ + if (player->mVelocity.x > 0) + player->mVelocity.x = kSlidingVelocity; + else if (player->mVelocity.x < 0) + player->mVelocity.x = -kSlidingVelocity; + + mAnimation = Animation(Animation::AnimationType::OneIteration); + + mAnimation.setAnimationSpeed(6); + + mAnimation.addTextureRect({56, 222, 30, 38}); + mAnimation.addTextureRect({114, 222, 36, 38}); + mAnimation.addTextureRect({164, 222, 28, 38}); + mAnimation.addTextureRect({214, 222, 20, 38}); + mAnimation.addTextureRect({264, 222, 20, 38}); + + player->mCollisionRect = player->mScaleFactor * sf::FloatRect(-20, -20, 36, 38); + player->mIsAttacking = true; + cout << "Creating FirstAttack state" << endl; +} + +void FirstAttack::update(Player* player, float dt) +{ + mAnimation.update(dt); + player->mVelocity.x *= kVelocityDecay; + + if (mAnimation.hasEnded() && player->mIsColliding) + { + if (mContinue) + player->setState(new SecondAttack(player)); + else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { + player->mIsAttacking = false; + player->setState(new Running(player)); + } + else { + player->mIsAttacking = false; + player->setState(new Idle(player)); + } + return; +} +} + +void FirstAttack::handleEvents(Player* player, const sf::Event& event) +{ + if (event.type == sf::Event::KeyPressed) + { + if (event.key.code == sf::Keyboard::X) + { + mContinue = true; + } + } +} + +void FirstAttack::hook(Player* player) {} + +void FirstAttack::startFalling(Player* player) {} + +void FirstAttack::hitGround(Player* player) {} + +/* SecondAttack */ +SecondAttack::SecondAttack(Player* player) : PlayerState() +{ + if (player->mVelocity.x > 0) + player->mVelocity.x = kSlidingVelocity; + else if (player->mVelocity.x < 0) + player->mVelocity.x = -kSlidingVelocity; + + mAnimation = Animation(Animation::AnimationType::OneIteration); + + mAnimation.setAnimationSpeed(6); + + mAnimation.addTextureRect({12, 265, 20, 30}); + mAnimation.addTextureRect({58, 265, 40, 30}); + mAnimation.addTextureRect({102, 265, 32, 30}); + mAnimation.addTextureRect({152, 265, 32, 30}); + + player->mCollisionRect = player->mScaleFactor * sf::FloatRect(-20, -20, 36, 36); + cout << "Creating SecondAttack state" << endl; +} + +void SecondAttack::update(Player* player, float dt) +{ + mAnimation.update(dt); + player->mVelocity.x *= kVelocityDecay; + + if (mAnimation.hasEnded() && player->mIsColliding) + { + if (mContinue) + player->setState(new ThirdAttack(player)); + else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { + player->mIsAttacking = false; + player->setState(new Running(player)); + } + else { + player->mIsAttacking = false; + player->setState(new Idle(player)); + } + return; +} +} + +void SecondAttack::handleEvents(Player* player, const sf::Event& event) +{ + if (event.type == sf::Event::KeyPressed) + { + if (event.key.code == sf::Keyboard::X) + { + mContinue = true; + } + } +} + +void SecondAttack::hook(Player* player) {} + +void SecondAttack::startFalling(Player* player) {} + +void SecondAttack::hitGround(Player* player) {} + + +/* ThirdAttack */ +ThirdAttack::ThirdAttack(Player* player) : PlayerState() +{ + if (player->mVelocity.x > 0) + player->mVelocity.x = kSlidingVelocity; + else if (player->mVelocity.x < 0) + player->mVelocity.x = -kSlidingVelocity; + + mAnimation = Animation(Animation::AnimationType::OneIteration); + + mAnimation.setAnimationSpeed(6); + mAnimation.addTextureRect({152, 265, 32, 30}); + mAnimation.addTextureRect({215, 265, 23, 30}); + mAnimation.addTextureRect({266, 265, 22, 30}); + mAnimation.addTextureRect({298, 268, 52, 30}); + mAnimation.addTextureRect({1, 302, 32, 30}); + mAnimation.addTextureRect({47, 302, 36, 30}); + mAnimation.addTextureRect({96, 302, 38, 30}); + + + player->mCollisionRect = player->mScaleFactor * sf::FloatRect(-20, -20, 52, 36); + + cout << "Creating ThirdAttack state" << endl; +} + +void ThirdAttack::update(Player* player, float dt) +{ + mAnimation.update(dt); + player->mVelocity.x *= kVelocityDecay; + + if (mAnimation.hasEnded() && player->mIsColliding) + { + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { + player->mIsAttacking = false; + player->setState(new Running(player)); + } + else { + player->mIsAttacking = false; + player->setState(new Idle(player)); + } + return; +} +} + +void ThirdAttack::handleEvents(Player* player, const sf::Event& event) {} + +void ThirdAttack::hook(Player* player) {} + +void ThirdAttack::startFalling(Player* player) {} + +void ThirdAttack::hitGround(Player* player) {} diff --git a/term2/seminar03_state/src/player_states.hpp b/term2/seminar03_state/src/player_states.hpp new file mode 100644 index 0000000..36e9e23 --- /dev/null +++ b/term2/seminar03_state/src/player_states.hpp @@ -0,0 +1,178 @@ +#pragma once + +#include +#include +#include "animation.hpp" +#include "player.hpp" + +class Player; + +class PlayerState +{ +public: + PlayerState(); + + virtual void update(Player* player, float dt) = 0; + virtual void handleEvents(Player* player, const sf::Event& event) = 0; + virtual void hook(Player* player) = 0; + virtual void startFalling(Player* player) = 0; + virtual void hitGround(Player* player) = 0; + virtual ~PlayerState(); + + void updateSprite(sf::Sprite& sprite, bool isFacedRight, float scaleFactor); + +protected: + Animation mAnimation; + + float kJumpingVelocity = 1500; + + void jump(Player* player); +}; + + +class Idle : public PlayerState +{ +public: + Idle(Player* player); + + void update(Player* player, float dt); + void handleEvents(Player* player, const sf::Event& event); + void hook(Player* player); + void startFalling(Player* player); + void hitGround(Player* player); + +private: +}; + + +class Running : public PlayerState +{ +public: + Running(Player* player); + void update(Player* player, float dt); + void handleEvents(Player* player, const sf::Event& event); + void hook(Player* player); + void startFalling(Player* player); + void hitGround(Player* player); + +private: + float mRunningSpeed; +}; + + +class Sliding : public PlayerState +{ + +public: + + Sliding(Player* player); + void update(Player* player, float dt); + void handleEvents(Player* player, const sf::Event& event); + void hook(Player* player); + void startFalling(Player* player); + void hitGround(Player* player); + +private: + + float mCurrentTime; + static constexpr float kSlidingTime = 0.50; + static constexpr float kSlidingVelocity = 2000; + static constexpr float kVelocityDecay = 0.99; +}; + + +class Falling : public PlayerState +{ +public: + Falling(Player* player); + void update(Player* player, float dt); + void handleEvents(Player* player, const sf::Event& event); + void hook(Player* player); + void startFalling(Player* player); + void hitGround(Player* player); + +private: + bool hasJumped = false; + static constexpr float kHorizontalVelocity = 800; +}; + + + +class Hooked : public PlayerState +{ +public: + + static constexpr float kMaxHookOffset = 15; + + Hooked(Player* player); + void update(Player* player, float dt); + void handleEvents(Player* player, const sf::Event& event); + void hook(Player* player); + void startFalling(Player* player); + void hitGround(Player* player); +}; + + +class Sitting : public PlayerState +{ +public: + Sitting(Player* player); + void update(Player* player, float dt); + void handleEvents(Player* player, const sf::Event& event); + void hook(Player* player); + void startFalling(Player* player); + void hitGround(Player* player); +}; + +class FirstAttack : public PlayerState +{ +public: + FirstAttack(Player* player); + void update(Player* player, float dt); + void handleEvents(Player* player, const sf::Event& event); + void hook(Player* player); + void startFalling(Player* player); + void hitGround(Player* player); + +private: + + float mCurrentTime; + static constexpr float kSlidingVelocity = 2000; + static constexpr float kVelocityDecay = 0.99; + bool mContinue = false; +}; + +class SecondAttack : public PlayerState +{ +public: + SecondAttack(Player* player); + void update(Player* player, float dt); + void handleEvents(Player* player, const sf::Event& event); + void hook(Player* player); + void startFalling(Player* player); + void hitGround(Player* player); + +private: + + float mCurrentTime; + static constexpr float kSlidingVelocity = 2000; + static constexpr float kVelocityDecay = 0.99; + bool mContinue = false; +}; + +class ThirdAttack : public PlayerState +{ +public: + ThirdAttack(Player* player); + void update(Player* player, float dt); + void handleEvents(Player* player, const sf::Event& event); + void hook(Player* player); + void startFalling(Player* player); + void hitGround(Player* player); + +private: + + float mCurrentTime; + static constexpr float kSlidingVelocity = 2000; + static constexpr float kVelocityDecay = 0.99; +}; diff --git a/term2/seminar03_state/src/world.hpp b/term2/seminar03_state/src/world.hpp new file mode 100644 index 0000000..06267b4 --- /dev/null +++ b/term2/seminar03_state/src/world.hpp @@ -0,0 +1,76 @@ +#pragma once + +#include +#include +#include +#include +#include "player.hpp" +#include "player_states.hpp" +#include "block.hpp" + +class World +{ +public: + + void addBlock(Block block) + { + mBlocks.push_back(block); + } + + void setView() + { + sf::Vector2f playerCenter = mPlayer.getCenter(); + float mViewRatio = 0.6; + if (playerCenter.x > mView.getCenter().x + mViewRatio * mView.getSize().x / 2) + mView.move({playerCenter.x - mView.getCenter().x - mViewRatio * mView.getSize().x / 2, 0}); + + else if (playerCenter.x < mView.getCenter().x - mViewRatio * mView.getSize().x / 2) + mView.move({playerCenter.x - mView.getCenter().x + mViewRatio * mView.getSize().x / 2, 0}); + + + if (playerCenter.y > mView.getCenter().y + mViewRatio * mView.getSize().y / 2) + mView.move({0, playerCenter.y - mView.getCenter().y - mViewRatio * mView.getSize().y / 2}); + + else if (playerCenter.y < mView.getCenter().y - mViewRatio * mView.getSize().y / 2) + mView.move({0, playerCenter.y - mView.getCenter().y+ mViewRatio * mView.getSize().y / 2}); + + } + + void update(float dt) + { + setView(); + mPlayer.applyVelocity({0, mGravity * dt}); + mPlayer.update(dt); + mPlayer.handleAllCollisions(mBlocks); + } + + void draw(sf::RenderWindow& window) + { + static sf::RectangleShape blockShape; + blockShape.setFillColor(sf::Color(58, 69, 55)); + + window.setView(mView); + + for (const Block& b : mBlocks) + { + blockShape.setPosition(b.mBlock.left, b.mBlock.top); + blockShape.setSize({b.mBlock.width, b.mBlock.height}); + window.draw(blockShape); + } + mPlayer.draw(window); + } + + void handleEvents(const sf::Event& event) + { + mPlayer.handleEvents(event); + } + + + +private: + std::vector mBlocks {}; + Player mPlayer {{400, 400}}; + float mGravity {3600}; + + sf::View mView {sf::FloatRect(0, 0, 1200, 900)}; +};