Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 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);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement