added corpses and a wall building dissolve animation

This commit is contained in:
2023-12-10 12:05:41 +11:00
parent adde9f5c3c
commit 046c4f5afb
39 changed files with 596 additions and 112 deletions

View File

@ -21,11 +21,6 @@ var enemy_names = []
@export var pickup_notif_scene : PackedScene
@export var wave_start_label : Label
var wave_start_label_shrinking := false
var wave_start_label_growing := false
var wave_start_label_ease_time := 1.0
var wave_start_label_ease_progress := 0.0
func set_energy_visible(value):
weapon_energy_bar.set_visible(value)
@ -35,40 +30,29 @@ func set_offhand_energy_visible(value):
offhand_energy_bar.set_visible(value)
func ease_in_out_quart(x : float) -> float:
return 8.0 * x * x * x * x if x < 0.5 else 1 - pow(-2.0 * x + 2.0, 4) / 2.0
func _process(delta: float) -> void:
fps_label.text = "FPS: " + str(Engine.get_frames_per_second())
wave_start_label.text = "Press [" + Data.player_keymap.ready.as_text_key_label() + "] to start wave"
if wave_start_label_growing or wave_start_label_shrinking:
wave_start_label_ease_progress += delta
if wave_start_label_growing:
wave_start_label.set_visible(true)
wave_start_label.offset_left = lerp(0.0, -300.0, ease_in_out_quart(wave_start_label_ease_progress / wave_start_label_ease_time))
wave_start_label.offset_right = lerp(0.0, 300.0, ease_in_out_quart(wave_start_label_ease_progress / wave_start_label_ease_time))
if wave_start_label_ease_progress >= wave_start_label_ease_time:
wave_start_label_growing = false
wave_start_label_ease_progress = 0.0
elif wave_start_label_shrinking:
wave_start_label.offset_left = lerp(-300.0, 0.0, ease_in_out_quart(wave_start_label_ease_progress / wave_start_label_ease_time))
wave_start_label.offset_right = lerp(300.0, 0.0, ease_in_out_quart(wave_start_label_ease_progress / wave_start_label_ease_time))
if wave_start_label_ease_progress >= wave_start_label_ease_time:
wave_start_label.set_visible(false)
wave_start_label_shrinking = false
wave_start_label_ease_progress = 0.0
func grow_wave_start_label():
wave_start_label_growing = true
wave_start_label_shrinking = false
tween_label(300.0)
func shrink_wave_start_label():
wave_start_label_shrinking = true
wave_start_label_growing = false
tween_label(0.0)
func tween_label(x: float) -> void:
var tween = create_tween()
tween.set_ease(Tween.EASE_IN_OUT)
tween.set_trans(Tween.TRANS_QUAD)
if x > 0.0:
tween.tween_callback(wave_start_label.set_visible.bind(true))
tween.parallel().tween_property(wave_start_label, "offset_left", -x, 0.6)
tween.parallel().tween_property(wave_start_label, "offset_right", x, 0.6)
if x <= 0.0:
tween.tween_callback(wave_start_label.set_visible.bind(false))
func set_hover_text(text):

View File

@ -1,12 +1,13 @@
extends Resource
class_name Enemy
@export var title = "dog"
@export var target_type : Data.EnemyType
@export var icon : Texture
@export var sprite : AtlasTexture
@export var spawn_power := 10
@export var health = 100
@export var penalty = 10
@export var movement_speed = 0.5
@export var spawn_cooldown = 1.0
@export var title := "dog"
@export var target_type: Data.EnemyType
@export var icon: Texture
@export var death_sprite: Texture
@export var sprite: AtlasTexture
@export var spawn_power:= 10
@export var health := 100
@export var penalty := 10
@export var movement_speed := 0.5
@export var spawn_cooldown := 1.0

View File

