ローレベルな通信コマンドからの脱却

伺かはSSTP通信を使ってメッセージを表示することができます。
それを利用して、バックグラウンドからのメッセージとデバッグメッセージとか全部押し付けているのがマイPCなんですが、コードで書くとこうなっています。

#########################################################################################
# 1行送信
#########################################################################################
def send_one_msg(msg):
    if len(msg) == 0:
        return
    
    LogControl.print_doing_info(msg)


    #ソケットの生成
    dst_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	#接続
    dst_socket.connect((target_IP, SSTP_PORT))
    send_msg = "SEND SSTP/1.1\r\nSender: SSTPTest\r\nScript: \\0"
    send_msg = send_msg + msg
    send_msg =  send_msg + '\\e\r\nCharset: Shift_JIS\r\n\r\n'
    dst_socket.send(send_msg.encode('shift_jis'))
    dst_socket.close()

で、呼び出す側はこうですね。

    msg =  "\\0\\f[height,14]\\s[0]明日の予測ですが・・・\\1\\f[height,14]\\s[10]えーと、明日も特に波乱はなさそうです。\\n"
    send_one_msg(msg)

メンドクセェ

要件を考える

伺かのキャラクターの台詞は、シンプルにすると次の4要素で表せます。
もっと複雑な台詞は後にします。

  • キャラクターの番号(うちの環境だと0か1

  • キャラクターのサーフェスID(キャラクターの番号と合わせないと大変だ

  • フォントサイズ

  • 台詞の文字列

台詞を組み合わせて作る「会話」は次のパターンですね。

  • キャラクター1、または2が喋る

  • キャラクター1が喋り、キャラクター2が喋る

  • キャラクター1が喋り、キャラクターキャラクター2が喋り、人間がセリフを読むだけの時間待って次の台詞を喋る

外部仕様を考える

将来、メッセージの表示先を伺か以外にすることも考えると、関数的には次のようになります。

メッセージをキューにためる関数

引数1:キャラクターの番号
引数2:表情の番号(キャラクターに合わせたサーフェスIDに関数内で変換する)
引数3:フォントサイズ
引数4:セリフの文字列

キューにたまったメッセージをSSTP通信で伺かに投げる関数

機能1:キャラクター1と2の台詞を送信したらしばらく待つ
機能2:キャラクター1の台詞の後にキャラクター1の台詞が来たらしばらく待つ
機能3:「キューにたまったメッセージをSSTP通信で伺かに投げる関数」を実行した直後にもう一度呼ばれたらしばらく待ってから台詞を送信する

実装イメージ

    que_stock(0, 0, 14,'明日の予測ですが・・・')
    que_stock(1,10, 14,'えーと、明日も特に波乱はなさそうです。')
    que_flash()

うん、見やすくなった。
えーと、、改行コード¥¥nはどうしようか
SSTP通信でセリフの枠を指定する方法あったっけ……

いいなと思ったら応援しよう!