This repository has been archived on 2025-01-05. You can view files and clone it, but cannot push or open issues or pull requests.
2021-01-30 09:44:49 +01:00

120 lines
2.8 KiB
GDScript

extends Spatial
var _is_free
var _x
var _y
var _neighbours
var _map
func _ready():
_is_free = true
_map = get_node("/root/Game_manager/Map")
var material = SpatialMaterial.new()
material.albedo_color = Color(1, 0.41, 0.71)
$Cylinder.set_surface_material(0, material)
func set_coordinates(x, y):
_x = x
_y = y
func _on_Area_input_event(camera, event, click_position, click_normal, shape_idx):
if event is InputEventMouseButton:
if event.button_index == BUTTON_LEFT and event.pressed:
get_node("/root/Game_manager/Mouse_controller").left_click_on_hex(self)
if event.button_index == BUTTON_RIGHT and event.pressed:
get_node("/root/Game_manager/Mouse_controller").right_click_on_hex(self)
func set_color(color_id):
var material = SpatialMaterial.new()
if color_id == 0:
material.albedo_color = Color(0, 0, 0)
if color_id == 1:
material.albedo_color = Color(0, 0, 1)
if color_id == 2:
material.albedo_color = Color(0, 1, 0)
if color_id == 3:
material.albedo_color = Color(0, 1, 1)
if color_id == 4:
material.albedo_color = Color(1, 0, 0)
if color_id == 5:
material.albedo_color = Color(1, 0, 1)
if color_id == 6:
material.albedo_color = Color(1, 1, 0)
if color_id == 7:
material.albedo_color = Color(1, 1, 1)
$Cylinder.set_surface_material(0, material)
func occupy_hex():
_is_free = false
func is_free():
return _is_free
func is_any_neighbour_free():
var is_free = false
for neighbour in get_neighbours():
if neighbour.is_free():
is_free = true
continue
return is_free
func get_neighbours():
if _neighbours == null:
_neighbours = []
# left neighbour
if _x > 0:
_neighbours.append(_map.get_hex_at(_x - 1, _y))
# odd-row, starting below
##########
if _y % 2 == 0:
# top left neighbour if(y%2)
if _x > 0 && _y < _map._map_height - 1:
_neighbours.append(_map.get_hex_at(_x - 1, _y + 1))
# top right neighbour if(y%2)
if _y < _map._map_height - 1:
_neighbours.append(_map.get_hex_at(_x, _y + 1))
# bottom right neighbour if(y%2)
if _y > 0:
_neighbours.append(_map.get_hex_at(_x, _y - 1));
# bottom left neighbour if(y%2)
if _x > 0 && _y > 0:
_neighbours.append(_map.get_hex_at(_x - 1, _y - 1));
##########
else:
# top left neighbour
if _y < _map._map_height - 1:
_neighbours.append(_map.get_hex_at(_x, _y + 1));
# top right neighbour
if _x < _map._map_width - 1 && _y < _map._map_height - 1:
_neighbours.append(_map.get_hex_at(_x + 1, _y + 1))
# bottom right neighbour
if _x < _map._map_width - 1 && _y > 0:
_neighbours.append(_map.get_hex_at(_x + 1, _y - 1))
# bottom left neighbour
if _y > 0:
_neighbours.append(_map.get_hex_at(_x, _y - 1))
##########
## right neighbour
if _x < _map._map_width - 1:
_neighbours.append(_map.get_hex_at(_x + 1, _y))
return _neighbours