Implemented Pillbug/Mosquito actions. Implemented pre-game settings. TODO: Game settings + bug testing
This commit is contained in:
parent
397082f966
commit
2343638749
15 changed files with 477 additions and 70 deletions
121
Tile/Tile.gd
121
Tile/Tile.gd
|
|
@ -2,44 +2,54 @@ extends Area3D
|
|||
class_name InsectTile
|
||||
|
||||
var map_reference: HexGrid
|
||||
|
||||
var is_blacks_turn: bool = false
|
||||
|
||||
var coordinates: Vector4i
|
||||
|
||||
@export var is_black: bool = false
|
||||
@export var resource: TileResource
|
||||
|
||||
var temporary_resource: TileResource = null
|
||||
|
||||
@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
|
||||
|
||||
|
||||
var hover_shader: ShaderMaterial = preload("res://InsectTiles/HoverShader.tres")
|
||||
#const SELECTION_FAILED_MAT: ShaderMaterial = preload("res://InsectTiles/SelectionFailedMat.tres")
|
||||
#const ACTION_SHADER = preload("res://InsectTiles/ActionShader.tres")
|
||||
|
||||
var mat: StandardMaterial3D
|
||||
|
||||
var tween: Tween
|
||||
|
||||
var tweening: bool = false
|
||||
|
||||
var selected_for_action: bool = false
|
||||
var action_callback: Callable = Callable()
|
||||
|
||||
|
||||
var can_be_selected: bool = false
|
||||
|
||||
var move_round_penalty: int = 0
|
||||
|
||||
func get_action_behaviour() -> ActionBehaviour:
|
||||
if temporary_resource == null:
|
||||
return resource.action_behaviour
|
||||
|
||||
return temporary_resource.action_behaviour
|
||||
|
||||
func get_movement_behaviour() -> MovementBehaviour:
|
||||
if temporary_resource == null:
|
||||
return resource.movement_behaviour
|
||||
|
||||
return temporary_resource.movement_behaviour
|
||||
|
||||
func get_resource() -> TileResource:
|
||||
if temporary_resource == null:
|
||||
return resource
|
||||
|
||||
return temporary_resource
|
||||
|
||||
func is_in_stack() -> bool:
|
||||
return hat != null or coordinates.w != 0
|
||||
|
||||
|
|
@ -84,20 +94,20 @@ func _ready() -> void:
|
|||
GameEvents.insect_selected.connect(_on_insect_selected)
|
||||
GameEvents.insect_tile_selecetion_failed.connect(_on_selection_failed)
|
||||
GameEvents.insect_placed.connect(_on_insect_placed)
|
||||
GameEvents.insect_placement_cancelled.connect(_on_insect_placement_cancelled, CONNECT_DEFERRED)
|
||||
GameEvents.insect_placement_cancelled.connect(_on_insect_placement_cancelled)
|
||||
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)
|
||||
|
||||
GameEvents.insect_tiles_selected_for_action.connect(_on_tiles_selected_for_action)
|
||||
#GameEvents.insect_tiles_selected_for_action.connect(_on_tiles_selected_for_action)
|
||||
GameEvents.insect_action_cancelled.connect(_on_action_cancelled)
|
||||
|
||||
GameEvents.turn_started.connect(_on_turn_started)
|
||||
|
||||
func _on_action_cancelled() -> void:
|
||||
selected_for_action = false
|
||||
move_in_progress = false
|
||||
selected = false
|
||||
action_callback = Callable()
|
||||
|
||||
if hovered:
|
||||
hover()
|
||||
|
|
@ -125,39 +135,61 @@ func _on_turn_started(turn_num: int, map: HexGrid, _is_blacks_turn: bool) -> voi
|
|||
#print(GameData.has_bee_been_placed)
|
||||
if turn_num >= 7 and not GameData.bees_placed.has(is_black):
|
||||
can_be_selected = true
|
||||
|
||||
func _on_tiles_selected_for_action(source_pos: Vector4i, targets: Array[InsectTile]) -> void:
|
||||
if self in targets:
|
||||
selected_for_action = true
|
||||
if tween != null:
|
||||
tween.kill()
|
||||
|
||||
tween = get_tree().create_tween()
|
||||
#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_shader, Color(0, 0.6, 0, 0), Color(0, 0.6, 0, 0.8), 0.5).set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_EXPO)
|
||||
return
|
||||
|
||||
deactivated = true
|
||||
|
||||
if can_be_selected:
|
||||
tween_normal()
|
||||
else:
|
||||
tween_disabled()
|
||||
|
||||
func tween_disabled() -> void:
|
||||
if tween != null:
|
||||
tween.kill()
|
||||
|
||||
tween = get_tree().create_tween()
|
||||
tween.tween_method(tween_shader, mat.next_pass.get_shader_parameter("albedo"), Color(0, 0, 0, 1), 0.5).set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_EXPO)
|
||||
|
||||
|
||||
func tween_normal() -> void:
|
||||
if tween != null:
|
||||
tween.kill()
|
||||
|
||||
tween = get_tree().create_tween()
|
||||
tween.tween_method(tween_shader, mat.next_pass.get_shader_parameter("albedo"), Color(1, 1, 1, 0), 0.5).set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_EXPO)
|
||||
|
||||
func highlight_for_action() -> void:
|
||||
selected_for_action = true
|
||||
if tween != null:
|
||||
tween.kill()
|
||||
|
||||
tween = get_tree().create_tween()
|
||||
#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_shader, Color(0, 0.6, 0, 0), Color(0, 0.6, 0, 0.8), 0.5).set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_EXPO)
|
||||
|
||||
func _on_insect_tile_moved(tile: InsectTile, to: Vector4i) -> void:
|
||||
move_in_progress = false
|
||||
selected = false
|
||||
deactivated = false
|
||||
temporary_resource = null
|
||||
action_callback = Callable()
|
||||
|
||||
if tile == self:
|
||||
move_round_penalty == 2
|
||||
|
||||
func _on_insect_tile_deselected(tile: InsectTile) -> void:
|
||||
move_in_progress = false
|
||||
selected = false
|
||||
deactivated = false
|
||||
temporary_resource = null
|
||||
action_callback = Callable()
|
||||
|
||||
if can_be_selected:
|
||||
tween_normal()
|
||||
else:
|
||||
tween_disabled()
|
||||
|
||||
if hovered:
|
||||
hover()
|
||||
else:
|
||||
if tween != null:
|
||||
tween.kill()
|
||||
#else:
|
||||
#if tween != null:
|
||||
#tween.kill()
|
||||
|
||||
#tween.tween_method(tween_shader, mat.next_pass.get_shader_parameter("albedo"), Color(1, 1, 1, 0), 0.5).set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_EXPO)
|
||||
|
||||
|
|
@ -168,28 +200,37 @@ func _on_insect_tile_selected(tile: InsectTile) -> void:
|
|||
return
|
||||
|
||||
func _on_insect_placed(resource: TileResource, is_black: bool, pos: Vector4i) -> void:
|
||||
build_in_progress = false
|
||||
deactivated = false
|
||||
|
||||
func _on_insect_placement_cancelled() -> void:
|
||||
build_in_progress = false
|
||||
deactivated = false
|
||||
temporary_resource = null
|
||||
action_callback = Callable()
|
||||
|
||||
if can_be_selected:
|
||||
tween_normal()
|
||||
else:
|
||||
tween_disabled()
|
||||
|
||||
|
||||
func _on_insect_selected(button: InsectButton, is_black: bool) -> void:
|
||||
build_in_progress = true
|
||||
deactivated = true
|
||||
|
||||
#func _process(delta):
|
||||
func _input_event(camera, event, position, normal, shape_idx):
|
||||
if Input.is_action_just_pressed("place_tile"):
|
||||
if selected_for_action and not action_callback.is_null():
|
||||
action_callback.call()
|
||||
action_callback = Callable()
|
||||
|
||||
if deactivated:
|
||||
return
|
||||
|
||||
if not can_be_selected:
|
||||
return
|
||||
|
||||
if not hovered:
|
||||
return
|
||||
#if not hovered:
|
||||
#return
|
||||
|
||||
if not is_owner():
|
||||
return
|
||||
|
|
@ -243,19 +284,23 @@ func unhover() -> void:
|
|||
|
||||
|
||||
func _on_mouse_entered():
|
||||
return
|
||||
|
||||
if hat != null:
|
||||
return
|
||||
|
||||
hovered = true
|
||||
|
||||
if not deactivated and not selected_for_action:
|
||||
if not deactivated:
|
||||
hover()
|
||||
|
||||
func _on_mouse_exited():
|
||||
return
|
||||
|
||||
if hat != null:
|
||||
return
|
||||
|
||||
hovered = false
|
||||
|
||||
if not selected and not selected_for_action:
|
||||
if not selected:
|
||||
unhover()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue