Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _USE_MATH_DEFINES
- #include <allegro5/allegro.h>
- #include <allegro5/allegro_primitives.h>
- #include <math.h>
- void matrix_2D_handler(float _angle, float _Matrix_2D[][2], float &_x_pos, float &_y_pos)
- {
- float New_X = 0.0f;
- float New_Y = 0.0f;
- // X axis
- _Matrix_2D[0][0] = cosf(_angle);
- _Matrix_2D[0][1] = -sinf(_angle);
- New_X = (_Matrix_2D[0][0] * _x_pos) + (_Matrix_2D[0][1] * _y_pos);
- // Y axis
- _Matrix_2D[1][0] = sinf(_angle);
- _Matrix_2D[1][1] = cos(_angle);
- New_Y = (_Matrix_2D[1][0] * _x_pos) + (_Matrix_2D[1][1] * _y_pos);
- _x_pos = New_X;
- _y_pos = New_Y;
- }
- // Needs to be radians.
- float deg_to_rad(float deg)
- {
- return deg * ((float)M_PI / 180.0f);
- }
- int main(int argc, char *argv[])
- {
- int SCREEN_X = 800;
- int SCREEN_Y = 600;
- float FPS = 60.0f;
- float degree_rotate_angle = 0.5f;
- bool loop = true;
- bool draw = false;
- float x_pos = 175.0f;
- float y_pos = 25.0f;
- float Matrix_2D[2][2] = {{0.0f,0.0f}, {0.0f,0.0f}};
- ALLEGRO_DISPLAY *display = NULL;
- ALLEGRO_EVENT_QUEUE *event_queue = NULL;
- ALLEGRO_TIMER *timer = NULL;
- al_init();
- al_init_primitives_addon();
- //al_set_new_display_option(ALLEGRO_VSYNC, 1, ALLEGRO_SUGGEST);
- display = al_create_display(SCREEN_X, SCREEN_Y);
- event_queue = al_create_event_queue();
- timer = al_create_timer(1.0f / FPS);
- al_register_event_source(event_queue, al_get_display_event_source(display));
- al_register_event_source(event_queue, al_get_timer_event_source(timer));
- al_start_timer(timer);
- while(loop)
- {
- ALLEGRO_EVENT event;
- al_wait_for_event(event_queue, &event);
- switch(event.type)
- {
- case ALLEGRO_EVENT_DISPLAY_CLOSE:
- loop = false;
- break;
- case ALLEGRO_EVENT_TIMER:
- draw = true;
- break;
- default:
- break;
- }
- if(draw == true)
- {
- draw = false;
- al_clear_to_color(al_map_rgb(0,0,0));
- matrix_2D_handler(deg_to_rad(degree_rotate_angle), Matrix_2D, x_pos, y_pos);
- al_draw_circle(x_pos + ((float)SCREEN_X / 2.0f), y_pos + ((float)SCREEN_Y / 2.0f), 10.0f, al_map_rgb(200,0,50), 0.0f);
- al_flip_display();
- }
- }
- // Clean up...
- al_stop_timer(timer);
- al_destroy_timer(timer);
- al_flush_event_queue(event_queue);
- al_destroy_event_queue(event_queue);
- al_destroy_display(display);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement