game: add xp orbs
This commit is contained in:
		| @@ -71,6 +71,7 @@ click={ | |||||||
| 2d_physics/layer_1="Terrain" | 2d_physics/layer_1="Terrain" | ||||||
| 2d_physics/layer_2="Enemies" | 2d_physics/layer_2="Enemies" | ||||||
| 2d_physics/layer_3="Player" | 2d_physics/layer_3="Player" | ||||||
|  | 2d_physics/layer_4="XP" | ||||||
|  |  | ||||||
| [rendering] | [rendering] | ||||||
|  |  | ||||||
|   | |||||||
| @@ -86,3 +86,11 @@ func get_taunted(): | |||||||
|  |  | ||||||
| func toggle_god_mode(value: bool): | func toggle_god_mode(value: bool): | ||||||
| 	god_mode = value | 	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="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"] | [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"] | [sub_resource type="CircleShape2D" id="CircleShape2D_3vyb7"] | ||||||
| radius = 8.0 | radius = 8.0 | ||||||
|  |  | ||||||
|  | [sub_resource type="CircleShape2D" id="CircleShape2D_qhqgy"] | ||||||
|  | radius = 8.0 | ||||||
|  |  | ||||||
| [node name="Player" type="CharacterBody2D" groups=["damagable", "player"]] | [node name="Player" type="CharacterBody2D" groups=["damagable", "player"]] | ||||||
| collision_layer = 0 | collision_layer = 0 | ||||||
| script = ExtResource("1_g2els") | script = ExtResource("1_g2els") | ||||||
| @@ -21,3 +24,13 @@ shape = SubResource("CircleShape2D_3vyb7") | |||||||
|  |  | ||||||
| [node name="AttackSword" parent="." node_paths=PackedStringArray("player") instance=ExtResource("3_qhqgy")] | [node name="AttackSword" parent="." node_paths=PackedStringArray("player") instance=ExtResource("3_qhqgy")] | ||||||
| player = NodePath("..") | 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 crit_multiplier: float = 2.0 | ||||||
| var move_speed: float = 200.0 | var move_speed: float = 200.0 | ||||||
| var attack_damage: float = 1.0 | var attack_damage: float = 1.0 | ||||||
|  | var pickup_radius: float = 50.0 | ||||||
|  |  | ||||||
| func get_final(stat: String, modifiers: Array[PlayerStatsModifier]) -> Variant: | func get_final(stat: String, modifiers: Array[PlayerStatsModifier]) -> Variant: | ||||||
| 	var base_value = get(stat) | 	var base_value = get(stat) | ||||||
|   | |||||||
| @@ -2,3 +2,24 @@ class_name XPOrb | |||||||
| extends Node2D | extends Node2D | ||||||
|  |  | ||||||
| @export var value: float | @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="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"] | [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"]] | [node name="XPOrb" type="Node2D" groups=["xp_orb"]] | ||||||
| script = ExtResource("1_me6n8") | script = ExtResource("1_me6n8") | ||||||
|  |  | ||||||
| [node name="Sprite2D" type="Sprite2D" parent="."] | [node name="Sprite2D" type="Sprite2D" parent="."] | ||||||
| texture = ExtResource("1_pkphv") | 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