diff --git a/Content/Configurations/aixcave.cfg b/Content/Configurations/aixcave.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..4b6b49d60c45ffc5848331061a95844073fb0570
--- /dev/null
+++ b/Content/Configurations/aixcave.cfg
@@ -0,0 +1,311 @@
+#####################################################################
+# nDisplay config file
+#
+# This file demonstrates how to configure for the AixCAVE.
+#####################################################################
+
+#####################################################################
+# List of cluster nodes
+#********************************************************************
+# Cluster node is an application instance. It's allowed to use
+# multiple instances on the same PC. Sometimes its necessary.
+#
+# Properties:
+# id - unique node name
+# addr - network address (IPv4 only)
+# screen - projection screen ID to use
+# viewport - viewport ID to use
+# master - specifies if current node is master; default is 'false'
+# port_cs - Cluster Synchronization port (required on master node only)
+# port_ss - Swap Synchronization port (required on master node only)
+#
+# Optional properties:
+# sound - turns on/off sound for this application instance; default is 'false'
+#********************************************************************
+[cluster_node] id=node_main addr=10.0.1.29 screen=screen_main viewport=vp_1000 port_cs=41001 port_ss=41002 master=true sound=true
+
+[cluster_node] id=node_front_upper_left_eye_left addr=10.0.1.1 screen=screen_front_upper_left viewport=vp_1200
+[cluster_node] id=node_front_upper_left_eye_right addr=10.0.1.1 screen=screen_front_upper_left viewport=vp_1200
+[cluster_node] id=node_front_upper_right_eye_left addr=10.0.1.2 screen=screen_front_upper_right viewport=vp_1200
+[cluster_node] id=node_front_upper_right_eye_right addr=10.0.1.2 screen=screen_front_upper_right viewport=vp_1200
+[cluster_node] id=node_front_lower_left_eye_left addr=10.0.1.3 screen=screen_front_lower_left viewport=vp_1200
+[cluster_node] id=node_front_lower_left_eye_right addr=10.0.1.3 screen=screen_front_lower_left viewport=vp_1200
+[cluster_node] id=node_front_lower_right_eye_left addr=10.0.1.4 screen=screen_front_lower_left viewport=vp_1200
+[cluster_node] id=node_front_lower_right_eye_right addr=10.0.1.4 screen=screen_front_lower_left viewport=vp_1200
+
+[cluster_node] id=node_left_upper_left_eye_left addr=10.0.1.5 screen=screen_left_upper_left viewport=vp_1200
+[cluster_node] id=node_left_upper_left_eye_right addr=10.0.1.5 screen=screen_left_upper_left viewport=vp_1200
+[cluster_node] id=node_left_upper_right_eye_left addr=10.0.1.6 screen=screen_left_upper_right viewport=vp_1200
+[cluster_node] id=node_left_upper_right_eye_right addr=10.0.1.6 screen=screen_left_upper_right viewport=vp_1200
+[cluster_node] id=node_left_lower_left_eye_left addr=10.0.1.7 screen=screen_left_lower_left viewport=vp_1200
+[cluster_node] id=node_left_lower_left_eye_right addr=10.0.1.7 screen=screen_left_lower_left viewport=vp_1200
+[cluster_node] id=node_left_lower_right_eye_left addr=10.0.1.8 screen=screen_left_lower_right viewport=vp_1200
+[cluster_node] id=node_left_lower_right_eye_right addr=10.0.1.8 screen=screen_left_lower_right viewport=vp_1200
+
+[cluster_node] id=node_right_upper_left_eye_left addr=10.0.1.9 screen=screen_right_upper_left viewport=vp_1200
+[cluster_node] id=node_right_upper_left_eye_right addr=10.0.1.9 screen=screen_right_upper_left viewport=vp_1200
+[cluster_node] id=node_right_upper_right_eye_left addr=10.0.1.10 screen=screen_right_upper_right viewport=vp_1200
+[cluster_node] id=node_right_upper_right_eye_right addr=10.0.1.10 screen=screen_right_upper_right viewport=vp_1200
+[cluster_node] id=node_right_lower_left_eye_left addr=10.0.1.11 screen=screen_right_lower_left viewport=vp_1200
+[cluster_node] id=node_right_lower_left_eye_right addr=10.0.1.11 screen=screen_right_lower_left viewport=vp_1200
+[cluster_node] id=node_right_lower_right_eye_left addr=10.0.1.12 screen=screen_right_lower_right viewport=vp_1200
+[cluster_node] id=node_right_lower_right_eye_right addr=10.0.1.12 screen=screen_right_lower_right viewport=vp_1200
+
+[cluster_node] id=node_back_upper_left_eye_left addr=10.0.1.13 screen=screen_back_upper_left viewport=vp_1200
+[cluster_node] id=node_back_upper_left_eye_right addr=10.0.1.13 screen=screen_back_upper_left viewport=vp_1200
+[cluster_node] id=node_back_upper_right_eye_left addr=10.0.1.14 screen=screen_back_upper_right viewport=vp_1200
+[cluster_node] id=node_back_upper_right_eye_right addr=10.0.1.14 screen=screen_back_upper_right viewport=vp_1200
+[cluster_node] id=node_back_lower_left_eye_left addr=10.0.1.15 screen=screen_back_lower_left viewport=vp_1200
+[cluster_node] id=node_back_lower_left_eye_right addr=10.0.1.15 screen=screen_back_lower_left viewport=vp_1200
+[cluster_node] id=node_back_lower_right_eye_left addr=10.0.1.16 screen=screen_back_lower_right viewport=vp_1200
+[cluster_node] id=node_back_lower_right_eye_right addr=10.0.1.16 screen=screen_back_lower_right viewport=vp_1200
+
+[cluster_node] id=node_floor_front_upper_left_eye_left addr=10.0.1.17 screen=screen_floor_front_upper_left viewport=vp_1200
+[cluster_node] id=node_floor_front_upper_left_eye_right addr=10.0.1.17 screen=screen_floor_front_upper_left viewport=vp_1200
+[cluster_node] id=node_floor_front_upper_right_eye_left addr=10.0.1.19 screen=screen_floor_front_upper_right viewport=vp_1200
+[cluster_node] id=node_floor_front_upper_right_eye_right addr=10.0.1.19 screen=screen_floor_front_upper_right viewport=vp_1200
+[cluster_node] id=node_floor_front_lower_left_eye_left addr=10.0.1.18 screen=screen_floor_front_lower_left viewport=vp_1200
+[cluster_node] id=node_floor_front_lower_left_eye_right addr=10.0.1.18 screen=screen_floor_front_lower_left viewport=vp_1200
+[cluster_node] id=node_floor_front_lower_right_eye_left addr=10.0.1.20 screen=screen_floor_front_lower_right viewport=vp_1200
+[cluster_node] id=node_floor_front_lower_right_eye_right addr=10.0.1.20 screen=screen_floor_front_lower_right viewport=vp_1200
+
+[cluster_node] id=node_floor_back_upper_left_eye_left addr=10.0.1.21 screen=screen_floor_back_upper_left viewport=vp_1200
+[cluster_node] id=node_floor_back_upper_left_eye_right addr=10.0.1.21 screen=screen_floor_back_upper_left viewport=vp_1200
+[cluster_node] id=node_floor_back_upper_right_eye_left addr=10.0.1.23 screen=screen_floor_back_upper_right viewport=vp_1200
+[cluster_node] id=node_floor_back_upper_right_eye_right addr=10.0.1.23 screen=screen_floor_back_upper_right viewport=vp_1200
+[cluster_node] id=node_floor_back_lower_left_eye_left addr=10.0.1.22 screen=screen_floor_back_lower_left viewport=vp_1200
+[cluster_node] id=node_floor_back_lower_left_eye_right addr=10.0.1.22 screen=screen_floor_back_lower_left viewport=vp_1200
+[cluster_node] id=node_floor_back_lower_right_eye_left addr=10.0.1.24 screen=screen_floor_back_lower_right viewport=vp_1200
+[cluster_node] id=node_floor_back_lower_right_eye_right addr=10.0.1.24 screen=screen_floor_back_lower_right viewport=vp_1200
+#####################################################################
+
+
+#####################################################################
+# List of projection screens
+#********************************************************************
+# Projection screen is a rectangle which determines the camera frustum.
+# Usually the projection screen has the same dimensions as an output
+# display but in some cases it may differ.
+#
+# Properties:
+# id - unique projection screen name
+# loc - relative location to the parent component. Location is relative
+# to the VR root if no parent specified. The pivot is a screen's
+# center and the values are in meters.
+# rot - relative rotation to the parent component. Rotation is relative
+# to the VR root if no parent specified. The pivot is a screen's
+# center and the values are in degrees.
+# size - width (X) and height (Y) of the screen. Values are in meters.
+#
+# Optional properties:
+# parent - ID of parent component in VR hierarchy; default is VR root.
+# tracker_id - ID of tracking device; no tracking by default.
+# tracker_ch - ID of tracking device's channel; no tracking by default.
+#********************************************************************
+[screen] id=screen_main loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=0.433333,Y=0.270833" parent=display_main
+[screen] id=screen_front_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_left
+[screen] id=screen_front_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_right
+[screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left
+[screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left
+[screen] id=screen_left_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_left
+[screen] id=screen_left_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_right
+[screen] id=screen_left_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_lower_left
+[screen] id=screen_left_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_lower_right
+[screen] id=screen_right_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_upper_left
+[screen] id=screen_right_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_upper_right
+[screen] id=screen_right_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_lower_left
+[screen] id=screen_right_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_lower_right
+[screen] id=screen_back_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_upper_left
+[screen] id=screen_back_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_upper_right
+[screen] id=screen_back_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_lower_left
+[screen] id=screen_back_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_lower_right
+[screen] id=screen_floor_front_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_upper_left
+[screen] id=screen_floor_front_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_upper_right
+[screen] id=screen_floor_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_lower_left
+[screen] id=screen_floor_front_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_lower_right
+[screen] id=screen_floor_back_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_upper_left
+[screen] id=screen_floor_back_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_upper_right
+[screen] id=screen_floor_back_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_lower_left
+[screen] id=screen_floor_back_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_lower_right
+###############################################################
+
+
+#####################################################################
+# List of viewport configurations
+#********************************************************************
+# Viewport is a rectangle area of game window where rendered frame is
+# mapped. Usually the viewport starts at 0:0 and has the same size as
+# its parent window but in some cases these settings may differ.
+#
+# Properties:
+# id - unique viewport name
+# x - X coordinate of viewport's top left corner
+# y - Y coordinate of viewport's top left corner
+# width - width of viewport in pixels
+# height - height of viewport in pixels
+#
+# Optional properties:
+# flip_h - flip image horizontally; default is 'false'
+# flip_v - flip image vertically; default is 'false'
+#********************************************************************
+[viewport] id=vp_1000 x=0 y=0 width=1600 height=1000 flip_h=False flip_v=False
+[viewport] id=vp_1200 x=0 y=0 width=1920 height=1200 flip_h=False flip_v=False
+#####################################################################
+
+
+#####################################################################
+# List of cameras
+#********************************************************************
+# Camera is a predefined point frome where the stereoscopic view built.
+# It's possible to define multiple cameras and swith the active one
+# during runtime. You're free to attach any camera to a tracking device
+# for head tracking. Consider a camera as a viewer's head.
+#
+# Properties:
+# id - unique camera name
+# loc - relative location to the parent component. Location is relative
+# to the VR root if no parent specified.
+# rot - relative rotation to the parent component. Rotation is relative
+# to the VR root if no parent specified.
+#
+# Optional properties:
+# parent - ID of parent component in VR hierarchy; default is VR root.
+# tracker_id - ID of tracking device; no tracking by default.
+# tracker_ch - ID of tracking device's channel; no tracking by default.
+#********************************************************************
+[camera] id=camera_dynamic loc="X=0,Y=0,Z=0" parent=shutter_glasses
+#####################################################################
+
+
+#####################################################################
+# List of scene nodes nodes (hierarchy transforms)
+#********************************************************************
+# Scene node is an actor component which is basically a transformation
+# matrix. Scene nodes can be helpful to build a component hierarchy, to
+# define some special places (like a socket) within VR space.
+#
+# It might be difficult to understand what VR space origin is. Consider
+# it as a point in space where VR space starts. Any componenent listed
+# in this config file is relative to its parent or this origin.
+#
+# Properties:
+# id - unique scene node name
+# loc - relative location to the parent component. Location is relative
+# to the VR root if no parent specified.
+# rot - relative rotation to the parent component. Rotation is relative
+# to the VR root if no parent specified.
+#
+# Optional properties:
+# parent - ID of parent component in VR hierarchy; default is VR root.
+# tracker_id - ID of tracking device; no tracking by default.
+# tracker_ch - ID of tracking device's channel; no tracking by default.
+#********************************************************************
+[scene_node] id=cave_origin loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0"
+[scene_node] id=cave_center loc="X=0,Y=0,Z=1.65" rot="P=0,Y=0,R=0" parent=cave_origin
+
+[scene_node] id=flystick loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=dtrack_tracker tracker_ch=7
+[scene_node] id=shutter_glasses loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=dtrack_tracker tracker_ch=0
+[scene_node] id=display_main loc="X=0.40.0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=shutter_glasses
+
+[scene_node] id=angle_left loc="X=0,Y=0,Z=0" rot="P=0,Y=-90,R=0" parent=cave_center
+[scene_node] id=angle_right loc="X=0,Y=0,Z=0" rot="P=0,Y=90,R=0" parent=cave_center
+[scene_node] id=angle_back loc="X=0,Y=0,Z=0" rot="P=0,Y=180,R=0" parent=cave_center
+[scene_node] id=angle_floor loc="X=0,Y=0,Z=0" rot="P=-90,Y=0,R=0" parent=cave_origin
+
+[scene_node] id=display_front_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center
+[scene_node] id=display_front_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center
+[scene_node] id=display_front_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center
+[scene_node] id=display_front_lower_left loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center
+
+[scene_node] id=display_left_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left
+[scene_node] id=display_left_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left
+[scene_node] id=display_left_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_left
+[scene_node] id=display_left_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_left
+
+[scene_node] id=display_right_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_right
+[scene_node] id=display_right_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_right
+[scene_node] id=display_right_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_right
+[scene_node] id=display_right_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_right
+
+[scene_node] id=display_back_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_back
+[scene_node] id=display_back_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_back
+[scene_node] id=display_back_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_back
+[scene_node] id=display_back_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_back
+
+[scene_node] id=display_floor_front_upper_left loc="X=0,Y=-1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_front_upper_right loc="X=0,Y=1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_front_lower_left loc="X=0,Y=-1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_front_lower_right loc="X=0,Y=1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor
+
+[scene_node] id=display_floor_back_upper_left loc="X=0,Y=-1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_back_upper_right loc="X=0,Y=1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_back_lower_left loc="X=0,Y=-1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_back_lower_right loc="X=0,Y=1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor
+#####################################################################
+
+
+#####################################################################
+# List of input devices
+#********************************************************************
+# Input devices are VRPN devices. The nDisplay supports the following
+# types: analog, button and tracker. Many of physical input devices
+# can be connected via VRPN.
+#
+# Properties:
+# id - nique device name
+# type - VRPN type (analog, button or tracker).
+# addr - address of a VRPN server which handles this particular device.
+# The value must match the following format: DEVICENAME@SERVER_ADDRESS
+# where DEVICENAME is a VRPN name of this device and SERVER_ADDRESS
+# is IPv4 address of VRPN server.
+# loc - relative location to the parent component. Location is relative
+# to the VR root if no parent specified.
+# rot - relative rotation to the parent component. Rotation is relative
+# to the VR root if no parent specified.
+#
+# front (tracker only) - mapping of a tracking system axis to X axis of VR origin
+# right (tracker only) - mapping of a tracking system axis to Y axis of VR origin
+# up (tracker only) - mapping of a tracking system axis to Z axis of VR origin
+# * The following values are allowed for axes mapping: X, -X, Y, -Y, Z, -Z
+#
+# Optional properties:
+# remap - VRPN device channel remapping. Value format is: "from0:to0,from1:to1,...,fromN:toN".
+# For example: remap="0:3,1:4,5:2"
+#********************************************************************
+[input] id=dtrack_axis type=analog addr=DTrack2@10.0.1.29
+[input] id=dtrack_buttons type=buttons addr=DTrack2@10.0.1.29
+[input] id=dtrack_tracker type=tracker addr=DTrack2@10.0.1.29 loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" right=X up=Y front=-Z
+#####################################################################
+
+
+#####################################################################
+# Stereoscopic settings
+#********************************************************************
+# Properties:
+# eye_swap - swap left and right eyes:
+# false - L|R
+# true - R|L
+# eye_dist - interoccular distance in meters
+[stereo] eye_swap=True eye_dist=0.064
+#####################################################################
+
+
+#####################################################################
+# General settings
+#********************************************************************
+# Properties:
+# swap_sync_policy - swap synchronization policy
+# - 0 - no synchronization
+# - 1 - software swap synchronization
+# - 2 - NV swap lock (Nvidia cards only, OpenGL only)
+[general] swap_sync_policy=2
+#####################################################################
+
+
+#####################################################################
+# Custom arguments
+#********************************************************************
+# Any custom arguments available in runtime can be specified here.
+# Format: ARG_NAME=ARG_VAL
+[custom]
+#####################################################################
diff --git a/Content/Configurations/aixcave_infiniband.cfg b/Content/Configurations/aixcave_infiniband.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..f2cb3edd0dfdb692988dfa5900bf5b6fdbcde265
--- /dev/null
+++ b/Content/Configurations/aixcave_infiniband.cfg
@@ -0,0 +1,311 @@
+#####################################################################
+# nDisplay config file
+#
+# This file demonstrates how to configure for the AixCAVE.
+#####################################################################
+
+#####################################################################
+# List of cluster nodes
+#********************************************************************
+# Cluster node is an application instance. It's allowed to use
+# multiple instances on the same PC. Sometimes its necessary.
+#
+# Properties:
+# id - unique node name
+# addr - network address (IPv4 only)
+# screen - projection screen ID to use
+# viewport - viewport ID to use
+# master - specifies if current node is master; default is 'false'
+# port_cs - Cluster Synchronization port (required on master node only)
+# port_ss - Swap Synchronization port (required on master node only)
+#
+# Optional properties:
+# sound - turns on/off sound for this application instance; default is 'false'
+#********************************************************************
+[cluster_node] id=node_main addr=134.61.47.29 screen=screen_main viewport=vp_1000 port_cs=41001 port_ss=41002 master=true sound=true
+
+[cluster_node] id=node_front_upper_left_eye_left addr=134.61.47.132 screen=screen_front_upper_left viewport=vp_1200
+[cluster_node] id=node_front_upper_left_eye_right addr=134.61.47.132 screen=screen_front_upper_left viewport=vp_1200
+[cluster_node] id=node_front_upper_right_eye_left addr=134.61.47.133 screen=screen_front_upper_right viewport=vp_1200
+[cluster_node] id=node_front_upper_right_eye_right addr=134.61.47.133 screen=screen_front_upper_right viewport=vp_1200
+[cluster_node] id=node_front_lower_left_eye_left addr=134.61.47.134 screen=screen_front_lower_left viewport=vp_1200
+[cluster_node] id=node_front_lower_left_eye_right addr=134.61.47.134 screen=screen_front_lower_left viewport=vp_1200
+[cluster_node] id=node_front_lower_right_eye_left addr=134.61.47.135 screen=screen_front_lower_left viewport=vp_1200
+[cluster_node] id=node_front_lower_right_eye_right addr=134.61.47.135 screen=screen_front_lower_left viewport=vp_1200
+
+[cluster_node] id=node_left_upper_left_eye_left addr=134.61.47.136 screen=screen_left_upper_left viewport=vp_1200
+[cluster_node] id=node_left_upper_left_eye_right addr=134.61.47.136 screen=screen_left_upper_left viewport=vp_1200
+[cluster_node] id=node_left_upper_right_eye_left addr=134.61.47.137 screen=screen_left_upper_right viewport=vp_1200
+[cluster_node] id=node_left_upper_right_eye_right addr=134.61.47.137 screen=screen_left_upper_right viewport=vp_1200
+[cluster_node] id=node_left_lower_left_eye_left addr=134.61.47.138 screen=screen_left_lower_left viewport=vp_1200
+[cluster_node] id=node_left_lower_left_eye_right addr=134.61.47.138 screen=screen_left_lower_left viewport=vp_1200
+[cluster_node] id=node_left_lower_right_eye_left addr=134.61.47.139 screen=screen_left_lower_right viewport=vp_1200
+[cluster_node] id=node_left_lower_right_eye_right addr=134.61.47.139 screen=screen_left_lower_right viewport=vp_1200
+
+[cluster_node] id=node_right_upper_left_eye_left addr=134.61.47.140 screen=screen_right_upper_left viewport=vp_1200
+[cluster_node] id=node_right_upper_left_eye_right addr=134.61.47.140 screen=screen_right_upper_left viewport=vp_1200
+[cluster_node] id=node_right_upper_right_eye_left addr=134.61.47.141 screen=screen_right_upper_right viewport=vp_1200
+[cluster_node] id=node_right_upper_right_eye_right addr=134.61.47.141 screen=screen_right_upper_right viewport=vp_1200
+[cluster_node] id=node_right_lower_left_eye_left addr=134.61.47.142 screen=screen_right_lower_left viewport=vp_1200
+[cluster_node] id=node_right_lower_left_eye_right addr=134.61.47.142 screen=screen_right_lower_left viewport=vp_1200
+[cluster_node] id=node_right_lower_right_eye_left addr=134.61.47.143 screen=screen_right_lower_right viewport=vp_1200
+[cluster_node] id=node_right_lower_right_eye_right addr=134.61.47.143 screen=screen_right_lower_right viewport=vp_1200
+
+[cluster_node] id=node_back_upper_left_eye_left addr=134.61.47.144 screen=screen_back_upper_left viewport=vp_1200
+[cluster_node] id=node_back_upper_left_eye_right addr=134.61.47.144 screen=screen_back_upper_left viewport=vp_1200
+[cluster_node] id=node_back_upper_right_eye_left addr=134.61.47.145 screen=screen_back_upper_right viewport=vp_1200
+[cluster_node] id=node_back_upper_right_eye_right addr=134.61.47.145 screen=screen_back_upper_right viewport=vp_1200
+[cluster_node] id=node_back_lower_left_eye_left addr=134.61.47.146 screen=screen_back_lower_left viewport=vp_1200
+[cluster_node] id=node_back_lower_left_eye_right addr=134.61.47.146 screen=screen_back_lower_left viewport=vp_1200
+[cluster_node] id=node_back_lower_right_eye_left addr=134.61.47.147 screen=screen_back_lower_right viewport=vp_1200
+[cluster_node] id=node_back_lower_right_eye_right addr=134.61.47.147 screen=screen_back_lower_right viewport=vp_1200
+
+[cluster_node] id=node_floor_front_upper_left_eye_left addr=134.61.47.148 screen=screen_floor_front_upper_left viewport=vp_1200
+[cluster_node] id=node_floor_front_upper_left_eye_right addr=134.61.47.148 screen=screen_floor_front_upper_left viewport=vp_1200
+[cluster_node] id=node_floor_front_upper_right_eye_left addr=134.61.47.150 screen=screen_floor_front_upper_right viewport=vp_1200
+[cluster_node] id=node_floor_front_upper_right_eye_right addr=134.61.47.150 screen=screen_floor_front_upper_right viewport=vp_1200
+[cluster_node] id=node_floor_front_lower_left_eye_left addr=134.61.47.149 screen=screen_floor_front_lower_left viewport=vp_1200
+[cluster_node] id=node_floor_front_lower_left_eye_right addr=134.61.47.149 screen=screen_floor_front_lower_left viewport=vp_1200
+[cluster_node] id=node_floor_front_lower_right_eye_left addr=134.61.47.151 screen=screen_floor_front_lower_right viewport=vp_1200
+[cluster_node] id=node_floor_front_lower_right_eye_right addr=134.61.47.151 screen=screen_floor_front_lower_right viewport=vp_1200
+
+[cluster_node] id=node_floor_back_upper_left_eye_left addr=134.61.47.152 screen=screen_floor_back_upper_left viewport=vp_1200
+[cluster_node] id=node_floor_back_upper_left_eye_right addr=134.61.47.152 screen=screen_floor_back_upper_left viewport=vp_1200
+[cluster_node] id=node_floor_back_upper_right_eye_left addr=134.61.47.154 screen=screen_floor_back_upper_right viewport=vp_1200
+[cluster_node] id=node_floor_back_upper_right_eye_right addr=134.61.47.154 screen=screen_floor_back_upper_right viewport=vp_1200
+[cluster_node] id=node_floor_back_lower_left_eye_left addr=134.61.47.153 screen=screen_floor_back_lower_left viewport=vp_1200
+[cluster_node] id=node_floor_back_lower_left_eye_right addr=134.61.47.153 screen=screen_floor_back_lower_left viewport=vp_1200
+[cluster_node] id=node_floor_back_lower_right_eye_left addr=134.61.47.155 screen=screen_floor_back_lower_right viewport=vp_1200
+[cluster_node] id=node_floor_back_lower_right_eye_right addr=134.61.47.155 screen=screen_floor_back_lower_right viewport=vp_1200
+#####################################################################
+
+
+#####################################################################
+# List of projection screens
+#********************************************************************
+# Projection screen is a rectangle which determines the camera frustum.
+# Usually the projection screen has the same dimensions as an output
+# display but in some cases it may differ.
+#
+# Properties:
+# id - unique projection screen name
+# loc - relative location to the parent component. Location is relative
+# to the VR root if no parent specified. The pivot is a screen's
+# center and the values are in meters.
+# rot - relative rotation to the parent component. Rotation is relative
+# to the VR root if no parent specified. The pivot is a screen's
+# center and the values are in degrees.
+# size - width (X) and height (Y) of the screen. Values are in meters.
+#
+# Optional properties:
+# parent - ID of parent component in VR hierarchy; default is VR root.
+# tracker_id - ID of tracking device; no tracking by default.
+# tracker_ch - ID of tracking device's channel; no tracking by default.
+#********************************************************************
+[screen] id=screen_main loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=0.433333,Y=0.270833" parent=display_main
+[screen] id=screen_front_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_left
+[screen] id=screen_front_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_right
+[screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left
+[screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left
+[screen] id=screen_left_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_left
+[screen] id=screen_left_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_right
+[screen] id=screen_left_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_lower_left
+[screen] id=screen_left_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_lower_right
+[screen] id=screen_right_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_upper_left
+[screen] id=screen_right_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_upper_right
+[screen] id=screen_right_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_lower_left
+[screen] id=screen_right_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_lower_right
+[screen] id=screen_back_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_upper_left
+[screen] id=screen_back_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_upper_right
+[screen] id=screen_back_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_lower_left
+[screen] id=screen_back_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_lower_right
+[screen] id=screen_floor_front_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_upper_left
+[screen] id=screen_floor_front_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_upper_right
+[screen] id=screen_floor_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_lower_left
+[screen] id=screen_floor_front_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_lower_right
+[screen] id=screen_floor_back_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_upper_left
+[screen] id=screen_floor_back_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_upper_right
+[screen] id=screen_floor_back_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_lower_left
+[screen] id=screen_floor_back_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_lower_right
+###############################################################
+
+
+#####################################################################
+# List of viewport configurations
+#********************************************************************
+# Viewport is a rectangle area of game window where rendered frame is
+# mapped. Usually the viewport starts at 0:0 and has the same size as
+# its parent window but in some cases these settings may differ.
+#
+# Properties:
+# id - unique viewport name
+# x - X coordinate of viewport's top left corner
+# y - Y coordinate of viewport's top left corner
+# width - width of viewport in pixels
+# height - height of viewport in pixels
+#
+# Optional properties:
+# flip_h - flip image horizontally; default is 'false'
+# flip_v - flip image vertically; default is 'false'
+#********************************************************************
+[viewport] id=vp_1000 x=0 y=0 width=1600 height=1000 flip_h=False flip_v=False
+[viewport] id=vp_1200 x=0 y=0 width=1920 height=1200 flip_h=False flip_v=False
+#####################################################################
+
+
+#####################################################################
+# List of cameras
+#********************************************************************
+# Camera is a predefined point frome where the stereoscopic view built.
+# It's possible to define multiple cameras and swith the active one
+# during runtime. You're free to attach any camera to a tracking device
+# for head tracking. Consider a camera as a viewer's head.
+#
+# Properties:
+# id - unique camera name
+# loc - relative location to the parent component. Location is relative
+# to the VR root if no parent specified.
+# rot - relative rotation to the parent component. Rotation is relative
+# to the VR root if no parent specified.
+#
+# Optional properties:
+# parent - ID of parent component in VR hierarchy; default is VR root.
+# tracker_id - ID of tracking device; no tracking by default.
+# tracker_ch - ID of tracking device's channel; no tracking by default.
+#********************************************************************
+[camera] id=camera_dynamic loc="X=0,Y=0,Z=0" parent=shutter_glasses
+#####################################################################
+
+
+#####################################################################
+# List of scene nodes nodes (hierarchy transforms)
+#********************************************************************
+# Scene node is an actor component which is basically a transformation
+# matrix. Scene nodes can be helpful to build a component hierarchy, to
+# define some special places (like a socket) within VR space.
+#
+# It might be difficult to understand what VR space origin is. Consider
+# it as a point in space where VR space starts. Any componenent listed
+# in this config file is relative to its parent or this origin.
+#
+# Properties:
+# id - unique scene node name
+# loc - relative location to the parent component. Location is relative
+# to the VR root if no parent specified.
+# rot - relative rotation to the parent component. Rotation is relative
+# to the VR root if no parent specified.
+#
+# Optional properties:
+# parent - ID of parent component in VR hierarchy; default is VR root.
+# tracker_id - ID of tracking device; no tracking by default.
+# tracker_ch - ID of tracking device's channel; no tracking by default.
+#********************************************************************
+[scene_node] id=cave_origin loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0"
+[scene_node] id=cave_center loc="X=0,Y=0,Z=1.65" rot="P=0,Y=0,R=0" parent=cave_origin
+
+[scene_node] id=flystick loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=DTrackTracker tracker_ch=7
+[scene_node] id=shutter_glasses loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=DTrackTracker tracker_ch=0
+[scene_node] id=display_main loc="X=0.40.0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=shutter_glasses
+
+[scene_node] id=angle_left loc="X=0,Y=0,Z=0" rot="P=0,Y=-90,R=0" parent=cave_center
+[scene_node] id=angle_right loc="X=0,Y=0,Z=0" rot="P=0,Y=90,R=0" parent=cave_center
+[scene_node] id=angle_back loc="X=0,Y=0,Z=0" rot="P=0,Y=180,R=0" parent=cave_center
+[scene_node] id=angle_floor loc="X=0,Y=0,Z=0" rot="P=-90,Y=0,R=0" parent=cave_origin
+
+[scene_node] id=display_front_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center
+[scene_node] id=display_front_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center
+[scene_node] id=display_front_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center
+[scene_node] id=display_front_lower_left loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center
+
+[scene_node] id=display_left_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left
+[scene_node] id=display_left_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left
+[scene_node] id=display_left_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_left
+[scene_node] id=display_left_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_left
+
+[scene_node] id=display_right_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_right
+[scene_node] id=display_right_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_right
+[scene_node] id=display_right_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_right
+[scene_node] id=display_right_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_right
+
+[scene_node] id=display_back_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_back
+[scene_node] id=display_back_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_back
+[scene_node] id=display_back_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_back
+[scene_node] id=display_back_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_back
+
+[scene_node] id=display_floor_front_upper_left loc="X=0,Y=-1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_front_upper_right loc="X=0,Y=1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_front_lower_left loc="X=0,Y=-1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_front_lower_right loc="X=0,Y=1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor
+
+[scene_node] id=display_floor_back_upper_left loc="X=0,Y=-1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_back_upper_right loc="X=0,Y=1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_back_lower_left loc="X=0,Y=-1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor
+[scene_node] id=display_floor_back_lower_right loc="X=0,Y=1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor
+#####################################################################
+
+
+#####################################################################
+# List of input devices
+#********************************************************************
+# Input devices are VRPN devices. The nDisplay supports the following
+# types: analog, button and tracker. Many of physical input devices
+# can be connected via VRPN.
+#
+# Properties:
+# id - nique device name
+# type - VRPN type (analog, button or tracker).
+# addr - address of a VRPN server which handles this particular device.
+# The value must match the following format: DEVICENAME@SERVER_ADDRESS
+# where DEVICENAME is a VRPN name of this device and SERVER_ADDRESS
+# is IPv4 address of VRPN server.
+# loc - relative location to the parent component. Location is relative
+# to the VR root if no parent specified.
+# rot - relative rotation to the parent component. Rotation is relative
+# to the VR root if no parent specified.
+#
+# front (tracker only) - mapping of a tracking system axis to X axis of VR origin
+# right (tracker only) - mapping of a tracking system axis to Y axis of VR origin
+# up (tracker only) - mapping of a tracking system axis to Z axis of VR origin
+# * The following values are allowed for axes mapping: X, -X, Y, -Y, Z, -Z
+#
+# Optional properties:
+# remap - VRPN device channel remapping. Value format is: "from0:to0,from1:to1,...,fromN:toN".
+# For example: remap="0:3,1:4,5:2"
+#********************************************************************
+[input] id=DTrackAxis type=analog addr=DTrack2@10.0.1.29
+[input] id=DTrackButtons type=buttons addr=DTrack2@10.0.1.29
+[input] id=DTrackTracker type=tracker addr=DTrack2@10.0.1.29 loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" right=X up=Y front=-Z
+#####################################################################
+
+
+#####################################################################
+# Stereoscopic settings
+#********************************************************************
+# Properties:
+# eye_swap - swap left and right eyes:
+# false - L|R
+# true - R|L
+# eye_dist - interoccular distance in meters
+[stereo] eye_swap=True eye_dist=0.064
+#####################################################################
+
+
+#####################################################################
+# General settings
+#********************************************************************
+# Properties:
+# swap_sync_policy - swap synchronization policy
+# - 0 - no synchronization
+# - 1 - software swap synchronization
+# - 2 - NV swap lock (Nvidia cards only, OpenGL only)
+[general] swap_sync_policy=2
+#####################################################################
+
+
+#####################################################################
+# Custom arguments
+#********************************************************************
+# Any custom arguments available in runtime can be specified here.
+# Format: ARG_NAME=ARG_VAL
+[custom]
+#####################################################################
diff --git a/Source/nDisplayExtensions/nDisplayExtensions.Build.cs b/Source/DisplayClusterExtensions/DisplayClusterExtensions.Build.cs
similarity index 79%
rename from Source/nDisplayExtensions/nDisplayExtensions.Build.cs
rename to Source/DisplayClusterExtensions/DisplayClusterExtensions.Build.cs
index 22f9d9dcf3e85da6b4565f32f5543364fc735762..6b3217d6f6fc3cfb2d7e8b3ca0b81f3b493b7b78 100644
--- a/Source/nDisplayExtensions/nDisplayExtensions.Build.cs
+++ b/Source/DisplayClusterExtensions/DisplayClusterExtensions.Build.cs
@@ -1,8 +1,8 @@
using UnrealBuildTool;
-public class nDisplayExtensions : ModuleRules
+public class DisplayClusterExtensions : ModuleRules
{
- public nDisplayExtensions(ReadOnlyTargetRules Target) : base(Target)
+ public DisplayClusterExtensions(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
@@ -28,6 +28,7 @@ public class nDisplayExtensions : ModuleRules
"Core",
"CoreUObject",
"DisplayCluster",
+ "DisplayClusterInput",
"Engine",
"InputCore"
}
diff --git a/Source/DisplayClusterExtensions/Private/DisplayClusterExtensions.cpp b/Source/DisplayClusterExtensions/Private/DisplayClusterExtensions.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c715f682a56cb1a01f8c9230313022bb93567144
--- /dev/null
+++ b/Source/DisplayClusterExtensions/Private/DisplayClusterExtensions.cpp
@@ -0,0 +1,16 @@
+#include "DisplayClusterExtensions.h"
+
+#define LOCTEXT_NAMESPACE "FnDisplayExtensionsModule"
+
+void FDisplayClusterExtensionsModule::StartupModule ()
+{
+
+}
+void FDisplayClusterExtensionsModule::ShutdownModule()
+{
+
+}
+
+#undef LOCTEXT_NAMESPACE
+
+IMPLEMENT_MODULE(FDisplayClusterExtensionsModule, DisplayClusterExtensions)
\ No newline at end of file
diff --git a/Source/nDisplayExtensions/Private/DisplayClusterGameModeCAVE.cpp b/Source/DisplayClusterExtensions/Private/DisplayClusterGameModeCAVE.cpp
similarity index 100%
rename from Source/nDisplayExtensions/Private/DisplayClusterGameModeCAVE.cpp
rename to Source/DisplayClusterExtensions/Private/DisplayClusterGameModeCAVE.cpp
diff --git a/Source/DisplayClusterExtensions/Private/DisplayClusterPawnCAVE.cpp b/Source/DisplayClusterExtensions/Private/DisplayClusterPawnCAVE.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5855da424d51b3c12c40d013042cb450eff123e0
--- /dev/null
+++ b/Source/DisplayClusterExtensions/Private/DisplayClusterPawnCAVE.cpp
@@ -0,0 +1,142 @@
+#include "DisplayClusterPawnCAVE.h"
+
+#include "Cluster/IDisplayClusterClusterManager.h"
+#include "Engine/World.h"
+#include "Game/IDisplayClusterGameManager.h"
+#include "GameFramework/WorldSettings.h"
+#include "Input/IDisplayClusterInputManager.h"
+#include "Kismet/GameplayStatics.h"
+#include "DisplayClusterSettings.h"
+#include "IDisplayCluster.h"
+
+ADisplayClusterPawnCAVE::ADisplayClusterPawnCAVE(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
+{
+ MovementComponent = CreateDefaultSubobject<UFloatingPawnMovement> (TEXT("MovementComponent0"));
+ MovementComponent->UpdatedComponent = RootComponent;
+
+ RotatingComponent = CreateDefaultSubobject<URotatingMovementComponent>(TEXT("RotatingComponent0"));
+ RotatingComponent->UpdatedComponent = RootComponent;
+ RotatingComponent->bRotationInLocalSpace = false;
+ RotatingComponent->PivotTranslation = FVector::ZeroVector;
+ RotatingComponent->RotationRate = FRotator::ZeroRotator;
+}
+
+void ADisplayClusterPawnCAVE::OnForward_Implementation (float Value)
+{
+ if (Flystick)
+ {
+ if (IDisplayCluster::Get().GetClusterMgr()->IsMaster())
+ AddMovementInput(Flystick->GetForwardVector(), Value);
+ }
+ else
+ {
+ AddMovementInput((TranslationDirection ? TranslationDirection : RootComponent)->GetForwardVector(), Value);
+ }
+}
+void ADisplayClusterPawnCAVE::OnRight_Implementation (float Value)
+{
+ if (Flystick)
+ {
+ if (IDisplayCluster::Get().GetClusterMgr()->IsMaster())
+ AddMovementInput(Flystick->GetRightVector(), Value);
+ }
+ else
+ {
+ AddMovementInput((TranslationDirection ? TranslationDirection : RootComponent)->GetRightVector(), Value);
+ }
+}
+void ADisplayClusterPawnCAVE::OnTurnRate_Implementation (float Rate )
+{
+ if (Flystick)
+ {
+ if (!RotatingComponent->UpdatedComponent || !IDisplayCluster::Get().GetGameMgr() || !IDisplayCluster::Get().GetGameMgr()->GetActiveCamera()) return;
+
+ const FVector CameraLocation = IDisplayCluster::Get().GetGameMgr()->GetActiveCamera()->GetComponentLocation();
+ RotatingComponent->PivotTranslation = RotatingComponent->UpdatedComponent->GetComponentTransform().InverseTransformPositionNoScale(CameraLocation);
+ RotatingComponent->RotationRate = FRotator(RotatingComponent->RotationRate.Pitch, Rate * BaseTurnRate, 0.0f);
+ }
+ else
+ {
+ AddControllerYawInput(BaseTurnRate * Rate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
+ }
+}
+void ADisplayClusterPawnCAVE::OnLookUpRate_Implementation(float Rate )
+{
+ if (Flystick)
+ {
+ // User-centered projection causes motion sickness on look up interaction hence not implemented.
+ }
+ else
+ {
+ AddControllerPitchInput(BaseTurnRate * Rate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
+ }
+}
+void ADisplayClusterPawnCAVE::OnFire_Implementation ()
+{
+
+}
+void ADisplayClusterPawnCAVE::OnAction_Implementation (int32 Index)
+{
+
+}
+
+void ADisplayClusterPawnCAVE::BeginPlay ()
+{
+ Super::BeginPlay();
+
+ if (!IDisplayCluster::Get().IsModuleInitialized() || !IDisplayCluster::Get().IsAvailable()) return;
+
+ auto IsCluster = (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster);
+ bUseControllerRotationYaw = !IsCluster;
+ bUseControllerRotationPitch = !IsCluster;
+ bUseControllerRotationRoll = !IsCluster;
+
+ TArray<AActor*> SettingsActors;
+ UGameplayStatics::GetAllActorsOfClass(GetWorld(), ADisplayClusterSettings::StaticClass(), SettingsActors);
+ if (SettingsActors.Num() == 0) return;
+
+ ADisplayClusterSettings* Settings = Cast<ADisplayClusterSettings>(SettingsActors[0]);
+ MovementComponent->MaxSpeed = Settings->MovementMaxSpeed ;
+ MovementComponent->Acceleration = Settings->MovementAcceleration;
+ MovementComponent->Deceleration = Settings->MovementDeceleration;
+ MovementComponent->TurningBoost = Settings->MovementTurningBoost;
+ BaseTurnRate = Settings->RotationSpeed ;
+}
+void ADisplayClusterPawnCAVE::Tick (float DeltaSeconds)
+{
+ Super::Tick(DeltaSeconds);
+
+ // Is this really necessary?
+ const float Mult = GetWorld()->GetWorldSettings()->WorldToMeters / 100.f;
+ SetActorScale3D(FVector(Mult, Mult, Mult));
+
+ if (!Flystick)
+ Flystick = IDisplayCluster::Get().GetGameMgr()->GetNodeById(TEXT("flystick")); // There MUST be an scene node called flystick in the config.
+}
+void ADisplayClusterPawnCAVE::BeginDestroy ()
+{
+ Super::BeginDestroy();
+}
+
+void ADisplayClusterPawnCAVE::SetupPlayerInputComponent (UInputComponent* PlayerInputComponent)
+{
+ check(PlayerInputComponent);
+ Super::SetupPlayerInputComponent(PlayerInputComponent);
+ if (PlayerInputComponent)
+ {
+ PlayerInputComponent->BindAxis ("MoveForward" , this, &ADisplayClusterPawnCAVE::OnForward );
+ PlayerInputComponent->BindAxis ("MoveRight" , this, &ADisplayClusterPawnCAVE::OnRight );
+ PlayerInputComponent->BindAxis ("TurnRate" , this, &ADisplayClusterPawnCAVE::OnTurnRate );
+ PlayerInputComponent->BindAxis ("LookUpRate" , this, &ADisplayClusterPawnCAVE::OnLookUpRate);
+ PlayerInputComponent->BindAction ("Fire" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnFire );
+ PlayerInputComponent->BindAction<FButtonDelegate>("Action1" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnAction , 1);
+ PlayerInputComponent->BindAction<FButtonDelegate>("Action2" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnAction , 2);
+ PlayerInputComponent->BindAction<FButtonDelegate>("Action3" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnAction , 3);
+ PlayerInputComponent->BindAction<FButtonDelegate>("Action4" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnAction , 4);
+ PlayerInputComponent->BindAction<FButtonDelegate>("Action5" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnAction , 5);
+ }
+}
+UPawnMovementComponent* ADisplayClusterPawnCAVE::GetMovementComponent () const
+{
+ return MovementComponent;
+}
diff --git a/Source/nDisplayExtensions/Public/nDisplayExtensions.h b/Source/DisplayClusterExtensions/Public/DisplayClusterExtensions.h
similarity index 51%
rename from Source/nDisplayExtensions/Public/nDisplayExtensions.h
rename to Source/DisplayClusterExtensions/Public/DisplayClusterExtensions.h
index d5e9096991ad70694240b1ce329f2222ba2456cb..37d22333b3a096af9f8dd93956bd0e51de38f3c5 100644
--- a/Source/nDisplayExtensions/Public/nDisplayExtensions.h
+++ b/Source/DisplayClusterExtensions/Public/DisplayClusterExtensions.h
@@ -3,9 +3,9 @@
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
-class NDISPLAYEXTENSIONS_API FnDisplayExtensionsModule : public IModuleInterface
+class FDisplayClusterExtensionsModule : public IModuleInterface
{
public:
- virtual void StartupModule() override;
+ virtual void StartupModule () override;
virtual void ShutdownModule() override;
};
diff --git a/Source/nDisplayExtensions/Public/DisplayClusterGameModeCAVE.h b/Source/DisplayClusterExtensions/Public/DisplayClusterGameModeCAVE.h
similarity index 67%
rename from Source/nDisplayExtensions/Public/DisplayClusterGameModeCAVE.h
rename to Source/DisplayClusterExtensions/Public/DisplayClusterGameModeCAVE.h
index 2c68f15d371f05d18fb4f6fc97196b3e772fe0b6..395eba444e2f43b96535d93805cad88ee2e413f3 100644
--- a/Source/nDisplayExtensions/Public/DisplayClusterGameModeCAVE.h
+++ b/Source/DisplayClusterExtensions/Public/DisplayClusterGameModeCAVE.h
@@ -2,10 +2,11 @@
#include "CoreMinimal.h"
#include "DisplayClusterGameMode.h"
+
#include "DisplayClusterGameModeCAVE.generated.h"
UCLASS()
-class NDISPLAYEXTENSIONS_API ADisplayClusterGameModeCAVE : public ADisplayClusterGameMode
+class DISPLAYCLUSTEREXTENSIONS_API ADisplayClusterGameModeCAVE : public ADisplayClusterGameMode
{
GENERATED_BODY()
diff --git a/Source/DisplayClusterExtensions/Public/DisplayClusterPawnCAVE.h b/Source/DisplayClusterExtensions/Public/DisplayClusterPawnCAVE.h
new file mode 100644
index 0000000000000000000000000000000000000000..09ec2f3f376c95ffce7750f5f76c3044bb765852
--- /dev/null
+++ b/Source/DisplayClusterExtensions/Public/DisplayClusterPawnCAVE.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#include "GameFramework/FloatingPawnMovement.h"
+#include "GameFramework/PawnMovementComponent.h"
+#include "GameFramework/RotatingMovementComponent.h"
+#include "CoreMinimal.h"
+#include "DisplayClusterPawn.h"
+#include "DisplayClusterSceneComponent.h"
+
+#include "DisplayClusterPawnCAVE.generated.h"
+
+UCLASS()
+class DISPLAYCLUSTEREXTENSIONS_API ADisplayClusterPawnCAVE : public ADisplayClusterPawn
+{
+ GENERATED_UCLASS_BODY()
+
+public:
+ UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnForward (float Value);
+ UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnRight (float Value);
+ UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnTurnRate (float Rate );
+ UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnLookUpRate(float Rate );
+ UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnFire ();
+ UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnAction (int32 Index);
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") float BaseTurnRate = 45.0f ;
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") UDisplayClusterSceneComponent* Flystick = nullptr;
+
+protected:
+ DECLARE_DELEGATE_OneParam(FButtonDelegate, int32);
+
+ virtual void BeginPlay () override;
+ virtual void Tick (float DeltaSeconds ) override;
+ virtual void BeginDestroy () override;
+ virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
+ virtual UPawnMovementComponent* GetMovementComponent () const override;
+
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn", meta = (AllowPrivateAccess = "true")) UFloatingPawnMovement* MovementComponent = nullptr;
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn", meta = (AllowPrivateAccess = "true")) URotatingMovementComponent* RotatingComponent = nullptr;
+};
diff --git a/Source/nDisplayExtensions/Private/DisplayClusterPawnBase.cpp b/Source/nDisplayExtensions/Private/DisplayClusterPawnBase.cpp
deleted file mode 100644
index 270e3f17e86eca27e4a5ce3d22b4901766d7762c..0000000000000000000000000000000000000000
--- a/Source/nDisplayExtensions/Private/DisplayClusterPawnBase.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-#include "DisplayClusterPawnBase.h"
-
-#include "Engine/World.h"
-#include "Game/IDisplayClusterGameManager.h"
-#include "GameFramework/WorldSettings.h"
-#include "DisplayClusterSceneComponentSyncParent.h"
-#include "DisplayClusterSettings.h"
-#include "DisplayClusterGameMode.h"
-#include "IDisplayCluster.h"
-#include "Kismet/GameplayStatics.h"
-
-ADisplayClusterPawnBase::ADisplayClusterPawnBase(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
-{
- MovementComponent = CreateDefaultSubobject<UFloatingPawnMovement> (TEXT("MovementComponent0"));
- MovementComponent->UpdatedComponent = RootComponent;
-
- RotatingComponent = CreateDefaultSubobject<URotatingMovementComponent>(TEXT("RotatingComponent0"));
- RotatingComponent->UpdatedComponent = RootComponent;
- RotatingComponent->bRotationInLocalSpace = true;
- RotatingComponent->PivotTranslation = FVector::ZeroVector;
- RotatingComponent->RotationRate = FRotator::ZeroRotator;
-
- RotatingComponent2 = CreateDefaultSubobject<URotatingMovementComponent>(TEXT("RotatingComponent1"));
- RotatingComponent2->UpdatedComponent = RootComponent;
- RotatingComponent2->bRotationInLocalSpace = false;
- RotatingComponent2->PivotTranslation = FVector::ZeroVector;
- RotatingComponent2->RotationRate = FRotator::ZeroRotator;
-
- BaseTurnRate = 45.f;
- BaseLookUpRate = 45.f;
-}
-
-void ADisplayClusterPawnBase::MoveForward (float Value)
-{
- if (Value == 0.f) return;
- AddMovementInput((TranslationDirection ? TranslationDirection : RootComponent)->GetForwardVector(), Value);
-}
-void ADisplayClusterPawnBase::MoveRight (float Value)
-{
- if (Value == 0.f) return;
- AddMovementInput((TranslationDirection ? TranslationDirection : RootComponent)->GetRightVector (), Value);
-}
-void ADisplayClusterPawnBase::MoveUp (float Value)
-{
- if (Value == 0.f) return;
- AddMovementInput((TranslationDirection ? TranslationDirection : RootComponent)->GetUpVector (), Value);
-}
-void ADisplayClusterPawnBase::TurnAtRate (float Rate )
-{
- if (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster)
- {
- if (!RotatingComponent->UpdatedComponent) return;
- auto Manager = IDisplayCluster::Get().GetGameMgr();
- if (!Manager) return;
- auto Camera = Manager->GetActiveCamera();
- if (!Camera ) return;
-
- const FTransform TransformToRotate = RotatingComponent->UpdatedComponent->GetComponentTransform();
- const FVector RotateAroundPivot = TransformToRotate.InverseTransformPositionNoScale(Camera->GetComponentLocation());
- RotatingComponent->PivotTranslation = RotateAroundPivot;
- RotatingComponent->RotationRate = FRotator(RotatingComponent->RotationRate.Pitch, Rate * BaseTurnRate, 0.f);
- }
- else if (Rate != 0.f)
- AddControllerYawInput(BaseTurnRate * Rate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
-}
-void ADisplayClusterPawnBase::TurnAtRate2 (float Rate )
-{
- if (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster)
- {
- if (!RotatingComponent2->UpdatedComponent) return;
- auto Manager = IDisplayCluster::Get().GetGameMgr();
- if (!Manager) return;
- auto Camera = Manager->GetActiveCamera();
- if (!Camera ) return;
-
- const FTransform TransformToRotate = RotatingComponent2->UpdatedComponent->GetComponentTransform();
- const FVector RotateAroundPivot = TransformToRotate.InverseTransformPositionNoScale(Camera->GetComponentLocation());
- RotatingComponent2->PivotTranslation = RotateAroundPivot;
- RotatingComponent2->RotationRate = FRotator(RotatingComponent2->RotationRate.Pitch, Rate * BaseTurnRate, 0.f);
- }
- else if (Rate != 0.f)
- AddControllerYawInput(BaseTurnRate * Rate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
-}
-void ADisplayClusterPawnBase::LookUpAtRate(float Rate )
-{
- if (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster)
- {
- //@note: usually CAVE-like systems don't use roll and pitch rotation since it can cause dizziness.
-#if 0
- //@todo: rotate around active camera
- auto Manager = IDisplayCluster::Get().GetGameMgr();
- if (!Manager) return;
- auto Camera = Manager->GetActiveCamera();
- if (!Camera ) return;
-
- RotatingComponent->bRotationInLocalSpace = true;
- RotatingComponent->PivotTranslation = FVector::ZeroVector;
-
-#endif
- }
- else if (Rate != 0.f)
- {
- AddControllerPitchInput(BaseTurnRate * Rate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
- }
-}
-
-void ADisplayClusterPawnBase::BeginPlay ()
-{
- Super::BeginPlay();
-
- if (!IDisplayCluster::Get().IsModuleInitialized() || !IDisplayCluster::Get().IsAvailable()) return;
-
- auto IsCluster = (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster);
- bUseControllerRotationYaw = !IsCluster;
- bUseControllerRotationPitch = !IsCluster;
- bUseControllerRotationRoll = !IsCluster;
-
- TArray<AActor*> SettingsActors;
- UGameplayStatics::GetAllActorsOfClass(GetWorld(), ADisplayClusterSettings::StaticClass(), SettingsActors);
- if (SettingsActors.Num() == 0) return;
-
- ADisplayClusterSettings* Settings = Cast<ADisplayClusterSettings>(SettingsActors[0]);
- MovementComponent->MaxSpeed = Settings->MovementMaxSpeed;
- MovementComponent->Acceleration = Settings->MovementAcceleration;
- MovementComponent->Deceleration = Settings->MovementDeceleration;
- MovementComponent->TurningBoost = Settings->MovementTurningBoost;
- BaseTurnRate = Settings->RotationSpeed;
- BaseLookUpRate = Settings->RotationSpeed;
-}
-void ADisplayClusterPawnBase::Tick (float DeltaSeconds)
-{
- Super::Tick(DeltaSeconds);
- const float Mult = GetWorld()->GetWorldSettings()->WorldToMeters / 100.f;
- SetActorScale3D(FVector(Mult, Mult, Mult));
-}
-UPawnMovementComponent* ADisplayClusterPawnBase::GetMovementComponent() const
-{
- return MovementComponent;
-}
-
-void ADisplayClusterPawnBase::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
-{
- check(PlayerInputComponent);
- Super::SetupPlayerInputComponent(PlayerInputComponent);
- if (PlayerInputComponent)
- {
- PlayerInputComponent->BindAxis("MoveForward", this, &ADisplayClusterPawnBase::MoveForward );
- PlayerInputComponent->BindAxis("MoveRight" , this, &ADisplayClusterPawnBase::MoveRight );
- PlayerInputComponent->BindAxis("MoveUp" , this, &ADisplayClusterPawnBase::MoveUp );
- PlayerInputComponent->BindAxis("TurnRate" , this, &ADisplayClusterPawnBase::TurnAtRate2 );
- PlayerInputComponent->BindAxis("LookUpRate" , this, &ADisplayClusterPawnBase::LookUpAtRate);
- }
-}
diff --git a/Source/nDisplayExtensions/Private/DisplayClusterPawnCAVE.cpp b/Source/nDisplayExtensions/Private/DisplayClusterPawnCAVE.cpp
deleted file mode 100644
index 12e1c92000883c06400fdfaa39d25b530146dbee..0000000000000000000000000000000000000000
--- a/Source/nDisplayExtensions/Private/DisplayClusterPawnCAVE.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "DisplayClusterPawnCAVE.h"
-
-#include "Game/IDisplayClusterGameManager.h"
-#include "IDisplayCluster.h"
-
-void ADisplayClusterPawnCAVE::BeginPlay()
-{
- Flystick = IDisplayCluster::Get().GetGameMgr()->GetNodeById("flystick");
-}
-void ADisplayClusterPawnCAVE::MoveForward(float value)
-{
- if (!Flystick)
- Flystick = IDisplayCluster::Get().GetGameMgr()->GetNodeById("flystick");
- if (!Flystick || value == 0.0f)
- return;
- AddMovementInput(Flystick->GetForwardVector(), value);
-}
diff --git a/Source/nDisplayExtensions/Private/nDisplayExtensions.cpp b/Source/nDisplayExtensions/Private/nDisplayExtensions.cpp
deleted file mode 100644
index 8b2d5aadf5dd4a4a3f1d9405205cc4f530ac3b9c..0000000000000000000000000000000000000000
--- a/Source/nDisplayExtensions/Private/nDisplayExtensions.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "nDisplayExtensions.h"
-
-#define LOCTEXT_NAMESPACE "FnDisplayExtensionsModule"
-
-void FnDisplayExtensionsModule::StartupModule()
-{
-
-}
-void FnDisplayExtensionsModule::ShutdownModule()
-{
-
-}
-
-#undef LOCTEXT_NAMESPACE
-
-IMPLEMENT_MODULE(FnDisplayExtensionsModule, nDisplayExtensions)
\ No newline at end of file
diff --git a/Source/nDisplayExtensions/Public/DisplayClusterPawnBase.h b/Source/nDisplayExtensions/Public/DisplayClusterPawnBase.h
deleted file mode 100644
index 5eb76f52ff42409c369b56f14f3ff7f3e0403217..0000000000000000000000000000000000000000
--- a/Source/nDisplayExtensions/Public/DisplayClusterPawnBase.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#pragma once
-
-#include "Components/InputComponent.h"
-#include "GameFramework/FloatingPawnMovement.h"
-#include "GameFramework/PawnMovementComponent.h"
-#include "GameFramework/RotatingMovementComponent.h"
-#include "CoreMinimal.h"
-#include "DisplayClusterPawn.h"
-#include "DisplayClusterPawnBase.generated.h"
-
-UCLASS()
-class NDISPLAYEXTENSIONS_API ADisplayClusterPawnBase : public ADisplayClusterPawn
-{
- GENERATED_UCLASS_BODY()
-
-public:
- UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void MoveForward (float Value);
- UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void MoveRight (float Value);
- UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void MoveUp (float Value);
- UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void TurnAtRate (float Rate );
- UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void TurnAtRate2 (float Rate );
- UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void LookUpAtRate(float Rate );
-
- virtual void BeginPlay () override;
- virtual void Tick (float DeltaSeconds) override;
- virtual UPawnMovementComponent* GetMovementComponent() const override;
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") float BaseTurnRate ;
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") float BaseLookUpRate;
-
-protected:
- virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
-
- UPROPERTY(Category = Pawn, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) UFloatingPawnMovement* MovementComponent ;
- UPROPERTY(Category = Pawn, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) URotatingMovementComponent* RotatingComponent ;
- UPROPERTY(Category = Pawn, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) URotatingMovementComponent* RotatingComponent2;
-};
\ No newline at end of file
diff --git a/Source/nDisplayExtensions/Public/DisplayClusterPawnCAVE.h b/Source/nDisplayExtensions/Public/DisplayClusterPawnCAVE.h
deleted file mode 100644
index 48c64c90681f0aadf6b293247bfc3a9df5eb5b0b..0000000000000000000000000000000000000000
--- a/Source/nDisplayExtensions/Public/DisplayClusterPawnCAVE.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#pragma once
-
-#include "CoreMinimal.h"
-#include "DisplayClusterPawnBase.h"
-#include "DisplayClusterSceneComponent.h"
-#include "DisplayClusterPawnCAVE.generated.h"
-
-UCLASS()
-class NDISPLAYEXTENSIONS_API ADisplayClusterPawnCAVE : public ADisplayClusterPawnBase
-{
- GENERATED_BODY()
-
-public:
- virtual void BeginPlay() override;
- virtual void MoveForward(float value) override;
-
- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Pawn")
- UDisplayClusterSceneComponent* Flystick = nullptr;
-};
diff --git a/nDisplayExtensions.uplugin b/nDisplayExtensions.uplugin
index 31dbd3836665bce4091212b10f9e0d711e258bc8..b7529ae0b42fa4bfd40e543d3c9f90d879645a8f 100644
--- a/nDisplayExtensions.uplugin
+++ b/nDisplayExtensions.uplugin
@@ -13,9 +13,10 @@
"CanContainContent": true,
"IsBetaVersion": false,
"Installed": false,
+ "EnabledByDefault": true,
"Modules": [
{
- "Name": "nDisplayExtensions",
+ "Name": "DisplayClusterExtensions",
"Type": "Developer",
"LoadingPhase": "Default"
}
@@ -24,6 +25,10 @@
{
"Name": "nDisplay",
"Enabled": true
+ },
+ {
+ "Name": "nDisplayInput",
+ "Enabled": true
}
]
}
\ No newline at end of file