Add initial functionality for experience gems

This commit is contained in:
James Skemp 2023-11-07 19:47:06 -06:00
parent 7c91cb5c23
commit 94e4fa5c6d
6 changed files with 110 additions and 3 deletions

41
Objects/experience_gem.gd Normal file
View File

@ -0,0 +1,41 @@
extends Area2D
@export var experience = 1
var sprite_green = preload("res://Textures/Items/Gems/Gem_green.png")
var sprite_blue = preload("res://Textures/Items/Gems/Gem_blue.png")
var sprite_red = preload("res://Textures/Items/Gems/Gem_red.png")
var target = null
var speed = -1
@onready var sprite = $Sprite2D
@onready var collision = $CollisionShape2D
@onready var sound = $CollectedSound
# Called when the node enters the scene tree for the first time.
func _ready():
if experience < 5:
return
elif experience < 25:
sprite.texture = sprite_blue
else:
sprite.texture = sprite_red
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _physics_process(delta):
if target != null:
global_position = global_position.move_toward(target.global_position, speed)
speed += 2 * delta
func collect():
sound.play()
collision.call_deferred("set", "disabled", true)
sprite.visible = false
return experience
func _on_collected_sound_finished():
queue_free()

View File

@ -0,0 +1,27 @@
[gd_scene load_steps=5 format=3 uid="uid://clge1spf2iu07"]
[ext_resource type="Texture2D" uid="uid://clbhweyodka4r" path="res://Textures/Items/Gems/Gem_green.png" id="1_8onvx"]
[ext_resource type="Script" path="res://Objects/experience_gem.gd" id="1_s7mq8"]
[ext_resource type="AudioStream" uid="uid://beeiqf5bqbq1f" path="res://Audio/SoundEffect/collectgem.mp3" id="3_j3yki"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_0lecl"]
size = Vector2(10, 11)
[node name="ExperienceGem" type="Area2D" groups=["loot"]]
collision_layer = 8
collision_mask = 0
script = ExtResource("1_s7mq8")
[node name="Sprite2D" type="Sprite2D" parent="."]
scale = Vector2(0.5, 0.5)
texture = ExtResource("1_8onvx")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(0, -0.5)
shape = SubResource("RectangleShape2D_0lecl")
[node name="CollectedSound" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_j3yki")
volume_db = -5.0
[connection signal="finished" from="CollectedSound" to="." method="_on_collected_sound_finished"]

View File

@ -19,7 +19,6 @@ texture = ExtResource("1_2jiis")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(2.38419e-07, 4.76837e-07)
rotation = -0.785398
scale = Vector2(1, 1)
shape = SubResource("RectangleShape2D_ifk2h")
disabled = true

View File

@ -3,6 +3,9 @@ extends CharacterBody2D
var movement_speed = 40.0
var hp = 80
var last_movement = Vector2.UP
var experience = 0
var experience_level = 1
var collected_experience = 0
# Attacks
var ice_spear = preload("res://Player/Attack/ice_spear.tscn")
@ -157,3 +160,13 @@ func spawn_javelin():
javelin_spawn.global_position = global_position
javelin_base.add_child(javelin_spawn)
calc_spawns -= 1
func _on_grab_area_area_entered(area):
if area.is_in_group("loot"):
area.target = self
func _on_collect_area_area_entered(area):
if area.is_in_group("loot"):
var gem_experience = area.collect()

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=7 format=3 uid="uid://c7beni84qxntd"]
[gd_scene load_steps=9 format=3 uid="uid://c7beni84qxntd"]
[ext_resource type="Texture2D" uid="uid://c5w583adbgw1w" path="res://Textures/Player/player_sprite.png" id="1_0ulfs"]
[ext_resource type="Script" path="res://Player/player.gd" id="1_jhdom"]
@ -14,6 +14,11 @@ size = Vector2(10, 18)
[sub_resource type="CircleShape2D" id="CircleShape2D_nro0b"]
radius = 368.0
[sub_resource type="CircleShape2D" id="CircleShape2D_5buyl"]
radius = 50.0
[sub_resource type="CircleShape2D" id="CircleShape2D_8degh"]
[node name="Player" type="CharacterBody2D" groups=["player"]]
motion_mode = 1
script = ExtResource("1_jhdom")
@ -64,6 +69,20 @@ monitorable = false
[node name="CollisionShape2D" type="CollisionShape2D" parent="EnemyDetectionArea"]
shape = SubResource("CircleShape2D_nro0b")
[node name="GrabArea" type="Area2D" parent="."]
collision_layer = 0
collision_mask = 8
[node name="CollisionShape2D" type="CollisionShape2D" parent="GrabArea"]
shape = SubResource("CircleShape2D_5buyl")
[node name="CollectArea" type="Area2D" parent="."]
collision_layer = 0
collision_mask = 8
[node name="CollisionShape2D" type="CollisionShape2D" parent="CollectArea"]
shape = SubResource("CircleShape2D_8degh")
[connection signal="hurt" from="HurtBox" to="." method="_on_hurt_box_hurt"]
[connection signal="timeout" from="Attack/IceSpearTimer" to="." method="_on_ice_spear_timer_timeout"]
[connection signal="timeout" from="Attack/IceSpearTimer/IceSpearAttackTimer" to="." method="_on_ice_spear_attack_timer_timeout"]
@ -71,5 +90,7 @@ shape = SubResource("CircleShape2D_nro0b")
[connection signal="timeout" from="Attack/TornadoTimer/TornadoAttackTimer" to="." method="_on_tornado_attack_timer_timeout"]
[connection signal="body_entered" from="EnemyDetectionArea" to="." method="_on_enemy_detection_area_body_entered"]
[connection signal="body_exited" from="EnemyDetectionArea" to="." method="_on_enemy_detection_area_body_exited"]
[connection signal="area_entered" from="GrabArea" to="." method="_on_grab_area_area_entered"]
[connection signal="area_entered" from="CollectArea" to="." method="_on_collect_area_area_entered"]
[editable path="HurtBox"]

View File

@ -1,10 +1,11 @@
[gd_scene load_steps=8 format=3 uid="uid://dp2xm7bjijo4w"]
[gd_scene load_steps=9 format=3 uid="uid://dp2xm7bjijo4w"]
[ext_resource type="Texture2D" uid="uid://xalo6kc0txwn" path="res://Textures/dirt_full_new.png" id="1_6a05l"]
[ext_resource type="PackedScene" uid="uid://c7beni84qxntd" path="res://Player/player.tscn" id="2_pvcf7"]
[ext_resource type="PackedScene" uid="uid://djsa2wibq56b2" path="res://Enemy/enemy.tscn" id="3_2koks"]
[ext_resource type="PackedScene" uid="uid://bflx31okr3q14" path="res://Utility/enemy_spawner.tscn" id="3_k8m17"]
[ext_resource type="Script" path="res://Utility/spawn_info.gd" id="5_nwjsy"]
[ext_resource type="PackedScene" uid="uid://clge1spf2iu07" path="res://Objects/experience_gem.tscn" id="6_ndmih"]
[sub_resource type="Resource" id="Resource_xf1bk"]
script = ExtResource("5_nwjsy")
@ -35,3 +36,8 @@ region_rect = Rect2(-4000, -4000, 4000, 4000)
[node name="EnemySpawner" parent="." instance=ExtResource("3_k8m17")]
spawns = Array[ExtResource("5_nwjsy")]([SubResource("Resource_xf1bk"), SubResource("Resource_rxdr7")])
[node name="Loot" type="Node2D" parent="."]
[node name="ExperienceGem" parent="Loot" instance=ExtResource("6_ndmih")]
position = Vector2(74, -25)