Skip to content

Commit

Permalink
~34 axe ability
Browse files Browse the repository at this point in the history
  • Loading branch information
sh-cho committed Jun 2, 2024
1 parent 06ae783 commit f138b27
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 19 deletions.
4 changes: 4 additions & 0 deletions resources/upgrades/ability.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
extends AbilityUpgrade
class_name Ability

@export var ability_controller_scene: PackedScene
11 changes: 11 additions & 0 deletions resources/upgrades/axe.tres
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[gd_resource type="Resource" script_class="Ability" load_steps=3 format=3 uid="uid://ctwg5s8pykhi5"]

[ext_resource type="PackedScene" uid="uid://vgi06wd6y7mg" path="res://scenes/ability/axe_ability_controller/axe_ability_controller.tscn" id="1_83ah0"]
[ext_resource type="Script" path="res://resources/upgrades/ability.gd" id="1_dge6u"]

[resource]
script = ExtResource("1_dge6u")
ability_controller_scene = ExtResource("1_83ah0")
id = "axe"
name = "Axe"
description = "Periodically sends out a spinning axe."
11 changes: 11 additions & 0 deletions scenes/game_object/player/player.gd
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ const ACCELERATION_SMOOTHING = 25
@onready var damage_interval_timer = $DamageIntervalTimer
@onready var health_component = $HealthComponent
@onready var health_bar = $HealthBar
@onready var abilities = $Abilities


var number_colliding_bodies := 0

Expand All @@ -15,6 +17,7 @@ func _ready():
$CollisionArea2D.body_exited.connect(on_body_exited)
damage_interval_timer.timeout.connect(on_damage_interval_timer_timeout)
health_component.health_changed.connect(on_health_changed)
GameEvents.ability_upgrade_added.connect(on_ability_upgrade_added)
update_health_display()


Expand Down Expand Up @@ -66,3 +69,11 @@ func on_damage_interval_timer_timeout():

func on_health_changed():
update_health_display()


func on_ability_upgrade_added(ability_upgrade: AbilityUpgrade, current_upgrades: Dictionary):
if not ability_upgrade is Ability:
return

var ability = ability_upgrade as Ability
abilities.add_child(ability.ability_controller_scene.instantiate())
9 changes: 3 additions & 6 deletions scenes/game_object/player/player.tscn
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
[gd_scene load_steps=11 format=3 uid="uid://bpgwbwa1p3m6i"]
[gd_scene load_steps=10 format=3 uid="uid://bpgwbwa1p3m6i"]

[ext_resource type="Script" path="res://scenes/game_object/player/player.gd" id="1_dj72w"]
[ext_resource type="Texture2D" uid="uid://jgxfupesel5x" path="res://scenes/game_object/player/player.png" id="1_gkmqs"]
[ext_resource type="PackedScene" uid="uid://d32bhk07dm6w8" path="res://scenes/component/health_component.tscn" id="2_3j6hq"]
[ext_resource type="PackedScene" uid="uid://b20x14h768t03" path="res://scenes/ability/sword_ability_controller/sword_ability_controller.tscn" id="2_d4cwq"]
[ext_resource type="PackedScene" uid="uid://vgi06wd6y7mg" path="res://scenes/ability/axe_ability_controller/axe_ability_controller.tscn" id="4_4jbpc"]

[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_exix6"]
bg_color = Color(0.247059, 0.14902, 0.192157, 1)
Expand Down Expand Up @@ -33,11 +32,9 @@ script = ExtResource("1_dj72w")

[node name="HealthComponent" parent="." instance=ExtResource("2_3j6hq")]

[node name="AbilityManager" type="Node" parent="."]
[node name="Abilities" type="Node" parent="."]

[node name="SwordAbilityController" parent="AbilityManager" instance=ExtResource("2_d4cwq")]

[node name="AxeAbilityController" parent="AbilityManager" instance=ExtResource("4_4jbpc")]
[node name="SwordAbilityController" parent="Abilities" instance=ExtResource("2_d4cwq")]

[node name="DamageIntervalTimer" type="Timer" parent="."]
wait_time = 0.5
Expand Down
42 changes: 31 additions & 11 deletions scenes/manager/upgrade_manager.gd
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,13 @@ extends Node
@export var upgrade_screen_scene: PackedScene

var current_upgrades = {}
var rng := RandomNumberGenerator.new()


func _ready():
experience_manager.level_up.connect(on_level_up)


func on_level_up(current_level: int):
var chosen_upgrade = upgrade_pool.pick_random() as AbilityUpgrade
if chosen_upgrade == null:
return

var upgrade_screen_instance = upgrade_screen_scene.instantiate()
add_child(upgrade_screen_instance)
upgrade_screen_instance.set_ability_upgrades([chosen_upgrade] as Array[AbilityUpgrade])
upgrade_screen_instance.upgrade_selected.connect(on_upgrade_selected)


func apply_upgrade(upgrade: AbilityUpgrade):
var has_upgrade = current_upgrades.has(upgrade.id)
if not has_upgrade:
Expand All @@ -35,5 +25,35 @@ func apply_upgrade(upgrade: AbilityUpgrade):
GameEvents.emit_ability_upgrade_added(upgrade, current_upgrades)


# Get random 2 upgrades, without duplicates
func pick_upgrades() -> Array[AbilityUpgrade]:
assert(upgrade_pool.size() >= 2, "upgrade pool size should >= 2")
var picked := {} # <index, null>
var next_idx: int

while true:
next_idx = rng.randi_range(0, upgrade_pool.size() - 1)
if picked.has(next_idx):
continue

picked[next_idx] = null

if picked.size() >= 2:
break

# https://github.com/godotengine/godot/issues/72566
var ret: Array[AbilityUpgrade]
ret.assign(picked.keys().map(func(i): return upgrade_pool[i]))
return ret


func on_level_up(current_level: int):
var upgrade_screen_instance = upgrade_screen_scene.instantiate()
add_child(upgrade_screen_instance)
var chosen_upgrades = pick_upgrades()
upgrade_screen_instance.set_ability_upgrades(chosen_upgrades)
upgrade_screen_instance.upgrade_selected.connect(on_upgrade_selected)


func on_upgrade_selected(upgrade: AbilityUpgrade):
apply_upgrade(upgrade)
5 changes: 3 additions & 2 deletions scenes/manager/upgrade_manager.tscn
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
[gd_scene load_steps=4 format=3 uid="uid://c5b76ailnfref"]
[gd_scene load_steps=5 format=3 uid="uid://c5b76ailnfref"]

[ext_resource type="Script" path="res://scenes/manager/upgrade_manager.gd" id="1_xbxqc"]
[ext_resource type="Resource" uid="uid://cm1k47da3gi3k" path="res://resources/upgrades/sword_rate.tres" id="2_fudxd"]
[ext_resource type="Resource" uid="uid://ctwg5s8pykhi5" path="res://resources/upgrades/axe.tres" id="3_ldqmi"]
[ext_resource type="PackedScene" uid="uid://clfkst7vn7nax" path="res://scenes/ui/upgrade_screen.tscn" id="3_tvnss"]

[node name="UpgradeManager" type="Node"]
script = ExtResource("1_xbxqc")
upgrade_pool = Array[Resource("res://resources/upgrades/ability_upgrade.gd")]([ExtResource("2_fudxd")])
upgrade_pool = Array[Resource("res://resources/upgrades/ability_upgrade.gd")]([ExtResource("2_fudxd"), ExtResource("3_ldqmi")])
upgrade_screen_scene = ExtResource("3_tvnss")

0 comments on commit f138b27

Please sign in to comment.