Simple implementation of polygons, you can create them in the init and draw them

This commit is contained in:
Karma Riuk 2023-03-14 21:46:36 +01:00
parent 7a5bf13575
commit 9fd87b7f29
3 changed files with 61 additions and 2 deletions

View File

@ -11,7 +11,7 @@ CXXFLAGS=-Wall -g -O2 $(PROFILING_CFLAGS) $(GTK_CFLAGS)
LIBS=$(GTK_LIBS) -lm
PROGS=balls
OBJS=balls.o c_index.o game.o gravity.o spaceship.o main.o
OBJS=balls.o c_index.o game.o gravity.o spaceship.o main.o polygons.o
# dependencies (gcc -MM *.cc)
balls.o: balls.cc game.h balls.h vec2d.h gravity.h
@ -24,7 +24,7 @@ stats.o: stats.cc
.PHONY: run
run: balls
./balls
./balls n=0
.PHONY: all
all: $(PROGS)

31
polygons.cc Normal file
View File

@ -0,0 +1,31 @@
#include "polygons.h"
#include <iostream>
polygon* polygons = nullptr;
uint n_polygons = 1;
void polygons_init_state() {
polygons = new polygon[n_polygons];
polygon poly =
polygon{{400, 400}, 0, {{0, 0}, {0, 100}, {100, 100}, {100, 0}}};
polygons[0] = poly;
}
void polygon::draw(cairo_t* cr) const {
polygon& poly = polygons[0];
vec2d& center = poly.center;
cairo_set_source_rgb(cr, 1, 1, 1);
cairo_move_to(cr, center.x, center.y);
for (auto& point : poly.points)
cairo_line_to(cr, center.x + point.x, center.y + point.y);
cairo_line_to(cr, center.x, center.y);
cairo_stroke(cr);
}
void polygons_draw(cairo_t* cr) {
for (const polygon* p = polygons; p != polygons + n_polygons; ++p)
p->draw(cr);
}

28
polygons.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef POLYGONS_H_INCLUDED
#define POLYGONS_H_INCLUDED
// extern ball spaceship;
#include "vec2d.h"
#include <gtk/gtk.h>
#include <vector>
class polygon {
public:
vec2d center;
double angle;
std::vector<vec2d> points;
void draw(cairo_t* cr) const;
};
extern polygon* polygons;
extern uint n_polygons;
extern void polygons_init_state();
extern void polygons_update_state();
// extern void polygon_control (double dx, double dy);
extern void polygons_draw(cairo_t* cr);
#endif