Implemented basic functionality for interaction with editables.
This commit is contained in:
parent
f6209c3aa9
commit
83d6a31683
|
@ -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 )
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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!!")
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
|
@ -0,0 +1,4 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
|
#var canvas_state: SummerDayCanvasState
|
|
@ -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": "",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user