From 2b0f292f8b7f3bbd104e23f7d90f4cdbb4a3bd9d Mon Sep 17 00:00:00 2001 From: ObeseTermite Date: Sat, 26 Apr 2025 14:32:12 -0700 Subject: [PATCH] Added basic enemy logic --- scenes/bullet/bullet.gd | 6 ++++ scenes/enemies/enemy.gd | 11 ++++++ scenes/enemies/enemy.gd.uid | 1 + scenes/enemies/grunt/grunt.png | Bin 0 -> 341 bytes scenes/enemies/grunt/grunt.png.import | 34 ++++++++++++++++++ scenes/enemies/grunt/grunt.tscn | 23 ++++++++++++ scenes/inventory/WindowPane.png | Bin 1626 -> 1731 bytes scenes/inventory/WindowPane.pxo | Bin 3394 -> 3490 bytes scenes/inventory/inventory.gd | 10 ++++++ scenes/inventory/inventory.tscn | 50 ++++++++++++++++++++++++-- scenes/player/player.gd | 35 ++++++++++++++++-- scenes/world/world.tscn | 15 +++++++- 12 files changed, 179 insertions(+), 6 deletions(-) create mode 100644 scenes/enemies/enemy.gd create mode 100644 scenes/enemies/enemy.gd.uid create mode 100644 scenes/enemies/grunt/grunt.png create mode 100644 scenes/enemies/grunt/grunt.png.import create mode 100644 scenes/enemies/grunt/grunt.tscn diff --git a/scenes/bullet/bullet.gd b/scenes/bullet/bullet.gd index 19ad82f..7697f0f 100644 --- a/scenes/bullet/bullet.gd +++ b/scenes/bullet/bullet.gd @@ -4,5 +4,11 @@ var speed = 100 var base_speed = 10 var direction = 0 +var damage +var hostile = false + func _physics_process(delta: float) -> void: position += speed*delta*base_speed*direction + + if position.x < 0 or position.x > 256 or position.y < 0 or position.y > 256: + queue_free() diff --git a/scenes/enemies/enemy.gd b/scenes/enemies/enemy.gd new file mode 100644 index 0000000..67fb443 --- /dev/null +++ b/scenes/enemies/enemy.gd @@ -0,0 +1,11 @@ +extends Node2D + +var speed = 10 + +@export var player : CharacterBody2D + +@onready var navigation : NavigationAgent2D = $NavigationAgent2D + +func _physics_process(delta: float) -> void: + navigation.target_position = player.positiond + position = position.move_toward(navigation.get_next_path_position(), delta*speed) diff --git a/scenes/enemies/enemy.gd.uid b/scenes/enemies/enemy.gd.uid new file mode 100644 index 0000000..bf1e15a --- /dev/null +++ b/scenes/enemies/enemy.gd.uid @@ -0,0 +1 @@ +uid://do2o6v238umse diff --git a/scenes/enemies/grunt/grunt.png b/scenes/enemies/grunt/grunt.png new file mode 100644 index 0000000000000000000000000000000000000000..a88f2ab29061f07f74e6ae73889ee379ce2a63f5 GIT binary patch literal 341 zcmV-b0jmCqP)Px$4@pEpR9J=WR=W*_Fbq7N-d6P4ftrdb5K~a4W(Rua;#HBN;7@Fjctx%PDe+zG zb7G*O;RcRrIge>M)3+x^XCdp?xzot{b?)-Dj|tF-DIt#v@TOQ3^6><00000NkvXXu0mjfR||-P literal 0 HcmV?d00001 diff --git a/scenes/enemies/grunt/grunt.png.import b/scenes/enemies/grunt/grunt.png.import new file mode 100644 index 0000000..115f2fe --- /dev/null +++ b/scenes/enemies/grunt/grunt.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://nj5tjjv0a6v8" +path="res://.godot/imported/grunt.png-dd52cfd366c89106c2822cb066859c32.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/enemies/grunt/grunt.png" +dest_files=["res://.godot/imported/grunt.png-dd52cfd366c89106c2822cb066859c32.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/scenes/enemies/grunt/grunt.tscn b/scenes/enemies/grunt/grunt.tscn new file mode 100644 index 0000000..a3d1237 --- /dev/null +++ b/scenes/enemies/grunt/grunt.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=4 format=3 uid="uid://bnufqnypubedj"] + +[ext_resource type="Script" uid="uid://do2o6v238umse" path="res://scenes/enemies/enemy.gd" id="1_y73h6"] +[ext_resource type="Texture2D" uid="uid://nj5tjjv0a6v8" path="res://scenes/enemies/grunt/grunt.png" id="2_668pk"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_cahuy"] + +[node name="Grunt" type="Area2D"] +script = ExtResource("1_y73h6") + +[node name="NavigationAgent2D" type="NavigationAgent2D" parent="."] +avoidance_enabled = true +max_speed = 50.0 + +[node name="Grunt" type="Sprite2D" parent="."] +texture = ExtResource("2_668pk") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_cahuy") + +[node name="NavigationObstacle2D" type="NavigationObstacle2D" parent="."] +radius = 10.0 +avoidance_enabled = false diff --git a/scenes/inventory/WindowPane.png b/scenes/inventory/WindowPane.png index 1c15394779ef5f132983ba7b016e1244d7d9d9de..81bbffa913f65a5e454d45f93adcf0b386ae19b0 100644 GIT binary patch literal 1731 zcmcgtYdF+t6#xInU@{nOGJ}y(M(di(u4mM4#-(DaF)Nk3aT%9&om9x}pK&jjWTT9j zP})!~5w&A5E+NgvDk6+WRLkU1gIs2(+P3=8*Zp$N?|I+zyw5r3_dDlJqmcK>$*9Nx z03c^;V{I??5CDJxLQ0IHm*cL99T;xE&l0HW!@d9jsaRWU3x`PNY@w0;$Zo}yA`{Vm z!}ICEuB$sZl8>(TSomw_D+Yus>~uD`g)YA8mFyj)gWqf8IQ(0XZL=WIao5FI(|48$?CRTv#lcQccc6*5 zUG!4)cA;S{exZb9Xi_^p**5l&d;iQKtArgr8N(T&LP4H2bCvL;ariA{Sd2(`JCZ1l z+D0dFwOjI@m=EmSz^~im0Pp~iYXQ&|h*-FSv=~AycXqRBYw>Ul;_;H%cQ_8tRekL5 zsps9jz3w4ZId~#u5tgC;H1jmT$8o5o?#r2WA{E5i##bxeUO3Kp1r6Q=wK&~XB|>Jn*~~@=07YqlfP zyYk#2JVG8;l!ZFH#X^f54VT1}<@gQ|@XLl$nCm&dTtXSkxO|d;FE%dkCzOqwQvOZ- ziz+@sjBL795{uw~Nw;ce5fuAipcI2oF|v$}^_L~mXP`TKPs*`_B0B&^?Y&m3DUZjU z4W+w4_)IR1ky0hhE4WdrM?~|C45mEnx7pAre)JeGx&1UAhfcDjQBpowKRU^ZM(L!J zh&0MII;rI+h=9P!!%`XI_Iv?3R0?LRY?4N+*vThpgef5mF^x$Y2%cG-M|1rw15lep zGb(~ph#wQ5$)_EpcArGRXE5>4LudU`QLuqi>m$__r5fZoCcbJtG^#zmUM-=!Sbj1$ z@ssW2=O%X-XHMoq-Nod|+=QpZ&$No)r5Z-+xni~;(aD{y?Gx2u1SA|I`wR{E3gd8H z+dRGQfSx2%F>Q{~hyiI(sx@>~QCWcscnOf>NgFMfYN1|<)CqH$%QCRzDnTP#w#qSq1qx7uj_0f(6G72grlTA)}H33 zhF5KSsK;`t%b6Fl`LUOZWU7odVVb%FpB+nP_g6<835ZL}-{`See-d4T&p{=Y%Fq4U zhpyu-`CfsQ@`iJR^|efD#XEw65;yPs3Q>vY;~dhPvh35L<4HQeDkQ@(>f)QTAa_DM zIUy450qa>76twur3AWVJbu-v%MH4yh?l`Uz6|DLWGI-C@_E!d+_|ON#rge6M7~J&s zH{b%mH}@G~|kKrOtOTR$oAKCOn6NHu9h`G5znPIbiO+xhyY7Pl!5zp#epmn913 WFHa8!wDZKj5@5TBY+YqZP51}o6Vq1! literal 1626 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 Vector2: return items_start.global_position + Vector2(position.x*item_offset,position.y*item_offset) diff --git a/scenes/inventory/inventory.tscn b/scenes/inventory/inventory.tscn index 69dbce6..8cee76e 100644 --- a/scenes/inventory/inventory.tscn +++ b/scenes/inventory/inventory.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=9 format=3 uid="uid://o6e5ybx262ig"] +[gd_scene load_steps=12 format=3 uid="uid://o6e5ybx262ig"] [ext_resource type="Script" uid="uid://466pugqribug" path="res://scenes/inventory/inventory.gd" id="1_el5y6"] [ext_resource type="PackedScene" uid="uid://csdmile32lfyy" path="res://scenes/inventory/number/number.tscn" id="2_4axmw"] @@ -16,6 +16,21 @@ font = ExtResource("4_tvok8") font_size = 8 font_color = Color(0.156863, 0.137255, 0.156863, 1) +[sub_resource type="LabelSettings" id="LabelSettings_x4j3l"] +font = ExtResource("4_tvok8") +font_size = 8 +font_color = Color(0.772549, 0.411765, 0.505882, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_l6cit"] +font = ExtResource("4_tvok8") +font_size = 8 +font_color = Color(0.329412, 0.360784, 0.494118, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_efxst"] +font = ExtResource("4_tvok8") +font_size = 8 +font_color = Color(0.156863, 0.137255, 0.156863, 1) + [sub_resource type="LabelSettings" id="LabelSettings_v8e04"] font = ExtResource("4_tvok8") font_size = 8 @@ -59,9 +74,36 @@ offset_left = -105.0 offset_top = 26.0 offset_right = -85.0 offset_bottom = 49.0 -text = "- 100" +text = "- 7" label_settings = SubResource("LabelSettings_kl7fi") +[node name="Health" type="Label" parent="."] +layout_mode = 0 +offset_left = -105.0 +offset_top = 36.0 +offset_right = -85.0 +offset_bottom = 59.0 +text = "- 100" +label_settings = SubResource("LabelSettings_x4j3l") + +[node name="Money" type="Label" parent="."] +layout_mode = 0 +offset_left = -105.0 +offset_top = 48.0 +offset_right = -85.0 +offset_bottom = 71.0 +text = "- 0" +label_settings = SubResource("LabelSettings_l6cit") + +[node name="Score" type="Label" parent="."] +layout_mode = 0 +offset_left = -118.0 +offset_top = 115.0 +offset_right = 4.0 +offset_bottom = 140.0 +text = "SCORE - 0" +label_settings = SubResource("LabelSettings_efxst") + [node name="BulletSpeed" type="Label" parent="."] layout_mode = 0 offset_left = -20.0 @@ -88,6 +130,7 @@ text = "=10" label_settings = SubResource("LabelSettings_bxceu") [node name="Size" type="Label" parent="."] +layout_mode = 0 offset_left = -71.0 offset_top = -17.0 offset_right = -46.0 @@ -97,6 +140,7 @@ label_settings = SubResource("LabelSettings_v8e04") horizontal_alignment = 1 [node name="TaxRate" type="Label" parent="."] +layout_mode = 0 offset_left = -46.0 offset_top = -17.0 offset_right = -21.0 @@ -106,6 +150,7 @@ label_settings = SubResource("LabelSettings_v8e04") horizontal_alignment = 1 [node name="FiringDelay" type="Label" parent="."] +layout_mode = 0 offset_left = -98.0 offset_top = -17.0 offset_right = -73.0 @@ -115,6 +160,7 @@ label_settings = SubResource("LabelSettings_v8e04") horizontal_alignment = 1 [node name="IncomingDamage" type="Label" parent="."] +layout_mode = 0 offset_left = -124.0 offset_top = -17.0 offset_right = -99.0 diff --git a/scenes/player/player.gd b/scenes/player/player.gd index 80715b5..61da654 100644 --- a/scenes/player/player.gd +++ b/scenes/player/player.gd @@ -12,7 +12,17 @@ var bullet_delay var size = 100 var tax -var remaining_bullets = 100 +var reloading = false + +var remaining_bullets = 7 + +var health = 100 + +var money = 0 + +var score = 0 + +var reload_speed = 0.1 var bullet_timer = 0 @@ -44,17 +54,36 @@ func _physics_process(delta): sprite.global_position = Vector2i(global_position) collision.scale = Vector2(0.3,0.3)*(pow(size,0.2)) + + if bullet_timer < 0 and reloading: + remaining_bullets += 1 + bullet_timer = reload_speed + if remaining_bullets >= ammunition: + reloading = false + bullet_timer = 0.1*pow(bullet_delay,0.4) + inventory.update_stats() func reload(): - pass + reloading = true + func spawn_bullet(): - if bullet_timer > 0: return + if bullet_timer > 0 or reloading: return + var new_bullet = bullet_scene.instantiate() new_bullet.direction = global_position.direction_to(get_global_mouse_position()) new_bullet.position = position + new_bullet.damage = damage new_bullet.speed = sqrt(bullet_speed) get_tree().root.add_child(new_bullet) bullet_timer = 0.1*pow(bullet_delay,0.4) + remaining_bullets -= 1 + + inventory.update_stats() + + if remaining_bullets <= 0: + reload() + return + diff --git a/scenes/world/world.tscn b/scenes/world/world.tscn index d987f67..d04acba 100644 --- a/scenes/world/world.tscn +++ b/scenes/world/world.tscn @@ -1,7 +1,13 @@ -[gd_scene load_steps=3 format=3 uid="uid://dinanmpmnja1"] +[gd_scene load_steps=5 format=3 uid="uid://dinanmpmnja1"] [ext_resource type="PackedScene" uid="uid://o6e5ybx262ig" path="res://scenes/inventory/inventory.tscn" id="1_dphjl"] [ext_resource type="PackedScene" uid="uid://citwevx7xvypn" path="res://scenes/player/player.tscn" id="2_sl2e5"] +[ext_resource type="PackedScene" uid="uid://bnufqnypubedj" path="res://scenes/enemies/grunt/grunt.tscn" id="3_1fp7r"] + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_6m72w"] +vertices = PackedVector2Array(230, 25.5312, 230, 244.82, 19.25, 241.148, 1.75781, 20.2891, 50.1172, 17.0078) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3, 4)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(50, 7, 240, 16, 240, 255, 10, 251, -9, 11)]) [node name="World" type="Node2D"] @@ -13,3 +19,10 @@ player = NodePath("../../Player") [node name="Player" parent="." node_paths=PackedStringArray("inventory") instance=ExtResource("2_sl2e5")] position = Vector2(131, 131) inventory = NodePath("../UI/Inventory") + +[node name="Grunt" parent="." node_paths=PackedStringArray("player") instance=ExtResource("3_1fp7r")] +position = Vector2(42, 47) +player = NodePath("../Player") + +[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."] +navigation_polygon = SubResource("NavigationPolygon_6m72w")