Refactored to use Vector4i. Added Spider/Grasshopper. TODO: Ant
This commit is contained in:
parent
ff4aa93845
commit
11f8a71f52
19 changed files with 482 additions and 326 deletions
|
|
@ -1,13 +1,18 @@
|
|||
[gd_resource type="Resource" script_class="TileResource" load_steps=5 format=3 uid="uid://chuci1mu106hs"]
|
||||
[gd_resource type="Resource" script_class="TileResource" load_steps=7 format=3 uid="uid://chuci1mu106hs"]
|
||||
|
||||
[ext_resource type="Material" uid="uid://tbfvmxogabnr" path="res://InsectTiles/Materials/Grasshopper_Black.tres" id="1_vut3o"]
|
||||
[ext_resource type="Material" uid="uid://csuox1kvmm78p" path="res://InsectTiles/Materials/Grasshopper_White.tres" id="2_gc341"]
|
||||
[ext_resource type="Script" path="res://Tile/TileResource.gd" id="3_t3kan"]
|
||||
[ext_resource type="Script" path="res://MovementBehaviour/Prefabs/MovementBehaviourGrasshopper.gd" id="3_tid3l"]
|
||||
[ext_resource type="Texture2D" uid="uid://dhnrq0gxmv7cr" path="res://InsectTiles/Assets/UI/grasshopper.png" id="4_tpusd"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_ynqk8"]
|
||||
script = ExtResource("3_tid3l")
|
||||
|
||||
[resource]
|
||||
script = ExtResource("3_t3kan")
|
||||
tile_name = "Grasshopper"
|
||||
movement_behaviour = SubResource("Resource_ynqk8")
|
||||
material_black = ExtResource("1_vut3o")
|
||||
material_white = ExtResource("2_gc341")
|
||||
ui_texture = ExtResource("4_tpusd")
|
||||
|
|
|
|||
|
|
@ -1,13 +1,19 @@
|
|||
[gd_resource type="Resource" script_class="TileResource" load_steps=5 format=3 uid="uid://dhvfn1adyay8i"]
|
||||
[gd_resource type="Resource" script_class="TileResource" load_steps=7 format=3 uid="uid://dhvfn1adyay8i"]
|
||||
|
||||
[ext_resource type="Material" uid="uid://csjte7l8m4gwp" path="res://InsectTiles/Materials/Spider_Black.tres" id="1_htbqr"]
|
||||
[ext_resource type="Material" uid="uid://dh2ehs3h106sb" path="res://InsectTiles/Materials/Spider_White.tres" id="2_ji24g"]
|
||||
[ext_resource type="Script" path="res://MovementBehaviour/Prefabs/MovementBehaviourSpider.gd" id="3_8daio"]
|
||||
[ext_resource type="Script" path="res://Tile/TileResource.gd" id="3_semk6"]
|
||||
[ext_resource type="Texture2D" uid="uid://bgyve5fappdn5" path="res://InsectTiles/Assets/UI/spider.png" id="4_e73ch"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_pm2yd"]
|
||||
script = ExtResource("3_8daio")
|
||||
max_movement_reach = 3
|
||||
|
||||
[resource]
|
||||
script = ExtResource("3_semk6")
|
||||
tile_name = "Spider"
|
||||
movement_behaviour = SubResource("Resource_pm2yd")
|
||||
material_black = ExtResource("1_htbqr")
|
||||
material_white = ExtResource("2_ji24g")
|
||||
ui_texture = ExtResource("4_e73ch")
|
||||
|
|
|
|||
130
Tile/Tile.gd
130
Tile/Tile.gd
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -8,3 +8,6 @@ class_name TileResource
|
|||
@export var material_white: StandardMaterial3D
|
||||
|
||||
@export var ui_texture: Texture2D
|
||||
|
||||
func _to_string() -> String:
|
||||
return tile_name
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue