This repository has no description
2.8 kB
90 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
11enum E_PARAM_MODE {
12 PROCESS,
13 SIGNAL
14}
15
16var param_valid: bool = false
17var param_mode: E_PARAM_MODE = E_PARAM_MODE.PROCESS
18var l_eye: GDCubismParameter
19var r_eye: GDCubismParameter
20
21
22func recalc_model_position(model: GDCubismUserModel):
23 if model.assets == "":
24 return
25
26 var canvas_info: Dictionary = model.get_canvas_info()
27
28 if canvas_info.is_empty() != true:
29 var vct_viewport_size = Vector2(get_viewport_rect().size)
30 var scale: float = vct_viewport_size.y / max(canvas_info.size_in_pixels.x, canvas_info.size_in_pixels.y)
31 model.position = vct_viewport_size / 2.0
32 model.scale = Vector2(scale, scale)
33
34
35func _ready():
36 self.cubism_efx = $GDCubismUserModel/GDCubismEffectCustom
37 self.cubism_efx.connect("cubism_prologue", self._on_cubism_prologue)
38 self.cubism_efx.connect("cubism_epilogue", self._on_cubism_epilogue)
39 self.cubism_efx.connect("cubism_init", self._on_cubism_init)
40 self.cubism_efx.connect("cubism_term", self._on_cubism_term)
41 self.cubism_efx.connect("cubism_process", self._on_cubism_process)
42
43 self.cubism_model = $GDCubismUserModel
44 if self.cubism_model.assets == "":
45 self.cubism_model.assets = DEFAULT_ASSET;
46
47
48func _process(delta):
49 recalc_model_position($GDCubismUserModel)
50
51 if param_mode == E_PARAM_MODE.PROCESS:
52 var model: GDCubismUserModel = $GDCubismUserModel
53
54 for _o in self.cubism_model.get_parameters():
55 var o: GDCubismParameter = _o
56 if o.id == "ParamEyeLOpen":
57 o.value = 0.0
58 if o.id == "ParamEyeROpen":
59 o.value = 0.0
60
61
62func _on_cubism_init(model: GDCubismUserModel):
63 if param_mode == E_PARAM_MODE.SIGNAL:
64 for _o in model.get_parameters():
65 var o: GDCubismParameter = _o
66 if o.id == "ParamEyeLOpen":
67 l_eye = o
68 if o.id == "ParamEyeROpen":
69 r_eye = o
70 param_valid = true
71
72
73func _on_cubism_term(model: GDCubismUserModel):
74 if param_mode == E_PARAM_MODE.SIGNAL:
75 param_valid = false
76
77
78func _on_cubism_prologue(model: GDCubismUserModel, delta: float):
79 pass # Replace with function body.
80
81
82func _on_cubism_process(model: GDCubismUserModel, delta: float):
83 if param_mode == E_PARAM_MODE.SIGNAL:
84 if param_valid == true:
85 l_eye.value = 0.0
86 r_eye.value = 0.0
87
88
89func _on_cubism_epilogue(model: GDCubismUserModel, delta: float):
90 pass # Replace with function body.