VRMONLINE-NX 編成でスプライト

βテストにご参加いただきまことにありがとうございます。

編成部品でスプライトを使用するサンプルスクリプトです。

485系クハの車両テクスチャーから、ヘッドマークと方向幕をスプライトで表示しています。
(車両テクスチャーは、部品の組み込みテクスチャーを保存して、編成リソースに登録してください。)

実装については、下記コードのコメントをご参照ください。

ヘッドマーク
(0,0)から84*72 pixel

方向幕
(0,78)から128*44 pixel

#OBJID=6
import vrmapi

#global変数でスプライトオブジェクトを格納する変数を宣言
global tr_sprite

def vrmevent_6(obj,ev,param):
    #global変数を使うことを指定
    global tr_sprite
    if ev == 'init':
        # initイベントでスプライトオブジェクトを生成
        # スプライトオブジェクトの生成は、LAYOUTの関数
        tr_sprite = vrmapi.LAYOUT().CreateSprite()
        # 編成のリソースからテクスチャーを読み込む
        # サンプルのテクスチャーは、リソース番号1
        tr_sprite.LoadTrainTexture(obj.GetID(), 1)
        # フレームイベントを設定
        obj.SetEventFrame()
    elif ev == 'broadcast':
        dummy = 1
    elif ev == 'timer':
        dummy = 1
    elif ev == 'time':
        dummy = 1
    elif ev == 'after':
        dummy = 1
    elif ev == 'frame':
        # スプライトは毎フレーム、設定する
        # UV, POSを指定して、SetSpriteで登録
        # 1枚めのスプライトを設定(ヘッドマーク)
        tr_sprite.SetUV(0,0,84,72)
        tr_sprite.SetPos(0,100,84*2,100,0,100+72*2,84*2,100+72*2)
        tr_sprite.SetSprite()
        # 2枚めのスプライトを設定(方向幕)
        tr_sprite.SetUV(0,78,128,78+44)
        tr_sprite.SetPos(0,300,128,300,0,300+44,128,300+44)
        tr_sprite.SetSprite()
    elif ev == 'couple':
        dummy = 1
# 以下省略
編成でスプライト

VRMONLINE-NX ウィンドウを二枚

βテストにご参加いただきまことにありがとうございます。

GUIウィンドウを2枚表示するスクリプトサンプルです。

imguiは、Begin()-End()で一枚のウィンドウを表示します。
複数のウィンドウを表示する場合は、Begin-Endを必要な個数並べます。

ウィンドウの表示位置は、SetNextWindowPos()で指定します。
Begin()より前に指定してください。

ウィンドウの大きさは、標準のBegin()で表示されるウィンドウが、表示サイズを自動で記憶するため、SetNextWindowSizeConstraints()で条件を縛ってください。
SetNextWindowSize()でサイズを指定、SetNextWindowSizeConstraints()でリサイズ可能な範囲を指定します。

標準以外のBegin()については、今後の拡張をお待ち下さい。

#LAYOUT
import vrmapi


def vrmevent(obj,ev,param):
    if ev == 'init':
        obj.SetEventFrame()
    elif ev == 'broadcast':
        dummy = 1
    elif ev == 'timer':
        dummy = 1
    elif ev == 'time':
        dummy = 1
    elif ev == 'after':
        dummy = 1
    elif ev == 'frame':
        vrmapi.ImGui().SetNextWindowPos(0,60)
        vrmapi.ImGui().SetNextWindowSize(320,200)
        vrmapi.ImGui().SetNextWindowSizeConstraints(320,200,480,240)
        vrmapi.ImGui().Begin("win10","Sample Window")

        cpos = obj.SYSTEM().GetGlobalCameraPos()
        vrmapi.ImGui().Text("SYSカメラ座標 =>"+str(cpos[0])+"  "+str(cpos[2]))

        if vrmapi.ImGui().Button("b1", "システムカメラ切り替えボタン"):
            if obj.IsViewGlobal():
                obj.SetViewGlobal(False)
            else:
                obj.SetViewGlobal(True)

        vrmapi.ImGui().End()

        vrmapi.ImGui().SetNextWindowPos(0,260)
        vrmapi.ImGui().SetNextWindowSize(480,120)
        vrmapi.ImGui().SetNextWindowSizeConstraints(480,120,480,120)
        vrmapi.ImGui().Begin("win11","2nd Window")
        vrmapi.ImGui().Text("第二ウィンドウ")
        vrmapi.ImGui().End()
    elif ev == 'keydown':
        dummy = 1
ウィンドウ表示サンプル

VRMONLINE-NX スクリプト仕様変更しました

βテストにご参加いただきまことにありがとうございます。

ビルド55を公開しました。

GetPosition()などのスクリプト関数の仕様を変更しました。仕様を変更した関数について、βテストご案内ページに一覧を掲載しています。
仕様変更にあわせて、スクリプトの書き換えをお願いします。

各関数の詳細は、スクリプトマニュアルをご参照ください。

GetPosition()は、データを関数の戻り値で返します。データは、list型です。

このバージョンでは、カメラモードについての関数を追加しています。SetViewGlobal()で、システムカメラの切り替えができます。

下記サンプルは、編成がID=5、地上カメラがID=8で設置したレイアウトのスクリプトです。

ボタンで、システムカメラの切り替え、表示対象を編成、地上カメラと切り替えることができます。

#LAYOUT
import vrmapi


def vrmevent(obj,ev,param):
    if ev == 'init':
        obj.SetEventFrame()
    elif ev == 'broadcast':
        dummy = 1
    elif ev == 'timer':
        dummy = 1
    elif ev == 'time':
        dummy = 1
    elif ev == 'after':
        dummy = 1
    elif ev == 'frame':
        vrmapi.ImGui().Begin("win1","Sample Window")
        vrmapi.ImGui().Separator()
        vrmapi.ImGui().Text("ボタンテスト")
        
        train = obj.GetTrain(5)
        tpos = train.GetPosition()
        vrmapi.ImGui().Text("編成座標 =>"+str(tpos[0])+"  "+str(tpos[2]))
        
        cpos = obj.SYSTEM().GetGlobalCameraPos()
        vrmapi.ImGui().Text("SYSカメラ座標 =>"+str(cpos[0])+"  "+str(cpos[2]))

        if vrmapi.ImGui().Button("b1", "システムカメラ切り替えボタン"):
            if obj.IsViewGlobal():
                obj.SetViewGlobal(False)
            else:
                obj.SetViewGlobal(True)

        if vrmapi.ImGui().Button("b3", "地上カメラ"):
                obj.SetView(8)
        if vrmapi.ImGui().Button("b4", "編成カメラ"):
                obj.SetView(5)

        if obj.IsViewGlobal():
            vrmapi.ImGui().Text("システムカメラ")


        vrmapi.ImGui().End()
    elif ev == 'keydown':
        dummy = 1
システムカメラに切り替え
地上カメラに切り替え
編成カメラに切り替え