Add initial functionality for experience gems
This commit is contained in:
parent
7c91cb5c23
commit
94e4fa5c6d
|
@ -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()
|
|
@ -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"]
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue