This repository has no description
1# SPDX-License-Identifier: MIT
2# SPDX-FileCopyrightText: 2023 MizunagiKB <mizukb@live.jp>
3extends Control
4
5
6const ENABLE_MOTION_FINISHED := true
7
8var cubism_model: GDCubismUserModel
9var last_motion = null
10
11
12func recalc_model_position(model: GDCubismUserModel):
13 if model.assets == "":
14 return
15
16 var canvas_info: Dictionary = model.get_canvas_info()
17
18 if canvas_info.is_empty() != true:
19 var vct_viewport_size = Vector2(get_viewport_rect().size)
20 var scale: float = vct_viewport_size.y / max(canvas_info.size_in_pixels.x, canvas_info.size_in_pixels.y)
21 model.position = vct_viewport_size / 2.0
22 model.scale = Vector2(scale, scale)
23
24
25func setup(pathname: String):
26 cubism_model.assets = pathname
27
28 recalc_model_position(cubism_model)
29
30 var idx: int = 0
31 var dict_motion = cubism_model.get_motions()
32 $UI/ItemListMotion.clear()
33 for k in dict_motion:
34 for v in range(dict_motion[k]):
35 $UI/ItemListMotion.add_item("{0}_{1}".format([k, v]))
36 $UI/ItemListMotion.set_item_metadata(idx, {"group": k, "no": v})
37 idx += 1
38
39 $UI/ItemListExpression.clear()
40 for item in cubism_model.get_expressions():
41 $UI/ItemListExpression.add_item(item)
42
43 cubism_model.playback_process_mode = GDCubismUserModel.IDLE
44
45
46func model3_search(dirname: String):
47
48 var dir: DirAccess = DirAccess.open(dirname)
49 if dir == null:
50 return
51
52 dir.list_dir_begin()
53 var name = dir.get_next()
54 while name != "":
55 if dir.current_is_dir():
56 model3_search(dirname.path_join(name))
57 else:
58 if name.ends_with(".model3.json"):
59 print(dirname.path_join(name))
60 $UI/OptModel.add_item(dirname.path_join(name))
61 name = dir.get_next()
62
63
64func _ready():
65 cubism_model = GDCubismUserModel.new()
66 self.add_child(cubism_model)
67
68 if ENABLE_MOTION_FINISHED == true:
69 cubism_model.motion_finished.connect(_on_motion_finished)
70
71 $UI/OptModel.clear()
72 $UI/OptModel.add_item("")
73 model3_search("res://addons/gd_cubism/example/res/live2d")
74
75
76func _on_motion_finished():
77 cubism_model.start_motion(
78 last_motion.group,
79 last_motion.no,
80 GDCubismUserModel.PRIORITY_FORCE
81 )
82
83
84func _on_opt_model_item_selected(index):
85 setup($UI/OptModel.get_item_text(index))
86
87
88func _on_item_list_motion_item_selected(index):
89 var motion = $UI/ItemListMotion.get_item_metadata(index)
90 var m = cubism_model.start_motion(motion.group, motion.no, GDCubismUserModel.PRIORITY_FORCE)
91 last_motion = motion
92
93
94func _on_item_list_expression_item_selected(index):
95 var expression_id = $UI/ItemListExpression.get_item_text(index)
96 cubism_model.start_expression(expression_id)