本文整理汇总了C#中MyTerminalControlSlider.SetLimits方法的典型用法代码示例。如果您正苦于以下问题:C# MyTerminalControlSlider.SetLimits方法的具体用法?C# MyTerminalControlSlider.SetLimits怎么用?C# MyTerminalControlSlider.SetLimits使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MyTerminalControlSlider
的用法示例。
在下文中一共展示了MyTerminalControlSlider.SetLimits方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CreateTerminalControls
protected override void CreateTerminalControls()
{
if (MyTerminalControlFactory.AreControlsCreated<MyGravityGenerator>())
return;
base.CreateTerminalControls();
var fieldWidth = new MyTerminalControlSlider<MyGravityGenerator>("Width", MySpaceTexts.BlockPropertyTitle_GravityFieldWidth, MySpaceTexts.BlockPropertyDescription_GravityFieldWidth);
fieldWidth.SetLimits((x) => x.BlockDefinition.MinFieldSize.X, (x) => x.BlockDefinition.MaxFieldSize.X);
fieldWidth.DefaultValue = 150;
fieldWidth.Getter = (x) => x.m_fieldSize.Value.X;
fieldWidth.Setter = (x, v) =>
{
Vector3 fieldSize = x.m_fieldSize;
fieldSize.X = v;
x.m_fieldSize.Value = fieldSize;
};
fieldWidth.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.m_fieldSize.Value.X, NUM_DECIMALS)).Append(" m");
fieldWidth.EnableActions();
MyTerminalControlFactory.AddControl(fieldWidth);
var fieldHeight = new MyTerminalControlSlider<MyGravityGenerator>("Height", MySpaceTexts.BlockPropertyTitle_GravityFieldHeight, MySpaceTexts.BlockPropertyDescription_GravityFieldHeight);
fieldHeight.SetLimits((x) => x.BlockDefinition.MinFieldSize.Y, (x) => x.BlockDefinition.MaxFieldSize.Y);
fieldHeight.DefaultValue = 150;
fieldHeight.Getter = (x) => x.m_fieldSize.Value.Y;
fieldHeight.Setter = (x, v) =>
{
Vector3 fieldSize = x.m_fieldSize;
fieldSize.Y = v;
x.m_fieldSize.Value = fieldSize;
};
fieldHeight.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.m_fieldSize.Value.Y, NUM_DECIMALS)).Append(" m");
fieldHeight.EnableActions();
MyTerminalControlFactory.AddControl(fieldHeight);
var fieldDepth = new MyTerminalControlSlider<MyGravityGenerator>("Depth", MySpaceTexts.BlockPropertyTitle_GravityFieldDepth, MySpaceTexts.BlockPropertyDescription_GravityFieldDepth);
fieldDepth.SetLimits((x) => x.BlockDefinition.MinFieldSize.Z, (x) => x.BlockDefinition.MaxFieldSize.Z);
fieldDepth.DefaultValue = 150;
fieldDepth.Getter = (x) => x.m_fieldSize.Value.Z;
fieldDepth.Setter = (x, v) =>
{
Vector3 fieldSize = x.m_fieldSize;
fieldSize.Z = v;
x.m_fieldSize.Value = fieldSize;
};
fieldDepth.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.m_fieldSize.Value.Z, NUM_DECIMALS)).Append(" m");
fieldDepth.EnableActions();
MyTerminalControlFactory.AddControl(fieldDepth);
var gravityAcceleration = new MyTerminalControlSlider<MyGravityGenerator>("Gravity", MySpaceTexts.BlockPropertyTitle_GravityAcceleration, MySpaceTexts.BlockPropertyDescription_GravityAcceleration);
gravityAcceleration.SetLimits((x) => x.BlockDefinition.MinGravityAcceleration, (x) => x.BlockDefinition.MaxGravityAcceleration);
gravityAcceleration.DefaultValue = MyGravityProviderSystem.G;
gravityAcceleration.Getter = (x) => x.GravityAcceleration;
gravityAcceleration.Setter = (x, v) => x.GravityAcceleration = v;
gravityAcceleration.Writer = (x, result) => result.AppendDecimal(x.GravityAcceleration / MyGravityProviderSystem.G, 2).Append(" G");
gravityAcceleration.EnableActions();
MyTerminalControlFactory.AddControl(gravityAcceleration);
}
示例2: MyGravityGenerator
static MyGravityGenerator()
{
var fieldWidth = new MyTerminalControlSlider<MyGravityGenerator>("Width", MySpaceTexts.BlockPropertyTitle_GravityFieldWidth, MySpaceTexts.BlockPropertyDescription_GravityFieldWidth);
fieldWidth.SetLimits(1, 150);
fieldWidth.DefaultValue = 150;
fieldWidth.Getter = (x) => x.m_fieldSize.Value.X;
fieldWidth.Setter = (x, v) =>
{
Vector3 fieldSize = x.m_fieldSize;
fieldSize.X = v;
x.m_fieldSize.Value = fieldSize;
};
fieldWidth.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.m_fieldSize.Value.X, NUM_DECIMALS)).Append(" m");
fieldWidth.EnableActions();
MyTerminalControlFactory.AddControl(fieldWidth);
var fieldHeight = new MyTerminalControlSlider<MyGravityGenerator>("Height", MySpaceTexts.BlockPropertyTitle_GravityFieldHeight, MySpaceTexts.BlockPropertyDescription_GravityFieldHeight);
fieldHeight.SetLimits(1, 150);
fieldHeight.DefaultValue = 150;
fieldHeight.Getter = (x) => x.m_fieldSize.Value.Y;
fieldHeight.Setter = (x, v) =>
{
Vector3 fieldSize = x.m_fieldSize;
fieldSize.Y = v;
x.m_fieldSize.Value = fieldSize;
};
fieldHeight.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.m_fieldSize.Value.Y, NUM_DECIMALS)).Append(" m");
fieldHeight.EnableActions();
MyTerminalControlFactory.AddControl(fieldHeight);
var fieldDepth = new MyTerminalControlSlider<MyGravityGenerator>("Depth", MySpaceTexts.BlockPropertyTitle_GravityFieldDepth, MySpaceTexts.BlockPropertyDescription_GravityFieldDepth);
fieldDepth.SetLimits(1, 150);
fieldDepth.DefaultValue = 150;
fieldDepth.Getter = (x) => x.m_fieldSize.Value.Z;
fieldDepth.Setter = (x, v) =>
{
Vector3 fieldSize = x.m_fieldSize;
fieldSize.Z = v;
x.m_fieldSize.Value = fieldSize;
};
fieldDepth.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.m_fieldSize.Value.Z, NUM_DECIMALS)).Append(" m");
fieldDepth.EnableActions();
MyTerminalControlFactory.AddControl(fieldDepth);
var gravityAcceleration = new MyTerminalControlSlider<MyGravityGenerator>("Gravity", MySpaceTexts.BlockPropertyTitle_GravityAcceleration, MySpaceTexts.BlockPropertyDescription_GravityAcceleration);
gravityAcceleration.SetLimits(-MyGravityProviderSystem.G, MyGravityProviderSystem.G);
gravityAcceleration.DefaultValue = MyGravityProviderSystem.G;
gravityAcceleration.Getter = (x) => x.GravityAcceleration;
gravityAcceleration.Setter = (x, v) => x.GravityAcceleration = v;
gravityAcceleration.Writer = (x, result) => result.AppendDecimal(x.m_gravityAcceleration / MyGravityProviderSystem.G, 2).Append(" G");
gravityAcceleration.EnableActions();
MyTerminalControlFactory.AddControl(gravityAcceleration);
}
示例3: MySpaceBall
static MySpaceBall()
{
MyTerminalControlFactory.RemoveBaseClass<MySpaceBall, MyTerminalBlock>();
var mass = new MyTerminalControlSlider<MySpaceBall>("VirtualMass", MySpaceTexts.BlockPropertyDescription_SpaceBallVirtualMass, MySpaceTexts.BlockPropertyDescription_SpaceBallVirtualMass);
mass.Getter = (x) => x.VirtualMass;
mass.Setter = (x, v) => x.VirtualMass = v;
mass.DefaultValueGetter = (x) => DEFAULT_MASS;
mass.SetLimits(x => 0, x => x.BlockDefinition.MaxVirtualMass);
mass.Writer = (x, result) => MyValueFormatter.AppendWeightInBestUnit(x.VirtualMass, result);
mass.EnableActions();
MyTerminalControlFactory.AddControl(mass);
if (MyPerGameSettings.BallFriendlyPhysics)
{
var friction = new MyTerminalControlSlider<MySpaceBall>("Friction", MySpaceTexts.BlockPropertyDescription_SpaceBallFriction, MySpaceTexts.BlockPropertyDescription_SpaceBallFriction);
friction.Getter = (x) => x.Friction;
friction.Setter = (x, v) => x.Friction = v;
friction.DefaultValueGetter = (x) => DEFAULT_FRICTION;
friction.SetLimits(0, 1.0f);
friction.Writer = (x, result) => result.AppendInt32((int)(x.Friction * 100)).Append("%");
friction.EnableActions();
MyTerminalControlFactory.AddControl(friction);
var restitution = new MyTerminalControlSlider<MySpaceBall>("Restitution", MySpaceTexts.BlockPropertyDescription_SpaceBallRestitution, MySpaceTexts.BlockPropertyDescription_SpaceBallRestitution);
restitution.Getter = (x) => x.Restitution;
restitution.Setter = (x, v) => x.Restitution = v;
restitution.DefaultValueGetter = (x) => DEFAULT_RESTITUTION;
restitution.SetLimits(0, 1.0f);
restitution.Writer = (x, result) => result.AppendInt32((int)(x.Restitution * 100)).Append("%");
restitution.EnableActions();
MyTerminalControlFactory.AddControl(restitution);
}
var enableBroadcast = new MyTerminalControlCheckbox<MySpaceBall>("EnableBroadCast", MySpaceTexts.Antenna_EnableBroadcast, MySpaceTexts.Antenna_EnableBroadcast);
enableBroadcast.Getter = (x) => x.RadioBroadcaster.Enabled;
enableBroadcast.Setter = (x, v) => x.m_broadcastSync.Value = v;
enableBroadcast.EnableAction();
MyTerminalControlFactory.AddControl(enableBroadcast);
}
示例4: CreateTerminalControls
static void CreateTerminalControls()
{
if (MyTerminalControlFactory.AreControlsCreated<MySoundBlock>())
return;
var volumeSlider = new MyTerminalControlSlider<MySoundBlock>("VolumeSlider", MySpaceTexts.BlockPropertyTitle_SoundBlockVolume, MySpaceTexts.BlockPropertyDescription_SoundBlockVolume);
volumeSlider.SetLimits(0, 1.0f);
volumeSlider.DefaultValue = 1;
volumeSlider.Getter = (x) => x.Volume;
volumeSlider.Setter = (x, v) => x.Volume = v;
volumeSlider.Writer = (x, result) => result.AppendInt32((int)(x.Volume * 100.0)).Append(" %");
volumeSlider.EnableActions();
MyTerminalControlFactory.AddControl(volumeSlider);
var rangeSlider = new MyTerminalControlSlider<MySoundBlock>("RangeSlider", MySpaceTexts.BlockPropertyTitle_SoundBlockRange, MySpaceTexts.BlockPropertyDescription_SoundBlockRange);
rangeSlider.SetLimits(0, 500);
rangeSlider.DefaultValue = 50;
rangeSlider.Getter = (x) => x.Range;
rangeSlider.Setter = (x, v) => x.Range = v;
rangeSlider.Writer = (x, result) => result.AppendInt32((int)x.Range).Append(" m");
rangeSlider.EnableActions();
MyTerminalControlFactory.AddControl(rangeSlider);
m_playButton = new MyTerminalControlButton<MySoundBlock>("PlaySound", MySpaceTexts.BlockPropertyTitle_SoundBlockPlay, MySpaceTexts.Blank, (x) => MyMultiplayer.RaiseEvent(x, y => y.PlaySound));
m_playButton.Enabled = (x) => x.IsSoundSelected;
m_playButton.EnableAction();
MyTerminalControlFactory.AddControl(m_playButton);
m_stopButton = new MyTerminalControlButton<MySoundBlock>("StopSound", MySpaceTexts.BlockPropertyTitle_SoundBlockStop, MySpaceTexts.Blank,
(x) => { MyMultiplayer.RaiseEvent(x, y => y.StopSound); x.m_willStartSound = false; });
m_stopButton.Enabled = (x) => x.IsSoundSelected;
m_stopButton.EnableAction();
MyTerminalControlFactory.AddControl(m_stopButton);
m_loopableTimeSlider = new MyTerminalControlSlider<MySoundBlock>("LoopableSlider", MySpaceTexts.BlockPropertyTitle_SoundBlockLoopTime, MySpaceTexts.Blank);
m_loopableTimeSlider.DefaultValue = 1f;
m_loopableTimeSlider.Getter = (x) => x.LoopPeriod;
m_loopableTimeSlider.Setter = (x, f) => x.LoopPeriod = f;
m_loopableTimeSlider.Writer = (x, result) => MyValueFormatter.AppendTimeInBestUnit(x.LoopPeriod, result);
m_loopableTimeSlider.Enabled = (x) => x.IsLoopable;
m_loopableTimeSlider.Normalizer = (x, f) => x.NormalizeLoopPeriod(f);
m_loopableTimeSlider.Denormalizer = (x, f) => x.DenormalizeLoopPeriod(f);
m_loopableTimeSlider.EnableActions();
MyTerminalControlFactory.AddControl(m_loopableTimeSlider);
var soundsList = new MyTerminalControlListbox<MySoundBlock>("SoundsList", MySpaceTexts.BlockPropertyTitle_SoundBlockSoundList, MySpaceTexts.Blank);
soundsList.ListContent = (x, list1, list2) => x.FillListContent(list1, list2);
soundsList.ItemSelected = (x, y) => x.SelectSound(y, true);
MyTerminalControlFactory.AddControl(soundsList);
}
示例5: CreateTerminalControls
static void CreateTerminalControls()
{
if (MyTerminalControlFactory.AreControlsCreated<MyMechanicalConnectionBlockBase>())
return;
var weldSpeed = new MyTerminalControlSlider<MyMechanicalConnectionBlockBase>("Weld speed", MySpaceTexts.BlockPropertyTitle_WeldSpeed, MySpaceTexts.Blank);
weldSpeed.SetLimits((block) => 0f, (block) => MyGridPhysics.SmallShipMaxLinearVelocity());
weldSpeed.DefaultValueGetter = (block) => MyGridPhysics.LargeShipMaxLinearVelocity() - 5f;
weldSpeed.Getter = (x) => x.m_weldSpeed;
weldSpeed.Setter = (x, v) => x.m_weldSpeed.Value = v;
weldSpeed.Writer = (x, res) => res.AppendDecimal((float)Math.Sqrt(x.m_weldSpeedSq), 1).Append("m/s");
weldSpeed.EnableActions();
MyTerminalControlFactory.AddControl(weldSpeed);
var weldForce = new MyTerminalControlCheckbox<MyMechanicalConnectionBlockBase>("Force weld", MySpaceTexts.BlockPropertyTitle_WeldForce, MySpaceTexts.Blank);
weldForce.Getter = (x) => x.m_forceWeld;
weldForce.Setter = (x, v) => x.m_forceWeld.Value = v;
weldForce.EnableAction();
MyTerminalControlFactory.AddControl(weldForce);
var addPistonHead = new MyTerminalControlButton<MyMechanicalConnectionBlockBase>("Add Top Part", MySpaceTexts.BlockActionTitle_AddPistonHead, MySpaceTexts.BlockActionTooltip_AddPistonHead, (b) => b.RecreateTop());
addPistonHead.Enabled = (b) => (b.TopBlock == null);
addPistonHead.EnableAction(MyTerminalActionIcons.STATION_ON);
MyTerminalControlFactory.AddControl(addPistonHead);
}
示例6: MyProjector
static MyProjector()
{
if (!MyFakes.ENABLE_PROJECTOR_BLOCK)
{
return;
}
var blueprintBtn = new MyTerminalControlButton<MyProjector>("Blueprint", MySpaceTexts.Blueprints, MySpaceTexts.Blank, (p) => p.SelectBlueprint());
blueprintBtn.Enabled = (b) => b.CanProject();
blueprintBtn.SupportsMultipleBlocks = false;
MyTerminalControlFactory.AddControl(blueprintBtn);
var removeBtn = new MyTerminalControlButton<MyProjector>("Remove", MySpaceTexts.RemoveProjectionButton, MySpaceTexts.Blank, (p) => p.SyncObject.SendRemoveProjection());
removeBtn.Enabled = (b) => b.IsProjecting();
MyTerminalControlFactory.AddControl(removeBtn);
var keepProjectionToggle = new MyTerminalControlCheckbox<MyProjector>("KeepProjection", MySpaceTexts.KeepProjectionToggle, MySpaceTexts.KeepProjectionTooltip);
keepProjectionToggle.Getter = (x) => x.m_keepProjection;
keepProjectionToggle.Setter = (x, v) =>
{
x.SyncObject.SendNewKeepProjection(v);
};
keepProjectionToggle.EnableAction();
keepProjectionToggle.Enabled = (b) => b.IsProjecting();
MyTerminalControlFactory.AddControl(keepProjectionToggle);
//Position
var offsetX = new MyTerminalControlSlider<MyProjector>("X", MySpaceTexts.BlockPropertyTitle_ProjectionOffsetX, MySpaceTexts.Blank);
offsetX.SetLimits(-50, 50);
offsetX.DefaultValue = 0;
offsetX.Getter = (x) => x.m_projectionOffset.X;
offsetX.Setter = (x, v) =>
{
x.m_projectionOffset.X = Convert.ToInt32(v);
x.OnOffsetsChanged();
};
offsetX.Writer = (x, result) => result.AppendInt32((int)(x.m_projectionOffset.X));
offsetX.EnableActions(step: 0.01f);
offsetX.Enabled = (x) => x.IsProjecting();
MyTerminalControlFactory.AddControl(offsetX);
var offsetY = new MyTerminalControlSlider<MyProjector>("Y", MySpaceTexts.BlockPropertyTitle_ProjectionOffsetY, MySpaceTexts.Blank);
offsetY.SetLimits(-50, 50);
offsetY.DefaultValue = 0;
offsetY.Getter = (x) => x.m_projectionOffset.Y;
offsetY.Setter = (x, v) =>
{
x.m_projectionOffset.Y = Convert.ToInt32(v);
x.OnOffsetsChanged();
};
offsetY.Writer = (x, result) => result.AppendInt32((int)(x.m_projectionOffset.Y));
offsetY.EnableActions(step: 0.01f);
offsetY.Enabled = (x) => x.IsProjecting();
MyTerminalControlFactory.AddControl(offsetY);
var offsetZ = new MyTerminalControlSlider<MyProjector>("Z", MySpaceTexts.BlockPropertyTitle_ProjectionOffsetZ, MySpaceTexts.Blank);
offsetZ.SetLimits(-50, 50);
offsetZ.DefaultValue = 0;
offsetZ.Getter = (x) => x.m_projectionOffset.Z;
offsetZ.Setter = (x, v) =>
{
x.m_projectionOffset.Z = Convert.ToInt32(v);
x.OnOffsetsChanged();
};
offsetZ.Writer = (x, result) => result.AppendInt32((int)(x.m_projectionOffset.Z));
offsetZ.EnableActions(step: 0.01f);
offsetZ.Enabled = (x) => x.IsProjecting();
MyTerminalControlFactory.AddControl(offsetZ);
//Rotation
var rotationX = new MyTerminalControlSlider<MyProjector>("RotX", MySpaceTexts.BlockPropertyTitle_ProjectionRotationX, MySpaceTexts.Blank);
rotationX.SetLimits(-2, 2);
rotationX.DefaultValue = 0;
rotationX.Getter = (x) => x.m_projectionRotation.X;
rotationX.Setter = (x, v) =>
{
x.m_projectionRotation.X = Convert.ToInt32(v);
x.OnOffsetsChanged();
};
rotationX.Writer = (x, result) => result.AppendInt32((int)x.m_projectionRotation.X * 90).Append("°");
rotationX.EnableActions(step: 0.2f);
rotationX.Enabled = (x) => x.IsProjecting();
MyTerminalControlFactory.AddControl(rotationX);
var rotationY = new MyTerminalControlSlider<MyProjector>("RotY", MySpaceTexts.BlockPropertyTitle_ProjectionRotationY, MySpaceTexts.Blank);
rotationY.SetLimits(-2, 2);
rotationY.DefaultValue = 0;
rotationY.Getter = (x) => x.m_projectionRotation.Y;
rotationY.Setter = (x, v) =>
{
x.m_projectionRotation.Y = Convert.ToInt32(v);
x.OnOffsetsChanged();
};
rotationY.Writer = (x, result) => result.AppendInt32((int)x.m_projectionRotation.Y * 90).Append("°");
rotationY.EnableActions(step: 0.2f);
rotationY.Enabled = (x) => x.IsProjecting();
MyTerminalControlFactory.AddControl(rotationY);
//.........这里部分代码省略.........
示例7: CreateTerminalControls
protected override void CreateTerminalControls()
{
if (MyTerminalControlFactory.AreControlsCreated<MyRemoteControl>())
return;
base.CreateTerminalControls();
var controlBtn = new MyTerminalControlButton<MyRemoteControl>("Control", MySpaceTexts.ControlRemote, MySpaceTexts.Blank, (b) => b.RequestControl());
controlBtn.Enabled = r => r.CanControl();
controlBtn.SupportsMultipleBlocks = false;
var action = controlBtn.EnableAction(MyTerminalActionIcons.TOGGLE);
if (action != null)
{
action.InvalidToolbarTypes = new List<MyToolbarType> { MyToolbarType.ButtonPanel };
action.ValidForGroups = false;
}
MyTerminalControlFactory.AddControl(controlBtn);
var autoPilotSeparator = new MyTerminalControlSeparator<MyRemoteControl>();
MyTerminalControlFactory.AddControl(autoPilotSeparator);
var autoPilot = new MyTerminalControlOnOffSwitch<MyRemoteControl>("AutoPilot", MySpaceTexts.BlockPropertyTitle_AutoPilot, MySpaceTexts.Blank);
autoPilot.Getter = (x) => x.m_autoPilotEnabled;
autoPilot.Setter = (x, v) => x.SetAutoPilotEnabled(v);
autoPilot.Enabled = r => r.CanEnableAutoPilot();
autoPilot.EnableToggleAction();
autoPilot.EnableOnOffActions();
MyTerminalControlFactory.AddControl(autoPilot);
var collisionAv = new MyTerminalControlOnOffSwitch<MyRemoteControl>("CollisionAvoidance", MySpaceTexts.BlockPropertyTitle_CollisionAvoidance, MySpaceTexts.Blank);
collisionAv.Getter = (x) => x.m_useCollisionAvoidance;
collisionAv.Setter = (x, v) => x.SetCollisionAvoidance(v);
collisionAv.Enabled = r => true;
collisionAv.EnableToggleAction();
collisionAv.EnableOnOffActions();
MyTerminalControlFactory.AddControl(collisionAv);
var dockignMode = new MyTerminalControlOnOffSwitch<MyRemoteControl>("DockingMode", MySpaceTexts.BlockPropertyTitle_EnableDockingMode, MySpaceTexts.Blank);
dockignMode.Getter = (x) => x.m_dockingModeEnabled;
dockignMode.Setter = (x, v) => x.SetDockingMode(v);
dockignMode.Enabled = r => r.IsWorking;
dockignMode.EnableToggleAction();
dockignMode.EnableOnOffActions();
MyTerminalControlFactory.AddControl(dockignMode);
var cameraList = new MyTerminalControlCombobox<MyRemoteControl>("CameraList", MySpaceTexts.BlockPropertyTitle_AssignedCamera, MySpaceTexts.Blank);
cameraList.ComboBoxContentWithBlock = (x, list) => x.FillCameraComboBoxContent(list);
cameraList.Getter = (x) => (long)x.m_bindedCamera;
cameraList.Setter = (x, y) => x.m_bindedCamera.Value = y;
MyTerminalControlFactory.AddControl(cameraList);
m_cameraList = cameraList;
var flightMode = new MyTerminalControlCombobox<MyRemoteControl>("FlightMode", MySpaceTexts.BlockPropertyTitle_FlightMode, MySpaceTexts.Blank);
flightMode.ComboBoxContent = (x) => FillFlightModeCombo(x);
flightMode.Getter = (x) => (long)x.m_currentFlightMode.Value;
flightMode.Setter = (x, v) => x.ChangeFlightMode((FlightMode)v);
flightMode.SetSerializerRange((int)MyEnum<FlightMode>.Range.Min, (int)MyEnum<FlightMode>.Range.Max);
MyTerminalControlFactory.AddControl(flightMode);
var directionCombo = new MyTerminalControlCombobox<MyRemoteControl>("Direction", MySpaceTexts.BlockPropertyTitle_ForwardDirection, MySpaceTexts.Blank);
directionCombo.ComboBoxContent = (x) => FillDirectionCombo(x);
directionCombo.Getter = (x) => (long)x.m_currentDirection.Value;
directionCombo.Setter = (x, v) => x.ChangeDirection((Base6Directions.Direction)v);
MyTerminalControlFactory.AddControl(directionCombo);
if (MyFakes.ENABLE_VR_REMOTE_BLOCK_AUTOPILOT_SPEED_LIMIT)
{
var sliderSpeedLimit = new MyTerminalControlSlider<MyRemoteControl>("SpeedLimit", MySpaceTexts.BlockPropertyTitle_RemoteBlockSpeedLimit,
MySpaceTexts.BlockPropertyTitle_RemoteBlockSpeedLimit);
sliderSpeedLimit.SetLimits(1, 200);
sliderSpeedLimit.DefaultValue = MyObjectBuilder_RemoteControl.DEFAULT_AUTOPILOT_SPEED_LIMIT;
sliderSpeedLimit.Getter = (x) => x.m_autopilotSpeedLimit;
sliderSpeedLimit.Setter = (x, v) => x.m_autopilotSpeedLimit.Value = v;
sliderSpeedLimit.Writer = (x, sb) => sb.Append(MyValueFormatter.GetFormatedFloat(x.m_autopilotSpeedLimit, 0));
sliderSpeedLimit.EnableActions();
MyTerminalControlFactory.AddControl(sliderSpeedLimit);
}
var waypointList = new MyTerminalControlListbox<MyRemoteControl>("WaypointList", MySpaceTexts.BlockPropertyTitle_Waypoints, MySpaceTexts.Blank, true);
waypointList.ListContent = (x, list1, list2) => x.FillWaypointList(list1, list2);
waypointList.ItemSelected = (x, y) => x.SelectWaypoint(y);
if (!MySandboxGame.IsDedicated)
{
m_waypointGuiControl = (MyGuiControlListbox)((MyGuiControlBlockProperty)waypointList.GetGuiControl()).PropertyControl;
}
MyTerminalControlFactory.AddControl(waypointList);
var toolbarButton = new MyTerminalControlButton<MyRemoteControl>("Open Toolbar", MySpaceTexts.BlockPropertyTitle_AutoPilotToolbarOpen, MySpaceTexts.BlockPropertyPopup_AutoPilotToolbarOpen,
delegate(MyRemoteControl self)
{
var actions = self.m_selectedWaypoints[0].Actions;
if (actions != null)
{
for (int i = 0; i < actions.Length; i++)
{
if (actions[i] != null)
{
self.m_actionToolbar.SetItemAtIndex(i, actions[i]);
}
}
//.........这里部分代码省略.........
示例8: MyLightingBlock
static MyLightingBlock()
{
var lightColor = new MyTerminalControlColor<MyLightingBlock>("Color", MySpaceTexts.BlockPropertyTitle_LightColor);
lightColor.Getter = (x) => x.Color;
lightColor.Setter = (x, v) => x.m_lightColor.Value = v;
MyTerminalControlFactory.AddControl(lightColor);
var lightRadius = new MyTerminalControlSlider<MyLightingBlock>("Radius", MySpaceTexts.BlockPropertyTitle_LightRadius, MySpaceTexts.BlockPropertyDescription_LightRadius);
lightRadius.SetLimits((x) => x.RadiusBounds.Min, (x) => x.RadiusBounds.Max);
lightRadius.DefaultValueGetter = (x) => x.RadiusBounds.Default;
lightRadius.Getter = (x) => x.Radius;
lightRadius.Setter = (x, v) => x.m_lightRadius.Value = v;
lightRadius.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.m_light.Range, 1)).Append(" m");
lightRadius.EnableActions();
MyTerminalControlFactory.AddControl(lightRadius);
var lightFalloff = new MyTerminalControlSlider<MyLightingBlock>("Falloff", MySpaceTexts.BlockPropertyTitle_LightFalloff, MySpaceTexts.BlockPropertyDescription_LightFalloff);
lightFalloff.SetLimits((x) => x.FalloffBounds.Min, (x) => x.FalloffBounds.Max);
lightFalloff.DefaultValueGetter = (x) => x.FalloffBounds.Default;
lightFalloff.Getter = (x) => x.Falloff;
lightFalloff.Setter = (x, v) => x.m_lightFalloff.Value = v;
lightFalloff.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.m_light.Falloff, 1));
lightRadius.EnableActions();
MyTerminalControlFactory.AddControl(lightFalloff);
var lightIntensity = new MyTerminalControlSlider<MyLightingBlock>("Intensity", MySpaceTexts.BlockPropertyTitle_LightIntensity, MySpaceTexts.BlockPropertyDescription_LightIntensity);
lightIntensity.SetLimits((x) => x.IntensityBounds.Min, (x) => x.IntensityBounds.Max);
lightIntensity.DefaultValueGetter = (x) => x.IntensityBounds.Default;
lightIntensity.Getter = (x) => x.Intensity;
lightIntensity.Setter = (x, v) => x.Intensity = v;
lightIntensity.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.Intensity, 1));
lightRadius.EnableActions();
MyTerminalControlFactory.AddControl(lightIntensity);
var lightBlinkTime = new MyTerminalControlSlider<MyLightingBlock>("Blink Interval", MySpaceTexts.BlockPropertyTitle_LightBlinkInterval, MySpaceTexts.BlockPropertyDescription_LightBlinkInterval);
lightBlinkTime.SetLimits((x) => x.BlinkIntervalSecondsBounds.Min, (x) => x.BlinkIntervalSecondsBounds.Max);
lightBlinkTime.DefaultValueGetter = (x) => x.BlinkIntervalSecondsBounds.Default;
lightBlinkTime.Getter = (x) => x.BlinkIntervalSeconds;
lightBlinkTime.Setter = (x, v) => x.BlinkIntervalSeconds = v;
lightBlinkTime.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.BlinkIntervalSeconds, NUM_DECIMALS)).Append(" s");
lightBlinkTime.EnableActions();
MyTerminalControlFactory.AddControl(lightBlinkTime);
var lightBlinkLenght = new MyTerminalControlSlider<MyLightingBlock>("Blink Lenght", MySpaceTexts.BlockPropertyTitle_LightBlinkLenght, MySpaceTexts.BlockPropertyDescription_LightBlinkLenght);
lightBlinkLenght.SetLimits((x) => x.BlinkLenghtBounds.Min, (x) => x.BlinkLenghtBounds.Max);
lightBlinkLenght.DefaultValueGetter = (x) => x.BlinkLenghtBounds.Default;
lightBlinkLenght.Getter = (x) => x.BlinkLength;
lightBlinkLenght.Setter = (x, v) => x.BlinkLength = v;
lightBlinkLenght.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.BlinkLength, NUM_DECIMALS)).Append(" %");
lightBlinkLenght.EnableActions();
MyTerminalControlFactory.AddControl(lightBlinkLenght);
var ligthBlinkOffset = new MyTerminalControlSlider<MyLightingBlock>("Blink Offset", MySpaceTexts.BlockPropertyTitle_LightBlinkOffset, MySpaceTexts.BlockPropertyDescription_LightBlinkOffset);
ligthBlinkOffset.SetLimits((x) => x.BlinkOffsetBounds.Min, (x) => x.BlinkOffsetBounds.Max);
ligthBlinkOffset.DefaultValueGetter = (x) => x.BlinkOffsetBounds.Default;
ligthBlinkOffset.Getter = (x) => x.BlinkOffset;
ligthBlinkOffset.Setter = (x, v) => x.BlinkOffset = v;
ligthBlinkOffset.Writer = (x, result) => result.Append(MyValueFormatter.GetFormatedFloat(x.BlinkOffset, NUM_DECIMALS)).Append(" %");
ligthBlinkOffset.EnableActions();
MyTerminalControlFactory.AddControl(ligthBlinkOffset);
}
示例9: CreateTerminalControls
protected override void CreateTerminalControls()
{
if (MyTerminalControlFactory.AreControlsCreated<MyMotorStator>())
return;
base.CreateTerminalControls();
var reverse = new MyTerminalControlButton<MyMotorStator>("Reverse", MySpaceTexts.BlockActionTitle_Reverse, MySpaceTexts.Blank, (b) => b.TargetVelocityRPM = -b.TargetVelocityRPM);
reverse.EnableAction(MyTerminalActionIcons.REVERSE);
MyTerminalControlFactory.AddControl(reverse);
var detach = new MyTerminalControlButton<MyMotorStator>("Detach", MySpaceTexts.BlockActionTitle_Detach, MySpaceTexts.Blank, (b) => b.m_connectionState.Value = new State() { TopBlockId = null, MasterToSlave = null });
detach.Enabled = (b) => b.m_connectionState.Value.TopBlockId.HasValue && b.m_isWelding == false && b.m_welded == false;
detach.Visible = (b) => b.m_canBeDetached;
var actionDetach = detach.EnableAction(MyTerminalActionIcons.NONE);
actionDetach.Enabled = (b) => b.m_canBeDetached;
MyTerminalControlFactory.AddControl(detach);
var attach = new MyTerminalControlButton<MyMotorStator>("Attach", MySpaceTexts.BlockActionTitle_Attach, MySpaceTexts.Blank, (b) => b.m_connectionState.Value = new State() { TopBlockId = 0, MasterToSlave = null });
attach.Enabled = (b) => !b.m_connectionState.Value.TopBlockId.HasValue;
attach.Visible = (b) => b.m_canBeDetached;
var actionAttach = attach.EnableAction(MyTerminalActionIcons.NONE);
actionAttach.Enabled = (b) => b.m_canBeDetached;
MyTerminalControlFactory.AddControl(attach);
var torque = new MyTerminalControlSlider<MyMotorStator>("Torque", MySpaceTexts.BlockPropertyTitle_MotorTorque, MySpaceTexts.BlockPropertyDescription_MotorTorque);
torque.Getter = (x) => x.Torque;
torque.Setter = (x, v) => x.Torque.Value = v;
torque.DefaultValueGetter = (x) => x.MotorDefinition.MaxForceMagnitude;
torque.Writer = (x, result) => MyValueFormatter.AppendTorqueInBestUnit(x.Torque, result);
torque.EnableActions();
torque.Denormalizer = (x, v) => x.DenormalizeTorque(v);
torque.Normalizer = (x, v) => x.NormalizeTorque(v);
MyTerminalControlFactory.AddControl(torque);
var brakingTorque = new MyTerminalControlSlider<MyMotorStator>("BrakingTorque", MySpaceTexts.BlockPropertyTitle_MotorBrakingTorque, MySpaceTexts.BlockPropertyDescription_MotorBrakingTorque);
brakingTorque.Getter = (x) => x.BrakingTorque;
brakingTorque.Setter = (x, v) => x.BrakingTorque.Value = v;
brakingTorque.DefaultValue = 0;
brakingTorque.Writer = (x, result) => MyValueFormatter.AppendTorqueInBestUnit(x.BrakingTorque, result);
brakingTorque.EnableActions();
brakingTorque.Denormalizer = (x, v) => x.DenormalizeTorque(v);
brakingTorque.Normalizer = (x, v) => x.NormalizeTorque(v);
MyTerminalControlFactory.AddControl(brakingTorque);
var targetVelocity = new MyTerminalControlSlider<MyMotorStator>("Velocity", MySpaceTexts.BlockPropertyTitle_MotorTargetVelocity, MySpaceTexts.BlockPropertyDescription_MotorVelocity);
targetVelocity.Getter = (x) => x.TargetVelocityRPM;
targetVelocity.Setter = (x, v) => x.TargetVelocityRPM = v;
targetVelocity.DefaultValue = 0;
targetVelocity.Writer = (x, result) => result.Concat(x.TargetVelocityRPM, 2).Append(" rpm");
targetVelocity.EnableActionsWithReset();
targetVelocity.Denormalizer = (x, v) => x.DenormalizeRPM(v);
targetVelocity.Normalizer = (x, v) => x.NormalizeRPM(v);
MyTerminalControlFactory.AddControl(targetVelocity);
var lowerLimit = new MyTerminalControlSlider<MyMotorStator>("LowerLimit", MySpaceTexts.BlockPropertyTitle_MotorMinAngle, MySpaceTexts.BlockPropertyDescription_MotorLowerLimit);
lowerLimit.Getter = (x) => x.MinAngle;
lowerLimit.Setter = (x, v) => x.MinAngle = v;
lowerLimit.DefaultValue = -361;
lowerLimit.SetLimits(-361, 360);
lowerLimit.Writer = (x, result) => WriteAngle(x.m_minAngle, result);
lowerLimit.EnableActions();
MyTerminalControlFactory.AddControl(lowerLimit);
var upperLimit = new MyTerminalControlSlider<MyMotorStator>("UpperLimit", MySpaceTexts.BlockPropertyTitle_MotorMaxAngle, MySpaceTexts.BlockPropertyDescription_MotorUpperLimit);
upperLimit.Getter = (x) => x.MaxAngle;
upperLimit.Setter = (x, v) => x.MaxAngle = v;
upperLimit.DefaultValue = 361;
upperLimit.SetLimits(-360, 361);
upperLimit.Writer = (x, result) => WriteAngle(x.m_maxAngle, result);
upperLimit.EnableActions();
MyTerminalControlFactory.AddControl(upperLimit);
var rotorDisplacement = new MyTerminalControlSlider<MyMotorStator>("Displacement", MySpaceTexts.BlockPropertyTitle_MotorRotorDisplacement, MySpaceTexts.BlockPropertyDescription_MotorRotorDisplacement);
rotorDisplacement.Getter = (x) => x.DummyDisplacement;
rotorDisplacement.Setter = (x, v) => x.DummyDisplacement = v;
rotorDisplacement.DefaultValueGetter = (x) => 0.0f;
rotorDisplacement.SetLimits((x) => x.MotorDefinition.RotorDisplacementMin, (x) => x.MotorDefinition.RotorDisplacementMax);
rotorDisplacement.Writer = (x, result) => MyValueFormatter.AppendDistanceInBestUnit(x.DummyDisplacement, result);
rotorDisplacement.Enabled = (b) => b.m_isAttached;
rotorDisplacement.EnableActions();
MyTerminalControlFactory.AddControl(rotorDisplacement);
}
示例10: CreateTerminalControls
static void CreateTerminalControls()
{
if (MyTerminalControlFactory.AreControlsCreated<MyMotorSuspension>())
return;
var steering = new MyTerminalControlCheckbox<MyMotorSuspension>("Steering", MySpaceTexts.BlockPropertyTitle_Motor_Steering, MySpaceTexts.BlockPropertyDescription_Motor_Steering);
steering.Getter = (x) => x.Steering;
steering.Setter = (x, v) => x.Steering = v;
steering.EnableAction();
steering.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(steering);
var maxSteerAngle = new MyTerminalControlSlider<MyMotorSuspension>("MaxSteerAngle", MySpaceTexts.BlockPropertyTitle_Motor_MaxSteerAngle, MySpaceTexts.BlockPropertyDescription_Motor_MaxSteerAngle);
maxSteerAngle.SetLimits((x) => 0, (x) => x.BlockDefinition.MaxSteer);
maxSteerAngle.DefaultValue = 0.45f;
maxSteerAngle.Getter = (x) => x.GetMaxSteerAngleForTerminal();
maxSteerAngle.Setter = (x, v) => x.MaxSteerAngle = v;
maxSteerAngle.Writer = (x, res) => MyMotorStator.WriteAngle(x.GetMaxSteerAngleForTerminal(), res);
maxSteerAngle.EnableActionsWithReset();
maxSteerAngle.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(maxSteerAngle);
var steerSpeed = new MyTerminalControlSlider<MyMotorSuspension>("SteerSpeed", MySpaceTexts.BlockPropertyTitle_Motor_SteerSpeed, MySpaceTexts.BlockPropertyDescription_Motor_SteerSpeed);
steerSpeed.SetLimits((x) => 0, (x) => x.BlockDefinition.SteeringSpeed * 100);
steerSpeed.DefaultValue = 2f;
steerSpeed.Getter = (x) => x.GetSteerSpeedForTerminal();
steerSpeed.Setter = (x, v) => x.SteerSpeed = v / 100;
steerSpeed.Writer = (x, res) => MyValueFormatter.AppendTorqueInBestUnit(x.GetSteerSpeedForTerminal(), res);
steerSpeed.EnableActionsWithReset();
steerSpeed.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(steerSpeed);
var steerReturnSpeed = new MyTerminalControlSlider<MyMotorSuspension>("SteerReturnSpeed", MySpaceTexts.BlockPropertyTitle_Motor_SteerReturnSpeed, MySpaceTexts.BlockPropertyDescription_Motor_SteerReturnSpeed);
steerReturnSpeed.SetLimits((x) => 0, (x) => x.BlockDefinition.SteeringSpeed * 100);
steerReturnSpeed.DefaultValue = 1f;
steerReturnSpeed.Getter = (x) => x.GetSteerReturnSpeedForTerminal();
steerReturnSpeed.Setter = (x, v) => x.SteerReturnSpeed = v / 100;
steerReturnSpeed.Writer = (x, res) => MyValueFormatter.AppendTorqueInBestUnit(x.GetSteerReturnSpeedForTerminal(), res);
steerReturnSpeed.EnableActionsWithReset();
steerReturnSpeed.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(steerReturnSpeed);
var invertSteer = new MyTerminalControlCheckbox<MyMotorSuspension>("InvertSteering", MySpaceTexts.BlockPropertyTitle_Motor_InvertSteer, MySpaceTexts.BlockPropertyDescription_Motor_InvertSteer);
invertSteer.Getter = (x) => x.InvertSteer;
invertSteer.Setter = (x, v) => x.InvertSteer = v;
invertSteer.EnableAction();
invertSteer.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(invertSteer);
var propulsion = new MyTerminalControlCheckbox<MyMotorSuspension>("Propulsion", MySpaceTexts.BlockPropertyTitle_Motor_Propulsion, MySpaceTexts.BlockPropertyDescription_Motor_Propulsion);
propulsion.Getter = (x) => x.Propulsion;
propulsion.Setter = (x, v) => x.Propulsion = v;
propulsion.EnableAction();
propulsion.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(propulsion);
var invertPropulsion = new MyTerminalControlCheckbox<MyMotorSuspension>("InvertPropulsion", MySpaceTexts.BlockPropertyTitle_Motor_InvertPropulsion, MySpaceTexts.BlockPropertyDescription_Motor_InvertPropulsion);
invertPropulsion.Getter = (x) => x.InvertPropulsion;
invertPropulsion.Setter = (x, v) => x.InvertPropulsion = v;
invertPropulsion.EnableAction();
invertPropulsion.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(invertPropulsion);
var power = new MyTerminalControlSlider<MyMotorSuspension>("Power", MySpaceTexts.BlockPropertyTitle_Motor_Power, MySpaceTexts.BlockPropertyDescription_Motor_Power);
power.SetLimits(0, 100);
power.DefaultValue = 100;
power.Getter = (x) => x.GetPowerForTerminal();
power.Setter = (x, v) => x.Power = v / 100;
power.Writer = (x, res) => res.AppendInt32((int)(x.Power * 100)).Append("%");
power.EnableActions();
power.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(power);
var friction = new MyTerminalControlSlider<MyMotorSuspension>("Friction", MySpaceTexts.BlockPropertyTitle_Motor_Friction, MySpaceTexts.BlockPropertyDescription_Motor_Friction);
friction.SetLimits(0, 100);
friction.DefaultValue = 150f / 800;
friction.Getter = (x) => x.GetFrictionForTerminal();
friction.Setter = (x, v) => x.Friction = v / 100;
friction.Writer = (x, res) => res.AppendInt32((int)(x.Friction * 100)).Append("%");
friction.EnableActions();
friction.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(friction);
var damping = new MyTerminalControlSlider<MyMotorSuspension>("Damping", MySpaceTexts.BlockPropertyTitle_Motor_Damping, MySpaceTexts.BlockPropertyTitle_Motor_Damping);
damping.SetLimits(0, 100);
damping.Getter = (x) => x.GetDampingForTerminal();
damping.Setter = (x, v) => x.Damping = v / 100;
damping.Writer = (x, res) => res.AppendInt32((int)(x.GetDampingForTerminal())).Append("%");
damping.EnableActions();
damping.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(damping);
var strength = new MyTerminalControlSlider<MyMotorSuspension>("Strength", MySpaceTexts.BlockPropertyTitle_Motor_Strength, MySpaceTexts.BlockPropertyTitle_Motor_Strength);
strength.SetLimits(0, 100);
strength.Getter = (x) => x.GetStrengthForTerminal();
strength.Setter = (x, v) => x.Strength = v / 100;
strength.Writer = (x, res) => res.AppendInt32((int)(x.GetStrengthForTerminal())).Append("%");
strength.EnableActions();
strength.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(strength);
//.........这里部分代码省略.........
示例11: MyMotorSuspension
static MyMotorSuspension()
{
var steering = new MyTerminalControlCheckbox<MyMotorSuspension>("Steering", MySpaceTexts.BlockPropertyTitle_Motor_Steering, MySpaceTexts.BlockPropertyDescription_Motor_Steering);
steering.Getter = (x) => x.Steering;
steering.Setter = (x, v) => x.SyncObject.ChangeSteering(v);
steering.EnableAction();
steering.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(steering);
var maxSteerAngle = new MyTerminalControlSlider<MyMotorSuspension>("MaxSteerAngle", MySpaceTexts.BlockPropertyTitle_Motor_MaxSteerAngle, MySpaceTexts.BlockPropertyDescription_Motor_MaxSteerAngle);
maxSteerAngle.SetLimits((x) => 0, (x) => x.BlockDefinition.MaxSteer);
maxSteerAngle.DefaultValue = 0.45f;
maxSteerAngle.Getter = (x) => x.GetMaxSteerAngleForTerminal();
maxSteerAngle.Setter = (x, v) => x.SyncObject.ChangeSlider(MySyncMotorSuspension.SliderEnum.MaxSteerAngle, v);
maxSteerAngle.Writer = (x, res) => MyMotorStator.WriteAngle(x.GetMaxSteerAngleForTerminal(), res);
maxSteerAngle.EnableActionsWithReset();
maxSteerAngle.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(maxSteerAngle);
var steerSpeed = new MyTerminalControlSlider<MyMotorSuspension>("SteerSpeed", MySpaceTexts.BlockPropertyTitle_Motor_SteerSpeed, MySpaceTexts.BlockPropertyDescription_Motor_SteerSpeed);
steerSpeed.SetLimits((x) => 0, (x) => x.BlockDefinition.SteeringSpeed * 100);
steerSpeed.DefaultValue = 2f;
steerSpeed.Getter = (x) => x.GetSteerSpeedForTerminal();
steerSpeed.Setter = (x, v) => x.SyncObject.ChangeSlider(MySyncMotorSuspension.SliderEnum.SteerSpeed, v / 100);
steerSpeed.Writer = (x, res) => MyValueFormatter.AppendTorqueInBestUnit(x.GetSteerSpeedForTerminal(), res);
steerSpeed.EnableActionsWithReset();
steerSpeed.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(steerSpeed);
var steerReturnSpeed = new MyTerminalControlSlider<MyMotorSuspension>("SteerReturnSpeed", MySpaceTexts.BlockPropertyTitle_Motor_SteerReturnSpeed, MySpaceTexts.BlockPropertyDescription_Motor_SteerReturnSpeed);
steerReturnSpeed.SetLimits((x) => 0, (x) => x.BlockDefinition.SteeringSpeed * 100);
steerReturnSpeed.DefaultValue = 1f;
steerReturnSpeed.Getter = (x) => x.GetSteerReturnSpeedForTerminal();
steerReturnSpeed.Setter = (x, v) => x.SyncObject.ChangeSlider(MySyncMotorSuspension.SliderEnum.SteerReturnSpeed, v / 100);
steerReturnSpeed.Writer = (x, res) => MyValueFormatter.AppendTorqueInBestUnit(x.GetSteerReturnSpeedForTerminal(), res);
steerReturnSpeed.EnableActionsWithReset();
steerReturnSpeed.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(steerReturnSpeed);
var invertSteer = new MyTerminalControlCheckbox<MyMotorSuspension>("InvertSteering", MySpaceTexts.BlockPropertyTitle_Motor_InvertSteer, MySpaceTexts.BlockPropertyDescription_Motor_InvertSteer);
invertSteer.Getter = (x) => x.InvertSteer;
invertSteer.Setter = (x, v) => x.SyncObject.ChangeSlider(MySyncMotorSuspension.SliderEnum.InvertSteer, (v ? 1 : 0));
invertSteer.EnableAction();
invertSteer.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(invertSteer);
var propulsion = new MyTerminalControlCheckbox<MyMotorSuspension>("Propulsion", MySpaceTexts.BlockPropertyTitle_Motor_Propulsion, MySpaceTexts.BlockPropertyDescription_Motor_Propulsion);
propulsion.Getter = (x) => x.Propulsion;
propulsion.Setter = (x, v) => x.SyncObject.ChangePropulsion(v);
propulsion.EnableAction();
propulsion.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(propulsion);
var power = new MyTerminalControlSlider<MyMotorSuspension>("Power", MySpaceTexts.BlockPropertyTitle_Motor_Power, MySpaceTexts.BlockPropertyDescription_Motor_Power);
power.SetLimits(0, 100);
power.DefaultValue = 100;
power.Getter = (x) => x.GetPowerForTerminal();
power.Setter = (x, v) => x.SyncObject.ChangePower(v / 100);
power.Writer = (x, res) => res.AppendInt32((int)(x.Power * 100)).Append("%");
power.EnableActions();
power.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(power);
var friction = new MyTerminalControlSlider<MyMotorSuspension>("Friction", MySpaceTexts.BlockPropertyTitle_Motor_Friction, MySpaceTexts.BlockPropertyDescription_Motor_Friction);
friction.SetLimits(0, 100);
friction.DefaultValue = 150f / 800;
friction.Getter = (x) => x.GetFrictionForTerminal();
friction.Setter = (x, v) => x.SyncObject.ChangeFriction(v / 100);
friction.Writer = (x, res) => res.AppendInt32((int)(x.Friction * 100)).Append("%");
friction.EnableActions();
friction.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(friction);
var damping = new MyTerminalControlSlider<MyMotorSuspension>("Damping", MySpaceTexts.BlockPropertyTitle_Motor_Damping, MySpaceTexts.BlockPropertyTitle_Motor_Damping);
damping.SetLimits(0, 100);
damping.Getter = (x) => x.GetDampingForTerminal();
damping.Setter = (x, v) => x.SyncObject.ChangeDamping(v * 0.002f);
damping.Writer = (x, res) => res.AppendInt32((int)(x.Damping / 0.002f)).Append("%");
damping.EnableActions();
damping.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(damping);
var strength = new MyTerminalControlSlider<MyMotorSuspension>("Strength", MySpaceTexts.BlockPropertyTitle_Motor_Strength, MySpaceTexts.BlockPropertyTitle_Motor_Strength);
strength.SetLimits(0, 100);
strength.Getter = (x) => x.GetStrengthForTerminal();
strength.Setter = (x, v) => x.SyncObject.ChangeStrength(v * 0.002f);
strength.Writer = (x, res) => res.AppendInt32((int)(x.Strength / 0.002f)).Append("%");
strength.EnableActions();
strength.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(strength);
var height = new MyTerminalControlSlider<MyMotorSuspension>("Height", MySpaceTexts.BlockPropertyTitle_Motor_Height, MySpaceTexts.BlockPropertyDescription_Motor_Height);
height.SetLimits((x) => x.BlockDefinition.MinHeight, (x) => x.BlockDefinition.MaxHeight);
height.DefaultValue = 0;
height.Getter = (x) => x.GetHeightForTerminal();
height.Setter = (x, v) => x.SyncObject.ChangeSlider(MySyncMotorSuspension.SliderEnum.Height, v);
height.Writer = (x, res) => MyValueFormatter.AppendDistanceInBestUnit(x.Height, res);
height.EnableActionsWithReset();
height.Enabled = (x) => x.m_constraint != null;
MyTerminalControlFactory.AddControl(height);
//.........这里部分代码省略.........
示例12: MyMotorStator
static MyMotorStator()
{
var reverse = new MyTerminalControlButton<MyMotorStator>("Reverse", MySpaceTexts.BlockActionTitle_Reverse, MySpaceTexts.Blank, (b) => b.ReverseValuesRequest());
reverse.EnableAction(MyTerminalActionIcons.REVERSE);
MyTerminalControlFactory.AddControl(reverse);
var detach = new MyTerminalControlButton<MyMotorStator>("Detach", MySpaceTexts.BlockActionTitle_Detach, MySpaceTexts.Blank, (b) => b.OnDetachRotorBtnClick());
var actionDetach = detach.EnableAction(MyTerminalActionIcons.NONE);
actionDetach.Enabled = (b) => b.m_canBeDetached;
detach.Enabled = (b) => b.m_isAttached;
detach.Visible = (b) => b.m_canBeDetached;
MyTerminalControlFactory.AddControl(detach);
var attach = new MyTerminalControlButton<MyMotorStator>("Attach", MySpaceTexts.BlockActionTitle_Attach, MySpaceTexts.Blank, (b) => b.SyncObject.AttachRotor());
var actionAttach = attach.EnableAction(MyTerminalActionIcons.NONE);
actionAttach.Enabled = (b) => b.m_canBeDetached;
attach.Enabled = (b) => !b.m_isAttached;
attach.Visible = (b) => b.m_canBeDetached;
MyTerminalControlFactory.AddControl(attach);
var torque = new MyTerminalControlSlider<MyMotorStator>("Torque", MySpaceTexts.BlockPropertyTitle_MotorTorque, MySpaceTexts.BlockPropertyDescription_MotorTorque);
torque.Getter = (x) => x.Torque;
torque.Setter = (x, v) => x.TorqueChangeRequest(v);
torque.DefaultValueGetter = (x) => x.MotorDefinition.MaxForceMagnitude;
torque.Writer = (x, result) => MyValueFormatter.AppendTorqueInBestUnit(x.Torque, result);
torque.EnableActions();
torque.Denormalizer = (x, v) => x.DenormalizeTorque(v);
torque.Normalizer = (x, v) => x.NormalizeTorque(v);
MyTerminalControlFactory.AddControl(torque);
var brakingTorque = new MyTerminalControlSlider<MyMotorStator>("BrakingTorque", MySpaceTexts.BlockPropertyTitle_MotorBrakingTorque, MySpaceTexts.BlockPropertyDescription_MotorBrakingTorque);
brakingTorque.Getter = (x) => x.BrakingTorque;
brakingTorque.Setter = (x, v) => x.BrakingTorqueChangeRequest(v);
brakingTorque.DefaultValue = 0;
brakingTorque.Writer = (x, result) => MyValueFormatter.AppendTorqueInBestUnit(x.BrakingTorque, result);
brakingTorque.EnableActions();
brakingTorque.Denormalizer = (x, v) => x.DenormalizeTorque(v);
brakingTorque.Normalizer = (x, v) => x.NormalizeTorque(v);
MyTerminalControlFactory.AddControl(brakingTorque);
var targetVelocity = new MyTerminalControlSlider<MyMotorStator>("Velocity", MySpaceTexts.BlockPropertyTitle_MotorTargetVelocity, MySpaceTexts.BlockPropertyDescription_MotorVelocity);
targetVelocity.Getter = (x) => x.GetTargetVelocityRPM();
targetVelocity.Setter = (x, v) => x.SetTargetVelocity(v);
targetVelocity.DefaultValue = 0;
targetVelocity.Writer = (x, result) => result.Concat(x.GetTargetVelocityRPM(), 2).Append(" rpm");
targetVelocity.EnableActionsWithReset();
targetVelocity.Denormalizer = (x, v) => x.DenormalizeRPM(v);
targetVelocity.Normalizer = (x, v) => x.NormalizeRPM(v);
MyTerminalControlFactory.AddControl(targetVelocity);
var lowerLimit = new MyTerminalControlSlider<MyMotorStator>("LowerLimit", MySpaceTexts.BlockPropertyTitle_MotorMinAngle, MySpaceTexts.BlockPropertyDescription_MotorLowerLimit);
lowerLimit.Getter = (x) => x.MinAngle;
lowerLimit.Setter = (x, v) => x.MinAngleChangeRequest(v);
lowerLimit.DefaultValue = -361;
lowerLimit.SetLimits(-361, 360);
lowerLimit.Writer = (x, result) => WriteAngle(x.m_minAngle, result);
lowerLimit.EnableActions();
MyTerminalControlFactory.AddControl(lowerLimit);
var upperLimit = new MyTerminalControlSlider<MyMotorStator>("UpperLimit", MySpaceTexts.BlockPropertyTitle_MotorMaxAngle, MySpaceTexts.BlockPropertyDescription_MotorUpperLimit);
upperLimit.Getter = (x) => x.MaxAngle;
upperLimit.Setter = (x, v) => x.MaxAngleChangeRequest(v);
upperLimit.DefaultValue = 361;
upperLimit.SetLimits(-360, 361);
upperLimit.Writer = (x, result) => WriteAngle(x.m_maxAngle, result);
upperLimit.EnableActions();
MyTerminalControlFactory.AddControl(upperLimit);
var rotorDisplacement = new MyTerminalControlSlider<MyMotorStator>("Displacement", MySpaceTexts.BlockPropertyTitle_MotorRotorDisplacement, MySpaceTexts.BlockPropertyDescription_MotorRotorDisplacement);
rotorDisplacement.Getter = (x) => x.DummyDisplacement;
rotorDisplacement.Setter = (x, v) => x.SyncObject.ChangeRotorDisplacement(v);
rotorDisplacement.DefaultValueGetter = (x) => 0.0f;
rotorDisplacement.SetLimits((x) => x.MotorDefinition.RotorDisplacementMin, (x) => x.MotorDefinition.RotorDisplacementMax);
rotorDisplacement.Writer = (x, result) => MyValueFormatter.AppendDistanceInBestUnit(x.DummyDisplacement, result);
rotorDisplacement.Enabled = (b) => b.m_isAttached;
rotorDisplacement.EnableActions();
MyTerminalControlFactory.AddControl(rotorDisplacement);
}
示例13: MyPistonBase
static MyPistonBase()
{
var reverse = new MyTerminalControlButton<MyPistonBase>("Reverse", MySpaceTexts.BlockActionTitle_Reverse, MySpaceTexts.Blank, (x) => x.Velocity.Value = -x.Velocity);
reverse.EnableAction(MyTerminalActionIcons.REVERSE);
MyTerminalControlFactory.AddControl(reverse);
var extendAction = new MyTerminalAction<MyPistonBase>("Extend", MyTexts.Get(MySpaceTexts.BlockActionTitle_Extend), OnExtendApplied, null, MyTerminalActionIcons.REVERSE);
extendAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true;
MyTerminalControlFactory.AddAction(extendAction);
var retractAction = new MyTerminalAction<MyPistonBase>("Retract", MyTexts.Get(MySpaceTexts.BlockActionTitle_Retract), OnRetractApplied, null, MyTerminalActionIcons.REVERSE);
retractAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true;
MyTerminalControlFactory.AddAction(retractAction);
var velocity = new MyTerminalControlSlider<MyPistonBase>("Velocity", MySpaceTexts.BlockPropertyTitle_Velocity, MySpaceTexts.Blank);
velocity.SetLimits((block) => -block.BlockDefinition.MaxVelocity, (block) => block.BlockDefinition.MaxVelocity);
velocity.DefaultValue = -0.5f;
velocity.Getter = (x) => x.Velocity;
velocity.Setter = (x, v) => x.Velocity.Value = v;
velocity.Writer = (x, res) => res.AppendDecimal(x.Velocity, 1).Append("m/s");
velocity.EnableActionsWithReset();
MyTerminalControlFactory.AddControl(velocity);
var maxDist = new MyTerminalControlSlider<MyPistonBase>("UpperLimit", MySpaceTexts.BlockPropertyTitle_MaximalDistance, MySpaceTexts.Blank);
maxDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum);
maxDist.DefaultValueGetter = (block) => block.BlockDefinition.Maximum;
maxDist.Getter = (x) => x.MaxLimit;
maxDist.Setter = (x, v) => x.MaxLimit.Value = v;
maxDist.Writer = (x, res) => res.AppendDecimal(x.MaxLimit, 1).Append("m");
maxDist.EnableActions();
MyTerminalControlFactory.AddControl(maxDist);
var minDist = new MyTerminalControlSlider<MyPistonBase>("LowerLimit", MySpaceTexts.BlockPropertyTitle_MinimalDistance, MySpaceTexts.Blank);
minDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum);
minDist.DefaultValueGetter = (block) => block.BlockDefinition.Minimum;
minDist.Getter = (x) => x.MinLimit;
minDist.Setter = (x, v) => x.MinLimit.Value = v;
minDist.Writer = (x, res) => res.AppendDecimal(x.MinLimit, 1).Append("m");
minDist.EnableActions();
MyTerminalControlFactory.AddControl(minDist);
var weldSpeed = new MyTerminalControlSlider<MyPistonBase>("Weld speed", MySpaceTexts.BlockPropertyTitle_WeldSpeed, MySpaceTexts.Blank);
weldSpeed.SetLimits((block) => 0f, (block) => MyGridPhysics.SmallShipMaxLinearVelocity());
weldSpeed.DefaultValueGetter = (block) => MyGridPhysics.LargeShipMaxLinearVelocity() - 5f;
weldSpeed.Getter = (x) => (float)Math.Sqrt(x.m_weldSpeedSq);
weldSpeed.Setter = (x, v) => x.m_weldSpeedSq.Value = v * v;
weldSpeed.Writer = (x, res) => res.AppendDecimal((float)Math.Sqrt(x.m_weldSpeedSq), 1).Append("m/s");
weldSpeed.EnableActions();
MyTerminalControlFactory.AddControl(weldSpeed);
var weldForce = new MyTerminalControlCheckbox<MyPistonBase>("Force weld", MySpaceTexts.BlockPropertyTitle_WeldForce, MySpaceTexts.Blank);
weldForce.Getter = (x) => x.m_forceWeld;
weldForce.Setter = (x, v) => x.m_forceWeld.Value = v;
weldForce.EnableAction();
MyTerminalControlFactory.AddControl(weldForce);
}
示例14: MyPistonBase
static MyPistonBase()
{
var reverse = new MyTerminalControlButton<MyPistonBase>("Reverse", MySpaceTexts.BlockActionTitle_Reverse, MySpaceTexts.Blank, (x) => x.SyncObject.SetVelocity(-x.Velocity));
reverse.EnableAction(MyTerminalActionIcons.REVERSE);
MyTerminalControlFactory.AddControl(reverse);
var extendAction = new MyTerminalAction<MyPistonBase>("Extend", MyTexts.Get(MySpaceTexts.BlockActionTitle_Extend), OnExtendApplied, null, MyTerminalActionIcons.REVERSE);
extendAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true;
MyTerminalControlFactory.AddAction(extendAction);
var retractAction = new MyTerminalAction<MyPistonBase>("Retract", MyTexts.Get(MySpaceTexts.BlockActionTitle_Retract), OnRetractApplied, null, MyTerminalActionIcons.REVERSE);
retractAction.Enabled = (b) => b.IsWorking == true && b.IsFunctional == true;
MyTerminalControlFactory.AddAction(retractAction);
var velocity = new MyTerminalControlSlider<MyPistonBase>("Velocity", MySpaceTexts.BlockPropertyTitle_Velocity, MySpaceTexts.Blank);
velocity.SetLimits((block) => -block.BlockDefinition.MaxVelocity, (block) => block.BlockDefinition.MaxVelocity);
velocity.DefaultValue = -0.5f;
velocity.Getter = (x) => x.Velocity;
velocity.Setter = (x, v) => x.SyncObject.SetVelocity(v);
velocity.Writer = (x, res) => res.AppendDecimal(x.Velocity, 1).Append("m/s");
velocity.EnableActionsWithReset();
MyTerminalControlFactory.AddControl(velocity);
var maxDist = new MyTerminalControlSlider<MyPistonBase>("UpperLimit", MySpaceTexts.BlockPropertyTitle_MaximalDistance, MySpaceTexts.Blank);
maxDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum);
maxDist.DefaultValueGetter = (block) => block.BlockDefinition.Maximum;
maxDist.Getter = (x) => x.MaxLimit;
maxDist.Setter = (x, v) => x.SyncObject.SetMax(v);
maxDist.Writer = (x, res) => res.AppendDecimal(x.MaxLimit, 1).Append("m");
maxDist.EnableActions();
MyTerminalControlFactory.AddControl(maxDist);
var minDist = new MyTerminalControlSlider<MyPistonBase>("LowerLimit", MySpaceTexts.BlockPropertyTitle_MinimalDistance, MySpaceTexts.Blank);
minDist.SetLimits((block) => block.BlockDefinition.Minimum, (block) => block.BlockDefinition.Maximum);
minDist.DefaultValueGetter = (block) => block.BlockDefinition.Minimum;
minDist.Getter = (x) => x.MinLimit;
minDist.Setter = (x, v) => x.SyncObject.SetMin(v);
minDist.Writer = (x, res) => res.AppendDecimal(x.MinLimit, 1).Append("m");
minDist.EnableActions();
MyTerminalControlFactory.AddControl(minDist);
}
示例15: MyProjector
static MyProjector()
{
if (!MyFakes.ENABLE_PROJECTOR_BLOCK)
{
return;
}
var blueprintBtn = new MyTerminalControlButton<MyProjector>("Blueprint", MySpaceTexts.Blueprints, MySpaceTexts.Blank, (p) => p.SelectBlueprint());
blueprintBtn.Enabled = (b) => b.CanProject();
blueprintBtn.SupportsMultipleBlocks = false;
MyTerminalControlFactory.AddControl(blueprintBtn);
var removeBtn = new MyTerminalControlButton<MyProjector>("Remove", MySpaceTexts.RemoveProjectionButton, MySpaceTexts.Blank, (p) => p.SyncObject.SendRemoveProjection());
removeBtn.Enabled = (b) => b.IsProjecting();
MyTerminalControlFactory.AddControl(removeBtn);
var keepProjectionToggle = new MyTerminalControlCheckbox<MyProjector>("KeepProjection", MySpaceTexts.KeepProjectionToggle, MySpaceTexts.KeepProjectionTooltip);
keepProjectionToggle.Getter = (x) => x.m_keepProjection;
keepProjectionToggle.Setter = (x, v) =>
{
x.SyncObject.SendNewKeepProjection(v);
};
keepProjectionToggle.EnableAction();
keepProjectionToggle.Enabled = (b) => b.IsProjecting();
MyTerminalControlFactory.AddControl(keepProjectionToggle);
//ShowOnlyBuildable
var showOnlyBuildableBlockToggle = new MyTerminalControlCheckbox<MyProjector>("ShowOnlyBuildable", MySpaceTexts.ShowOnlyBuildableBlockToggle, MySpaceTexts.ShowOnlyBuildableTooltip);
showOnlyBuildableBlockToggle.Getter = (x) => x.m_showOnlyBuildable;
showOnlyBuildableBlockToggle.Setter = (x, v) =>
{
x.m_showOnlyBuildable = v;
x.OnOffsetsChanged();
};
showOnlyBuildableBlockToggle.Enabled = (b) => b.IsProjecting();
MyTerminalControlFactory.AddControl(showOnlyBuildableBlockToggle);
//HideArmorBlocks
var hideArmorBlockToggle = new MyTerminalControlCheckbox<MyProjector>("HideArmorBlocks", MySpaceTexts.HideArmorBlockToggle, MySpaceTexts.HideArmorBlockTooltip);
hideArmorBlockToggle.Getter = (x) => x.m_hideArmorBlock;
hideArmorBlockToggle.Setter = (x, v) =>
{
x.m_hideArmorBlock = v;
x.OnOffsetsChanged();
};
hideArmorBlockToggle.Enabled = (b) => b.IsProjecting();
MyTerminalControlFactory.AddControl(hideArmorBlockToggle);
//Position
var offsetX = new MyTerminalControlSlider<MyProjector>("X", MySpaceTexts.BlockPropertyTitle_ProjectionOffsetX, MySpaceTexts.Blank);
offsetX.SetLimits(-50, 50);
offsetX.DefaultValue = 0;
offsetX.Getter = (x) => x.m_projectionOffset.X;
offsetX.Setter = (x, v) =>
{
x.m_projectionOffset.X = Convert.ToInt32(v);
x.OnOffsetsChanged();
};
offsetX.Writer = (x, result) => result.AppendInt32((int)(x.m_projectionOffset.X));
offsetX.EnableActions(step: 0.01f);
offsetX.Enabled = (x) => x.IsProjecting();
MyTerminalControlFactory.AddControl(offsetX);
var offsetY = new MyTerminalControlSlider<MyProjector>("Y", MySpaceTexts.BlockPropertyTitle_ProjectionOffsetY, MySpaceTexts.Blank);
offsetY.SetLimits(-50, 50);
offsetY.DefaultValue = 0;
offsetY.Getter = (x) => x.m_projectionOffset.Y;
offsetY.Setter = (x, v) =>
{
x.m_projectionOffset.Y = Convert.ToInt32(v);
x.OnOffsetsChanged();
};
offsetY.Writer = (x, result) => result.AppendInt32((int)(x.m_projectionOffset.Y));
offsetY.EnableActions(step: 0.01f);
offsetY.Enabled = (x) => x.IsProjecting();
MyTerminalControlFactory.AddControl(offsetY);
var offsetZ = new MyTerminalControlSlider<MyProjector>("Z", MySpaceTexts.BlockPropertyTitle_ProjectionOffsetZ, MySpaceTexts.Blank);
offsetZ.SetLimits(-50, 50);
offsetZ.DefaultValue = 0;
offsetZ.Getter = (x) => x.m_projectionOffset.Z;
offsetZ.Setter = (x, v) =>
{
x.m_projectionOffset.Z = Convert.ToInt32(v);
x.OnOffsetsChanged();
};
offsetZ.Writer = (x, result) => result.AppendInt32((int)(x.m_projectionOffset.Z));
offsetZ.EnableActions(step: 0.01f);
offsetZ.Enabled = (x) => x.IsProjecting();
MyTerminalControlFactory.AddControl(offsetZ);
//Rotation
var rotationX = new MyTerminalControlSlider<MyProjector>("RotX", MySpaceTexts.BlockPropertyTitle_ProjectionRotationX, MySpaceTexts.Blank);
rotationX.SetLimits(-2, 2);
rotationX.DefaultValue = 0;
rotationX.Getter = (x) => x.m_projectionRotation.X;
rotationX.Setter = (x, v) =>
{
//.........这里部分代码省略.........