Skip to content

Commit

Permalink
Option to activate boat mode by default
Browse files Browse the repository at this point in the history
  • Loading branch information
Ninjabrain1 committed Mar 28, 2024
1 parent d54fbfc commit 7854e18
Show file tree
Hide file tree
Showing 9 changed files with 69 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import ninjabrainbot.event.DisposeHandler;
import ninjabrainbot.gui.components.labels.ThemedLabel;
import ninjabrainbot.gui.components.layout.Divider;
import ninjabrainbot.gui.components.layout.StackPanel;
import ninjabrainbot.gui.components.preferences.CheckboxPanel;
import ninjabrainbot.gui.components.preferences.DoublePreferencePanel;
Expand All @@ -21,7 +22,8 @@

public class HighPrecisionOptionsPanel extends JPanel {

private final CheckboxPanel sensitivityCheckbox;
private final CheckboxPanel enableBoatMeasurementsCheckbox;
private final CheckboxPanel activateBoatOnResetCheckbox;
private final FloatPreferencePanel resolutionHeight;
private final DoublePreferencePanel sensitivity;
private final FloatPreferencePanel boatErrorLimit;
Expand All @@ -42,54 +44,60 @@ public int getTextSize(SizePreference p) {
return p.TEXT_SIZE_SMALL;
}
});
column1.add(new CheckboxPanel(styleManager, I18n.get("settings.tall_resolution"), preferences.useTallRes));
JPanel tallResRow = new JPanel(new GridLayout(1, 2, 2 * OptionsFrame.PADDING, 0));
tallResRow.setOpaque(false);
tallResRow.add(new CheckboxPanel(styleManager, I18n.get("settings.tall_resolution"), preferences.useTallRes));
resolutionHeight = new FloatPreferencePanel(styleManager, I18n.get("settings.resolution_height"), preferences.resolutionHeight);
resolutionHeight.setDecimals(0);
resolutionHeight.setEnabled(preferences.useTallRes.get());
column1.add(resolutionHeight);
tallResRow.add(resolutionHeight);
column1.add(tallResRow);

// Precise Sens Column
sensitivityCheckbox = new CheckboxPanel(styleManager, I18n.get("settings.use_precise_angle"), preferences.usePreciseAngle);
sensitivityCheckbox.setEnabled(preferences.useTallRes.get());
column1.add(sensitivityCheckbox);
column1.add(new Divider(styleManager));

enableBoatMeasurementsCheckbox = new CheckboxPanel(styleManager, I18n.get("settings.use_precise_angle"), preferences.usePreciseAngle);
column1.add(enableBoatMeasurementsCheckbox);

sensitivity = new DoublePreferencePanel(styleManager, I18n.get("settings.sensitivity"), preferences.sensitivity);
sensitivity.setWidth(150);
sensitivity.setDecimals(10);
sensitivity.setEnabled(preferences.usePreciseAngle.get() && preferences.useTallRes.get());
column1.add(sensitivity);
if (KeyboardListener.registered) {
enterBoatHotkey = new HotkeyPanel(styleManager, I18n.get("settings.enter_boat"), preferences.hotkeyBoat);
enterBoatHotkey.setEnabled(preferences.usePreciseAngle.get() && preferences.useTallRes.get());
column1.add(enterBoatHotkey);
}
activateBoatOnResetCheckbox = new CheckboxPanel(styleManager, I18n.get("settings.enter_boat_on_reset"), preferences.activateBoatOnReset);
column1.add(activateBoatOnResetCheckbox);

boatErrorLimit = new FloatPreferencePanel(styleManager, I18n.get("settings.boat_error"), preferences.boatErrorLimit);
boatErrorLimit.setDecimals(2);
boatErrorLimit.setEnabled(preferences.usePreciseAngle.get() && preferences.useTallRes.get());
column1.add(boatErrorLimit);

sigmaBoat = new FloatPreferencePanel(styleManager, I18n.get("settings.boat_standard_deviation"), preferences.sigmaBoat);
sigmaBoat.setEnabled(preferences.usePreciseAngle.get() && preferences.useTallRes.get());
column1.add(sigmaBoat);

disposeHandler.add(preferences.useTallRes.whenModified().subscribeEDT(b -> setTallResolutionEnabled(b, preferences)));
disposeHandler.add(preferences.usePreciseAngle.whenModified().subscribeEDT(this::setPreciseAngleEnabled));
disposeHandler.add(preferences.sigmaBoat.whenModified().subscribeEDT(sigmaBoat::updateValue));
setTallResolutionEnabled(preferences.useTallRes.get(), preferences);
}

