GUI building tower
This commit is contained in:
parent
5b994b91d1
commit
58f7a7c48e
16 changed files with 127 additions and 74 deletions
|
|
@ -6,10 +6,13 @@ extends Node
|
|||
signal tower_selected(tower : PackedScene)
|
||||
|
||||
|
||||
#Emitter : World.gd
|
||||
#Subscriber : HeroIcon.gd
|
||||
signal tower_builded(tower : PackedScene)
|
||||
#Emitter :
|
||||
#Subscriber :
|
||||
signal tower_builded(tower : Tower)
|
||||
|
||||
#Emitter : gui.gd
|
||||
#Subscriber : PlayerManager.gd
|
||||
signal tower_to_build(packed_tower : PackedScene)
|
||||
|
||||
#Emitter : UpgradeButton.gd
|
||||
#Subscriber : tower.gd
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@
|
|||
[ext_resource type="PackedScene" uid="uid://dpjfo15otkfru" path="res://Tiles/cube.tscn" id="5_wse8f"]
|
||||
[ext_resource type="Script" uid="uid://chu8s12rtdeqx" path="res://Scripts/Wave.gd" id="6_gbfbk"]
|
||||
[ext_resource type="Resource" uid="uid://dkbuy7fetnihs" path="res://Waves/wave_1.tres" id="7_ioo17"]
|
||||
[ext_resource type="PackedScene" uid="uid://djyye2otjju2d" path="res://game_menu.tscn" id="9_44brb"]
|
||||
[ext_resource type="Script" uid="uid://blxx3vs2wnfet" path="res://Scripts/Troop.gd" id="10_oyb16"]
|
||||
[ext_resource type="PackedScene" uid="uid://dknt1oiyei5e5" path="res://enemies/enemy-a.tscn" id="11_43wwi"]
|
||||
[ext_resource type="PackedScene" uid="uid://c54881eookjth" path="res://Assets/Meshes/SM_B26.glb" id="12_44brb"]
|
||||
[ext_resource type="PackedScene" uid="uid://p6a6rb7sgeqd" path="res://UI/gui.tscn" id="12_ikoig"]
|
||||
[ext_resource type="Script" uid="uid://xkk2pxkrwsq8" path="res://bullet_container.gd" id="12_k3n1d"]
|
||||
[ext_resource type="PackedScene" uid="uid://dxeb1kk5ieix2" path="res://Assets/Meshes/SM_MiniHouse.glb" id="13_ju8gl"]
|
||||
[ext_resource type="PackedScene" uid="uid://3u5ds5imu6d7" path="res://Assets/Meshes/SM_Minoterie.glb" id="14_4eob5"]
|
||||
|
|
@ -210,8 +210,7 @@ light_energy = 0.0
|
|||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="GameMenu" parent="CanvasLayer" instance=ExtResource("9_44brb")]
|
||||
visible = false
|
||||
[node name="GUI" parent="CanvasLayer" instance=ExtResource("12_ikoig")]
|
||||
|
||||
[node name="BulletContainer" type="Node3D" parent="."]
|
||||
script = ExtResource("12_k3n1d")
|
||||
|
|
@ -237,3 +236,5 @@ transform = Transform3D(1.08365, 0, 1.68098, 0, 2, 0, -1.68098, 0, 1.08365, 1.44
|
|||
|
||||
[connection signal="timeout" from="WaveManager/WaveTimer" to="WaveManager" method="_on_wave_timer_timeout"]
|
||||
[connection signal="timeout" from="WaveManager/TroopTimer" to="WaveManager" method="_on_troop_timer_timeout"]
|
||||
|
||||
[editable path="PlayerManager"]
|
||||
|
|
|
|||
|
|
@ -1,16 +1,19 @@
|
|||
extends Node3D
|
||||
|
||||
class_name PlayerManager
|
||||
|
||||
enum STATE {IDLE,PLACING}
|
||||
var _state = STATE.IDLE
|
||||
|
||||
#TODO Get rid of tower_blueprint
|
||||
@onready var tower_blueprint = preload("res://Towers/tower.tscn")
|
||||
@onready var tower_blueprint : PackedScene
|
||||
|
||||
@onready var selected_tower : Tower = null
|
||||
|
||||
@onready var cam : Camera3D = $"../Camera3D"
|
||||
@onready var the_cube : TheCube = %TheCube
|
||||
|
||||
@onready var towers : Array[Tower]
|
||||
|
||||
var tower_count : int = 0:
|
||||
set(value):
|
||||
tower_count = value
|
||||
|
|
@ -34,6 +37,7 @@ var selected_collider : CollisionObject3D
|
|||
|
||||
func _ready() -> void:
|
||||
EventBus.tower_selected.connect(_on_EventBus_tower_selected)
|
||||
EventBus.tower_to_build.connect(_on_EventBus_tower_to_build)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
handle_player_controls()
|
||||
|
|
@ -49,6 +53,9 @@ func _process(delta: float) -> void:
|
|||
EventBus.close_shop.emit()
|
||||
|
||||
if Input.is_action_just_pressed("rest"):
|
||||
if _state == STATE.PLACING:
|
||||
quit_placing()
|
||||
|
||||
EventBus.close_shop.emit()
|
||||
if target_tower:
|
||||
send_to_rest()
|
||||
|
|
@ -73,6 +80,7 @@ func handle_player_controls() -> void:
|
|||
selected_collider = collider
|
||||
|
||||
visible = true
|
||||
$"selection-a".visible = true
|
||||
global_position = collider.global_position
|
||||
global_position += Vector3(0.0,0.2,0.0)
|
||||
|
||||
|
|
@ -81,8 +89,32 @@ func handle_player_controls() -> void:
|
|||
else:
|
||||
target_tower = null
|
||||
|
||||
if _state == STATE.PLACING:
|
||||
tower_to_place.sprite.modulate = "ff4545c8" #If the tower can't be placed he is red
|
||||
$"selection-a".visible = false
|
||||
if selected_collider is BuildTile: #if we are placing a tower, hide the selector model
|
||||
tower_to_place.sprite.modulate = "61ff45c8" #If the tower can be placed he is green
|
||||
|
||||
|
||||
var tower_to_place : Tower #It is freed in the build_tower()
|
||||
func place_tower() -> void:
|
||||
_state = STATE.PLACING
|
||||
tower_to_place = tower_blueprint.instantiate()
|
||||
add_child(tower_to_place)
|
||||
tower_to_place.can_shoot = false
|
||||
tower_to_place.collision_layer = 0
|
||||
tower_to_place.sprite.modulate = "ffffffc8"
|
||||
tower_to_place.show_price_tag()
|
||||
|
||||
func quit_placing() -> void:
|
||||
_state = STATE.IDLE
|
||||
tower_to_place.queue_free()
|
||||
|
||||
# Refactoriser ce code
|
||||
func build_tower() -> void:
|
||||
if tower_blueprint == null:
|
||||
return
|
||||
|
||||
if !visible:
|
||||
return
|
||||
|
||||
|
|
@ -109,10 +141,14 @@ func build_tower() -> void:
|
|||
return
|
||||
else :
|
||||
#Can build
|
||||
quit_placing() #Destroy the tower placeholder
|
||||
|
||||
EventBus.money_spent.emit(temp_tower.price)
|
||||
tower_count += 1
|
||||
$"../Towers".add_child(temp_tower)
|
||||
EventBus.tower_builded.emit(temp_tower)
|
||||
towers.append(temp_tower)
|
||||
tower_blueprint == null
|
||||
selected_tower = temp_tower
|
||||
send_to_action()
|
||||
move_tower()
|
||||
|
|
@ -146,3 +182,7 @@ func _on_EventBus_tower_selected(tower : PackedScene):
|
|||
func _on_cube_icon_pressed() -> void:
|
||||
pass
|
||||
#open_shop()
|
||||
|
||||
func _on_EventBus_tower_to_build(packed_tower : PackedScene) -> void:
|
||||
tower_blueprint = packed_tower
|
||||
place_tower()
|
||||
|
|
|
|||
1
Tests/test_enviroment.gd
Normal file
1
Tests/test_enviroment.gd
Normal file
|
|
@ -0,0 +1 @@
|
|||
extends Node3D
|
||||
1
Tests/test_enviroment.gd.uid
Normal file
1
Tests/test_enviroment.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://dcssahwfr5irf
|
||||
|
|
@ -1,67 +1,6 @@
|
|||
[gd_scene load_steps=15 format=3 uid="uid://ukt2r8vmpj00"]
|
||||
[gd_scene load_steps=2 format=3 uid="uid://ukt2r8vmpj00"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c6ceaa6x357bb" path="res://Assets/Meshes/SM_Cube.glb" id="1_bk1pw"]
|
||||
[ext_resource type="PackedScene" uid="uid://c54881eookjth" path="res://Assets/Meshes/SM_B26.glb" id="2_r8lby"]
|
||||
[ext_resource type="PackedScene" uid="uid://dxeb1kk5ieix2" path="res://Assets/Meshes/SM_MiniHouse.glb" id="3_0qotu"]
|
||||
[ext_resource type="PackedScene" uid="uid://3u5ds5imu6d7" path="res://Assets/Meshes/SM_Minoterie.glb" id="4_twuly"]
|
||||
[ext_resource type="PackedScene" uid="uid://trsvfgyds26p" path="res://Assets/Meshes/SM_Polyson.glb" id="5_d84uc"]
|
||||
[ext_resource type="PackedScene" uid="uid://c8qg6bkxv643o" path="res://Assets/Meshes/SM_Studio24.glb" id="6_47v0e"]
|
||||
[ext_resource type="PackedScene" uid="uid://do60hy3251c0m" path="res://Assets/Meshes/SM_TNP.glb" id="7_o4hcd"]
|
||||
[ext_resource type="Shader" uid="uid://de7bad0qu56fl" path="res://Assets/Shaders/sky.gdshader" id="8_shjfl"]
|
||||
[ext_resource type="Texture2D" uid="uid://drkxt6okkevle" path="res://Assets/Skybox/strange_night.jpg" id="9_fnc5e"]
|
||||
|
||||
[sub_resource type="Curve" id="Curve_t3m1v"]
|
||||
_data = [Vector2(0.119342, 0), 0.0, 0.0, 0, 0, Vector2(0.502058, 0.269663), 0.0, 0.0, 0, 0, Vector2(0.917696, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 3
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_3jcr0"]
|
||||
curve = SubResource("Curve_t3m1v")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_1yhx5"]
|
||||
shader = ExtResource("8_shjfl")
|
||||
shader_parameter/sky_tex = ExtResource("9_fnc5e")
|
||||
shader_parameter/energy = 2.0
|
||||
shader_parameter/gamma = 1.5
|
||||
shader_parameter/tint_ramp = SubResource("CurveTexture_3jcr0")
|
||||
shader_parameter/scale = Vector3(0.5, 0.5, 0.5)
|
||||
shader_parameter/triplanar_blend_power = 20.0
|
||||
shader_parameter/seamless_blend = 0.1
|
||||
|
||||
[sub_resource type="Sky" id="Sky_ls68a"]
|
||||
sky_material = SubResource("ShaderMaterial_1yhx5")
|
||||
|
||||
[sub_resource type="Environment" id="Environment_8tkh1"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_ls68a")
|
||||
ambient_light_source = 3
|
||||
[ext_resource type="Script" uid="uid://dcssahwfr5irf" path="res://Tests/test_enviroment.gd" id="1_37o1p"]
|
||||
|
||||
[node name="TestEnviroment" type="Node3D"]
|
||||
|
||||
[node name="SM_Cube" parent="." instance=ExtResource("1_bk1pw")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.364047, 0, 0.441566)
|
||||
|
||||
[node name="SM_B26" parent="." instance=ExtResource("2_r8lby")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.12279, 0, 0.850057)
|
||||
|
||||
[node name="SM_MiniHouse" parent="." instance=ExtResource("3_0qotu")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.181508, 0, 2.29622)
|
||||
|
||||
[node name="SM_Minoterie" parent="." instance=ExtResource("4_twuly")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.34223, 0, -0.243607)
|
||||
|
||||
[node name="SM_Polyson" parent="." instance=ExtResource("5_d84uc")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.64868, 0, -1.9913)
|
||||
|
||||
[node name="SM_Studio24" parent="." instance=ExtResource("6_47v0e")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.637257, 0, -2.4217)
|
||||
|
||||
[node name="SM_TNP" parent="." instance=ExtResource("7_o4hcd")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.95593, 0, -5.94892)
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_8tkh1")
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.955505, 0.294974, 0, -0.294974, 0.955505, 0, 4.83978, 0)
|
||||
light_color = Color(0.779275, 0.87651, 0.94841, 1)
|
||||
light_energy = 2.0
|
||||
script = ExtResource("1_37o1p")
|
||||
|
|
|
|||
2
Tiles/tile.gd
Normal file
2
Tiles/tile.gd
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
extends StaticBody3D
|
||||
class_name BuildTile
|
||||
1
Tiles/tile.gd.uid
Normal file
1
Tiles/tile.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://ypfplijax7cd
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://d1f6m15niwgt"]
|
||||
[gd_scene load_steps=4 format=3 uid="uid://d1f6m15niwgt"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ypfplijax7cd" path="res://Tiles/tile.gd" id="1_2ljfi"]
|
||||
[ext_resource type="PackedScene" uid="uid://p67ggbkjfwm1" path="res://Assets/GLB format/tile.glb" id="1_71op4"]
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_71op4"]
|
||||
|
|
@ -11,6 +12,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 0.5)
|
|||
[node name="tile2" parent="." instance=ExtResource("1_71op4")]
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||
script = ExtResource("1_2ljfi")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
||||
shape = SubResource("ConcavePolygonShape3D_71op4")
|
||||
|
|
|
|||
2
Towers/pierre.gd
Normal file
2
Towers/pierre.gd
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
extends Tower
|
||||
class_name Pierre
|
||||
1
Towers/pierre.gd.uid
Normal file
1
Towers/pierre.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://q4o384wv3ijj
|
||||
18
Towers/pierre.tscn
Normal file
18
Towers/pierre.tscn
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://bj6srer7ghf7p"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://trg7ag3dqr2l" path="res://Towers/tower.tscn" id="1_7f7qx"]
|
||||
[ext_resource type="Script" uid="uid://q4o384wv3ijj" path="res://Towers/pierre.gd" id="1_v16mf"]
|
||||
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Scripts/Upgrades/TowerUpgrade.gd" id="3_v16mf"]
|
||||
|
||||
[node name="Pierre" instance=ExtResource("1_7f7qx")]
|
||||
script = ExtResource("1_v16mf")
|
||||
icone = null
|
||||
bio = ""
|
||||
bullet_damage = 1
|
||||
tower_shop = Array[ExtResource("3_v16mf")]([])
|
||||
|
||||
[node name="Sprite3D" parent="." index="6"]
|
||||
modulate = Color(0.3795, 1, 0.27, 0.784314)
|
||||
|
||||
[node name="EnergyBar3D" parent="." index="7"]
|
||||
visible = true
|
||||
|
|
@ -19,10 +19,10 @@ var bullet : PackedScene = preload("res://Bullets/bullet.tscn")
|
|||
@export var max_energy : float = 100.0:
|
||||
set(value):
|
||||
max_energy = value
|
||||
energy_bar.set_max_value(max_energy)
|
||||
@export var energy_regen : float = 10.0
|
||||
@export var energy_cost : float = 50.0
|
||||
@onready var energy_bar : EnergyBar3D = $EnergyBar3D
|
||||
@onready var sprite : Sprite3D = $Sprite3D
|
||||
|
||||
var energy : float = max_energy:
|
||||
set(value):
|
||||
|
|
@ -77,6 +77,7 @@ func apply_upgrade(upgrade : TowerUpgrade):
|
|||
func _ready() -> void:
|
||||
EventBus.tower_upgraded.connect(_on_EventBus_tower_upgraded)
|
||||
energy_bar.set_up(energy, max_energy)
|
||||
energy_bar.set_max_value(max_energy)
|
||||
$Cooldown.wait_time = action_cooldown
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
|
|
@ -131,6 +132,15 @@ func choose_target(_current_targets : Array) -> void:
|
|||
current = current_target
|
||||
|
||||
|
||||
func show_price_tag()-> void:
|
||||
$PriceTag.text = str(price) +" €"
|
||||
visible = true
|
||||
|
||||
|
||||
func hide_price_tag()-> void:
|
||||
visible = false
|
||||
|
||||
|
||||
func _on_range_body_entered(body: Node3D) -> void:
|
||||
if body is Enemy:
|
||||
current_targets.append(body)
|
||||
|
|
|
|||
|
|
@ -57,6 +57,11 @@ frame = 75
|
|||
|
||||
[node name="EnergyBar3D" parent="." instance=ExtResource("3_pajr1")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.44473, 0)
|
||||
visible = false
|
||||
|
||||
[node name="PriceTag" type="Label3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.06776, 0)
|
||||
billboard = 2
|
||||
|
||||
[connection signal="input_event" from="." to="." method="_on_input_event"]
|
||||
[connection signal="body_entered" from="Range" to="." method="_on_range_body_entered"]
|
||||
|
|
|
|||
24
UI/gui.gd
24
UI/gui.gd
|
|
@ -1,5 +1,29 @@
|
|||
extends Control
|
||||
|
||||
@onready var player_manager : PlayerManager = $"../../PlayerManager"
|
||||
|
||||
func _ready() -> void:
|
||||
pass
|
||||
|
||||
func _on_button_cube_pressed() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
func _on_button_quit_level_pressed() -> void:
|
||||
Transition.goto("res://UI/start_menu.tscn")
|
||||
|
||||
|
||||
func _on_button_quit_game_pressed() -> void:
|
||||
get_tree().quit()
|
||||
|
||||
|
||||
func _on_button_pierre_pressed() -> void:
|
||||
var can_build = true
|
||||
for tower in player_manager.towers:
|
||||
if tower is Pierre:
|
||||
can_build = false
|
||||
player_manager.selected_tower = tower #If can't build, tower is selected
|
||||
|
||||
if can_build: #If Pierre is not builded then build it !
|
||||
print("can build !")
|
||||
EventBus.tower_to_build.emit(load("res://Towers/pierre.tscn"))
|
||||
|
|
|
|||
|
|
@ -331,3 +331,6 @@ layout_mode = 2
|
|||
mouse_default_cursor_shape = 2
|
||||
|
||||
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/GridContainer/ButtonCube" to="." method="_on_button_cube_pressed"]
|
||||
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/GridContainer/ButtonQuitLevel" to="." method="_on_button_quit_level_pressed"]
|
||||
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/GridContainer/ButtonQuitGame" to="." method="_on_button_quit_game_pressed"]
|
||||
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/GridContainer/ButtonPierre" to="." method="_on_button_pierre_pressed"]
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue