- feat: new on-screen widget lsWheel/rsWheel, direction wheel for RPG games.
- feat: direct walkmode test for lsWheel/rsWheel - feat: direction minimum offset test for all on-screen widgets, gyro->stick mapping & physical controller.
This commit is contained in:
+82
-9
@@ -12,7 +12,7 @@
|
||||
#import "LayoutOnScreenControlsViewController.h"
|
||||
#import "OSCProfilesTableViewController.h"
|
||||
#import "OnScreenButtonState.h"
|
||||
//#import "OnScreenControls.h"
|
||||
#import "OnScreenControls.h"
|
||||
#import "OSCProfilesManager.h"
|
||||
#import "LocalizationHelper.h"
|
||||
#import "VoidLink-Swift.h"
|
||||
@@ -153,6 +153,7 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
widgetView.translatesAutoresizingMaskIntoConstraints = NO; // weird but this is mandatory, or you will find no key views added to the right place
|
||||
widgetView.widthFactor = buttonState.widthFactor;
|
||||
widgetView.heightFactor = buttonState.heightFactor;
|
||||
widgetView.componentSizeFactor = buttonState.componentSizeFactor;
|
||||
widgetView.borderWidth = buttonState.borderWidth;
|
||||
widgetView.highlightSizeFactor = buttonState.highlightSizeFactor;
|
||||
widgetView.autoTapInterval = buttonState.autoTapInterval;
|
||||
@@ -167,6 +168,7 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
widgetView.decelerationRateX = buttonState.decelerationRateX;
|
||||
widgetView.decelerationRateY = buttonState.decelerationRateY;
|
||||
widgetView.stickIndicatorOffset = buttonState.stickIndicatorOffset;
|
||||
widgetView.dWheelWalkModeThreshold = buttonState.walkModeThreshold;
|
||||
widgetView.minStickOffset = buttonState.minStickOffset;
|
||||
widgetView.buttonMode = buttonState.buttonMode;
|
||||
// Add the widgetView to the view controller's view
|
||||
@@ -493,6 +495,7 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
#pragma mark - UIButton Actions
|
||||
|
||||
- (IBAction) closeTapped:(id)sender {
|
||||
[self clearSickInput];
|
||||
[self dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
|
||||
@@ -736,6 +739,7 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
newWidget.translatesAutoresizingMaskIntoConstraints = NO; // weird but this is mandatory, or you will find no key views added to the right place
|
||||
newWidget.widthFactor = widget.widthFactor;
|
||||
newWidget.heightFactor = widget.heightFactor;
|
||||
newWidget.componentSizeFactor = widget.componentSizeFactor;
|
||||
newWidget.borderWidth = widget.borderWidth;
|
||||
newWidget.highlightSizeFactor = widget.highlightSizeFactor;
|
||||
newWidget.autoTapInterval = widget.autoTapInterval;
|
||||
@@ -748,6 +752,7 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
newWidget.decelerationRateX = widget.decelerationRateX;
|
||||
newWidget.decelerationRateY = widget.decelerationRateY;
|
||||
newWidget.stickIndicatorOffset = widget.stickIndicatorOffset;
|
||||
newWidget.dWheelWalkModeThreshold = widget.dWheelWalkModeThreshold;
|
||||
newWidget.minStickOffset = widget.minStickOffset;
|
||||
[newWidget setVibrationWithStyle:widget.vibrationStyle];
|
||||
newWidget.mouseButtonAction = widget.mouseButtonAction;
|
||||
@@ -796,6 +801,7 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
|
||||
/* show pop up notification that lets users choose to save the current OSC layout configuration as a profile they can load when they want. User can also choose to cancel out of this pop up */
|
||||
- (IBAction) saveTapped:(id)sender {
|
||||
[self clearSickInput];
|
||||
[OSCProfilesManager setLayoutViewBounds:self.view.bounds];
|
||||
|
||||
if([self->profilesManager updateSelectedProfile:self.layoutOSC.OSCButtonLayers]){
|
||||
@@ -859,6 +865,7 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
|
||||
[self hideStickIndicators];
|
||||
|
||||
[self clearSickInput];
|
||||
// receive the selected widgetView obj passed from the notification
|
||||
[self enableCommonWidgetTools];
|
||||
|
||||
@@ -893,7 +900,9 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
[self.sensitivityXSlider setMinimumValue:selectedWidgetView.sensitivityXMin];
|
||||
[self.sensitivityXSlider setMaximumValue:selectedWidgetView.sensitivityXMax];
|
||||
[self.sensitivityXSlider setValue:self->selectedWidgetView.sensitivityFactorX];
|
||||
[self.sensitivityXLabel setText:[LocalizationHelper localizedStringForKey:@"SensitivityX: %.2f", self->selectedWidgetView.sensitivityFactorX]];
|
||||
[self.sensitivityXLabel setText:[LocalizationHelper localizedStringForKey:
|
||||
selectedWidgetView.hasSensitivityY ? @"SensitivityX: %.2f" : @"Sensitivity: %.2f",
|
||||
self->selectedWidgetView.sensitivityFactorX]];
|
||||
[self autoFitLabel:self.sensitivityXLabel];
|
||||
}
|
||||
|
||||
@@ -913,6 +922,13 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
[self autoFitLabel:self.minStickOffsetLabel];
|
||||
}
|
||||
|
||||
self.walkModeThresholdStack.hidden = !selectedWidgetView.isStickWheel;
|
||||
if(selectedWidgetView.isStickWheel){
|
||||
[self.walkModeThresholdSlider setValue:self->selectedWidgetView.dWheelWalkModeThreshold];
|
||||
[self.walkModeThresholdLabel setText:[LocalizationHelper localizedStringForKey:@"Walkmode threshold: %.0f ", self->selectedWidgetView.dWheelWalkModeThreshold]];
|
||||
[self autoFitLabel:self.walkModeThresholdLabel];
|
||||
}
|
||||
|
||||
self.slideThresholdStack.hidden = !selectedWidgetView.hasSlideThreshold;
|
||||
if(selectedWidgetView.hasSlideThreshold){
|
||||
[self.slideThresholdSlider setMinimumValue:selectedWidgetView.slideThresholdMin];
|
||||
@@ -964,13 +980,18 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
[self->selectedWidgetView updateStickIndicator];*/
|
||||
}
|
||||
|
||||
[self.widgetSizeSlider setValue: self->selectedWidgetView.deNormalizedWidthFactor];
|
||||
[self.widgetSizeSlider setValue: self->selectedWidgetView.denormalizedWidthFactor];
|
||||
[self autoFitLabel:self.widgetSizeLabel];
|
||||
[self.widgetSizeLabel setText:[LocalizationHelper localizedStringForKey:@"Size: %.2f", self->selectedWidgetView.deNormalizedWidthFactor]];
|
||||
[self.widgetSizeLabel setText:[LocalizationHelper localizedStringForKey:@"Size: %.2f", self->selectedWidgetView.denormalizedWidthFactor]];
|
||||
|
||||
[self.widgetHeightSlider setValue: self->selectedWidgetView.deNormalizedHeightFactor];
|
||||
[self.widgetHeightSlider setValue: self->selectedWidgetView.denormalizedHeightFactor];
|
||||
[self autoFitLabel:self.widgetHeightLabel];
|
||||
[self.widgetHeightLabel setText:[LocalizationHelper localizedStringForKey:@"Height: %.2f", self->selectedWidgetView.deNormalizedHeightFactor]];
|
||||
[self.widgetHeightLabel setText:[LocalizationHelper localizedStringForKey:@"Height: %.2f", self->selectedWidgetView.denormalizedHeightFactor]];
|
||||
|
||||
self.componentSizeStack.hidden = !self->selectedWidgetView.hasComponent;
|
||||
[self.componentSizeSlider setValue: self->selectedWidgetView.denormalizedComponentSizeFactor];
|
||||
[self autoFitLabel:self.componentSizeLabel];
|
||||
[self.componentSizeLabel setText:[LocalizationHelper localizedStringForKey:@"Component size: %.2f ", self->selectedWidgetView.denormalizedComponentSizeFactor]];
|
||||
|
||||
[self loadWidgetAlphas];
|
||||
[self autoFitLabel:self.widgetAlphaLabel];
|
||||
@@ -1085,6 +1106,16 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
}
|
||||
}
|
||||
|
||||
- (void)componentSizeSliderMoved:(UISlider* )sender{
|
||||
[self.componentSizeLabel setText:[LocalizationHelper localizedStringForKey:@"Component size: %.2f ", sender.value]];
|
||||
if(self->selectedWidgetView != nil && self->widgetViewSelected){
|
||||
self->selectedWidgetView.translatesAutoresizingMaskIntoConstraints = true; // this is mandatory to prevent unexpected key view location change
|
||||
self->selectedWidgetView.componentSizeFactor = sender.value;
|
||||
[self->selectedWidgetView resizeWidgetView];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (void)widgetAlphaSliderMoved:(UISlider* )sender{
|
||||
if(self->selectedWidgetView != nil && self->widgetViewSelected){
|
||||
switch(alphaSliderMode){
|
||||
@@ -1171,7 +1202,9 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
}
|
||||
|
||||
- (void)sensitivityXSliderMoved:(UISlider* )sender{
|
||||
[self.sensitivityXLabel setText:[LocalizationHelper localizedStringForKey:@"SensitivityX: %.2f", sender.value]];
|
||||
[self.sensitivityXLabel setText:[LocalizationHelper localizedStringForKey:
|
||||
selectedWidgetView.hasSensitivityY ? @"SensitivityX: %.2f" : @"Sensitivity: %.2f",
|
||||
sender.value]];
|
||||
[self.sensitivityYLabel setText:[LocalizationHelper localizedStringForKey:@"SensitivityY: %.2f", sender.value]];
|
||||
[self.sensitivityYSlider setValue:sender.value];
|
||||
if(self->selectedWidgetView != nil && self->widgetViewSelected){
|
||||
@@ -1187,9 +1220,41 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
return;
|
||||
}
|
||||
|
||||
- (void)walkModeThresholdSliderMoved:(UISlider* )sender{
|
||||
[self.walkModeThresholdLabel setText:[LocalizationHelper localizedStringForKey:@"Walkmode threshold: %.0f ", sender.value]];
|
||||
if(self->selectedWidgetView != nil && self->widgetViewSelected){ self->selectedWidgetView.dWheelWalkModeThreshold = sender.value;
|
||||
if(!OnScreenControls.shared) return;
|
||||
if([selectedWidgetView.touchPadString isEqualToString:@"LSWHEEL"]) [OnScreenControls.shared sendLeftStickTouchPadEvent:0 :sender.value];
|
||||
if([selectedWidgetView.touchPadString isEqualToString:@"RSWHEEL"]) [OnScreenControls.shared sendRightStickTouchPadEvent:0 :sender.value];
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
- (void)clearSickInput{
|
||||
if(self->selectedWidgetView != nil && self->widgetViewSelected){
|
||||
[OnScreenControls.shared clearLeftStickTouchPadFlag];
|
||||
[OnScreenControls.shared clearRightStickTouchPadFlag];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)minStickOffsetSliderMoved:(UISlider* )sender{
|
||||
[self.minStickOffsetLabel setText:[LocalizationHelper localizedStringForKey:@"Minimum offset: %.0f", sender.value]];
|
||||
if(self->selectedWidgetView != nil && self->widgetViewSelected) self->selectedWidgetView.minStickOffset = sender.value;
|
||||
if(self->selectedWidgetView != nil && self->widgetViewSelected){
|
||||
self->selectedWidgetView.minStickOffset = sender.value;
|
||||
if(!OnScreenControls.shared) return;
|
||||
if([selectedWidgetView.touchPadString isEqualToString:@"LSPAD"]
|
||||
|| [selectedWidgetView.touchPadString isEqualToString:@"LSVPAD"]
|
||||
|| [selectedWidgetView.touchPadString isEqualToString:@"LSWHEEL"]
|
||||
){
|
||||
[OnScreenControls.shared sendLeftStickTouchPadEvent:sender.value :0];
|
||||
}
|
||||
if([selectedWidgetView.touchPadString isEqualToString:@"RSPAD"]
|
||||
|| [selectedWidgetView.touchPadString isEqualToString:@"RSVPAD"]
|
||||
|| [selectedWidgetView.touchPadString isEqualToString:@"RSWHEEL"]
|
||||
){
|
||||
[OnScreenControls.shared sendRightStickTouchPadEvent:sender.value :0];
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1335,6 +1400,10 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
[self.widgetHeightSlider addTarget:self action:@selector(widgetHeightSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
|
||||
self.widgetHeightLabel.text = [LocalizationHelper localizedStringForKey:@"Height"];
|
||||
self.widgetHeightStack.hidden = YES;
|
||||
|
||||
[self.componentSizeSlider addTarget:self action:@selector(componentSizeSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
|
||||
self.componentSizeLabel.text = [LocalizationHelper localizedStringForKey:@"Component size"];
|
||||
self.componentSizeStack.hidden = YES;
|
||||
|
||||
alphaSliderMode = widgetAlpha;
|
||||
[self.widgetAlphaSlider addTarget:self action:@selector(widgetAlphaSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
|
||||
@@ -1370,10 +1439,14 @@ typedef NS_ENUM(NSUInteger, DecelerationRateSliderMode) {
|
||||
self.sensitivityYLabel.text = [LocalizationHelper localizedStringForKey:@"SensitivityY"];
|
||||
self.sensitivityYStack.hidden = YES;
|
||||
|
||||
[self.walkModeThresholdSlider addTarget:self action:@selector(walkModeThresholdSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
|
||||
self.walkModeThresholdLabel.text = [LocalizationHelper localizedStringForKey:@"Walkmode threshold"];
|
||||
self.walkModeThresholdStack.hidden = YES;
|
||||
|
||||
[self.minStickOffsetSlider addTarget:self action:@selector(minStickOffsetSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
|
||||
self.minStickOffsetLabel.text = [LocalizationHelper localizedStringForKey:@"Minimum offset"];
|
||||
self.minStickOffsetStack.hidden = YES;
|
||||
|
||||
|
||||
[self.slideThresholdSlider addTarget:self action:@selector(slideThresholdSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
|
||||
self.slideThresholdLabel.text = [LocalizationHelper localizedStringForKey:@"Slide threshold"];
|
||||
self.slideThresholdStack.hidden = YES;
|
||||
|
||||
Reference in New Issue
Block a user