-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
119 lines (105 loc) · 4.64 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
$(document).ready(function() {
const hexMap = $('#hex-map');
const mapContainer = $('#map-container');
const infoPanel = $('#info-panel');
const hexRadius = 50; // Radio del hexágono
const hexWidth = Math.sqrt(3) * hexRadius; // Ancho del hexágono
const hexHeight = 2 * hexRadius; // Altura del hexágono
const horizontalSpacing = 0; // Espacio horizontal entre hexágonos
let offsetX = 0; // Desplazamiento en X
let offsetY = 0; // Desplazamiento en Y
let isDragging = false;
let lastMouseX, lastMouseY;
let scale = 1; // Inicializa la escala
// Crear una cuadrícula de hexágonos
for (let row = -10; row < 10; row++) {
for (let col = -13; col < 13; col++) {
const x = col * (hexWidth + horizontalSpacing) + (row % 2) * (hexWidth / 2);
const y = row * (hexHeight * 0.47); // El 0.75 es el factor de separación vertical
const hexIndex = `${row},${col}`; // Crear un índice para el hexágono
// Generar aleatoriamente agua (azul) o tierra (verde)
const isWater = Math.random() < 0.2; // 20% probabilidad de ser agua (azul)
// Crear el hexágono y asignar clase según si es agua o tierra
const hex = $('<div class="hex"></div>')
.addClass(isWater ? 'water' : 'land') // Asignar la clase 'water' o 'land'
.css({
left: `${x}px`,
top: `${y}px`
});
// Agregar un número dentro del hexágono
hex.append(`<span class="hex-number">${hexIndex}</span>`);
// Manejar el clic en el hexágono para seleccionar/deseleccionar
hex.on('click', function() {
if ($(this).hasClass('selected')) {
// Si ya está seleccionado, deseleccionarlo y ocultar el panel
$(this).removeClass('selected');
infoPanel.removeClass('show');
mapContainer.removeClass('partial-width').addClass('full-width');
} else {
// Deseleccionar cualquier hexágono seleccionado previamente
$('.hex.selected').removeClass('selected');
// Seleccionar el hexágono actual
$(this).addClass('selected');
// Actualizar el panel de información con las coordenadas del hexágono seleccionado y mostrarlo
$('#hex-coordinates').text(`Coordinates: ${hexIndex}`);
infoPanel.addClass('show');
mapContainer.removeClass('full-width').addClass('partial-width');
}
});
hexMap.append(hex);
}
}
// Manejar el desplazamiento con el mouse
mapContainer.on('mousedown', function(e) {
isDragging = true;
lastMouseX = e.pageX;
lastMouseY = e.pageY;
});
$(document).on('mousemove', function(e) {
if (isDragging) {
const deltaX = (e.pageX - lastMouseX) / scale; // Divide por la escala
const deltaY = (e.pageY - lastMouseY) / scale; // Divide por la escala
offsetX += deltaX;
offsetY += deltaY;
hexMap.css({
transform: `translate(${offsetX}px, ${offsetY}px) scale(${scale})`
});
lastMouseX = e.pageX;
lastMouseY = e.pageY;
}
});
$(document).on('mouseup', function() {
isDragging = false;
});
// Manejar el zoom
$(document).on('wheel', function(e) {
e.preventDefault();
scale += e.originalEvent.deltaY > 0 ? -0.1 : 0.1; // Ajustar la escala
scale = Math.min(Math.max(.125, scale), 4); // Limitar la escala entre 0.125 y 4
hexMap.css({
transform: `translate(${offsetX}px, ${offsetY}px) scale(${scale})`
});
});
// Manejar el movimiento del mapa con las teclas WASD
$(document).on('keydown', function(e) {
const moveStep = 50; // Cuánto mover el mapa por cada tecla presionada
switch (e.key) {
case 'w': // Mover hacia arriba
offsetY += moveStep;
break;
case 's': // Mover hacia abajo
offsetY -= moveStep;
break;
case 'a': // Mover hacia la izquierda
offsetX += moveStep;
break;
case 'd': // Mover hacia la derecha
offsetX -= moveStep;
break;
}
// Actualizar la posición del mapa
hexMap.css({
transform: `translate(${offsetX}px, ${offsetY}px) scale(${scale})`
});
});
});