From 79a5fedf7879da9b2395305e1b47f43e55f6d2aa Mon Sep 17 00:00:00 2001 From: altaf-creator <dev@altafcreator.com> Date: Sun, 9 Mar 2025 17:05:54 +0800 Subject: Initial commit. Prototype finished. --- .gitattributes | 2 + .gitignore | 2 + Asteroid.gd | 71 +++++++++++++++++++ Game.gd | 16 +++++ GravityGun.gd | 73 ++++++++++++++++++++ Gun.png | Bin 0 -> 10229 bytes Gun.png.import | 34 ++++++++++ GunRotation.gd | 15 ++++ Player.gd | 19 ++++++ PlayerMovement.gd | 23 +++++++ Spawner.gd | 28 ++++++++ UFO with a Gravity Gun.pck | Bin 0 -> 109216 bytes UFO.png | Bin 0 -> 18207 bytes UFO.png.import | 34 ++++++++++ asteroid.png | Bin 0 -> 2579 bytes asteroid.png.import | 34 ++++++++++ asteroid.tscn | 49 +++++++++++++ cursor.png | Bin 0 -> 2547 bytes cursor.png.import | 34 ++++++++++ export_presets.cfg | 140 ++++++++++++++++++++++++++++++++++++++ gpu_particles_2d.tscn | 53 +++++++++++++++ gravityzone.png | Bin 0 -> 61373 bytes gravityzone.png.import | 34 ++++++++++ icon.svg | 1 + icon.svg.import | 37 ++++++++++ node_2d.tscn | 166 +++++++++++++++++++++++++++++++++++++++++++++ normal.tscn | 51 ++++++++++++++ project.godot | 46 +++++++++++++ 28 files changed, 962 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Asteroid.gd create mode 100644 Game.gd create mode 100644 GravityGun.gd create mode 100644 Gun.png create mode 100644 Gun.png.import create mode 100644 GunRotation.gd create mode 100644 Player.gd create mode 100644 PlayerMovement.gd create mode 100644 Spawner.gd create mode 100644 UFO with a Gravity Gun.pck create mode 100644 UFO.png create mode 100644 UFO.png.import create mode 100644 asteroid.png create mode 100644 asteroid.png.import create mode 100644 asteroid.tscn create mode 100644 cursor.png create mode 100644 cursor.png.import create mode 100644 export_presets.cfg create mode 100644 gpu_particles_2d.tscn create mode 100644 gravityzone.png create mode 100644 gravityzone.png.import create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 node_2d.tscn create mode 100644 normal.tscn create mode 100644 project.godot diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4709183 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Godot 4+ specific ignores +.godot/ diff --git a/Asteroid.gd b/Asteroid.gd new file mode 100644 index 0000000..8b93b24 --- /dev/null +++ b/Asteroid.gd @@ -0,0 +1,71 @@ +extends RigidBody2D + +@export var killer : bool +@export var posessed : bool +@export var persistent_linear_velocity : Vector2 +@export var particle_chad : PackedScene +@export var particle_virgin : PackedScene + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass + #look_at(get_tree().get_root().get_node("Prototype/Player").position) + +func _physics_process(delta): + #global_position += linear_velocity + if persistent_linear_velocity != Vector2.ZERO: + linear_velocity = persistent_linear_velocity + pass + +func _on_area_entered(area): + if killer: + area.queue_free() + +func start_timebomb(): + $"LifeTimer".start() + +func _on_life_timer_timeout(): + queue_free() + +func _on_body_entered(body): + print(body.name) + if killer: + if body.name != "Player": + print("kill") + body.destroy(true) + else: + if !("killer" in body): + if posessed: + if body.name != "Player": + body.destroy() + else: + body.destroy() + elif body.killer: + return + else: + body.destroy() + +#func _on_area_2d_area_entered(area): +# pass # Replace with function body. + +#func _on_area_2d_body_entered(body): +# if killer: +# body.queue_free() + +func destroy(player_killed = false): + var part + + if player_killed: + part = particle_chad + else: + part = particle_virgin + + var new = part.instantiate() + new.position = global_position + new.emitting = true + get_tree().get_root().get_node("Prototype").add_child(new) + queue_free() diff --git a/Game.gd b/Game.gd new file mode 100644 index 0000000..78f9b84 --- /dev/null +++ b/Game.gd @@ -0,0 +1,16 @@ +extends Node2D + +@export var player : RigidBody2D +@export_file("*.tscn") var scene : String +@export var ded_text : Label + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + if player == null: + ded_text.visible = true + if Input.is_action_just_pressed("ui_select"): + get_tree().change_scene_to_file(scene) diff --git a/GravityGun.gd b/GravityGun.gd new file mode 100644 index 0000000..0237fc6 --- /dev/null +++ b/GravityGun.gd @@ -0,0 +1,73 @@ +extends Node + +var using : bool +var capturing : bool + +var prev_using : bool + +@export var area : Area2D +@export var captured_body : RigidBody2D +@export var capture_anchor : Node2D +@export_range(0.0, 0.1) var current_strength : float +@export var close_range : float +@export var grab_speed : float +@export var throw_velocity : float + +var stored_velovity : Vector2 + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _physics_process(delta): + area.visible = using + + if using and capturing and captured_body != null: + var dist : Vector2 = capture_anchor.global_position - captured_body.global_position + var dir : Vector2 = dist.normalized() + var dis : float = sqrt(abs(abs(dist.x * dist.x) - abs(dist.y * dist.y))) # phytagoras! + print(dis) + + # captured_body.global_position = capture_anchor.global_position + + #if dis > close_range: + captured_body.apply_central_impulse(dir * grab_speed)# * (1 - (dis / close_range))) + + PhysicsServer2D.body_set_state( + captured_body.get_rid(), + PhysicsServer2D.BODY_STATE_TRANSFORM, + Transform2D.IDENTITY.translated(captured_body.global_position.lerp(capture_anchor.global_position, 0.1)) + ) + + # stored_velovity = captured_body.linear_velocity + #captured_body.linear_velocity = captured_body.linear_velocity.clamp(Vector2.ZERO, Vector2.ONE * 200) + #else: + # captured_body.linear_velocity = stored_velovity * (dis / close_range) # dis nuts + # captured_body.apply_central_impulse(dir * 1) + + if using != prev_using: + prev_using = using + + if !using && capturing and captured_body != null: + captured_body.persistent_linear_velocity = Vector2(sin($"..".rotation + deg_to_rad(90)), cos($"..".rotation + deg_to_rad(-90))) * throw_velocity + captured_body.killer = true + captured_body.start_timebomb() + captured_body = null + capturing = false + +func _input(event): + using = Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) + +func _on_gravity_area_2d_body_entered(body): + print(body) + if using && captured_body == null: + captured_body = body + captured_body.posessed = true + capturing = true + +func _on_gravity_area_2d_area_entered(area): + print(area) + if using && captured_body == null: + captured_body = area + capturing = true diff --git a/Gun.png b/Gun.png new file mode 100644 index 0000000..e32c6db Binary files /dev/null and b/Gun.png differ diff --git a/Gun.png.import b/Gun.png.import new file mode 100644 index 0000000..decfabb --- /dev/null +++ b/Gun.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bpfxsieu5ykss" +path="res://.godot/imported/Gun.png-719d9323171cf2dec61a4f973c72372a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Gun.png" +dest_files=["res://.godot/imported/Gun.png-719d9323171cf2dec61a4f973c72372a.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/GunRotation.gd b/GunRotation.gd new file mode 100644 index 0000000..5398519 --- /dev/null +++ b/GunRotation.gd @@ -0,0 +1,15 @@ +extends Node + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + var mouse_position : Vector2 = get_viewport().get_mouse_position() + var delta_x : float = mouse_position.x - $"..".global_position.x + var delta_y : float = mouse_position.y - $"..".global_position.y + + $"..".rotation = atan2(delta_y, delta_x) diff --git a/Player.gd b/Player.gd new file mode 100644 index 0000000..df31a9e --- /dev/null +++ b/Player.gd @@ -0,0 +1,19 @@ +extends RigidBody2D + +@export var particle : PackedScene + +# Called when the node enters the scene tree for the first time. +func _ready(): + position = Vector2(randf_range(100, 1180), randf_range(100, 620)) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass + +func destroy(): + var new = particle.instantiate() + new.position = global_position + new.emitting = true + get_tree().get_root().get_node("Prototype").add_child(new) + queue_free() diff --git a/PlayerMovement.gd b/PlayerMovement.gd new file mode 100644 index 0000000..df9b002 --- /dev/null +++ b/PlayerMovement.gd @@ -0,0 +1,23 @@ +extends Node + +@export var speed : float +@export var velocity_dampening : float + +var target_velocity : Vector2 +var velocity : Vector2 + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + var input : Vector2 = Input.get_vector("left", "right", "up", "down") + target_velocity = input * delta * speed + + if input != Vector2.ZERO: + velocity = velocity.lerp(target_velocity, velocity_dampening * 2) + else: + velocity = velocity.lerp(target_velocity, velocity_dampening) + + $"..".position += velocity diff --git a/Spawner.gd b/Spawner.gd new file mode 100644 index 0000000..153d9bf --- /dev/null +++ b/Spawner.gd @@ -0,0 +1,28 @@ +extends Node + +@export var asteroid : PackedScene +@export var root : Node2D +@export var player : RigidBody2D +@export var v1 : Vector2 +@export var v2 : Vector2 +@export var speed : float + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass + +func _on_timer_timeout(): + if player != null: + var new : RigidBody2D = asteroid.instantiate() + + new.position = Vector2(randf_range(v1.x, v2.x), randf_range(v1.y, v2.y)) + new.look_at(player.position) + new.linear_velocity = Vector2(0, speed).rotated(new.rotation + deg_to_rad(-90)) + root.add_child(new) + + $"Timer".wait_time = randf_range(1, 3) + $"Timer".start() diff --git a/UFO with a Gravity Gun.pck b/UFO with a Gravity Gun.pck new file mode 100644 index 0000000..82a7714 Binary files /dev/null and b/UFO with a Gravity Gun.pck differ diff --git a/UFO.png b/UFO.png new file mode 100644 index 0000000..65f16e5 Binary files /dev/null and b/UFO.png differ diff --git a/UFO.png.import b/UFO.png.import new file mode 100644 index 0000000..81cae35 --- /dev/null +++ b/UFO.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bvi0mierwp5c" +path="res://.godot/imported/UFO.png-6b28bfc670ee81a0c16ac713fabd0bf3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://UFO.png" +dest_files=["res://.godot/imported/UFO.png-6b28bfc670ee81a0c16ac713fabd0bf3.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/asteroid.png b/asteroid.png new file mode 100644 index 0000000..d844d66 Binary files /dev/null and b/asteroid.png differ diff --git a/asteroid.png.import b/asteroid.png.import new file mode 100644 index 0000000..2ab43d3 --- /dev/null +++ b/asteroid.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dnboio1l48kd2" +path="res://.godot/imported/asteroid.png-d2db2557ecd7f0d981e923efb6f92b62.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asteroid.png" +dest_files=["res://.godot/imported/asteroid.png-d2db2557ecd7f0d981e923efb6f92b62.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/asteroid.tscn b/asteroid.tscn new file mode 100644 index 0000000..9ec6450 --- /dev/null +++ b/asteroid.tscn @@ -0,0 +1,49 @@ +[gd_scene load_steps=8 format=3 uid="uid://hgwtxd5ttu4j"] + +[ext_resource type="Script" path="res://Asteroid.gd" id="1_c0kfw"] +[ext_resource type="Texture2D" uid="uid://dnboio1l48kd2" path="res://asteroid.png" id="2_qqbct"] +[ext_resource type="PackedScene" uid="uid://bpbf3mo6xvabj" path="res://gpu_particles_2d.tscn" id="2_wkn6x"] +[ext_resource type="PackedScene" uid="uid://c4ffo50o24wuy" path="res://normal.tscn" id="3_4kl4f"] + +[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_1j0j4"] +friction = 0.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_ml81o"] +radius = 21.0238 + +[sub_resource type="CircleShape2D" id="CircleShape2D_v6ydb"] +radius = 18.1108 + +[node name="Asteroid" type="RigidBody2D"] +collision_mask = 3 +physics_material_override = SubResource("PhysicsMaterial_1j0j4") +gravity_scale = 0.0 +can_sleep = false +max_contacts_reported = 10 +contact_monitor = true +script = ExtResource("1_c0kfw") +particle_chad = ExtResource("2_wkn6x") +particle_virgin = ExtResource("3_4kl4f") + +[node name="Asteroid" type="Sprite2D" parent="."] +scale = Vector2(0.45, 0.45) +texture = ExtResource("2_qqbct") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_ml81o") + +[node name="LifeTimer" type="Timer" parent="."] +wait_time = 5.0 + +[node name="Area2D" type="Area2D" parent="."] +visible = false +collision_layer = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +shape = SubResource("CircleShape2D_v6ydb") +debug_color = Color(0.623529, 0.533333, 0.121569, 0.419608) + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] +[connection signal="timeout" from="LifeTimer" to="." method="_on_life_timer_timeout"] +[connection signal="area_entered" from="Area2D" to="." method="_on_area_2d_area_entered"] +[connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"] diff --git a/cursor.png b/cursor.png new file mode 100644 index 0000000..17abb7b Binary files /dev/null and b/cursor.png differ diff --git a/cursor.png.import b/cursor.png.import new file mode 100644 index 0000000..524e08f --- /dev/null +++ b/cursor.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dc5yimqpot5uw" +path="res://.godot/imported/cursor.png-9207886fa5a62b74129e260ee150454e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://cursor.png" +dest_files=["res://.godot/imported/cursor.png-9207886fa5a62b74129e260ee150454e.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/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..3ddc866 --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,140 @@ +[preset.0] + +name="Linux/X11" +platform="Linux/X11" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="./UFO with a Gravity Gun.x86_64" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=false +texture_format/bptc=true +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +binary_format/architecture="x86_64" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" + +[preset.1] + +name="Windows Desktop" +platform="Windows Desktop" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="./UFO with a Gravity Gun.exe" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false + +[preset.1.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=false +texture_format/bptc=true +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +binary_format/architecture="x86_64" +codesign/enable=false +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="" +application/product_version="" +application/company_name="" +application/product_name="" +application/file_description="" +application/copyright="" +application/trademarks="" +application/export_angle=0 +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" + +[preset.2] + +name="Web" +platform="Web" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="Web Export/UFO with a Gravity Gun.html" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false + +[preset.2.options] + +custom_template/debug="" +custom_template/release="" +variant/extensions_support=false +vram_texture_compression/for_desktop=true +vram_texture_compression/for_mobile=false +html/export_icon=true +html/custom_html_shell="" +html/head_include="" +html/canvas_resize_policy=2 +html/focus_canvas_on_start=true +html/experimental_virtual_keyboard=false +progressive_web_app/enabled=false +progressive_web_app/offline_page="" +progressive_web_app/display=1 +progressive_web_app/orientation=0 +progressive_web_app/icon_144x144="" +progressive_web_app/icon_180x180="" +progressive_web_app/icon_512x512="" +progressive_web_app/background_color=Color(0, 0, 0, 1) diff --git a/gpu_particles_2d.tscn b/gpu_particles_2d.tscn new file mode 100644 index 0000000..566e8a6 --- /dev/null +++ b/gpu_particles_2d.tscn @@ -0,0 +1,53 @@ +[gd_scene load_steps=8 format=3 uid="uid://bpbf3mo6xvabj"] + +[sub_resource type="Curve" id="Curve_key14"] +_data = [Vector2(0, 1), 0.0, -0.0831102, 0, 0, Vector2(0.826667, 0.582418), -1.73511, -1.73511, 0, 0, Vector2(1, 0), -2.84715, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_7fgoh"] +curve = SubResource("Curve_key14") + +[sub_resource type="Gradient" id="Gradient_qym4u"] +offsets = PackedFloat32Array(0.2, 0.554839, 1) +colors = PackedColorArray(1, 0, 0, 1, 1, 0.619608, 0.129412, 1, 0.41, 0.41, 0.41, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_rjjtp"] +gradient = SubResource("Gradient_qym4u") + +[sub_resource type="Curve" id="Curve_kdh7r"] +min_value = -200.0 +max_value = 200.0 +_data = [Vector2(0.0382514, 37.3626), 0.0, 0.0, 0, 0, Vector2(0.606557, -6.59341), 0.0, 0.0, 0, 0, Vector2(0.945355, -85.7143), -67.033, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_4o04g"] +curve = SubResource("Curve_kdh7r") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_pslfe"] +lifetime_randomness = 0.67 +particle_flag_disable_z = true +emission_shape_scale = Vector3(10, 10, 10) +emission_shape = 1 +emission_sphere_radius = 0.01 +angle_min = -720.0 +angle_max = 630.9 +spread = 180.0 +initial_velocity_min = 100.0 +initial_velocity_max = 200.0 +gravity = Vector3(0, 0, 0) +linear_accel_min = 11.24 +linear_accel_max = 11.24 +linear_accel_curve = SubResource("CurveTexture_4o04g") +scale_min = 5.0 +scale_max = 15.0 +color_ramp = SubResource("GradientTexture1D_rjjtp") +alpha_curve = SubResource("CurveTexture_7fgoh") +turbulence_noise_strength = 0.0 + +[node name="GPUParticles2D" type="GPUParticles2D"] +position = Vector2(163, 123) +emitting = false +amount = 473 +process_material = SubResource("ParticleProcessMaterial_pslfe") +one_shot = true +explosiveness = 1.0 diff --git a/gravityzone.png b/gravityzone.png new file mode 100644 index 0000000..7ef0184 Binary files /dev/null and b/gravityzone.png differ diff --git a/gravityzone.png.import b/gravityzone.png.import new file mode 100644 index 0000000..b1fea0a --- /dev/null +++ b/gravityzone.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cprlo85m3uys1" +path="res://.godot/imported/gravityzone.png-434ce7c7e6102710cbb519377f91d1c6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://gravityzone.png" +dest_files=["res://.godot/imported/gravityzone.png-434ce7c7e6102710cbb519377f91d1c6.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/icon.svg b/icon.svg new file mode 100644 index 0000000..b370ceb --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ +<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 813 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H447l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c3 34 55 34 58 0v-86c-3-34-55-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg> diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..daa64aa --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cjceltedj0up6" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/node_2d.tscn b/node_2d.tscn new file mode 100644 index 0000000..2ff94ae --- /dev/null +++ b/node_2d.tscn @@ -0,0 +1,166 @@ +[gd_scene load_steps=15 format=3 uid="uid://chw7i3lumyew3"] + +[ext_resource type="Texture2D" uid="uid://bpfxsieu5ykss" path="res://Gun.png" id="1_o2ly3"] +[ext_resource type="Script" path="res://Player.gd" id="1_tnqdd"] +[ext_resource type="Script" path="res://Game.gd" id="1_upopx"] +[ext_resource type="Script" path="res://GunRotation.gd" id="2_3kk03"] +[ext_resource type="Texture2D" uid="uid://bvi0mierwp5c" path="res://UFO.png" id="2_53irs"] +[ext_resource type="Script" path="res://GravityGun.gd" id="3_fabqc"] +[ext_resource type="Script" path="res://PlayerMovement.gd" id="4_27mrs"] +[ext_resource type="Texture2D" uid="uid://cprlo85m3uys1" path="res://gravityzone.png" id="5_lb6nj"] +[ext_resource type="PackedScene" uid="uid://hgwtxd5ttu4j" path="res://asteroid.tscn" id="7_h5xye"] +[ext_resource type="Script" path="res://Spawner.gd" id="8_p37o5"] +[ext_resource type="PackedScene" uid="uid://bpbf3mo6xvabj" path="res://gpu_particles_2d.tscn" id="9_b63nq"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_yhomi"] +radius = 20.0 + +[sub_resource type="LabelSettings" id="LabelSettings_yijtf"] +font_size = 64 +font_color = Color(1, 1, 1, 0.188235) + +[sub_resource type="LabelSettings" id="LabelSettings_778je"] +font_size = 32 +outline_size = 15 +outline_color = Color(0, 0, 0.0666667, 1) + +[node name="Prototype" type="Node2D" node_paths=PackedStringArray("player", "ded_text")] +script = ExtResource("1_upopx") +player = NodePath("Player") +scene = "res://node_2d.tscn" +ded_text = NodePath("Label") + +[node name="Player" type="RigidBody2D" parent="."] +position = Vector2(577, 265) +collision_layer = 3 +collision_mask = 0 +gravity_scale = 0.0 +script = ExtResource("1_tnqdd") +particle = ExtResource("9_b63nq") + +[node name="Gun" type="Sprite2D" parent="Player"] +scale = Vector2(0.2, 0.2) +texture = ExtResource("1_o2ly3") + +[node name="GunRotation" type="Node" parent="Player/Gun"] +script = ExtResource("2_3kk03") + +[node name="GravityGun" type="Node" parent="Player/Gun" node_paths=PackedStringArray("area", "capture_anchor")] +script = ExtResource("3_fabqc") +area = NodePath("../GravityArea2D") +capture_anchor = NodePath("../GravityArea2D/CaptureAnchor") +close_range = 1.0 +grab_speed = 15.0 +throw_velocity = 1500.0 + +[node name="GravityArea2D" type="Area2D" parent="Player/Gun"] +position = Vector2(560, -72) +rotation = 1.54879 +scale = Vector2(1.24059, 1.47599) +collision_layer = 0 + +[node name="Gravityzone" type="Sprite2D" parent="Player/Gun/GravityArea2D"] +texture = ExtResource("5_lb6nj") + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Player/Gun/GravityArea2D"] +build_mode = 1 +polygon = PackedVector2Array(193.207, -183.529, 142.227, 42.9501, 46.6261, 263.695, -38.191, 263.762, -90.4009, 48.6971, -210.07, -207.935) + +[node name="CaptureAnchor" type="Node2D" parent="Player/Gun/GravityArea2D"] + +[node name="UFO" type="Sprite2D" parent="Player"] +scale = Vector2(0.15, 0.15) +texture = ExtResource("2_53irs") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Player"] +position = Vector2(-3, 1) +shape = SubResource("CircleShape2D_yhomi") + +[node name="PlayerMovement" type="Node" parent="Player"] +script = ExtResource("4_27mrs") +speed = 250.0 +velocity_dampening = 0.05 + +[node name="Spawner" type="Node" parent="." node_paths=PackedStringArray("root", "player")] +script = ExtResource("8_p37o5") +asteroid = ExtResource("7_h5xye") +root = NodePath("..") +player = NodePath("../Player") +v1 = Vector2(0, -30) +v2 = Vector2(1280, -30) +speed = 200.0 + +[node name="Timer" type="Timer" parent="Spawner"] +autostart = true + +[node name="Spawner2" type="Node" parent="." node_paths=PackedStringArray("root", "player")] +script = ExtResource("8_p37o5") +asteroid = ExtResource("7_h5xye") +root = NodePath("..") +player = NodePath("../Player") +v1 = Vector2(0, 750) +v2 = Vector2(1280, 750) +speed = 200.0 + +[node name="Timer" type="Timer" parent="Spawner2"] +wait_time = 2.0 +autostart = true + +[node name="Spawner3" type="Node" parent="." node_paths=PackedStringArray("root", "player")] +script = ExtResource("8_p37o5") +asteroid = ExtResource("7_h5xye") +root = NodePath("..") +player = NodePath("../Player") +v1 = Vector2(-30, 0) +v2 = Vector2(-30, 720) +speed = 200.0 + +[node name="Timer" type="Timer" parent="Spawner3"] +wait_time = 3.0 +autostart = true + +[node name="Spawner4" type="Node" parent="." node_paths=PackedStringArray("root", "player")] +script = ExtResource("8_p37o5") +asteroid = ExtResource("7_h5xye") +root = NodePath("..") +player = NodePath("../Player") +v1 = Vector2(1300, 0) +v2 = Vector2(1300, 720) +speed = 200.0 + +[node name="Timer" type="Timer" parent="Spawner4"] +autostart = true + +[node name="Label" type="Label" parent="."] +visible = false +custom_minimum_size = Vector2(1280, 720) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = 1280.0 +offset_bottom = 720.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_vertical = 1 +text = "yuo are ded +space to replay this bad game" +label_settings = SubResource("LabelSettings_yijtf") +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="Score" type="Label" parent="."] +visible = false +z_index = 100 +offset_right = 1280.0 +offset_bottom = 61.0 +text = "0" +label_settings = SubResource("LabelSettings_778je") +horizontal_alignment = 1 +vertical_alignment = 1 + +[connection signal="area_entered" from="Player/Gun/GravityArea2D" to="Player/Gun/GravityGun" method="_on_gravity_area_2d_area_entered"] +[connection signal="body_entered" from="Player/Gun/GravityArea2D" to="Player/Gun/GravityGun" method="_on_gravity_area_2d_body_entered"] +[connection signal="timeout" from="Spawner/Timer" to="Spawner" method="_on_timer_timeout"] +[connection signal="timeout" from="Spawner2/Timer" to="Spawner2" method="_on_timer_timeout"] +[connection signal="timeout" from="Spawner3/Timer" to="Spawner3" method="_on_timer_timeout"] +[connection signal="timeout" from="Spawner4/Timer" to="Spawner4" method="_on_timer_timeout"] diff --git a/normal.tscn b/normal.tscn new file mode 100644 index 0000000..6856ee5 --- /dev/null +++ b/normal.tscn @@ -0,0 +1,51 @@ +[gd_scene load_steps=8 format=3 uid="uid://c4ffo50o24wuy"] + +[sub_resource type="Curve" id="Curve_key14"] +_data = [Vector2(0, 1), 0.0, -0.0831102, 0, 0, Vector2(0.826667, 0.582418), -1.73511, -1.73511, 0, 0, Vector2(1, 0), -2.84715, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_7fgoh"] +curve = SubResource("Curve_key14") + +[sub_resource type="Gradient" id="Gradient_qym4u"] +offsets = PackedFloat32Array(0.2, 0.554839, 1) +colors = PackedColorArray(0.7, 0.422567, 0.294, 1, 0.52, 0.429867, 0.312, 1, 0.41, 0.41, 0.41, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_rjjtp"] +gradient = SubResource("Gradient_qym4u") + +[sub_resource type="Curve" id="Curve_7via6"] +_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="CurveTexture" id="CurveTexture_4o04g"] +curve = SubResource("Curve_7via6") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_pslfe"] +lifetime_randomness = 0.67 +particle_flag_disable_z = true +emission_shape_scale = Vector3(10, 10, 10) +emission_shape = 1 +emission_sphere_radius = 0.01 +angle_min = -720.0 +angle_max = 630.9 +spread = 180.0 +initial_velocity_min = 70.0 +initial_velocity_max = 140.0 +gravity = Vector3(0, 0, 0) +linear_accel_min = 5.53 +linear_accel_max = 7.43 +linear_accel_curve = SubResource("CurveTexture_4o04g") +scale_min = 3.0 +scale_max = 7.0 +color_ramp = SubResource("GradientTexture1D_rjjtp") +alpha_curve = SubResource("CurveTexture_7fgoh") +turbulence_noise_strength = 0.0 + +[node name="GPUParticles2D" type="GPUParticles2D"] +position = Vector2(163, 123) +emitting = false +amount = 200 +process_material = SubResource("ParticleProcessMaterial_pslfe") +one_shot = true +explosiveness = 1.0 diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..92223f9 --- /dev/null +++ b/project.godot @@ -0,0 +1,46 @@ +config_version=5 + +[application] + +config/name="UFO with a Gravity Gun" +run/main_scene="res://node_2d.tscn" +config/features=PackedStringArray("4.2", "Mobile") +config/icon="res://UFO.png" +config/tags=PackedStringArray("finished", "prototype") + +[display] + +window/size/viewport_width=1280 +window/size/viewport_height=720 +window/size/mode=3 +window/stretch/mode="canvas_items" +window/stretch/aspect="expand" +mouse_cursor/custom_image="res://cursor.png" + +[input] + +up={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null) +] +} +down={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null) +] +} +right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null) +] +} +left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null) +] +} + +[rendering] + +renderer/rendering_method="gl_compatibility" +environment/defaults/default_clear_color=Color(0, 0, 0.0666667, 1) -- cgit v1.2.3