Start of cheat creation from watch panels. Cheat editing is still not finished so it's not usable quite yet.

This commit is contained in:
Brendan Robert 2015-08-23 01:46:01 -05:00
parent 76874ac514
commit bed635c7fc
2 changed files with 70 additions and 11 deletions

View File

@ -71,12 +71,15 @@ public class MetaCheat extends Cheats {
public int getX() { public int getX() {
return x; return x;
} }
public int getY() { public int getY() {
return y; return y;
} }
public int getWidth() { public int getWidth() {
return width; return width;
} }
public int getHeight() { public int getHeight() {
return height; return height;
} }
@ -103,6 +106,43 @@ public class MetaCheat extends Cheats {
} }
} }
public static class Cheat extends RAMListener {
IntegerProperty addr;
IntegerProperty val;
BooleanProperty active;
public Cheat(int address, int value) {
super(RAMEvent.TYPE.ANY, RAMEvent.SCOPE.ADDRESS, RAMEvent.VALUE.ANY);
addr = new SimpleIntegerProperty(address);
val = new SimpleIntegerProperty(value);
active = new SimpleBooleanProperty(true);
setScopeStart(address);
}
@Override
protected void doConfig() {
}
@Override
protected void doEvent(RAMEvent e) {
if (active.get()) {
e.setNewValue(val.get());
}
}
public BooleanProperty activeProperty() {
return active;
}
public IntegerProperty addressProperty() {
return addr;
}
public IntegerProperty valueProperty() {
return val;
}
}
MetacheatUI ui; MetacheatUI ui;
public int fadeRate = 1; public int fadeRate = 1;
@ -119,7 +159,7 @@ public class MetaCheat extends Cheats {
private final BooleanProperty signedProperty = new SimpleBooleanProperty(false); private final BooleanProperty signedProperty = new SimpleBooleanProperty(false);
private final StringProperty searchValueProperty = new SimpleStringProperty("0"); private final StringProperty searchValueProperty = new SimpleStringProperty("0");
private final StringProperty changeByProperty = new SimpleStringProperty("0"); private final StringProperty changeByProperty = new SimpleStringProperty("0");
private final ObservableList<RAMListener> cheatList = FXCollections.observableArrayList(); private final ObservableList<Cheat> cheatList = FXCollections.observableArrayList();
private final ObservableList<SearchResult> resultList = FXCollections.observableArrayList(); private final ObservableList<SearchResult> resultList = FXCollections.observableArrayList();
private final ObservableList<State> snapshotList = FXCollections.observableArrayList(); private final ObservableList<State> snapshotList = FXCollections.observableArrayList();
@ -180,6 +220,18 @@ public class MetaCheat extends Cheats {
void registerListeners() { void registerListeners() {
} }
public void addCheat(Cheat cheat) {
cheat.activeProperty().set(true);
cheatList.add(cheat);
computer.getMemory().addListener(cheat);
}
@Override
protected void unregisterListeners() {
super.unregisterListeners();
cheatList.stream().forEach(computer.getMemory()::removeListener);
}
@Override @Override
protected String getDeviceName() { protected String getDeviceName() {
return "MetaCheat"; return "MetaCheat";
@ -230,7 +282,7 @@ public class MetaCheat extends Cheats {
return changeByProperty; return changeByProperty;
} }
public ObservableList<RAMListener> getCheats() { public ObservableList<Cheat> getCheats() {
return cheatList; return cheatList;
} }

View File

@ -3,6 +3,7 @@ package jace.ui;
import com.sun.glass.ui.Application; import com.sun.glass.ui.Application;
import jace.Emulator; import jace.Emulator;
import jace.cheat.MetaCheat; import jace.cheat.MetaCheat;
import jace.cheat.MetaCheat.Cheat;
import jace.cheat.MetaCheat.SearchChangeType; import jace.cheat.MetaCheat.SearchChangeType;
import jace.cheat.MetaCheat.SearchType; import jace.cheat.MetaCheat.SearchType;
import jace.core.RAMListener; import jace.core.RAMListener;
@ -39,6 +40,7 @@ import javafx.scene.control.TextField;
import javafx.scene.control.Toggle; import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleGroup; import javafx.scene.control.ToggleGroup;
import javafx.scene.control.Tooltip; import javafx.scene.control.Tooltip;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Background; import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill; import javafx.scene.layout.BackgroundFill;
@ -125,7 +127,7 @@ public class MetacheatUI {
private ListView<State> snapshotsListView; private ListView<State> snapshotsListView;
@FXML @FXML
private TableView<RAMListener> cheatsTableView; private TableView<Cheat> cheatsTableView;
@FXML @FXML
void addCheat(ActionEvent event) { void addCheat(ActionEvent event) {
@ -266,8 +268,16 @@ public class MetacheatUI {
watchesPane.setHgap(5); watchesPane.setHgap(5);
watchesPane.setVgap(5); watchesPane.setVgap(5);
}
searchStartAddressField.textProperty().addListener(addressRangeListener);
searchEndAddressField.textProperty().addListener(addressRangeListener);
RAMListener l;
cheatsTableView.getColumns().get(0).setCellValueFactory(new PropertyValueFactory<>("active"));
cheatsTableView.getColumns().get(1).setCellValueFactory(new PropertyValueFactory<>("address"));
cheatsTableView.getColumns().get(2).setCellValueFactory(new PropertyValueFactory<>("value"));
}
MetaCheat cheatEngine = null; MetaCheat cheatEngine = null;
public void registerMetacheatEngine(MetaCheat engine) { public void registerMetacheatEngine(MetaCheat engine) {
@ -282,9 +292,6 @@ public class MetacheatUI {
searchValueField.textProperty().bindBidirectional(cheatEngine.searchValueProperty()); searchValueField.textProperty().bindBidirectional(cheatEngine.searchValueProperty());
searchChangeByField.textProperty().bindBidirectional(cheatEngine.searchChangeByProperty()); searchChangeByField.textProperty().bindBidirectional(cheatEngine.searchChangeByProperty());
searchStartAddressField.textProperty().addListener(addressRangeListener);
searchEndAddressField.textProperty().addListener(addressRangeListener);
Application.invokeLater(this::redrawMemoryView); Application.invokeLater(this::redrawMemoryView);
} }
@ -463,7 +470,7 @@ public class MetacheatUI {
} }
private void addCheat(int addr, int val) { private void addCheat(int addr, int val) {
cheatEngine.addCheat(new Cheat(addr, val));
} }
private static final int GRAPH_WIDTH = 50; private static final int GRAPH_WIDTH = 50;