diff --git a/blends/small_room.blend b/blends/small_room.blend index 4f65553..c8427de 100644 --- a/blends/small_room.blend +++ b/blends/small_room.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6e3a6002d6f2611ab0741f65e74627d3f9aa36cd5f41ff9b1738ca35851c66d -size 1003500 +oid sha256:c945e1d7540e12b78b36a40fd8d0d9dfbb1fd82f38f70db6550eeae3e33beb71 +size 1003516 diff --git a/blends/small_room.blend1 b/blends/small_room.blend1 index ba19630..314b067 100644 Binary files a/blends/small_room.blend1 and b/blends/small_room.blend1 differ diff --git a/godot/control_scheme/control_target_overlay.material b/godot/control_scheme/control_target_overlay.material index cfaaf59..54e4558 100644 --- a/godot/control_scheme/control_target_overlay.material +++ b/godot/control_scheme/control_target_overlay.material @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9dc4b0e289692491a6dfe242e569fc0891cdd83a85220fc7e81b5cdabec140e9 -size 286 +oid sha256:1e3e766b7b0124d761c5135e096f837b7b551017b16e64066c1e273d2fdc2722 +size 250 diff --git a/godot/control_scheme/controller.gd b/godot/control_scheme/controller.gd index 0f6d6b1..fb59083 100644 --- a/godot/control_scheme/controller.gd +++ b/godot/control_scheme/controller.gd @@ -4,6 +4,7 @@ extends Node3D @export var initial_target: Node3D var target: Targetable = null @export var sensitivity := 0.01 +@export var charge_time := 3 func _ready(): set_target(initial_target) @@ -11,12 +12,23 @@ func _ready(): func _input(event): if event is InputEventMouseMotion: rotate_view(event.relative*sensitivity) - + if event.is_action("charge"): + charge(event.get_action_strength("charge")) func _process(_delta): transform.origin = target.global_position camera.global_position = %camera_spot.global_position camera.look_at(target.global_position) +var charge_tween: Tween = null +func charge(amount: float): + if charge_tween != null: + charge_tween.kill() + if amount == 0.0: + %radial_ui.set_charge(0.0) + return + charge_tween = create_tween() + charge_tween.tween_method(%radial_ui.set_charge, 0.0, 1.0, charge_time) + func rotate_view(amount: Vector2): rotate_y(-amount.x) %rotate_helper.rotate_z(amount.y) diff --git a/godot/control_scheme/controller.tscn b/godot/control_scheme/controller.tscn index 6c16385..72528e9 100644 --- a/godot/control_scheme/controller.tscn +++ b/godot/control_scheme/controller.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://drmb4sitb74fx"] +[gd_scene load_steps=3 format=3 uid="uid://drmb4sitb74fx"] [ext_resource type="Script" path="res://control_scheme/controller.gd" id="1_h3pjb"] +[ext_resource type="PackedScene" uid="uid://p2n48c8st55d" path="res://control_scheme/radial_ui.tscn" id="2_qidcb"] [node name="controller" type="Node3D"] top_level = true @@ -12,3 +13,6 @@ unique_name_in_owner = true [node name="camera_spot" type="Marker3D" parent="rotate_helper"] unique_name_in_owner = true transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0) + +[node name="radial_ui" parent="." instance=ExtResource("2_qidcb")] +unique_name_in_owner = true diff --git a/godot/control_scheme/is_targetable.gd b/godot/control_scheme/is_targetable.gd index 846a38e..a2d6718 100644 --- a/godot/control_scheme/is_targetable.gd +++ b/godot/control_scheme/is_targetable.gd @@ -28,9 +28,9 @@ func change_all_materials(mesh: MeshInstance3D): layer0.next_pass = layer1 layer1.next_pass = layer2 - layer0.render_priority = 0 - layer1.render_priority = 1 - layer2.render_priority = 2 + layer0.render_priority = 10 + layer1.render_priority = 20 + layer2.render_priority = 30 diff --git a/godot/control_scheme/radial_ui.gd b/godot/control_scheme/radial_ui.gd new file mode 100644 index 0000000..dbf0c74 --- /dev/null +++ b/godot/control_scheme/radial_ui.gd @@ -0,0 +1,8 @@ +extends Node3D + +func _ready(): + set_charge(0.0) + +func set_charge(amount: float): + var mat: ShaderMaterial = $MeshInstance3D.get_active_material(0) + mat.set_shader_parameter("charge", amount) diff --git a/godot/control_scheme/radial_ui.gdshader b/godot/control_scheme/radial_ui.gdshader new file mode 100644 index 0000000..a532902 --- /dev/null +++ b/godot/control_scheme/radial_ui.gdshader @@ -0,0 +1,39 @@ +// NOTE: Shader automatically converted from Godot Engine 4.1.3.stable.mono's StandardMaterial3D. + +shader_type spatial; +render_mode blend_mix,depth_draw_opaque,cull_back,diffuse_burley,specular_disabled,unshaded,shadows_disabled,ambient_light_disabled, depth_test_disabled; +uniform float grow; +uniform sampler2D colors : source_color, repeat_disable; +uniform float charge = 1.0; + +#include "res://shaders/noise.gdshaderinc" + +void vertex() { + // Billboarding + MODELVIEW_MATRIX = VIEW_MATRIX * mat4(INV_VIEW_MATRIX[0], INV_VIEW_MATRIX[1], INV_VIEW_MATRIX[2], MODEL_MATRIX[3]); + MODELVIEW_NORMAL_MATRIX = mat3(MODELVIEW_MATRIX); + VERTEX+=NORMAL*grow; + + + float speed = pow(2.0, ((charge+.4)*5.0)); + float dy = sin(speed*.7) * 0.005; + float dx = sin(speed) * 0.005; + VERTEX.y += dy; + VERTEX.x += dx; +} + +void fragment() { + float where = distance(UV, vec2(0.5))*2.0; + if (where >= charge) { + discard; + } + vec2 buv = floor(UV * 350.0); + int bx = int(buv.x); + int by = int(buv.y); + int amount = 2; + if ((bx % amount == 0) || (by % amount == 0)) { + discard; + } + + ALBEDO = texture(colors, vec2(where)).rgb; +} diff --git a/godot/control_scheme/radial_ui.tscn b/godot/control_scheme/radial_ui.tscn new file mode 100644 index 0000000..6800d1c --- /dev/null +++ b/godot/control_scheme/radial_ui.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=4 format=3 uid="uid://p2n48c8st55d"] + +[ext_resource type="Script" path="res://control_scheme/radial_ui.gd" id="1_0qwj1"] +[ext_resource type="Material" uid="uid://cybyibjbyyok1" path="res://control_scheme/radial_ui_material.tres" id="2_go05o"] + +[sub_resource type="QuadMesh" id="QuadMesh_sogra"] + +[node name="radial_ui" type="Node3D"] +script = ExtResource("1_0qwj1") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +material_override = ExtResource("2_go05o") +mesh = SubResource("QuadMesh_sogra") diff --git a/godot/control_scheme/radial_ui_material.tres b/godot/control_scheme/radial_ui_material.tres new file mode 100644 index 0000000..ab2f8ee --- /dev/null +++ b/godot/control_scheme/radial_ui_material.tres @@ -0,0 +1,18 @@ +[gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://cybyibjbyyok1"] + +[ext_resource type="Shader" path="res://control_scheme/radial_ui.gdshader" id="1_hmfvm"] + +[sub_resource type="Gradient" id="Gradient_l7u12"] +interpolation_mode = 1 +offsets = PackedFloat32Array(0.00328947, 0.347039, 0.506579, 0.694079, 0.848684) +colors = PackedColorArray(0.266667, 0.215686, 0.258824, 1, 0.517647, 0.423529, 0.356863, 1, 0.807843, 0.627451, 0.494118, 1, 0.929412, 0.85098, 0.639216, 1, 0.886275, 0.909804, 0.752941, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_8vk7x"] +gradient = SubResource("Gradient_l7u12") + +[resource] +render_priority = 5 +shader = ExtResource("1_hmfvm") +shader_parameter/grow = 0.01 +shader_parameter/charge = 0.0 +shader_parameter/colors = SubResource("GradientTexture1D_8vk7x") diff --git a/godot/project.godot b/godot/project.godot index 489a5ff..2647583 100644 --- a/godot/project.godot +++ b/godot/project.godot @@ -25,3 +25,11 @@ project/assembly_name="Hurrmmm" [filesystem] import/blender/enabled=false + +[input] + +charge={ +"deadzone": 0.0, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +}