generalized card vs item, cleaned up some headbob stuff, added the ability to refund a wall block
This commit is contained in:
@@ -15,6 +15,7 @@ var valid_point := false
|
||||
var is_looking_at_tower_base := false
|
||||
var tower_preview
|
||||
var last_tower_base
|
||||
var last_collider
|
||||
var last_card
|
||||
var ray_collider
|
||||
var ray_point
|
||||
@@ -46,25 +47,50 @@ func _process(delta: float) -> void:
|
||||
set_progress_percent(0)
|
||||
interacted_once = true
|
||||
build_wall()
|
||||
if interact_key_held and !interacted_once and last_collider and ray.is_colliding():
|
||||
interact_held_time += delta
|
||||
set_progress_percent(interact_held_time / interact_hold_time)
|
||||
if interact_held_time >= interact_hold_time:
|
||||
set_progress_percent(0)
|
||||
interacted_once = true
|
||||
refund_wall(last_collider)
|
||||
if !interact_key_held:
|
||||
interact_held_time = 0.0
|
||||
interacted_once = false
|
||||
set_progress_percent(0)
|
||||
|
||||
point_id = -1
|
||||
if ray.is_colliding():
|
||||
if !interacted_once and ray.is_colliding():
|
||||
if !interact_key_held:
|
||||
wall_preview.set_visible(true)
|
||||
ray_collider = ray.get_collider()
|
||||
ray_point = ray.get_collision_point()
|
||||
|
||||
is_looking_at_tower_base = ray_collider is TowerBase
|
||||
if is_looking_at_tower_base and 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 tower_preview:
|
||||
delete_tower_preview()
|
||||
if Game.level:
|
||||
if is_looking_at_tower_base:
|
||||
valid_point = false
|
||||
point_id = ray_collider.point_id
|
||||
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)
|
||||
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
|
||||
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)
|
||||
last_collider = null
|
||||
if tower_preview:
|
||||
delete_tower_preview()
|
||||
point_id = Game.level.a_star_graph_3d.astar.get_closest_point(ray_point)
|
||||
if !Game.level.a_star_graph_3d.point_is_build_location(point_id) or hero.currency < Data.wall_cost:
|
||||
wall_preview.set_visible(false)
|
||||
@@ -75,8 +101,8 @@ 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
|
||||
build_preview_material.albedo_color = Color.GREEN
|
||||
build_preview_material.albedo_color.a = 0.8
|
||||
valid_point = true
|
||||
else:
|
||||
#build_preview_material.albedo_color = Color.RED
|
||||
@@ -107,7 +133,7 @@ func spawn_tower_preview():
|
||||
func delete_tower_preview():
|
||||
last_tower_base = null
|
||||
last_card = null
|
||||
if tower_preview:
|
||||
if is_instance_valid(tower_preview):
|
||||
tower_preview.queue_free()
|
||||
tower_preview = null
|
||||
|
||||
@@ -121,15 +147,22 @@ func interact():
|
||||
func build_wall():
|
||||
if point_id >= 0 and valid_point and hero.currency >= Data.wall_cost:
|
||||
hero.currency -= Data.wall_cost
|
||||
Game.level.a_star_graph_3d.toggle_point(point_id)
|
||||
Game.level.a_star_graph_3d.toggle_point(point_id, multiplayer.get_unique_id())
|
||||
wall_preview.set_visible(false)
|
||||
|
||||
|
||||
func refund_wall(wall: TowerBase):
|
||||
last_collider = null
|
||||
if wall.has_card:
|
||||
wall.remove_card()
|
||||
Game.level.a_star_graph_3d.remove_wall(wall)
|
||||
|
||||
|
||||
func put_card_in_tower_base(tower_base: TowerBase):
|
||||
if tower_base.has_card:
|
||||
inventory.add(tower_base.remove_card())
|
||||
tower_base.remove_card()
|
||||
else:
|
||||
tower_base.add_card(inventory.remove())
|
||||
tower_base.add_card(inventory.remove(), multiplayer.get_unique_id())
|
||||
|
||||
|
||||
func set_progress_percent(value: float):
|
||||
|
||||
Reference in New Issue
Block a user