Compare commits
1 Commits
joakem-vid
...
multi-inst
| Author | SHA1 | Date | |
|---|---|---|---|
| 01f35526ec |
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
[/Script/EngineSettings.GameMapsSettings]
|
[/Script/EngineSettings.GameMapsSettings]
|
||||||
GameDefaultMap=/Engine/Maps/Templates/OpenWorld
|
GameDefaultMap=/Engine/Maps/Templates/OpenWorld
|
||||||
EditorStartupMap=/Game/Levels/JoakemVideoClip/Joakem.Joakem
|
EditorStartupMap=/Game/Levels/Lidinis360/Lidinis360.Lidinis360
|
||||||
|
|
||||||
[/Script/Engine.RendererSettings]
|
[/Script/Engine.RendererSettings]
|
||||||
r.AllowStaticLighting=False
|
r.AllowStaticLighting=False
|
||||||
@@ -84,12 +84,10 @@ FontDPI=72
|
|||||||
+ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/DEV_TheStudio")
|
+ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/DEV_TheStudio")
|
||||||
+ActiveGameNameRedirects=(OldGameName="/Script/TP_Blank",NewGameName="/Script/DEV_TheStudio")
|
+ActiveGameNameRedirects=(OldGameName="/Script/TP_Blank",NewGameName="/Script/DEV_TheStudio")
|
||||||
bUseFixedFrameRate=True
|
bUseFixedFrameRate=True
|
||||||
FixedFrameRate=25.000000
|
FixedFrameRate=24.000000
|
||||||
CustomTimeStepClassName=/Game/TheStudio/Media/Sync/BlackMagicGencode.BlackMagicGencode_C
|
CustomTimeStepClassName=/Game/TheStudio/Media/Sync/BlackMagicGencode.BlackMagicGencode_C
|
||||||
TimecodeProviderClassName=/Game/TheStudio/Media/Sync/DanteAudioTimecodeProvider.DanteAudioTimecodeProvider_C
|
TimecodeProviderClassName=/Game/TheStudio/Media/Sync/DanteAudioTimecodeProvider.DanteAudioTimecodeProvider_C
|
||||||
NearClipPlane=0.100000
|
NearClipPlane=0.100000
|
||||||
GenerateDefaultTimecodeFrameRate=(Numerator=25,Denominator=1)
|
|
||||||
GenerateDefaultTimecodeFrameDelay=2.000000
|
|
||||||
|
|
||||||
[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings]
|
[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings]
|
||||||
bEnablePlugin=True
|
bEnablePlugin=True
|
||||||
@@ -115,3 +113,56 @@ DefaultFrameRate=(Numerator=24,Denominator=1)
|
|||||||
[/Script/NDIIO.NDIIOPluginSettings]
|
[/Script/NDIIO.NDIIOPluginSettings]
|
||||||
bBeginBroadcastOnPlay=True
|
bBeginBroadcastOnPlay=True
|
||||||
|
|
||||||
|
[/Script/DMXProtocol.DMXProtocolSettings]
|
||||||
|
+OutputPortConfigs=(PortName="OutputPort1",ProtocolName="Art-Net",CommunicationType=Broadcast,bAutoCompleteDeviceAddressEnabled=False,AutoCompleteDeviceAddress="192.*",DeviceAddress="10.3.3.31",DestinationAddress="None",DestinationAddresses=((DestinationAddressString="10.3.3.255")),bLoopbackToEngine=False,LocalUniverseStart=1,NumUniverses=1,ExternUniverseStart=1,bIsExternUnivereStartEditable=False,Priority=100,Delay=0.000000,DelayFrameRate=(Numerator=25,Denominator=1),PortGuid=113BD0304F0500A965A6E5A0ECC5D52F)
|
||||||
|
SendingRefreshRate=44
|
||||||
|
+FixtureCategories=Other
|
||||||
|
+FixtureCategories=Strobe
|
||||||
|
+FixtureCategories=Moving Mirror
|
||||||
|
+FixtureCategories=Moving Head
|
||||||
|
+FixtureCategories=Matrix/Pixel Bar
|
||||||
|
+FixtureCategories=Static
|
||||||
|
+Attributes=(Name="NumBeams",Keywords="")
|
||||||
|
+Attributes=(Name="Angle",Keywords="")
|
||||||
|
+Attributes=(Name="Temperature",Keywords="")
|
||||||
|
+Attributes=(Name="Launch",Keywords="")
|
||||||
|
+Attributes=(Name="Burst",Keywords="")
|
||||||
|
+Attributes=(Name="ModeStartStop",Keywords="")
|
||||||
|
+Attributes=(Name="Prism",Keywords="")
|
||||||
|
+Attributes=(Name="CIE_Y",Keywords="")
|
||||||
|
+Attributes=(Name="CIE_X",Keywords="")
|
||||||
|
+Attributes=(Name="FanMode",Keywords="")
|
||||||
|
+Attributes=(Name="HSB_Brightness",Keywords="")
|
||||||
|
+Attributes=(Name="HSB_Saturation",Keywords="")
|
||||||
|
+Attributes=(Name="HSB_Hue",Keywords="")
|
||||||
|
+Attributes=(Name="Color XF",Keywords="")
|
||||||
|
+Attributes=(Name="Tint",Keywords="")
|
||||||
|
+Attributes=(Name="CTC",Keywords="")
|
||||||
|
+Attributes=(Name="Reset",Keywords="FixtureReset, FixtureGlobalReset, GlobalReset")
|
||||||
|
+Attributes=(Name="Frost",Keywords="")
|
||||||
|
+Attributes=(Name="Effects",Keywords="Effect, Macro, Effects")
|
||||||
|
+Attributes=(Name="Shaper Rotation",Keywords="ShaperRot")
|
||||||
|
+Attributes=(Name="Color Rotation",Keywords="ColorWheelSpin")
|
||||||
|
+Attributes=(Name="Gobo Wheel Rotate",Keywords="GoboWheelSpin, GoboWheelRotate")
|
||||||
|
+Attributes=(Name="Gobo Spin",Keywords="GoboSpin")
|
||||||
|
+Attributes=(Name="Gobo",Keywords="GoboWheel, Gobo1")
|
||||||
|
+Attributes=(Name="Iris",Keywords="")
|
||||||
|
+Attributes=(Name="Focus",Keywords="")
|
||||||
|
+Attributes=(Name="Zoom",Keywords="")
|
||||||
|
+Attributes=(Name="Tilt",Keywords="")
|
||||||
|
+Attributes=(Name="Shutter",Keywords="Strobe")
|
||||||
|
+Attributes=(Name="Pan",Keywords="")
|
||||||
|
+Attributes=(Name="Dimmer",Keywords="Intensity, Strength, Brightness")
|
||||||
|
+Attributes=(Name="Amber",Keywords="ColorAdd_A")
|
||||||
|
+Attributes=(Name="White",Keywords="ColorAdd_W")
|
||||||
|
+Attributes=(Name="Yellow",Keywords="ColorAdd_Y, ColorSub_Y")
|
||||||
|
+Attributes=(Name="Magenta",Keywords="ColorAdd_M, ColorSub_M")
|
||||||
|
+Attributes=(Name="Cyan",Keywords="ColorAdd_C, ColorSub_C")
|
||||||
|
+Attributes=(Name="Blue",Keywords="ColorAdd_B")
|
||||||
|
+Attributes=(Name="Green",Keywords="ColorAdd_G")
|
||||||
|
+Attributes=(Name="Red",Keywords="ColorAdd_R")
|
||||||
|
+Attributes=(Name="Color",Keywords="ColorWheel, Color1")
|
||||||
|
bDefaultSendDMXEnabled=True
|
||||||
|
bDefaultReceiveDMXEnabled=False
|
||||||
|
bAllFixturePatchesReceiveDMXInEditor=True
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Content/Levels/Lidinis/Blueprints/DEV_Remote.uasset
Normal file
BIN
Content/Levels/Lidinis/Blueprints/DEV_Remote.uasset
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Content/NewDMXControlConsole.uasset
Normal file
BIN
Content/NewDMXControlConsole.uasset
Normal file
Binary file not shown.
BIN
Content/TheStudio/DMX/LS_DMX.uasset
Normal file
BIN
Content/TheStudio/DMX/LS_DMX.uasset
Normal file
Binary file not shown.
BIN
Content/TheStudio/DMX/NewDMXPixelMapping.uasset
Normal file
BIN
Content/TheStudio/DMX/NewDMXPixelMapping.uasset
Normal file
Binary file not shown.
BIN
Content/TheStudio/DMX/Remote_DMX.uasset
Normal file
BIN
Content/TheStudio/DMX/Remote_DMX.uasset
Normal file
Binary file not shown.
BIN
Content/TheStudio/DMX/RenderTargetForDMX.uasset
Normal file
BIN
Content/TheStudio/DMX/RenderTargetForDMX.uasset
Normal file
Binary file not shown.
BIN
Content/TheStudio/DMX/StudioDMXLibrary.uasset
Normal file
BIN
Content/TheStudio/DMX/StudioDMXLibrary.uasset
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -441,6 +441,22 @@
|
|||||||
{
|
{
|
||||||
"Name": "VPxDecoderElectra",
|
"Name": "VPxDecoderElectra",
|
||||||
"Enabled": true
|
"Enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DMXFixtures",
|
||||||
|
"Enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DMXDisplayCluster",
|
||||||
|
"Enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DMXControlConsole",
|
||||||
|
"Enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RemoteControlProtocolDMX",
|
||||||
|
"Enabled": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -1,153 +1,47 @@
|
|||||||
# plugin_prelaunch.py - With connection check
|
@echo off
|
||||||
from switchboard.devices.device_base import Device, DeviceStatus
|
REM ---------------------------------------------
|
||||||
from switchboard.devices.device_widget_base import DeviceWidget
|
REM Safe Switchboard External Command: Git Pull
|
||||||
from switchboard.switchboard_logging import LOGGER
|
REM Discards local changes, pulls latest from current branch
|
||||||
from switchboard.config import IntSetting, StringSetting
|
REM Safe to keep inside the Git repo
|
||||||
|
REM ---------------------------------------------
|
||||||
|
|
||||||
from PySide6 import QtCore
|
REM Change this to your project repo path (can be inside repo)
|
||||||
|
set REPO_PATH=D:\Projects\DEV_TheStudio_Plugin
|
||||||
|
|
||||||
|
REM Name of this batch file
|
||||||
|
set BATCH_NAME=%~nx0
|
||||||
|
|
||||||
class DevicePreLaunch(Device):
|
echo ------------------------------------------------
|
||||||
"""PreLaunch device - executes batch file on connect"""
|
echo [%COMPUTERNAME%] Starting safe Git pull on %REPO_PATH%
|
||||||
|
echo ------------------------------------------------
|
||||||
csettings = {
|
|
||||||
'batch_file': StringSetting(
|
|
||||||
attr_name="batch_file",
|
|
||||||
nice_name="Batch File Path",
|
|
||||||
value="D:\\Projects\\DEV_TheStudio_Plugin\\Source\\git_management.bat",
|
|
||||||
tool_tip="Full path to the batch file on the remote machine",
|
|
||||||
category="PreLaunch Settings",
|
|
||||||
),
|
|
||||||
'port': IntSetting(
|
|
||||||
attr_name="port",
|
|
||||||
nice_name="Listener Port",
|
|
||||||
value=2980,
|
|
||||||
tool_tip="Port of SwitchboardListener",
|
|
||||||
category="Network Settings",
|
|
||||||
),
|
|
||||||
}
|
|
||||||
|
|
||||||
def __init__(self, name, address, **kwargs):
|
|
||||||
super().__init__(name, address, **kwargs)
|
|
||||||
LOGGER.info(f"PreLaunch device '{name}' created")
|
|
||||||
|
|
||||||
def device_settings(self):
|
|
||||||
return super().device_settings()
|
|
||||||
|
|
||||||
def connect(self):
|
|
||||||
"""Called when connect button clicked"""
|
|
||||||
LOGGER.info(f">>> {self.name}: connect() called!")
|
|
||||||
|
|
||||||
# First, check if listener is reachable
|
|
||||||
LOGGER.info(f">>> {self.name}: Checking listener connection...")
|
|
||||||
|
|
||||||
# Try a simple connectivity test
|
|
||||||
try:
|
|
||||||
# Send a simple test message
|
|
||||||
test_message = {'command': 'state'}
|
|
||||||
success, response = self.unreal_client.send_message(test_message)
|
|
||||||
|
|
||||||
if not success:
|
|
||||||
LOGGER.error(f">>> {self.name}: Cannot connect to listener!")
|
|
||||||
self.device_qt_handler.signal_device_connect_failed.emit(self)
|
|
||||||
return
|
|
||||||
|
|
||||||
LOGGER.info(f">>> {self.name}: Listener responded: {response}")
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
LOGGER.error(f">>> {self.name}: Connection test failed: {e}")
|
|
||||||
self.device_qt_handler.signal_device_connect_failed.emit(self)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Set status to READY
|
|
||||||
self.status = DeviceStatus.READY
|
|
||||||
LOGGER.info(f">>> {self.name}: Status set to READY, executing batch file...")
|
|
||||||
|
|
||||||
# Execute batch file
|
|
||||||
self.execute_batch_file()
|
|
||||||
|
|
||||||
def disconnect(self):
|
|
||||||
"""Called when disconnect button clicked"""
|
|
||||||
LOGGER.info(f">>> {self.name}: disconnect() called!")
|
|
||||||
self.status = DeviceStatus.DISCONNECTED
|
|
||||||
|
|
||||||
def execute_batch_file(self):
|
|
||||||
"""Execute the batch file"""
|
|
||||||
batch_file = self.batch_file.get_value()
|
|
||||||
|
|
||||||
if not batch_file:
|
|
||||||
LOGGER.warning(f" {self.name}: No batch file configured")
|
|
||||||
return False
|
|
||||||
|
|
||||||
LOGGER.info(f">>> {self.name}: ========== EXECUTING ==========")
|
|
||||||
LOGGER.info(f">>> {self.name}: File: {batch_file}")
|
|
||||||
LOGGER.info(f">>> {self.name}: Address: {self.address}")
|
|
||||||
LOGGER.info(f">>> {self.name}: Port: {self.port.get_value()}")
|
|
||||||
|
|
||||||
try:
|
|
||||||
message = {
|
|
||||||
'command': 'start',
|
|
||||||
'bTryKill': False,
|
|
||||||
'bUpdateWorkingDir': False,
|
|
||||||
'caller': self.name,
|
|
||||||
'name': 'cmd.exe',
|
|
||||||
'args': f'/c "{batch_file}"',
|
|
||||||
'working_dir': '',
|
|
||||||
}
|
|
||||||
|
|
||||||
LOGGER.info(f">>> {self.name}: Sending message...")
|
|
||||||
success, msg = self.unreal_client.send_message(message)
|
|
||||||
|
|
||||||
if success:
|
|
||||||
LOGGER.info(f">>> {self.name}: SUCCESS!")
|
|
||||||
LOGGER.info(f">>> Response: {msg}")
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
LOGGER.error(f">>> L {self.name}: Send failed!")
|
|
||||||
return False
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
LOGGER.error(f">>> L {self.name}: ERROR: {e}")
|
|
||||||
import traceback
|
|
||||||
LOGGER.error(traceback.format_exc())
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
REM Navigate to the repo
|
||||||
|
cd /d "%REPO_PATH%"
|
||||||
|
|
||||||
class DeviceWidgetPreLaunch(DeviceWidget):
|
REM Ensure Git is installed
|
||||||
"""Widget for PreLaunch device"""
|
where git >nul 2>&1
|
||||||
|
IF %ERRORLEVEL% NEQ 0 (
|
||||||
def __init__(self, name, device_hash, address, icons, parent=None):
|
echo ERROR: Git is not installed or not in PATH
|
||||||
super().__init__(name, device_hash, address, icons, parent=parent)
|
exit /b 1
|
||||||
LOGGER.info(f"PreLaunch widget created for {name}")
|
)
|
||||||
|
|
||||||
def _add_control_buttons(self):
|
REM Get current branch
|
||||||
"""Add connect button"""
|
for /f "tokens=*" %%i in ('git rev-parse --abbrev-ref HEAD') do set CURRENT_BRANCH=%%i
|
||||||
super()._add_control_buttons()
|
echo Current branch: %CURRENT_BRANCH%
|
||||||
|
|
||||||
CONTROL_BUTTON_ICON_SIZE = QtCore.QSize(21, 21)
|
REM Discard any local changes (staged and unstaged)
|
||||||
|
git reset --hard
|
||||||
self.connect_button = self.add_control_button(
|
|
||||||
icon_size=CONTROL_BUTTON_ICON_SIZE,
|
REM Clean untracked files and directories, excluding this batch file
|
||||||
checkable=True,
|
git clean -fdX -e "%BATCH_NAME%"
|
||||||
tool_tip='Connect and execute batch file',
|
|
||||||
hover_focus=False,
|
REM Pull latest changes from origin for current branch
|
||||||
name='connect')
|
git pull origin %CURRENT_BRANCH%
|
||||||
|
|
||||||
self.connect_button.clicked.connect(self.connect_button_clicked)
|
REM Show status
|
||||||
|
git status
|
||||||
def connect_button_clicked(self):
|
|
||||||
"""Handle connect button click"""
|
echo ------------------------------------------------
|
||||||
if self.connect_button.isChecked():
|
echo [%COMPUTERNAME%] Git pull complete
|
||||||
self._connect()
|
echo ------------------------------------------------
|
||||||
else:
|
pause
|
||||||
self._disconnect()
|
|
||||||
|
|
||||||
def _connect(self):
|
|
||||||
"""Connect"""
|
|
||||||
self.connect_button.setChecked(True)
|
|
||||||
self.signal_device_widget_connect.emit(self)
|
|
||||||
|
|
||||||
def _disconnect(self):
|
|
||||||
"""Disconnect"""
|
|
||||||
self.connect_button.setChecked(False)
|
|
||||||
self.signal_device_widget_disconnect.emit(self)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user