First Commit

This commit is contained in:
2026-05-24 17:10:09 -03:00
commit 0b0113fbde
222 changed files with 67094 additions and 0 deletions
+131
View File
@@ -0,0 +1,131 @@
extends CharacterBody3D
const SPEED:= 300.0
const JUMP_VELOCITY:= 10.0
@onready var animator = get_node("gobot_new/AnimationPlayer")
@onready var hud_container: HBoxContainer = $hud/Hud_container
@export var view : Node3D
@export var health := 3
@export var foot_damage:= 1
@onready var immunity_cooldown = 1.5
@onready var immunity_time = $immunity
var gravity = 0
var moviment_velocity : Vector3
var rotation_direction : float
var knockbacked := false
var coins := 0
var is_dead := false
func verfy_life():
if health == 0:
is_dead = true
func _physics_process(delta):
sncy()
handle_input(delta)
# Add the gravity.
apply_gravity(delta)
jump(delta)
handle_animations()
var applied_velocity : Vector3
applied_velocity = velocity.lerp(moviment_velocity, delta * 10)
applied_velocity.y = -gravity
velocity = applied_velocity
move_and_slide()
func sncy():
hud_container.update_life(health)
func handle_input(delta):
if not is_dead:
if Input.is_action_just_pressed("node_pause"):
get_parent().get_node("Pause").visible = true
get_tree().paused = true
if !knockbacked:
var input := Vector3.ZERO
input.x = Input.get_axis("move_left", "move_right")
input.z = Input.get_axis("move_forward", "move_backward")
velocity = input * SPEED * delta
if Vector2(velocity.z, velocity.x).length() > 0:
rotation_direction = Vector2(velocity.z, velocity.x).angle()
rotation.y = lerp_angle(rotation.y, rotation_direction, delta * 10)
func handle_animations():
if not is_dead:
if is_on_floor():
if abs(velocity.x) > 1 or abs(velocity.z) > 1:
animator.play("Run", 0.3)
else:
animator.play("Idle", 0.2)
if !is_on_floor() and gravity > 2:
animator.play("Fall", 0.3)
else:
animator.play("Dead", 03)
await animator.animation_finished
get_parent().get_node("Game_over").visible = true
get_tree().paused = true
func apply_gravity(delta):
if not is_on_floor():
gravity += 25 * delta
func jump(_delta):
if Input.is_action_just_pressed("jump") and is_on_floor():
gravity = -JUMP_VELOCITY
if gravity > 0 and is_on_floor():
gravity = 0
func knockback(impact_point: Vector3, force: Vector3) -> void:
force.y = abs(force.y)
velocity = force.limit_length(9.0)
func _on_hurtbox_body_entered(body):
#if health == 0:
#is_dead = true
var body_collision = (body.global_position - global_position)
var force = -body_collision
force *= 10.0
gravity = -5.0
knockback(body_collision, force)
knockbacked = true
await get_tree().create_timer(0.3).timeout
knockbacked = false
func collect_coin():
coins += 1
hud_container.update_coin(coins)
func damage_player(amount: int):
health -= amount
verfy_life()
func _on_foot_area_entered(area: Area3D) -> void:
if area.name == "damagem_box" :
area.damage(foot_damage)
+1
View File
@@ -0,0 +1 @@
uid://0vdug42aihte
+55
View File
@@ -0,0 +1,55 @@
extends Node3D
#variaveis de propriedades
@export_group("Properties")
@export var target: Node3D
#variaveis de zoom
@export_group("zoom")
@export var zoom_minimum = 16
@export var zoom_maximum = 4
@export var zoom_speed = 10
#variaveis de rotação
@export_group("Rotation")
@export var rotation_speed = 120
@export var min_rotation_x = -80
@export var max_rotation_x = -10
var camera_rotation:Vector3
var zoom = 10
#atribuição da camera
@onready var Camera = $camera
#função
func _ready():
camera_rotation = rotation_degrees #inicia a rotação
func _physics_process(delta):
self.position = self.position.lerp(target.position, delta * 4)
rotation_degrees = rotation_degrees.lerp(camera_rotation, delta * 6)
Camera.position = Camera.position.lerp(Vector3(0, 0, zoom), 8 * delta)
handle_input(delta)
func handle_input(delta):
#rotação
var input := Vector3.ZERO
#seleção de inputs das teclas
input.y = Input.get_axis("ui_left", "ui_right")
input.x = Input.get_axis("ui_up", "ui_down")
camera_rotation += input * rotation_speed * delta
camera_rotation.x = clamp(camera_rotation.x, min_rotation_x, max_rotation_x)
zoom += Input.get_axis("zoom_in", "zoom_out") * zoom_speed * delta
zoom = clamp(zoom, zoom_maximum, zoom_minimum)
+1
View File
@@ -0,0 +1 @@
uid://bf5im32nygtgq
+104
View File
@@ -0,0 +1,104 @@
extends CharacterBody3D
const SPEED:= 300.0
const JUMP_VELOCITY:= 10.0
@onready var animator = get_node("gobot_new/AnimationPlayer")
@onready var hud_container: HBoxContainer = $hud/Hud_container
@export var view : Node3D
@export var health := 3
var gravity = 0
var moviment_velocity : Vector3
var rotation_direction : float
var knockbacked := false
var coins := 0
var is_dead := false
func _physics_process(delta):
if !knockbacked:
handle_input(delta)
# Add the gravity.
apply_gravity(delta)
jump(delta)
handle_animations()
var applied_velocity : Vector3
applied_velocity = velocity.lerp(moviment_velocity, delta * 10)
applied_velocity.y = -gravity
velocity = applied_velocity
move_and_slide()
func handle_input(delta):
var input := Vector3.ZERO
input.x = Input.get_axis("move_left", "move_right")
input.z = Input.get_axis("move_forward", "move_backward")
input = input.rotated(Vector3.UP, view.rotation.y).normalized()
if !knockbacked:
velocity = input * SPEED * delta
if Vector2(velocity.z, velocity.x).length() > 0:
rotation_direction = Vector2(velocity.z, velocity.x).angle()
rotation.y = lerp_angle(rotation.y, rotation_direction, delta * 10)
func handle_animations():
if not is_dead:
if is_on_floor():
if abs(velocity.x) > 1 or abs(velocity.z) > 1:
animator.play("Run", 0.3)
else:
animator.play("Idle", 0.2)
if !is_on_floor() and gravity > 2:
animator.play("Fall", 0.3)
else:
animator.play("Dead", 03)
await animator.animation_finished
get_parent().get_node("Game_over").visible = true
get_tree().paused = true
func apply_gravity(delta):
if not is_on_floor():
gravity += 25 * delta
func jump(_delta):
if Input.is_action_just_pressed("jump") and is_on_floor():
gravity = -JUMP_VELOCITY
if gravity > 0 and is_on_floor():
gravity = 0
func knockback(impact_point: Vector3, force: Vector3) -> void:
hud_container.update_life(health)
force.y = abs(force.y)
velocity = force.limit_length(15.0)
func _on_hurtbox_body_entered(body):
if health == 0:
is_dead = true
print(health)
var body_collision = (body.global_position - global_position)
var force = -body_collision
force *= 10.0
gravity = -5.0
knockback(body_collision, force)
knockbacked = true
await get_tree().create_timer(0.3).timeout
knockbacked = false
func collect_coin():
coins += 1
hud_container.update_coin(coins)
+1
View File
@@ -0,0 +1 @@
uid://difds0c6bi8nn
+19
View File
@@ -0,0 +1,19 @@
extends Area3D
const ROTATION_SPEED := 45.0
var start_pos := position.y
var end_pos := position.y + 0.5
func _ready():
var coin_tween := create_tween().set_loops().set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_SINE)
coin_tween.tween_property(self, "position:y", end_pos, 1.0).from(start_pos)
coin_tween.tween_property(self, "position:y", start_pos, 1.0).from(end_pos)
func _process(delta):
rotate_y(deg_to_rad(ROTATION_SPEED * delta))
func _on_body_entered(body):
if body.name == "player":
body.collect_coin()
queue_free()
+1
View File
@@ -0,0 +1 @@
uid://dbfvho370q6cq
+8
View File
@@ -0,0 +1,8 @@
extends HBoxContainer
@onready var coin_label = $coin_label
@onready var life_label = $life_label
func update_life(health: int):
life_label.text = "%d" % health
func update_coin(amount: int):
coin_label.text = "%d" % amount
+1
View File
@@ -0,0 +1 @@
uid://dp6vv8hjriuph
+9
View File
@@ -0,0 +1,9 @@
extends CollisionShape3D
const LIFE_BODY:= 125
func _physics_process(_delta: float) -> void:
pass
func _damage_in_body():
pass
@@ -0,0 +1 @@
uid://bvulc20svkv6h
+2
View File
@@ -0,0 +1,2 @@
extends CollisionShape3D
const ATTACK_DAMAGE = 1
@@ -0,0 +1 @@
uid://cfhrrjafe2emf
+11
View File
@@ -0,0 +1,11 @@
extends CanvasLayer
func _on_retry_button_pressed() -> void:
get_tree().paused = false
get_tree().reload_current_scene()
# Replace with function body.
func _on_quit_button_pressed() -> void:
get_tree().quit()
# Replace with function body.
+1
View File
@@ -0,0 +1 @@
uid://dsc7pk1wlo3lx
+8
View File
@@ -0,0 +1,8 @@
extends HBoxContainer
@onready var life_label = $life_label
func _ready():
life_label.text = str(3)
func update_life(health: int):
life_label.text = "%d" % health
+1
View File
@@ -0,0 +1 @@
uid://ccjk8penaonow
+18
View File
@@ -0,0 +1,18 @@
extends CanvasLayer
func _on_retry_button_pressed() -> void: # Retry_button
print("retry pressionado")
get_tree().paused = false
get_tree().reload_current_scene()
func _on_quit_button_pressed() -> void: #Quit
print("quity pressionado")
get_tree().quit()
func _on_continued_button_pressed() -> void:#continued
print("continued pressionado")
get_tree().paused = false
get_parent().get_node("Pause").visible = false
+1
View File
@@ -0,0 +1 @@
uid://40tuulq1cqaj
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 clecioespindola
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bnucoo28ydn2d"
path="res://.godot/imported/godot_coin.glb-66feec0024e4b4d999bdf99cc9cb83cc.scn"
[deps]
source_file="res://test/assets/addons/3dplatformprops-main/godot_coin.glb"
dest_files=["res://.godot/imported/godot_coin.glb-66feec0024e4b4d999bdf99cc9cb83cc.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1
Binary file not shown.
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,31 @@
extends Node3D
@onready var _animation_tree: AnimationTree = $AnimationTree
@onready var _main_state_machine: AnimationNodeStateMachinePlayback = _animation_tree.get("parameters/StateMachine/playback")
@onready var _secondary_action_timer: Timer = $SecondaryActionTimer
func _on_secondary_action_timer_timeout() -> void:
if _main_state_machine.get_current_node() != "Idle":
return
_main_state_machine.travel("HeadMovement")
_secondary_action_timer.start(randf_range(3.0, 8.0))
## Sets the model to a neutral, action-free state.
func idle() -> void:
_main_state_machine.travel("Idle")
_secondary_action_timer.start()
## Plays a one-shot attack animation.
## This animation does not play in parallel with other states.
func attack() -> void:
_main_state_machine.travel("Attack")
## Plays a one-shot power-off animation.
## This animation does not play in parallel with other states.
func power_off() -> void:
_main_state_machine.travel("PowerOff")
_secondary_action_timer.stop()
@@ -0,0 +1 @@
uid://j3jmdmhevnsu
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,40 @@
[gd_resource type="Animation" format=3 uid="uid://bqprpxg0a2kjd"]
[resource]
step = 0.05
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Armature/Skeleton3D/bee_bot2:surface_material_override/2:shader_parameter/intensity")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2, 0.25),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
"update": 0,
"values": [0.0, 0.0, 2.0, 0.0, 2.0, 0.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Armature/Skeleton3D/bee_bot2:surface_material_override/3:shader_parameter/global_intensity")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.05, 0.1, 0.15, 0.2),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 0,
"values": [0.0, 1.0, 0.0, 4.0, 0.0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Armature/Skeleton3D/bee_bot2:surface_material_override/1:emission_energy_multiplier")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.1, 0.15, 0.2, 0.25),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [1.0, 0.0, 2.0, 0.0]
}
@@ -0,0 +1,15 @@
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://dx8xfrepk0a68"]
[ext_resource type="Shader" uid="uid://dmqt66iywru6d" path="res://addons/gdquest_models_shared/shaders/screen_shader.gdshader" id="1_itpnc"]
[ext_resource type="Texture2D" uid="uid://bvxkh2pa1nqdq" path="res://addons/gdquest_models_shared/textures/eye_mask.png" id="2_acs8v"]
[resource]
render_priority = 0
shader = ExtResource("1_itpnc")
shader_parameter/face_texture = ExtResource("2_acs8v")
shader_parameter/intensity = 2.0
shader_parameter/screen_color = Color(1, 0.584314, 0, 0.0784314)
shader_parameter/screen_red_offset = Vector2(0, 0)
shader_parameter/screen_green_offset = Vector2(0, 0)
shader_parameter/screen_blue_offset = Vector2(0, 0)
shader_parameter/pixel_size = 32.0
@@ -0,0 +1,7 @@
[gd_resource type="StandardMaterial3D" format=3 uid="uid://bww7by8cvcuoe"]
[resource]
albedo_color = Color(0.470588, 0.470588, 0.470588, 1)
emission_enabled = true
emission = Color(1, 0.584314, 0, 1)
emission_energy_multiplier = 1.25
@@ -0,0 +1,11 @@
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://cruyb7vmbaabx"]
[ext_resource type="Shader" uid="uid://cucygkmpgoqm5" path="res://addons/gdquest_bee_bot/shader/bee_wings_shader.gdshader" id="1_b2ohr"]
[ext_resource type="Texture2D" uid="uid://blaqa1tkmd0xx" path="res://addons/gdquest_bee_bot/textures/wing_pattern.png" id="2_wfea8"]
[resource]
render_priority = 0
shader = ExtResource("1_b2ohr")
shader_parameter/wing_pattern_sampler = ExtResource("2_wfea8")
shader_parameter/emission_color = Color(1, 0.584314, 0, 1)
shader_parameter/global_intensity = 1.0
@@ -0,0 +1,13 @@
shader_type spatial;
render_mode cull_disabled;
uniform sampler2D wing_pattern_sampler : repeat_disable;
uniform vec3 emission_color : source_color = vec3(1.0);
uniform float global_intensity = 1.0;
void fragment() {
float wing_pattern = texture(wing_pattern_sampler, UV).x;
float pulse = ((1.0 + sin(UV.y + TIME)) / 2.0) + 0.5;
ALBEDO = vec3(0.0);
EMISSION = emission_color * smoothstep(0.51, 0.49, wing_pattern) * pulse * global_intensity;
}
@@ -0,0 +1 @@
uid://cucygkmpgoqm5
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://blaqa1tkmd0xx"
path.s3tc="res://.godot/imported/wing_pattern.png-64756dacf6a230dc119aa2633f9ddeb6.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://test/assets/addons/gdquest_bee_bot/textures/wing_pattern.png"
dest_files=["res://.godot/imported/wing_pattern.png-64756dacf6a230dc119aa2633f9ddeb6.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
@@ -0,0 +1,36 @@
extends Node3D
@onready var _animation_tree: AnimationTree = $AnimationTree
@onready var _main_state_machine: AnimationNodeStateMachinePlayback = _animation_tree.get("parameters/StateMachine/playback")
@onready var _secondary_action_timer: Timer = $SecondaryActionTimer
func _on_secondary_action_timer_timeout() -> void:
if _main_state_machine.get_current_node() != "Idle":
return
_main_state_machine.travel("Shake")
_secondary_action_timer.start(randf_range(3.0, 8.0))
## Sets the model to a neutral, action-free state.
func idle() -> void:
_main_state_machine.travel("Idle")
_secondary_action_timer.start()
## Sets the model to a walking animation or forward movement.
func walk() -> void:
_main_state_machine.travel("Walk")
## Plays a one-shot attack animation.
## This animation does not play in parallel with other states.
func attack() -> void:
_main_state_machine.travel("Attack")
## Plays a one-shot power-off animation.
## This animation does not play in parallel with other states.
func power_off() -> void:
_main_state_machine.travel("PowerOff")
_secondary_action_timer.stop()
@@ -0,0 +1 @@
uid://bayxkg4v3lp4r
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://dg5h8p8fu3mhh"]
[ext_resource type="Shader" uid="uid://dmqt66iywru6d" path="res://test/assets/addons/gdquest_models_shared/shaders/screen_shader.gdshader" id="1_n44cl"]
[ext_resource type="Texture2D" uid="uid://bvxkh2pa1nqdq" path="res://test/assets/addons/gdquest_models_shared/textures/eye_mask.png" id="2_hdljt"]
[resource]
render_priority = 0
shader = ExtResource("1_n44cl")
shader_parameter/face_texture = ExtResource("2_hdljt")
shader_parameter/intensity = 1.25
shader_parameter/screen_color = Color(0.619608, 0.862745, 0, 0.0784314)
shader_parameter/screen_red_offset = Vector2(0, 0)
shader_parameter/screen_green_offset = Vector2(0, 0)
shader_parameter/screen_blue_offset = Vector2(0, 0)
shader_parameter/pixel_size = 32.0
@@ -0,0 +1,7 @@
[gd_resource type="StandardMaterial3D" format=3 uid="uid://h2e57pyy6lu4"]
[resource]
albedo_color = Color(0.470588, 0.470588, 0.470588, 1)
emission_enabled = true
emission = Color(0.619608, 0.862745, 0, 1)
emission_energy_multiplier = 1.25
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,17 @@
[gd_resource type="Animation" format=3 uid="uid://b627b68jhaqwt"]
[resource]
length = 3.0
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Armature/Skeleton3D/gdbot_mesh:surface_material_override/2:emission_energy_multiplier")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1.5, 3),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [0.5, 3.0, 0.5]
}
Binary file not shown.
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,71 @@
extends Node2D
var _blinking = null:
set = _set_blinking
@onready var _animation_player: AnimationPlayer = $AnimationPlayer
@onready var _blinking_timer: Timer = $BlinkTimer
@onready var _closed_eyes_timer: Timer = $ClosedTimer
@onready var _left_eye: Sprite2D = $LeftEye
@onready var _right_eye: Sprite2D = $RightEye
var eyes_textures = {
"open": preload("./texture/parts/eye_open.png"),
"closed": preload("./texture/parts/eye_close.png"),
}
var current_face = null:
set = _set_face
func _ready() -> void:
_blinking_timer.timeout.connect(_on_blink_timer_timeout)
_set_blinking(true)
current_face = "default"
func _set_blinking(value: bool) -> void:
_blinking = value
if _blinking:
_blinking_timer.start()
else:
_blinking_timer.stop()
func _on_blink_timer_timeout() -> void:
# Play secondary action rather than blink
if randf_range(0.0, 1.0) > 0.9:
_animation_player.play("look_around")
await _animation_player.animation_finished
else:
# Close eyes
_set_eyes("closed")
_closed_eyes_timer.start(randf_range(0.1, 0.25))
await _closed_eyes_timer.timeout
# Return to current eyes
_set_eyes("open")
if randf_range(0.0, 1.0) > 0.8:
_blinking_timer.wait_time = randf_range(0.1, 0.15)
else:
_blinking_timer.wait_time = randf_range(1.0, 4.0)
_blinking_timer.start()
func _set_eyes(eyes_name: String) -> void:
_left_eye.texture = eyes_textures[eyes_name]
_right_eye.texture = eyes_textures[eyes_name]
func _set_face(face_name: String) -> void:
if current_face == face_name:
return
current_face = face_name
_animation_player.play("RESET")
_animation_player.seek(0.0, true)
if face_name == "default":
_set_blinking(true)
return
_set_blinking(false)
if !_animation_player.has_animation(face_name):
push_error("Can't set GDBot's face to: '" + face_name + "'")
return
_animation_player.play(face_name)
@@ -0,0 +1 @@
uid://8sqitarj6fkw
@@ -0,0 +1,373 @@
[gd_scene load_steps=14 format=3 uid="uid://dvy2nao23i4rl"]
[ext_resource type="Script" path="res://addons/gdquest_gdbot/gdbot_face.gd" id="1_g7fgr"]
[ext_resource type="Texture2D" uid="uid://cbp882a2a27qw" path="res://addons/gdquest_gdbot/texture/parts/eye_happy.png" id="2_fa0xy"]
[ext_resource type="Texture2D" uid="uid://blacn6s3yc88h" path="res://addons/gdquest_gdbot/texture/parts/eye_open.png" id="2_qfyd4"]
[ext_resource type="Texture2D" uid="uid://dt0veafbpw6ih" path="res://addons/gdquest_gdbot/texture/parts/eye_spiral.png" id="3_rdwvm"]
[ext_resource type="Texture2D" uid="uid://blet3qwl4cbi3" path="res://addons/gdquest_gdbot/texture/parts/smile.png" id="3_xjkgv"]
[ext_resource type="Texture2D" uid="uid://b37rqx42rwpv" path="res://addons/gdquest_gdbot/texture/parts/open_mouth.png" id="4_wxn47"]
[ext_resource type="Texture2D" uid="uid://b3b243yxcn5vq" path="res://addons/gdquest_gdbot/texture/parts/eye_close.png" id="6_rog2n"]
[sub_resource type="Animation" id="Animation_33is7"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("LeftEye:texture")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("2_qfyd4")]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("RightEye:texture")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("2_qfyd4")]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Mouth:texture")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("3_xjkgv")]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("LeftEye:rotation")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("RightEye:rotation")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("LeftEye:flip_h")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("RightEye:flip_h")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("Mouth:position")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 20.2222)]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("Mouth:scale")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1.2)]
}
[sub_resource type="Animation" id="Animation_ne3is"]
resource_name = "dizzy"
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("LeftEye:rotation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 6.28319]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("RightEye:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 6.28319]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("RightEye:texture")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("3_rdwvm")]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("LeftEye:texture")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("3_rdwvm")]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Mouth:texture")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("4_wxn47")]
}
[sub_resource type="Animation" id="Animation_ttnon"]
resource_name = "happy"
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("LeftEye:texture")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("2_fa0xy")]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("RightEye:texture")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("2_fa0xy")]
}
[sub_resource type="Animation" id="Animation_rbq53"]
resource_name = "look_around"
length = 0.8
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("RightEye:texture")
tracks/0/interp = 0
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.1, 0.4, 0.5, 0.7),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 1,
"values": [ExtResource("6_rog2n"), ExtResource("2_qfyd4"), ExtResource("6_rog2n"), ExtResource("2_qfyd4"), ExtResource("6_rog2n")]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("LeftEye:texture")
tracks/1/interp = 0
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.1, 0.4, 0.5, 0.7),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 1,
"values": [ExtResource("6_rog2n"), ExtResource("2_qfyd4"), ExtResource("6_rog2n"), ExtResource("2_qfyd4"), ExtResource("6_rog2n")]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("LeftEye:flip_h")
tracks/2/interp = 0
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.1, 0.4, 0.5, 0.7),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 1,
"values": [true, false, true, true, true]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("RightEye:flip_h")
tracks/3/interp = 0
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.5, 0.7),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [false, true, false]
}
[sub_resource type="Animation" id="Animation_4tctg"]
resource_name = "sleepy"
length = 4.0
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Mouth:texture")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("4_wxn47")]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("RightEye:texture")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("6_rog2n")]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("LeftEye:texture")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("6_rog2n")]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Mouth:position")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(),
"transitions": PackedFloat32Array(),
"update": 0,
"values": []
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Mouth:scale")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(),
"transitions": PackedFloat32Array(),
"update": 0,
"values": []
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_l5i24"]
_data = {
"RESET": SubResource("Animation_33is7"),
"dizzy": SubResource("Animation_ne3is"),
"happy": SubResource("Animation_ttnon"),
"look_around": SubResource("Animation_rbq53"),
"sleepy": SubResource("Animation_4tctg")
}
[node name="GDbotFace" type="Node2D"]
script = ExtResource("1_g7fgr")
[node name="BG" type="ColorRect" parent="."]
offset_left = -144.0
offset_top = -144.0
offset_right = 144.0
offset_bottom = 144.0
size_flags_horizontal = 4
[node name="RightEye" type="Sprite2D" parent="."]
position = Vector2(45, -2)
texture = ExtResource("2_qfyd4")
[node name="LeftEye" type="Sprite2D" parent="."]
position = Vector2(-45, -2)
texture = ExtResource("2_qfyd4")
flip_h = true
[node name="Mouth" type="Sprite2D" parent="."]
position = Vector2(0, 20.2222)
scale = Vector2(1, 1.2)
texture = ExtResource("3_xjkgv")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
"": SubResource("AnimationLibrary_l5i24")
}
[node name="BlinkTimer" type="Timer" parent="."]
one_shot = true
[node name="ClosedTimer" type="Timer" parent="."]
one_shot = true
@@ -0,0 +1,41 @@
extends Node3D
## Represents the blending between the walking and running animations. It can be set to different values (e.g. 0.0 to 1.0) to adjust the balance between the two animations, resulting in the model appearing to walk or run depending on the value.
var walk_run_blending = 0.0:
set = _set_walk_run_blending
@onready var _animation_tree = $AnimationTree
@onready var _main_state_machine: AnimationNodeStateMachinePlayback = _animation_tree.get("parameters/StateMachine/playback")
@onready var _walk_run_blend_position: String = "parameters/StateMachine/Walk/blend_position"
@onready var _face = $SubViewport/GDbotFace
func _set_walk_run_blending(value: float) -> void:
walk_run_blending = value
_animation_tree.set(_walk_run_blend_position, walk_run_blending)
## Sets the model to a neutral, action-free state.
func idle() -> void:
_main_state_machine.travel("Idle")
## Sets the model to a walking or running animation or forward movement.
func walk() -> void:
_main_state_machine.travel("Walk")
## Sets the model to an upward-leaping animation, simulating a jump.
func jump() -> void:
_main_state_machine.travel("Jump")
## Sets the model to a downward animation, imitating a fall.
func fall() -> void:
_main_state_machine.travel("Fall")
## Changes the model's facial expression based on the provided input string values. Possible expressions include "default" (for default blinking), "happy" (for a joyful expression), "dizzy" (for spiraling eyes), and "sleepy" (for a drowsy countenance).
##[br][b]Note:[/b] To add new expressions, you can edit gdbot_face.tscn, which is a 2D scene utilized by a viewport node to display on Gdbot's face.
func set_face(face_name: String) -> void:
_face._set_face(face_name)
@@ -0,0 +1 @@
uid://dk2a8ahqexwrw
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://cdqqp1tvfod18"]
[ext_resource type="Shader" path="res://addons/gdquest_models_shared/shaders/screen_shader.gdshader" id="1_e2dsf"]
[ext_resource type="Texture2D" uid="uid://diovavdu1x8kw" path="res://addons/gdquest_gdbot/texture/open.png" id="2_rkdwa"]
[resource]
render_priority = 0
shader = ExtResource("1_e2dsf")
shader_parameter/intensity = 2.0
shader_parameter/screen_color = Color(0.101961, 0.662745, 1, 0.0196078)
shader_parameter/screen_red_offset = Vector2(0, 0)
shader_parameter/screen_green_offset = Vector2(0, 0)
shader_parameter/screen_blue_offset = Vector2(0, 0)
shader_parameter/pixel_size = 32.0
shader_parameter/face_texture = ExtResource("2_rkdwa")
@@ -0,0 +1,7 @@
[gd_resource type="StandardMaterial3D" format=3 uid="uid://4ugdxr58llu8"]
[resource]
transparency = 1
albedo_color = Color(1, 1, 1, 0.443137)
metallic_specular = 1.0
roughness = 0.1
@@ -0,0 +1,7 @@
[gd_resource type="StandardMaterial3D" format=3 uid="uid://cq6bdna8ieu87"]
[resource]
albedo_color = Color(0, 0, 0, 1)
emission_enabled = true
emission = Color(0, 1, 0.392157, 1)
emission_energy_multiplier = 2.39158
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cgja2o4qwiksx"
path="res://.godot/imported/closed.png-fef69d6a34ff2f7909f3ad32fb746ab3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://test/assets/addons/gdquest_gdbot/texture/closed.png"
dest_files=["res://.godot/imported/closed.png-fef69d6a34ff2f7909f3ad32fb746ab3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://diovavdu1x8kw"
path.s3tc="res://.godot/imported/open.png-fa23bddfc51b3db085d614890efe0381.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://test/assets/addons/gdquest_gdbot/texture/open.png"
dest_files=["res://.godot/imported/open.png-fa23bddfc51b3db085d614890efe0381.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b3b243yxcn5vq"
path="res://.godot/imported/eye_close.png-efde4cf43c74014167558b0b58cc9dd1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://test/assets/addons/gdquest_gdbot/texture/parts/eye_close.png"
dest_files=["res://.godot/imported/eye_close.png-efde4cf43c74014167558b0b58cc9dd1.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cbp882a2a27qw"
path="res://.godot/imported/eye_happy.png-e9210b9119308ed8a9c328ce24f23b03.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://test/assets/addons/gdquest_gdbot/texture/parts/eye_happy.png"
dest_files=["res://.godot/imported/eye_happy.png-e9210b9119308ed8a9c328ce24f23b03.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 658 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://blacn6s3yc88h"
path="res://.godot/imported/eye_open.png-9bb1fcc1981f76c850c2b63957767079.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://test/assets/addons/gdquest_gdbot/texture/parts/eye_open.png"
dest_files=["res://.godot/imported/eye_open.png-9bb1fcc1981f76c850c2b63957767079.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 783 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dt0veafbpw6ih"
path="res://.godot/imported/eye_spiral.png-d6350629c0a489736bbb8fd5447ba2dc.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://test/assets/addons/gdquest_gdbot/texture/parts/eye_spiral.png"
dest_files=["res://.godot/imported/eye_spiral.png-d6350629c0a489736bbb8fd5447ba2dc.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b37rqx42rwpv"
path="res://.godot/imported/open_mouth.png-47f2c7ce90dd333ffa4ce1aa835b4b0f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://test/assets/addons/gdquest_gdbot/texture/parts/open_mouth.png"
dest_files=["res://.godot/imported/open_mouth.png-47f2c7ce90dd333ffa4ce1aa835b4b0f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 395 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://blet3qwl4cbi3"
path="res://.godot/imported/smile.png-4730846cc97fdf243e99179d556c0636.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://test/assets/addons/gdquest_gdbot/texture/parts/smile.png"
dest_files=["res://.godot/imported/smile.png-4730846cc97fdf243e99179d556c0636.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
@@ -0,0 +1,106 @@
extends Node3D
## Emitted when Gobot's feet hit the ground will running.
@warning_ignore("unused_signal")
signal foot_step
## Gobot's MeshInstance3D model.
@export var gobot_model: MeshInstance3D
## Determines whether blinking is enabled or disabled.
@export var blink = true:
set = _set_blink
@export var _left_eye_mat_override: String
@export var _right_eye_mat_override: String
@export var _open_eye: CompressedTexture2D
@export var _close_eye: CompressedTexture2D
@onready var _animation_tree: AnimationTree = %AnimationTree
@onready var _state_machine: AnimationNodeStateMachinePlayback = _animation_tree.get(
"parameters/StateMachine/playback",
)
@onready var _flip_shot_path: String = "parameters/FlipShot/request"
@onready var _hurt_shot_path: String = "parameters/HurtShot/request"
@onready var _blink_timer = %BlinkTimer
@onready var _closed_eyes_timer = %ClosedEyesTimer
@onready var _left_eye_mat: StandardMaterial3D = gobot_model.get(_left_eye_mat_override)
@onready var _right_eye_mat: StandardMaterial3D = gobot_model.get(_right_eye_mat_override)
func _ready() -> void:
_blink_timer.timeout.connect(
func() -> void:
_left_eye_mat.albedo_texture = _close_eye
_right_eye_mat.albedo_texture = _close_eye
_closed_eyes_timer.start(0.2)
)
_closed_eyes_timer.timeout.connect(
func() -> void:
_left_eye_mat.albedo_texture = _open_eye
_right_eye_mat.albedo_texture = _open_eye
_blink_timer.start(randf_range(1.0, 8.0))
)
func _set_blink(state: bool) -> void:
if _blink_timer == null or blink == state:
return
blink = state
if blink:
_blink_timer.start(0.2)
else:
_blink_timer.stop()
_closed_eyes_timer.stop()
## Sets the model to a neutral, action-free state.
func idle() -> void:
_state_machine.travel("Idle")
## Sets the model to a running animation or forward movement.
func run() -> void:
_state_machine.travel("Run")
## Sets the model to an upward-leaping animation, simulating a jump.
func jump() -> void:
_state_machine.travel("Jump")
## Sets the model to a downward animation, imitating a fall.
func fall() -> void:
_state_machine.travel("Fall")
## Sets the model to an edge-grabbing animation.
func edge_grab() -> void:
_state_machine.travel("EdgeGrab")
## Sets the model to a wall-sliding animation.
func wall_slide() -> void:
_state_machine.travel("WallSlide")
## Plays a one-shot front-flip animation.
## This animation does not play in parallel with other states.
func flip() -> void:
_animation_tree.set(_flip_shot_path, AnimationNodeOneShot.ONE_SHOT_REQUEST_FIRE)
## Makes a victory sign.
func victory_sign() -> void:
_state_machine.travel("VictorySign")
## Plays a one-shot hurt animation.
## This animation plays in parallel with other states.
func hurt() -> void:
_animation_tree.set(_hurt_shot_path, AnimationNodeOneShot.ONE_SHOT_REQUEST_FIRE)
var tween := create_tween().set_ease(Tween.EASE_OUT)
tween.tween_property(self, "scale", Vector3(1.2, 0.8, 1.2), 0.1)
tween.tween_property(self, "scale", Vector3.ONE, 0.2)
@@ -0,0 +1 @@
uid://02pjlm1ilk3w
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,10 @@
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://div0enqs04w5j"]
[ext_resource type="Texture2D" uid="uid://dq675fmt1rg8c" path="res://addons/gdquest_gobot/textures/open_eye.png" id="1_5dt3l"]
[resource]
resource_local_to_scene = true
albedo_texture = ExtResource("1_5dt3l")
roughness = 0.6
uv1_offset = Vector3(0.1, 0, 0)
texture_repeat = false
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bt5o0sr6peltq"
path="res://.godot/imported/gobot_gobot_diffuse.png-c83f8d3c18adfb7066204439a2511192.ctex"
metadata={
"vram_texture": false
}
generator_parameters={}
[deps]
source_file="res://test/assets/addons/gdquest_gobot/model/gobot_gobot_diffuse.png"
dest_files=["res://.godot/imported/gobot_gobot_diffuse.png-c83f8d3c18adfb7066204439a2511192.ctex"]
[params]
compress/mode=3
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d28w5bql3g21l"
path="res://.godot/imported/gobot_gobot_normal.png-6f93c6cc4c0a48e074db4dd4db458dbc.ctex"
metadata={
"vram_texture": false
}
generator_parameters={}
[deps]
source_file="res://test/assets/addons/gdquest_gobot/model/gobot_gobot_normal.png"
dest_files=["res://.godot/imported/gobot_gobot_normal.png-6f93c6cc4c0a48e074db4dd4db458dbc.ctex"]
[params]
compress/mode=3
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=1
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=1
roughness/src_normal="res://gobot_gobot_normal.png"
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cgkj45d67dalm"
path="res://.godot/imported/gobot_gobot_roughness.png-8eba6ba5965b45eee2c401c8f0baa19e.ctex"
metadata={
"vram_texture": false
}
generator_parameters={}
[deps]
source_file="res://test/assets/addons/gdquest_gobot/model/gobot_gobot_roughness.png"
dest_files=["res://.godot/imported/gobot_gobot_roughness.png-8eba6ba5965b45eee2c401c8f0baa19e.ctex"]
[params]
compress/mode=3
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cfdf62ci74tew"
path.s3tc="res://.godot/imported/closed_eyes.png-aa9cb2ca69d6c9798fa101c808cfe47c.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://test/assets/addons/gdquest_gobot/textures/closed_eyes.png"
dest_files=["res://.godot/imported/closed_eyes.png-aa9cb2ca69d6c9798fa101c808cfe47c.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://yj5yx07nva6l"
path.s3tc="res://.godot/imported/hurt_eyes.png-e9e04633bf0c25aa84ffd681ba4d7aab.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://test/assets/addons/gdquest_gobot/textures/hurt_eyes.png"
dest_files=["res://.godot/imported/hurt_eyes.png-e9e04633bf0c25aa84ffd681ba4d7aab.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Some files were not shown because too many files have changed in this diff Show More