Added basic data structure for project files.

This commit is contained in:
mono 2021-12-15 20:58:46 +01:00
parent d285f7a12d
commit 34a7a8dd6d
17 changed files with 215 additions and 16 deletions

View File

@ -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 )

View File

@ -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

View File

@ -0,0 +1,6 @@
tool
extends Resource
class_name SummerDayCell
var editable_list = []

View File

@ -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:

View File

@ -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)

View File

@ -0,0 +1,3 @@
tool
extends Resource
class_name SummerDaySceneFrame

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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():

View File

@ -6,3 +6,4 @@
[resource]
script = ExtResource( 1 )
scene = ExtResource( 2 )
tracks = [ ]

View File

@ -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 )

View File

@ -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

View File

@ -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": ""