Implemented basic functionality for interaction with editables.

This commit is contained in:
mono 2022-01-02 03:09:18 +01:00
parent f6209c3aa9
commit 83d6a31683
8 changed files with 147 additions and 43 deletions

View File

@ -1,6 +1,21 @@
[gd_scene load_steps=3 format=2] [gd_scene load_steps=4 format=2]
[ext_resource path="res://production/blueprints/mannequin/mat.tres" type="Material" id=1] [sub_resource type="Shader" id=3]
code = "shader_type spatial;
render_mode blend_mix, depth_draw_opaque, unshaded, depth_test_disable;
void fragment() {
//ALBEDO = vec3(0.8, 0.2, 0.2);
float depth = texture(DEPTH_TEXTURE, SCREEN_UV).r;
float weight = clamp((depth - FRAGCOORD.z) * 1000000000.0, 0.0, 0.5);
vec3 screen_color = texture(SCREEN_TEXTURE, SCREEN_UV).rgb;
ALBEDO = mix(vec3(0.8, 1.2, 0.2), screen_color, weight);
}"
[sub_resource type="ShaderMaterial" id=4]
render_priority = 1
shader = SubResource( 3 )
[sub_resource type="ArrayMesh" id=2] [sub_resource type="ArrayMesh" id=2]
surfaces/0 = { surfaces/0 = {
@ -16,6 +31,9 @@ surfaces/0 = {
} }
[node name="TestCapsule" type="MeshInstance" groups=["SummerDaySpatialTransform"]] [node name="TestCapsule" type="MeshInstance" groups=["SummerDaySpatialTransform"]]
material_override = ExtResource( 1 ) material_override = SubResource( 4 )
mesh = SubResource( 2 ) mesh = SubResource( 2 )
material/0 = null material/0 = null
[node name="CSGSphere" type="CSGSphere" parent="."]
transform = Transform( 4.9, 0, 0, 0, 3.64893, 0, 0, 0, 4.84088, -0.126031, -0.175355, -8.52605 )

View File

@ -3,23 +3,17 @@ extends Resource
class_name SummerDayEditable class_name SummerDayEditable
var priority = 0 var preference_number = 0
var modifier_layer = 0
var selected = false
func _check_for_selection(event: InputEvent): # Virtual. func _check_for_selection_candidate(event: InputEvent) -> bool: # Virtual.
pass
func _interact(event: InputEvent): # Virtual.
pass
func _update_table(table: Image): # Virtual.
pass
func _is_point_included(point: Vector2) -> bool: # Virtual.
return false return false
# Returns false if input was potentially meant for a different editable.
func _interact(event: InputEvent) -> bool: # Virtual.
return false
func _update_table(table: SummerDayTable): # Virtual.
pass

View File

@ -3,22 +3,36 @@ extends SummerDayEditable
class_name SummerDayEditableTube class_name SummerDayEditableTube
func _check_for_selection(event: InputEvent): # Virtual. export(PoolVector2Array) var vertices = PoolVector2Array([
pass Vector2(-0.4, -0.4),
Vector2(0.1, -0.4),
Vector2(0.1, 0.1),
func _interact(event: InputEvent): # Virtual. Vector2(-0.4, 0.1),
pass
Vector2(-0.1, -0.1),
Vector2(0.4, -0.1),
func update_table(): Vector2(0.4, 0.4),
pass # TODO: Do I even need this?! Vector2(-0.1, 0.4),
])
func _update_table(table: Image): # Virtual.
pass
func _check_for_selection_candidate(event: InputEvent) -> bool: # Virtual.
if event is InputEventMouseButton:
func _is_point_included(point: Vector2) -> bool: # Virtual. if event.button_index == BUTTON_LEFT and event.pressed:
return false return _is_point_included(event.position)
return false
func _interact(event: InputEvent) -> bool: # Virtual.
return false
func _update_table(table: SummerDayTable): # Virtual.
pass
func _is_point_included(point: Vector2) -> bool: # Private.
var convex_hull = Geometry.convex_hull_2d(vertices)
return Geometry.is_point_in_polygon(point, convex_hull)

View File