private void setTallResolutionEnabled(boolean b, NinjabrainBotPreferences preferences) {
resolutionHeight.setEnabled(b);
resolutionHeight.descLabel.updateColors();
sensitivityCheckbox.setEnabled(b);
sensitivityCheckbox.descLabel.updateColors();
enableBoatMeasurementsCheckbox.setEnabled(b);
enableBoatMeasurementsCheckbox.descLabel.updateColors();
setPreciseAngleEnabled(b && preferences.usePreciseAngle.get());
}

private void setPreciseAngleEnabled(boolean b) {
sensitivity.setEnabled(b);
enterBoatHotkey.setEnabled(b);
activateBoatOnResetCheckbox.setEnabled(b);
activateBoatOnResetCheckbox.descLabel.updateColors();
boatErrorLimit.setEnabled(b);
sigmaBoat.setEnabled(b);
if (enterBoatHotkey != null)
enterBoatHotkey.setEnabled(b);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public class NinjabrainBotPreferences {
public final BooleanPreference colorCodeNegativeCoords;
public final BooleanPreference useTallRes;
public final BooleanPreference usePreciseAngle;
public final BooleanPreference activateBoatOnReset;
public final BooleanPreference useOverlay;
public final BooleanPreference overlayAutoHide;
public final BooleanPreference overlayHideWhenLocked;
Expand Down Expand Up @@ -115,6 +116,7 @@ public NinjabrainBotPreferences(IPreferenceSource source) {
colorCodeNegativeCoords = new BooleanPreference("color_negative_coords", false, source);
useTallRes = new BooleanPreference("use_tall_res", false, source);
usePreciseAngle = new BooleanPreference("use_precise_angle", false, source);
activateBoatOnReset = new BooleanPreference("activate_boat_on_reset", false, source);
useOverlay = new BooleanPreference("use_obs_overlay", false, source);
overlayAutoHide = new BooleanPreference("overlay_auto_hide", false, source);
overlayHideWhenLocked = new BooleanPreference("overlay_lock_hide", false, source);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/ninjabrainbot/model/ModelState.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public ModelState(NinjabrainBotPreferences preferences) {
this.domainModel = domainModel;
actionExecutor = new ActionExecutor(domainModel);
environmentState = disposeHandler.add(new EnvironmentState(domainModel, preferences));
dataState = disposeHandler.add(new DataState(domainModel, environmentState));
dataState = disposeHandler.add(new DataState(domainModel, environmentState, preferences.activateBoatOnReset.get()));
domainModel.finishInitialization();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ninjabrainbot.model.actions.boat;

import ninjabrainbot.model.actions.IAction;
import ninjabrainbot.model.datastate.IDataState;
import ninjabrainbot.model.datastate.highprecision.IBoatDataState;

public class ResetBoatStateAction implements IAction {

private final IDataState dataState;

public ResetBoatStateAction(IDataState dataState) {
this.dataState = dataState;
}

@Override
public void execute() {
if (dataState.locked().get())
return;

IBoatDataState boatDataState = dataState.boatDataState();
boatDataState.enteringBoat().reset();
boatDataState.boatState().reset();
boatDataState.boatAngle().reset();
}
}
6 changes: 5 additions & 1 deletion src/main/java/ninjabrainbot/model/datastate/DataState.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,18 @@ public class DataState implements IDataState, IDisposable {
private final DisposeHandler disposeHandler = new DisposeHandler();

public DataState(IDomainModel domainModel, IEnvironmentState environmentState) {
this(domainModel, environmentState, false);
}

public DataState(IDomainModel domainModel, IEnvironmentState environmentState, boolean isBoatActivatedByDefault) {
divineContext = disposeHandler.add(new DivineContext(domainModel));
throwSet = new ListComponent<>(domainModel, 10);
playerPosition = new DataComponent<>(domainModel);
locked = new DataComponent<>(domainModel, false);

calculatorManager = disposeHandler.add(new CalculatorManager(domainModel, environmentState, throwSet, playerPosition, divineContext));
allAdvancementsDataState = disposeHandler.add(new AllAdvancementsDataState(calculatorManager.topPrediction(), domainModel, environmentState));
boatDataState = new BoatDataState(domainModel);
boatDataState = new BoatDataState(domainModel, isBoatActivatedByDefault);

resultTypeProvider = disposeHandler.add(new ResultTypeProvider(this, domainModel));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,13 @@ public class BoatDataState implements IBoatDataState {
private final DataComponent<BoatState> boatState;

public BoatDataState(IDomainModel domainModel) {
enteringBoat = new DataComponent<>(domainModel, false);
this(domainModel, false);
}

public BoatDataState(IDomainModel domainModel, boolean isBoatActivatedByDefault) {
enteringBoat = new DataComponent<>(domainModel, isBoatActivatedByDefault);
boatAngle = new DataComponent<>(domainModel);
boatState = new DataComponent<>(domainModel, BoatState.NONE);
boatState = new DataComponent<>(domainModel, isBoatActivatedByDefault ? BoatState.MEASURING : BoatState.NONE);
}

@Override
Expand Down
10 changes: 6 additions & 4 deletions src/main/java/ninjabrainbot/model/input/HotkeyInputHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import ninjabrainbot.event.IDisposable;
import ninjabrainbot.io.preferences.NinjabrainBotPreferences;
import ninjabrainbot.model.actions.IActionExecutor;
import ninjabrainbot.model.actions.boat.ResetBoatStateAction;
import ninjabrainbot.model.actions.boat.ToggleEnteringBoatAction;
import ninjabrainbot.model.actions.common.ResetAction;
import ninjabrainbot.model.actions.common.ToggleLockedAction;
Expand Down Expand Up @@ -36,6 +37,7 @@ public HotkeyInputHandler(NinjabrainBotPreferences preferences, IDomainModel dom
disposeHandler.add(preferences.hotkeyBoat.whenTriggered().subscribe(this::toggleEnteringBoatIfNotLocked));
disposeHandler.add(preferences.hotkeyLock.whenTriggered().subscribe(__ -> actionExecutor.executeImmediately(new ToggleLockedAction(dataState))));
disposeHandler.add(preferences.usePreciseAngle.whenModified().subscribe(this::resetBoatState));
disposeHandler.add(preferences.useTallRes.whenModified().subscribe(this::resetBoatState));
}

private void resetIfNotLocked() {
Expand Down Expand Up @@ -64,13 +66,13 @@ private void toggleAltStdIfNotLocked() {
}

private void toggleEnteringBoatIfNotLocked() {
if (preferences.usePreciseAngle.get() && !dataState.locked().get() && !dataState.allAdvancementsDataState().allAdvancementsModeEnabled().get())
if (preferences.useTallRes.get() && preferences.usePreciseAngle.get() && !dataState.locked().get() && !dataState.allAdvancementsDataState().allAdvancementsModeEnabled().get())
actionExecutor.executeImmediately(new ToggleEnteringBoatAction(dataState));
}

private void resetBoatState(){
if (!preferences.usePreciseAngle.get() && dataState.boatDataState().enteringBoat().get())
actionExecutor.executeImmediately(new ToggleEnteringBoatAction(dataState));
private void resetBoatState() {
if (!(preferences.useTallRes.get() && preferences.usePreciseAngle.get()))
actionExecutor.executeImmediately(new ResetBoatStateAction(dataState));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ private IAction getActionForInputtedPlayerPosition(IDetailedPlayerPosition playe
if (dataState.allAdvancementsDataState().allAdvancementsModeEnabled().get())
return new TryAddAllAdvancementsStructureAction(dataState, playerPosition);

if (dataState.boatDataState().enteringBoat().get())
if (preferences.useTallRes.get() && preferences.usePreciseAngle.get() && dataState.boatDataState().enteringBoat().get())
return new SetBoatAngleAction(dataState.boatDataState(), playerPosition.horizontalAngle(), preferences);

if (playerPosition.lookingBelowHorizon())
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/lang/I18n.properties
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ settings.keyboard_shortcuts=Hotkeys
settings.up_001_to_last_angle=Change the last angle by +0.01
settings.down_001_to_last_angle=Change the last angle by -0.01
settings.enter_boat=Indicate boat angle reset on next F3+C
settings.enter_boat_on_reset=Enter boat mode automatically after resetting (requires restart)
settings.not_in_use=Not in use
settings.overlay=OBS overlay
settings.overlay_explanation=An image that looks identical to Ninjabrain Bot, but automatically hides when nothing is being shown. Add in OBS using an image source.
Expand Down

0 comments on commit 7854e18

Please sign in to comment.