summaryrefslogtreecommitdiff
path: root/Player
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2024-09-28 15:29:16 +0200
committerDaniel Weipert <git@mail.dweipert.de>2024-09-28 15:29:16 +0200
commit62e90b444315245ef24606fa51d3fccba5f18e08 (patch)
tree3a8a7390cf319d6a4ddd70bf32ca83fbe20bec31 /Player
initial commitHEADmain
Diffstat (limited to 'Player')
-rw-r--r--Player/Assets/arrow.krabin0 -> 32160 bytes
-rw-r--r--Player/Assets/arrow.kra~bin0 -> 31971 bytes
-rw-r--r--Player/Assets/arrow.pngbin0 -> 170 bytes
-rw-r--r--Player/Assets/arrow.png.import34
-rw-r--r--Player/Assets/arrow.png~bin0 -> 165 bytes
-rw-r--r--Player/Assets/bow.krabin0 -> 32879 bytes
-rw-r--r--Player/Assets/bow.kra~bin0 -> 32897 bytes
-rw-r--r--Player/Assets/bow.pngbin0 -> 202 bytes
-rw-r--r--Player/Assets/bow.png.import34
-rw-r--r--Player/Assets/bow.png~bin0 -> 226 bytes
-rw-r--r--Player/arrow.gd27
-rw-r--r--Player/arrow.tscn35
-rw-r--r--Player/arrow_head_shape.tres4
-rw-r--r--Player/bow.gd86
-rw-r--r--Player/bow.tscn20
-rw-r--r--Player/target_line.gd26
16 files changed, 266 insertions, 0 deletions
diff --git a/Player/Assets/arrow.kra b/Player/Assets/arrow.kra
new file mode 100644
index 0000000..57ca2a8
--- /dev/null
+++ b/Player/Assets/arrow.kra
Binary files differ
diff --git a/Player/Assets/arrow.kra~ b/Player/Assets/arrow.kra~
new file mode 100644
index 0000000..376471d
--- /dev/null
+++ b/Player/Assets/arrow.kra~
Binary files differ
diff --git a/Player/Assets/arrow.png b/Player/Assets/arrow.png
new file mode 100644
index 0000000..4e71ad9
--- /dev/null
+++ b/Player/Assets/arrow.png
Binary files differ
diff --git a/Player/Assets/arrow.png.import b/Player/Assets/arrow.png.import
new file mode 100644
index 0000000..0c475ca
--- /dev/null
+++ b/Player/Assets/arrow.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b6mkb436giuns"
+path="res://.godot/imported/arrow.png-a9f919cad48f96a83e2a88829bb8141c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Player/Assets/arrow.png"
+dest_files=["res://.godot/imported/arrow.png-a9f919cad48f96a83e2a88829bb8141c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/Player/Assets/arrow.png~ b/Player/Assets/arrow.png~
new file mode 100644
index 0000000..bc6209b
--- /dev/null
+++ b/Player/Assets/arrow.png~
Binary files differ
diff --git a/Player/Assets/bow.kra b/Player/Assets/bow.kra
new file mode 100644
index 0000000..c08370d
--- /dev/null
+++ b/Player/Assets/bow.kra
Binary files differ
diff --git a/Player/Assets/bow.kra~ b/Player/Assets/bow.kra~
new file mode 100644
index 0000000..ce0934a
--- /dev/null
+++ b/Player/Assets/bow.kra~
Binary files differ
diff --git a/Player/Assets/bow.png b/Player/Assets/bow.png
new file mode 100644
index 0000000..c315267
--- /dev/null
+++ b/Player/Assets/bow.png
Binary files differ
diff --git a/Player/Assets/bow.png.import b/Player/Assets/bow.png.import
new file mode 100644
index 0000000..bd33d5d
--- /dev/null
+++ b/Player/Assets/bow.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://e0214m2jyp81"
+path="res://.godot/imported/bow.png-8d7cdf3a1d17167a06b6f444c5720069.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Player/Assets/bow.png"
+dest_files=["res://.godot/imported/bow.png-8d7cdf3a1d17167a06b6f444c5720069.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/Player/Assets/bow.png~ b/Player/Assets/bow.png~
new file mode 100644
index 0000000..00ee2d9
--- /dev/null
+++ b/Player/Assets/bow.png~
Binary files differ
diff --git a/Player/arrow.gd b/Player/arrow.gd
new file mode 100644
index 0000000..f6cce57
--- /dev/null
+++ b/Player/arrow.gd
@@ -0,0 +1,27 @@
+extends CharacterBody2D
+
+
+var deacceleration := 10.0
+var flying := false
+
+
+func _ready():
+ if OS.has_feature("mobile"):
+ scale = Vector2(2, 2)
+
+
+func _physics_process(delta: float) -> void:
+ velocity = velocity.move_toward(Vector2.ZERO, deacceleration * delta)
+
+ if abs(velocity) > Vector2.ZERO:
+ flying = true
+ $ArrowHead/CollisionShape2D.disabled = false
+
+ if flying and velocity == Vector2.ZERO:
+ queue_free()
+
+ move_and_slide()
+
+
+func _on_visible_on_screen_notifier_2d_screen_exited() -> void:
+ queue_free()
diff --git a/Player/arrow.tscn b/Player/arrow.tscn
new file mode 100644
index 0000000..a9f7c98
--- /dev/null
+++ b/Player/arrow.tscn
@@ -0,0 +1,35 @@
+[gd_scene load_steps=4 format=3 uid="uid://ctkfjrwg171fr"]
+
+[ext_resource type="Texture2D" uid="uid://b6mkb436giuns" path="res://Player/Assets/arrow.png" id="1_1lalc"]
+[ext_resource type="Script" path="res://Player/arrow.gd" id="1_q6ess"]
+[ext_resource type="Shape2D" uid="uid://vny1lmq7xr3s" path="res://Player/arrow_head_shape.tres" id="3_b2q2f"]
+
+[node name="Arrow" type="CharacterBody2D"]
+z_index = 1
+collision_layer = 0
+collision_mask = 8
+script = ExtResource("1_q6ess")
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+texture_filter = 1
+rotation = -3.14159
+texture = ExtResource("1_1lalc")
+
+[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."]
+position = Vector2(-7.15256e-07, -3.27826e-07)
+scale = Vector2(0.8, 0.5)
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2(-4.5, 0)
+shape = ExtResource("3_b2q2f")
+
+[node name="ArrowHead" type="Area2D" parent="." groups=["arrow"]]
+collision_layer = 2
+collision_mask = 4
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="ArrowHead"]
+position = Vector2(-4.5, 0)
+shape = ExtResource("3_b2q2f")
+disabled = true
+
+[connection signal="screen_exited" from="VisibleOnScreenNotifier2D" to="." method="_on_visible_on_screen_notifier_2d_screen_exited"]
diff --git a/Player/arrow_head_shape.tres b/Player/arrow_head_shape.tres
new file mode 100644
index 0000000..0c29169
--- /dev/null
+++ b/Player/arrow_head_shape.tres
@@ -0,0 +1,4 @@
+[gd_resource type="RectangleShape2D" format=3 uid="uid://vny1lmq7xr3s"]
+
+[resource]
+size = Vector2(3, 4)
diff --git a/Player/bow.gd b/Player/bow.gd
new file mode 100644
index 0000000..aa3fafc
--- /dev/null
+++ b/Player/bow.gd
@@ -0,0 +1,86 @@
+extends Node2D
+
+
+var anchor := Vector2.ZERO
+var anchor_mode := false
+var drag_distance := Vector2.ZERO
+var max_length := 75.0
+
+var arrow_scene = preload("res://Player/arrow.tscn")
+var arrow: Node2D
+
+var process_touch := false
+
+
+func _ready() -> void:
+ if OS.has_feature("mobile"):
+ scale = Vector2(2, 2)
+
+ $DrawLine.visible = false
+ $TargetLine.visible = false
+
+
+func _input(event: InputEvent) -> void:
+ if event is InputEventScreenTouch:
+ if event.is_pressed():
+ process_touch = true
+ elif event.is_released():
+ process_touch = false
+
+
+func _process(_delta: float) -> void:
+ if Input.is_action_just_pressed("click"):
+ global_position = get_global_mouse_position()
+ anchor = get_global_mouse_position()
+ anchor_mode = true
+
+ arrow = arrow_scene.instantiate()
+ arrow.global_position = global_position
+
+ get_tree().current_scene.add_child(arrow)
+ $DrawLine.visible = true
+
+ $TargetLine.visible = true
+ $TargetLine.origin = anchor
+ $TargetLine.queue_redraw()
+
+ elif Input.is_action_just_released("click"):
+ anchor_mode = false
+
+ arrow.velocity = -drag_distance * 1.5
+ arrow.flying = true
+ arrow = null
+
+ $DrawLine.visible = false
+ $DrawLine.clear_points()
+
+ $TargetLine.visible = false
+ $TargetLine.queue_redraw()
+
+ elif Input.is_action_pressed("click"):
+ drag_distance = get_global_mouse_position() - anchor
+ rotation = atan2(drag_distance.y, drag_distance.x)
+
+ var max_distance = get_global_mouse_position()
+ if drag_distance.length() > max_length:
+ drag_distance = (max_length / drag_distance.length()) * drag_distance
+ max_distance = anchor + drag_distance
+
+ $DrawLine.clear_points()
+ $DrawLine.add_point(Vector2.ZERO)
+ $DrawLine.add_point((max_distance - global_position) / scale)
+ $DrawLine.rotation = -rotation
+
+ $TargetLine.direction = (max_distance - global_position).normalized() * -1
+ $TargetLine.rotation = -rotation
+ $TargetLine.queue_redraw()
+
+ if not anchor_mode:
+ if OS.has_feature("mobile"):
+ if process_touch:
+ global_position = get_global_mouse_position()
+ else:
+ global_position = get_global_mouse_position()
+
+ if is_instance_valid(arrow):
+ arrow.rotation = rotation
diff --git a/Player/bow.tscn b/Player/bow.tscn
new file mode 100644
index 0000000..e1ec9da
--- /dev/null
+++ b/Player/bow.tscn
@@ -0,0 +1,20 @@
+[gd_scene load_steps=4 format=3 uid="uid://bn0h50n6fr6n1"]
+
+[ext_resource type="Texture2D" uid="uid://e0214m2jyp81" path="res://Player/Assets/bow.png" id="1_7j25w"]
+[ext_resource type="Script" path="res://Player/bow.gd" id="1_f5b6e"]
+[ext_resource type="Script" path="res://Player/target_line.gd" id="3_r056j"]
+
+[node name="Bow" type="Node2D"]
+z_index = 1
+script = ExtResource("1_f5b6e")
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+texture_filter = 1
+texture = ExtResource("1_7j25w")
+
+[node name="DrawLine" type="Line2D" parent="."]
+width = 1.0
+
+[node name="TargetLine" type="Node2D" parent="."]
+script = ExtResource("3_r056j")
+color = Color(0.464322, 0.282893, 0, 1)
diff --git a/Player/target_line.gd b/Player/target_line.gd
new file mode 100644
index 0000000..8a321af
--- /dev/null
+++ b/Player/target_line.gd
@@ -0,0 +1,26 @@
+extends Node2D
+
+
+@export var direction := Vector2.ZERO
+@export var origin := Vector2.ZERO
+@export var spacing_factor := 15
+@export var color := Color("#ffa500")
+
+
+func _draw() -> void:
+ var target_direction = direction * (get_viewport_rect().size).length()
+ var points = target_direction.length() / spacing_factor
+ var fraction = (target_direction / points)
+ for point in range(points):
+ color.a = 1.0 / clamp(log(point), 1.0, 10.0)
+ draw_circle(
+ (point + 1) * fraction,
+ 1.0,
+ color
+ )
+ draw_circle(
+ (point + 1) * fraction,
+ 1.0,
+ Color(1.0, 1.0, 1.0, color.a),
+ false
+ )