summaryrefslogtreecommitdiff
path: root/NET/worlds/console/Shaper.java
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-02-12 22:33:32 -0800
committerFuwn <[email protected]>2026-02-12 22:33:32 -0800
commitc7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9 (patch)
treedf9f48bf128a6c0186a8e91857d6ff30fe0e9f18 /NET/worlds/console/Shaper.java
downloadworldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.tar.xz
worldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.zip
Initial commit
Diffstat (limited to 'NET/worlds/console/Shaper.java')
-rw-r--r--NET/worlds/console/Shaper.java277
1 files changed, 277 insertions, 0 deletions
diff --git a/NET/worlds/console/Shaper.java b/NET/worlds/console/Shaper.java
new file mode 100644
index 0000000..eb9644d
--- /dev/null
+++ b/NET/worlds/console/Shaper.java
@@ -0,0 +1,277 @@
+package NET.worlds.console;
+
+import NET.worlds.network.URL;
+import NET.worlds.scape.LoadedURLSelf;
+import NET.worlds.scape.Manifest;
+import NET.worlds.scape.Pilot;
+import NET.worlds.scape.Saver;
+import NET.worlds.scape.TeleportAction;
+import NET.worlds.scape.URLSelf;
+import NET.worlds.scape.World;
+import java.awt.Container;
+import java.awt.Event;
+import java.awt.Menu;
+import java.awt.MenuItem;
+import java.io.IOException;
+import java.util.Enumeration;
+
+public class Shaper implements MainCallback, DialogReceiver, LoadedURLSelf {
+ MenuItem newItem;
+ MenuItem openItem;
+ MenuItem saveItem;
+ MenuItem propItem;
+ MenuItem consolePropItem;
+ MenuItem pilotPropItem;
+ MenuItem undoItem;
+ MenuItem cutItem;
+ MenuItem copyItem;
+ MenuItem pasteItem;
+ MenuItem sortAttributesItem;
+ MenuItem snapToolItem;
+ MenuItem newLibraryItem;
+ MenuItem newLibraryEntryItem;
+ MenuItem iconsVisibleLibraryItem;
+ Menu worldsMenu;
+ MenuItem shaperVisibleItem;
+ private World newWorldTemplate;
+ private boolean makeNew = true;
+ private static URL newworld = URL.make("home:NewWorld.world");
+ private boolean quitFlag;
+ private FileSaver fileSaver;
+ private boolean worldListHasChanged = false;
+
+ public Shaper() {
+ Main.register(this);
+ }
+
+ public void activate(Console c, Container f, Console prev) {
+ this.newItem = c.addMenuItem(Console.message("New"), "File", 78, false);
+ this.openItem = c.addMenuItem(Console.message("Open"), "File", 79, false);
+ this.saveItem = c.addMenuItem(Console.message("Save"), "File", 83, false);
+ this.propItem = c.addMenuItem(Console.message("World-Prop"), "File");
+ this.consolePropItem = c.addMenuItem(Console.message("Console-Prop"), "File");
+ this.pilotPropItem = c.addMenuItem(Console.message("Pilot-Prop"), "File");
+ this.undoItem = c.addMenuItem(Console.message("Undo"), "Edit", 90, false);
+ c.getMenu("Edit").addSeparator();
+ this.cutItem = c.addMenuItem(Console.message("Cut"), "Edit", 88, false);
+ this.copyItem = c.addMenuItem(Console.message("Copy"), "Edit", 67, false);
+ this.pasteItem = c.addMenuItem(Console.message("Paste"), "Edit", 86, false);
+ this.sortAttributesItem = c.addMenuItem(Console.message("Sort-Attributes"), "Edit");
+ this.snapToolItem = c.addMenuItem(Console.message("Snap-Tool-Settings"), "Edit");
+ this.newLibraryItem = c.addMenuItem(Console.message("New-Library"), "Libraries");
+ this.newLibraryEntryItem = c.addMenuItem(Console.message("New-Library-Entry"), "Libraries");
+ this.iconsVisibleLibraryItem = c.addMenuItem(Console.message("Icons-On-Off"), "Libraries", 73, false);
+ this.worldsMenu = c.getMenu("Worlds");
+ this.worldListChange();
+ this.shaperVisibleItem = c.addMenuItem(Console.message("Shaper-On-Off"), "Options");
+ }
+
+ public void deactivate() {
+ this.worldsMenu = null;
+ }
+
+ public boolean action(Event event, Object what) {
+ GammaFrame f = Console.getFrame();
+ if (event.target == this.newItem) {
+ this.makeNew = true;
+ } else if (event.target == this.openItem) {
+ new FileSysDialog(
+ f, this, Console.message("Open-World"), 0, "World Save Files|*.world|World Class Files|*.class|World Files|*.class;*.world", "", true
+ );
+ } else if (event.target == this.saveItem) {
+ new FileSysDialog(f, this, Console.message("Save-World"), 1, "World Save Files|*.world|World Manifest (text) Files|*.mft", this.getSaveName(), true);
+ } else if (event.target == this.propItem) {
+ if (Pilot.getActiveRoom() != null) {
+ f.getEditTile().viewProperties(Pilot.getActiveWorld());
+ }
+ } else if (event.target == this.consolePropItem) {
+ f.getEditTile().viewProperties(Console.getActive());
+ } else if (event.target == this.pilotPropItem) {
+ f.getEditTile().viewProperties(Pilot.getActive());
+ } else if (event.target == this.sortAttributesItem) {
+ new AttributeSortPanel(f);
+ } else if (event.target == this.snapToolItem) {
+ new SnapToolPanel(f);
+ } else if (event.target == this.undoItem) {
+ f.getEditTile().undo();
+ } else if (event.target == this.cutItem) {
+ f.getEditTile().cut();
+ } else if (event.target == this.copyItem) {
+ f.getEditTile().copy();
+ } else if (event.target == this.pasteItem) {
+ f.getEditTile().paste();
+ } else if (event.target == this.newLibraryItem) {
+ f.getLibrariesTile().addLibrary();
+ } else if (event.target == this.newLibraryEntryItem) {
+ f.getLibrariesTile().addElement();
+ } else if (event.target == this.iconsVisibleLibraryItem) {
+ f.getLibrariesTile().setIconsVisible(!f.getLibrariesTile().isIconsVisible());
+ } else if (event.target == this.shaperVisibleItem) {
+ f.setShaperVisible(!f.isShaperVisible());
+ } else {
+ int i = this.worldsMenu.getItemCount();
+
+ do {
+ i--;
+ } while (i >= 0 && this.worldsMenu.getItem(i) != event.target);
+
+ if (i < 0) {
+ return false;
+ }
+
+ String url = (String)what;
+ if (url.endsWith(" (changed)")) {
+ url = url.substring(0, url.length() - 10);
+ }
+
+ TeleportAction.teleport(url, null);
+ }
+
+ return true;
+ }
+
+ public String getSaveName() {
+ return getSaveName(Pilot.getActive().getWorld());
+ }
+
+ public static String getSaveName(World w) {
+ URL url = w.getSourceURL();
+ String name = url.unalias();
+ int index = name.indexOf(58);
+ return index != -1 && index != 1 ? url.getBase() : name.replace('/', '\\');
+ }
+
+ @Override
+ public void dialogDone(Object who, boolean confirmed) {
+ if (confirmed) {
+ FileSysDialog fileDialog = (FileSysDialog)who;
+ String name = fileDialog.fileName();
+ if (fileDialog.getMode() == 0) {
+ TeleportAction.teleport(name, null, true);
+ } else {
+ this.doSave(name);
+ }
+ }
+ }
+
+ @Override
+ public void loadedURLSelf(URLSelf o, URL url, String err) {
+ this.newWorldTemplate = (World)o;
+ }
+
+ @Override
+ public void mainCallback() {
+ if (this.quitFlag) {
+ if (this.fileSaver == null) {
+ this.fileSaver = new FileSaver();
+ }
+
+ switch (this.fileSaver.getState()) {
+ case 0:
+ GammaFrameState.saveBorder();
+ Main.end();
+ case 1:
+ default:
+ break;
+ case 2:
+ this.quitFlag = false;
+ this.fileSaver = null;
+ }
+ }
+
+ if (this.newWorldTemplate != null) {
+ this.newWorldTemplate.incRef();
+ }
+
+ if (this.makeNew) {
+ this.makeNew = false;
+ if (this.newWorldTemplate == null) {
+ World.load(newworld, this, true);
+ } else {
+ World w = (World)this.newWorldTemplate.clone();
+ w.setEdited(true);
+ TeleportAction.teleport(w.getSourceURL().getAbsolute(), null);
+ }
+ }
+
+ if (this.worldListHasChanged) {
+ this.worldListHasChanged = false;
+ this.rebuildWorldsMenu();
+ }
+ }
+
+ public void maybeQuit() {
+ this.quitFlag = true;
+ }
+
+ public void worldListChange() {
+ this.worldListHasChanged = true;
+ }
+
+ private void rebuildWorldsMenu() {
+ if (this.worldsMenu != null) {
+ while (this.worldsMenu.getItemCount() > 0) {
+ this.worldsMenu.remove(0);
+ }
+
+ Enumeration<World> e = World.getWorlds();
+
+ while (e.hasMoreElements()) {
+ World w = e.nextElement();
+ URL url = w.getSourceURL();
+ String name;
+ if (url == null) {
+ name = w.getName();
+ } else {
+ name = url.getAbsolute();
+ if (url.equals(newworld)) {
+ continue;
+ }
+ }
+
+ if (w.getEdited()) {
+ name = name + " (changed)";
+ }
+
+ this.worldsMenu.add(new MenuItem(name));
+ }
+ }
+ }
+
+ public void doSave(String name) {
+ doSave(name, Pilot.getActive().getWorld(), true);
+ }
+
+ public static boolean doSave(String name, World world, boolean allowManifest) {
+ if (allowManifest && name.endsWith(".mft")) {
+ try {
+ Manifest mft = new Manifest(name);
+ mft.saveProps(world);
+ mft.done();
+ return true;
+ } catch (IOException var4) {
+ Console.println(Console.message("Error-manifest") + var4.toString());
+ }
+ } else {
+ if (name.toLowerCase().endsWith(".wor")) {
+ name = name.substring(0, name.length() - 4);
+ }
+
+ if (!name.toLowerCase().endsWith(".world")) {
+ name = name + ".world";
+ }
+
+ try {
+ Saver saver = new Saver(new URL(URL.getCurDir(), name));
+ saver.save(world);
+ saver.done();
+ world.setEdited(false);
+ return true;
+ } catch (IOException var5) {
+ Console.println(Console.message("Error-saving") + var5.toString());
+ }
+ }
+
+ return false;
+ }
+}