@ -5,7 +5,18 @@ class_name SummerDayCell
export(Array, Resource) var editable_list := [] export(Array, Resource) var editable_list := []
var selected = []
func _pass_input(event: InputEvent): # Virtual. func _pass_input(event: InputEvent): # Virtual.
for i in editable_list: var block_selection = false
i._check_for_selection(event) if selected.size() == 1:
var success = selected[0]._interact(event)
if success:
block_selection = true
if !block_selection:
selected.clear()
for i in editable_list:
if i._check_for_selection_candidate(event):
selected.append(i)
print("YOU CLICKED!!")

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=8 format=2] [gd_scene load_steps=11 format=2]
[ext_resource path="res://addons/summer_day/user_interface/canvas/canvas.gd" type="Script" id=1] [ext_resource path="res://addons/summer_day/user_interface/canvas/canvas.gd" type="Script" id=1]
[ext_resource path="res://addons/summer_day/user_interface/canvas/mesh_container.gd" type="Script" id=2] [ext_resource path="res://addons/summer_day/user_interface/canvas/mesh_container.gd" type="Script" id=2]
[ext_resource path="res://addons/summer_day/user_interface/canvas/rendering/interaction_hint.gd" type="Script" id=3]
[sub_resource type="StyleBoxFlat" id=3] [sub_resource type="StyleBoxFlat" id=3]
bg_color = Color( 0.180392, 0.172549, 0.203922, 1 ) bg_color = Color( 0.180392, 0.172549, 0.203922, 1 )
@ -24,6 +25,22 @@ environment = SubResource( 1 )
[sub_resource type="CanvasItemMaterial" id=5] [sub_resource type="CanvasItemMaterial" id=5]
blend_mode = 3 blend_mode = 3
[sub_resource type="Shader" id=6]
code = "shader_type spatial;
render_mode blend_mix, depth_draw_opaque, unshaded, depth_test_disable;
void fragment() {
float depth = texture(DEPTH_TEXTURE, SCREEN_UV).r;
float weight = clamp((FRAGCOORD.z - depth) * float(0xFFFFFF), 0.0, 0.66);
vec3 screen_color = texture(SCREEN_TEXTURE, SCREEN_UV).rgb;
ALBEDO = mix(ALBEDO, screen_color, weight);
}"
[sub_resource type="ShaderMaterial" id=7]
render_priority = 1
shader = SubResource( 6 )
[node name="Canvas" type="PanelContainer"] [node name="Canvas" type="PanelContainer"]
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
@ -85,6 +102,10 @@ invert_enable = true
invert_border = 1000.0 invert_border = 1000.0
polygon = PoolVector2Array( 0, 0, 1.77778, 0, 1.77778, 1, 0, 1 ) polygon = PoolVector2Array( 0, 0, 1.77778, 0, 1.77778, 1, 0, 1 )
[node name="InteractionHint" type="ImmediateGeometry" parent="Render/RenderLayer"]
material_override = SubResource( 7 )
script = ExtResource( 3 )
[node name="ForegroundLayer" type="Viewport" parent="Render" groups=["SummerDayCanvasTransform"]] [node name="ForegroundLayer" type="Viewport" parent="Render" groups=["SummerDayCanvasTransform"]]
size = Vector2( 998, 574 ) size = Vector2( 998, 574 )
transparent_bg = true transparent_bg = true
@ -93,8 +114,6 @@ usage = 0
render_target_update_mode = 3 render_target_update_mode = 3
gui_disable_input = true gui_disable_input = true
[node name="EditHints" type="ImmediateGeometry" parent="Render/ForegroundLayer"]
[node name="Label" type="Label" parent="Render"] [node name="Label" type="Label" parent="Render"]
margin_right = 40.0 margin_right = 40.0
margin_bottom = 14.0 margin_bottom = 14.0

View File

@ -0,0 +1,38 @@
tool
extends ImmediateGeometry
class_name SummerDayInteractionHint
var canvas_state: SummerDayCanvasState # Provided through Canvas.
func draw_dot(position: Vector3, color: Color):
var transformed_position = canvas_state.clip_space_view_transform.xform(
position
)
var radius = 3.0
var vertex_count = 12.0
begin(Mesh.PRIMITIVE_TRIANGLE_FAN)
set_color(color)
for i in range(vertex_count):
var weight = i / vertex_count
var offset = Vector3(sin(weight * TAU), cos(weight * TAU), 0.0)
add_vertex(transformed_position + offset)
end()
func draw_line(position_1: Vector3, position_2: Vector3, color: Color):
var transformed_position_1 = canvas_state.clip_space_view_transform.xform(
position_1
)
var transformed_position_2 = canvas_state.clip_space_view_transform.xform(
position_2
)
begin(Mesh.PRIMITIVE_LINES)
set_color(color)
add_vertex(transformed_position_1)
add_vertex(transformed_position_2)
end()

View File

@ -0,0 +1,4 @@
extends Node
#var canvas_state: SummerDayCanvasState

View File

@ -94,6 +94,11 @@ _global_script_classes=[ {
"language": "GDScript", "language": "GDScript",
"path": "res://addons/summer_day/tools/canvas/general_use/hand.gd" "path": "res://addons/summer_day/tools/canvas/general_use/hand.gd"
}, { }, {
"base": "ImmediateGeometry",
"class": "SummerDayInteractionHint",
"language": "GDScript",
"path": "res://addons/summer_day/user_interface/canvas/rendering/interaction_hint.gd"
}, {
"base": "Control", "base": "Control",
"class": "SummerDayMainScreen", "class": "SummerDayMainScreen",
"language": "GDScript", "language": "GDScript",
@ -202,6 +207,7 @@ _global_script_class_icons={
"SummerDayEditableTube": "", "SummerDayEditableTube": "",
"SummerDayFreeTransformCanvasTool": "", "SummerDayFreeTransformCanvasTool": "",
"SummerDayHandCanvasTool": "", "SummerDayHandCanvasTool": "",
"SummerDayInteractionHint": "",
"SummerDayMainScreen": "", "SummerDayMainScreen": "",
"SummerDayMathHelper": "", "SummerDayMathHelper": "",
"SummerDayMatrix4": "", "SummerDayMatrix4": "",