This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

character / miniview / addons / gd_cubism / example / viewer.gd
2.8 kB 96 lines
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)