Skip to content

Instantly share code, notes, and snippets.

@OmegaRogue
Last active May 17, 2019 18:57
Show Gist options
  • Save OmegaRogue/1b76ec08c320c94e912d10d9b7159d9a to your computer and use it in GitHub Desktop.
Save OmegaRogue/1b76ec08c320c94e912d10d9b7159d9a to your computer and use it in GitHub Desktop.
import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class EditorController {
public String levelName = "untitled";
public int levelX = 8;
public int levelY = 8;
public static double step = 32;
public static Stage stage;
public ObjektTyp selectedTyp;
File level;
public ArrayList<String> levelChars = new ArrayList<>();
RandomAccessFile levelRam;
@FXML
private ResourceBundle resources;
@FXML
private URL location;
@FXML
private Font x3;
@FXML
private TextField levelNumber;
@FXML
private Pane pullyWindow;
@FXML
private ImageView selected;
@FXML
private TextField levelXSize;
@FXML
private TextField levelYSize;
@FXML
void levelNameChange(ActionEvent event) {
levelName = levelNumber.getText();
stage.setTitle("Pully Editor - " + levelName);
}
@FXML
void levelXSizeChange(ActionEvent event) {
levelX = Integer.parseInt(levelXSize.getText());
pullyWindow.setPrefSize(step*levelX, step*levelY);
buildMap();
}
@FXML
void levelYSizeChange(ActionEvent event) {
levelY = Integer.parseInt(levelYSize.getText());
pullyWindow.setPrefSize(step*levelX, step*levelY);
buildMap();
}
@FXML
void mouseClicked(MouseEvent event) throws IOException {
int x = Integer.parseInt((event.getX()/32 + "").substring(0,1));
int y = Integer.parseInt((event.getY()/32 + "").substring(0,1));
System.out.println("(" + x + "; " + y + ")");
try {
addToLevel(x, y, selectedTyp.c);
} catch (StringIndexOutOfBoundsException e) {
buildMap();
}
}
@FXML
void openSizeDialog(ActionEvent event) throws IOException {
Stage stage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("SizeDialog.fxml"));
stage.setScene(new Scene(root, 900, 700));
stage.setTitle("Change Board Size");
stage.show();
buildMap();
}
@FXML
void selBlueSpace(ActionEvent event) {
selected.setImage(new Image("BlueSpace.png"));
selectedTyp = ObjektTyp.ballFeldBlue;
}
@FXML
void selCrate(ActionEvent event) {
selected.setImage(new Image("Crate.png"));
selectedTyp = ObjektTyp.kiste;
}
@FXML
void selGreenBall(ActionEvent event) {
selected.setImage(new Image("GreenBall.png"));
selectedTyp = ObjektTyp.ballGreen;
}
@FXML
void selGreenSpace(ActionEvent event) {
selected.setImage(new Image("GreenSpace.png"));
selectedTyp = ObjektTyp.ballFeldGreen;
}
@FXML
void selPully(ActionEvent event) {
selected.setImage(new Image("Pully.png"));
selectedTyp = ObjektTyp.pully;
}
@FXML
void selRedBall(ActionEvent event) {
selected.setImage(new Image("RedBall.png"));
selectedTyp = ObjektTyp.ballRed;
}
@FXML
void selRedSpace(ActionEvent event) {
selected.setImage(new Image("RedSpace.png"));
selectedTyp = ObjektTyp.ballFeldRed;
}
@FXML
void selSpace(ActionEvent event) {
selected.setImage(new Image("Space.png"));
selectedTyp = ObjektTyp.leer;
}
@FXML
void selWall(ActionEvent event) {
selected.setImage(new Image("Wall.png"));
selectedTyp = ObjektTyp.wall;
}
@FXML
void sellBlueBall(ActionEvent event) {
selected.setImage(new Image("BlueBall.png"));
selectedTyp = ObjektTyp.ballBlue;
}
@FXML
void sellHaus(ActionEvent event) {
selected.setImage(new Image("Haus.png"));
selectedTyp = ObjektTyp.haus;
}
@FXML
void sellTeleport(ActionEvent event) {
selected.setImage(new Image("TeleportSpace.png"));
selectedTyp = ObjektTyp.teleportFeld;
}
@FXML
void initialize() throws IOException {
assert x3 != null : "fx:id=\"x3\" was not injected: check your FXML file 'Editor.fxml'.";
assert levelNumber != null : "fx:id=\"levelNumber\" was not injected: check your FXML file 'Editor.fxml'.";
assert pullyWindow != null : "fx:id=\"pullyWindow\" was not injected: check your FXML file 'Editor.fxml'.";
assert selected != null : "fx:id=\"selected\" was not injected: check your FXML file 'Editor.fxml'.";
level = new File("test.txt");
pullyWindow.setPrefSize(step*levelX, step*levelY);
selectedTyp = ObjektTyp.pully;
levelRam = new RandomAccessFile(level, "rw");
buildMap();
}
void addToLevel(int x, int y, char c) throws IOException {
String buffer = replaceAtIndex(levelChars.get(y), x, c);
levelChars.remove(y);
levelChars.add(y, buffer);
printMap();
}
void printMap() {
StringBuilder buffer = new StringBuilder();
for (String chars:
levelChars) {
buffer.append('\n');
}
System.out.println(buffer);
}
void buildMap() {
int diffY = levelY - levelChars.size();
if(diffY > 0) {
for (int i = 0; i < diffY; i++) {
levelChars.add("");
}
} else if(diffY < 0) {
for (int i = diffY; i < 0; i++) {
levelChars.remove(levelChars.size()-1);
}
}
for (String chars:
levelChars) {
int diffX = levelY - chars.length();
if(diffX > 0) {
for (int i = 0; i < diffX; i++) {
chars+= " ";
}
} else if (diffX < 0) {
chars.substring(0,chars.length()+diffX);
}
}
}
String replaceAtIndex(String s, int index, char with) {
String buffer = "";
buffer = s.substring(0, index);
buffer += with;
buffer += s.substring(index+1);
return buffer;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment