diff --git a/block/Assets/PlaceHolders/Blob.png b/block/Assets/PlaceHolders/Blob.png new file mode 100644 index 0000000..131e04c Binary files /dev/null and b/block/Assets/PlaceHolders/Blob.png differ diff --git a/block/Assets/PlaceHolders/Blob.png.import b/block/Assets/PlaceHolders/Blob.png.import new file mode 100644 index 0000000..08f6797 --- /dev/null +++ b/block/Assets/PlaceHolders/Blob.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bsjn11wcewgya" +path="res://.godot/imported/Blob.png-3a1a5deaf3590dc1853ac0b0bd158753.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/PlaceHolders/Blob.png" +dest_files=["res://.godot/imported/Blob.png-3a1a5deaf3590dc1853ac0b0bd158753.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/block/Assets/PlaceHolders/BuffMonk.png b/block/Assets/PlaceHolders/BuffMonk.png new file mode 100644 index 0000000..6557c26 Binary files /dev/null and b/block/Assets/PlaceHolders/BuffMonk.png differ diff --git a/block/Assets/PlaceHolders/BuffMonk.png.import b/block/Assets/PlaceHolders/BuffMonk.png.import new file mode 100644 index 0000000..fa2f369 --- /dev/null +++ b/block/Assets/PlaceHolders/BuffMonk.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://xg0mu5mtpcgo" +path="res://.godot/imported/BuffMonk.png-1bcf3f620dedfe8f64fe9de0addc56fe.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/PlaceHolders/BuffMonk.png" +dest_files=["res://.godot/imported/BuffMonk.png-1bcf3f620dedfe8f64fe9de0addc56fe.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/block/Assets/PlaceHolders/FallGuy.png b/block/Assets/PlaceHolders/FallGuy.png new file mode 100644 index 0000000..a1f5205 Binary files /dev/null and b/block/Assets/PlaceHolders/FallGuy.png differ diff --git a/block/Assets/PlaceHolders/FallGuy.png.import b/block/Assets/PlaceHolders/FallGuy.png.import new file mode 100644 index 0000000..86eca93 --- /dev/null +++ b/block/Assets/PlaceHolders/FallGuy.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dfo7q0g3skud5" +path="res://.godot/imported/FallGuy.png-02f4a1ba0f67e389b5e6e02f7fee4c6c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/PlaceHolders/FallGuy.png" +dest_files=["res://.godot/imported/FallGuy.png-02f4a1ba0f67e389b5e6e02f7fee4c6c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/block/Scenes/Enemy1.tscn b/block/Scenes/Enemy1.tscn new file mode 100644 index 0000000..060c40a --- /dev/null +++ b/block/Scenes/Enemy1.tscn @@ -0,0 +1,25 @@ +[gd_scene format=3 uid="uid://db1oeukux1376"] + +[ext_resource type="Texture2D" uid="uid://xg0mu5mtpcgo" path="res://Assets/PlaceHolders/BuffMonk.png" id="1_g6sln"] +[ext_resource type="Script" uid="uid://d34snqiuscbv8" path="res://Scenes/enemy_1.gd" id="1_s7od6"] +[ext_resource type="PackedScene" uid="uid://b3ngjk0lkeemd" path="res://Scenes/Projectile_1.tscn" id="2_n3m8v"] + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_g6sln"] + +[node name="Enemy1" type="CharacterBody2D" unique_id=1765361359] +script = ExtResource("1_s7od6") +Projectile = ExtResource("2_n3m8v") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=93765061] +position = Vector2(22, -29) +scale = Vector2(0.3, 0.3) +texture = ExtResource("1_g6sln") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1856443411] +scale = Vector2(6, 6) +shape = SubResource("CapsuleShape2D_g6sln") + +[node name="DirectionTimer" type="Timer" parent="." unique_id=509704860] +autostart = true + +[connection signal="timeout" from="DirectionTimer" to="." method="_on_timer_timeout"] diff --git a/block/Scenes/Projectile_1.gd b/block/Scenes/Projectile_1.gd new file mode 100644 index 0000000..c629645 --- /dev/null +++ b/block/Scenes/Projectile_1.gd @@ -0,0 +1,49 @@ +extends Node2D + +const speed = 200 +@onready var player: CharacterBody2D = get_tree().get_first_node_in_group("player") +var direction = Vector2.RIGHT +#var debug_normal: Vector2 = Vector2.ZERO + + +func _ready() -> void: + #direction = (player.global_position - global_position).normalized() + #look_at(player.global_position) +# pass + direction = (player.global_position - global_position).normalized() + global_rotation=direction.angle() + #direction= global_position.direction_to(player.global_position) + #direction = Vector2.RIGHT.rotated(rotation+ get_angle_to(playerDirection)) + +func _draw(): + pass +# draw_line(Vector2(1,0) * 1000, debug_normal * 50, Color.RED, 2.0) + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + position += direction * speed * delta + #position += playerDirection * speed * delta + look_at(player.global_position) + + #look_at(direction)# + +func get_facing_direction(): + # Get the direction vector based on the node's current rotation + var direction_vector: Vector2 = Vector2.from_angle(rotation) + return direction_vector + +func changeTrajectory(direction_vector: Vector2): + rotation = rad_to_deg(atan2(direction_vector.y, direction_vector.x)) + +func changeDirection(normal: Vector2): + print("direction:", direction) +# direction = direction.bounce(normal) + direction = normal + #direction = newDirection + #direction = direction.bounce(perp_line) + rotation = rad_to_deg(direction.angle()) + print("direction:", direction) + +func bounce(normal: Vector2): + direction = direction.bounce(normal) + rotation = rad_to_deg(direction.angle()) diff --git a/block/Scenes/Projectile_1.gd.uid b/block/Scenes/Projectile_1.gd.uid new file mode 100644 index 0000000..415c7c8 --- /dev/null +++ b/block/Scenes/Projectile_1.gd.uid @@ -0,0 +1 @@ +uid://bxqq5rcm0twuk diff --git a/block/Scenes/Projectile_1.tscn b/block/Scenes/Projectile_1.tscn new file mode 100644 index 0000000..33297b5 --- /dev/null +++ b/block/Scenes/Projectile_1.tscn @@ -0,0 +1,34 @@ +[gd_scene format=3 uid="uid://b3ngjk0lkeemd"] + +[ext_resource type="Texture2D" uid="uid://bsjn11wcewgya" path="res://Assets/PlaceHolders/Blob.png" id="1_1rre0"] +[ext_resource type="Script" uid="uid://bxqq5rcm0twuk" path="res://Scenes/Projectile_1.gd" id="1_lrei0"] + +[sub_resource type="GDScript" id="GDScript_4ipem"] +script/source = "extends Area2D + + +# Called when the node enters the scene tree for the first time. +#func _ready() -> void: +# pass # Replace with function body. + + +" + +[sub_resource type="CircleShape2D" id="CircleShape2D_v0834"] + +[node name="Projectile1" type="Node2D" unique_id=1531719161] +script = ExtResource("1_lrei0") + +[node name="Area2D" type="Area2D" parent="." unique_id=1629546418 groups=["Projectiles"]] +collision_layer = 2 +collision_mask = 2 +script = SubResource("GDScript_4ipem") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D" unique_id=286593893] +scale = Vector2(1.1, 1.1) +shape = SubResource("CircleShape2D_v0834") + +[node name="Sprite2D" type="Sprite2D" parent="Area2D" unique_id=1983633174] +position = Vector2(-0.9999995, 1) +scale = Vector2(0.17, 0.17) +texture = ExtResource("1_1rre0") diff --git a/block/Scenes/enemy_1.gd b/block/Scenes/enemy_1.gd new file mode 100644 index 0000000..e5b4667 --- /dev/null +++ b/block/Scenes/enemy_1.gd @@ -0,0 +1,89 @@ +extends CharacterBody2D + +class_name Enemy1 +enum States +{ + IDLE, + ROAM, + CHASE, + ATTACK, + TAKING_DAMMAGE, + DEAD +} +const max_distance = 750 +const SPEED = 300.0 +var is_enemy_chase: bool +# +var health = 100 +var health_max = 100 +var health_min = 0 + +var attack_dammage = 10 + +var dir: Vector2 +var knockback = 200 +var current_state = States.IDLE + + + + +@onready var player: CharacterBody2D = get_tree().get_first_node_in_group("player") +@export var Projectile: PackedScene + +func _on_timer_timeout() -> void: + $DirectionTimer.wait_time = chose([1,2,3]) + if current_state !=States.CHASE: + dir = chose([Vector2.RIGHT, Vector2.LEFT]) + var newProjectile = Projectile.instantiate() as Node2D + newProjectile.global_position=global_position +# newProjectile.global_rotation=global_rotation + get_tree().current_scene.add_child(newProjectile) + + + +func chose(array): + array.shuffle() + return array.front() + +func wraparound(): + var direction = global_position.direction_to(player.global_position) + global_position += direction * max_distance*2 + + + + + +func _process(delta: float) -> void: + look_at(player.global_position) + #print(player.global_position) + var distance = global_position.distance_to(player.global_position) + if distance>max_distance: + wraparound() + + + """ + if (global_position.x-player.global_position.x)>600:#player to the right + global_position.x=player.global_position.x-600#move right + elif(global_position.x-player.global_position.x)<-600:#player to the left + global_position.x=player.global_position.x+600#move left + + if (global_position.y-player.global_position.y)>600:#player to the up + global_position.y=player.global_position.y-600#move up + elif(global_position.y-player.global_position.y)<-600:#player to the down + global_position.y=player.global_position.y+600#move down + """ +""" +func _physics_process(delta: float) -> void: + # Add the gravity. + if not is_on_floor(): + velocity += get_gravity() * delta + # Get the input direction and handle the movement/deceleration. + # As good practice, you should replace UI actions with custom gameplay actions. + var direction := Input.get_axis("ui_left", "ui_right") + if direction: + velocity.x = direction * SPEED + else: + velocity.x = move_toward(velocity.x, 0, SPEED) + + move_and_slide() +""" diff --git a/block/Scenes/enemy_1.gd.uid b/block/Scenes/enemy_1.gd.uid new file mode 100644 index 0000000..4c0537c --- /dev/null +++ b/block/Scenes/enemy_1.gd.uid @@ -0,0 +1 @@ +uid://d34snqiuscbv8 diff --git a/block/Scenes/game.tscn b/block/Scenes/game.tscn index abb80c4..338f8b4 100644 --- a/block/Scenes/game.tscn +++ b/block/Scenes/game.tscn @@ -1,7 +1,11 @@ [gd_scene format=3 uid="uid://du7hapc7kscm6"] [ext_resource type="PackedScene" uid="uid://b448mpav6ek52" path="res://Scenes/arena_game_manager.tscn" id="1_ebmjs"] +[ext_resource type="PackedScene" uid="uid://db1oeukux1376" path="res://Scenes/Enemy1.tscn" id="2_qxrlw"] [node name="Game" type="Node2D" unique_id=850692785] [node name="ArenaGameManager" parent="." unique_id=1024187604 instance=ExtResource("1_ebmjs")] + +[node name="Enemy1" parent="." unique_id=1765361359 instance=ExtResource("2_qxrlw")] +position = Vector2(297, 101) diff --git a/block/Scenes/player.gd b/block/Scenes/player.gd index 06269b7..2a4a026 100644 --- a/block/Scenes/player.gd +++ b/block/Scenes/player.gd @@ -20,4 +20,4 @@ func _process(_delta: float) -> void: # look_at(get_global_mouse_position()) # uncompensated mouse control var angle_to_mouse = get_angle_to(get_global_mouse_position()) - rotation += angle_to_mouse + deg_to_rad(90) #+90 to makes top of image face mouse, not side + rotation += angle_to_mouse# + deg_to_rad(90) #+90 to makes top of image face mouse, not side diff --git a/block/Scenes/player.tscn b/block/Scenes/player.tscn index cfe4161..f2491a0 100644 --- a/block/Scenes/player.tscn +++ b/block/Scenes/player.tscn @@ -2,16 +2,40 @@ [ext_resource type="Script" uid="uid://bah031ailk0ha" path="res://Scenes/player.gd" id="1_cvnsp"] [ext_resource type="Texture2D" uid="uid://g0m835iol4mp" path="res://Assets/PlaceHolders/Screenshot 2024-11-24 210808.png" id="1_v0iea"] +[ext_resource type="Texture2D" uid="uid://bcmuqd6p3jhdw" path="res://Assets/PlaceHolders/Elmo.png" id="3_6t5aa"] +[ext_resource type="Script" uid="uid://b7vgyn15fioeu" path="res://Scenes/shield_hitbox.gd" id="4_vgqql"] [sub_resource type="CircleShape2D" id="CircleShape2D_v0iea"] -[node name="CharacterBody2D" type="CharacterBody2D" unique_id=1419412180] +[sub_resource type="RectangleShape2D" id="RectangleShape2D_6t5aa"] + +[node name="Player" type="CharacterBody2D" unique_id=1419412180 groups=["player"]] script = ExtResource("1_cvnsp") -[node name="Sprite2D" type="Sprite2D" parent="." unique_id=719417979] +[node name="Body" type="Sprite2D" parent="." unique_id=719417979] scale = Vector2(0.114894986, 0.11449075) texture = ExtResource("1_v0iea") -[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1477808378] +[node name="BodyColision" type="CollisionShape2D" parent="." unique_id=1477808378] scale = Vector2(4.2653956, 4.2653956) shape = SubResource("CircleShape2D_v0iea") + +[node name="Shield" type="Sprite2D" parent="." unique_id=212386399] +position = Vector2(50, 0) +scale = Vector2(0.15, 0.15) +texture = ExtResource("3_6t5aa") + +[node name="ShieldColision" type="CollisionShape2D" parent="." unique_id=948717563] +position = Vector2(50, 0) +scale = Vector2(2.5, 6) +shape = SubResource("RectangleShape2D_6t5aa") + +[node name="ShieldHitbox" type="Area2D" parent="." unique_id=2121529100] +collision_layer = 2 +collision_mask = 2 +script = ExtResource("4_vgqql") + +[node name="ShieldHitboxCol" type="CollisionShape2D" parent="ShieldHitbox" unique_id=1829894325] +position = Vector2(50, 0) +scale = Vector2(2.5, 6) +shape = SubResource("RectangleShape2D_6t5aa") diff --git a/block/Scenes/shield_hitbox.gd b/block/Scenes/shield_hitbox.gd new file mode 100644 index 0000000..8dfc819 --- /dev/null +++ b/block/Scenes/shield_hitbox.gd @@ -0,0 +1,45 @@ +extends Area2D + +var debug_normal: Vector2 = Vector2.ZERO +var bounceTrajectory: Vector2 + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + area_entered.connect(_on_area_entered) + print("READY!") + + + +func _draw(): +# pass + draw_line(bounceTrajectory *1000, debug_normal * 50, Color.RED, 2.0) # normal +# draw_line(Vector2(400,900), debug_normal * 50, Color.RED, 2.0) # normal +# draw_line(Vector2.ZERO, debug_bounce * 50, Color.GREEN, 2.0) # bounce direction +# draw_line(Vector2.ZERO, debug_incoming * 50, Color.BLUE, 2.0) # incoming projectile + + +func _on_area_entered(area): + if area.is_in_group("Projectiles"): + draw_line(Vector2(400,900), debug_normal * 50, Color.RED, 2.0) # normal + + print("projectile has hit player shield") + #gets the proper velocity + var projectile_velocity = area.get_parent().get_facing_direction() + print("projectile speed......................", projectile_velocity) + var shield_normal = global_transform.x.normalized() + #var bounceTrajectory: Vector2 = projectile_velocity.bounce(shield_normal) + bounceTrajectory = projectile_velocity.bounce(shield_normal) + print("Shield Normal: ", shield_normal) + if area.get_parent().has_method("changeDirection"): + draw_line(bounceTrajectory, debug_normal * 50, Color.RED, 2.0) +# area.changeDirection(bounceTrajectory) +# area.get_parent().changeTrajectory(bounceTrajectory) + area.get_parent().changeDirection(bounceTrajectory) + #if area.has_method("bounce"): + # area.bounce(bounceTrajectory) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta: float) -> void: +# pass diff --git a/block/Scenes/shield_hitbox.gd.uid b/block/Scenes/shield_hitbox.gd.uid new file mode 100644 index 0000000..8dcd1eb --- /dev/null +++ b/block/Scenes/shield_hitbox.gd.uid @@ -0,0 +1 @@ +uid://b7vgyn15fioeu diff --git a/block/project.godot b/block/project.godot index b20b420..0e5727c 100644 --- a/block/project.godot +++ b/block/project.godot @@ -15,6 +15,11 @@ run/main_scene="uid://du7hapc7kscm6" config/features=PackedStringArray("4.6", "Forward Plus") config/icon="res://icon.svg" +[global_group] + +player="Making this for an easy reference to the player in the enemies code" +Projectiles="Tell if the object is a projectile or not" + [input] move_up={ diff --git a/todoList b/todoList index d8e9abb..899aa7b 100644 --- a/todoList +++ b/todoList @@ -12,3 +12,60 @@ Done Current imported assests: https://screamingbrainstudios.itch.io/tiny-texture-pack + + + +x1*x2+y1*y2 + +along normal speedx*sp + + + + + + + + + + + + var proje_normal = global_transform.x.normalized() + #proje_normal.y = -proje_normal.y + print("Proje Normal: ", proje_normal) + var speed_perp: float = proje_normal.dot(normal) + var perp_line: Vector2 = Vector2(normal.y,-normal.x) + var speed_para: float = proje_normal.dot(perp_line) + print("speed perp: ", speed_perp) + print("speed para: ", speed_para) + # this is just to check my math + # should be aproximately 1 (there will be some bit depth precision errors) + print("speed hype: ", speed_para*speed_para + speed_perp*speed_perp) + + var newDirection: Vector2 = Vector2( + (speed_perp * normal.x) + (speed_para * normal.y), + (speed_perp * normal.y) + (speed_para *-normal.x)) + + + + + + + + + + var projectile_velocity = area.get_parent().get_facing_direction() + print("projectile speed......................", projectile_velocity) + var shield_normal = global_transform.x.normalized() + print("Shield Normal: ", shield_normal) + #shield_normal.y = -shield_normal.y +# if abs(projectile_velocity.y)>abs(projectile_velocity.x): +# shield_normal = global_transform.y.normalized() + #shield_normal.y = -shield_normal.y + #shield_normal.x = -shield_normal.x +# var shield_perp = Vector2(shield_normal.y,-shield_normal.x) +# if area.has_method("bounce"): +# if projectile_velocity.dot(shield_perp) < 0: +# area.bounce(shield_normal) + if area.has_method("bounce"): + #if projectile_velocity.dot(shield_normal) < 0: + area.bounce(shield_normal) \ No newline at end of file