Implemented interaction hints.
This commit is contained in:
parent
d7f1df9dc5
commit
97ed921f20
|
@ -0,0 +1,9 @@
|
|||
tool
|
||||
extends Button
|
||||
|
||||
|
||||
func _on_Button_pressed():
|
||||
print(SummerDay.test)
|
||||
print(SummerDay.canvas_state.test)
|
||||
print(SummerDay.canvas_state.fill_transform)
|
||||
print(SummerDay.canvas_state.rect_size)
|
|
@ -17,3 +17,29 @@ func _interact(event: InputEvent) -> bool: # Virtual.
|
|||
|
||||
func _update_table(table: SummerDayTable): # Virtual.
|
||||
pass
|
||||
|
||||
|
||||
func _draw_interaction_hint(): # Virtual.
|
||||
pass
|
||||
|
||||
|
||||
func update_interaction_hint():
|
||||
SummerDay.interaction_hint.clear()
|
||||
_draw_interaction_hint()
|
||||
|
||||
|
||||
func draw_dot(position: Vector3, color: Color):
|
||||
SummerDay.interaction_hint.draw_dot(position, color)
|
||||
|
||||
|
||||
func draw_line(position_1: Vector3, position_2: Vector3,
|
||||
color: Color, second_color = null
|
||||
):
|
||||
var color_2: Color
|
||||
if second_color == null:
|
||||
color_2 = color
|
||||
else:
|
||||
color_2 = second_color
|
||||
SummerDay.interaction_hint.draw_line(
|
||||
position_1, position_2, color, color_2
|
||||
)
|
||||
|
|
|
@ -15,6 +15,7 @@ export(PoolVector2Array) var vertices = PoolVector2Array([
|
|||
Vector2(-0.1, 0.4),
|
||||
])
|
||||
|
||||
var picked_point = -1
|
||||
|
||||
|
||||
func _check_for_selection_candidate(event: InputEvent) -> bool: # Virtual.
|
||||
|
@ -25,7 +26,21 @@ func _check_for_selection_candidate(event: InputEvent) -> bool: # Virtual.
|
|||
|
||||
|
||||
func _interact(event: InputEvent) -> bool: # Virtual.
|
||||
return false
|
||||
|
||||
if event is InputEventMouseButton:
|
||||
if event.button_index == BUTTON_LEFT:
|
||||
if event.pressed:
|
||||
_pick_point(event.position)
|
||||
else:
|
||||
picked_point = -1
|
||||
|
||||
if event is InputEventMouseMotion:
|
||||
if picked_point != -1:
|
||||
|
||||
vertices[picked_point] = event.position
|
||||
#_update_table()
|
||||
update_interaction_hint()
|
||||
return true
|
||||
|
||||
|
||||
func _update_table(table: SummerDayTable): # Virtual.
|
||||
|
@ -36,3 +51,47 @@ 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)
|
||||
|
||||
|
||||
func _draw_interaction_hint():
|
||||
for i in range(4):
|
||||
var vertex_2d = vertices[i]
|
||||
var vertex = _with_z(vertex_2d, 0.0)
|
||||
draw_dot(vertex, Color.cornflower)
|
||||
for i in range(4, 8):
|
||||
var vertex_2d = vertices[i]
|
||||
var vertex = _with_z(vertex_2d, -1.0)
|
||||
draw_dot(vertex, Color.crimson)
|
||||
for i in range(4):
|
||||
draw_line(
|
||||
_with_z(vertices[i], 0.0),
|
||||
_with_z(vertices[wrapi(i + 1, 0, 4)], 0.0),
|
||||
Color.cornflower
|
||||
)
|
||||
for i in range(4):
|
||||
draw_line(
|
||||
_with_z(vertices[i], 0.0),
|
||||
_with_z(vertices[i + 4], -1.0),
|
||||
Color.cornflower,
|
||||
Color.crimson
|
||||
)
|
||||
for i in range(4):
|
||||
draw_line(
|
||||
_with_z(vertices[i + 4], -1.0),
|
||||
_with_z(vertices[wrapi(i + 5, 4, 8)], -1.0),
|
||||
Color.crimson
|
||||
)
|
||||
|
||||
|
||||
func _pick_point(mouse_pos):
|
||||
var picked_point_so_far = -1
|
||||
var nearest_distance = 0.02
|
||||
for i in vertices.size():
|
||||
var distance = vertices[i].distance_to(mouse_pos)
|
||||
if distance < nearest_distance:
|
||||
nearest_distance = distance
|
||||
picked_point_so_far = i
|
||||
picked_point = picked_point_so_far
|
||||
|
||||
|
||||
func _with_z(vector: Vector2, z: float) -> Vector3:
|
||||
return Vector3(vector.x, vector.y, z)
|
||||
|
|
|
@ -15,8 +15,14 @@ func _pass_input(event: InputEvent): # Virtual.
|
|||
if success:
|
||||
block_selection = true
|
||||
if !block_selection:
|
||||
selected.clear()
|
||||
for i in editable_list:
|
||||
if i._check_for_selection_candidate(event):
|
||||
selected.clear()
|
||||
selected.append(i)
|
||||
i.update_interaction_hint()
|
||||
print("YOU CLICKED!!")
|
||||
|
||||
|
||||
func update_interaction_hint():
|
||||
for i in selected:
|
||||
i.update_interaction_hint()
|
||||
|
|
|
@ -13,10 +13,14 @@ export(Array, Resource) var tracks
|
|||
|
||||
var raw_aspect_ratio setget , _get_raw_aspect_ratio
|
||||
|
||||
var selected_track
|
||||
|
||||
func setup_tracks():
|
||||
|
||||
func setup():
|
||||
for track in tracks:
|
||||
selected_track = track
|
||||
emit_signal("track_added", track)
|
||||
update_interaction_hint()
|
||||
|
||||
|
||||
func add_track(blueprint: SummerDayBlueprint):
|
||||
|
@ -24,6 +28,7 @@ func add_track(blueprint: SummerDayBlueprint):
|
|||
track.blueprint = blueprint
|
||||
track.add_cell(0)
|
||||
tracks.append(track)
|
||||
selected_track = track
|
||||
emit_signal("track_added", track)
|
||||
|
||||
|
||||
|
@ -34,6 +39,11 @@ func create_scene() -> SummerDayScene:
|
|||
return _scene
|
||||
|
||||
|
||||
func update_interaction_hint():
|
||||
if selected_track:
|
||||
selected_track.update_interaction_hint()
|
||||
|
||||
|
||||
func _set_resolution(new_resolution):
|
||||
var handled_resolution = Vector2()
|
||||
|
||||
|
|
|
@ -31,3 +31,9 @@ func pass_local_input(event: InputEvent):
|
|||
var current_cell = get_current_cell()
|
||||
if current_cell:
|
||||
current_cell._pass_input(event)
|
||||
|
||||
|
||||
func update_interaction_hint():
|
||||
var cell = get_current_cell()
|
||||
if cell:
|
||||
cell.update_interaction_hint()
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
[gd_scene load_steps=3 format=2]
|
||||
[gd_scene load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://addons/summer_day/user_interface/canvas/canvas.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://addons/summer_day/main_screen.gd" type="Script" id=2]
|
||||
[ext_resource path="res://Buctton.gd" type="Script" id=3]
|
||||
|
||||
[node name="MainScreen" type="Control"]
|
||||
anchor_right = 1.0
|
||||
|
@ -13,3 +14,11 @@ __meta__ = {
|
|||
}
|
||||
|
||||
[node name="Canvas" parent="." instance=ExtResource( 1 )]
|
||||
|
||||
[node name="Button" type="Button" parent="."]
|
||||
margin_right = 63.0
|
||||
margin_bottom = 20.0
|
||||
text = "PRESS"
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[connection signal="pressed" from="Button" to="Button" method="_on_Button_pressed"]
|
||||
|
|
|
@ -19,6 +19,8 @@ func _enter_tree():
|
|||
canvas_instance = main_screen_instance.get_node("Canvas")
|
||||
self.connect("document_changed",
|
||||
canvas_instance, "_on_SummerDay_document_changed")
|
||||
canvas_instance.connect("resized",
|
||||
canvas_instance, "_on_Canvas_resized")
|
||||
# Add the main panel to the editor's main viewport.
|
||||
get_editor_interface().get_editor_viewport().add_child(main_screen_instance)
|
||||
# Hide the main panel. Very much required.
|
||||
|
@ -46,6 +48,13 @@ func _exit_tree():
|
|||
remove_control_from_bottom_panel(timeline_instance)
|
||||
|
||||
|
||||
func enable_plugin():
|
||||
add_autoload_singleton(
|
||||
"SummerDay",
|
||||
"res://addons/summer_day/utilities/summer_day_globals.gd"
|
||||
)
|
||||
|
||||
|
||||
func disable_plugin():
|
||||
remove_autoload_singleton("SummerDay")
|
||||
|
||||
|
@ -70,8 +79,9 @@ func handles(object):
|
|||
|
||||
|
||||
func edit(object):
|
||||
if object != $"/root/SummerDay".document:
|
||||
$"/root/SummerDay".document = object
|
||||
var _SummerDay = $"/root/SummerDay"
|
||||
if object != _SummerDay.document:
|
||||
_SummerDay.document = object
|
||||
emit_signal("document_changed", object)
|
||||
|
||||
|
||||
|
@ -88,6 +98,7 @@ func _initilize():
|
|||
"SummerDay",
|
||||
"res://addons/summer_day/utilities/summer_day_globals.gd"
|
||||
)
|
||||
|
||||
MainScreen = load("res://addons/summer_day/main_screen.tscn")
|
||||
Timeline = load("res://addons/summer_day/user_interface/timeline/timeline.tscn")
|
||||
Document = load("res://addons/summer_day/data/document/document.gd")
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
tool
|
||||
extends SummerDayTool
|
||||
class_name SummerDayFreeTransformCanvasTool
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
tool
|
||||
extends SummerDayTool
|
||||
class_name SummerDayHandCanvasTool
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
tool
|
||||
extends SummerDayTool
|
||||
class_name SummerDayPenCanvasTool
|
||||
|
||||
|
@ -8,7 +9,7 @@ func _init():
|
|||
|
||||
func _check_for_use(event: InputEvent):
|
||||
if event is InputEventMouseButton:
|
||||
if event.button_index == BUTTON_LEFT and event.is_pressed():
|
||||
if event.button_index == BUTTON_LEFT:
|
||||
return true
|
||||
|
||||
if event is InputEventMouseMotion:
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
tool
|
||||
extends SummerDayTool
|
||||
class_name SummerDayRotationCanvasTool
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
tool
|
||||
extends SummerDayToolPool
|
||||
class_name SummerDayCanvasToolPool
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
tool
|
||||
extends SummerDayTool
|
||||
class_name SummerDayZoomCanvasTool
|
||||
|
||||
|
|
|
@ -44,12 +44,11 @@ func drop_data(position, data):
|
|||
func _on_SummerDay_document_changed(new_doc):
|
||||
new_doc.connect("track_added",
|
||||
MeshContainer, "_on_Document_add_track")
|
||||
new_doc.setup_tracks()
|
||||
new_doc.setup()
|
||||
canvas_state.update_fill_transform()
|
||||
new_doc.connect("resolution_changed",
|
||||
self, "_on_scene_aspect_ratio_changed")
|
||||
$Render/Label.text = str(new_doc) + "\n" + str(new_doc.resolution)
|
||||
canvas_state.update_fill_transform()
|
||||
|
||||
|
||||
func _on_Canvas_resized():
|
||||
|
@ -85,7 +84,10 @@ func _on_view_transform_changed(canvas_transform, spatial_transform):
|
|||
var mat = mesh.surface_get_material(i)
|
||||
mat.set_shader_param("canvas_transform", basis)
|
||||
else:
|
||||
if l.has_method("get_material"):
|
||||
l.get_material().set_shader_param("canvas_transform", basis)
|
||||
else:
|
||||
l.material_override.set_shader_param("canvas_transform", basis)
|
||||
|
||||
|
||||
func _on_canvas_polygon_changed(new_polygon):
|
||||
|
|
|
@ -27,19 +27,31 @@ blend_mode = 3
|
|||
|
||||
[sub_resource type="Shader" id=6]
|
||||
code = "shader_type spatial;
|
||||
render_mode blend_mix, depth_draw_opaque, unshaded, depth_test_disable;
|
||||
render_mode blend_mix,depth_draw_opaque,cull_disabled,unshaded,depth_test_disable,skip_vertex_transform;
|
||||
|
||||
|
||||
uniform mat3 canvas_transform;
|
||||
|
||||
void vertex() {
|
||||
vec4 pre = vec4(VERTEX, 1.0);
|
||||
vec3 transformed_xy = vec3(pre.xy, 1.0) * transpose(canvas_transform);
|
||||
vec4 post = vec4(transformed_xy.x, transformed_xy.y, pre.z, pre.w);
|
||||
POSITION = post;
|
||||
VERTEX = (post / post.w).xyz;
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
ALBEDO = mix(COLOR.rgb, screen_color, weight);
|
||||
}"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=7]
|
||||
render_priority = 1
|
||||
shader = SubResource( 6 )
|
||||
shader_param/canvas_transform = Basis( 0.587128, 0, -0.414469, 0, -0.943144, 0.393899, 0, 0, 1 )
|
||||
|
||||
[node name="Canvas" type="PanelContainer"]
|
||||
anchor_right = 1.0
|
||||
|
@ -102,7 +114,7 @@ invert_enable = true
|
|||
invert_border = 1000.0
|
||||
polygon = PoolVector2Array( 0, 0, 1.77778, 0, 1.77778, 1, 0, 1 )
|
||||
|
||||
[node name="InteractionHint" type="ImmediateGeometry" parent="Render/RenderLayer"]
|
||||
[node name="InteractionHint" type="ImmediateGeometry" parent="Render/RenderLayer" groups=["SummerDaySpatialTransform"]]
|
||||
material_override = SubResource( 7 )
|
||||
script = ExtResource( 3 )
|
||||
|
||||
|
@ -117,5 +129,3 @@ gui_disable_input = true
|
|||
[node name="Label" type="Label" parent="Render"]
|
||||
margin_right = 40.0
|
||||
margin_bottom = 14.0
|
||||
|
||||
[connection signal="resized" from="." to="." method="_on_Canvas_resized"]
|
||||
|
|
|
@ -3,10 +3,12 @@ class_name SummerDayCanvasState
|
|||
|
||||
signal fill_transform_changed(fill_transform)
|
||||
signal canvas_transform_changed(canvas_transform)
|
||||
signal view_transform_changed(view_transform)
|
||||
signal view_transform_changed(view_transform, spatial_transform)
|
||||
|
||||
signal canvas_polygon_changed(polygon)
|
||||
|
||||
var test = "Das ist im Canvas_State"
|
||||
|
||||
var rect_size: Vector2
|
||||
|
||||
var fill_transform := Transform2D.IDENTITY
|
||||
|
@ -52,7 +54,7 @@ func update_fill_transform():
|
|||
translation
|
||||
)
|
||||
|
||||
_update_canvas_polygon()
|
||||
#_update_canvas_polygon()
|
||||
|
||||
emit_signal("fill_transform_changed", fill_transform)
|
||||
|
||||
|
|
|
@ -7,28 +7,28 @@ var canvas_state: SummerDayCanvasState # Provided through Canvas.
|
|||
|
||||
|
||||
func draw_dot(position: Vector3, color: Color):
|
||||
var transformation = SummerDay.canvas_state.clip_space_view_transform
|
||||
var transformed_position = transformation.xform(position)
|
||||
|
||||
var radius = 3.0
|
||||
var vertex_count = 12.0
|
||||
var radius = 0.0085
|
||||
var vertex_count = 6.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)
|
||||
var offset = Vector3(
|
||||
sin(weight * TAU) * radius,
|
||||
cos(weight * TAU) * radius,
|
||||
0.0
|
||||
)
|
||||
add_vertex(position + offset)
|
||||
end()
|
||||
|
||||
|
||||
func draw_line(position_1: Vector3, position_2: Vector3, color: Color):
|
||||
var transformation = SummerDay.canvas_state.clip_space_view_transform
|
||||
var transformed_position_1 = transformation.xform(position_1)
|
||||
var transformed_position_2 = transformation.xform(position_2)
|
||||
|
||||
func draw_line(position_1: Vector3, position_2: Vector3,
|
||||
color_1: Color, color_2: Color
|
||||
):
|
||||
begin(Mesh.PRIMITIVE_LINES)
|
||||
set_color(color)
|
||||
add_vertex(transformed_position_1)
|
||||
add_vertex(transformed_position_2)
|
||||
set_color(color_1)
|
||||
add_vertex(position_1)
|
||||
set_color(color_2)
|
||||
add_vertex(position_2)
|
||||
end()
|
||||
|
|
|
@ -2,6 +2,8 @@ tool
|
|||
extends Node
|
||||
|
||||
|
||||
var test = "Jojojawdfq"
|
||||
|
||||
var document: SummerDayDocument
|
||||
var canvas_state: SummerDayCanvasState
|
||||
var interaction_hint: SummerDayInteractionHint
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
[sub_resource type="Resource" id=1]
|
||||
script = ExtResource( 6 )
|
||||
vertices = PoolVector2Array( -0.4, -0.4, 0.1, -0.4, 0.1, 0.1, -0.4, 0.1, -0.1, -0.1, 0.4, -0.1, 0.4, 0.4, -0.1, 0.4 )
|
||||
vertices = PoolVector2Array( -0.4, -0.4, 0.1, -0.4, 0.113769, -0.0876254, -0.4, 0.1, -0.1, -0.1, 0.4, -0.1, 0.4, 0.4, -0.1, 0.4 )
|
||||
|
||||
[sub_resource type="Resource" id=2]
|
||||
script = ExtResource( 3 )
|
||||
|
|
|
@ -55,5 +55,5 @@ void fragment() {
|
|||
|
||||
[resource]
|
||||
shader = SubResource( 1 )
|
||||
shader_param/canvas_transform = Basis( -0.100636, -0.496363, 0.0452502, -0.707523, 0.143448, 0.352804, 0, 0, 1 )
|
||||
shader_param/canvas_transform = Basis( 0.999546, 0, -0.0981899, 0, -1.22596, -0.0477029, 0, 0, 1 )
|
||||
shader_param/table = ExtResource( 1 )
|
||||
|
|
Loading…
Reference in New Issue
Block a user