Refactored to use Vector4i. Added Spider/Grasshopper. TODO: Ant

This commit is contained in:
Sch1nken 2024-03-14 19:30:18 +01:00
parent ff4aa93845
commit 11f8a71f52
19 changed files with 482 additions and 326 deletions

View file

@ -1,8 +1,10 @@
extends Area3D
class_name InsectTile
var map_reference: HexGrid
var coordinates: HexGrid.CubeCoordinates
var coordinates: Vector4i
var layer: int = 0
@export var is_black: bool = false
@ -10,9 +12,14 @@ var layer: int = 0
@onready var hexagon_small = $HexagonSmall
var hat: InsectTile = null
var build_in_progress: bool = false
var move_in_progress: bool = false
var deactivated: bool = false
var hovered: bool = false
var selected: bool = false
@ -35,16 +42,17 @@ func _ready() -> void:
mat = hexagon_small.get_surface_override_material(0)
GameEvents.insect_tile_selection_request_failed.connect(_on_insect_tile_request_failed)
GameEvents.insect_tile_selection_request_successful.connect(_on_insect_tile_selection_request_sucessful)
mat.next_pass = hover_shader.duplicate()
GameEvents.insect_selected.connect(_on_insect_selected)
GameEvents.insect_placed.connect(_on_insect_placed)
GameEvents.insect_placement_cancelled.connect(_on_insect_placement_cancelled)
GameEvents.insect_placement_cancelled.connect(_on_insect_placement_cancelled, CONNECT_DEFERRED)
GameEvents.insect_tile_selected.connect(_on_insect_tile_selected)
GameEvents.insect_tile_deselected.connect(_on_insect_tile_deselected)
GameEvents.insect_tile_moved.connect(_on_insect_tile_moved)
func _on_insect_tile_moved(tile: InsectTile, to: HexGrid.CubeCoordinates) -> void:
func _on_insect_tile_moved(tile: InsectTile, to: Vector4i) -> void:
move_in_progress = false
selected = false
@ -62,82 +70,78 @@ func _on_insect_tile_selected(tile: InsectTile) -> void:
if tile == self:
selected = true
func _on_insect_placed(resource: TileResource, is_black: bool, pos: HexGrid.CubeCoordinates) -> void:
func _on_insect_placed(resource: TileResource, is_black: bool, pos: Vector4i) -> void:
build_in_progress = false
func _on_insect_placement_cancelled() -> void:
build_in_progress = false
func _on_insect_selected(resource: TileResource, is_black: bool) -> void:
func _on_insect_selected(button: InsectButton, is_black: bool) -> void:
build_in_progress = true
func _on_insect_tile_selection_request_sucessful(tile: InsectTile) -> void:
if tile != self:
return
GameEvents.insect_tile_selected.emit(self)
func _tween_shader(value: Color) -> void:
var shader: ShaderMaterial = mat.next_pass
shader.set_shader_parameter("albedo", value)
pass
func _shader_done() -> void:
tweening = false
if hovered:
mat.next_pass = hover_shader
else:
mat.next_pass = null
func _process(delta):
if Input.is_action_just_pressed("place_tile"):
if hovered and not (build_in_progress or move_in_progress):
# check if is movable, either with direct reference to the map, or by ping-ponging a signal
# request_selection
# selection_reguest_successfull
# selection_request_failed
GameEvents.insect_tile_request_selection.emit(self)
func _on_insect_tile_request_failed(tile) -> void:
move_in_progress = false
selected = false
if tile != self:
return
if deactivated:
return
hovered = false
if not hovered:
return
## Check with map if we can be placed
#if not map_reference.can_move(self):
#return
#
#
#if resource.movement_behaviour == null:
## TODO: Play fail animation/tween
#return
#
#var spaces = resource.movement_behaviour.get_available_spaces(coordinates, map_reference)
#
#if spaces.is_empty():
##GameEvents.insect_tile_selection_request_failed.emit(tile)
#return
GameEvents.insect_tile_selected.emit(self)
func hover() -> void:
#if GameData.is_player_black != is_black:
#return
# siomulate a failed selection request
mat.next_pass = SELECTION_FAILED_MAT
tweening = true
if tween != null:
tween.kill()
tween = get_tree().create_tween()
tween.tween_method(_tween_shader, Color.BLACK, Color.DARK_RED, 0.1).set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_EXPO)
tween.tween_method(_tween_shader, Color.DARK_RED, Color.BLACK, 0.35).set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_EXPO)
tween.tween_callback(_shader_done)
#tween.tween_property(self, "position", Vector3(0, 0, 5), 0.5).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_SPRING)
tween.tween_method(tween_hover_shader, Color(0, 0, 0, 0), Color(0, 0, 0, 1), 0.1).set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_EXPO)
func tween_hover_shader(color: Color) -> void:
if mat.next_pass != null:
mat.next_pass.set_shader_parameter("albedo", color)
mat.next_pass.set_shader_parameter("emission_color", color)
GameEvents.insect_tile_deselected.emit(self)
func unhover() -> void:
#if GameData.is_player_black != is_black:
#return
if tween != null:
tween.kill()
tween = get_tree().create_tween()
#tween.tween_property(hex, "position", Vector2(0, -16), 0.1).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_SPRING)
tween.tween_method(tween_hover_shader, Color(0, 0, 0, 1), Color(0, 0, 0, 0), 0.25).set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_EXPO)
func _on_mouse_entered():
if build_in_progress or move_in_progress:
return
hovered = true
if not deactivated:
hover()
if GameData.is_player_black == is_black:
if tween == null:
mat.next_pass = hover_shader
hovered = true
func _on_mouse_exited():
if selected:
return
hovered = false
if tween == null:
mat.next_pass = null
if not selected:
unhover()