First Commit
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
uid://0vdug42aihte
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://bf5im32nygtgq
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://difds0c6bi8nn
|
||||
@@ -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()
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://dbfvho370q6cq
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://dp6vv8hjriuph
|
||||
@@ -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
|
||||
@@ -0,0 +1,2 @@
|
||||
extends CollisionShape3D
|
||||
const ATTACK_DAMAGE = 1
|
||||
@@ -0,0 +1 @@
|
||||
uid://cfhrrjafe2emf
|
||||
@@ -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.
|
||||
@@ -0,0 +1 @@
|
||||
uid://dsc7pk1wlo3lx
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://ccjk8penaonow
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
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
|
||||
@@ -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
|
||||
@@ -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]
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
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
|
||||
|
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
|
||||
|
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
|
||||
|
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
|
||||
|
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
|
||||
|
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
|
||||
|
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
|
||||
|
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
|
||||
@@ -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
|
||||
|
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
|
||||
|
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
|
||||
|
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
|
||||
|
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
|
||||
|
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
|
||||
|
After Width: | Height: | Size: 7.7 KiB |