feat: Add Global Game instance + refacto
This commit is contained in:
parent
a2698da4a6
commit
c6cdc15687
32 changed files with 340 additions and 325 deletions
|
|
@ -56,7 +56,7 @@ func attack():
|
||||||
func death() -> void:
|
func death() -> void:
|
||||||
is_alive = false
|
is_alive = false
|
||||||
died.emit()
|
died.emit()
|
||||||
TheCube.money += money
|
Game.money += money
|
||||||
$Sprite3D.visible = false
|
$Sprite3D.visible = false
|
||||||
var death_vfx : CPUParticles3D = death_vfx_packed.instantiate()
|
var death_vfx : CPUParticles3D = death_vfx_packed.instantiate()
|
||||||
get_tree().current_scene.add_child(death_vfx)
|
get_tree().current_scene.add_child(death_vfx)
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@ extends Node
|
||||||
signal tower_selected(towerType : Tower.TYPE)
|
signal tower_selected(towerType : Tower.TYPE)
|
||||||
|
|
||||||
|
|
||||||
## [b]Emitter[/b] : [TowerManager][br]
|
## [b]Emitter[/b] : [Tower][br]
|
||||||
## [b]Subscriber[/b] hero_icon.gd:
|
## [b]Subscriber[/b] [GuiButton], [gui.gd]:
|
||||||
signal tower_builded(tower : Tower)
|
signal tower_changed(tower : Tower)
|
||||||
|
|
||||||
|
|
||||||
## [b]Emitter[/b] : [UpgradeButton][br]
|
## [b]Emitter[/b] : [UpgradeButton][br]
|
||||||
|
|
@ -17,21 +17,6 @@ signal tower_builded(tower : Tower)
|
||||||
signal tower_upgraded(towerType : Tower.TYPE, upgrade : TowerUpgrade)
|
signal tower_upgraded(towerType : Tower.TYPE, upgrade : TowerUpgrade)
|
||||||
|
|
||||||
|
|
||||||
## [b]Emitter[/b] : [TheCube][br]
|
|
||||||
## [b]Subscriber[/b] : gui.gd
|
|
||||||
signal cube_integrity_changed(newHealth : int)
|
|
||||||
|
|
||||||
|
|
||||||
## [b]Emitter[/b] : [TheCube][br]
|
|
||||||
## [b]Subscriber[/b] : gui.gd
|
|
||||||
signal money_changed(newAmount : int)
|
|
||||||
|
|
||||||
|
|
||||||
## [b]Emitter[/b] : [TheCube][br]
|
|
||||||
## [b]Subscriber[/b] : [WorldManager]
|
|
||||||
signal cube_ready(theCube : TheCube)
|
|
||||||
|
|
||||||
|
|
||||||
## [b]Emitter[/b] : [TowerManager][br]
|
## [b]Emitter[/b] : [TowerManager][br]
|
||||||
## [b]Subscriber[/b] : gui.gd
|
## [b]Subscriber[/b] : gui.gd
|
||||||
signal tower_count_changed(count : int)
|
signal tower_count_changed(count : int)
|
||||||
|
|
@ -53,25 +38,10 @@ signal projectile_shooted(projectile: Projectile, startPosition: Vector3)
|
||||||
|
|
||||||
|
|
||||||
## [b]Emitter[/b] : [WorldManager][br]
|
## [b]Emitter[/b] : [WorldManager][br]
|
||||||
## [b]Subscriber[/b] : [TheCube]
|
## [b]Subscriber[/b] : [Game]
|
||||||
signal player_has_won()
|
signal player_has_won()
|
||||||
|
|
||||||
|
|
||||||
## [b]Emitter[/b] : [TheCube][br]
|
|
||||||
## [b]Subscriber[/b] : [WorldManager]
|
|
||||||
signal player_defeated()
|
|
||||||
|
|
||||||
|
|
||||||
## [b]Emitter[/b] : [Tower][br]
|
|
||||||
## [b]Subscriber[/b] : [GuiButton]
|
|
||||||
signal energy_has_changed(tower : Tower)
|
|
||||||
|
|
||||||
|
|
||||||
## [b]Emitter[/b] : [WorldManager], [Level][br]
|
|
||||||
## [b]Subscriber[/b] : gui.gd
|
|
||||||
signal allowedTowerHasChange(allowedTowers : Array[Tower.TYPE])
|
|
||||||
|
|
||||||
|
|
||||||
## [b]Emitter[/b] : [WorldManager][br]
|
## [b]Emitter[/b] : [WorldManager][br]
|
||||||
## [b]Subscriber[/b] : [code]null[/code]
|
## [b]Subscriber[/b] : [code]null[/code]
|
||||||
signal waveHasChange(waveNumber : int)
|
signal waveHasChange(waveNumber : int)
|
||||||
|
|
|
||||||
130
Globals/Game.gd
130
Globals/Game.gd
|
|
@ -1,97 +1,75 @@
|
||||||
@tool
|
@tool
|
||||||
class_name Game
|
extends Node
|
||||||
|
## Game
|
||||||
|
|
||||||
|
|
||||||
## COLORS ##
|
signal cube_integrity_changed
|
||||||
|
signal money_changed
|
||||||
|
signal loose
|
||||||
|
signal allowed_tower_has_change
|
||||||
|
|
||||||
|
|
||||||
enum COLOR { HEALTH, ENERGY, SELECTED, SECONDARY, BACKGROUND_PANEL }
|
var towerPackedScenes : Dictionary
|
||||||
|
var enmies : Dictionary
|
||||||
|
var towers : Dictionary
|
||||||
|
var allowedTowers : Array[Tower.TYPE] :
|
||||||
|
set(value):
|
||||||
|
allowedTowers = value
|
||||||
|
allowed_tower_has_change.emit()
|
||||||
|
|
||||||
|
|
||||||
const COLOR_HEALTH : Color = Color(0.921569, 0.419608, 0.415686, 1)
|
var max_health : int = 50
|
||||||
const COLOR_ENERGY : Color = Color(0.921569, 0.890196, 0.415686, 1)
|
var health : int = max_health :
|
||||||
const COLOR_SELECTED : Color = Color(0.721569, 0.600196, 0.355686, 1)
|
set(value):
|
||||||
const COLOR_SECONDARY : Color = Color(0.341, 0.082, 0.094, 0.0)
|
health = value
|
||||||
const COLOR_BACKGROUND_PANEL : Color = Color(0.933, 0.933, 0.933, 1)
|
cube_integrity_changed.emit()
|
||||||
const COLOR_FALLBACK : Color = Color(0.341176, 0.0823529, 0.0941176, 0)
|
if health <= 0:
|
||||||
|
death()
|
||||||
|
var healthPercentage : int :
|
||||||
|
get():
|
||||||
|
return float(health) / float(max_health) * 100.0
|
||||||
|
|
||||||
|
|
||||||
static func getColor(color : COLOR) -> Color :
|
var money : int = 0:
|
||||||
match color:
|
set(value):
|
||||||
COLOR.HEALTH : return COLOR_HEALTH
|
money = value
|
||||||
COLOR.ENERGY : return COLOR_ENERGY
|
money_changed.emit()
|
||||||
COLOR.SELECTED : return COLOR_SELECTED
|
|
||||||
COLOR.SECONDARY : return COLOR_SECONDARY
|
|
||||||
COLOR.BACKGROUND_PANEL : return COLOR_BACKGROUND_PANEL
|
|
||||||
_: return COLOR_FALLBACK
|
|
||||||
|
|
||||||
|
|
||||||
## END COLORS ##
|
func _ready() -> void:
|
||||||
|
EventBus.player_has_won.connect(win)
|
||||||
const SCENE_DIR_PATTERN : String = "res://\\w+/(Scenes|Map \\d+)/$"
|
Helper.preloadSceneInGlobal(towerPackedScenes, Helper.RESOURCE_TYPE.TOWER)
|
||||||
const SCENE_FILE_PATTERN : String = "([^/]*)\\.tscn$"
|
#Helper.preloadSceneInGlobal(towerPackedScenes, Helper.RESOURCE_TYPE.ENEMY)
|
||||||
const RESOURCE_FILE_PATTERN : String = "([^/]*)\\.tres$"
|
|
||||||
|
|
||||||
const TOWER_DIR : String = "res://Towers/Scenes/"
|
|
||||||
const ENEMY_DIR : String = "res://Enemies/Scenes/"
|
|
||||||
const LEVEL_DIR : String = "res://Levels/"
|
|
||||||
|
|
||||||
static var towers : Dictionary
|
|
||||||
static var enmies : Dictionary
|
|
||||||
|
|
||||||
enum RESOURCE_TYPE { TOWER, ENEMY, LEVEL }
|
|
||||||
|
|
||||||
static func _static_init() -> void:
|
|
||||||
preloadSceneInGlobal(towers, RESOURCE_TYPE.TOWER)
|
|
||||||
#preloadSceneInGlobal(enemies, ENEMY_DIR)
|
|
||||||
|
|
||||||
## [color=crimson][b]WARNING :[/b] Work only with the [enum RESOURCE_TYPE] [param TOWER][/color]
|
|
||||||
static func preloadSceneInGlobal(property: Dictionary, type: RESOURCE_TYPE) -> void:
|
|
||||||
if type != RESOURCE_TYPE.TOWER:
|
|
||||||
return
|
|
||||||
|
|
||||||
var files : Array[String] = getPackedScenesPaths(type)
|
|
||||||
|
|
||||||
for file in files:
|
|
||||||
var scene = load(file)
|
|
||||||
if scene:
|
|
||||||
property.set(EnhancedResource.getPackedSceneProperty(scene, "tower_type"), scene)
|
|
||||||
|
|
||||||
property.sort()
|
|
||||||
|
|
||||||
|
|
||||||
static func getPackedScenesPaths(type: RESOURCE_TYPE) -> Array[String]:
|
func initTower(towerType: Tower.TYPE) -> Tower:
|
||||||
return getFileFromDir(getDirFromType(type), SCENE_FILE_PATTERN, SCENE_DIR_PATTERN)
|
var tower : Tower = towerPackedScenes.get(towerType).instantiate()
|
||||||
|
towers.set(towerType, tower)
|
||||||
|
return tower
|
||||||
|
|
||||||
|
|
||||||
static func getResourcesPaths(type: RESOURCE_TYPE) -> Array[String]:
|
func resetGame() -> void:
|
||||||
if type == RESOURCE_TYPE.LEVEL:
|
towers.values().map(queue_free)
|
||||||
return getFileFromDir(getDirFromType(type), RESOURCE_FILE_PATTERN, LEVEL_DIR)
|
towers.clear()
|
||||||
return []
|
# DANGER Don't use [method clear] or you will clear the level datas
|
||||||
|
allowedTowers = []
|
||||||
|
money = 0
|
||||||
|
health = max_health
|
||||||
|
|
||||||
|
|
||||||
static func getDirFromType(type: RESOURCE_TYPE) -> String:
|
func win():
|
||||||
match type:
|
Transition.goto("res://UI/win_screen.tscn")
|
||||||
RESOURCE_TYPE.TOWER: return TOWER_DIR
|
resetGame()
|
||||||
RESOURCE_TYPE.ENEMY: return ENEMY_DIR
|
|
||||||
RESOURCE_TYPE.LEVEL: return LEVEL_DIR
|
|
||||||
_: return ""
|
|
||||||
|
|
||||||
|
|
||||||
static func getFileFromDir(path : String, regexPattern : String, pathRegexPattern : String = "") -> Array[String]:
|
func spendMoney(amount : int) -> bool:
|
||||||
var files : Array[String]
|
if money > amount:
|
||||||
var regex : RegEx = RegEx.create_from_string(regexPattern)
|
money -= amount
|
||||||
var pathRegex : RegEx = RegEx.create_from_string(pathRegexPattern)
|
return true
|
||||||
var dir : DirAccess = DirAccess.open(path)
|
return false
|
||||||
|
|
||||||
if pathRegexPattern:
|
|
||||||
for subDir in dir.get_directories():
|
|
||||||
subDir = path + subDir + "/"
|
|
||||||
if pathRegex.search(subDir):
|
|
||||||
files.append_array(getFileFromDir(subDir, regexPattern, pathRegexPattern))
|
|
||||||
|
|
||||||
for file in dir.get_files():
|
func death():
|
||||||
if regex.search(file) && pathRegex.search(path):
|
loose.emit()
|
||||||
files.append(path + file)
|
Transition.goto("res://UI/defeat_screen.tscn")
|
||||||
|
resetGame()
|
||||||
return files
|
|
||||||
|
|
|
||||||
22
Globals/GameColor.gd
Normal file
22
Globals/GameColor.gd
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
@tool
|
||||||
|
class_name GameColor
|
||||||
|
|
||||||
|
enum COLOR { HEALTH, ENERGY, SELECTED, SECONDARY, BACKGROUND_PANEL }
|
||||||
|
|
||||||
|
|
||||||
|
const COLOR_HEALTH : Color = Color(0.921569, 0.419608, 0.415686, 1)
|
||||||
|
const COLOR_ENERGY : Color = Color(0.921569, 0.890196, 0.415686, 1)
|
||||||
|
const COLOR_SELECTED : Color = Color(0.721569, 0.600196, 0.355686, 1)
|
||||||
|
const COLOR_SECONDARY : Color = Color(0.341, 0.082, 0.094, 0.0)
|
||||||
|
const COLOR_BACKGROUND_PANEL : Color = Color(0.933, 0.933, 0.933, 1)
|
||||||
|
const COLOR_FALLBACK : Color = Color(0.341176, 0.0823529, 0.0941176, 0)
|
||||||
|
|
||||||
|
|
||||||
|
static func getColor(color : COLOR) -> Color :
|
||||||
|
match color:
|
||||||
|
COLOR.HEALTH : return COLOR_HEALTH
|
||||||
|
COLOR.ENERGY : return COLOR_ENERGY
|
||||||
|
COLOR.SELECTED : return COLOR_SELECTED
|
||||||
|
COLOR.SECONDARY : return COLOR_SECONDARY
|
||||||
|
COLOR.BACKGROUND_PANEL : return COLOR_BACKGROUND_PANEL
|
||||||
|
_: return COLOR_FALLBACK
|
||||||
1
Globals/GameColor.gd.uid
Normal file
1
Globals/GameColor.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://dk2bu20d1fv6a
|
||||||
65
Globals/Helper.gd
Normal file
65
Globals/Helper.gd
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
@tool
|
||||||
|
class_name Helper
|
||||||
|
|
||||||
|
const SCENE_DIR_PATTERN : String = "res://\\w+/(Scenes|Map \\d+)/$"
|
||||||
|
const SCENE_FILE_PATTERN : String = "([^/]*)\\.tscn$"
|
||||||
|
const RESOURCE_FILE_PATTERN : String = "([^/]*)\\.tres$"
|
||||||
|
|
||||||
|
const TOWER_DIR : String = "res://Towers/Scenes/"
|
||||||
|
const ENEMY_DIR : String = "res://Enemies/Scenes/"
|
||||||
|
const LEVEL_DIR : String = "res://Levels/"
|
||||||
|
|
||||||
|
static var towers : Dictionary
|
||||||
|
static var enmies : Dictionary
|
||||||
|
|
||||||
|
enum RESOURCE_TYPE { TOWER, ENEMY, LEVEL }
|
||||||
|
|
||||||
|
## [color=crimson][b]WARNING :[/b] Work only with the [enum RESOURCE_TYPE] [param TOWER][/color]
|
||||||
|
static func preloadSceneInGlobal(property: Dictionary, type: RESOURCE_TYPE) -> void:
|
||||||
|
assert(type == RESOURCE_TYPE.TOWER)
|
||||||
|
|
||||||
|
var files : Array[String] = getPackedScenesPaths(type)
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
var scene = load(file)
|
||||||
|
if scene:
|
||||||
|
property.set(EnhancedResource.getPackedSceneProperty(scene, "type"), scene)
|
||||||
|
|
||||||
|
property.sort()
|
||||||
|
|
||||||
|
|
||||||
|
static func getPackedScenesPaths(type: RESOURCE_TYPE) -> Array[String]:
|
||||||
|
return getFileFromDir(getDirFromType(type), SCENE_FILE_PATTERN, SCENE_DIR_PATTERN)
|
||||||
|
|
||||||
|
|
||||||
|
static func getResourcesPaths(type: RESOURCE_TYPE) -> Array[String]:
|
||||||
|
if type == RESOURCE_TYPE.LEVEL:
|
||||||
|
return getFileFromDir(getDirFromType(type), RESOURCE_FILE_PATTERN, LEVEL_DIR)
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
static func getDirFromType(type: RESOURCE_TYPE) -> String:
|
||||||
|
match type:
|
||||||
|
RESOURCE_TYPE.TOWER: return TOWER_DIR
|
||||||
|
RESOURCE_TYPE.ENEMY: return ENEMY_DIR
|
||||||
|
RESOURCE_TYPE.LEVEL: return LEVEL_DIR
|
||||||
|
_: return ""
|
||||||
|
|
||||||
|
|
||||||
|
static func getFileFromDir(path : String, regexPattern : String, pathRegexPattern : String = "") -> Array[String]:
|
||||||
|
var files : Array[String]
|
||||||
|
var regex : RegEx = RegEx.create_from_string(regexPattern)
|
||||||
|
var pathRegex : RegEx = RegEx.create_from_string(pathRegexPattern)
|
||||||
|
var dir : DirAccess = DirAccess.open(path)
|
||||||
|
|
||||||
|
if pathRegexPattern:
|
||||||
|
for subDir in dir.get_directories():
|
||||||
|
subDir = path + subDir + "/"
|
||||||
|
if pathRegex.search(subDir):
|
||||||
|
files.append_array(getFileFromDir(subDir, regexPattern, pathRegexPattern))
|
||||||
|
|
||||||
|
for file in dir.get_files():
|
||||||
|
if regex.search(file) && pathRegex.search(path):
|
||||||
|
files.append(path + file)
|
||||||
|
|
||||||
|
return files
|
||||||
1
Globals/Helper.gd.uid
Normal file
1
Globals/Helper.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://c2vef7352y3sp
|
||||||
|
|
@ -17,7 +17,7 @@ var enemiesAlive : int = 0
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
EventBus.projectile_shooted.connect(onProjectileShooted)
|
EventBus.projectile_shooted.connect(onProjectileShooted)
|
||||||
EventBus.player_defeated.connect(queue_free)
|
Game.loose.connect(queue_free)
|
||||||
|
|
||||||
|
|
||||||
func onProjectileShooted(projectile: Projectile, startPosition: Vector3) -> void:
|
func onProjectileShooted(projectile: Projectile, startPosition: Vector3) -> void:
|
||||||
|
|
@ -106,6 +106,6 @@ func addMap(mapScene : PackedScene) -> void:
|
||||||
add_child(map)
|
add_child(map)
|
||||||
level = map.level
|
level = map.level
|
||||||
paths = map.paths.get_children()
|
paths = map.paths.get_children()
|
||||||
TheCube.money = level.startingMoney
|
Game.money = level.startingMoney
|
||||||
EventBus.allowedTowerHasChange.emit(level.allowedTowers)
|
Game.allowedTowers = level.allowedTowers
|
||||||
spawnNextWave()
|
spawnNextWave()
|
||||||
|
|
|
||||||
|
|
@ -1,42 +1,6 @@
|
||||||
extends StaticBody3D
|
extends StaticBody3D
|
||||||
class_name TheCube
|
class_name TheCube
|
||||||
|
|
||||||
@export var max_health : int = 50
|
|
||||||
|
|
||||||
var health : int = max_health :
|
|
||||||
set(value):
|
|
||||||
health = value
|
|
||||||
EventBus.cube_integrity_changed.emit(health)
|
|
||||||
if health <= 0:
|
|
||||||
death()
|
|
||||||
|
|
||||||
|
|
||||||
static var money : int :
|
|
||||||
set(value):
|
|
||||||
money = value
|
|
||||||
EventBus.money_changed.emit(money)
|
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
|
||||||
EventBus.player_has_won.connect(win)
|
|
||||||
EventBus.cube_ready.emit.call_deferred(self)
|
|
||||||
|
|
||||||
|
|
||||||
func take_damage(damage: int) -> void:
|
func take_damage(damage: int) -> void:
|
||||||
health -= damage
|
Game.health -= damage
|
||||||
|
|
||||||
|
|
||||||
func win():
|
|
||||||
Transition.goto("res://UI/win_screen.tscn")
|
|
||||||
|
|
||||||
|
|
||||||
static func spendMoney(amount : int) -> bool:
|
|
||||||
if money > amount:
|
|
||||||
money -= amount
|
|
||||||
return true
|
|
||||||
return false
|
|
||||||
|
|
||||||
|
|
||||||
static func death():
|
|
||||||
EventBus.player_defeated.emit()
|
|
||||||
Transition.goto("res://UI/defeat_screen.tscn")
|
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,15 @@
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://trg7ag3dqr2l" path="res://Towers/tower.tscn" id="1_lr28p"]
|
[ext_resource type="PackedScene" uid="uid://trg7ag3dqr2l" path="res://Towers/tower.tscn" id="1_lr28p"]
|
||||||
[ext_resource type="Texture2D" uid="uid://c4ir6y45pchpl" path="res://Assets/Icones/seahorse.svg" id="3_4yx0u"]
|
[ext_resource type="Texture2D" uid="uid://c4ir6y45pchpl" path="res://Assets/Icones/seahorse.svg" id="3_4yx0u"]
|
||||||
[ext_resource type="Script" uid="uid://bg0x4egeu17qb" path="res://Upgrades/Tower/TowerUpgrade.gd" id="4_4yx0u"]
|
|
||||||
|
[sub_resource type="ViewportTexture" id="ViewportTexture_rcx4a"]
|
||||||
|
viewport_path = NodePath("EnergyBar3D/SubViewport")
|
||||||
|
|
||||||
[node name="Alex" instance=ExtResource("1_lr28p")]
|
[node name="Alex" instance=ExtResource("1_lr28p")]
|
||||||
tower_name = "Alex"
|
tower_name = "Alex"
|
||||||
tower_type = 6
|
type = 6
|
||||||
icone = ExtResource("3_4yx0u")
|
icone = ExtResource("3_4yx0u")
|
||||||
bio = ""
|
bio = ""
|
||||||
tower_shop = Array[ExtResource("4_4yx0u")]([])
|
|
||||||
|
|
||||||
[node name="Sprite3D" parent="." index="5"]
|
[node name="Sprite3D" parent="." index="5"]
|
||||||
frame = 30
|
frame = 30
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ radius = 3.0
|
||||||
|
|
||||||
[node name="Aline" instance=ExtResource("1_gvvig")]
|
[node name="Aline" instance=ExtResource("1_gvvig")]
|
||||||
tower_name = "Aline"
|
tower_name = "Aline"
|
||||||
tower_type = 2
|
type = 2
|
||||||
icone = ExtResource("3_6h033")
|
icone = ExtResource("3_6h033")
|
||||||
bio = ""
|
bio = ""
|
||||||
price = 150
|
price = 150
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ radius = 4.0
|
||||||
|
|
||||||
[node name="Evan" instance=ExtResource("1_yctfx")]
|
[node name="Evan" instance=ExtResource("1_yctfx")]
|
||||||
tower_name = "Evan"
|
tower_name = "Evan"
|
||||||
tower_type = 5
|
type = 5
|
||||||
icone = ExtResource("2_5uh04")
|
icone = ExtResource("2_5uh04")
|
||||||
bio = ""
|
bio = ""
|
||||||
projectileRessource = SubResource("Resource_mf185")
|
projectileRessource = SubResource("Resource_mf185")
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
[node name="Geraldine" instance=ExtResource("1_bw8ui")]
|
[node name="Geraldine" instance=ExtResource("1_bw8ui")]
|
||||||
tower_name = "Geraldine"
|
tower_name = "Geraldine"
|
||||||
tower_type = 7
|
type = 7
|
||||||
icone = ExtResource("2_1pop4")
|
icone = ExtResource("2_1pop4")
|
||||||
bio = ""
|
bio = ""
|
||||||
tower_shop = Array[ExtResource("4_nxn76")]([])
|
tower_shop = Array[ExtResource("4_nxn76")]([])
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ radius = 10.0
|
||||||
|
|
||||||
[node name="Maxence" instance=ExtResource("1_laam8")]
|
[node name="Maxence" instance=ExtResource("1_laam8")]
|
||||||
tower_name = "Maxence"
|
tower_name = "Maxence"
|
||||||
tower_type = 3
|
type = 3
|
||||||
icone = ExtResource("2_sciv6")
|
icone = ExtResource("2_sciv6")
|
||||||
bio = ""
|
bio = ""
|
||||||
price = 200
|
price = 200
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ viewport_path = NodePath("EnergyBar3D/SubViewport")
|
||||||
|
|
||||||
[node name="Pierre" instance=ExtResource("1_s6dfo")]
|
[node name="Pierre" instance=ExtResource("1_s6dfo")]
|
||||||
tower_name = "Pierre"
|
tower_name = "Pierre"
|
||||||
tower_type = 1
|
type = 1
|
||||||
icone = ExtResource("2_lcjqw")
|
icone = ExtResource("2_lcjqw")
|
||||||
projectileRessource = SubResource("Resource_r52mr")
|
projectileRessource = SubResource("Resource_r52mr")
|
||||||
towerRange = SubResource("SphereShape3D_c55ds")
|
towerRange = SubResource("SphereShape3D_c55ds")
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ radius = 4.0
|
||||||
|
|
||||||
[node name="Victoria" instance=ExtResource("1_ki73m")]
|
[node name="Victoria" instance=ExtResource("1_ki73m")]
|
||||||
tower_name = "Victoria"
|
tower_name = "Victoria"
|
||||||
tower_type = 4
|
type = 4
|
||||||
icone = ExtResource("2_n34tq")
|
icone = ExtResource("2_n34tq")
|
||||||
bio = ""
|
bio = ""
|
||||||
projectileRessource = SubResource("Resource_c1yif")
|
projectileRessource = SubResource("Resource_c1yif")
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ enum TYPE { NONE, PIERRE, ALINE, MAXENCE, VICTORIA, EVAN, ALEX, GERALDINE }
|
||||||
var projectileScene : PackedScene = preload("res://Towers/Projectiles/projectile.tscn")
|
var projectileScene : PackedScene = preload("res://Towers/Projectiles/projectile.tscn")
|
||||||
|
|
||||||
@export var tower_name : String = "None"
|
@export var tower_name : String = "None"
|
||||||
@export var tower_type : TYPE
|
@export var type : TYPE
|
||||||
@export_group("Base data")
|
@export_group("Base data")
|
||||||
@export var icone : Texture2D
|
@export var icone : Texture2D
|
||||||
@export var bio : String
|
@export var bio : String
|
||||||
|
|
@ -23,7 +23,10 @@ var projectileScene : PackedScene = preload("res://Towers/Projectiles/projectile
|
||||||
action_cooldown = clamp(value, 0.3, 999)
|
action_cooldown = clamp(value, 0.3, 999)
|
||||||
|
|
||||||
@export_group("Energy")
|
@export_group("Energy")
|
||||||
@export var max_energy : float = 100.0
|
@export var max_energy : float = 100.0 :
|
||||||
|
set(value):
|
||||||
|
max_energy = value
|
||||||
|
towerChange.call_deferred()
|
||||||
@export var energy_regen : float = 10.0
|
@export var energy_regen : float = 10.0
|
||||||
@export var energy_cost : float = 50.0
|
@export var energy_cost : float = 50.0
|
||||||
|
|
||||||
|
|
@ -36,12 +39,12 @@ var projectileScene : PackedScene = preload("res://Towers/Projectiles/projectile
|
||||||
@onready var energyRecoveryCooldown : Timer = $EnergyRecoveryCooldown
|
@onready var energyRecoveryCooldown : Timer = $EnergyRecoveryCooldown
|
||||||
|
|
||||||
|
|
||||||
var energy : float = 0:
|
var energy : float = max_energy:
|
||||||
set(value):
|
set(value):
|
||||||
energyBar.value = value
|
energyBar.value = value
|
||||||
energy = clampf(value, 0.0, max_energy)
|
energy = clampf(value, 0.0, max_energy)
|
||||||
is_exhausted = energy < energy_cost
|
is_exhausted = energy < energy_cost
|
||||||
EventBus.energy_has_changed.emit(self)
|
EventBus.tower_changed.emit(self)
|
||||||
|
|
||||||
var availableTargets : Array[Enemy]
|
var availableTargets : Array[Enemy]
|
||||||
var target : Enemy
|
var target : Enemy
|
||||||
|
|
@ -57,16 +60,13 @@ var builded : bool = false
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
EventBus.tower_upgraded.connect(apply_upgrade)
|
EventBus.tower_upgraded.connect(apply_upgrade)
|
||||||
EventBus.energy_has_changed.emit(self)
|
|
||||||
energyRecoveryCooldown.timeout.connect(func(): energy += energy_regen)
|
energyRecoveryCooldown.timeout.connect(func(): energy += energy_regen)
|
||||||
# WARNING : Prevent .tscn file to be modified by the load of the scene in editor
|
# WARNING : Prevent .tscn file to be modified by the load of the scene in editor
|
||||||
if not Engine.is_editor_hint():
|
if not Engine.is_editor_hint():
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
|
collision_mask = 0
|
||||||
$PriceTag.text = str(price) + " €"
|
$PriceTag.text = str(price) + " €"
|
||||||
energy = max_energy
|
|
||||||
$Range/Range.shape = towerRange
|
$Range/Range.shape = towerRange
|
||||||
energyBar.value = energy
|
|
||||||
energyBar.max_value = max_energy
|
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
|
|
@ -79,7 +79,7 @@ func get_available_upgrades() -> Array[TowerUpgrade]:
|
||||||
|
|
||||||
|
|
||||||
func apply_upgrade(towerType : Tower.TYPE, upgrade : TowerUpgrade):
|
func apply_upgrade(towerType : Tower.TYPE, upgrade : TowerUpgrade):
|
||||||
if towerType == tower_type && upgrade.canUpgrade():
|
if towerType == type && upgrade.canUpgrade():
|
||||||
upgrade.upgrade(self)
|
upgrade.upgrade(self)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -95,11 +95,15 @@ func resting() -> void:
|
||||||
visible = false
|
visible = false
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
collision_mask = 0
|
collision_mask = 0
|
||||||
|
|
||||||
|
if builded:
|
||||||
energyRecoveryCooldown.start()
|
energyRecoveryCooldown.start()
|
||||||
|
|
||||||
|
|
||||||
func in_action() -> void:
|
func in_action() -> void:
|
||||||
visible = true
|
visible = true
|
||||||
|
|
||||||
|
if builded:
|
||||||
collision_layer = 0b100
|
collision_layer = 0b100
|
||||||
collision_mask = 0b100
|
collision_mask = 0b100
|
||||||
energyRecoveryCooldown.stop()
|
energyRecoveryCooldown.stop()
|
||||||
|
|
@ -113,16 +117,24 @@ func choose_target() -> void:
|
||||||
|
|
||||||
|
|
||||||
func build() -> bool:
|
func build() -> bool:
|
||||||
if builded || not TheCube.spendMoney(price):
|
if builded || not Game.spendMoney(price):
|
||||||
return false
|
return false
|
||||||
|
|
||||||
sprite.modulate = "ffffffff"
|
sprite.modulate = "ffffffff"
|
||||||
|
energyBar.value = energy
|
||||||
|
energyBar.max_value = max_energy
|
||||||
|
$EnergyBar3D.visible = true
|
||||||
builded = true
|
builded = true
|
||||||
$PriceTag.visible = false
|
$PriceTag.visible = false
|
||||||
EventBus.tower_builded.emit(self)
|
EventBus.tower_changed.emit(self)
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
|
||||||
|
func towerChange() -> void:
|
||||||
|
energyBar.max_value = max_energy
|
||||||
|
EventBus.tower_changed.emit(self)
|
||||||
|
|
||||||
|
|
||||||
func _on_range_body_entered(body: Node3D) -> void:
|
func _on_range_body_entered(body: Node3D) -> void:
|
||||||
if body is Enemy:
|
if body is Enemy:
|
||||||
availableTargets.append(body)
|
availableTargets.append(body)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ class_name TowerManager
|
||||||
@onready var selection_icon : Sprite3D = $Sprite3DSelection
|
@onready var selection_icon : Sprite3D = $Sprite3DSelection
|
||||||
|
|
||||||
|
|
||||||
var towers : Dictionary
|
|
||||||
var usedLocations : Dictionary
|
var usedLocations : Dictionary
|
||||||
var selectedTile : Vector3
|
var selectedTile : Vector3
|
||||||
var selected_tower : Tower
|
var selected_tower : Tower
|
||||||
|
|
@ -25,13 +24,13 @@ func _process(_delta: float) -> void:
|
||||||
tower = usedLocations.get(collider.global_position.round())
|
tower = usedLocations.get(collider.global_position.round())
|
||||||
|
|
||||||
if Input.is_action_just_pressed("build"):
|
if Input.is_action_just_pressed("build"):
|
||||||
if not collider is GameTile:
|
if not collider is GameTile || tower == selected_tower:
|
||||||
return
|
return
|
||||||
|
|
||||||
if isTileFree(collider):
|
if isTileFree(collider):
|
||||||
placeTower()
|
placeTower()
|
||||||
elif tower && selected_tower.builded:
|
elif tower && selected_tower && selected_tower.builded:
|
||||||
EventBus.tower_selected.emit(tower.tower_type)
|
EventBus.tower_selected.emit(tower.type)
|
||||||
|
|
||||||
if Input.is_action_just_pressed("rest"):
|
if Input.is_action_just_pressed("rest"):
|
||||||
if tower:
|
if tower:
|
||||||
|
|
@ -93,7 +92,7 @@ func moveTower(tower: Tower, toPosition: Vector3) -> void:
|
||||||
if toPosition == Vector3.INF:
|
if toPosition == Vector3.INF:
|
||||||
tower.resting()
|
tower.resting()
|
||||||
else:
|
else:
|
||||||
usedLocations.set(global_position.round(), tower)
|
usedLocations.set(toPosition.round(), tower)
|
||||||
tower.global_position = toPosition
|
tower.global_position = toPosition
|
||||||
tower.in_action()
|
tower.in_action()
|
||||||
|
|
||||||
|
|
@ -105,30 +104,27 @@ func selectTower(towerType: Tower.TYPE):
|
||||||
if selected_tower && not selected_tower.builded:
|
if selected_tower && not selected_tower.builded:
|
||||||
selected_tower.visible = false
|
selected_tower.visible = false
|
||||||
|
|
||||||
if selected_tower && selected_tower.tower_type == towerType || towerType == Tower.TYPE.NONE:
|
if selected_tower && selected_tower.type == towerType || towerType == Tower.TYPE.NONE:
|
||||||
selected_tower = null
|
selected_tower = null
|
||||||
elif towers.has(towerType):
|
elif Game.towers.has(towerType):
|
||||||
selected_tower = towers.get(towerType)
|
selected_tower = Game.towers.get(towerType)
|
||||||
|
if not selected_tower.builded:
|
||||||
selected_tower.visible = true
|
selected_tower.visible = true
|
||||||
else:
|
else:
|
||||||
selected_tower = Game.towers.get(towerType).instantiate()
|
selected_tower = Game.initTower(towerType)
|
||||||
towers.set(towerType, selected_tower)
|
|
||||||
add_child(selected_tower)
|
add_child(selected_tower)
|
||||||
|
|
||||||
|
|
||||||
func emitTeamChanges() -> void:
|
func emitTeamChanges() -> void:
|
||||||
var team_in_action : int = 0
|
|
||||||
var team_in_rest : int = 0
|
var team_in_rest : int = 0
|
||||||
var tower_count : int = 0
|
var tower_count : int = 0
|
||||||
for towerType in towers:
|
for towerType in Game.towers:
|
||||||
var tower : Tower = towers[towerType]
|
var tower : Tower = Game.towers[towerType]
|
||||||
if tower.builded:
|
if tower.builded:
|
||||||
tower_count += 1
|
tower_count += 1
|
||||||
if tower.is_rest:
|
if tower.is_rest:
|
||||||
team_in_rest += 1
|
team_in_rest += 1
|
||||||
else:
|
|
||||||
team_in_action += 1
|
|
||||||
|
|
||||||
EventBus.team_in_action_changed.emit(team_in_action)
|
EventBus.team_in_action_changed.emit(usedLocations.size())
|
||||||
EventBus.team_in_rest_changed.emit(team_in_rest)
|
EventBus.team_in_rest_changed.emit(team_in_rest)
|
||||||
EventBus.tower_count_changed.emit(tower_count)
|
EventBus.tower_count_changed.emit(tower_count)
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ frame = 75
|
||||||
|
|
||||||
[node name="EnergyBar3D" type="Sprite3D" parent="."]
|
[node name="EnergyBar3D" type="Sprite3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
visible = false
|
||||||
billboard = 2
|
billboard = 2
|
||||||
texture = SubResource("ViewportTexture_jv31o")
|
texture = SubResource("ViewportTexture_jv31o")
|
||||||
|
|
||||||
|
|
@ -83,7 +84,7 @@ show_percentage = false
|
||||||
metadata/_custom_type_script = "uid://blnmjxmusrsa7"
|
metadata/_custom_type_script = "uid://blnmjxmusrsa7"
|
||||||
|
|
||||||
[node name="PriceTag" type="Label3D" parent="."]
|
[node name="PriceTag" type="Label3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
billboard = 2
|
billboard = 2
|
||||||
|
|
||||||
[connection signal="body_entered" from="Range" to="." method="_on_range_body_entered"]
|
[connection signal="body_entered" from="Range" to="." method="_on_range_body_entered"]
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,14 @@ extends StyleBoxFlat
|
||||||
class_name GameStyleBoxFlat
|
class_name GameStyleBoxFlat
|
||||||
|
|
||||||
|
|
||||||
@export var color : Game.COLOR :
|
@export var color : GameColor.COLOR :
|
||||||
set(value):
|
set(value):
|
||||||
color = value
|
color = value
|
||||||
bg_color = Game.getColor(color)
|
bg_color = GameColor.getColor(color)
|
||||||
|
|
||||||
|
|
||||||
static func createWithColor(_color : Game.COLOR) -> GameStyleBoxFlat:
|
static func createWithColor(_color : GameColor.COLOR) -> GameStyleBoxFlat:
|
||||||
var instance : GameStyleBoxFlat = GameStyleBoxFlat.new()
|
var instance : GameStyleBoxFlat = GameStyleBoxFlat.new()
|
||||||
instance.bg_color = Game.getColor(_color)
|
instance.bg_color = GameColor.getColor(_color)
|
||||||
|
|
||||||
return instance
|
return instance
|
||||||
|
|
|
||||||
31
UI/TowerPanel.gd
Normal file
31
UI/TowerPanel.gd
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
extends HBoxContainer
|
||||||
|
|
||||||
|
|
||||||
|
var tower : Tower
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
EventBus.tower_selected.connect(onTowerSelected)
|
||||||
|
EventBus.tower_changed.connect(onEnergyChanged)
|
||||||
|
|
||||||
|
|
||||||
|
func onTowerSelected(towerType : Tower.TYPE) -> void:
|
||||||
|
if towerType == Tower.TYPE.NONE:
|
||||||
|
visible = false
|
||||||
|
tower = null
|
||||||
|
return
|
||||||
|
return
|
||||||
|
|
||||||
|
tower = Game.getTower(towerType)
|
||||||
|
%TowerIcon.texture = tower.icone
|
||||||
|
%TowerName.text = tower.tower_name
|
||||||
|
%TowerDamage.text = str(tower.projectileRessource.damage)
|
||||||
|
%TowerCooldown.text = str(tower.action_cooldown)
|
||||||
|
%TowerBio.text = tower.bio
|
||||||
|
onEnergyChanged(tower)
|
||||||
|
visible = true
|
||||||
|
|
||||||
|
|
||||||
|
func onEnergyChanged(_tower : Tower) -> void:
|
||||||
|
if _tower == tower:
|
||||||
|
%TowerEnergy.text = "%d/%d" % [ str(tower.energy), str(tower.max_energy) ]
|
||||||
1
UI/TowerPanel.gd.uid
Normal file
1
UI/TowerPanel.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://s4t3oa4v87xe
|
||||||
60
UI/gui.gd
60
UI/gui.gd
|
|
@ -1,7 +1,7 @@
|
||||||
@tool
|
@tool
|
||||||
extends Control
|
extends Control
|
||||||
|
|
||||||
const BUTTON_QTY = 8
|
const BUTTON_QTY = 4
|
||||||
|
|
||||||
const guiButton : PackedScene = preload("res://UI/gui_button.tscn")
|
const guiButton : PackedScene = preload("res://UI/gui_button.tscn")
|
||||||
|
|
||||||
|
|
@ -11,34 +11,21 @@ const guiButton : PackedScene = preload("res://UI/gui_button.tscn")
|
||||||
@onready var towerOnTerrainLabel = %LabelTowerOnTerrain
|
@onready var towerOnTerrainLabel = %LabelTowerOnTerrain
|
||||||
@onready var cubeIntegrity = %CubeIntegrity
|
@onready var cubeIntegrity = %CubeIntegrity
|
||||||
|
|
||||||
var theCube : TheCube
|
|
||||||
var allowedTowers : Array[Tower.TYPE]
|
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
addTowerButtonNodes()
|
addTowerButtonNodes()
|
||||||
EventBus.cube_ready.connect(cubeReady)
|
|
||||||
EventBus.allowedTowerHasChange.connect(allowedTowerHasChange)
|
|
||||||
EventBus.money_changed.connect(func(amount): moneyLabel.text = str(amount) + " €")
|
|
||||||
EventBus.team_in_rest_changed.connect(func(count): towerInCubeLabel.text = str(count) + " x Zzz")
|
EventBus.team_in_rest_changed.connect(func(count): towerInCubeLabel.text = str(count) + " x Zzz")
|
||||||
EventBus.team_in_action_changed.connect(func(count): towerOnTerrainLabel.text = str(count) + " in action")
|
EventBus.team_in_action_changed.connect(func(count): towerOnTerrainLabel.text = str(count) + " in action")
|
||||||
EventBus.cube_integrity_changed.connect(updateCubeLife)
|
Game.allowed_tower_has_change.connect(addTowerButtonNodes)
|
||||||
|
Game.cube_integrity_changed.connect(func(): cubeIntegrity.value = Game.healthPercentage)
|
||||||
|
Game.money_changed.connect(func(): moneyLabel.text = str(Game.money) + " €")
|
||||||
|
cubeIntegrity.max_value = Game.max_health
|
||||||
|
|
||||||
|
|
||||||
func _on_button_cube_pressed() -> void:
|
func _on_button_cube_pressed() -> void:
|
||||||
pass # Replace with function body.
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
|
||||||
func cubeReady(cube: TheCube) -> void:
|
|
||||||
theCube = cube
|
|
||||||
cubeIntegrity.max_value = theCube.max_health
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func updateCubeLife(newHealth : int) -> void:
|
|
||||||
cubeIntegrity.value = float(newHealth) / float(theCube.max_health) * 100.0
|
|
||||||
|
|
||||||
|
|
||||||
func quitLevel() -> void:
|
func quitLevel() -> void:
|
||||||
Transition.goto("res://UI/start_menu.tscn")
|
Transition.goto("res://UI/start_menu.tscn")
|
||||||
|
|
||||||
|
|
@ -47,36 +34,29 @@ func quitGame() -> void:
|
||||||
get_tree().quit()
|
get_tree().quit()
|
||||||
|
|
||||||
|
|
||||||
func allowedTowerHasChange(_allowedTowers : Array[Tower.TYPE]) -> void:
|
|
||||||
allowedTowers = _allowedTowers
|
|
||||||
if is_node_ready():
|
|
||||||
addTowerButtonNodes()
|
|
||||||
|
|
||||||
|
|
||||||
func addTowerButtonNodes() -> void:
|
func addTowerButtonNodes() -> void:
|
||||||
for node in buttonContainer.get_children():
|
for node in buttonContainer.get_children():
|
||||||
if node.has_meta("dynamicButton"):
|
if node.has_meta("dynamicButton"):
|
||||||
node.queue_free()
|
node.queue_free()
|
||||||
|
|
||||||
var additionalPlaceholder : int = 0
|
var additionalPlaceholder : int = 0
|
||||||
for towerType in Game.towers:
|
for towerType : int in Tower.TYPE.values() :
|
||||||
if not Engine.is_editor_hint() && not allowedTowers.has(towerType):
|
if towerType && (Engine.is_editor_hint() || Game.allowedTowers.has(towerType)):
|
||||||
additionalPlaceholder += 1
|
|
||||||
else:
|
|
||||||
createTowerButton(towerType)
|
createTowerButton(towerType)
|
||||||
|
|
||||||
for i in BUTTON_QTY - Game.towers.size() + additionalPlaceholder:
|
for i in BUTTON_QTY - (buttonContainer.get_children().size() % BUTTON_QTY):
|
||||||
var placeholderBtn : Button = Button.new()
|
createTowerButton(Tower.TYPE.NONE)
|
||||||
placeholderBtn.set_meta("dynamicButton", true)
|
|
||||||
placeholderBtn.custom_minimum_size = Vector2(80, 80)
|
|
||||||
buttonContainer.add_child(placeholderBtn)
|
|
||||||
|
|
||||||
|
|
||||||
func createTowerButton(towerType : Tower.TYPE) -> void:
|
func createTowerButton(towerType : Tower.TYPE) -> void:
|
||||||
var towerBtn : GuiButton = guiButton.instantiate()
|
var btn : GuiButton = guiButton.instantiate()
|
||||||
var tower : PackedScene = Game.towers.get(towerType)
|
btn.set_meta("dynamicButton", true)
|
||||||
towerBtn.towerType = towerType
|
|
||||||
towerBtn.tooltip_text = str(EnhancedResource.getPackedSceneProperty(tower, "name"))
|
if towerType:
|
||||||
towerBtn.texture = EnhancedResource.getPackedSceneProperty(tower, "icone")
|
var tower : PackedScene = Game.towerPackedScenes.get(towerType)
|
||||||
towerBtn.set_meta("dynamicButton", true)
|
btn.towerType = towerType
|
||||||
buttonContainer.add_child(towerBtn)
|
btn.tooltip_text = str(EnhancedResource.getPackedSceneProperty(tower, "name"))
|
||||||
|
btn.texture = EnhancedResource.getPackedSceneProperty(tower, "icone")
|
||||||
|
else:
|
||||||
|
btn.disabled = true
|
||||||
|
buttonContainer.add_child(btn)
|
||||||
|
|
|
||||||
75
UI/gui.tscn
75
UI/gui.tscn
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=14 format=3 uid="uid://p6a6rb7sgeqd"]
|
[gd_scene load_steps=16 format=3 uid="uid://p6a6rb7sgeqd"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bhylcok1l6eke" path="res://UI/gui.gd" id="2_sac4j"]
|
[ext_resource type="Script" uid="uid://bhylcok1l6eke" path="res://UI/gui.gd" id="2_sac4j"]
|
||||||
[ext_resource type="Script" uid="uid://blnmjxmusrsa7" path="res://UI/GameStyleBoxFlat.gd" id="4_h4fn5"]
|
[ext_resource type="Script" uid="uid://blnmjxmusrsa7" path="res://UI/GameStyleBoxFlat.gd" id="4_h4fn5"]
|
||||||
|
|
@ -7,8 +7,10 @@
|
||||||
[ext_resource type="PackedScene" uid="uid://dqb5o8w7u50hc" path="res://UI/gui_button.tscn" id="7_parkk"]
|
[ext_resource type="PackedScene" uid="uid://dqb5o8w7u50hc" path="res://UI/gui_button.tscn" id="7_parkk"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dfnf26suc8yb6" path="res://Assets/Icones/sideswipe.svg" id="8_ay13l"]
|
[ext_resource type="Texture2D" uid="uid://dfnf26suc8yb6" path="res://Assets/Icones/sideswipe.svg" id="8_ay13l"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dootdihg7gkoj" path="res://Assets/Icones/exit-door.svg" id="8_decjp"]
|
[ext_resource type="Texture2D" uid="uid://dootdihg7gkoj" path="res://Assets/Icones/exit-door.svg" id="8_decjp"]
|
||||||
|
[ext_resource type="Script" uid="uid://s4t3oa4v87xe" path="res://UI/TowerPanel.gd" id="9_3lugd"]
|
||||||
[ext_resource type="Script" uid="uid://dyhtr6g7kd1g2" path="res://UI/gui_button.gd" id="9_h4fn5"]
|
[ext_resource type="Script" uid="uid://dyhtr6g7kd1g2" path="res://UI/gui_button.gd" id="9_h4fn5"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b4m5ejfdrm8s0" path="res://Assets/Icones/power-button.svg" id="9_reygo"]
|
[ext_resource type="Texture2D" uid="uid://b4m5ejfdrm8s0" path="res://Assets/Icones/power-button.svg" id="9_reygo"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://uptdcefxlv4c" path="res://Assets/Icones/ppdf_bio_image_placeholder_2.png" id="10_parkk"]
|
||||||
|
|
||||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_h4fn5"]
|
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_h4fn5"]
|
||||||
bg_color = Color(0.933333, 0.933333, 0.933333, 1)
|
bg_color = Color(0.933333, 0.933333, 0.933333, 1)
|
||||||
|
|
@ -102,6 +104,7 @@ size_flags_vertical = 1
|
||||||
tooltip_text = "Les points d'intégrités du Cube. S'ils arrivent à 0, fin de la partie."
|
tooltip_text = "Les points d'intégrités du Cube. S'ils arrivent à 0, fin de la partie."
|
||||||
theme_override_styles/background = SubResource("StyleBoxFlat_nxmp4")
|
theme_override_styles/background = SubResource("StyleBoxFlat_nxmp4")
|
||||||
theme_override_styles/fill = SubResource("StyleBoxFlat_epgl5")
|
theme_override_styles/fill = SubResource("StyleBoxFlat_epgl5")
|
||||||
|
max_value = 50.0
|
||||||
value = 50.0
|
value = 50.0
|
||||||
fill_mode = 3
|
fill_mode = 3
|
||||||
show_percentage = false
|
show_percentage = false
|
||||||
|
|
@ -148,10 +151,11 @@ layout_mode = 1
|
||||||
anchors_preset = 2
|
anchors_preset = 2
|
||||||
anchor_top = 1.0
|
anchor_top = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
offset_top = -268.0
|
offset_top = -246.0
|
||||||
offset_right = 552.0
|
offset_right = 353.0
|
||||||
grow_vertical = 0
|
grow_vertical = 0
|
||||||
theme_override_constants/separation = 0
|
theme_override_constants/separation = 0
|
||||||
|
script = ExtResource("9_3lugd")
|
||||||
|
|
||||||
[node name="InfoPanel" type="PanelContainer" parent="TowerInfoPanel"]
|
[node name="InfoPanel" type="PanelContainer" parent="TowerInfoPanel"]
|
||||||
custom_minimum_size = Vector2(200, 0)
|
custom_minimum_size = Vector2(200, 0)
|
||||||
|
|
@ -168,17 +172,41 @@ theme_override_constants/margin_bottom = 10
|
||||||
[node name="VBoxContainer" type="VBoxContainer" parent="TowerInfoPanel/InfoPanel/MarginContainer"]
|
[node name="VBoxContainer" type="VBoxContainer" parent="TowerInfoPanel/InfoPanel/MarginContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
[node name="LabelMoney" type="Label" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer"]
|
[node name="HBoxContainer" type="HBoxContainer" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/separation = 20
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer/HBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="TowerName" type="Label" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_vertical = 1
|
size_flags_vertical = 1
|
||||||
tooltip_text = "La thune."
|
tooltip_text = "La thune."
|
||||||
mouse_filter = 1
|
mouse_filter = 1
|
||||||
theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1)
|
theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1)
|
||||||
text = "1'000'000 €"
|
text = "Name"
|
||||||
horizontal_alignment = 2
|
horizontal_alignment = 2
|
||||||
vertical_alignment = 2
|
vertical_alignment = 2
|
||||||
|
|
||||||
[node name="LabelTowerInCube" type="Label" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer"]
|
[node name="TowerEnergy" type="Label" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer/HBoxContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
tooltip_text = "Le nombre de héros en action sur le terrain !"
|
||||||
|
mouse_filter = 1
|
||||||
|
theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1)
|
||||||
|
text = "0/0"
|
||||||
|
horizontal_alignment = 2
|
||||||
|
|
||||||
|
[node name="TowerIcon" type="TextureRect" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer/HBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
texture = ExtResource("10_parkk")
|
||||||
|
expand_mode = 3
|
||||||
|
|
||||||
|
[node name="TowerDamage" type="Label" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
tooltip_text = "Le nombre de héros disponible dans le cube !"
|
tooltip_text = "Le nombre de héros disponible dans le cube !"
|
||||||
mouse_filter = 1
|
mouse_filter = 1
|
||||||
|
|
@ -186,7 +214,8 @@ theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1)
|
||||||
text = "0"
|
text = "0"
|
||||||
horizontal_alignment = 2
|
horizontal_alignment = 2
|
||||||
|
|
||||||
[node name="LabelTowerOnTerrain" type="Label" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer"]
|
[node name="TowerCooldown" type="Label" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
tooltip_text = "Le nombre de héros en action sur le terrain !"
|
tooltip_text = "Le nombre de héros en action sur le terrain !"
|
||||||
mouse_filter = 1
|
mouse_filter = 1
|
||||||
|
|
@ -194,26 +223,33 @@ theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1)
|
||||||
text = "0"
|
text = "0"
|
||||||
horizontal_alignment = 2
|
horizontal_alignment = 2
|
||||||
|
|
||||||
[node name="TowerInfoPanel" type="PanelContainer" parent="TowerInfoPanel"]
|
[node name="TowerBio" type="Label" parent="TowerInfoPanel/InfoPanel/MarginContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
tooltip_text = "Le nombre de héros en action sur le terrain !"
|
||||||
|
mouse_filter = 1
|
||||||
|
theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1)
|
||||||
|
text = "0"
|
||||||
|
horizontal_alignment = 2
|
||||||
|
|
||||||
|
[node name="UpgradeContainer" type="PanelContainer" parent="TowerInfoPanel"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
|
||||||
size_flags_vertical = 8
|
|
||||||
theme_override_styles/panel = SubResource("StyleBoxFlat_3lugd")
|
theme_override_styles/panel = SubResource("StyleBoxFlat_3lugd")
|
||||||
|
|
||||||
[node name="MarginContainer" type="MarginContainer" parent="TowerInfoPanel/TowerInfoPanel"]
|
[node name="MarginContainer" type="MarginContainer" parent="TowerInfoPanel/UpgradeContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_constants/margin_left = 10
|
theme_override_constants/margin_left = 10
|
||||||
theme_override_constants/margin_top = 10
|
theme_override_constants/margin_top = 10
|
||||||
theme_override_constants/margin_right = 10
|
theme_override_constants/margin_right = 10
|
||||||
theme_override_constants/margin_bottom = 10
|
theme_override_constants/margin_bottom = 10
|
||||||
|
|
||||||
[node name="ButtonContainer" type="GridContainer" parent="TowerInfoPanel/TowerInfoPanel/MarginContainer"]
|
[node name="ButtonContainer" type="GridContainer" parent="TowerInfoPanel/UpgradeContainer/MarginContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 0
|
size_flags_horizontal = 0
|
||||||
size_flags_vertical = 0
|
size_flags_vertical = 0
|
||||||
columns = 4
|
columns = 4
|
||||||
|
|
||||||
[node name="Button" type="Button" parent="TowerInfoPanel/TowerInfoPanel/MarginContainer/ButtonContainer"]
|
[node name="Button" type="Button" parent="TowerInfoPanel/UpgradeContainer/MarginContainer/ButtonContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 20
|
theme_override_font_sizes/font_size = 20
|
||||||
text = "Améliorer"
|
text = "Améliorer"
|
||||||
|
|
@ -224,9 +260,10 @@ metadata/_custom_type_script = "uid://dyhtr6g7kd1g2"
|
||||||
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/QuitLevelBtn" to="." method="quitLevel"]
|
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/QuitLevelBtn" to="." method="quitLevel"]
|
||||||
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/QuitGameBtn" to="." method="quitGame"]
|
[connection signal="pressed" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/QuitGameBtn" to="." method="quitGame"]
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/TowerButton" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/TowerButton" method="buttonToggled"]
|
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/TowerButton" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/TowerButton" method="buttonToggled"]
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65726" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65726" method="buttonToggled"]
|
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32868" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32868" method="buttonToggled"]
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65727" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65727" method="buttonToggled"]
|
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32869" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32869" method="buttonToggled"]
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65728" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65728" method="buttonToggled"]
|
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32870" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32870" method="buttonToggled"]
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65729" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65729" method="buttonToggled"]
|
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32871" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32871" method="buttonToggled"]
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65730" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65730" method="buttonToggled"]
|
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32872" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32872" method="buttonToggled"]
|
||||||
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65731" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@65731" method="buttonToggled"]
|
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32873" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32873" method="buttonToggled"]
|
||||||
|
[connection signal="toggled" from="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32874" to="HBoxContainer/ControlPanelBase/MarginContainer/ButtonContainer/@Button@32874" method="buttonToggled"]
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ extends Button
|
||||||
class_name GuiButton
|
class_name GuiButton
|
||||||
|
|
||||||
|
|
||||||
enum TYPE { BASIC, TOWER }
|
enum TYPE { BASIC, TOWER, UPGRADE }
|
||||||
|
|
||||||
|
|
||||||
var type : TYPE = TYPE.BASIC
|
var type : TYPE = TYPE.BASIC
|
||||||
|
|
@ -15,11 +15,15 @@ var towerType : Tower.TYPE :
|
||||||
if towerType != Tower.TYPE.NONE:
|
if towerType != Tower.TYPE.NONE:
|
||||||
type = TYPE.TOWER
|
type = TYPE.TOWER
|
||||||
toggle_mode = true
|
toggle_mode = true
|
||||||
$EnergyBar.visible = true
|
add_theme_stylebox_override("pressed", GameStyleBoxFlat.createWithColor(GameColor.COLOR.SELECTED))
|
||||||
add_theme_stylebox_override("pressed", GameStyleBoxFlat.createWithColor(Game.COLOR.SELECTED))
|
EventBus.tower_changed.connect(towerChanged)
|
||||||
EventBus.energy_has_changed.connect(towerChanged)
|
|
||||||
EventBus.tower_builded.connect(towerChanged)
|
|
||||||
EventBus.tower_selected.connect(func(_type): set_pressed_no_signal(_type == towerType))
|
EventBus.tower_selected.connect(func(_type): set_pressed_no_signal(_type == towerType))
|
||||||
|
if type == TYPE.UPGRADE:
|
||||||
|
EventBus.tower_upgraded.connect(upgradeTower)
|
||||||
|
|
||||||
|
|
||||||
|
func upgradeTower(towerType : Tower.TYPE, upgrade : TowerUpgrade) -> void:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
@export var texture : Texture2D :
|
@export var texture : Texture2D :
|
||||||
|
|
@ -34,6 +38,7 @@ func buttonToggled(state : bool) -> void:
|
||||||
|
|
||||||
|
|
||||||
func towerChanged(tower : Tower) -> void :
|
func towerChanged(tower : Tower) -> void :
|
||||||
if tower.tower_type == towerType:
|
if tower.type == towerType:
|
||||||
$EnergyBar.value = tower.energy
|
$EnergyBar.value = tower.energy
|
||||||
$EnergyBar.max_value = tower.max_energy
|
$EnergyBar.max_value = tower.max_energy
|
||||||
|
$EnergyBar.visible = tower.builded
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
extends TextureButton
|
|
||||||
|
|
||||||
var _tower : Tower
|
|
||||||
@onready var progress_bar : ProgressBar = $ProgressBar
|
|
||||||
|
|
||||||
func _ready() -> void:
|
|
||||||
EventBus.tower_builded.connect(_on_EventBus_tower_builded)
|
|
||||||
|
|
||||||
|
|
||||||
func _on_EventBus_tower_builded(tower : Tower) -> void:
|
|
||||||
_tower = tower
|
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
|
||||||
if _tower:
|
|
||||||
progress_bar.value = _tower.energy/_tower.max_energy * 100
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
uid://cxl20r1p7u1h4
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
[gd_scene load_steps=5 format=3 uid="uid://2cuckqx3uiw7"]
|
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://dksohsrys0yy7" path="res://Assets/Icones/baby-face.svg" id="1_3epw4"]
|
|
||||||
[ext_resource type="Script" uid="uid://cxl20r1p7u1h4" path="res://UI/hero_icon.gd" id="2_45h83"]
|
|
||||||
|
|
||||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6ujs1"]
|
|
||||||
|
|
||||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wg577"]
|
|
||||||
bg_color = Color(0.96, 0.71808, 0.1536, 0.647059)
|
|
||||||
|
|
||||||
[node name="HeroIcon" type="TextureButton"]
|
|
||||||
custom_minimum_size = Vector2(50, 50)
|
|
||||||
size_flags_horizontal = 4
|
|
||||||
texture_normal = ExtResource("1_3epw4")
|
|
||||||
texture_pressed = ExtResource("1_3epw4")
|
|
||||||
texture_hover = ExtResource("1_3epw4")
|
|
||||||
texture_disabled = ExtResource("1_3epw4")
|
|
||||||
texture_focused = ExtResource("1_3epw4")
|
|
||||||
ignore_texture_size = true
|
|
||||||
stretch_mode = 0
|
|
||||||
script = ExtResource("2_45h83")
|
|
||||||
|
|
||||||
[node name="ProgressBar" type="ProgressBar" parent="."]
|
|
||||||
z_index = -1
|
|
||||||
layout_mode = 1
|
|
||||||
anchors_preset = 15
|
|
||||||
anchor_right = 1.0
|
|
||||||
anchor_bottom = 1.0
|
|
||||||
grow_horizontal = 2
|
|
||||||
grow_vertical = 2
|
|
||||||
theme_override_styles/background = SubResource("StyleBoxEmpty_6ujs1")
|
|
||||||
theme_override_styles/fill = SubResource("StyleBoxFlat_wg577")
|
|
||||||
value = 50.0
|
|
||||||
fill_mode = 3
|
|
||||||
show_percentage = false
|
|
||||||
|
|
@ -11,7 +11,7 @@ func _on_quit_button_pressed() -> void:
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
%LevelContainer.get_children().map(%LevelContainer.remove_child)
|
%LevelContainer.get_children().map(%LevelContainer.remove_child)
|
||||||
levels = Game.getPackedScenesPaths(Game.RESOURCE_TYPE.LEVEL)
|
levels = Helper.getPackedScenesPaths(Helper.RESOURCE_TYPE.LEVEL)
|
||||||
for i in levels.size():
|
for i in levels.size():
|
||||||
var levelButton : Button = Button.new()
|
var levelButton : Button = Button.new()
|
||||||
levelButton.text = "Level " + str(i + 1)
|
levelButton.text = "Level " + str(i + 1)
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ func upgradeUpgrade() -> void:
|
||||||
|
|
||||||
|
|
||||||
func canUpgrade():
|
func canUpgrade():
|
||||||
return not isLevelMax && TheCube.money > cost
|
return not isLevelMax && Game.money > cost
|
||||||
|
|
||||||
|
|
||||||
func getNextValue(oldValue):
|
func getNextValue(oldValue):
|
||||||
|
|
|
||||||
|
|
@ -137,8 +137,8 @@ func cleanAndBuildMenu() -> void:
|
||||||
|
|
||||||
|
|
||||||
func resetApp() -> void:
|
func resetApp() -> void:
|
||||||
enemies = getOptionsFromFile(Game.RESOURCE_TYPE.ENEMY)
|
enemies = getOptionsFromFile(Helper.RESOURCE_TYPE.ENEMY)
|
||||||
levelSelect.setOptions(getOptionsFromFile(Game.RESOURCE_TYPE.LEVEL))
|
levelSelect.setOptions(getOptionsFromFile(Helper.RESOURCE_TYPE.LEVEL))
|
||||||
cleanAndBuildMenu()
|
cleanAndBuildMenu()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -192,7 +192,7 @@ func _on_new_level_pressed() -> void:
|
||||||
return
|
return
|
||||||
level = Level.new()
|
level = Level.new()
|
||||||
var levelName = "level_" + str(levelSelect.item_count + 1)
|
var levelName = "level_" + str(levelSelect.item_count + 1)
|
||||||
levelSelect.addOption(Game.LEVEL_DIR + levelName + ".tres", levelName, true)
|
levelSelect.addOption(Helper.LEVEL_DIR + levelName + ".tres", levelName, true)
|
||||||
_on_save_pressed()
|
_on_save_pressed()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -209,16 +209,16 @@ func onSelectedTowerChange(index: int, selected: int) -> void:
|
||||||
level.allowedTowers.erase(index)
|
level.allowedTowers.erase(index)
|
||||||
|
|
||||||
|
|
||||||
func getOptionsFromFile(type: Game.RESOURCE_TYPE) -> Dictionary :
|
func getOptionsFromFile(type: Helper.RESOURCE_TYPE) -> Dictionary :
|
||||||
var files : Dictionary
|
var files : Dictionary
|
||||||
var filePaths : Array[String]
|
var filePaths : Array[String]
|
||||||
var pattern : String
|
var pattern : String
|
||||||
if type == Game.RESOURCE_TYPE.LEVEL:
|
if type == Helper.RESOURCE_TYPE.LEVEL:
|
||||||
filePaths = Game.getResourcesPaths(type)
|
filePaths = Helper.getResourcesPaths(type)
|
||||||
pattern = Game.RESOURCE_FILE_PATTERN
|
pattern = Helper.RESOURCE_FILE_PATTERN
|
||||||
else:
|
else:
|
||||||
filePaths = Game.getPackedScenesPaths(type)
|
filePaths = Helper.getPackedScenesPaths(type)
|
||||||
pattern = Game.SCENE_FILE_PATTERN
|
pattern = Helper.SCENE_FILE_PATTERN
|
||||||
|
|
||||||
var regex : RegEx = RegEx.create_from_string(pattern)
|
var regex : RegEx = RegEx.create_from_string(pattern)
|
||||||
for file in filePaths:
|
for file in filePaths:
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ config/icon="res://icon.svg"
|
||||||
EventBus="*res://Globals/EventBus.gd"
|
EventBus="*res://Globals/EventBus.gd"
|
||||||
Transition="*res://Globals/transition.tscn"
|
Transition="*res://Globals/transition.tscn"
|
||||||
SignalLens="*res://addons/signal_lens/autoload/signal_lens_autoload.gd"
|
SignalLens="*res://addons/signal_lens/autoload/signal_lens_autoload.gd"
|
||||||
|
Game="*res://Globals/Game.gd"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
|
@ -28,7 +29,7 @@ window/size/viewport_height=1080
|
||||||
|
|
||||||
[editor_plugins]
|
[editor_plugins]
|
||||||
|
|
||||||
enabled=PackedStringArray("res://addons/LevelEditor/plugin.cfg", "res://addons/signal_lens/plugin.cfg")
|
enabled=PackedStringArray("res://addons/signal_lens/plugin.cfg")
|
||||||
|
|
||||||
[file_customization]
|
[file_customization]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue