From 8d5714c215e100e0165e3cbbfdb6c3eecd45c235 Mon Sep 17 00:00:00 2001 From: ElnuDev Date: Sat, 21 Oct 2023 16:21:16 -0700 Subject: [PATCH] Initial commit --- .gitattributes | 2 + .gitignore | 2 + export_presets.cfg | 101 ++++++++++++++++++++++++++++++++++++ game_manager.gd | 3 ++ icon.svg | 1 + icon.svg.import | 37 +++++++++++++ main.tscn | 53 +++++++++++++++++++ multiplayer_controller.gd | 89 +++++++++++++++++++++++++++++++ multiplayer_controller.tscn | 56 ++++++++++++++++++++ platform.tscn | 15 ++++++ player.gd | 65 +++++++++++++++++++++++ player.tscn | 57 ++++++++++++++++++++ project.godot | 62 ++++++++++++++++++++++ scene_manager.gd | 17 ++++++ white.png | Bin 0 -> 574 bytes white.png.import | 34 ++++++++++++ 16 files changed, 594 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 export_presets.cfg create mode 100644 game_manager.gd create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 main.tscn create mode 100644 multiplayer_controller.gd create mode 100644 multiplayer_controller.tscn create mode 100644 platform.tscn create mode 100644 player.gd create mode 100644 player.tscn create mode 100644 project.godot create mode 100644 scene_manager.gd create mode 100644 white.png create mode 100644 white.png.import 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/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..5c80f9a --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,101 @@ +[preset.0] + +name="Windows Desktop" +platform="Windows Desktop" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="./nzbrawl.exe" +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=0 +binary_format/embed_pck=true +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="" +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.1] + +name="Linux/X11" +platform="Linux/X11" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="build/nzbrawl.zip" +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=0 +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}\"" diff --git a/game_manager.gd b/game_manager.gd new file mode 100644 index 0000000..95c1e1d --- /dev/null +++ b/game_manager.gd @@ -0,0 +1,3 @@ +extends Node + +var players = {} \ No newline at end of file diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..b370ceb --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..5dc427e --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b2rvll882ejor" +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/main.tscn b/main.tscn new file mode 100644 index 0000000..9615fcb --- /dev/null +++ b/main.tscn @@ -0,0 +1,53 @@ +[gd_scene load_steps=4 format=3 uid="uid://r5n0cnh707fi"] + +[ext_resource type="Script" path="res://scene_manager.gd" id="1_ywv22"] +[ext_resource type="PackedScene" uid="uid://b6olswaoek0bw" path="res://player.tscn" id="2_b15um"] +[ext_resource type="PackedScene" uid="uid://dmbiy6vupfawk" path="res://platform.tscn" id="3_njyoi"] + +[node name="Main" type="Node2D"] +script = ExtResource("1_ywv22") +player_scene = ExtResource("2_b15um") + +[node name="PlayerSpawns" type="Node2D" parent="."] + +[node name="0" type="Node2D" parent="PlayerSpawns" groups=["PlayerSpawnPoint"]] +position = Vector2(526, 361) + +[node name="1" type="Node2D" parent="PlayerSpawns" groups=["PlayerSpawnPoint"]] +position = Vector2(848, 361) + +[node name="CollisionShape2D" parent="." instance=ExtResource("3_njyoi")] +position = Vector2(114, 593) +scale = Vector2(9.84444, 4.5) + +[node name="CollisionShape2D2" parent="." instance=ExtResource("3_njyoi")] +position = Vector2(323, 448) +scale = Vector2(9.40821, 0.413171) + +[node name="CollisionShape2D5" parent="." instance=ExtResource("3_njyoi")] +position = Vector2(606, 389) +scale = Vector2(9.40821, 0.413171) + +[node name="CollisionShape2D6" parent="." instance=ExtResource("3_njyoi")] +position = Vector2(-50, 393) +scale = Vector2(9.40821, 0.413171) + +[node name="CollisionShape2D7" parent="." instance=ExtResource("3_njyoi")] +position = Vector2(31, 273) +scale = Vector2(9.40821, 0.413171) + +[node name="CollisionShape2D3" parent="." instance=ExtResource("3_njyoi")] +position = Vector2(289, 634) +scale = Vector2(53.8059, 1.28385) + +[node name="CollisionShape2D8" parent="." instance=ExtResource("3_njyoi")] +position = Vector2(289, 634) +scale = Vector2(53.8059, 1.28385) + +[node name="CollisionShape2D4" parent="." instance=ExtResource("3_njyoi")] +position = Vector2(-392, 155) +scale = Vector2(26.2654, 622.781) + +[node name="CollisionShape2D9" parent="." instance=ExtResource("3_njyoi")] +position = Vector2(1499, 155) +scale = Vector2(26.2654, 622.781) diff --git a/multiplayer_controller.gd b/multiplayer_controller.gd new file mode 100644 index 0000000..d0d7589 --- /dev/null +++ b/multiplayer_controller.gd @@ -0,0 +1,89 @@ +extends Control + +@export var port = 1717 +@export var max_players = 4 +var COMPRESSION = ENetConnection.COMPRESS_RANGE_CODER + +var line_edit: LineEdit +var peer: ENetMultiplayerPeer + +# Called when the node enters the scene tree for the first time. +func _ready(): + multiplayer.peer_connected.connect(peer_connected) + multiplayer.peer_disconnected.connect(peer_disconnected) + multiplayer.connected_to_server.connect(connected_to_server) + multiplayer.connection_failed.connect(connection_failed) + + # We have to enable object encoding to send PlayerData, etc. + multiplayer.allow_object_decoding = true + + line_edit = get_node("LineEditName") + + +# Called on both server and clients +func peer_connected(id): + print("Player connected " + str(id)) + + +# Called on both server and clients +func peer_disconnected(id): + print("Player disconnected " + str(id)) + + +@rpc("any_peer") +func send_player_data(player_data: Dictionary): + if !GameManager.players.has(player_data.id): + GameManager.players[player_data.id] = player_data + if multiplayer.is_server(): + for i in GameManager.players: + send_player_data.rpc(GameManager.players[i]) + + +# Called only from clients +func connected_to_server(): + print("Connected to server!") + send_player_data.rpc_id(1, { + "id": multiplayer.get_unique_id(), + "name": line_edit.text if line_edit.text else "Player" + }) + + +# Called only from clients +func connection_failed(): + print("Couldn't connect!") + + +func _on_host_pressed(): + # Create peer instance for host's player + peer = ENetMultiplayerPeer.new() + + var error = peer.create_server(port, max_players) + if error != OK: + print("Cannot host: " + error) + peer.get_host().compress(COMPRESSION) + + # Connect host's player + multiplayer.set_multiplayer_peer(peer) + + print("Waiting for players!") + send_player_data({ + "id": multiplayer.get_unique_id(), + "name": line_edit.text if line_edit.text else "Player" + }) + + + +func _on_join_pressed(): + peer = ENetMultiplayerPeer.new() + peer.create_client($LineEditIP.text if $LineEditIP.text else "127.0.0.1", port) + peer.get_host().compress(COMPRESSION) + multiplayer.set_multiplayer_peer(peer) + +@rpc("any_peer", "call_local") +func start_game(): + var scene = load("res://main.tscn").instantiate() + get_tree().root.add_child(scene) + self.hide() + +func _on_start_game_pressed(): + start_game.rpc() diff --git a/multiplayer_controller.tscn b/multiplayer_controller.tscn new file mode 100644 index 0000000..ce02868 --- /dev/null +++ b/multiplayer_controller.tscn @@ -0,0 +1,56 @@ +[gd_scene load_steps=2 format=3 uid="uid://btcrmlpg4lrbt"] + +[ext_resource type="Script" path="res://multiplayer_controller.gd" id="1_e6bhu"] + +[node name="MultiplayerController" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_e6bhu") + +[node name="Host" type="Button" parent="."] +layout_mode = 2 +offset_left = 487.0 +offset_top = 259.0 +offset_right = 583.0 +offset_bottom = 290.0 +text = "Host" + +[node name="Join" type="Button" parent="."] +layout_mode = 2 +offset_left = 733.0 +offset_top = 167.0 +offset_right = 829.0 +offset_bottom = 198.0 +text = "Join" + +[node name="Start Game" type="Button" parent="."] +layout_mode = 2 +offset_left = 596.0 +offset_top = 257.0 +offset_right = 692.0 +offset_bottom = 288.0 +text = "Start Game" + +[node name="LineEditName" type="LineEdit" parent="."] +layout_mode = 2 +offset_left = 419.0 +offset_top = 167.0 +offset_right = 727.0 +offset_bottom = 198.0 +placeholder_text = "Name..." + +[node name="LineEditIP" type="LineEdit" parent="."] +layout_mode = 2 +offset_left = 417.0 +offset_top = 130.0 +offset_right = 731.0 +offset_bottom = 161.0 +placeholder_text = "IP..." + +[connection signal="pressed" from="Host" to="." method="_on_host_pressed"] +[connection signal="pressed" from="Join" to="." method="_on_join_pressed"] +[connection signal="pressed" from="Start Game" to="." method="_on_start_game_pressed"] diff --git a/platform.tscn b/platform.tscn new file mode 100644 index 0000000..a20a6b7 --- /dev/null +++ b/platform.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=3 format=3 uid="uid://dmbiy6vupfawk"] + +[ext_resource type="Texture2D" uid="uid://dbjqbgu6ru4m1" path="res://white.png" id="1_eu1eh"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_6fi6a"] +size = Vector2(32, 32) + +[node name="CollisionShape2D" type="StaticBody2D"] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_6fi6a") + +[node name="Sprite2D" type="Sprite2D" parent="."] +modulate = Color(0.105882, 0.105882, 0.105882, 1) +texture = ExtResource("1_eu1eh") diff --git a/player.gd b/player.gd new file mode 100644 index 0000000..af0e860 --- /dev/null +++ b/player.gd @@ -0,0 +1,65 @@ +extends CharacterBody2D + +@export var speed = 300.0 +@export var jump_velocity = -400.0 +@export var wall_jump_velocity = 600.0 +@export var ungrounded_x_lerp = 10.0 +@export var grounded_drag_lerp = 5.0 +@export var ungrounded_drag_lerp = 5.0 +@export var fox_time = 5 +@export var limp_gravity_modifier = 2.0 + +var x_velocity_offset = 0 +var x_movement = 0 +var desired_x_movement = 0 +var last_grounded = 0 + +# Get the gravity from the project settings to be synced with RigidBody nodes. +var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") + +func _ready(): + $MultiplayerSynchronizer.set_multiplayer_authority(name.to_int()) + var username = GameManager.players[name.to_int()].name + $Label.text = username + var username_hash = 0 + for i in username.length(): + username_hash += username.unicode_at(i) + $Sprite2D.modulate = Color.from_hsv((username_hash % 255) / 255.0, 0.5, 0.8) + +func _physics_process(delta): + if $MultiplayerSynchronizer.get_multiplayer_authority() != multiplayer.get_unique_id(): + return + + # Add the gravity. + if is_on_floor(): + last_grounded = Time.get_ticks_msec() + else: + velocity.y += gravity * delta * (limp_gravity_modifier if Input.is_action_pressed("limp") else 1) + + var grounded = Time.get_ticks_msec() - last_grounded < fox_time + + x_velocity_offset = lerpf(x_velocity_offset, 0, (grounded_drag_lerp if is_on_floor() else ungrounded_drag_lerp) * delta) + + # Handle Jump. + if Input.is_action_just_pressed("jump"): + if grounded: + velocity.y = jump_velocity + elif len($WallDetect.get_overlapping_bodies()) > 0: + velocity.y = jump_velocity + if $WallDetect.get_overlapping_bodies()[0].position.x > position.x: + x_velocity_offset = -wall_jump_velocity + else: + x_velocity_offset = wall_jump_velocity + + # 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("move_left", "move_right") + velocity.x = x_velocity_offset + if direction: + desired_x_movement = direction * speed; + x_movement = lerpf(x_movement, desired_x_movement, 1 if grounded else ungrounded_x_lerp * delta) + velocity.x += x_movement + else: + velocity.x = move_toward(velocity.x, 0, speed) + + move_and_slide() diff --git a/player.tscn b/player.tscn new file mode 100644 index 0000000..5de22fb --- /dev/null +++ b/player.tscn @@ -0,0 +1,57 @@ +[gd_scene load_steps=6 format=3 uid="uid://b6olswaoek0bw"] + +[ext_resource type="Script" path="res://player.gd" id="1_0p8o6"] + +[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_2xv6m"] +load_path = "res://.godot/imported/white.png-d8533361663a5f8fe5200e5b5262a62d.ctex" + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_8wbiu"] +size = Vector2(32, 48) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_2cyhj"] +size = Vector2(38, 48) + +[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_38o4e"] +properties/0/path = NodePath(".:position") +properties/0/spawn = true +properties/0/sync = true +properties/0/watch = false + +[node name="Player" type="CharacterBody2D"] +collision_layer = 2 +script = ExtResource("1_0p8o6") +jump_velocity = -700.0 +wall_jump_velocity = 700.0 +fox_time = 100 +limp_gravity_modifier = 3.0 + +[node name="Sprite2D" type="Sprite2D" parent="."] +scale = Vector2(1, 1.5) +texture = SubResource("CompressedTexture2D_2xv6m") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_8wbiu") + +[node name="WallDetect" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="WallDetect"] +shape = SubResource("RectangleShape2D_2cyhj") + +[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."] +replication_config = SubResource("SceneReplicationConfig_38o4e") + +[node name="Label" type="Label" parent="."] +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -24.5 +offset_top = -54.0 +offset_right = 24.5 +offset_bottom = -28.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 4 +text = "Player" +horizontal_alignment = 1 diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..024e369 --- /dev/null +++ b/project.godot @@ -0,0 +1,62 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="nzbrawl" +run/main_scene="res://multiplayer_controller.tscn" +config/features=PackedStringArray("4.1", "GL Compatibility") +config/icon="res://icon.svg" + +[autoload] + +GameManager="*res://game_manager.gd" + +[debug] + +gdscript/warnings/shadowed_variable=0 +gdscript/warnings/shadowed_variable_base_class=0 + +[input] + +move_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) +, 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":4194319,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +move_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) +, 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":4194321,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +jump={ +"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) +, 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":4194320,"key_label":0,"unicode":0,"echo":false,"script":null) +, 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":32,"key_label":0,"unicode":32,"echo":false,"script":null) +] +} +limp={ +"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) +, 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":4194322,"key_label":0,"unicode":0,"echo":false,"script":null) +, 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":70,"key_label":0,"unicode":102,"echo":false,"script":null) +] +} + +[physics] + +2d/default_gravity=2000.0 + +[rendering] + +renderer/rendering_method.mobile="gl_compatibility" diff --git a/scene_manager.gd b/scene_manager.gd new file mode 100644 index 0000000..b46d7b3 --- /dev/null +++ b/scene_manager.gd @@ -0,0 +1,17 @@ +extends Node2D + +@export var player_scene: PackedScene + +# Called when the node enters the scene tree for the first time. +func _ready(): + var spawn_points = get_tree().get_nodes_in_group("PlayerSpawnPoint") + for i in GameManager.players: + var current_player: Node2D = player_scene.instantiate() + current_player.name = str(GameManager.players[i].id) + current_player.global_position = spawn_points[i % len(spawn_points)].global_position + add_child(current_player) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass diff --git a/white.png b/white.png new file mode 100644 index 0000000000000000000000000000000000000000..0fe28f0f233284ca04c14056a567ae0fe4d1947d GIT binary patch literal 574 zcmV-E0>S->P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4n`1h2vVKwqN0wq3Pq?8YK2xE%tybVNkfw2 z;wZQl9Q;_UI=DFN>fkB}f*&BRE>4OrQsV!TLW>v=j{EWM-sA2az%?q0W_85@O}EW- zG9hGht3v1%VGMxB2xcV3GUh}v1>f;?j{sZmVl2!5+@GUY&07i(5QyW7VcNtS#M7I$ z!FZpTS4xsfd`>)W(glehnJ#<$#<=J*$1-^{lb$E$iG^YZ%N?wgOpSPoII3zo<#Sn& zRmNM4wMtEC-IKjAlGj(3nND*UNi1RsA_T~&p^OS_#Aww?v5=|+KJw+pQHvj+t M07*qoM6N<$f?o3TEC2ui literal 0 HcmV?d00001 diff --git a/white.png.import b/white.png.import new file mode 100644 index 0000000..87858a2 --- /dev/null +++ b/white.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dbjqbgu6ru4m1" +path="res://.godot/imported/white.png-d8533361663a5f8fe5200e5b5262a62d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://white.png" +dest_files=["res://.godot/imported/white.png-d8533361663a5f8fe5200e5b5262a62d.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