/* * * gPlanarity: * The geeky little puzzle game with a big noodly crunch! * * gPlanarity copyright (C) 2005 Monty * Original Flash game by John Tantalo * Original game concept by Mary Radcliffe * * gPlanarity is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * gPlanarity is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Postfish; see the file COPYING. If not, write to the * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * * */ #define V_RADIUS_SQ (V_RADIUS*V_RADIUS) #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) typedef struct vertex { int num; int x; int y; int orig_x; int orig_y; int active; int selected_volatile; int selected; int grabbed; int attached_to_grabbed; int fading; struct edge_list *edges; struct vertex *next; } vertex; typedef struct intersection { struct intersection *prev; struct intersection *next; struct intersection *paired; double x; double y; } intersection; typedef struct edge{ vertex *A; vertex *B; int active; intersection i; // correct, not a pointer struct edge *next; } edge; typedef struct edge_list{ edge *edge; struct edge_list *next; } edge_list; typedef struct graph { vertex *verticies; int vertex_num; edge *edges; long active_intersections; int num_edges; int num_edges_active; int width; int height; int orig_width; int orig_height; // scoring related metadata long original_intersections; float intersection_mult; int objective; int objective_lessthan; float objective_mult; } graph; typedef struct graphmeta{ int num; char *id; char *desc; void (*gen)(graph *,int arg); int gen_arg; int unlock_plus; } graphmeta; #include extern vertex *new_board(graph *g, int num_v); extern vertex *find_vertex(graph *g, int x, int y); extern edge_list *add_edge_to_list(edge_list *l, edge *e); extern void release_edge_list(edge_list *el); extern edge *new_edge(vertex *A, vertex *B); extern void release_edge_list(edge_list *el); extern void insert_edge(graph *g, edge *e); extern int intersectsV(vertex *L1, vertex *L2, vertex *M1, vertex *M2, double *xo, double *yo); extern int intersects(int L1x, int L1y, int L2x, int L2y, int M1x, int M1y, int M2x, int M2y, double *xo, double *yo); extern void move_vertex(graph *g, vertex *v, int x, int y); extern void grab_vertex(graph *g, vertex *v); extern void grab_selected(graph *g); extern void ungrab_vertex(graph *g,vertex *v); extern void ungrab_verticies(graph *g); extern void activate_vertex(graph *g, vertex *v); extern void deactivate_vertex(graph *g, vertex *v); extern void select_verticies(graph *g, int x1, int y1, int x2, int y2); extern void deselect_verticies(graph *g); extern void move_selected_verticies(graph *g, int dx, int dy); extern void scale_verticies(graph *g, float amount); extern void randomize_verticies(graph *g); extern edge *add_edge(graph *g,vertex *A, vertex *B); extern int exists_edge(vertex *a, vertex *b); extern int num_selected_verticies(graph *g); extern void check_verticies(graph *g); extern void impress_location(graph *g); extern void commit_volatile_selection(graph *g); extern void activate_verticies(graph *g); extern int graph_write(graph *g, FILE *f); extern int graph_read(graph *g, FILE *f); extern void graph_release(graph *g); extern int graphscore_get_score(graph *g); extern int graphscore_get_raw_score(graph *g); extern int graphscore_get_multiplier_percent(graph *g); extern int graphscore_get_bonus(graph *g); extern char *graphscore_objective_string(graph *g); extern void graph_resize(graph *g, int width, int height);