diff options
63 files changed, 725 insertions, 59 deletions
diff --git a/assets/ui/hud/grow_progress/over.aseprite b/assets/ui/hud/grow_progress/over.aseprite Binary files differnew file mode 100644 index 0000000..cb1f08b --- /dev/null +++ b/assets/ui/hud/grow_progress/over.aseprite diff --git a/assets/ui/hud/grow_progress/over.png b/assets/ui/hud/grow_progress/over.png Binary files differnew file mode 100644 index 0000000..82714cf --- /dev/null +++ b/assets/ui/hud/grow_progress/over.png diff --git a/assets/ui/hud/grow_progress/progress.aseprite b/assets/ui/hud/grow_progress/progress.aseprite Binary files differnew file mode 100644 index 0000000..16a5fc2 --- /dev/null +++ b/assets/ui/hud/grow_progress/progress.aseprite diff --git a/assets/ui/hud/grow_progress/progress.png b/assets/ui/hud/grow_progress/progress.png Binary files differnew file mode 100644 index 0000000..0d9ba96 --- /dev/null +++ b/assets/ui/hud/grow_progress/progress.png diff --git a/assets/ui/hud/grow_progress/under.aseprite b/assets/ui/hud/grow_progress/under.aseprite Binary files differnew file mode 100644 index 0000000..2f78684 --- /dev/null +++ b/assets/ui/hud/grow_progress/under.aseprite diff --git a/assets/ui/hud/grow_progress/under.png b/assets/ui/hud/grow_progress/under.png Binary files differnew file mode 100644 index 0000000..8c8b269 --- /dev/null +++ b/assets/ui/hud/grow_progress/under.png diff --git a/assets/ui/hud/snake_hud/body.aseprite b/assets/ui/hud/snake_hud/body.aseprite Binary files differnew file mode 100644 index 0000000..6c39210 --- /dev/null +++ b/assets/ui/hud/snake_hud/body.aseprite diff --git a/assets/ui/hud/snake_hud/body.png b/assets/ui/hud/snake_hud/body.png Binary files differnew file mode 100644 index 0000000..8fb53c1 --- /dev/null +++ b/assets/ui/hud/snake_hud/body.png diff --git a/assets/ui/hud/snake_hud/body1.png b/assets/ui/hud/snake_hud/body1.png Binary files differnew file mode 100644 index 0000000..e2671b3 --- /dev/null +++ b/assets/ui/hud/snake_hud/body1.png diff --git a/assets/ui/hud/snake_hud/body2.png b/assets/ui/hud/snake_hud/body2.png Binary files differnew file mode 100644 index 0000000..0b82cd9 --- /dev/null +++ b/assets/ui/hud/snake_hud/body2.png diff --git a/assets/ui/hud/snake_hud/body3.png b/assets/ui/hud/snake_hud/body3.png Binary files differnew file mode 100644 index 0000000..9ba7c5a --- /dev/null +++ b/assets/ui/hud/snake_hud/body3.png diff --git a/assets/ui/hud/snake_hud/head.aseprite b/assets/ui/hud/snake_hud/head.aseprite Binary files differnew file mode 100644 index 0000000..7118215 --- /dev/null +++ b/assets/ui/hud/snake_hud/head.aseprite diff --git a/assets/ui/hud/snake_hud/head.png b/assets/ui/hud/snake_hud/head.png Binary files differnew file mode 100644 index 0000000..c2cd997 --- /dev/null +++ b/assets/ui/hud/snake_hud/head.png diff --git a/assets/ui/hud/snake_hud/head1.png b/assets/ui/hud/snake_hud/head1.png Binary files differnew file mode 100644 index 0000000..1d29792 --- /dev/null +++ b/assets/ui/hud/snake_hud/head1.png diff --git a/assets/ui/hud/snake_hud/head2.png b/assets/ui/hud/snake_hud/head2.png Binary files differnew file mode 100644 index 0000000..473f669 --- /dev/null +++ b/assets/ui/hud/snake_hud/head2.png diff --git a/assets/ui/hud/snake_hud/head3.png b/assets/ui/hud/snake_hud/head3.png Binary files differnew file mode 100644 index 0000000..c95b2d7 --- /dev/null +++ b/assets/ui/hud/snake_hud/head3.png diff --git a/assets/ui/hud/snake_hud/tail.aseprite b/assets/ui/hud/snake_hud/tail.aseprite Binary files differnew file mode 100644 index 0000000..ee70bec --- /dev/null +++ b/assets/ui/hud/snake_hud/tail.aseprite diff --git a/assets/ui/hud/snake_hud/tail.png b/assets/ui/hud/snake_hud/tail.png Binary files differnew file mode 100644 index 0000000..77f361d --- /dev/null +++ b/assets/ui/hud/snake_hud/tail.png diff --git a/src/Main.tscn b/src/Main.tscn index d633409..83f263d 100644 --- a/src/Main.tscn +++ b/src/Main.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=7 format=2] [ext_resource path="res://entities/actors/snake/scenes/Snake.tscn" type="PackedScene" id=1] +[ext_resource path="res://tools/score_manager/ScoreManager.tscn" type="PackedScene" id=2] [ext_resource path="res://ui/UI.tscn" type="PackedScene" id=3] [ext_resource path="res://main.gd" type="Script" id=4] [ext_resource path="res://entities/food/scenes/FoodManager.tscn" type="PackedScene" id=5] @@ -14,6 +15,11 @@ script = ExtResource( 4 ) [node name="FoodManager" parent="." instance=ExtResource( 5 )] WORLD_GENERATOR_NP = NodePath("../WorldGenerator") +[node name="ScoreManager" parent="." instance=ExtResource( 2 )] + [node name="Snake" parent="." instance=ExtResource( 1 )] [node name="UI" parent="." instance=ExtResource( 3 )] +__meta__ = { +"_edit_horizontal_guides_": [ 8.0 ] +} diff --git a/src/entities/actors/snake/scripts/snake.gd b/src/entities/actors/snake/scripts/snake.gd index 01e09da..91e4e39 100644 --- a/src/entities/actors/snake/scripts/snake.gd +++ b/src/entities/actors/snake/scripts/snake.gd @@ -6,8 +6,8 @@ export(PackedScene) var TAIL_SEGMENT_NP: PackedScene onready var path: Path2D = $Path +var finished_adding_initial_segments: bool = false var current_body_segments: int = 0 -var max_body_initial_segments: int = 1 var body_segment_stack: Array var tail_segment: PathFollow2D # didn't konw how to name this, basically holds the current path lenght @@ -20,16 +20,17 @@ func _ready(): set_physics_process(false) set_process_input(false) Event.connect("snake_path_new_point", self, "_on_snake_path_new_point") + Event.connect("snake_add_new_segment", self, "_on_snake_add_new_segment") Event.connect("snake_added_new_segment", self, "_on_snake_added_new_segment") Event.connect("snake_added_initial_segments", self, "_on_snake_added_initial_segments") - Event.connect("food_eaten", self, "_on_food_eaten") + # Event.connect("food_eaten", self, "_on_food_eaten") # need to always set a new curve when ready, so when restarting it's af resh curve path.curve = Curve2D.new() func _physics_process(delta: float) -> void: - if body_segment_queue.size() != 0 and current_body_segments > max_body_initial_segments: + if body_segment_queue.size() != 0 and current_body_segments >= Global.SNAKE_INITIAL_SEGMENTS: _add_new_segment() # if body_segment_stack.size() > 0: @@ -75,6 +76,7 @@ func _add_initial_segment(type: PackedScene) -> void: tail_segment = _temp_body_segment path.add_child(_temp_body_segment) + # just to keep things going, tail shouldn't count as body segment current_body_segments += 1 Event.emit_signal("snake_added_new_segment", _temp_body_segment.TYPE) @@ -93,14 +95,17 @@ func _on_snake_path_new_point(coordinates: Vector2) -> void: # update call is to draw curve as there are new points to the path's curve # update() - if current_body_segments < max_body_initial_segments: - _add_initial_segment(BODY_SEGMENT_NP) - elif current_body_segments == max_body_initial_segments: - _add_initial_segment(TAIL_SEGMENT_NP) + if not finished_adding_initial_segments: + if current_body_segments < Global.SNAKE_INITIAL_SEGMENTS: + _add_initial_segment(BODY_SEGMENT_NP) + elif current_body_segments == Global.SNAKE_INITIAL_SEGMENTS: + _add_initial_segment(TAIL_SEGMENT_NP) func _on_snake_added_new_segment(type: String) -> void: if type == "tail": + current_body_segments -= 1 + finished_adding_initial_segments = true Event.emit_signal("snake_added_initial_segments") @@ -109,5 +114,6 @@ func _on_snake_added_initial_segments() -> void: set_process_input(true) -func _on_food_eaten(type: int, location: Vector2) -> void: - _add_segment_to_queue() +func _on_snake_add_new_segment(amount: int) -> void: + for i in amount: + _add_segment_to_queue() diff --git a/src/entities/food/scenes/Food.tscn b/src/entities/food/scenes/FoodBasic.tscn index 7accbc6..5a4474e 100644 --- a/src/entities/food/scenes/Food.tscn +++ b/src/entities/food/scenes/FoodBasic.tscn @@ -1,14 +1,14 @@ [gd_scene load_steps=3 format=2] -[ext_resource path="res://entities/food/scripts/food.gd" type="Script" id=2] +[ext_resource path="res://entities/food/scripts/food_basic.gd" type="Script" id=1] [sub_resource type="CircleShape2D" id=1] radius = 4.0 -[node name="Food" type="Area2D"] +[node name="FoodBasic" type="Area2D"] collision_layer = 256 collision_mask = 0 -script = ExtResource( 2 ) +script = ExtResource( 1 ) [node name="Sprite" type="Sprite" parent="."] diff --git a/src/entities/food/scenes/FoodManager.tscn b/src/entities/food/scenes/FoodManager.tscn index 3287271..e56b9de 100644 --- a/src/entities/food/scenes/FoodManager.tscn +++ b/src/entities/food/scenes/FoodManager.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=3 format=2] -[ext_resource path="res://entities/food/scenes/Food.tscn" type="PackedScene" id=1] +[ext_resource path="res://entities/food/scenes/FoodBasic.tscn" type="PackedScene" id=1] [ext_resource path="res://entities/food/scripts/food_manager.gd" type="Script" id=2] [node name="FoodManager" type="Node2D"] script = ExtResource( 2 ) -FOOD = ExtResource( 1 ) +FOOD_BASIC = ExtResource( 1 ) diff --git a/src/entities/food/scripts/food.gd b/src/entities/food/scripts/food.gd index e8b0261..2e00978 100644 --- a/src/entities/food/scripts/food.gd +++ b/src/entities/food/scripts/food.gd @@ -1,24 +1,59 @@ class_name Food extends Area2D -enum Type { - APPLE -} +onready var _sprite: Sprite = $Sprite -var _type_texture: Dictionary = { - Type.APPLE: preload("res://entities/food/sprites/apple.png") -} +var texture: Dictionary +var timer: Timer -export(Type) var TYPE -onready var _sprite: Sprite = $Sprite -var location: Vector2 +var properties: Dictionary +var points: int = 1 +var time_to_live: float = -1.0 func _ready(): + randomize_stats() + _set_properties() + timer = Timer.new() + timer.one_shot = true + + timer.connect("timeout", self, "_on_timer_timeout") connect("body_entered", self, "_on_body_entered") - _sprite.texture = _type_texture[TYPE] + + +func set_type(type: int) -> void: + set_property("type", type) + _sprite.texture = texture[type] + + +func set_location(loc: Vector2) -> void: + set_property("location", loc) + + +func set_timer(time: float) -> void: + time_to_live = time + if time_to_live != -1.0: + timer.wait_time = time_to_live + timer.start() + + +func set_property(property: String, value) -> void: + properties[property] = value + + +func _set_properties() -> void: + set_property("points", points) + + +func randomize_stats() -> void: + points = int(rand_range(1, 30)) func _on_body_entered(body: Node) -> void: - Event.emit_signal("food_eaten", TYPE, location) - queue_free()
\ No newline at end of file + Event.emit_signal("food_eaten", properties) + queue_free() + + +func _on_timer_timeout() -> void: + Event.emit_signal("food_timed_out", properties) + queue_free() diff --git a/src/entities/food/scripts/food_basic.gd b/src/entities/food/scripts/food_basic.gd new file mode 100644 index 0000000..0a56208 --- /dev/null +++ b/src/entities/food/scripts/food_basic.gd @@ -0,0 +1,10 @@ +class_name FoodBasic +extends Food + +enum Type { + APPLE +} + + +func _ready(): + texture[Type.APPLE] = preload("res://entities/food/sprites/apple.png")
\ No newline at end of file diff --git a/src/entities/food/scripts/food_manager.gd b/src/entities/food/scripts/food_manager.gd index 426677c..4196806 100644 --- a/src/entities/food/scripts/food_manager.gd +++ b/src/entities/food/scripts/food_manager.gd @@ -1,7 +1,7 @@ class_name FoodManager extends Node2D -export(PackedScene) var FOOD: PackedScene +export(PackedScene) var FOOD_BASIC: PackedScene export(NodePath) var WORLD_GENERATOR_NP: NodePath onready var world_generator: Node2D = get_node(WORLD_GENERATOR_NP) onready var possible_food_locations: Array = world_generator.get_valid_map_coords() @@ -21,17 +21,21 @@ func _process(delta) -> void: func _place_new_food() -> void: - var food: Area2D = FOOD.instance() - Event.emit_signal("food_placing_new_food", food.TYPE) + var food: FoodBasic = FOOD_BASIC.instance() + var type: int = FoodBasic.Type.APPLE + Event.emit_signal("food_placing_new_food", type) var pos_loc: Array = _get_random_pos() var pos: Vector2 = pos_loc[0] var loc: Vector2 = pos_loc[1] + # need to set the position first, else it will spawn on the middle and the moved food.global_position = pos - food.location = loc add_child(food) + food.set_type(FoodBasic.Type.APPLE) + food.set_location(loc) + food.properties["points"] = 1 current_food.append(loc) - Event.emit_signal("food_placed_new_food", food.TYPE, loc) + Event.emit_signal("food_placed_new_food", food.properties["type"], food.properties["location"]) func _get_random_pos() -> Array: @@ -40,7 +44,6 @@ func _get_random_pos() -> Array: var location: Vector2 while not found_valid_loc: - print("trying") index = randi() % possible_food_locations.size() location = possible_food_locations[index] if current_food.find(location) == -1: @@ -49,6 +52,6 @@ func _get_random_pos() -> Array: return [world_generator.get_centered_world_position(location), location] -func _on_food_eaten(type: int, location: Vector2) -> void: - var index: int = current_food.find(location) +func _on_food_eaten(properties: Dictionary) -> void: + var index: int = current_food.find(properties["location"]) current_food.remove(index) diff --git a/src/event.gd b/src/event.gd index 054781f..991b0e2 100644 --- a/src/event.gd +++ b/src/event.gd @@ -4,17 +4,20 @@ signal game_start signal game_over signal snake_path_new_point(coordinates) +signal snake_add_new_segment(amount) signal snake_adding_new_segment(type) signal snake_added_new_segment(type) signal snake_added_initial_segments signal snake_segment_body_entered(body) signal snake_rotated +signal snake_growth_progress(progress) signal food_placing_new_food(type) signal food_placed_new_food(type, location) -signal food_eaten(type, location) +signal food_eaten(properties) +signal food_timed_out(properties) signal world_gen_walker_started(id) signal world_gen_walker_finished(id) signal world_gen_walker_died(id) -signal world_gen_spawn_walker_unit(location)
\ No newline at end of file +signal world_gen_spawn_walker_unit(location) diff --git a/src/global.gd b/src/global.gd index 72cb294..1ed4d29 100644 --- a/src/global.gd +++ b/src/global.gd @@ -5,8 +5,11 @@ var TILE_SIZE: int = 16 var WORLD_TILE_PATH: int = 0 var WORLD_TILE_WALL: int = 1 +var SNAKE_INITIAL_SEGMENTS: int = 1 var SNAKE_SPEED: float = 50.0 var SNAKE_ROT_SPEED: float = 300.0 var SNAKE_POSITION_UPDATE_INTERVAL: float = 0.001 # this usually corresponds to the sprite size var SNAKE_SEGMENT_SIZE: float = 6.0 + +var POINTS_TO_GROW: int = 10 diff --git a/src/project.godot b/src/project.godot index 9319699..159bfd5 100644 --- a/src/project.godot +++ b/src/project.godot @@ -14,6 +14,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://entities/food/scripts/food.gd" }, { +"base": "Food", +"class": "FoodBasic", +"language": "GDScript", +"path": "res://entities/food/scripts/food_basic.gd" +}, { "base": "Node2D", "class": "FoodManager", "language": "GDScript", @@ -51,6 +56,7 @@ _global_script_classes=[ { } ] _global_script_class_icons={ "Food": "", +"FoodBasic": "", "FoodManager": "", "GifDecoder": "", "GifRecorder": "res://addons/GifMaker/gif.svg", diff --git a/src/tools/score_manager/ScoreManager.tscn b/src/tools/score_manager/ScoreManager.tscn new file mode 100644 index 0000000..136b294 --- /dev/null +++ b/src/tools/score_manager/ScoreManager.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://tools/score_manager/score_manager.gd" type="Script" id=1] + +[node name="ScoreManager" type="Node2D"] +script = ExtResource( 1 ) diff --git a/src/tools/score_manager/score_manager.gd b/src/tools/score_manager/score_manager.gd new file mode 100644 index 0000000..3b5ddba --- /dev/null +++ b/src/tools/score_manager/score_manager.gd @@ -0,0 +1,26 @@ +extends Node + + +var score: int = 0 +var growth: int = 0 + + +func _ready(): + Event.connect("food_eaten", self, "_on_food_eaten") + + +func _on_food_eaten(properties: Dictionary) -> void: + var points: int = properties["points"] + var score_to_grow: int = (growth + 1) * Global.POINTS_TO_GROW - score + var amount_to_grow: int = 0 + score += points + if points >= score_to_grow: + amount_to_grow += 1 + points -= score_to_grow + # maybe be careful with this + amount_to_grow += points / Global.POINTS_TO_GROW + growth += amount_to_grow + Event.emit_signal("snake_add_new_segment", amount_to_grow) + + score_to_grow = Global.POINTS_TO_GROW - ((growth + 1) * Global.POINTS_TO_GROW - score) + Event.emit_signal("snake_growth_progress", score_to_grow) diff --git a/src/ui/UI.tscn b/src/ui/UI.tscn index 207a5fa..14701f0 100644 --- a/src/ui/UI.tscn +++ b/src/ui/UI.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=4 format=2] [ext_resource path="res://ui/ui.gd" type="Script" id=1] -[ext_resource path="res://fonts/MonogramExtended.tres" type="DynamicFont" id=2] +[ext_resource path="res://ui/hud/snake/scenes/SnakeHUD.tscn" type="PackedScene" id=3] +[ext_resource path="res://ui/hud/progress_bars/scenes/GrowthProgress.tscn" type="PackedScene" id=4] [node name="UI" type="CanvasLayer"] script = ExtResource( 1 ) @@ -11,19 +12,27 @@ anchor_right = 1.0 anchor_bottom = 1.0 [node name="StatsHUD" type="MarginContainer" parent="Root"] -margin_left = 10.0 -margin_top = 10.0 -margin_right = 130.0 -margin_bottom = 50.0 +margin_left = 4.0 +margin_top = 4.0 +margin_right = 124.0 +margin_bottom = 44.0 [node name="VBox" type="VBoxContainer" parent="Root/StatsHUD"] margin_right = 120.0 margin_bottom = 40.0 -[node name="SnakeSize" type="Label" parent="Root/StatsHUD/VBox"] +[node name="SnakeHUD" parent="Root/StatsHUD/VBox" instance=ExtResource( 3 )] margin_right = 120.0 -margin_bottom = 13.0 -custom_fonts/font = ExtResource( 2 ) +margin_bottom = 8.0 + +[node name="HBoxProgressBars" type="HBoxContainer" parent="Root/StatsHUD/VBox"] +margin_top = 12.0 +margin_right = 120.0 +margin_bottom = 20.0 + +[node name="GrowthProgress" parent="Root/StatsHUD/VBox/HBoxProgressBars" instance=ExtResource( 4 )] +margin_right = 40.0 +margin_bottom = 8.0 [node name="MarginContainer" type="MarginContainer" parent="Root"] anchor_top = 1.0 diff --git a/src/ui/hud/progress_bars/scenes/GrowthProgress.tscn b/src/ui/hud/progress_bars/scenes/GrowthProgress.tscn new file mode 100644 index 0000000..0a0d9a8 --- /dev/null +++ b/src/ui/hud/progress_bars/scenes/GrowthProgress.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://ui/hud/progress_bars/sprites/progress.png" type="Texture" id=1] +[ext_resource path="res://ui/hud/progress_bars/sprites/over.png" type="Texture" id=2] +[ext_resource path="res://ui/hud/progress_bars/sprites/under.png" type="Texture" id=3] +[ext_resource path="res://ui/hud/progress_bars/scripts/growth_progress.gd" type="Script" id=4] + +[node name="GrowthProgress" type="TextureProgress"] +texture_under = ExtResource( 3 ) +texture_over = ExtResource( 2 ) +texture_progress = ExtResource( 1 ) +script = ExtResource( 4 ) diff --git a/src/ui/hud/progress_bars/scripts/growth_progress.gd b/src/ui/hud/progress_bars/scripts/growth_progress.gd new file mode 100644 index 0000000..a9d455c --- /dev/null +++ b/src/ui/hud/progress_bars/scripts/growth_progress.gd @@ -0,0 +1,10 @@ +extends TextureProgress + + +func _ready(): + Event.connect("snake_growth_progress", self, "_on_snake_growth_progress") + max_value = Global.POINTS_TO_GROW + + +func _on_snake_growth_progress(progress: int) -> void: + value = progress diff --git a/src/ui/hud/progress_bars/sprites/over.png b/src/ui/hud/progress_bars/sprites/over.png Binary files differnew file mode 100644 index 0000000..82714cf --- /dev/null +++ b/src/ui/hud/progress_bars/sprites/over.png diff --git a/src/ui/hud/progress_bars/sprites/over.png.import b/src/ui/hud/progress_bars/sprites/over.png.import new file mode 100644 index 0000000..6dab18d --- /dev/null +++ b/src/ui/hud/progress_bars/sprites/over.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/over.png-0642cc73272ad1f8af9be593e496f68d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/progress_bars/sprites/over.png" +dest_files=[ "res://.import/over.png-0642cc73272ad1f8af9be593e496f68d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/hud/progress_bars/sprites/progress.png b/src/ui/hud/progress_bars/sprites/progress.png Binary files differnew file mode 100644 index 0000000..0d9ba96 --- /dev/null +++ b/src/ui/hud/progress_bars/sprites/progress.png diff --git a/src/ui/hud/progress_bars/sprites/progress.png.import b/src/ui/hud/progress_bars/sprites/progress.png.import new file mode 100644 index 0000000..342daaf --- /dev/null +++ b/src/ui/hud/progress_bars/sprites/progress.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/progress.png-30af99e69a9aa36165f02ed64d480a2f.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/progress_bars/sprites/progress.png" +dest_files=[ "res://.import/progress.png-30af99e69a9aa36165f02ed64d480a2f.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/hud/progress_bars/sprites/under.png b/src/ui/hud/progress_bars/sprites/under.png Binary files differnew file mode 100644 index 0000000..8c8b269 --- /dev/null +++ b/src/ui/hud/progress_bars/sprites/under.png diff --git a/src/ui/hud/progress_bars/sprites/under.png.import b/src/ui/hud/progress_bars/sprites/under.png.import new file mode 100644 index 0000000..c6f0d16 --- /dev/null +++ b/src/ui/hud/progress_bars/sprites/under.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/under.png-2db90a564085e100d8ec82ea8500cf5d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/progress_bars/sprites/under.png" +dest_files=[ "res://.import/under.png-2db90a564085e100d8ec82ea8500cf5d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/hud/snake/scenes/SnakeHUD.tscn b/src/ui/hud/snake/scenes/SnakeHUD.tscn new file mode 100644 index 0000000..4b33885 --- /dev/null +++ b/src/ui/hud/snake/scenes/SnakeHUD.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://ui/hud/snake/scenes/SnakeHead.tscn" type="PackedScene" id=1] +[ext_resource path="res://ui/hud/snake/scripts/snake_hud.gd" type="Script" id=2] +[ext_resource path="res://ui/hud/snake/sprites/head1.png" type="Texture" id=3] + +[node name="SnakeHUD" type="HBoxContainer"] +custom_constants/separation = 0 +script = ExtResource( 2 ) + +[node name="SnakeHead" parent="." instance=ExtResource( 1 )] +texture = ExtResource( 3 ) diff --git a/src/ui/hud/snake/scenes/SnakeHead.tscn b/src/ui/hud/snake/scenes/SnakeHead.tscn new file mode 100644 index 0000000..79eb7d1 --- /dev/null +++ b/src/ui/hud/snake/scenes/SnakeHead.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://ui/hud/snake/scripts/snake_head.gd" type="Script" id=1] + +[node name="SnakeHead" type="TextureRect"] +margin_right = 8.0 +margin_bottom = 8.0 +script = ExtResource( 1 ) diff --git a/src/ui/hud/snake/scenes/SnakeSegment.tscn b/src/ui/hud/snake/scenes/SnakeSegment.tscn new file mode 100644 index 0000000..069a812 --- /dev/null +++ b/src/ui/hud/snake/scenes/SnakeSegment.tscn @@ -0,0 +1,5 @@ +[gd_scene format=2] + +[node name="SnakeSegment" type="TextureRect"] +margin_right = 4.0 +margin_bottom = 4.0 diff --git a/src/ui/hud/snake/scripts/snake_head.gd b/src/ui/hud/snake/scripts/snake_head.gd new file mode 100644 index 0000000..a414e23 --- /dev/null +++ b/src/ui/hud/snake/scripts/snake_head.gd @@ -0,0 +1,29 @@ +extends TextureRect + +enum { + IDLE, + EAT, + DEAD +} + +var frames = { + IDLE: preload("res://ui/hud/snake/sprites/head1.png"), + EAT: preload("res://ui/hud/snake/sprites/head2.png"), + DEAD: preload("res://ui/hud/snake/sprites/head3.png") +} + + +func _ready(): + texture = frames[IDLE] + Event.connect("food_eaten", self, "_on_food_eaten") + Event.connect("game_over", self, "_on_game_over") + + +func _on_food_eaten(properties: Dictionary) -> void: + texture = frames[EAT] + yield(get_tree().create_timer(0.25), "timeout") + texture = frames[IDLE] + + +func _on_game_over() -> void: + texture = frames[DEAD]
\ No newline at end of file diff --git a/src/ui/hud/snake/scripts/snake_hud.gd b/src/ui/hud/snake/scripts/snake_hud.gd new file mode 100644 index 0000000..b50b72e --- /dev/null +++ b/src/ui/hud/snake/scripts/snake_hud.gd @@ -0,0 +1,69 @@ +extends HBoxContainer + +enum { + BODY1, + BODY2, + BODY3, + TAIL +} + +var frames: Dictionary = { + BODY1: preload("res://ui/hud/snake/sprites/body1.png"), + BODY2: preload("res://ui/hud/snake/sprites/body2.png"), + BODY3: preload("res://ui/hud/snake/sprites/body3.png"), + TAIL: preload("res://ui/hud/snake/sprites/tail.png") +} + +var last_tail_index: int = -1 +var last_frame: int = -1 +var frame_direction: int = 1 + + +func _ready(): + Event.connect("snake_added_new_segment", self, "_on_snake_added_new_segment") + + +func _on_snake_added_new_segment(type: String) -> void: + match type: + "body": + _add_body_frame() + _move_tail_frame() + "tail": + _add_tail_frame() + + +func _add_body_frame() -> void: + var texture_rect: TextureRect = TextureRect.new() + texture_rect.texture = frames[_get_next_body_frame()] + add_child(texture_rect) + + +func _add_tail_frame() -> void: + var texture_rect: TextureRect = TextureRect.new() + texture_rect.texture = frames[TAIL] + add_child(texture_rect) + last_tail_index = get_child_count() - 1 + + +func _move_tail_frame() -> void: + var child_count: int = get_child_count() + if child_count > Global.SNAKE_INITIAL_SEGMENTS + 1: + var last_child: TextureRect = get_child(last_tail_index) + move_child(last_child, child_count - 1) + last_tail_index = child_count - 1 + + +func _get_next_body_frame() -> int: + match last_frame: + -1: + last_frame = BODY2 + BODY2: + last_frame += frame_direction + BODY3: + frame_direction = -1 + last_frame += frame_direction + BODY1: + frame_direction = 1 + last_frame += frame_direction + + return last_frame diff --git a/src/ui/hud/snake/sprites/body.png b/src/ui/hud/snake/sprites/body.png Binary files differnew file mode 100644 index 0000000..8fb53c1 --- /dev/null +++ b/src/ui/hud/snake/sprites/body.png diff --git a/src/ui/hud/snake/sprites/body.png.import b/src/ui/hud/snake/sprites/body.png.import new file mode 100644 index 0000000..3891d75 --- /dev/null +++ b/src/ui/hud/snake/sprites/body.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/body.png-cd3faf610a4d26eadd0148f5ade8a21a.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/snake/sprites/body.png" +dest_files=[ "res://.import/body.png-cd3faf610a4d26eadd0148f5ade8a21a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/hud/snake/sprites/body1.png b/src/ui/hud/snake/sprites/body1.png Binary files differnew file mode 100644 index 0000000..e2671b3 --- /dev/null +++ b/src/ui/hud/snake/sprites/body1.png diff --git a/src/ui/hud/snake/sprites/body1.png.import b/src/ui/hud/snake/sprites/body1.png.import new file mode 100644 index 0000000..9573e97 --- /dev/null +++ b/src/ui/hud/snake/sprites/body1.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/body1.png-5d85028b95914799a2aebc60349a56c2.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/snake/sprites/body1.png" +dest_files=[ "res://.import/body1.png-5d85028b95914799a2aebc60349a56c2.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/hud/snake/sprites/body2.png b/src/ui/hud/snake/sprites/body2.png Binary files differnew file mode 100644 index 0000000..0b82cd9 --- /dev/null +++ b/src/ui/hud/snake/sprites/body2.png diff --git a/src/ui/hud/snake/sprites/body2.png.import b/src/ui/hud/snake/sprites/body2.png.import new file mode 100644 index 0000000..17356a4 --- /dev/null +++ b/src/ui/hud/snake/sprites/body2.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/body2.png-01a5c5dad5a83f4d4d299b857c658e39.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/snake/sprites/body2.png" +dest_files=[ "res://.import/body2.png-01a5c5dad5a83f4d4d299b857c658e39.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/hud/snake/sprites/body3.png b/src/ui/hud/snake/sprites/body3.png Binary files differnew file mode 100644 index 0000000..9ba7c5a --- /dev/null +++ b/src/ui/hud/snake/sprites/body3.png diff --git a/src/ui/hud/snake/sprites/body3.png.import b/src/ui/hud/snake/sprites/body3.png.import new file mode 100644 index 0000000..bfa7791 --- /dev/null +++ b/src/ui/hud/snake/sprites/body3.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/body3.png-5bcd745ab0fc40d3e8ef2d150e7b7d4d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/snake/sprites/body3.png" +dest_files=[ "res://.import/body3.png-5bcd745ab0fc40d3e8ef2d150e7b7d4d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/hud/snake/sprites/head.png b/src/ui/hud/snake/sprites/head.png Binary files differnew file mode 100644 index 0000000..c2cd997 --- /dev/null +++ b/src/ui/hud/snake/sprites/head.png diff --git a/src/ui/hud/snake/sprites/head.png.import b/src/ui/hud/snake/sprites/head.png.import new file mode 100644 index 0000000..5b9b768 --- /dev/null +++ b/src/ui/hud/snake/sprites/head.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/head.png-4b4fedad924e66f19c046d3ce4c1b58a.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/snake/sprites/head.png" +dest_files=[ "res://.import/head.png-4b4fedad924e66f19c046d3ce4c1b58a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/hud/snake/sprites/head1.png b/src/ui/hud/snake/sprites/head1.png Binary files differnew file mode 100644 index 0000000..1d29792 --- /dev/null +++ b/src/ui/hud/snake/sprites/head1.png diff --git a/src/ui/hud/snake/sprites/head1.png.import b/src/ui/hud/snake/sprites/head1.png.import new file mode 100644 index 0000000..72d345d --- /dev/null +++ b/src/ui/hud/snake/sprites/head1.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/head1.png-b86145ede399b444d822e7b0ec71dada.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/snake/sprites/head1.png" +dest_files=[ "res://.import/head1.png-b86145ede399b444d822e7b0ec71dada.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/hud/snake/sprites/head2.png b/src/ui/hud/snake/sprites/head2.png Binary files differnew file mode 100644 index 0000000..473f669 --- /dev/null +++ b/src/ui/hud/snake/sprites/head2.png diff --git a/src/ui/hud/snake/sprites/head2.png.import b/src/ui/hud/snake/sprites/head2.png.import new file mode 100644 index 0000000..78c9241 --- /dev/null +++ b/src/ui/hud/snake/sprites/head2.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/head2.png-565eeac8eb1428ec8155a0982d857bb6.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/snake/sprites/head2.png" +dest_files=[ "res://.import/head2.png-565eeac8eb1428ec8155a0982d857bb6.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/hud/snake/sprites/head3.png b/src/ui/hud/snake/sprites/head3.png Binary files differnew file mode 100644 index 0000000..c95b2d7 --- /dev/null +++ b/src/ui/hud/snake/sprites/head3.png diff --git a/src/ui/hud/snake/sprites/head3.png.import b/src/ui/hud/snake/sprites/head3.png.import new file mode 100644 index 0000000..e51f75c --- /dev/null +++ b/src/ui/hud/snake/sprites/head3.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/head3.png-e8a18efff02063d9a43d2babeb798767.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/snake/sprites/head3.png" +dest_files=[ "res://.import/head3.png-e8a18efff02063d9a43d2babeb798767.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/hud/snake/sprites/tail.png b/src/ui/hud/snake/sprites/tail.png Binary files differnew file mode 100644 index 0000000..77f361d --- /dev/null +++ b/src/ui/hud/snake/sprites/tail.png diff --git a/src/ui/hud/snake/sprites/tail.png.import b/src/ui/hud/snake/sprites/tail.png.import new file mode 100644 index 0000000..fd6334d --- /dev/null +++ b/src/ui/hud/snake/sprites/tail.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/tail.png-292b09567a886543da0b95c4d3dfad3c.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/hud/snake/sprites/tail.png" +dest_files=[ "res://.import/tail.png-292b09567a886543da0b95c4d3dfad3c.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=false +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/src/ui/ui.gd b/src/ui/ui.gd index 8132d52..1ceff2f 100644 --- a/src/ui/ui.gd +++ b/src/ui/ui.gd @@ -1,26 +1,14 @@ class_name UI extends CanvasLayer -onready var _snake_size_label: Label = $Root/StatsHUD/VBox/SnakeSize onready var _start_button: Button = $Root/MarginContainer/CenterContainer/Start -var snake_size: int = 0 -var _snake_size_fmt: String = "Snake size: %s" - func _ready(): - Event.connect("snake_added_new_segment", self, "_on_Snake_added_new_segment") - _snake_size_label.text =_snake_size_fmt % snake_size - _start_button.connect("pressed", self, "_on_start_button_pressed") -func _on_Snake_added_new_segment(type: String) -> void: - snake_size += 1 - _snake_size_label.text =_snake_size_fmt % snake_size - - func _on_start_button_pressed() -> void: _start_button.disabled = true _start_button.visible = false - Event.emit_signal("game_start")
\ No newline at end of file + Event.emit_signal("game_start") |