-
Notifications
You must be signed in to change notification settings - Fork 309
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
キャラクター並び替えダイアログ: speakerUuidが異なる場合にstyleIdの重複を許容する #754
キャラクター並び替えダイアログ: speakerUuidが異なる場合にstyleIdの重複を許容する #754
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
なるほど・・・
ここのコードを書いたのは僕なのですが、styleIdが一意である前提で書いているという意識がありませんでした・・・。
修正ありがとうございます!!!
1箇所、undefinedableに関して少し折衷案を出してみました。
const selectedStyleIndex: number | undefined = | ||
selectedStyleIndexes.value[characterInfo.metas.speakerUuid]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
同上で、undefinedになる可能性が無いのであれば| undefined
は逆に混乱しちゃうかなと感じました。
(もしくはここはundefinedableだったりする・・・?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
こちらについては、selectedStyleIndexはundefinedになる可能性があります。
このPRの変更前の実装では、selectedStyleIndexesにはprops.characterInfosに基づく初期値が設定されていましたが、このPRでは、初期値を空objectに変更しています。
その結果、selectedStyleIndexを更新する処理であるrollStyleIndexが一度も実行されていないキャラクターは、selectedStyleIndexがundefinedであるようになっています。
styleIdの重複許容に対して余計な差分が入っていてわかりにくく申し訳ないですが、これは複数エンジン対応時を想定した挙動の修正です。
従来の実装では、props.characerInfos
が後で(初回setup呼び出し後に)書き換えられたとき、selectedStyleIndexes
の値が再計算されない(refの初期値または変更された値が維持される)ため、書き換え後に新しく含まれるようになったキャラクターについてのみ、selectedStyleIndex
がundefinedになる形でした。
setup実行時のprops.characterInfosの値によらず、挙動をそろえるためにselectedStyleIndexの初期値をundefinedに統一しています。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
なるほどです!!
より良く意図を反映できるコードを思いつきました!!
たぶんなのですが、objectにキーがない場合にundefinedになる感じですよね。
であれば、キーの有無で処理を分岐させるのが一番意図が伝わりやすいかも…?
(でもまあここのコードはここでしか使われないので、正直どちらでもそこまで問題ないかなとも思いました…!)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
大丈夫だと思うのでマージします・・・!
内容
キャラクター並び替えダイアログ(CharacterOrderDialog)について、
speakerUuid
が異なるキャラクターが重複したstyleId
を持つことを許容する実装にします。複数エンジン対応時に、スタイル付きのキャラクターを一意に識別する方法については、
engineId
とstyleId
の2つをユニークキーにする方針 #609 (comment) がありますが、簡易な修正で済むため、キャラクター並び替えUIについては、いったん
speakerUuid
とstyleId
で一意に識別するように実装してみました。また、
props.characerInfos
が初回setup呼び出し後に書き換えられたとき、書き換えによって追加されたキャラクターのサンプルボイスを再生できない現象を修正します。この現象は、
selectedStyleIndexes
が初回setup呼び出し時に計算された初期値(またはその後に変更された値)を保持するため、props.characterInfos
書き換え時の再描画でselectedStyles
が再計算されないことで発生します。selectedStyleIndexes
に初期値を与える実装を削除し、selectedStyleIndexes[speakerUuid]
がundefined
のとき、selectedStyleIndexes[speakerUuid]=0
(0番目のスタイル)とみなす実装にして修正します(?? 0
のところ)。関連 Issue
スクリーンショット・動画など
その他