game: add xp orbs
This commit is contained in:
		| @@ -71,6 +71,7 @@ click={ | ||||
| 2d_physics/layer_1="Terrain" | ||||
| 2d_physics/layer_2="Enemies" | ||||
| 2d_physics/layer_3="Player" | ||||
| 2d_physics/layer_4="XP" | ||||
|  | ||||
| [rendering] | ||||
|  | ||||
|   | ||||
| @@ -86,3 +86,11 @@ func get_taunted(): | ||||
|  | ||||
| func toggle_god_mode(value: bool): | ||||
| 	god_mode = value | ||||
|  | ||||
|  | ||||
| func _on_pickup_area_area_entered(area: Area2D) -> void: | ||||
| 	var body: XPOrb = area.get_parent() | ||||
| 	if body.is_in_group(GlobalConst.GROUP_XP_ORB): | ||||
| 		player_stats.current_xp += body.value | ||||
| 		GlobalConst.sig_debug_stats_set.emit("player_xp", "%s" % player_stats.current_xp) | ||||
| 		body.queue_free() | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| [gd_scene load_steps=5 format=3 uid="uid://ca2so8fm3q8fe"] | ||||
| [gd_scene load_steps=6 format=3 uid="uid://ca2so8fm3q8fe"] | ||||
|  | ||||
| [ext_resource type="Texture2D" uid="uid://5x5wimok8uw2" path="res://assets/sprites/roguelikeChar_transparent.png" id="1_3vyb7"] | ||||
| [ext_resource type="Script" uid="uid://cvqaxckx4num3" path="res://scenes/player.gd" id="1_g2els"] | ||||
| @@ -7,6 +7,9 @@ | ||||
| [sub_resource type="CircleShape2D" id="CircleShape2D_3vyb7"] | ||||
| radius = 8.0 | ||||
|  | ||||
| [sub_resource type="CircleShape2D" id="CircleShape2D_qhqgy"] | ||||
| radius = 8.0 | ||||
|  | ||||
| [node name="Player" type="CharacterBody2D" groups=["damagable", "player"]] | ||||
| collision_layer = 0 | ||||
| script = ExtResource("1_g2els") | ||||
| @@ -21,3 +24,13 @@ shape = SubResource("CircleShape2D_3vyb7") | ||||
|  | ||||
| [node name="AttackSword" parent="." node_paths=PackedStringArray("player") instance=ExtResource("3_qhqgy")] | ||||
| player = NodePath("..") | ||||
|  | ||||
| [node name="PickupArea" type="Area2D" parent="."] | ||||
| collision_layer = 0 | ||||
| collision_mask = 8 | ||||
| monitorable = false | ||||
|  | ||||
| [node name="CollisionShape2D" type="CollisionShape2D" parent="PickupArea"] | ||||
| shape = SubResource("CircleShape2D_qhqgy") | ||||
|  | ||||
| [connection signal="area_entered" from="PickupArea" to="." method="_on_pickup_area_area_entered"] | ||||
|   | ||||
| @@ -9,6 +9,7 @@ var crit_chance: float = 0.05 | ||||
| var crit_multiplier: float = 2.0 | ||||
| var move_speed: float = 200.0 | ||||
| var attack_damage: float = 1.0 | ||||
| var pickup_radius: float = 50.0 | ||||
|  | ||||
| func get_final(stat: String, modifiers: Array[PlayerStatsModifier]) -> Variant: | ||||
| 	var base_value = get(stat) | ||||
|   | ||||
| @@ -2,3 +2,24 @@ class_name XPOrb | ||||
| extends Node2D | ||||
|  | ||||
| @export var value: float | ||||
| @export var max_speed: float = 100.0 | ||||
| @export var min_speed: float = 10.0 | ||||
|  | ||||
| var player: Player | ||||
|  | ||||
| func _ready() -> void: | ||||
| 	player = get_tree().get_first_node_in_group(GlobalConst.GROUP_PLAYER) | ||||
|  | ||||
| func _physics_process(delta: float) -> void: | ||||
| 	if not player: | ||||
| 		return | ||||
| 	 | ||||
| 	var to_player = player.global_position - global_position | ||||
| 	var dist = to_player.length() | ||||
| 	var attract_radius = player.player_stats.get_final("pickup_radius", player.modifiers) | ||||
| 	if dist < 4: | ||||
| 		return | ||||
| 	if dist < attract_radius: | ||||
| 		var dir = to_player.normalized() | ||||
| 		var speed = lerp(min_speed, max_speed, (attract_radius - dist) / attract_radius) | ||||
| 		global_position += dir * speed * delta | ||||
|   | ||||
| @@ -1,10 +1,21 @@ | ||||
| [gd_scene load_steps=3 format=3 uid="uid://du4dqne3o0d5b"] | ||||
| [gd_scene load_steps=4 format=3 uid="uid://du4dqne3o0d5b"] | ||||
|  | ||||
| [ext_resource type="Script" uid="uid://bx43us4qd2vpf" path="res://scenes/xp_orb.gd" id="1_me6n8"] | ||||
| [ext_resource type="Texture2D" uid="uid://crty0t7ryksqn" path="res://assets/sprites/xp_orb.png" id="1_pkphv"] | ||||
|  | ||||
| [sub_resource type="CircleShape2D" id="CircleShape2D_me6n8"] | ||||
| radius = 7.0 | ||||
|  | ||||
| [node name="XPOrb" type="Node2D" groups=["xp_orb"]] | ||||
| script = ExtResource("1_me6n8") | ||||
|  | ||||
| [node name="Sprite2D" type="Sprite2D" parent="."] | ||||
| texture = ExtResource("1_pkphv") | ||||
|  | ||||
| [node name="Area2D" type="Area2D" parent="."] | ||||
| collision_layer = 9 | ||||
| monitoring = false | ||||
|  | ||||
| [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] | ||||
| position = Vector2(0, -1) | ||||
| shape = SubResource("CircleShape2D_me6n8") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user