// Hexagon Manipulation
// Macros
// Manupulate hex_size to chance the size
#macro hex_size 0.5
#macro hex_side 16*hex_size
#macro hex_radius_type_normal 1
#macro hex_radius_type_offset 2
#macro hex_radius_type_extra 3
#macro hex_apothem 13.8564*hex_size
// This will result in a point from the x and y the determined distance and angle
function Vector2(vx, vy, vdist, vdir) constructor {
x = vx+lengthdir_x(vdist, vdir);
y = vy+lengthdir_y(vdist, vdir);
}
// This is to draw a single hexagon
// You can change whatever it is inside this and it will be replicated to every hexagon in the grid
function draw_hex(xHex, yHex) {
// Draw the six lines of the hexagon
for (var sp = 0 ; sp < 6 ; sp++) {
var s1a = sp*60;
var s2a = (sp+1)*60;
// This is to get the points of the side of the line to be drawed
var s1 = new Vector2(xHex, yHex, hex_side, s1a);
var s2 = new Vector2(xHex, yHex, hex_side, s2a);
// Draw a single line of the hexagon
draw_line_width(s1.x, s1.y, s2.x, s2.y, 1);
// Honestly I just put this just in case
delete s1;
delete s2;
}
}
// This is to draw a single hexagon with two lines depending on the
// magnitude(number of hex of the lines) and the angle (needs to be (angle mod 60 == 0) to work)
function draw_hex_vertex(xHex, yHex, magnitude, angle) {
magnitude = is_undefined(magnitude) ? 0 : abs(magnitude);
angle = is_undefined(angle) ? 0 : abs(angle);
var cc = draw_get_color();
draw_set_color(c_purple);
var hexM = 1;
// Draw the number of hexagons in the desired angle
repeat(magnitude) {
var hexDist = (hex_apothem*2*(hexM+0));
var hexVector1 = new Vector2(xHex, yHex, hexDist, angle-30);
var hexVector2 = new Vector2(xHex, yHex, hexDist, angle+30);
draw_hex(hexVector1.x, hexVector1.y);
draw_hex(hexVector2.x, hexVector2.y);
// Honestly I just put this just in case
delete hexVector1;
delete hexVector2;
hexM++;
}
// Draw the central hexagon of the vertex
draw_set_color(cc);
draw_hex(xHex, yHex);
}
// Draw a central hexagon surrounded by a number of hexagons delimited by the radius
function draw_hex_radius(xHex, yHex, radius) {
radius = is_undefined(radius) ? 0 : abs(radius);
if (radius > 0) {
for (var hr = 0 ; hr < radius ; hr++) {
var hexTotal = (hr+1)*6
for (var sp = 0 ; sp < hexTotal ; sp++) {
var sa = (sp*(360 div clamp(hexTotal, 6, 12)))+90;
// Determine the type of hexagon
var modRType = hex_radius_type_extra;
if (((sa-90) mod 60) == 0) {
modRType = hex_radius_type_normal;
} else if ((sa mod 60) == 0) {
modRType = hex_radius_type_offset;
}
// Draw the hexagon if not extra (purple ones)
if (modRType != hex_radius_type_extra) {
if (modRType == hex_radius_type_normal) {
var hexDist = (hex_apothem*2*(hr+1));
var hexVector = new Vector2(xHex, yHex, hexDist, sa);
// Draw the hexagon if normal (green or red)
var cc = ((hr mod 2) == 0) ? c_green : c_red;
draw_set_color(cc);
draw_hex(hexVector.x, hexVector.y);
} else if ((hr-1) < floor(radius/2)) {
var hexDist = (hex_side*3*(hr));
var hexVector = new Vector2(xHex, yHex, hexDist, sa);
// Draw the hexagon if offset (yellow)
draw_set_color(c_yellow);
draw_hex_vertex(hexVector.x, hexVector.y, radius-(2*(hr)), sa);
}
// Honestly I just put this just in case
delete hexVector;
}
}
}
}
// Draw central hexagon
draw_set_color(c_ltgrey);
draw_hex(xHex, yHex);
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