diff --git a/Bullshit/PolyTest/The Big.tres b/Bullshit/PolyTest/The Big.tres new file mode 100644 index 0000000..45330ba --- /dev/null +++ b/Bullshit/PolyTest/The Big.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" load_steps=4 format=2] + +[ext_resource path="res://addons/summer_day/data/scene/scene.gd" type="Script" id=1] +[ext_resource path="res://addons/summer_day/data/document/document.gd" type="Script" id=2] + +[sub_resource type="Resource" id=1] +script = ExtResource( 1 ) +aspect_ratio = Vector2( 12, 9 ) + +[resource] +script = ExtResource( 2 ) +scene = SubResource( 1 ) diff --git a/addons/summer_day/data/blueprint/blueprint.gd b/addons/summer_day/data/blueprint/blueprint.gd index 868e034..c11fbfd 100644 --- a/addons/summer_day/data/blueprint/blueprint.gd +++ b/addons/summer_day/data/blueprint/blueprint.gd @@ -5,8 +5,9 @@ extends Resource class_name SummerDayBlueprint -var editables = [] +func create_model() -> PackedScene: # Virtual. + return null -func _setup_editables(): - pass +func create_cell() -> SummerDayCell: # Virtual. + return null diff --git a/addons/summer_day/data/document/cell.gd b/addons/summer_day/data/document/cell.gd new file mode 100644 index 0000000..2204ae5 --- /dev/null +++ b/addons/summer_day/data/document/cell.gd @@ -0,0 +1,6 @@ +tool +extends Resource +class_name SummerDayCell + + +var editable_list = [] diff --git a/addons/summer_day/data/document/document.gd b/addons/summer_day/data/document/document.gd index 387376c..b4816c3 100644 --- a/addons/summer_day/data/document/document.gd +++ b/addons/summer_day/data/document/document.gd @@ -4,6 +4,14 @@ class_name SummerDayDocument export(Resource) var scene = _scene_generation() +export(Array, Resource) var tracks + + +func add_blueprint(blueprint: SummerDayBlueprint): + var track = SummerDayTrack.new() + track.blueprint = blueprint + track.add_drawing() + tracks.append(track) func _scene_generation() -> SummerDayScene: diff --git a/addons/summer_day/data/document/track.gd b/addons/summer_day/data/document/track.gd new file mode 100644 index 0000000..b2d300e --- /dev/null +++ b/addons/summer_day/data/document/track.gd @@ -0,0 +1,12 @@ +tool +extends Resource +class_name SummerDayTrack + + +export(Resource) var blueprint +export(Array, Resource) var drawings + + +func add_drawing(): + var new_drawing = blueprint.duplicate(true) + drawings.append(new_drawing) diff --git a/addons/summer_day/data/scene/frame.gd b/addons/summer_day/data/scene/frame.gd new file mode 100644 index 0000000..75b0830 --- /dev/null +++ b/addons/summer_day/data/scene/frame.gd @@ -0,0 +1,3 @@ +tool +extends Resource +class_name SummerDaySceneFrame diff --git a/addons/summer_day/summer_day.gd b/addons/summer_day/summer_day.gd index 98b6592..39d9c06 100644 --- a/addons/summer_day/summer_day.gd +++ b/addons/summer_day/summer_day.gd @@ -1,6 +1,7 @@ tool extends EditorPlugin +signal document_changed(new_doc) signal sd_scene_changed(new_scene) const MainScreen = preload("res://addons/summer_day/main_screen.tscn") @@ -21,6 +22,8 @@ func _enter_tree(): main_screen_instance = MainScreen.instance() Canvas = main_screen_instance.get_node("Canvas") Canvas.tool_context = tool_context + self.connect("document_changed", + Canvas, "_on_SummerDay_document_changed") self.connect("sd_scene_changed", Canvas, "_on_SummerDay_scene_changed" ) @@ -79,6 +82,7 @@ func handles(object): func edit(object): + emit_signal("document_changed", object) emit_signal("sd_scene_changed", object.scene) diff --git a/addons/summer_day/tools/canvas/tools/general_use/hand.gd b/addons/summer_day/tools/canvas/tools/general_use/hand.gd index 952fcfa..e10d8e2 100644 --- a/addons/summer_day/tools/canvas/tools/general_use/hand.gd +++ b/addons/summer_day/tools/canvas/tools/general_use/hand.gd @@ -13,7 +13,7 @@ var hand_grabbed = false func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT: - hand_grabbed = event.is_pressed() and event.control + hand_grabbed = event.is_pressed() and event.alt if event.button_index == BUTTON_MIDDLE: hand_grabbed = event.is_pressed() diff --git a/addons/summer_day/tools/canvas/tools/general_use/rotation.gd b/addons/summer_day/tools/canvas/tools/general_use/rotation.gd index 566bc22..c87551e 100644 --- a/addons/summer_day/tools/canvas/tools/general_use/rotation.gd +++ b/addons/summer_day/tools/canvas/tools/general_use/rotation.gd @@ -15,7 +15,7 @@ func _init(): func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT: - if event.is_pressed() and event.shift and event.control: + if event.is_pressed() and event.control and event.alt: initial_transform = tool_context.canvas_state.canvas_transform var canvas_center = tool_context.canvas_state.rect_size * 0.5 initial_angle = event.position.angle_to_point(canvas_center) diff --git a/addons/summer_day/tools/canvas/tools/general_use/zoom.gd b/addons/summer_day/tools/canvas/tools/general_use/zoom.gd index 424afa0..be0d058 100644 --- a/addons/summer_day/tools/canvas/tools/general_use/zoom.gd +++ b/addons/summer_day/tools/canvas/tools/general_use/zoom.gd @@ -5,6 +5,7 @@ class_name SummerDayZoomCanvasTool var zoom_activated := false var initial_transform: Transform2D var initial_mouse_position: Vector2 +var is_space_pressed = false func _init(): @@ -12,10 +13,16 @@ func _init(): modifier_layer = 1 +func _handle_global_input(event: InputEvent): + if event is InputEventKey: + if event.scancode == KEY_SPACE: + is_space_pressed = event.is_pressed() + + func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT: - if event.is_pressed() and event.shift: + if event.is_pressed() and is_space_pressed: initial_transform = tool_context.canvas_state.canvas_transform initial_mouse_position = event.position zoom_activated = true diff --git a/addons/summer_day/tools/tool_system/base_tool.gd b/addons/summer_day/tools/tool_system/base_tool.gd index c7fc652..7cee849 100644 --- a/addons/summer_day/tools/tool_system/base_tool.gd +++ b/addons/summer_day/tools/tool_system/base_tool.gd @@ -5,9 +5,13 @@ var priority = 0 var modifier_layer = 0 +func _handle_global_input(event: InputEvent): # Virtual. + pass + + func _check_for_use( - event: InputEvent, tool_context: SummerDayToolContext - ) -> bool: # Virtual. + event: InputEvent, tool_context: SummerDayToolContext +) -> bool: # Virtual. return false diff --git a/addons/summer_day/tools/tool_system/tool_pool.gd b/addons/summer_day/tools/tool_system/tool_pool.gd index d59a052..6e2e997 100644 --- a/addons/summer_day/tools/tool_system/tool_pool.gd +++ b/addons/summer_day/tools/tool_system/tool_pool.gd @@ -5,6 +5,12 @@ var persistent_tool_pool = [] var modifiable_tool_pool = [] +func pass_global_input(event): + for list in [persistent_tool_pool, modifiable_tool_pool]: + for i in list: + i._handle_global_input(event) + + func run_most_prior( event: InputEvent, tool_context: SummerDayToolContext): var priority_high_score = 0 diff --git a/addons/summer_day/user_interface/canvas/canvas.gd b/addons/summer_day/user_interface/canvas/canvas.gd index 61d7ac0..5570319 100644 --- a/addons/summer_day/user_interface/canvas/canvas.gd +++ b/addons/summer_day/user_interface/canvas/canvas.gd @@ -2,6 +2,7 @@ tool extends PanelContainer class_name SummerDayCanvas +var document: SummerDayDocument var scene: SummerDayScene var canvas_state := SummerDayCanvasState.new() var tool_pool := SummerDayCanvasToolPool.new() @@ -13,6 +14,8 @@ func _ready(): tool_context.canvas_state = canvas_state canvas_state.connect("view_transform_changed", self, "_on_view_transform_changed") + canvas_state.connect("canvas_polygon_changed", + self, "_on_canvas_polygon_changed") func _gui_input(event): @@ -27,17 +30,33 @@ func _gui_input(event): func _input(event): if event is InputEventScreenTouch and !event.is_pressed(): _gui_input(event) + tool_pool.pass_global_input(event) + + +func can_drop_data(position, data): + return data.has("files") + + +func drop_data(position, data): + var file_path = data["files"][0] + var instance = load(file_path) + if instance is SummerDayBlueprint: + document.add_blueprint(instance) + + +func _on_SummerDay_document_changed(new_doc): + if new_doc != document: + document = new_doc func _on_SummerDay_scene_changed(new_scene): - scene = new_scene - canvas_state.update_fill_transform(scene) - scene.connect("aspect_ratio_changed", - self, "_on_scene_aspect_ratio_changed") - canvas_state.connect("canvas_polygon_changed", - self, "_on_canvas_polygon_changed") - $Render/Label.text = str(scene) + "\n" + str(scene.aspect_ratio) - canvas_state.update_fill_transform(scene) + if new_scene != scene: + scene = new_scene + canvas_state.update_fill_transform(scene) + scene.connect("aspect_ratio_changed", + self, "_on_scene_aspect_ratio_changed") + $Render/Label.text = str(scene) + "\n" + str(scene.aspect_ratio) + canvas_state.update_fill_transform(scene) func _on_Canvas_resized(): diff --git a/production/ann.tres b/production/ann.tres index b47eeb6..943e2e1 100644 --- a/production/ann.tres +++ b/production/ann.tres @@ -6,3 +6,4 @@ [resource] script = ExtResource( 1 ) scene = ExtResource( 2 ) +tracks = [ ] diff --git a/production/blueprints/mannequin/mannequin.tres b/production/blueprints/mannequin/mannequin.tres new file mode 100644 index 0000000..ca55e82 --- /dev/null +++ b/production/blueprints/mannequin/mannequin.tres @@ -0,0 +1,47 @@ +[gd_resource type="Resource" load_steps=3 format=2] + +[ext_resource path="res://production/blueprints/mannequin/mat.tres" type="Material" id=1] + +[sub_resource type="GDScript" id=1] +script/source = "tool +extends SummerDayBlueprint + + +export(Resource) var custom_material +var table: Image +var model: PackedScene = null + + +func _setup_editables(): + pass + +func provide_model(): + if model == null: + var caps = CapsuleMesh.new() + var arr_mesh := ArrayMesh.new() + arr_mesh.add_surface_from_arrays( + Mesh.PRIMITIVE_TRIANGLES, caps.get_mesh_arrays + ) + + var m = MeshInstance.new() + m.material = custom_material + m.add_to_group(\"SummerDaySpatialTransform\") + m.mesh = arr_mesh + + table = Image.new() + table.create(8, 1, false, Image.FORMAT_RGBAF) + # + var texture = ImageTexture.new() + # + texture.create_from_image(table, 0) + m.material.set_shader_param(\"table\", table) + + + model = PackedScene.new() + var result = model.pack(m) + return model +" + +[resource] +script = SubResource( 1 ) +custom_material = ExtResource( 1 ) diff --git a/production/blueprints/mannequin/mat.tres b/production/blueprints/mannequin/mat.tres new file mode 100644 index 0000000..d5410b1 --- /dev/null +++ b/production/blueprints/mannequin/mat.tres @@ -0,0 +1,51 @@ +[gd_resource type="ShaderMaterial" load_steps=2 format=2] + +[sub_resource type="Shader" id=1] +code = "shader_type spatial; +render_mode blend_mix,depth_draw_opaque,cull_disabled,skip_vertex_transform; + + +uniform mat3 canvas_transform; +uniform sampler2D table : hint_albedo; + + +vec4 indx(int i) { + //return vec4(1.0, 1.0, 0.0, 1.0); + return textureLod(table, vec2(float(i) * 0.125 + 0.0625), 0); +} + +void vertex() { + vec4 row0; + vec4 row1; + vec4 row2; + vec4 row3; + + if (VERTEX.z >= 0.0) { + row0 = vec4(indx(0).x, indx(0).y, indx(0).z, indx(0).w); + row1 = vec4(indx(1).x, indx(1).y, indx(1).z, indx(1).w); + row2 = vec4(indx(2).x, indx(2).y, indx(2).z, indx(2).w); + row3 = vec4(indx(3).x, indx(3).y, indx(3).z, indx(3).w); + } + else { + row0 = vec4(indx(4).x, indx(4).y, indx(4).z, indx(4).w); + row1 = vec4(indx(5).x, indx(5).y, indx(5).z, indx(5).w); + row2 = vec4(indx(6).x, indx(6).y, indx(6).z, indx(6).w); + row3 = vec4(indx(7).x, indx(7).y, indx(7).z, indx(7).w); + } + mat4 crank_matrix = mat4(row0, row1, row2, row3); + + + vec4 pre = vec4(VERTEX, 1.0) * crank_matrix; + 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() { + ALBEDO = vec3(0.33, 0.81, 0.95); +}" + +[resource] +shader = SubResource( 1 ) +shader_param/canvas_transform = null diff --git a/project.godot b/project.godot index 371fbcf..380c3b8 100644 --- a/project.godot +++ b/project.godot @@ -59,6 +59,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://addons/summer_day/tools/canvas/tools/tool_pool.gd" }, { +"base": "Resource", +"class": "SummerDayCell", +"language": "GDScript", +"path": "res://addons/summer_day/data/document/cell.gd" +}, { "base": "Control", "class": "SummerDayDisplay", "language": "GDScript", @@ -109,6 +114,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://addons/summer_day/data/scene/scene.gd" }, { +"base": "Resource", +"class": "SummerDaySceneFrame", +"language": "GDScript", +"path": "res://addons/summer_day/data/scene/frame.gd" +}, { "base": "EditorInspectorPlugin", "class": "SummerDayScenePicker", "language": "GDScript", @@ -134,6 +144,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://addons/summer_day/tools/tool_system/tool_pool.gd" }, { +"base": "Resource", +"class": "SummerDayTrack", +"language": "GDScript", +"path": "res://addons/summer_day/data/document/track.gd" +}, { "base": "Viewport", "class": "SummerDayViewportHandler", "language": "GDScript", @@ -160,6 +175,7 @@ _global_script_class_icons={ "SummerDayCanvas": "", "SummerDayCanvasState": "", "SummerDayCanvasToolPool": "", +"SummerDayCell": "", "SummerDayDisplay": "", "SummerDayDocument": "", "SummerDayEditable": "", @@ -170,11 +186,13 @@ _global_script_class_icons={ "SummerDayMathHelper": "", "SummerDayRotationCanvasTool": "", "SummerDayScene": "", +"SummerDaySceneFrame": "", "SummerDayScenePicker": "", "SummerDayTimeline": "", "SummerDayTool": "", "SummerDayToolContext": "", "SummerDayToolPool": "", +"SummerDayTrack": "", "SummerDayViewportHandler": "", "SummerDayZoomCanvasTool": "", "VeryWorse": ""