a game about throwing hammers made for the github game off
better hammer hitting
anticrash not included because godot thought it would like to crash if i included it
| -rw-r--r-- | hammers/hammer.gd | 50 | ||||
| -rw-r--r-- | hammers/hammer_01.tscn | 4 | ||||
| -rw-r--r-- | hammers/hammer_02.tscn | 4 | ||||
| -rw-r--r-- | hammers/hammer_03.tscn | 12 | ||||
| -rw-r--r-- | hammers/hammer_base.tscn | 5 | ||||
| -rw-r--r-- | player/player.gd | 5 |
6 files changed, 48 insertions, 32 deletions
diff --git a/hammers/hammer.gd b/hammers/hammer.gd index c25a706..86db072 100644 --- a/hammers/hammer.gd +++ b/hammers/hammer.gd @@ -19,11 +19,22 @@ var direction := Vector2.ZERO ## The amount it can turn towards its target @export var steer_force = 0.05 -## To hit the player -@export var hit_player := true - -## To hit the enemys -@export var hit_enemys := false +## The hit enum. +enum HITS {_a, _b, _c, PLAYER, ENEMY, NONE} + +## Pick which layers to hit. +@export var hits: HITS = HITS.PLAYER: + set(value): + set_collision_mask_value(hits, false) + target_finder.set_collision_mask_value(hits, false) + hits = value + hitbox.monitoring = hits != HITS.NONE + if value == HITS.NONE: + return + set_collision_mask_value(hits, true) + target_finder.set_collision_mask_value(hits, true) + target_finder.monitoring = not is_instance_valid(target) + hitbox.collision_mask = target_finder.collision_mask ## The amount of time before gravity kicks in. @export var lifetime := 3.0 @@ -34,6 +45,7 @@ var direction := Vector2.ZERO ## The target var target: Node2D = null +@onready var head := $Head as Marker2D @onready var trail := $Trail as Trail2D @onready var outline_shader := ($Sprite as Sprite2D).material as ShaderMaterial @onready var target_finder := $TargetFinder as Area2D @@ -41,30 +53,30 @@ var target: Node2D = null func _ready() -> void: - set_masks() - - -## Sets the collision masks. -func set_masks() -> void: - set_collision_mask_value(3, hit_player) - set_collision_mask_value(4, hit_enemys) - target_finder.set_collision_mask_value(3, hit_player) - target_finder.set_collision_mask_value(4, hit_enemys) - hitbox.collision_mask = target_finder.collision_mask - target_finder.monitoring = not is_instance_valid(target) - hitbox.monitoring = hit_player || hit_enemys + hits = hits ## Moves the direction towards the target. func seek() -> void: if is_instance_valid(target): direction = lerp( - direction, global_position.direction_to(target.global_position), steer_force * clampf(lifetime, 0, 1) + direction, head.global_position.direction_to(target.global_position), steer_force * clampf(lifetime, 0, 1) ) elif target_finder.monitoring == false: target = null target_finder.monitoring = true +# func anticrash() -> void: +# var space := get_world_2d().direct_space_state +# var param := PhysicsRayQueryParameters2D.create(head.global_position, head.global_position + (direction * 10), pow(2, 1-1) + pow(2, hits - 1)) +# var result := space.intersect_ray(param) +# if result.is_empty() or result.collider is Player or result.collider is Enemy: +# return +# direction = lerp( +# direction, +# direction.bounce(head.global_position.direction_to(result.position)), +# steer_force * clampf(lifetime, 0, 1) +# ) ## Highlights this hammer. See also [method unhighlight]. func highlight() -> void: @@ -82,6 +94,7 @@ func _physics_process(delta: float) -> void: velocity.y += grav * delta else: seek() +# anticrash() velocity += (direction * acceleration * delta) if velocity.y < 0: velocity.y = lerpf(velocity.y, 0, .1) # hard to move up @@ -111,7 +124,6 @@ func throw(p_direction: Vector2) -> void: direction = p_direction trail.emitting = true set_physics_process(true) - set_masks() func _on_target_finder_node_entered(n: Node2D) -> void: diff --git a/hammers/hammer_01.tscn b/hammers/hammer_01.tscn index 8c08813..36b03d8 100644 --- a/hammers/hammer_01.tscn +++ b/hammers/hammer_01.tscn @@ -4,7 +4,7 @@ [ext_resource type="Shader" path="res://hammers/hammer_outline.gdshader" id="2_le3ds"] [ext_resource type="Texture2D" uid="uid://dcf5es758pw1n" path="res://assets/hammers/hammer01.png" id="2_sdlv5"] -[sub_resource type="ShaderMaterial" id="ShaderMaterial_7jbfp"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_mr4f6"] resource_local_to_scene = true shader = ExtResource("2_le3ds") shader_parameter/light_offset = 1.0 @@ -14,7 +14,7 @@ shader_parameter/sin_frequency = 0.25 [node name="Hammer01" instance=ExtResource("1_350hj")] [node name="Sprite" parent="." index="1"] -material = SubResource("ShaderMaterial_7jbfp") +material = SubResource("ShaderMaterial_mr4f6") texture = ExtResource("2_sdlv5") [editable path="Hitbox"] diff --git a/hammers/hammer_02.tscn b/hammers/hammer_02.tscn index 3f282a7..743a6f5 100644 --- a/hammers/hammer_02.tscn +++ b/hammers/hammer_02.tscn @@ -4,7 +4,7 @@ [ext_resource type="Texture2D" uid="uid://bcpy0wbrlmqsq" path="res://assets/hammers/hammer02.png" id="2_dmvhv"] [ext_resource type="Shader" path="res://hammers/hammer_outline.gdshader" id="2_rf70p"] -[sub_resource type="ShaderMaterial" id="ShaderMaterial_htydc"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_8htv8"] resource_local_to_scene = true shader = ExtResource("2_rf70p") shader_parameter/light_offset = 1.0 @@ -14,7 +14,7 @@ shader_parameter/sin_frequency = 0.25 [node name="Hammer02" instance=ExtResource("1_vy2k1")] [node name="Sprite" parent="." index="1"] -material = SubResource("ShaderMaterial_htydc") +material = SubResource("ShaderMaterial_8htv8") texture = ExtResource("2_dmvhv") [node name="Hitbox" parent="." index="3"] diff --git a/hammers/hammer_03.tscn b/hammers/hammer_03.tscn index f268837..d8b0098 100644 --- a/hammers/hammer_03.tscn +++ b/hammers/hammer_03.tscn @@ -4,32 +4,32 @@ [ext_resource type="Texture2D" uid="uid://blx67dnlqysnc" path="res://assets/hammers/hammer03.png" id="2_0uj7a"] [ext_resource type="Shader" path="res://hammers/hammer_outline.gdshader" id="2_huryw"] -[sub_resource type="ShaderMaterial" id="ShaderMaterial_gbw2g"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_wxyih"] resource_local_to_scene = true shader = ExtResource("2_huryw") shader_parameter/light_offset = 1.0 shader_parameter/line_width = 0.0 shader_parameter/sin_frequency = 0.25 -[sub_resource type="RectangleShape2D" id="RectangleShape2D_uabdv"] +[sub_resource type="RectangleShape2D" id="RectangleShape2D_3xqdd"] size = Vector2(8, 12) -[sub_resource type="RectangleShape2D" id="RectangleShape2D_kegwy"] +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ta2m2"] size = Vector2(8, 12) [node name="Hammer03" instance=ExtResource("1_wc0io")] [node name="Sprite" parent="." index="1"] -material = SubResource("ShaderMaterial_gbw2g") +material = SubResource("ShaderMaterial_wxyih") texture = ExtResource("2_0uj7a") [node name="Collision" parent="." index="2"] -shape = SubResource("RectangleShape2D_uabdv") +shape = SubResource("RectangleShape2D_3xqdd") [node name="Hitbox" parent="." index="3"] damage = 3 [node name="Collision" parent="Hitbox" index="0"] -shape = SubResource("RectangleShape2D_kegwy") +shape = SubResource("RectangleShape2D_ta2m2") [editable path="Hitbox"] diff --git a/hammers/hammer_base.tscn b/hammers/hammer_base.tscn index f7f8cf1..c6de599 100644 --- a/hammers/hammer_base.tscn +++ b/hammers/hammer_base.tscn @@ -51,6 +51,7 @@ visible = false shape = ExtResource("2_tgkvf") [node name="TargetFinder" type="Area2D" parent="."] +visible = false collision_layer = 0 collision_mask = 0 monitorable = false @@ -58,6 +59,10 @@ monitorable = false [node name="Collision" type="CollisionShape2D" parent="TargetFinder"] shape = SubResource("CircleShape2D_jubww") +[node name="Head" type="Marker2D" parent="."] +visible = false +position = Vector2(0, -6) + [connection signal="body_entered" from="." to="." method="_on_body_entered"] [connection signal="area_entered" from="TargetFinder" to="." method="_on_target_finder_node_entered"] [connection signal="body_entered" from="TargetFinder" to="." method="_on_target_finder_node_entered"] diff --git a/player/player.gd b/player/player.gd index 720ecc0..27126c6 100644 --- a/player/player.gd +++ b/player/player.gd @@ -312,11 +312,10 @@ func disable_aim_gizmo() -> void: func throw(rot: float) -> void: rot += randf_range(-0.01, 0.01) remove_child(current_hammer) - current_hammer.position.x = 0 # center + current_hammer.position = Vector2(0, -8) # center current_hammer.global_position = to_global(current_hammer.position) Globals.levelmanager.current_level.add_child(current_hammer) - current_hammer.hit_player = false - current_hammer.hit_enemys = true + current_hammer.hits = Hammer.HITS.ENEMY current_hammer.throw(Vector2.from_angle(rot)) SoundManager.play("throw", -15) current_hammer = null |