Last active
May 17, 2019 18:57
-
-
Save OmegaRogue/1b76ec08c320c94e912d10d9b7159d9a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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