@ -5,7 +5,6 @@ class_name EditTool
@export var inventory : Inventory
@export var ray : RayCast3D
@export var wall_preview : TowerBase
@export var build_preview_material : StandardMaterial3D
@export var progress_bar : TextureProgressBar
var enabled := true
@ -27,9 +26,10 @@ var interact_hold_time := 0.4
func _ready() -> void:
wall_preview.set_material(build_preview_material)
build_preview_material.albedo_color = Color.GREEN
build_preview_material.albedo_color.a = 0.8
var c = Color.GREEN
c.a = 0.8
wall_preview.set_color(c)
wall_preview.set_float(0.0)
wall_preview.toggle_collision()
@ -39,13 +39,14 @@ func _process(delta: float) -> void:
ray_point = null
wall_preview.set_visible(false)
if is_instance_valid(last_collider):
Game.level.a_star_graph_3d.tower_base_ids[last_collider.point_id].set_material(null)
Game.level.a_star_graph_3d.tower_base_ids[last_collider.point_id].set_float(1.0)
last_collider = null
return
if interact_key_held and !interacted_once and valid_point and hero.currency >= Data.wall_cost and ray.is_colliding() and Game.level.a_star_graph_3d.point_is_build_location(point_id):
interact_held_time += delta
set_progress_percent(interact_held_time / interact_hold_time)
wall_preview.set_float(interact_held_time / interact_hold_time)
if interact_held_time >= interact_hold_time:
set_progress_percent(0)
interacted_once = true
@ -61,6 +62,7 @@ func _process(delta: float) -> void:
interact_held_time = 0.0
interacted_once = false
set_progress_percent(0)
wall_preview.set_float(0.0)
point_id = -1
if !interacted_once and ray.is_colliding():
@ -76,21 +78,20 @@ func _process(delta: float) -> void:
if obstacle_last_point != point_id:
obstacle_last_point = point_id
if is_instance_valid(last_collider):
Game.level.a_star_graph_3d.tower_base_ids[last_collider.point_id].set_material(null)
Game.level.a_star_graph_3d.tower_base_ids[last_collider.point_id].set_float(1.0)
last_collider = null
if tower_preview:
delete_tower_preview()
wall_preview.set_visible(false)
last_collider = ray_collider
ray_collider.set_material(build_preview_material)
build_preview_material.albedo_color = Color.RED
build_preview_material.albedo_color.a = 1.0
ray_collider.set_color(Color.RED)
ray_collider.set_float(0.0)
if inventory.contents.size() > 0 and !ray_collider.has_card:
if ray_collider != last_tower_base or inventory.selected_item != last_card:
spawn_tower_preview()
elif Game.level:
if is_instance_valid(last_collider):
Game.level.a_star_graph_3d.tower_base_ids[last_collider.point_id].set_material(null)
Game.level.a_star_graph_3d.tower_base_ids[last_collider.point_id].set_float(1.0)
last_collider = null
if tower_preview:
delete_tower_preview()
@ -104,8 +105,10 @@ func _process(delta: float) -> void:
if obstacle_last_point != point_id:
obstacle_last_point = point_id
if Game.level.a_star_graph_3d.test_path_if_point_toggled(point_id):
build_preview_material.albedo_color = Color.GREEN
build_preview_material.albedo_color.a = 0.8
var c = Color.GREEN
c.a = 0.8
wall_preview.set_color(c)
wall_preview.set_float(0.0)
valid_point = true
else:
#build_preview_material.albedo_color = Color.RED

27
Scripts/health_bar.gd Normal file
View File

@ -0,0 +1,27 @@
extends TextureProgressBar
@export var health_bar_gradient: Gradient
@onready var prev_bar = $PreviousHealthBar
func setup(health: float):
max_value = health
value = health
prev_bar.max_value = health
prev_bar.value = health
func on_health_changed(health: float):
set_visible(true)
var health_went_down = true if health < value else false
value = health
tint_progress = health_bar_gradient.sample(value / max_value)
if health_went_down:
var tween = create_tween()
tween.set_ease(Tween.EASE_OUT)
tween.set_trans(Tween.TRANS_QUINT)
tween.tween_interval(0.3)
tween.tween_property(prev_bar, "value", value, 0.7)
else:
prev_bar.value = value

View File

@ -5,6 +5,7 @@ class_name Level
@export var player_spawns : Array[Node3D] = []
@export var enemy_spawns : Array[Node3D] = []
@export var enemy_goals : Array[Node3D] = []
@export var corpses: Node3D
@export var a_star_graph_3d : AStarGraph3D
@export var cinematic_cam : CinematicCamManager
@export var printer : CardPrinter

View File

@ -14,6 +14,7 @@ func _ready() -> void:
bg_level.a_star_graph_3d.build_random_maze(50)
bg_level.a_star_graph_3d.place_random_towers(20)
bg_level.a_star_graph_3d.disable_all_tower_frames()
Game.level = bg_level
var new_wave = WaveManager.generate_wave(400, bg_level.enemy_pool)
for spawn in bg_level.enemy_spawns:
spawn.signal_for_after_enemy_died = enemy_died

View File

@ -28,6 +28,14 @@ var has_card : bool :
return inventory.contents.size() != 0
func set_color(color: Color):
$MeshInstance3D.set_instance_shader_parameter("Color", color)
func set_float(value: float):
$MeshInstance3D.set_instance_shader_parameter("Float", value)
func add_card(card: Card, caller_id: int) -> bool:
var result = inventory.add(card)
if result:
@ -40,10 +48,6 @@ func remove_card():
networked_remove_tower.rpc()
func set_material(value: StandardMaterial3D):
block.material_override = value
func toggle_collision():
collider.disabled = !collider.disabled