78 lines
2.3 KiB
GDScript
Executable file
78 lines
2.3 KiB
GDScript
Executable file
extends Node3D
|
|
|
|
class_name Game
|
|
|
|
const HIGHLIGHT = preload("uid://d3ognkvbqsh4u")
|
|
var selected_piece : Piece
|
|
|
|
const MOVEMENT_HIGHLIGHTER = preload("uid://cnbgugaxpa3g5")
|
|
const ATTACK_HIGHLIGHTER = preload("uid://c772javfi1vol")
|
|
|
|
var possible_positions : Array[Vector2i] = []
|
|
# Called when the node enters the scene tree for the first time.
|
|
|
|
func _ready() -> void:
|
|
#$SuperPawn2.move_to(Vector2(8,8))
|
|
#$SuperPawn.move_to(Vector2(0,0))
|
|
for child in get_node("Board").get_children():
|
|
child.is_clicked.connect(movement)
|
|
pass # Replace with function body.
|
|
func movement(coord:Vector2i):
|
|
if selected_piece:
|
|
if coord in possible_positions:
|
|
selected_piece.move_to(coord)
|
|
deselect()
|
|
|
|
else:
|
|
select_piece(coord)
|
|
|
|
func get_piece_at(coord) -> Piece:
|
|
for piece in get_node("Pieces").get_children():
|
|
var piece_coord = Vector2i(piece.position.x / 2, piece.position.z / 2)
|
|
if piece_coord == coord:
|
|
return piece
|
|
return null
|
|
|
|
func select_piece(coord:Vector2i):
|
|
var pos = Vector3(coord.x, 0, coord.y)
|
|
for child in $Pieces.get_children():
|
|
if child.is_in_group("Pieces"):
|
|
if child.position / 2 == pos:
|
|
var piece : Piece = child
|
|
selected_piece = piece
|
|
piece.mesh_instance_3d.material_overlay = HIGHLIGHT
|
|
piece.possible_movements = []
|
|
for scr in piece.piece_res.rules:
|
|
scr.select(piece,self)
|
|
#piece.piece_res.moverules.selectRule(piece, self)
|
|
|
|
for move in piece.possible_movements:
|
|
var highlighter : Node3D
|
|
var possible_pos = Vector2i(piece.position.x / 2 + move.x, piece.position.z / 2 + move.y)
|
|
var other_piece = get_piece_at(possible_pos)
|
|
if possible_pos not in get_node("Board").all_tiles:
|
|
continue
|
|
if other_piece and other_piece.is_in_group("Enemy"):
|
|
highlighter = ATTACK_HIGHLIGHTER.instantiate()
|
|
else:
|
|
highlighter = MOVEMENT_HIGHLIGHTER.instantiate()
|
|
highlighter.position.x = possible_pos.x * 2
|
|
highlighter.position.z = possible_pos.y * 2
|
|
possible_positions.append(possible_pos)
|
|
add_child(highlighter)
|
|
break
|
|
else:
|
|
deselect()
|
|
pass
|
|
|
|
func deselect():
|
|
if selected_piece:
|
|
selected_piece.mesh_instance_3d.material_overlay = null
|
|
selected_piece = null
|
|
possible_positions = []
|
|
for child in get_children():
|
|
if child.is_in_group("Highlighter"):
|
|
child.queue_free()
|
|
|
|
func _process(delta: float) -> void:
|
|
pass
|