This repository has no description
0

Configure Feed

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

character / tests / cubism-probe / addons / gd_cubism / example / demo_effect_custom_02.gd
3.0 kB 81 lines
1# SPDX-License-Identifier: MIT 2# SPDX-FileCopyrightText: 2023 MizunagiKB <mizukb@live.jp> 3extends Node2D 4 5 6const DEFAULT_ASSET: String = "res://addons/gd_cubism/example/res/live2d/mao_pro_jp/runtime/mao_pro.model3.json"; 7 8var cubism_model: GDCubismUserModel 9var cubism_efx: GDCubismEffectCustom 10 11var first_time: bool = true 12var counter: float = 0.0 13var base_vct: Vector2 14var base_scale: Vector2 15@export var art_mesh_name: String = "ArtMesh278" 16@export var vector_index_0: int = 0 17@export var vector_index_1: int = 1 18 19 20func recalc_model_position(model: GDCubismUserModel) -> void: 21 if model.assets == "": 22 return 23 24 var canvas_info: Dictionary = model.get_canvas_info() 25 26 if canvas_info.is_empty() != true: 27 var vct_viewport_size = Vector2(get_viewport_rect().size) 28 var scale: float = vct_viewport_size.y / max(canvas_info.size_in_pixels.x, canvas_info.size_in_pixels.y) 29 model.position = vct_viewport_size / 2.0 30 model.scale = Vector2(scale, scale) 31 32 33func _ready() -> void: 34 self.cubism_efx = $GDCubismUserModel/GDCubismEffectCustom 35 # self.cubism_efx.connect("cubism_prologue", self._on_cubism_prologue) 36 # self.cubism_efx.connect("cubism_epilogue", self._on_cubism_epilogue) 37 # self.cubism_efx.connect("cubism_init", self._on_cubism_init) 38 # self.cubism_efx.connect("cubism_term", self._on_cubism_term) 39 self.cubism_efx.connect("cubism_process", self._on_cubism_process) 40 41 self.cubism_model = $GDCubismUserModel 42 if self.cubism_model.assets == "": 43 self.cubism_model.assets = DEFAULT_ASSET; 44 45 var dict_motion: Dictionary = self.cubism_model.get_motions() 46 47 for k in dict_motion.keys(): 48 self.cubism_model.start_motion_loop(k, 0, GDCubismUserModel.PRIORITY_FORCE, true, true); 49 break 50 51 52func _process(delta: float) -> void: 53 self.recalc_model_position(self.cubism_model) 54 55 56func _on_cubism_process(model: GDCubismUserModel, delta: float): 57 var ref_sprite: Sprite2D = $GDCubismUserModel/GDCubismEffectCustom/Sprite2D 58 var dict_mesh: Dictionary = model.get_meshes() 59 60 if dict_mesh.has(art_mesh_name) == false: 61 return 62 63 var ary_mesh: MeshInstance2D = dict_mesh[self.art_mesh_name] 64 var ary_surface: Array = ary_mesh.mesh.surface_get_arrays(0) 65 var mesh_vertex: PackedVector2Array = ary_surface[ArrayMesh.ARRAY_VERTEX] 66 67 if self.first_time == true: 68 var fr = ary_surface[ArrayMesh.ARRAY_VERTEX][self.vector_index_0] 69 var to = ary_surface[ArrayMesh.ARRAY_VERTEX][self.vector_index_1] 70 self.base_vct = (to - fr) 71 self.base_scale = ref_sprite.scale 72 self.first_time = false 73 74 var fr = ary_surface[ArrayMesh.ARRAY_VERTEX][self.vector_index_0] 75 var to = ary_surface[ArrayMesh.ARRAY_VERTEX][self.vector_index_1] 76 var calc_vct = (to - fr) 77 var scale: float = calc_vct.length() / base_vct.length() 78 79 ref_sprite.position = model.to_global(fr) 80 ref_sprite.rotation = base_vct.normalized().cross(calc_vct.normalized()) 81 ref_sprite.scale = base_scale * scale