From fb2f6943ba4cc00843c13341bc324ddcd38b0ffa Mon Sep 17 00:00:00 2001 From: 201flaviosilva Date: Thu, 24 Nov 2022 22:54:18 +0000 Subject: [PATCH] Finish 2D version --- Project/Assets/Fonts/PressStart2P/OFL.txt | 93 ++++++++++++++++++ .../PressStart2P/PressStart2P-Regular.ttf | Bin 0 -> 116008 bytes Project/Assets/Fonts/PressStart2P/Ref.md | 6 ++ Project/Food/Apple.gd | 21 ++++ Project/Food/Apple.tscn | 21 ++++ Project/GLOBALS.gd | 3 + Project/Player/BodyPart.tscn | 16 +++ Project/Player/Player.gd | 49 +++++++-- Project/Player/Player.tscn | 17 ++-- Project/Scenes/Game2D.gd | 9 ++ Project/Scenes/Game2D.tscn | 40 +++++++- Project/export_presets.cfg | 4 +- Project/project.godot | 4 + 13 files changed, 264 insertions(+), 19 deletions(-) create mode 100644 Project/Assets/Fonts/PressStart2P/OFL.txt create mode 100644 Project/Assets/Fonts/PressStart2P/PressStart2P-Regular.ttf create mode 100644 Project/Assets/Fonts/PressStart2P/Ref.md create mode 100644 Project/Food/Apple.gd create mode 100644 Project/Food/Apple.tscn create mode 100644 Project/GLOBALS.gd create mode 100644 Project/Player/BodyPart.tscn create mode 100644 Project/Scenes/Game2D.gd diff --git a/Project/Assets/Fonts/PressStart2P/OFL.txt b/Project/Assets/Fonts/PressStart2P/OFL.txt new file mode 100644 index 0000000..c0f4383 --- /dev/null +++ b/Project/Assets/Fonts/PressStart2P/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2012 The Press Start 2P Project Authors (cody@zone38.net), with Reserved Font Name "Press Start 2P". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/Project/Assets/Fonts/PressStart2P/PressStart2P-Regular.ttf b/Project/Assets/Fonts/PressStart2P/PressStart2P-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e9b029c59f65b24bb486b3630eb17202e3151137 GIT binary patch literal 116008 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 void: + var width = ProjectSettings.get_setting("display/window/size/width") + var height = ProjectSettings.get_setting("display/window/size/height") + var half_cell = GLOBALS.GRID_SIZE / 2 + var max_x = width / GLOBALS.GRID_SIZE + var max_y = height / GLOBALS.GRID_SIZE + + var x = rng.randi_range(0, max_x) * GLOBALS.GRID_SIZE - half_cell + x = clamp(x, half_cell, width - half_cell) + + var y = rng.randi_range(0, max_y) * GLOBALS.GRID_SIZE - half_cell + y = clamp(y, half_cell, height - half_cell) + global_position = Vector2(x, y) + + +func _on_Apple_area_entered(area: Area2D) -> void: + if area.is_in_group("player") and area.is_in_group("body"): _randomize_position() diff --git a/Project/Food/Apple.tscn b/Project/Food/Apple.tscn new file mode 100644 index 0000000..6dbdfa6 --- /dev/null +++ b/Project/Food/Apple.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://Food/Apple.gd" type="Script" id=1] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 15, 15 ) + +[node name="Apple" type="Area2D" groups=["food"]] +script = ExtResource( 1 ) + +[node name="ColorRect" type="ColorRect" parent="."] +margin_left = -15.0 +margin_top = -15.0 +margin_right = 15.0 +margin_bottom = 15.0 +color = Color( 1, 0, 0, 1 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) + +[connection signal="area_entered" from="." to="." method="_on_Apple_area_entered"] diff --git a/Project/GLOBALS.gd b/Project/GLOBALS.gd new file mode 100644 index 0000000..d8630e3 --- /dev/null +++ b/Project/GLOBALS.gd @@ -0,0 +1,3 @@ +extends Node + +const GRID_SIZE: int = 32 diff --git a/Project/Player/BodyPart.tscn b/Project/Player/BodyPart.tscn new file mode 100644 index 0000000..8cae793 --- /dev/null +++ b/Project/Player/BodyPart.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=2 format=2] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 15, 15 ) + +[node name="BodyPart" type="Area2D" groups=["body", "player"]] + +[node name="ColorRect" type="ColorRect" parent="."] +margin_left = -15.0 +margin_top = -15.0 +margin_right = 15.0 +margin_bottom = 15.0 +color = Color( 0, 1, 0.905882, 1 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) diff --git a/Project/Player/Player.gd b/Project/Player/Player.gd index dc108a0..8c9b71a 100644 --- a/Project/Player/Player.gd +++ b/Project/Player/Player.gd @@ -1,28 +1,63 @@ extends Area2D -export (float, 0.1, 1) var normal_speed: float = 0.25 +signal food_eated +export (float, 0.1, 1) var normal_speed: float = 0.2 -const GRID_SIZE = 64 var direction: Vector2 = Vector2.RIGHT var speed: float = normal_speed +onready var BodyPart: PackedScene = preload("res://Player/BodyPart.tscn") +var body = [] + func _ready() -> void: _set_speed(normal_speed) func _process(delta: float) -> void: - if Input.is_action_just_pressed("up"): direction = Vector2.UP - if Input.is_action_just_pressed("down"): direction = Vector2.DOWN - if Input.is_action_just_pressed("left"): direction = Vector2.LEFT - if Input.is_action_just_pressed("right"): direction = Vector2.RIGHT + if Input.is_action_just_pressed("up") and not direction == Vector2.DOWN: direction = Vector2.UP + if Input.is_action_just_pressed("down") and not direction == Vector2.UP: direction = Vector2.DOWN + if Input.is_action_just_pressed("left") and not direction == Vector2.RIGHT: direction = Vector2.LEFT + if Input.is_action_just_pressed("right") and not direction == Vector2.LEFT: direction = Vector2.RIGHT if Input.is_action_just_pressed("run"): _set_speed(normal_speed / 2) elif Input.is_action_just_released("run"): _set_speed(normal_speed) func _on_Move_timeout() -> void: - global_position += direction * GRID_SIZE + for i in range(body.size() - 1, 0, -1): + body[i].global_position = body[i - 1].global_position + + var lastHeadPosition = global_position + global_position += direction * GLOBALS.GRID_SIZE + + if body.size(): body[0].global_position = lastHeadPosition + + _fix_out_border_position() + +func _fix_out_border_position() -> void: + var half_cell = GLOBALS.GRID_SIZE / 2 + var max_x = ProjectSettings.get_setting("display/window/size/width") - half_cell + var max_y = ProjectSettings.get_setting("display/window/size/height") - half_cell + + if global_position.x > max_x: global_position.x = half_cell + elif global_position.x < 0: global_position.x = max_x + + if global_position.y > max_y: global_position.y = half_cell + elif global_position.y < 0: global_position.y = max_y func _set_speed(value: float) -> void: var move_timer = $Move speed = value move_timer.wait_time = speed move_timer.start() + +func _add_body() -> PackedScene: + var new_body = BodyPart.instance() + body.append(new_body) + return new_body + +func _on_Player_area_entered(area: Area2D) -> void: + if area.is_in_group("food"): + var new_body = _add_body() + area.call_deferred("_randomize_position") + emit_signal("food_eated", new_body, Vector2(-100, -100)) + elif area.is_in_group("body"): + get_tree().reload_current_scene() diff --git a/Project/Player/Player.tscn b/Project/Player/Player.tscn index 0d6832e..e23dc96 100644 --- a/Project/Player/Player.tscn +++ b/Project/Player/Player.tscn @@ -1,17 +1,19 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=3 format=2] -[ext_resource path="res://icon.png" type="Texture" id=1] [ext_resource path="res://Player/Player.gd" type="Script" id=2] [sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 29, 29 ) +extents = Vector2( 16, 16 ) -[node name="Player" type="Area2D"] +[node name="Player" type="Area2D" groups=["head", "player"]] script = ExtResource( 2 ) -[node name="Sprite" type="Sprite" parent="."] -rotation = 1.5708 -texture = ExtResource( 1 ) +[node name="ColorRect" type="ColorRect" parent="."] +margin_left = -16.0 +margin_top = -16.0 +margin_right = 16.0 +margin_bottom = 16.0 +color = Color( 0.156863, 0, 0.905882, 1 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="."] shape = SubResource( 1 ) @@ -20,4 +22,5 @@ shape = SubResource( 1 ) wait_time = 0.25 autostart = true +[connection signal="area_entered" from="." to="." method="_on_Player_area_entered"] [connection signal="timeout" from="Move" to="." method="_on_Move_timeout"] diff --git a/Project/Scenes/Game2D.gd b/Project/Scenes/Game2D.gd new file mode 100644 index 0000000..63e7934 --- /dev/null +++ b/Project/Scenes/Game2D.gd @@ -0,0 +1,9 @@ +extends Node2D + +var score: int = 0 + +func _on_Player_food_eated(new_body, position: Vector2) -> void: + score += 1 + $Score.text = str(score) + $BodyPartsContainer.call_deferred("add_child", new_body) + new_body.global_position = position diff --git a/Project/Scenes/Game2D.tscn b/Project/Scenes/Game2D.tscn index f28195c..5821121 100644 --- a/Project/Scenes/Game2D.tscn +++ b/Project/Scenes/Game2D.tscn @@ -1,13 +1,47 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://Player/Player.tscn" type="PackedScene" id=1] +[ext_resource path="res://Food/Apple.tscn" type="PackedScene" id=2] +[ext_resource path="res://Assets/Fonts/PressStart2P/PressStart2P-Regular.ttf" type="DynamicFontData" id=3] +[ext_resource path="res://Scenes/Game2D.gd" type="Script" id=4] + +[sub_resource type="DynamicFont" id=1] +size = 50 +font_data = ExtResource( 3 ) [node name="Game2D" type="Node2D"] +script = ExtResource( 4 ) [node name="Background" type="ColorRect" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 margin_right = 1280.0 -margin_bottom = 720.0 +margin_bottom = 704.0 color = Color( 0, 0.741176, 0.239216, 1 ) +[node name="Score" type="Label" parent="."] +modulate = Color( 1, 1, 1, 0.588235 ) +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +margin_left = 615.0 +margin_top = 327.0 +margin_right = 665.0 +margin_bottom = 377.0 +custom_colors/font_color_shadow = Color( 1, 0, 0, 1 ) +custom_constants/shadow_offset_x = 5 +custom_constants/shadow_offset_y = 5 +custom_fonts/font = SubResource( 1 ) +text = "0" +align = 1 +valign = 1 + [node name="Player" parent="." instance=ExtResource( 1 )] -position = Vector2( 672, 384 ) +position = Vector2( 656, 368 ) + +[node name="Apple" parent="." instance=ExtResource( 2 )] +position = Vector2( 944, 368 ) + +[node name="BodyPartsContainer" type="Node2D" parent="."] + +[connection signal="food_eated" from="Player" to="." method="_on_Player_food_eated"] diff --git a/Project/export_presets.cfg b/Project/export_presets.cfg index c3fb62c..6374d37 100644 --- a/Project/export_presets.cfg +++ b/Project/export_presets.cfg @@ -85,7 +85,7 @@ custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" -export_path="../_Build/MacOS/Snake-3D.dmg" +export_path="../_Build/Mac/Snake-3D.zip" script_export_mode=1 script_encryption_key="" @@ -123,7 +123,7 @@ codesign/entitlements/custom_file="" codesign/entitlements/allow_jit_code_execution=false codesign/entitlements/allow_unsigned_executable_memory=false codesign/entitlements/allow_dyld_environment_variables=false -codesign/entitlements/disable_library_validation=false +codesign/entitlements/disable_library_validation=true codesign/entitlements/audio_input=false codesign/entitlements/camera=false codesign/entitlements/location=false diff --git a/Project/project.godot b/Project/project.godot index 37a76ab..132f182 100644 --- a/Project/project.godot +++ b/Project/project.godot @@ -18,6 +18,10 @@ config/name="Snake 3D" run/main_scene="res://Scenes/Game2D.tscn" config/icon="res://icon.png" +[autoload] + +GLOBALS="*res://GLOBALS.gd" + [display] window/size/width=1280