X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=hexmap.h;fp=hexmap.h;h=0000000000000000000000000000000000000000;hb=8ca2b8a06b00066a20f744a61c9bcdd65949a344;hp=50665d058f87c05faaa42e11838688892485d86c;hpb=5c48a06bc8649958e69013c53e925b83398ebc74;p=hexagon diff --git a/hexmap.h b/hexmap.h deleted file mode 100644 index 50665d0..0000000 --- a/hexmap.h +++ /dev/null @@ -1,145 +0,0 @@ -#ifndef HEXLIB_H_ -#define HEXLIB_H_ 1 - -/* - * this library implements a generic library for hexgrids for games. - * it avoids display issues, other than some general provisions - * for data - * - * This file is written by Nathan Wagner and dedicated to the - * public domain. - */ - -/* max size for cantor numbers is 16383, or 32767 if non-negative, - * assuming a 32 bit int - */ - -/* map from cartesian coordinates to hex coords */ -/* cartesian coordinates are positive Y up, hex coords - * are positive Y down. You may need to pass in the - * negative of your Y coordinate - * - * width is the distance from one hexside to the opposite - * hexside. i and j are the cartesian coordinates of the hex - * the x,y point falls in. If a point happens to fall exactly - * on a hex boundary, the result will depend on how the machine - * does the floating point math, but should be consistent. - */ -int HL_hexbin(double width, double x, double y, int *i, int *j); - -/* generate the cantor mapping of a hexes x,y coordinate. - * See http://en.wikipedia.org/wiki/Cantor_pairing_function. - * We modify the basic formula to support negative coordinates - * - * The cantor mapping is *not* a contiguous mapping, as it maps - * onto a triangle, so you can't use the cantor mapping as - * an index into an array. Or, you can, but the array - * will be (I think) twice as large as it needs to be - * - * See also http://mathworld.wolfram.com/PairingFunction.html - * for a reference to a square mapping by Stein that doesn't - * have this problem, at least for square maps. - * - * We use the cantor mapping so that the generated integer - * is independent of the size of the grid. - */ - -/* Cartesian functions */ -int HL_cantor_xy(int x, int y); -int HL_cantor_xyp(int *xy); -int HL_cantor_x(int cantor); -int HL_cantor_y(int cantor); - -/* Isometric functions */ -int HL_cantor_ijk(int i, int j, int k); -int HL_cantor_ijkp(int *ijk); -int HL_cantor_i(int cantor); -int HL_cantor_k(int cantor); -int HL_cantor_j(int cantor); - -int HL_cantor_bin(double x, double y); - -/* A general decode function */ -int HL_cantor_decode(int can, int *x, int *y, int *i, int *j, int *k); -int HL_cantor_arrays(int can, int *xy, int *ijk); - -/* - * layout assistance functions - * - * HL_center_x(int cantor) returns the cartesian X coordinate - * of a given hex, assuming a width of 1.0. Scaling can - * be done by the caller. - * - * Similarly for HL_center_y() and HL_hexcenter() - */ -double HL_center_x(int cantor); -double HL_center_y(int cantor); -int HL_hexcenter(int cantor, double *x, double *y); - -/* how far is it on the hex grid */ -int HL_distance(int from_cantor, int to_cantor); - -/* returns 0 for <0 or >5 */ -int HL_adjacent_hex(int start, int dir); - -/* module direction */ -int HL_adjhex(int start, int dir); -int HL_hexes_at_range(int hex, int range, int *list, int size); -int HL_hexes_within_range(int hex, int range, int *list, int size); - -typedef double (*HL_costfunc)(int start, int finish); - -/* writes up to len cantors to path. returns last - * value written - * perhaps it should return the last value not written, if the - * path is incomplete? - * either way, it can then be used in a loop - */ -int HL_path(int start, int end, int *path, int len); - -int HL_map_bounds_ok(int xdim, int ydim); -int HL_map_max_dimension(void); - -/* - * Plotting support - */ -void HL_trianglefan(int cantor, double *); - -struct HL_hex { - int x,y; /* hmm. would be nice to be able to just point to a generic */ -}; - -/* - * Pathfinding - */ - -struct HL_astar_hex { - int hex; - double f, g, h; - struct HL_astar_hex *parent; - int open; - struct HL_astar_hex *next; - struct HL_astar_hex *prev; -}; - -struct HL_astar { - int start, goal; - int pathlen; - double (*metric)(int,int); - double (*heuristic)(int,int); - int (*neighbor)(int,int); - int nodes, allocated; - struct HL_astar_hex *sets; - struct HL_astar_hex *open; - struct HL_astar_hex *closed; - struct HL_astar_hex *from, *to; - int known, index; - int error, malloced; -}; - -int HL_findpath(struct HL_astar *s, int loops); -void HL_astar_free(struct HL_astar *s); -struct HL_astar *HL_astar_clear(struct HL_astar *s); -struct HL_astar *HL_astar_init(struct HL_astar *s); - -#endif