diff --git a/Trident/Trident/README.md b/Trident/Trident/README.md new file mode 100644 index 0000000..7c03a53 --- /dev/null +++ b/Trident/Trident/README.md @@ -0,0 +1,18 @@ +## Getting Started + +Welcome to the VS Code Java world. Here is a guideline to help you get started to write Java code in Visual Studio Code. + +## Folder Structure + +The workspace contains two folders by default, where: + +- `src`: the folder to maintain sources +- `lib`: the folder to maintain dependencies + +Meanwhile, the compiled output files will be generated in the `bin` folder by default. + +> If you want to customize the folder structure, open `.vscode/settings.json` and update the related settings there. + +## Dependency Management + +The `JAVA PROJECTS` view allows you to manage your dependencies. More details can be found [here](https://github.com/microsoft/vscode-java-dependency#manage-dependencies). diff --git a/Trident/Trident/bin/main/Main$1.class b/Trident/Trident/bin/main/Main$1.class new file mode 100644 index 0000000..d812b40 Binary files /dev/null and b/Trident/Trident/bin/main/Main$1.class differ diff --git a/Trident/Trident/bin/main/Main$2.class b/Trident/Trident/bin/main/Main$2.class new file mode 100644 index 0000000..25ac815 Binary files /dev/null and b/Trident/Trident/bin/main/Main$2.class differ diff --git a/Trident/Trident/bin/main/Main$3.class b/Trident/Trident/bin/main/Main$3.class new file mode 100644 index 0000000..7e37b18 Binary files /dev/null and b/Trident/Trident/bin/main/Main$3.class differ diff --git a/Trident/Trident/bin/main/Main$4.class b/Trident/Trident/bin/main/Main$4.class new file mode 100644 index 0000000..9ee43ad Binary files /dev/null and b/Trident/Trident/bin/main/Main$4.class differ diff --git a/Trident/Trident/bin/main/Main$5.class b/Trident/Trident/bin/main/Main$5.class new file mode 100644 index 0000000..a423b69 Binary files /dev/null and b/Trident/Trident/bin/main/Main$5.class differ diff --git a/Trident/Trident/bin/main/Main$6.class b/Trident/Trident/bin/main/Main$6.class new file mode 100644 index 0000000..0ab7c74 Binary files /dev/null and b/Trident/Trident/bin/main/Main$6.class differ diff --git a/Trident/Trident/bin/main/Main$7.class b/Trident/Trident/bin/main/Main$7.class new file mode 100644 index 0000000..500da73 Binary files /dev/null and b/Trident/Trident/bin/main/Main$7.class differ diff --git a/Trident/Trident/bin/main/Main$8.class b/Trident/Trident/bin/main/Main$8.class new file mode 100644 index 0000000..4a3fdad Binary files /dev/null and b/Trident/Trident/bin/main/Main$8.class differ diff --git a/Trident/Trident/bin/main/Main.class b/Trident/Trident/bin/main/Main.class new file mode 100644 index 0000000..2fdab92 Binary files /dev/null and b/Trident/Trident/bin/main/Main.class differ diff --git a/Trident/Trident/bin/main/MainPanel$InputListener.class b/Trident/Trident/bin/main/MainPanel$InputListener.class new file mode 100644 index 0000000..6046bfa Binary files /dev/null and b/Trident/Trident/bin/main/MainPanel$InputListener.class differ diff --git a/Trident/Trident/bin/main/MainPanel$ServerListener.class b/Trident/Trident/bin/main/MainPanel$ServerListener.class new file mode 100644 index 0000000..0d9743f Binary files /dev/null and b/Trident/Trident/bin/main/MainPanel$ServerListener.class differ diff --git a/Trident/Trident/bin/main/MainPanel.class b/Trident/Trident/bin/main/MainPanel.class new file mode 100644 index 0000000..30a3421 Binary files /dev/null and b/Trident/Trident/bin/main/MainPanel.class differ diff --git a/Trident/Trident/bin/project/Project.class b/Trident/Trident/bin/project/Project.class new file mode 100644 index 0000000..dcad09b Binary files /dev/null and b/Trident/Trident/bin/project/Project.class differ diff --git a/Trident/Trident/bin/project/Scene.class b/Trident/Trident/bin/project/Scene.class new file mode 100644 index 0000000..d817b51 Binary files /dev/null and b/Trident/Trident/bin/project/Scene.class differ diff --git a/Trident/Trident/bin/project/TridEntity.class b/Trident/Trident/bin/project/TridEntity.class new file mode 100644 index 0000000..f83f2ae Binary files /dev/null and b/Trident/Trident/bin/project/TridEntity.class differ diff --git a/Trident/Trident/bin/project/ent/BoxColl.class b/Trident/Trident/bin/project/ent/BoxColl.class new file mode 100644 index 0000000..a0437ca Binary files /dev/null and b/Trident/Trident/bin/project/ent/BoxColl.class differ diff --git a/Trident/Trident/bin/project/ent/BoxNoColl.class b/Trident/Trident/bin/project/ent/BoxNoColl.class new file mode 100644 index 0000000..e33612f Binary files /dev/null and b/Trident/Trident/bin/project/ent/BoxNoColl.class differ diff --git a/Trident/Trident/bin/project/ent/CustomEntity.class b/Trident/Trident/bin/project/ent/CustomEntity.class new file mode 100644 index 0000000..f86a1ee Binary files /dev/null and b/Trident/Trident/bin/project/ent/CustomEntity.class differ diff --git a/Trident/Trident/bin/project/ent/InvisColl.class b/Trident/Trident/bin/project/ent/InvisColl.class new file mode 100644 index 0000000..2c2b619 Binary files /dev/null and b/Trident/Trident/bin/project/ent/InvisColl.class differ diff --git a/Trident/Trident/bin/project/ent/Light.class b/Trident/Trident/bin/project/ent/Light.class new file mode 100644 index 0000000..4040ffd Binary files /dev/null and b/Trident/Trident/bin/project/ent/Light.class differ diff --git a/Trident/Trident/bin/project/ent/PlrStart.class b/Trident/Trident/bin/project/ent/PlrStart.class new file mode 100644 index 0000000..70a618b Binary files /dev/null and b/Trident/Trident/bin/project/ent/PlrStart.class differ diff --git a/Trident/Trident/bin/project/ent/Trigger.class b/Trident/Trident/bin/project/ent/Trigger.class new file mode 100644 index 0000000..b4a3645 Binary files /dev/null and b/Trident/Trident/bin/project/ent/Trigger.class differ diff --git a/Trident/Trident/data/BLib.jar b/Trident/Trident/data/BLib.jar new file mode 100644 index 0000000..59f4bc3 Binary files /dev/null and b/Trident/Trident/data/BLib.jar differ diff --git a/Trident/Trident/data/JHLabs Filters.jar b/Trident/Trident/data/JHLabs Filters.jar new file mode 100644 index 0000000..2ce3ec6 Binary files /dev/null and b/Trident/Trident/data/JHLabs Filters.jar differ diff --git a/Trident/Trident/data/icon.png b/Trident/Trident/data/icon.png new file mode 100644 index 0000000..75679b4 Binary files /dev/null and b/Trident/Trident/data/icon.png differ diff --git a/Trident/Trident/data/images/cursors/move.png b/Trident/Trident/data/images/cursors/move.png new file mode 100644 index 0000000..5ab64e7 Binary files /dev/null and b/Trident/Trident/data/images/cursors/move.png differ diff --git a/Trident/Trident/data/images/cursors/resize.png b/Trident/Trident/data/images/cursors/resize.png new file mode 100644 index 0000000..3345522 Binary files /dev/null and b/Trident/Trident/data/images/cursors/resize.png differ diff --git a/Trident/Trident/data/images/cursors/select.png b/Trident/Trident/data/images/cursors/select.png new file mode 100644 index 0000000..4c88674 Binary files /dev/null and b/Trident/Trident/data/images/cursors/select.png differ diff --git a/Trident/Trident/data/images/dropdown/box.png b/Trident/Trident/data/images/dropdown/box.png new file mode 100644 index 0000000..f946bbd Binary files /dev/null and b/Trident/Trident/data/images/dropdown/box.png differ diff --git a/Trident/Trident/data/images/dropdown/boxColl.png b/Trident/Trident/data/images/dropdown/boxColl.png new file mode 100644 index 0000000..ccfc5b8 Binary files /dev/null and b/Trident/Trident/data/images/dropdown/boxColl.png differ diff --git a/Trident/Trident/data/images/dropdown/collision.png b/Trident/Trident/data/images/dropdown/collision.png new file mode 100644 index 0000000..d31d02d Binary files /dev/null and b/Trident/Trident/data/images/dropdown/collision.png differ diff --git a/Trident/Trident/data/images/dropdown/customEnt.png b/Trident/Trident/data/images/dropdown/customEnt.png new file mode 100644 index 0000000..e0f5e4f Binary files /dev/null and b/Trident/Trident/data/images/dropdown/customEnt.png differ diff --git a/Trident/Trident/data/images/dropdown/delete.png b/Trident/Trident/data/images/dropdown/delete.png new file mode 100644 index 0000000..e4970c8 Binary files /dev/null and b/Trident/Trident/data/images/dropdown/delete.png differ diff --git a/Trident/Trident/data/images/dropdown/duplicate.png b/Trident/Trident/data/images/dropdown/duplicate.png new file mode 100644 index 0000000..e59f01b Binary files /dev/null and b/Trident/Trident/data/images/dropdown/duplicate.png differ diff --git a/Trident/Trident/data/images/dropdown/edit.png b/Trident/Trident/data/images/dropdown/edit.png new file mode 100644 index 0000000..4e41203 Binary files /dev/null and b/Trident/Trident/data/images/dropdown/edit.png differ diff --git a/Trident/Trident/data/images/dropdown/light.png b/Trident/Trident/data/images/dropdown/light.png new file mode 100644 index 0000000..3b5ad16 Binary files /dev/null and b/Trident/Trident/data/images/dropdown/light.png differ diff --git a/Trident/Trident/data/images/dropdown/move.png b/Trident/Trident/data/images/dropdown/move.png new file mode 100644 index 0000000..374f8f5 Binary files /dev/null and b/Trident/Trident/data/images/dropdown/move.png differ diff --git a/Trident/Trident/data/images/dropdown/plrStart.png b/Trident/Trident/data/images/dropdown/plrStart.png new file mode 100644 index 0000000..48ccdc4 Binary files /dev/null and b/Trident/Trident/data/images/dropdown/plrStart.png differ diff --git a/Trident/Trident/data/images/dropdown/quit.png b/Trident/Trident/data/images/dropdown/quit.png new file mode 100644 index 0000000..b92905d Binary files /dev/null and b/Trident/Trident/data/images/dropdown/quit.png differ diff --git a/Trident/Trident/data/images/dropdown/reset.png b/Trident/Trident/data/images/dropdown/reset.png new file mode 100644 index 0000000..e935838 Binary files /dev/null and b/Trident/Trident/data/images/dropdown/reset.png differ diff --git a/Trident/Trident/data/images/dropdown/resize.png b/Trident/Trident/data/images/dropdown/resize.png new file mode 100644 index 0000000..439bb16 Binary files /dev/null and b/Trident/Trident/data/images/dropdown/resize.png differ diff --git a/Trident/Trident/data/images/dropdown/select.png b/Trident/Trident/data/images/dropdown/select.png new file mode 100644 index 0000000..51e6156 Binary files /dev/null and b/Trident/Trident/data/images/dropdown/select.png differ diff --git a/Trident/Trident/data/images/dropdown/trigger.png b/Trident/Trident/data/images/dropdown/trigger.png new file mode 100644 index 0000000..c7ec401 Binary files /dev/null and b/Trident/Trident/data/images/dropdown/trigger.png differ diff --git a/Trident/Trident/data/images/player/idleE.png b/Trident/Trident/data/images/player/idleE.png new file mode 100644 index 0000000..fc1896b Binary files /dev/null and b/Trident/Trident/data/images/player/idleE.png differ diff --git a/Trident/Trident/data/images/player/idleN.png b/Trident/Trident/data/images/player/idleN.png new file mode 100644 index 0000000..e86f6cc Binary files /dev/null and b/Trident/Trident/data/images/player/idleN.png differ diff --git a/Trident/Trident/data/images/player/idleS.png b/Trident/Trident/data/images/player/idleS.png new file mode 100644 index 0000000..cb923cc Binary files /dev/null and b/Trident/Trident/data/images/player/idleS.png differ diff --git a/Trident/Trident/data/images/player/idleW.png b/Trident/Trident/data/images/player/idleW.png new file mode 100644 index 0000000..e706b7d Binary files /dev/null and b/Trident/Trident/data/images/player/idleW.png differ diff --git a/Trident/Trident/data/images/player/walkE.png b/Trident/Trident/data/images/player/walkE.png new file mode 100644 index 0000000..b9e2df3 Binary files /dev/null and b/Trident/Trident/data/images/player/walkE.png differ diff --git a/Trident/Trident/data/images/player/walkN.png b/Trident/Trident/data/images/player/walkN.png new file mode 100644 index 0000000..63aef9b Binary files /dev/null and b/Trident/Trident/data/images/player/walkN.png differ diff --git a/Trident/Trident/data/images/player/walkS.png b/Trident/Trident/data/images/player/walkS.png new file mode 100644 index 0000000..ff3366a Binary files /dev/null and b/Trident/Trident/data/images/player/walkS.png differ diff --git a/Trident/Trident/data/images/player/walkW.png b/Trident/Trident/data/images/player/walkW.png new file mode 100644 index 0000000..3ab625d Binary files /dev/null and b/Trident/Trident/data/images/player/walkW.png differ diff --git a/Trident/Trident/data/images/trident/box.png b/Trident/Trident/data/images/trident/box.png new file mode 100644 index 0000000..2095f6a Binary files /dev/null and b/Trident/Trident/data/images/trident/box.png differ diff --git a/Trident/Trident/data/images/trident/boxColl.png b/Trident/Trident/data/images/trident/boxColl.png new file mode 100644 index 0000000..e63707b Binary files /dev/null and b/Trident/Trident/data/images/trident/boxColl.png differ diff --git a/Trident/Trident/data/images/trident/collision.png b/Trident/Trident/data/images/trident/collision.png new file mode 100644 index 0000000..77597a8 Binary files /dev/null and b/Trident/Trident/data/images/trident/collision.png differ diff --git a/Trident/Trident/data/images/trident/customEnt.png b/Trident/Trident/data/images/trident/customEnt.png new file mode 100644 index 0000000..bb10f72 Binary files /dev/null and b/Trident/Trident/data/images/trident/customEnt.png differ diff --git a/Trident/Trident/data/images/trident/light.png b/Trident/Trident/data/images/trident/light.png new file mode 100644 index 0000000..6f7887c Binary files /dev/null and b/Trident/Trident/data/images/trident/light.png differ diff --git a/Trident/Trident/data/images/trident/plrStart.png b/Trident/Trident/data/images/trident/plrStart.png new file mode 100644 index 0000000..58d0ff2 Binary files /dev/null and b/Trident/Trident/data/images/trident/plrStart.png differ diff --git a/Trident/Trident/data/images/trident/splash.png b/Trident/Trident/data/images/trident/splash.png new file mode 100644 index 0000000..0d40d89 Binary files /dev/null and b/Trident/Trident/data/images/trident/splash.png differ diff --git a/Trident/Trident/data/images/trident/trigger.png b/Trident/Trident/data/images/trident/trigger.png new file mode 100644 index 0000000..fcb46cd Binary files /dev/null and b/Trident/Trident/data/images/trident/trigger.png differ diff --git a/Trident/Trident/data/projectRegistry.bson b/Trident/Trident/data/projectRegistry.bson new file mode 100644 index 0000000..a109516 --- /dev/null +++ b/Trident/Trident/data/projectRegistry.bson @@ -0,0 +1,2 @@ +{ projects +} diff --git a/Trident/Trident/lib/BLib.jar b/Trident/Trident/lib/BLib.jar new file mode 100644 index 0000000..59f4bc3 Binary files /dev/null and b/Trident/Trident/lib/BLib.jar differ diff --git a/Trident/Trident/src/main/Main.java b/Trident/Trident/src/main/Main.java new file mode 100644 index 0000000..80b89d1 --- /dev/null +++ b/Trident/Trident/src/main/Main.java @@ -0,0 +1,221 @@ +package main; + +import javax.swing.*; + +import project.*; +import java.awt.*; +import java.awt.event.*; +import java.io.*; +public class Main { + public static Image icon = new ImageIcon("data/icon.png").getImage(); + public static void main(String[] args){ + + Project.loadRegistry(); + + JFrame selWindow = new JFrame("Trident"); + selWindow.setSize(400, 200); + selWindow.setResizable(false); + selWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + selWindow.setIconImage(icon); + selWindow.setLayout(new GridLayout(2, 3)); + selWindow.setLocation(400, 300); + + JButton loadButton = new JButton("Load Project"); + loadButton.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + selWindow.dispose(); + selection(0); + } + }); + loadButton.setBackground(new Color(0, 0, 50)); + loadButton.setForeground(Color.white); + selWindow.add(loadButton); + JButton newButton = new JButton("New Project"); + newButton.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + selWindow.dispose(); + selection(1); + } + }); + newButton.setBackground(new Color(0, 0, 50)); + newButton.setForeground(Color.white); + selWindow.add(newButton); + JButton importButton = new JButton("Import Project"); + importButton.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + selWindow.dispose(); + selection(2); + } + }); + importButton.setBackground(new Color(0, 0, 50)); + importButton.setForeground(Color.white); + selWindow.add(importButton); + + JTextArea loadText = new JTextArea("Load a project"); + loadText.setEditable(false); + loadText.setBackground(new Color(0, 0, 100)); + loadText.setForeground(Color.white); + selWindow.add(loadText); + JTextArea newText = new JTextArea("Create a new project"); + newText.setEditable(false); + newText.setBackground(new Color(0, 0, 100)); + newText.setForeground(Color.white); + selWindow.add(newText); + JTextArea importText = new JTextArea("Get a project put\ninto the registry"); + importText.setEditable(false); + importText.setBackground(new Color(0, 0, 100)); + importText.setForeground(Color.white); + selWindow.add(importText); + + selWindow.setVisible(true); + + } + + public static int loadSel = 0; + + public static void selection(int sel){ + if(sel == 0){ // Load project + + if(Project.projRegistry.length == 0){ + JOptionPane.showMessageDialog(null, "You don't have any projects!", "Trident", JOptionPane.ERROR_MESSAGE); + main(new String[0]); + return; + } + + JFrame selWindow = new JFrame("Trident"); + selWindow.setSize(500, 200); + selWindow.setResizable(false); + selWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + selWindow.setIconImage(icon); + selWindow.setLayout(new GridLayout(2, 3)); + selWindow.setLocation(400, 300); + + JTextField text = new JTextField(Project.projRegistry[0] + "\n(1/" + Project.projRegistry.length + ")"); + text.setEditable(false); + text.setBackground(new Color(0, 0, 100)); + text.setForeground(Color.white); + JButton prevButton = new JButton("<"); + prevButton.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + loadSel--; + if(loadSel < 0){ + loadSel = Project.projRegistry.length - 1; + } + text.setText(Project.projRegistry[loadSel] + "\n(" + (loadSel + 1) + "/" + Project.projRegistry.length + ")"); + } + }); + prevButton.setBackground(new Color(0, 0, 50)); + prevButton.setForeground(Color.white); + selWindow.add(prevButton); + selWindow.add(text); + JButton nextButton = new JButton(">"); + nextButton.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + loadSel++; + if(loadSel > Project.projRegistry.length - 1){ + loadSel = 0; + } + text.setText(Project.projRegistry[loadSel] + "\n(" + (loadSel + 1) + "/" + Project.projRegistry.length + ")"); + } + }); + nextButton.setBackground(new Color(0, 0, 50)); + nextButton.setForeground(Color.white); + selWindow.add(nextButton); + JButton loadButton = new JButton("Load"); + loadButton.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + selWindow.dispose(); + loadProject(loadSel); + } + }); + loadButton.setBackground(new Color(0, 0, 50)); + loadButton.setForeground(Color.white); + selWindow.add(loadButton); + JButton deleteButton = new JButton("Remove from Registry"); + deleteButton.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + Project.projRegistry[loadSel] = null; + String[] newRegistry = new String[Project.projRegistry.length - 1]; + boolean skippedNull = false; + for(int i = 0; i < Project.projRegistry.length; i++){ + if(Project.projRegistry[i] != null){ + newRegistry[i + (skippedNull ? 1 : 0)] = Project.projRegistry[i]; + }else{ + skippedNull = true; + } + } + Project.projRegistry = newRegistry; + loadSel = 0; + Project.saveRegistry(); + if(Project.projRegistry.length == 0){ + selWindow.dispose(); + main(new String[0]); + return; + } + text.setText(Project.projRegistry[loadSel] + "\n(" + (loadSel + 1) + "/" + Project.projRegistry.length + ")"); + } + }); + deleteButton.setBackground(new Color(0, 0, 50)); + deleteButton.setForeground(Color.white); + selWindow.add(deleteButton); + JButton cancelButton = new JButton("Cancel"); + cancelButton.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + selWindow.dispose(); + main(new String[0]); + } + }); + cancelButton.setBackground(new Color(0, 0, 50)); + cancelButton.setForeground(Color.white); + selWindow.add(cancelButton); + + + selWindow.setVisible(true); + } + if(sel == 1){ // New project + String name = JOptionPane.showInputDialog(null, "Enter the project name. If a project already exists with that name, keep in mind that it will replace it.", "Trident", JOptionPane.QUESTION_MESSAGE); + if(name == null){ + main(new String[0]); + return; + } + String[] newRegistry = new String[Project.projRegistry.length + 1]; + for(int i = 0; i < Project.projRegistry.length; i++){ + newRegistry[i] = Project.projRegistry[i]; + } + newRegistry[newRegistry.length - 1] = name; + Project.projRegistry = newRegistry; + Project.saveRegistry(); + new Project(name); + JOptionPane.showMessageDialog(null, "Project successfully created.", "Trident", JOptionPane.INFORMATION_MESSAGE); + main(new String[0]); + } + if(sel == 2){ // Import project + String name = JOptionPane.showInputDialog(null, "Enter the project name. Make sure it's in the projects folder before you open it.", "Trident", JOptionPane.QUESTION_MESSAGE); + if(name == null){ + main(new String[0]); + return; + } + String[] newRegistry = new String[Project.projRegistry.length + 1]; + for(int i = 0; i < Project.projRegistry.length; i++){ + newRegistry[i] = Project.projRegistry[i]; + } + newRegistry[newRegistry.length - 1] = name; + Project.projRegistry = newRegistry; + Project.saveRegistry(); + main(new String[0]); + } + } + + public static void loadProject(int proj){ + JFrame window = new JFrame("Trident Editor"); + window.setSize(700, 500); + window.setMinimumSize(new Dimension(700, 500)); + window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + window.setIconImage(icon); + // panel + MainPanel panel = new MainPanel(new Project(proj)); + window.add(panel); + // + window.setVisible(true); + } +} diff --git a/Trident/Trident/src/main/MainPanel.java b/Trident/Trident/src/main/MainPanel.java new file mode 100644 index 0000000..b91068f --- /dev/null +++ b/Trident/Trident/src/main/MainPanel.java @@ -0,0 +1,570 @@ +package main; + +import javax.swing.*; +import project.*; +import blib.util.*; +import blib.input.*; +import java.awt.event.*; +import java.awt.*; +import blib.game.*; +import java.io.*; +import project.ent.*; +public class MainPanel extends JPanel { + + Project project; + Server server; + FrameManager frameManager = new FrameManager(); + KeyManager km = new InputListener(this); + Camera cam; + ImageIcon icon = new ImageIcon("data/icon.png"); + int tool = 0; + boolean drawLight = false; + + Cursor[] cursors = { + BTools.getCustomCursor(new ImageIcon("data/images/cursors/select.png")), + BTools.getCustomCursor(new ImageIcon("data/images/cursors/move.png")), + BTools.getCustomCursor(new ImageIcon("data/images/cursors/resize.png")), + }; + Point mouse = new Point(); // only used for better delta + + boolean dropDown = false; + int dropType = 0; + /* + * 0 = trident button + * 1 = add new object + * 2 = delete object + */ + Rectangle dropRect = null; + ImageIcon selectImg = new ImageIcon("data/images/dropdown/select.png"), moveImg = new ImageIcon("data/images/dropdown/move.png"), resizeImg = new ImageIcon("data/images/dropdown/resize.png"), resetImg = new ImageIcon("data/images/dropdown/reset.png"), quitImg = new ImageIcon("data/images/dropdown/quit.png"); + ImageIcon deleteImg = new ImageIcon("data/images/dropdown/delete.png"); + ImageIcon boxImg = new ImageIcon("data/images/dropdown/box.png"); + ImageIcon boxCollImg = new ImageIcon("data/images/dropdown/boxColl.png"); + ImageIcon collisionImg = new ImageIcon("data/images/dropdown/collision.png"); + ImageIcon plrStartImg = new ImageIcon("data/images/dropdown/plrStart.png"); + ImageIcon customImg = new ImageIcon("data/images/dropdown/customEnt.png"); + ImageIcon duplicateImg = new ImageIcon("data/images/dropdown/duplicate.png"); + ImageIcon editImg = new ImageIcon("data/images/dropdown/edit.png"); + ImageIcon triggerImg = new ImageIcon("data/images/dropdown/trigger.png"); + ImageIcon lightImg = new ImageIcon("data/images/dropdown/light.png"); + + long saveTime = 0; + + TridEntity selectedEntity = null; + + public MainPanel(Project proj){ + project = proj; + + BTools.resizeImgIcon(icon, 32, 32); + cam = new Camera(new Position(), this); + setBackground(Color.black); + frameManager.bgColor = Color.white; + cam.setDimension = new Dimension(frameManager.WIDTH, frameManager.HEIGHT); + + server = new Server(new ServerListener()); + } + + public void paintComponent(Graphics graphics){ + super.paintComponent(graphics); + Graphics g = frameManager.newFrame(); + + frameManager.bgColor = project.currentScene.bgColor; + + for(TridEntity e: project.currentScene.entities){ + Point p = cam.worldToScreen(e.position); + e.engineRender(g, this, p.x, p.y); + if(e.equals(selectedEntity)){ + g.setColor(new Color(0f, 0.2f, 1f, 0.5f)); + g.fillOval(p.x - 32, p.y - 32, 64, 64); + } + if(e instanceof CustomEntity){ + CustomEntity c = (CustomEntity)e; + String str = "["; + for(int i = 0; i < c.data.length; i++){ + str += c.data[i] + ""; + if(i == c.data.length - 1){ + str += "]"; + }else{ + str += ", "; + } + } + if(c.data.length == 0) str = "NO DATA"; + g.setColor(Color.white); + int width = Math.max(g.getFontMetrics().stringWidth(str), g.getFontMetrics().stringWidth(c.name)); + g.fillRect(p.x - width / 2, p.y + 32 - 5, width, 20); + g.setColor(Color.black); + g.setFont(new Font("Arial", Font.PLAIN, 10)); + TextBox.draw(c.name + "\n" + str, g, p.x, p.y + 32, TextBox.CENTER); + } + if(e instanceof Trigger){ + Trigger trig = (Trigger)e; + String str = "" + trig.id; + g.setColor(Color.white); + int width = g.getFontMetrics().stringWidth(str); + g.fillRect(p.x - width / 2, p.y + 32 - 5, width, 10); + g.setColor(Color.black); + g.setFont(new Font("Arial", Font.PLAIN, 10)); + TextBox.draw(str, g, p.x, p.y + 32, TextBox.CENTER); + } + } + + if(drawLight){ + int darkness = -project.currentScene.defaultLight + 255; + frameManager.fillScreen(new Color(0f, 0f, 0f, (darkness / 255f))); + } + + g.setColor(new Color(0f, 0f, 0f, 0.5f)); + g.fillRect(0, 0, frameManager.WIDTH, 40); + g.fillRect(0, frameManager.HEIGHT - 40, frameManager.WIDTH, 40); + g.setColor(Color.white); + g.setFont(new Font("Arial", Font.PLAIN, 20)); + TextBox.draw("Code Load Scene New Scene Save PlrDir: " + project.currentScene.getDir(), g, 40, 20); + icon.paintIcon(this, g, 4, 4); + TextBox.draw("[L] Show Darkness: " + drawLight + " Default light level: " + project.currentScene.defaultLight, g, frameManager.WIDTH - 10, frameManager.HEIGHT - 20, TextBox.RIGHT); + g.setColor(new Color(1f, 1f, 1f, (saveTime / 1000f))); + TextBox.draw("Saved!", g, 10, frameManager.HEIGHT - 20); + + if(dropDown){ + g.setColor(Color.lightGray); + g.fillRect(dropRect.x, dropRect.y, dropRect.width, dropRect.height); + g.setColor(Color.gray); + g.drawRect(dropRect.x, dropRect.y, dropRect.width, dropRect.height); + for(int i = 0; i < dropRect.height / 32; i++){ + g.drawLine(dropRect.x, dropRect.y + (i * 32), dropRect.x + dropRect.width, dropRect.y + (i * 32)); + } + + g.setColor(Color.black); + g.setFont(new Font("Arial", Font.PLAIN, 20)); + if(dropType == 0){ + selectImg.paintIcon(this, g, dropRect.x, dropRect.y); + TextBox.draw("Select", g, dropRect.x + 32, dropRect.y + 16); + moveImg.paintIcon(this, g, dropRect.x, dropRect.y + 32); + TextBox.draw("Move", g, dropRect.x + 32, dropRect.y + 16 + 32); + resizeImg.paintIcon(this, g, dropRect.x, dropRect.y + 64); + TextBox.draw("Resize", g, dropRect.x + 32, dropRect.y + 16 + 64); + resetImg.paintIcon(this, g, dropRect.x, dropRect.y + 64 + 32); + TextBox.draw("Return to (0, 0)", g, dropRect.x + 32, dropRect.y + 16 + 64 + 32); + editImg.paintIcon(this, g, dropRect.x, dropRect.y + 128); + TextBox.draw("Change bg color", g, dropRect.x + 32, dropRect.y + 16 + 128); + lightImg.paintIcon(this, g, dropRect.x, dropRect.y + 128 + 32); + TextBox.draw("Set Default Light", g, dropRect.x + 32, dropRect.y + 16 + 128 + 32); + quitImg.paintIcon(this, g, dropRect.x, dropRect.y + 128 + 64); + TextBox.draw("Save and Quit", g, dropRect.x + 32, dropRect.y + 16 + 128 + 64); + } + if(dropType == 1){ + deleteImg.paintIcon(this, g, dropRect.x, dropRect.y); + TextBox.draw("Delete", g, dropRect.x + 32, dropRect.y + 16); + duplicateImg.paintIcon(this, g, dropRect.x, dropRect.y + 32); + TextBox.draw("Duplicate", g, dropRect.x + 32, dropRect.y + 16 + 32); + editImg.paintIcon(this, g, dropRect.x, dropRect.y + 64); + TextBox.draw("Edit", g, dropRect.x + 32, dropRect.y + 16 + 64); + resetImg.paintIcon(this, g, dropRect.x, dropRect.y + 64 + 32); + TextBox.draw("Bring here", g, dropRect.x + 32, dropRect.y + 16 + 64 + 32); + } + if(dropType == 2){ + boxImg.paintIcon(this, g, dropRect.x, dropRect.y); + TextBox.draw("Add BoxNoColl", g, dropRect.x + 32, dropRect.y + 16); + boxCollImg.paintIcon(this, g, dropRect.x, dropRect.y + 32); + TextBox.draw("Add BoxColl", g, dropRect.x + 32, dropRect.y + 16 + 32); + collisionImg.paintIcon(this, g, dropRect.x, dropRect.y + 64); + TextBox.draw("Add InvisColl", g, dropRect.x + 32, dropRect.y + 16 + 64); + plrStartImg.paintIcon(this, g, dropRect.x, dropRect.y + 64 + 32); + TextBox.draw("Add PlrStart", g, dropRect.x + 32, dropRect.y + 16 + 64 + 32); + triggerImg.paintIcon(this, g, dropRect.x, dropRect.y + 128); + TextBox.draw("Add Trigger", g, dropRect.x + 32, dropRect.y + 16 + 128); + customImg.paintIcon(this, g, dropRect.x, dropRect.y + 128 + 32); + TextBox.draw("Add Custom Entity", g, dropRect.x + 32, dropRect.y + 16 + 128 + 32); + lightImg.paintIcon(this, g, dropRect.x, dropRect.y + 128 + 64); + TextBox.draw("Add Light", g, dropRect.x + 32, dropRect.y + 16 + 128 + 64); + } + } + + frameManager.renderFrame(this, graphics); + } + + public int getDropSel(int y){ + return (y - dropRect.y) / 32; + } + + + private class InputListener extends InputAdapter{ + public InputListener(JPanel panel){ + super(panel); + } + + public void onKeyPressed(int key){ + if(key == KeyEvent.VK_R){ + cam.pos = new Position(); + } + if(key == KeyEvent.VK_1){ + tool = 0; + } + if(key == KeyEvent.VK_2){ + tool = 1; + } + if(key == KeyEvent.VK_3){ + tool = 2; + } + if(key == KeyEvent.VK_DELETE && selectedEntity != null){ + project.currentScene.entities.remove(selectedEntity); + selectedEntity = null; + } + if(key == KeyEvent.VK_M && km.getKeyDown(KeyEvent.VK_CONTROL)){ + project.currentScene.save("data/projects/" + project.name); + } + if(key == KeyEvent.VK_C && km.getKeyDown(KeyEvent.VK_CONTROL)){ + if(selectedEntity instanceof BoxColl){ + BoxColl box = (BoxColl)selectedEntity; + project.currentScene.entities.add(new BoxColl(box.position.copy(), new Dimension(box.collision.width, box.collision.height), box.color)); + } + if(selectedEntity instanceof BoxNoColl){ + BoxNoColl box = (BoxNoColl)selectedEntity; + project.currentScene.entities.add(new BoxNoColl(box.position.copy(), box.color, box.width, box.height)); + } + if(selectedEntity instanceof InvisColl){ + InvisColl box = (InvisColl)selectedEntity; + project.currentScene.entities.add(new InvisColl(box.position.copy(), new Dimension(box.collision.width, box.collision.height))); + } + if(selectedEntity instanceof Trigger){ + Trigger box = (Trigger)selectedEntity; + project.currentScene.entities.add(new Trigger(box.position.copy(), new Dimension(box.box.width, box.box.height), box.id)); + } + if(selectedEntity instanceof PlrStart){ + PlrStart box = (PlrStart)selectedEntity; + project.currentScene.entities.add(new PlrStart(box.position.copy())); + } + if(selectedEntity instanceof CustomEntity){ + CustomEntity box = (CustomEntity)selectedEntity; + int[] data = new int[box.data.length]; + for(int i = 0; i < data.length; i++){ + data[i] = box.data[i]; + } + Dimension collision = null; + if(box.collision != null) collision = new Dimension(box.collision.width, box.collision.height); + project.currentScene.entities.add(new CustomEntity(box.position.copy(), collision, data, box.name)); + } + } + if(key == KeyEvent.VK_L){ + drawLight = !drawLight; + } + } + + public void onMousePressed(int mb, Point mousePos){ + mousePos = frameManager.getMousePos(panel, mousePos); + if(mousePos.equals(new Point())) return; // likely outside of frame + + if(mb == 1){ + if(dropDown){ + if(dropRect.contains(mousePos)){ + int sel = getDropSel(mousePos.y); + if(dropType == 0){ + switch(sel){ + case 0: + case 1: + case 2: + tool = sel; + break; + case 3: + cam.pos = new Position(); + break; + case 4: + try{ + int r, g, b; + String input = JOptionPane.showInputDialog(panel, "Enter the red value.", "Trident", JOptionPane.QUESTION_MESSAGE); + r = Integer.parseInt(input); + input = JOptionPane.showInputDialog(panel, "Enter the green value.", "Trident", JOptionPane.QUESTION_MESSAGE); + g = Integer.parseInt(input); + input = JOptionPane.showInputDialog(panel, "Enter the blue value.", "Trident", JOptionPane.QUESTION_MESSAGE); + b = Integer.parseInt(input); + Color c = new Color(r, g, b); + project.currentScene.bgColor = c; + }catch(Exception e){} + break; + case 5: + try{ + int level; + String input = JOptionPane.showInputDialog(panel, "Enter the new default light level", "Trident", JOptionPane.QUESTION_MESSAGE); + level = Integer.parseInt(input); + level = BTools.clamp(level, 0, 255); + project.currentScene.defaultLight = level; + }catch(Exception e){} + break; + case 6: + project.currentScene.save("data/projects/" + project.name); + System.exit(0); + break; + } + } + if(dropType == 1){ + switch(sel){ + case 0: + project.currentScene.entities.remove(selectedEntity); + selectedEntity = null; + break; + case 1: + if(selectedEntity instanceof BoxColl){ + BoxColl box = (BoxColl)selectedEntity; + project.currentScene.entities.add(new BoxColl(box.position.copy(), new Dimension(box.collision.width, box.collision.height), box.color)); + } + if(selectedEntity instanceof BoxNoColl){ + BoxNoColl box = (BoxNoColl)selectedEntity; + project.currentScene.entities.add(new BoxNoColl(box.position.copy(), box.color, box.width, box.height)); + } + if(selectedEntity instanceof InvisColl){ + InvisColl box = (InvisColl)selectedEntity; + project.currentScene.entities.add(new InvisColl(box.position.copy(), new Dimension(box.collision.width, box.collision.height))); + } + if(selectedEntity instanceof Trigger){ + Trigger box = (Trigger)selectedEntity; + project.currentScene.entities.add(new Trigger(box.position.copy(), new Dimension(box.box.width, box.box.height), box.id)); + } + if(selectedEntity instanceof PlrStart){ + PlrStart box = (PlrStart)selectedEntity; + project.currentScene.entities.add(new PlrStart(box.position.copy())); + } + if(selectedEntity instanceof CustomEntity){ + CustomEntity box = (CustomEntity)selectedEntity; + int[] data = new int[box.data.length]; + for(int i = 0; i < data.length; i++){ + data[i] = box.data[i]; + } + Dimension collision = null; + if(box.collision != null) collision = new Dimension(box.collision.width, box.collision.height); + project.currentScene.entities.add(new CustomEntity(box.position.copy(), collision, data, box.name)); + } + break; + case 2: + if(selectedEntity instanceof BoxColl){ + try{ + int[] data = new int[3]; + for(int i = 0; i < 3; i++){ + String input = JOptionPane.showInputDialog(panel, "Enter data[" + i + "]", "Trident", JOptionPane.QUESTION_MESSAGE); + data[i] = Integer.parseInt(input); + } + BoxColl box = (BoxColl)selectedEntity; + box.color = new Color(data[0], data[1], data[2]); + }catch(Exception e){} + } + if(selectedEntity instanceof BoxNoColl){ + try{ + int[] data = new int[3]; + for(int i = 0; i < 3; i++){ + String input = JOptionPane.showInputDialog(panel, "Enter data[" + i + "]", "Trident", JOptionPane.QUESTION_MESSAGE); + data[i] = Integer.parseInt(input); + } + BoxNoColl box = (BoxNoColl)selectedEntity; + box.color = new Color(data[0], data[1], data[2]); + }catch(Exception e){} + } + if(selectedEntity instanceof CustomEntity){ + try{ + CustomEntity c = (CustomEntity)selectedEntity; + int[] data = new int[c.data.length]; + for(int i = 0; i < c.data.length; i++){ + String input = JOptionPane.showInputDialog(panel, "Enter data[" + i + "]", "Trident", JOptionPane.QUESTION_MESSAGE); + data[i] = Integer.parseInt(input); + } + c.data = data; + }catch(Exception e){} + } + if(selectedEntity instanceof Trigger){ + try{ + int[] data = new int[1]; + for(int i = 0; i < 1; i++){ + String input = JOptionPane.showInputDialog(panel, "Enter data[" + i + "]", "Trident", JOptionPane.QUESTION_MESSAGE); + data[i] = Integer.parseInt(input); + } + Trigger box = (Trigger)selectedEntity; + box.id = data[0]; + }catch(Exception e){} + } + break; + case 3: + Position worldPos = cam.mouseToPos(new Point(dropRect.x, dropRect.y)); + selectedEntity.position = worldPos; + break; + } + } + if(dropType == 2){ + Position worldPos = cam.mouseToPos(new Point(dropRect.x, dropRect.y)); + switch(sel){ + case 0: + project.currentScene.entities.add(new BoxNoColl(worldPos, Color.black, 100, 100)); + break; + case 1: + project.currentScene.entities.add(new BoxColl(worldPos, new Dimension(100, 100), Color.black)); + break; + case 2: + project.currentScene.entities.add(new InvisColl(worldPos, new Dimension(100, 100))); + break; + case 3: + project.currentScene.entities.add(new PlrStart(worldPos)); + break; + case 4: + try{ + String input = JOptionPane.showInputDialog(panel, "Enter the ID for the trigger", "Trident", JOptionPane.QUESTION_MESSAGE); + int id = Integer.parseInt(input); + project.currentScene.entities.add(new Trigger(worldPos, new Dimension(100, 100), id)); + }catch(Exception e){} + break; + case 5: + String name = JOptionPane.showInputDialog(panel, "Enter the object name", "Trident", JOptionPane.QUESTION_MESSAGE); + if(name != null){ + int coll = JOptionPane.showConfirmDialog(panel, "Does the object have collision?", "Trident", JOptionPane.YES_NO_CANCEL_OPTION); + if(coll == 2) break; + Dimension collider = null; + if(coll == 0) collider = new Dimension(100, 100); + + String input = JOptionPane.showInputDialog(panel, "Enter the amount of data you need", "Trident", JOptionPane.QUESTION_MESSAGE); + try{ + int numData = Integer.parseInt(input); + int[] data = new int[numData]; + for(int i = 0; i < numData; i++){ + String dataStr = JOptionPane.showInputDialog(panel, "Enter data[" + i + "]", "Trident", JOptionPane.QUESTION_MESSAGE); + data[i] = Integer.parseInt(dataStr); + } + project.currentScene.entities.add(new CustomEntity(worldPos, collider, data, name)); + System.out.println("created entity"); + }catch(Exception e){ + e.printStackTrace(); + dropDown = false; + return; + } + } + break; + case 6: + project.currentScene.entities.add(new project.ent.Light(worldPos, 50)); + break; + } + } + + dropDown = false; + return; + }else{ + dropDown = false; + return; + } + } + + if(mousePos.y < 40){ + System.out.println(mousePos.x); + // Toolbar + if(mousePos.x < 40){ + dropDown = true; + dropType = 0; + dropRect = new Rectangle(0, 40, 200, 32 * 7); + }else if(mousePos.x < 90){ + BTools.openHighlightFile(new File("data/projects/" + project.name).getAbsolutePath()); + }else if(mousePos.x < 212){ + String name = JOptionPane.showInputDialog(panel, "Enter the scene name", "Trident", JOptionPane.QUESTION_MESSAGE); + if(name != null){ + boolean loaded = project.loadScene(name); + if(!loaded){ + JOptionPane.showMessageDialog(panel, "Error: no scene with name '" + name + "' found.", "Trident", JOptionPane.ERROR_MESSAGE); + } + } + }else if(mousePos.x < 327){ + String name = JOptionPane.showInputDialog(panel, "Enter the scene name", "Trident", JOptionPane.QUESTION_MESSAGE); + if(name != null){ + Scene scene = new Scene(name); + scene.save("data/projects/" + project.name); + project.setupScenes(); + project.loadScene(name); + } + }else if(mousePos.x < 391){ + project.currentScene.save("data/projects/" + project.name); + saveTime = 1000; + }else if(mousePos.x < 520){ + project.currentScene.plrDir++; + if(project.currentScene.plrDir > 3) project.currentScene.plrDir = 0; + } + }else{ + if(tool == 0){ + if(selectedEntity != null){ + selectedEntity = null; + } + Position worldPos = cam.mouseToPos(mousePos); + for(TridEntity e: project.currentScene.entities){ + if(BTools.getDistance(e.position, worldPos) < 32){ + selectedEntity = e; + return; + } + } + } + } + } + + if(mb == 3){ + if(selectedEntity == null){ + dropDown = true; + dropType = 2; + dropRect = new Rectangle(mousePos.x, mousePos.y, 200, 32 * 7); + }else{ + dropDown = true; + dropType = 1; + dropRect = new Rectangle(mousePos.x, mousePos.y, 200, 32 * 4); + } + } + + } + } + + MainPanel parent = this; + private class ServerListener implements ActionListener{ + public void actionPerformed(ActionEvent event){ + + Point delta = new Point(-mouse.x + frameManager.getMousePos(parent, km.getMousePos()).x, -mouse.y + frameManager.getMousePos(parent, km.getMousePos()).y); + mouse = frameManager.getMousePos(parent, km.getMousePos()); + + // Movement + Point dir = new Point(); + if(km.getKeyDown(KeyEvent.VK_W)) dir.y--; + if(km.getKeyDown(KeyEvent.VK_S)) dir.y++; + if(km.getKeyDown(KeyEvent.VK_A)) dir.x--; + if(km.getKeyDown(KeyEvent.VK_D)) dir.x++; + double speed = 0.5; + if(km.getKeyDown(KeyEvent.VK_SHIFT)) speed *= 2; + if(km.getKeyDown(KeyEvent.VK_CONTROL)) speed /= 2; + cam.pos.x += dir.x * server.getElapsedTime() * speed; + cam.pos.y += dir.y * server.getElapsedTime() * speed; + + saveTime -= server.getElapsedTime(); + if(saveTime < 0) saveTime = 0; + + if(tool == 1 && selectedEntity != null && km.getMouseDown(1)){ + selectedEntity.position.x += delta.x; + selectedEntity.position.y += delta.y; + } + if(tool == 2 && selectedEntity != null && km.getMouseDown(1)){ + if(selectedEntity instanceof project.ent.Light){ + project.ent.Light light = (project.ent.Light)selectedEntity; + light.radius += delta.x; + if(light.radius < 0) light.radius = 0; + } + if(selectedEntity instanceof BoxNoColl){ + BoxNoColl box = (BoxNoColl)selectedEntity; + box.width += delta.x; + box.height -= delta.y; + if(box.width < 0) box.width = 0; + if(box.height < 0) box.height = 0; + } + if(selectedEntity instanceof Trigger){ + Trigger trig = (Trigger)selectedEntity; + trig.box.width += delta.x; + trig.box.height -= delta.y; + if(trig.box.width < 0) trig.box.width = 0; + if(trig.box.height < 0) trig.box.height = 0; + } + if(selectedEntity.HASCOLLISION){ + selectedEntity.collision.width += delta.x; + selectedEntity.collision.height -= delta.y; + if(selectedEntity.collision.width < 0) selectedEntity.collision.width = 0; + if(selectedEntity.collision.height < 0) selectedEntity.collision.height = 0; + } + } + + setCursor(cursors[tool]); + + repaint(); + } + } +} diff --git a/Trident/Trident/src/project/Project.java b/Trident/Trident/src/project/Project.java new file mode 100644 index 0000000..d9af66b --- /dev/null +++ b/Trident/Trident/src/project/Project.java @@ -0,0 +1,1416 @@ +package project; + +import java.io.*; +import blib.util.*; +import java.util.ArrayList; +import blib.bson.*; +public class Project { + + public static String[] projRegistry = null; + + public String name; + public ArrayList loadedScenes = new ArrayList(); + public Scene currentScene = new Scene("Empty Scene"); + + public Project(int proj){ // Load from file + name = projRegistry[proj]; + setupScenes(); + currentScene = loadedScenes.get(0); + } + public Project(String name){ // New project + + this.name = name; + + // Make directories + File dir = new File("data/projects/" + name + "/src/trident/ent"); + dir.mkdirs(); + dir = new File("data/projects/" + name + "/src/update"); + dir.mkdirs(); + dir = new File("data/projects/" + name + "/src/ent"); + dir.mkdirs(); + dir = new File("data/projects/" + name + "/src/custom"); + dir.mkdirs(); + dir = new File("data/projects/" + name + "/lib"); + dir.mkdirs(); + dir = new File("data/projects/" + name + "/data/images/player"); + dir.mkdirs(); + dir = new File("data/projects/" + name + "/data/images/trident"); + dir.mkdirs(); + dir = new File("data/projects/" + name + "/data/scenes"); + dir.mkdirs(); + dir = new File("data/projects/" + name + "/data/animations"); + dir.mkdirs(); + + // Copy files (images and the such) + BTools.copyFile(new File("data/BLib.jar"), new File("data/projects/" + name + "/lib/BLib.jar")); + BTools.copyFile(new File("data/JHLabs Filters.jar"), new File("data/projects/" + name + "/lib/JHLabs Filters.jar")); + BTools.copyFile(new File("data/images/trident/box.png"), new File("data/projects/" + name + "/data/images/trident/box.png")); + BTools.copyFile(new File("data/images/trident/boxColl.png"), new File("data/projects/" + name + "/data/images/trident/boxColl.png")); + BTools.copyFile(new File("data/images/trident/collision.png"), new File("data/projects/" + name + "/data/images/trident/collision.png")); + BTools.copyFile(new File("data/images/trident/customEnt.png"), new File("data/projects/" + name + "/data/images/trident/customEnt.png")); + BTools.copyFile(new File("data/images/trident/plrStart.png"), new File("data/projects/" + name + "/data/images/trident/plrStart.png")); + BTools.copyFile(new File("data/images/trident/trigger.png"), new File("data/projects/" + name + "/data/images/trident/trigger.png")); + BTools.copyFile(new File("data/images/trident/light.png"), new File("data/projects/" + name + "/data/images/trident/light.png")); + BTools.copyFile(new File("data/images/trident/splash.png"), new File("data/projects/" + name + "/data/images/trident/splash.png")); + BTools.copyFile(new File("data/icon.png"), new File("data/projects/" + name + "/data/icon.png")); + BTools.copyFile(new File("data/images/player/idleS.png"), new File("data/projects/" + name + "/data/images/player/idleS.png")); + BTools.copyFile(new File("data/images/player/idleN.png"), new File("data/projects/" + name + "/data/images/player/idleN.png")); + BTools.copyFile(new File("data/images/player/idleW.png"), new File("data/projects/" + name + "/data/images/player/idleW.png")); + BTools.copyFile(new File("data/images/player/idleE.png"), new File("data/projects/" + name + "/data/images/player/idleE.png")); + BTools.copyFile(new File("data/images/player/walkS.png"), new File("data/projects/" + name + "/data/images/player/walkS.png")); + BTools.copyFile(new File("data/images/player/walkN.png"), new File("data/projects/" + name + "/data/images/player/walkN.png")); + BTools.copyFile(new File("data/images/player/walkE.png"), new File("data/projects/" + name + "/data/images/player/walkE.png")); + BTools.copyFile(new File("data/images/player/walkW.png"), new File("data/projects/" + name + "/data/images/player/walkW.png")); + + // Write files (source files & bson files) + + // src/trident + try{ + File file = new File("data/projects/" + name + "/src/trident/Main.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package trident;"); + writer.println(""); + writer.println("import javax.swing.*;"); + writer.println("import java.awt.*;"); + writer.println("public class Main{"); + writer.println(" protected static JFrame window = new JFrame(\"" + name + "\");"); + writer.println(" public static void main(String[] args){"); + writer.println(" window.setSize(700, 500);"); + writer.println(" window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);"); + writer.println(" window.setMinimumSize(new Dimension(700, 500));"); + writer.println(" window.setIconImage(new ImageIcon(\"data/icon.png\").getImage());"); + writer.println(" // panel"); + writer.println(" MainPanel panel = new MainPanel();"); + writer.println(" window.add(panel);"); + writer.println(" //"); + writer.println(" window.setVisible(true);"); + writer.println(" }"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + try{ + File file = new File("data/projects/" + name + "/src/trident/MainPanel.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package trident;"); + writer.println(""); + writer.println("import javax.swing.*;"); + writer.println("import java.awt.*;"); + writer.println("import blib.game.*;"); + writer.println("import blib.util.*;"); + writer.println("import java.awt.event.*;"); + writer.println("import java.io.File;"); + writer.println("import java.io.PrintWriter;"); + writer.println(""); + writer.println("import blib.input.*;"); + writer.println("import java.util.ArrayList;"); + writer.println("import java.util.Scanner;"); + writer.println(""); + writer.println("import blib.anim.*;"); + writer.println(""); + writer.println("import trident.ent.*;"); + writer.println("import update.*;"); + writer.println("public class MainPanel extends JPanel {"); + writer.println(""); + writer.println(" protected FrameManager frameManager = new FrameManager();"); + writer.println(" protected Server server;"); + writer.println(" protected KeyManager km = new InputListener(this);"); + writer.println(" private Animator introAnim;"); + writer.println(" private Position introPos = new Position();"); + writer.println(" private ImageIcon splash = new ImageIcon(\"data/images/trident/splash.png\");"); + writer.println(" private boolean inIntro = false;"); + writer.println(" "); + writer.println(" public MainPanel(){"); + writer.println(" setBackground(Color.black);"); + writer.println(""); + writer.println(" Trident.player = new Player(new Position(), km, 0.1, this, \"data/images/player\", 16, 16);"); + writer.println(" Trident.player.camera.setDimension = new Dimension(frameManager.WIDTH, frameManager.HEIGHT);"); + writer.println(" Trident.player.resizeImages(32, 32);"); + writer.println(" Trident.currentScene = new Scene(\"Test Scene\");"); + writer.println(" Trident.camShake = new CamShake(Trident.player.camera);"); + writer.println(" Trident.lightManager.blur.setRadius(100);"); + writer.println(""); + writer.println(" Trident.addCustomEntity(new BoxColl());"); + writer.println(" Trident.addCustomEntity(new BoxNoColl());"); + writer.println(" Trident.addCustomEntity(new InvisColl());"); + writer.println(" Trident.addCustomEntity(new PlrStart());"); + writer.println(" Trident.addCustomEntity(new Trigger());"); + writer.println(" Trident.addCustomEntity(new TridLight());"); + writer.println(""); + writer.println(" Update.setup();"); + writer.println(""); + writer.println(" Trident.setupScenes();"); + writer.println(""); + writer.println(" Trident.loadScene(Trident.defaultScene);"); + writer.println(""); + writer.println(" try{"); + writer.println(" ArrayList anims = new ArrayList();"); + writer.println(" anims.add(new Animation(\"data/animations/intro\"));"); + writer.println(""); + writer.println(" introAnim = new Animator(introPos, anims);"); + writer.println(" }catch(Exception e){"); + writer.println(" Trident.intro = false;"); + writer.println(" }"); + writer.println(" if(Trident.intro){"); + writer.println(" introAnim.play(\"intro\");"); + writer.println(" inIntro = true;"); + writer.println(" }"); + writer.println(" if(Trident.splash != null && BTools.hasImage(Trident.splash)){"); + writer.println(" BTools.resizeImgIcon(Trident.splash, 160, 160);"); + writer.println(" }"); + writer.println(""); + writer.println(" server = new Server(new ServerListener());"); + writer.println(" }"); + writer.println(""); + writer.println(" public void paintComponent(Graphics graphics){"); + writer.println(" super.paintComponent(graphics);"); + writer.println(" Graphics g = frameManager.newFrame();"); + writer.println(" int WIDTH = frameManager.WIDTH, HEIGHT = frameManager.HEIGHT;"); + writer.println(" int offX, offY;"); + writer.println(" offX = Trident.camShake.offX;"); + writer.println(" offY = Trident.camShake.offY;"); + writer.println(""); + writer.println(" frameManager.bgColor = Trident.currentScene.bgColor;"); + writer.println(""); + writer.println(" if(Trident.engineDraw){"); + writer.println(" for(TridEntity e: Trident.currentScene.entities){"); + writer.println(" Point p = Trident.player.camera.worldToScreen(e.position);"); + writer.println(" e.engineRender(g, this, p.x, p.y);"); + writer.println(" }"); + writer.println(" }"); + writer.println(""); + writer.println(" ArrayList> splitEnt = Trident.player.camera.splitEntities(Trident.tridArrToEntArr(Trident.currentScene.entities), 16);"); + writer.println(" if(!Trident.engineDraw) Trident.player.camera.render(g, splitEnt.get(2), offX, offY);"); + writer.println(" if(!Trident.engineDraw) Trident.player.camera.render(g, splitEnt.get(0), offX, offY);"); + writer.println(" if(Trident.drawPlayer){"); + writer.println(" Trident.player.render(this, g, frameManager.WIDTH / 2 - 16 - offX, frameManager.HEIGHT / 2 - 16 - offY);"); + writer.println(" }"); + writer.println(" if(!Trident.engineDraw) Trident.player.camera.render(g, splitEnt.get(1), offX, offY);"); + writer.println(" if(!Trident.engineDraw) Trident.player.camera.render(g, splitEnt.get(3), offX, offY);"); + writer.println(""); + writer.println(""); + writer.println(" Trident.lightManager.render(Trident.player.camera, Trident.lights, g, offX, offY);"); + writer.println(""); + writer.println(" if(Trident.drawCollision){"); + writer.println(" g.setColor(Color.red);"); + writer.println(" ArrayList collision = Trident.currentScene.getCollision();"); + writer.println(" collision.add(Trident.player.getCollision());"); + writer.println(" for(Rectangle r: collision){"); + writer.println(" Point p = Trident.player.camera.worldToScreen(new Position(r.x, r.y));"); + writer.println(" g.drawRect(p.x, p.y, r.width, r.height);"); + writer.println(" g.drawLine(p.x, p.y, p.x + r.width, p.y + r.height);"); + writer.println(" }"); + writer.println(" }"); + writer.println(""); + writer.println(" if(Trident.drawPos){"); + writer.println(" g.setColor(Trident.debugColor);"); + writer.println(" g.setFont(new Font(\"Arial\", Font.ITALIC, 10));"); + writer.println(" TextBox.draw(Trident.player.getPos().toStringSimple(), g, 10, 30);"); + writer.println(" }"); + writer.println(" if(Trident.drawFrames){"); + writer.println(" g.setColor(Trident.debugColor);"); + writer.println(" g.setFont(new Font(\"Arial\", Font.ITALIC, 10));"); + writer.println(" TextBox.draw(\"delay: \" + server.getElapsedTime() + \" ms\", g, 10, 30);"); + writer.println(" TextBox.draw(\"FPS: \" + (1000 / server.getElapsedTime()), g, 10, 40);"); + writer.println(" }"); + writer.println(" "); + writer.println(" // Apply Post Processing"); + writer.println(" if(Trident.enableExposure){"); + writer.println(" Trident.exposure.filter(frameManager.getFrame(), frameManager.getFrame());"); + writer.println(" }"); + writer.println(" if(Trident.enableBloom){"); + writer.println(" Trident.bloom.filter(frameManager.getFrame(), frameManager.getFrame());"); + writer.println(" }"); + writer.println(" "); + writer.println(" if(inIntro){"); + writer.println(" g.setColor(Color.black);"); + writer.println(" g.fillRect(0, 0, 700, 500);"); + writer.println(""); + writer.println(" if(Trident.splash != null && BTools.hasImage(Trident.splash)){"); + writer.println(" // Trident splash + custom splash"); + writer.println(" splash.paintIcon(this, g, WIDTH / 2 - 80, 40);"); + writer.println(" Trident.splash.paintIcon(this, g, WIDTH / 2 - 80, HEIGHT - 200);"); + writer.println(" }else{"); + writer.println(" // Trident splash only"); + writer.println(" splash.paintIcon(this, g, WIDTH / 2 - 80, HEIGHT / 2 - 80);"); + writer.println(" }"); + writer.println(""); + writer.println(" float alpha = (float)introPos.x;"); + writer.println(" g.setColor(new Color(0f, 0f, 0f, alpha));"); + writer.println(" g.fillRect(0, 0, 700, 500);"); + writer.println(" }"); + writer.println(""); + writer.println(" frameManager.renderFrame(this, graphics);"); + writer.println(" }"); + writer.println(""); + writer.println(" public MainPanel panel = this;"); + writer.println(" private class InputListener extends InputAdapter {"); + writer.println(" public InputListener(JPanel panel){"); + writer.println(" super(panel);"); + writer.println(" }"); + writer.println(""); + writer.println(" public void onKeyPressed(int key){"); + writer.println(" if(key == KeyEvent.VK_F11){"); + writer.println(" Trident.fullscreen = !Trident.fullscreen;"); + writer.println(" Main.window = BTools.getWindowFullscreen(Main.window, Trident.fullscreen, panel);"); + writer.println(" return;"); + writer.println(" }"); + writer.println(" if(!inIntro){"); + writer.println(" if(key == 192 && Trident.consoleEnabled){"); + writer.println(" // dev console"); + writer.println(" String command = JOptionPane.showInputDialog(null, \"Enter Console Command\", \"Dev Console\", JOptionPane.QUESTION_MESSAGE);"); + writer.println(" if(command != null && command.length() > 0){"); + writer.println(" ArrayList cmdParts = new ArrayList();"); + writer.println(" Scanner scanner = new Scanner(command);"); + writer.println(" while(scanner.hasNext()){"); + writer.println(" cmdParts.add(scanner.next());"); + writer.println(" }"); + writer.println(" scanner.close();"); + writer.println(""); + writer.println(" if(cmdParts.size() == 0) return;"); + writer.println(" try{"); + writer.println(" switch(cmdParts.get(0)){"); + writer.println(" case \"drawCollision\":"); + writer.println(" if(cmdParts.size() == 1){"); + writer.println(" JOptionPane.showMessageDialog(null, \"drawCollision is \" + Trident.drawCollision, \"Dev Console\", JOptionPane.INFORMATION_MESSAGE);"); + writer.println(" break;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"1\") || cmdParts.get(1).equals(\"true\")){"); + writer.println(" Trident.drawCollision = true;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"0\") || cmdParts.get(1).equals(\"false\")){"); + writer.println(" Trident.drawCollision = false;"); + writer.println(" }"); + writer.println(" break;"); + writer.println(" case \"engineDraw\":"); + writer.println(" if(cmdParts.size() == 1){"); + writer.println(" JOptionPane.showMessageDialog(null, \"engineDraw is \" + Trident.engineDraw, \"Dev Console\", JOptionPane.INFORMATION_MESSAGE);"); + writer.println(" break;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"1\") || cmdParts.get(1).equals(\"true\")){"); + writer.println(" Trident.engineDraw = true;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"0\") || cmdParts.get(1).equals(\"false\")){"); + writer.println(" Trident.engineDraw = false;"); + writer.println(" }"); + writer.println(" break;"); + writer.println(" case \"drawPos\":"); + writer.println(" if(cmdParts.size() == 1){"); + writer.println(" JOptionPane.showMessageDialog(null, \"drawPos is \" + Trident.drawPos, \"Dev Console\", JOptionPane.INFORMATION_MESSAGE);"); + writer.println(" break;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"1\") || cmdParts.get(1).equals(\"true\")){"); + writer.println(" Trident.drawPos = true;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"0\") || cmdParts.get(1).equals(\"false\")){"); + writer.println(" Trident.drawPos = false;"); + writer.println(" }"); + writer.println(" break;"); + writer.println(" case \"noclip\":"); + writer.println(" if(cmdParts.size() == 1){"); + writer.println(" JOptionPane.showMessageDialog(null, \"noclip is \" + Trident.noclip, \"Dev Console\", JOptionPane.INFORMATION_MESSAGE);"); + writer.println(" break;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"1\") || cmdParts.get(1).equals(\"true\")){"); + writer.println(" Trident.noclip = true;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"0\") || cmdParts.get(1).equals(\"false\")){"); + writer.println(" Trident.noclip = false;"); + writer.println(" }"); + writer.println(" break;"); + writer.println(" case \"tp\":"); + writer.println(" int x = Integer.parseInt(cmdParts.get(1));"); + writer.println(" int y = Integer.parseInt(cmdParts.get(2));"); + writer.println(" Trident.setPlrPos(new Position(x, y));"); + writer.println(" break;"); + writer.println(" case \"loadMap\":"); + writer.println(" String map = \"\";"); + writer.println(" for(int i = 1; i < cmdParts.size(); i++){"); + writer.println(" map += cmdParts.get(i);"); + writer.println(" if(i != cmdParts.size() - 1) map += \" \";"); + writer.println(" }"); + writer.println(" Trident.loadScene(map);"); + writer.println(" break;"); + writer.println(" case \"drawFrames\":"); + writer.println(" if(cmdParts.size() == 1){"); + writer.println(" JOptionPane.showMessageDialog(null, \"drawFrames is \" + Trident.drawFrames, \"Dev Console\", JOptionPane.INFORMATION_MESSAGE);"); + writer.println(" break;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"1\") || cmdParts.get(1).equals(\"true\")){"); + writer.println(" Trident.drawFrames = true;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"0\") || cmdParts.get(1).equals(\"false\")){"); + writer.println(" Trident.drawFrames = false;"); + writer.println(" }"); + writer.println(" break;"); + writer.println(" case \"debugColor\":"); + writer.println(" int r, g, b;"); + writer.println(" float alpha = -1;"); + writer.println(" r = Integer.parseInt(cmdParts.get(1));"); + writer.println(" g = Integer.parseInt(cmdParts.get(2));"); + writer.println(" b = Integer.parseInt(cmdParts.get(3));"); + writer.println(" if(cmdParts.size() == 5){"); + writer.println(" alpha = Float.parseFloat(cmdParts.get(4));"); + writer.println(" }"); + writer.println(" if(alpha != -1){"); + writer.println(" Trident.debugColor = new Color(r / 255f, g / 255f, b / 255f, alpha);"); + writer.println(" }else{"); + writer.println(" Trident.debugColor = new Color(r, g, b);"); + writer.println(" }"); + writer.println(" break;"); + writer.println(" case \"enableBloom\":"); + writer.println(" if(cmdParts.size() == 1){"); + writer.println(" JOptionPane.showMessageDialog(null, \"enableBloom is \" + Trident.enableBloom, \"Dev Console\", JOptionPane.INFORMATION_MESSAGE);"); + writer.println(" break;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"1\") || cmdParts.get(1).equals(\"true\")){"); + writer.println(" Trident.enableBloom = true;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"0\") || cmdParts.get(1).equals(\"false\")){"); + writer.println(" Trident.enableBloom = false;"); + writer.println(" }"); + writer.println(" break;"); + writer.println(" case \"enableExposure\":"); + writer.println(" if(cmdParts.size() == 1){"); + writer.println(" JOptionPane.showMessageDialog(null, \"enableExposure is \" + Trident.enableExposure, \"Dev Console\", JOptionPane.INFORMATION_MESSAGE);"); + writer.println(" break;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"1\") || cmdParts.get(1).equals(\"true\")){"); + writer.println(" Trident.enableExposure = true;"); + writer.println(" }"); + writer.println(" if(cmdParts.get(1).equals(\"0\") || cmdParts.get(1).equals(\"false\")){"); + writer.println(" Trident.enableExposure = false;"); + writer.println(" }"); + writer.println(" break;"); + writer.println(" case \"setBloom\":"); + writer.println(" double amount = Double.parseDouble(cmdParts.get(1));"); + writer.println(" Trident.setBloom(amount);"); + writer.println(" break;"); + writer.println(" case \"setExposure\":"); + writer.println(" double expo = Double.parseDouble(cmdParts.get(1));"); + writer.println(" Trident.setExposure(expo);"); + writer.println(" break;"); + writer.println(" case \"setLightExposure\":"); + writer.println(" double exp = Double.parseDouble(cmdParts.get(1));"); + writer.println(" Trident.setLightExposure(exp);"); + writer.println(" break;"); + writer.println(" case \"setLightBlur\":"); + writer.println(" int blurLevel = Integer.parseInt(cmdParts.get(1)); "); + writer.println(" Trident.setLightBlur(blurLevel);"); + writer.println(" break;"); + writer.println(" default:"); + writer.println(" int cmd = Update.command(cmdParts);"); + writer.println(" if(cmd != 0){"); + writer.println(" JOptionPane.showMessageDialog(null, \"Unknown command: \" + cmdParts.get(0), \"Dev Console\", JOptionPane.INFORMATION_MESSAGE);"); + writer.println(" }"); + writer.println(" break;"); + writer.println(" }"); + writer.println(" }catch(Exception e){"); + writer.println(" int sel = JOptionPane.showConfirmDialog(null, \"Something went wrong while running your command. Save error log?\", \"Dev Console\", JOptionPane.YES_NO_OPTION);"); + writer.println(" if(sel == 0){"); + writer.println(" try{"); + writer.println(" File file = new File(\"errorLog.txt\");"); + writer.println(" file.createNewFile();"); + writer.println(" PrintWriter writer = new PrintWriter(file);"); + writer.println(" e.printStackTrace(writer);"); + writer.println(" writer.close();"); + writer.println(" }catch(Exception ex){"); + writer.println(" JOptionPane.showMessageDialog(null, \"Somehow, something also went wrong while saving the error logs. Printing into the default console...\", \"Dev Console\", JOptionPane.INFORMATION_MESSAGE);"); + writer.println(" System.out.println(\" ********* What went wrong while printing:\");"); + writer.println(" ex.printStackTrace();"); + writer.println(" System.out.println(\" ********* What went wrong with the command:\");"); + writer.println(" e.printStackTrace();"); + writer.println(" }"); + writer.println(" }"); + writer.println(" }"); + writer.println(" }"); + writer.println(" }"); + writer.println(" Inputs.keyPressed(key);"); + writer.println(" }"); + writer.println(" }"); + writer.println(""); + writer.println(" public void onMousePressed(int mb, Point mousePos){"); + writer.println(" mousePos = frameManager.getMousePos(panel, mousePos);"); + writer.println(" Position worldPos = Trident.player.camera.mouseToPos(mousePos);"); + writer.println(" if(!inIntro) Inputs.mousePressed(mb, mousePos, worldPos);"); + writer.println(" }"); + writer.println(""); + writer.println(" public void onScroll(int scroll){"); + writer.println(" if(!inIntro) Inputs.onScroll(scroll);"); + writer.println(" }"); + writer.println(" }"); + writer.println(""); + writer.println(" private class ServerListener implements ActionListener {"); + writer.println(" public void actionPerformed(ActionEvent event){"); + writer.println(" if(inIntro){"); + writer.println(" introAnim.update(server.getElapsedTime());"); + writer.println(" if(!introAnim.isPlaying()){"); + writer.println(" inIntro = false;"); + writer.println(" }"); + writer.println(" repaint();"); + writer.println(" return;"); + writer.println(" }"); + writer.println(" Trident.mousePos = frameManager.getMousePos(panel, km.getMousePos());"); + writer.println(" Trident.mouseDelta = km.getMouseDelta();"); + writer.println(" Trident.mouseWorldPos = Trident.player.camera.mouseToPos(Trident.mousePos);"); + writer.println(""); + writer.println(" Trident.camShake.update(server.getElapsedTime());"); + writer.println(""); + writer.println(" if(!Trident.noclip) Trident.player.updateWithCollision(server.getElapsedTime(), Trident.currentScene.getCollision());"); + writer.println(" else Trident.player.update(server.getElapsedTime());"); + writer.println(""); + writer.println(" for(int i = 0; i < Trident.getEntities().size(); i++){"); + writer.println(" TridEntity e = Trident.getEntities().get(i);"); + writer.println(" e.update(server.getElapsedTime());"); + writer.println(" if(e instanceof Trigger){"); + writer.println(" Trigger trig = (Trigger)e;"); + writer.println(" if(trig.containsPos(Trident.player.getPos())){"); + writer.println(" Update.trigger(trig.id);"); + writer.println(" }"); + writer.println(" }"); + writer.println(" }"); + writer.println(""); + writer.println(" for(int i = 0; i < 255; i++){"); + writer.println(" Trident.keys[i] = km.getKeyDown(i);"); + writer.println(" }"); + writer.println(" Trident.m1 = km.getMouseDown(1);"); + writer.println(" Trident.m2 = km.getMouseDown(2);"); + writer.println(" Trident.m3 = km.getMouseDown(3);"); + writer.println(" Trident.m4 = km.getMouseDown(4);"); + writer.println(" Trident.m5 = km.getMouseDown(5);"); + writer.println(""); + writer.println(" Update.update(server.getElapsedTime());"); + writer.println(""); + writer.println(" Trident.getEntities().sort((o1, o2) -> o2.compareSort(o1));"); + writer.println(""); + writer.println(" repaint();"); + writer.println(" }"); + writer.println(" }"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + try{ + File file = new File("data/projects/" + name + "/src/trident/Scene.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package trident;"); + writer.println(""); + writer.println("import java.util.ArrayList;"); + writer.println("import java.awt.*;"); + writer.println("import java.io.*;"); + writer.println("import blib.bson.*;"); + writer.println("import blib.util.*;"); + writer.println("import trident.ent.*;"); + writer.println("import blib.game.*;"); + writer.println("public class Scene {"); + writer.println(" "); + writer.println(" public final String name;"); + writer.println(" public ArrayList entities;"); + writer.println(" protected Position plrStart = new Position();"); + writer.println(" protected int plrDir = Player.SOUTH;"); + writer.println(" protected Color bgColor = Color.white;"); + writer.println(" protected int defaultLight = 255;"); + writer.println(""); + writer.println(" public Scene(String n){ // Empty scene"); + writer.println(" name = n;"); + writer.println(" entities = new ArrayList();"); + writer.println(" }"); + writer.println(" public Scene(File f) throws IOException{"); + writer.println(" entities = new ArrayList();"); + writer.println(" ArrayList objects = BSonParser.readFile(f.getAbsolutePath());"); + writer.println(" BSonObject obj = BSonParser.getObject(\"name\", objects);"); + writer.println(" name = obj.getString();"); + writer.println(" obj = BSonParser.getObject(\"dir\", objects);"); + writer.println(" if(obj != null){"); + writer.println(" String str = obj.getString();"); + writer.println(" if(str.equals(\"west\")) plrDir = Player.WEST;"); + writer.println(" if(str.equals(\"north\")) plrDir = Player.NORTH;"); + writer.println(" if(str.equals(\"east\")) plrDir = Player.EAST;"); + writer.println(" }"); + writer.println(" obj = BSonParser.getObject(\"bgColor\", objects);"); + writer.println(" BSonList asList = (BSonList)obj;"); + writer.println(" int r, g, b;"); + writer.println(" r = asList.list.get(0).getInt();"); + writer.println(" g = asList.list.get(1).getInt();"); + writer.println(" b = asList.list.get(2).getInt();"); + writer.println(" bgColor = new Color(r, g, b);"); + writer.println(" obj = BSonParser.getObject(\"light\", objects);"); + writer.println(" defaultLight = obj.getInt();"); + writer.println(" obj = BSonParser.getObject(\"entities\", objects);"); + writer.println(" asList = (BSonList)obj;"); + writer.println(" for(int i = 0; i < asList.list.size(); i++){"); + writer.println(" String objName = asList.list.get(i).getString();"); + writer.println(" i++;"); + writer.println(" boolean foundEnt = false;"); + writer.println(" for(TridEntity e: Trident.entRegistry){"); + writer.println(" if(e.name.equals(objName)){"); + writer.println(" double x, y;"); + writer.println(" x = asList.list.get(i).getDouble();"); + writer.println(" i++;"); + writer.println(" y = asList.list.get(i).getDouble();"); + writer.println(" i++;"); + writer.println(" int w = 0, h = 0;"); + writer.println(" i++;"); + writer.println(" if(e.HASCOLLISION){"); + writer.println(" w = asList.list.get(i).getInt();"); + writer.println(" i++;"); + writer.println(" h = asList.list.get(i).getInt();"); + writer.println(" i++;"); + writer.println(" }"); + writer.println(" int[] data = new int[e.numData];"); + writer.println(" for(int j = 0; j < e.numData; j++){"); + writer.println(" data[j] = asList.list.get(i).getInt();"); + writer.println(" i++;"); + writer.println(" }"); + writer.println(" i--;"); + writer.println(" entities.add(e.construct(new Position(x, y), (e.HASCOLLISION ? (new Dimension(w, h)) : null), data));"); + writer.println(" foundEnt = true;"); + writer.println(" break;"); + writer.println(" }"); + writer.println(" }"); + writer.println(" if(!foundEnt) System.out.println(\"ERROR: no entity type '\" + objName + \"' found\");"); + writer.println(" }"); + writer.println(""); + writer.println(" // Check for plrstart"); + writer.println(" for(TridEntity e: entities){"); + writer.println(" if(e instanceof PlrStart){"); + writer.println(" plrStart = e.position.copy();"); + writer.println(" break;"); + writer.println(" }"); + writer.println(" }"); + writer.println(" }"); + writer.println(""); + writer.println(" public static Scene loadScene(String path){ // stub method ::: Load a scene from a file"); + writer.println(" return null;"); + writer.println(" }"); + writer.println(""); + writer.println(" public ArrayList getCollision(){"); + writer.println(" ArrayList collision = new ArrayList();"); + writer.println(" for(TridEntity e: entities){"); + writer.println(" if(e.HASCOLLISION){"); + writer.println(" collision.add(e.getCollision());"); + writer.println(" }"); + writer.println(" }"); + writer.println(""); + writer.println(" return collision;"); + writer.println(" }"); + writer.println(""); + writer.println("}"); + writer.close(); + }catch(Exception e){} + try{ + File file = new File("data/projects/" + name + "/src/trident/Trident.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package trident;"); + writer.println(""); + writer.println("import blib.game.*;"); + writer.println("import blib.util.*;"); + writer.println("import java.awt.*;"); + writer.println("import java.util.ArrayList;"); + writer.println("import javax.swing.*;"); + writer.println("import update.*;"); + writer.println("import java.io.*;"); + writer.println("import trident.ent.*;"); + writer.println("import com.jhlabs.image.GlowFilter;"); + writer.println("import com.jhlabs.image.ExposureFilter;"); + writer.println("public class Trident {"); + writer.println(""); + writer.println(" // Debug Settings"); + writer.println(" public static boolean drawPos = false;"); + writer.println(" public static boolean drawCollision = false;"); + writer.println(" public static boolean noclip = false;"); + writer.println(" public static boolean engineDraw = false;"); + writer.println(" public static Color debugColor = Color.red;"); + writer.println(" public static boolean intro = true;"); + writer.println(" public static ImageIcon splash = null;"); + writer.println(" public static boolean drawFrames = false;"); + writer.println(" public static boolean consoleEnabled = true;"); + writer.println(" "); + writer.println(" // Public Variables"); + writer.println(" public static Point mousePos;"); + writer.println(" public static Point mouseDelta;"); + writer.println(" public static boolean drawPlayer = true;"); + writer.println(" public static Position mouseWorldPos = new Position();"); + writer.println(" public static boolean enableBloom = true, enableExposure = true;"); + writer.println(""); + writer.println(""); + writer.println(" // Trident Variables"); + writer.println(" protected static Player player;"); + writer.println(" protected static Scene currentScene;"); + writer.println(" protected static boolean fullscreen = false;"); + writer.println(" protected static ArrayList loadedScenes = new ArrayList();"); + writer.println(" protected static ArrayList entRegistry = new ArrayList();"); + writer.println(" protected static String defaultScene = \"default\";"); + writer.println(" protected static boolean m1 = false, m2 = false, m3 = false, m4 = false, m5 = false;"); + writer.println(" protected static boolean[] keys = new boolean[255];"); + writer.println(" protected static CamShake camShake;"); + writer.println(" protected static ArrayList lights = new ArrayList();"); + writer.println(" protected static LightManager lightManager = new LightManager(255);"); + writer.println(" protected static GlowFilter bloom = new GlowFilter();"); + writer.println(" protected static ExposureFilter exposure = new ExposureFilter();"); + writer.println(""); + writer.println(""); + writer.println(" // Setting methods"); + writer.println(" public static void setPlrSpeed(double speed){"); + writer.println(" player.speed = speed;"); + writer.println(" }"); + writer.println(" public static void setPlrPos(Position pos){"); + writer.println(" player.goToPos(pos);"); + writer.println(" }"); + writer.println(" public static void setShortCollision(boolean b){"); + writer.println(" player.shortCollision = b;"); + writer.println(" }"); + writer.println(" public static void setWindowTitle(String title){"); + writer.println(" Main.window.setTitle(title);"); + writer.println(" }"); + writer.println(" public static void setupScenes(){"); + writer.println(" try{"); + writer.println(" loadedScenes = new ArrayList();"); + writer.println(" File dir = new File(\"data/scenes\");"); + writer.println(" File[] files = dir.listFiles();"); + writer.println(" ArrayList sceneFiles = new ArrayList();"); + writer.println(" for(File f: files){"); + writer.println(" if(BTools.hasExtension(f, \"bson\")) sceneFiles.add(f);"); + writer.println(" }"); + writer.println(""); + writer.println(" for(File f: sceneFiles){"); + writer.println(" loadedScenes.add(new Scene(f));"); + writer.println(" }"); + writer.println(" }catch(Exception e){"); + writer.println(" System.out.println(\"Error setting up scenes.\");"); + writer.println(" e.printStackTrace();"); + writer.println(" }"); + writer.println(" "); + writer.println(" }"); + writer.println(" public static void loadScene(String name){"); + writer.println(" lights = new ArrayList();"); + writer.println(" for(Scene s: loadedScenes){"); + writer.println(" if(s.name.equals(name)){"); + writer.println(" currentScene = s;"); + writer.println(" player.goToPos(s.plrStart);"); + writer.println(" player.setDirection(s.plrDir);"); + writer.println(" for(TridEntity e: s.entities){"); + writer.println(" if(e instanceof TridLight){"); + writer.println(" TridLight asLight = (TridLight)e;"); + writer.println(" lights.add(new Light(asLight.position, asLight.radius));"); + writer.println(" }"); + writer.println(" }"); + writer.println(" lightManager.defaultLight = s.defaultLight;"); + writer.println(" Update.sceneStart(name);"); + writer.println(" return;"); + writer.println(" }"); + writer.println(" }"); + writer.println(" System.out.println(\"***********************************************************************************\");"); + writer.println(" System.out.println(\"Error loading scene: No scene with name '\" + name + \"' found.\");"); + writer.println(" System.out.println(\"***********************************************************************************\");"); + writer.println(" }"); + writer.println(" public static void addCustomEntity(TridEntity e){ // Add a cutsom entity to the registry"); + writer.println(" entRegistry.add(e);"); + writer.println(" }"); + writer.println(" public static void spawnEntity(TridEntity e){"); + writer.println(" currentScene.entities.add(e);"); + writer.println(" }"); + writer.println(" public static void setDefaultScene(String s){"); + writer.println(" defaultScene = s;"); + writer.println(" }"); + writer.println(" public static void destroy(TridEntity object){"); + writer.println(" getEntities().remove(object);"); + writer.println(" }"); + writer.println(" public static void shakeCam(double intensity){"); + writer.println(" camShake.addTrauma(intensity);"); + writer.println(" }"); + writer.println(" public static void removeShake(){"); + writer.println(" camShake.trauma = 0;"); + writer.println(" }"); + writer.println(" public static void setShakeStrength(int str){"); + writer.println(" camShake.strength = str;"); + writer.println(" }"); + writer.println(" public static void setShakeLoss(double loss){"); + writer.println(" camShake.traumaLoss = loss;"); + writer.println(" }"); + writer.println(" public static void setBloom(double amount){"); + writer.println(" bloom.setAmount((float)amount);"); + writer.println(" }"); + writer.println(" public static void setExposure(double exp){"); + writer.println(" exposure.setExposure((float)exp);"); + writer.println(" }"); + writer.println(" public static void setLightBlur(int level){"); + writer.println(" lightManager.blur.setIterations(level);"); + writer.println(" }"); + writer.println(" public static void setLightExposure(double exp){"); + writer.println(" lightManager.exposure.setExposure((float)exp);"); + writer.println(" }"); + writer.println(""); + writer.println(" // Getting methods"); + writer.println(" public static double getPlrSpeed(){"); + writer.println(" return player.speed;"); + writer.println(" }"); + writer.println(" public static Position getPlrPos(){"); + writer.println(" return player.getPos().copy();"); + writer.println(" }"); + writer.println(" public static Scene getCurrentScene(){"); + writer.println(" return currentScene;"); + writer.println(" }"); + writer.println(" public static boolean getFullscreen(){"); + writer.println(" return fullscreen; "); + writer.println(" }"); + writer.println(" public static ArrayList tridArrToEntArr(ArrayList entities){"); + writer.println(" ArrayList newEntities = new ArrayList();"); + writer.println(" for(TridEntity e: entities){"); + writer.println(" newEntities.add((Entity)e);"); + writer.println(" }"); + writer.println(" return newEntities;"); + writer.println(" }"); + writer.println(" public static ArrayList entArrToTridArr(ArrayList entities){"); + writer.println(" ArrayList newEntities = new ArrayList();"); + writer.println(" for(Entity e: entities){"); + writer.println(" newEntities.add((TridEntity)e);"); + writer.println(" }"); + writer.println(" return newEntities;"); + writer.println(" }"); + writer.println(" public static ArrayList getEntities(){"); + writer.println(" return currentScene.entities;"); + writer.println(" }"); + writer.println(" public static ArrayList getCollision(){"); + writer.println(" return currentScene.getCollision();"); + writer.println(" }"); + writer.println(" public static boolean getMouseDown(int mb){"); + writer.println(" if(mb == 1){"); + writer.println(" return m1;"); + writer.println(" }"); + writer.println(" if(mb == 2){"); + writer.println(" return m2;"); + writer.println(" }"); + writer.println(" if(mb == 3){"); + writer.println(" return m3;"); + writer.println(" }"); + writer.println(" if(mb == 4){"); + writer.println(" return m4;"); + writer.println(" }"); + writer.println(" if(mb == 5){"); + writer.println(" return m5;"); + writer.println(" }"); + writer.println(" return false;"); + writer.println(" }"); + writer.println(" public static boolean getKeyDown(int key){"); + writer.println(" return keys[key];"); + writer.println(" }"); + writer.println(" public static Player getPlr(){"); + writer.println(" return player;"); + writer.println(" }"); + writer.println(""); + writer.println("}"); + writer.close(); + }catch(Exception e){} + try{ + File file = new File("data/projects/" + name + "/src/trident/TridEntity.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package trident;"); + writer.println(""); + writer.println("import blib.game.*;"); + writer.println("import blib.util.*;"); + writer.println(""); + writer.println("import javax.swing.*;"); + writer.println("import java.awt.*;"); + writer.println("public class TridEntity extends Entity {"); + writer.println(""); + writer.println(" public final boolean HASCOLLISION;"); + writer.println(" private final Dimension collision;"); + writer.println(" public String engineRenderData = \"\";"); + writer.println(" private ImageIcon engineImg = new ImageIcon(\"data/images/trident/customEnt.png\");"); + writer.println(" protected String name;"); + writer.println(" protected int numData;"); + writer.println(" "); + writer.println(" public TridEntity(Position pos){"); + writer.println(" super(pos);"); + writer.println(" HASCOLLISION = false;"); + writer.println(" collision = null;"); + writer.println(" }"); + writer.println(" public TridEntity(Position pos, Dimension collision){"); + writer.println(" super(pos);"); + writer.println(" if(collision.equals(new Dimension(0, 0))) HASCOLLISION = false;"); + writer.println(" else HASCOLLISION = true;"); + writer.println(" this.collision = collision;"); + writer.println(" }"); + writer.println(" public TridEntity(String n, boolean hasColl, int numData){"); + writer.println(" super(new Position());"); + writer.println(" HASCOLLISION = hasColl;"); + writer.println(" collision = null;"); + writer.println(" name = n;"); + writer.println(" this.numData = numData;"); + writer.println(" }"); + writer.println(" public TridEntity construct(Position pos, Dimension collision, int[] data){"); + writer.println(" System.out.println(\"Error: tried to create an empty entity\");"); + writer.println(" return null;"); + writer.println(" }"); + writer.println(""); + writer.println(" public Rectangle getCollision(){"); + writer.println(" return new Rectangle((int)position.x - (collision.width / 2), (int)position.y - (collision.height / 2), collision.width, collision.height);"); + writer.println(" }"); + writer.println(" "); + writer.println(" public void render(Graphics g, JPanel panel, int x, int y){"); + writer.println(""); + writer.println(" }"); + writer.println(""); + writer.println(" protected void engineRender(Graphics g, JPanel panel, int x, int y){"); + writer.println(" if(HASCOLLISION){"); + writer.println(" g.setColor(Color.red);"); + writer.println(" g.drawRect(x - getCollision().width / 2, y - getCollision().height / 2, getCollision().width, getCollision().height);"); + writer.println(" g.drawLine(x - getCollision().width / 2, y - getCollision().height / 2, x + getCollision().width / 2, y + getCollision().height / 2);"); + writer.println(" }"); + writer.println(" engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2);"); + writer.println(" }"); + writer.println(""); + writer.println(" public void update(long elapsedTime){"); + writer.println(""); + writer.println(" }"); + writer.println(""); + writer.println(" public int getRendDatSort(){"); + writer.println(" if(renderType == Entity.TALL){"); + writer.println(" return 2;"); + writer.println(" }"); + writer.println(" if(renderType == Entity.UNDER){"); + writer.println(" return 1;"); + writer.println(" }"); + writer.println(" if(renderType == Entity.ABOVE){"); + writer.println(" return 3;"); + writer.println(" }"); + writer.println(" if(renderType == Entity.BOTTOMPRIORITY){"); + writer.println(" return 0;"); + writer.println(" }"); + writer.println(" if(renderType == Entity.TOPPRIORITY){"); + writer.println(" return 4;"); + writer.println(" }"); + writer.println(" return 2;"); + writer.println(" }"); + writer.println(""); + writer.println(" public int compareSort(TridEntity e){"); + writer.println(" if(e.getRendDatSort() > getRendDatSort()){"); + writer.println(" // e should be above"); + writer.println(" return 1;"); + writer.println(" }else if(e.getRendDatSort() < getRendDatSort()){"); + writer.println(" return -1;"); + writer.println(" }"); + writer.println(""); + writer.println(" if(e.position.y > position.y){"); + writer.println(" return 1;"); + writer.println(" }else if(e.position.y < position.y){"); + writer.println(" return -1;"); + writer.println(" }"); + writer.println(""); + writer.println(" return 0;"); + writer.println(" }"); + writer.println(""); + writer.println("}"); + writer.close(); + }catch(Exception e){} + + + // src/trident/ent + try{ + File file = new File("data/projects/" + name + "/src/trident/ent/BoxColl.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package trident.ent;"); + writer.println(""); + writer.println("import blib.util.*;"); + writer.println("import java.awt.*;"); + writer.println("import javax.swing.*;"); + writer.println(""); + writer.println("import trident.*;"); + writer.println("public class BoxColl extends TridEntity{"); + writer.println(""); + writer.println(" public Color color = Color.white;"); + writer.println(""); + writer.println(" private ImageIcon engineImg = new ImageIcon(\"data/images/trident/boxColl.png\");"); + writer.println(" "); + writer.println(" public BoxColl(Position pos, Dimension size, Color c){"); + writer.println(" super(pos, size);"); + writer.println(" color = c;"); + writer.println(" }"); + writer.println(" public BoxColl(Position pos, Dimension size){"); + writer.println(" super(pos, size);"); + writer.println(" }"); + writer.println(" public BoxColl(){"); + writer.println(" super(\"boxcoll\", true, 3);"); + writer.println(" }"); + writer.println(" public TridEntity construct(Position pos, Dimension collision, int[] data){"); + writer.println(" return new BoxColl(pos, collision, new Color(data[0], data[1], data[2]));"); + writer.println(" }"); + writer.println(""); + writer.println(" public void render(Graphics g, JPanel panel, int x, int y){"); + writer.println(" g.setColor(color);"); + writer.println(" g.fillRect(x - getCollision().width / 2, y - getCollision().height / 2, getCollision().width, getCollision().height);"); + writer.println(" }"); + writer.println(""); + writer.println(" public void engineRender(Graphics g, JPanel panel, int x, int y){"); + writer.println(" render(g, panel, x, y);"); + writer.println(" engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2);"); + writer.println(" }"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + try{ + File file = new File("data/projects/" + name + "/src/trident/ent/BoxNoColl.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package trident.ent;"); + writer.println(""); + writer.println("import blib.util.*;"); + writer.println("import java.awt.*;"); + writer.println("import javax.swing.*;"); + writer.println("import blib.game.*;"); + writer.println(""); + writer.println("import trident.*;"); + writer.println("public class BoxNoColl extends TridEntity{"); + writer.println(" "); + writer.println(" public Color color = Color.white;"); + writer.println(" public int width, height;"); + writer.println(""); + writer.println(" private ImageIcon engineImg = new ImageIcon(\"data/images/trident/box.png\");"); + writer.println(" "); + writer.println(" public BoxNoColl(Position pos, Color c, int w, int h){"); + writer.println(" super(pos);"); + writer.println(" color = c;"); + writer.println(" width = w;"); + writer.println(" height = h;"); + writer.println(" renderType = Entity.UNDER;"); + writer.println(" }"); + writer.println(" public BoxNoColl(Position pos, int w, int h){"); + writer.println(" super(pos);"); + writer.println(" width = w;"); + writer.println(" height = h;"); + writer.println(" renderType = Entity.UNDER;"); + writer.println(" }"); + writer.println(" public BoxNoColl(){"); + writer.println(" super(\"boxnocoll\", false, 5);"); + writer.println(" }"); + writer.println(" public TridEntity construct(Position pos, Dimension collision, int[] data){"); + writer.println(" return new BoxNoColl(pos, new Color(data[2], data[3], data[4]), data[0], data[1]);"); + writer.println(" }"); + writer.println(""); + writer.println(" public void render(Graphics g, JPanel panel, int x, int y){"); + writer.println(" g.setColor(color);"); + writer.println(" g.fillRect(x - width / 2, y - height / 2, width, height);"); + writer.println(" }"); + writer.println(""); + writer.println(" public void engineRender(Graphics g, JPanel panel, int x, int y){"); + writer.println(" render(g, panel, x, y);"); + writer.println(" engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2);"); + writer.println(" }"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + try{ + File file = new File("data/projects/" + name + "/src/trident/ent/InvisColl.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package trident.ent;"); + writer.println(""); + writer.println("import blib.util.*;"); + writer.println("import java.awt.*;"); + writer.println("import javax.swing.*;"); + writer.println(""); + writer.println("import trident.*;"); + writer.println("public class InvisColl extends TridEntity{"); + writer.println(" "); + writer.println(" public Color color = Color.red;"); + writer.println(""); + writer.println(" private ImageIcon engineImg = new ImageIcon(\"data/images/trident/collision.png\");"); + writer.println(" "); + writer.println(" public InvisColl(Position pos, Dimension size){"); + writer.println(" super(pos, size);"); + writer.println(" } "); + writer.println(" public InvisColl(){"); + writer.println(" super(\"inviscoll\", true, 0);"); + writer.println(" }"); + writer.println(" public TridEntity construct(Position pos, Dimension collision, int[] data){"); + writer.println(" return new InvisColl(pos, collision);"); + writer.println(" }"); + writer.println(""); + writer.println(" public void engineRender(Graphics g, JPanel panel, int x, int y){"); + writer.println(" g.setColor(color);"); + writer.println(" g.drawRect(x - getCollision().width / 2, y - getCollision().height / 2, getCollision().width, getCollision().height);"); + writer.println(" g.drawLine(x - getCollision().width / 2, y - getCollision().height / 2, x + getCollision().width / 2, y + getCollision().height / 2);"); + writer.println(" engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2);"); + writer.println(" }"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + try{ + File file = new File("data/projects/" + name + "/src/trident/ent/PlrStart.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package trident.ent;"); + writer.println(""); + writer.println("import blib.util.*;"); + writer.println("import java.awt.*;"); + writer.println("import javax.swing.*;"); + writer.println(""); + writer.println("import trident.*;"); + writer.println("public class PlrStart extends TridEntity{"); + writer.println(" public Color color = Color.red;"); + writer.println(""); + writer.println(" private ImageIcon engineImg = new ImageIcon(\"data/images/trident/plrStart.png\");"); + writer.println(" "); + writer.println(" public PlrStart(Position pos){"); + writer.println(" super(pos);"); + writer.println(" } "); + writer.println(" public PlrStart(){"); + writer.println(" super(\"plrstart\", false, 0);"); + writer.println(" }"); + writer.println(" public TridEntity construct(Position pos, Dimension collision, int[] data){"); + writer.println(" return new PlrStart(pos);"); + writer.println(" }"); + writer.println(""); + writer.println(" public void engineRender(Graphics g, JPanel panel, int x, int y){"); + writer.println(" engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2);"); + writer.println(" }"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + try{ + File file = new File("data/projects/" + name + "/src/trident/ent/Trigger.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package trident.ent;"); + writer.println(""); + writer.println("import blib.util.*;"); + writer.println("import java.awt.*;"); + writer.println("import javax.swing.*;"); + writer.println(""); + writer.println("import trident.*;"); + writer.println("public class Trigger extends TridEntity{"); + writer.println(" "); + writer.println(" public Color color = Color.blue;"); + writer.println(" public Dimension box;"); + writer.println(" public int id;"); + writer.println(""); + writer.println(" private ImageIcon engineImg = new ImageIcon(\"data/images/trident/trigger.png\");"); + writer.println(" "); + writer.println(" public Trigger(Position pos, Dimension size, int i){"); + writer.println(" super(pos);"); + writer.println(" name = \"trigger\";"); + writer.println(" box = size;"); + writer.println(" id = i;"); + writer.println(" } "); + writer.println(" public Trigger(){"); + writer.println(" super(\"trigger\", false, 3);"); + writer.println(" }"); + writer.println(" public TridEntity construct(Position pos, Dimension collision, int[] data){"); + writer.println(" return new Trigger(pos, new Dimension(data[0], data[1]), data[2]);"); + writer.println(" }"); + writer.println(""); + writer.println(" public boolean containsPos(Position pos){"); + writer.println(" Point p = new Point((int)pos.x, (int)pos.y);"); + writer.println(" Rectangle rect = new Rectangle((int)position.x - box.width / 2, (int)position.y - box.height / 2, box.width, box.height);"); + writer.println(" return rect.contains(p);"); + writer.println(" }"); + writer.println(""); + writer.println(" public void engineRender(Graphics g, JPanel panel, int x, int y){"); + writer.println(" g.setColor(color);"); + writer.println(" g.drawRect(x - box.width / 2, y - box.height / 2, box.width, box.height);"); + writer.println(" g.drawLine(x - box.width / 2, y - box.height / 2, x + box.width / 2, y + box.height / 2);"); + writer.println(" engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2);"); + writer.println(" }"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + try{ + File file = new File("data/projects/" + name + "/src/trident/ent/TridLight.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package trident.ent;"); + writer.println(""); + writer.println("import blib.util.*;"); + writer.println("import java.awt.*;"); + writer.println("import javax.swing.*;"); + writer.println(""); + writer.println("import trident.*;"); + writer.println("public class TridLight extends TridEntity{"); + writer.println(" "); + writer.println(" public int radius;"); + writer.println(""); + writer.println(" private ImageIcon engineImg = new ImageIcon(\"data/images/trident/light.png\");"); + writer.println(" "); + writer.println(" public TridLight(Position pos, int r){"); + writer.println(" super(pos);"); + writer.println(" radius = r;"); + writer.println(" } "); + writer.println(" public TridLight(){"); + writer.println(" super(\"light\", false, 1);"); + writer.println(" }"); + writer.println(" public TridEntity construct(Position pos, Dimension collision, int[] data){"); + writer.println(" return new TridLight(pos, data[0]);"); + writer.println(" }"); + writer.println(""); + writer.println(" public void engineRender(Graphics g, JPanel panel, int x, int y){"); + writer.println(" engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2);"); + writer.println(" }"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + + + // src/ent + try{ + File file = new File("data/projects/" + name + "/src/ent/ExampleEntity.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package ent;"); + writer.println(""); + writer.println("import blib.util.*;"); + writer.println("import trident.*;"); + writer.println("import javax.swing.*;"); + writer.println("import java.awt.*;"); + writer.println("public class ExampleEntity extends TridEntity {"); + writer.println(""); + writer.println(" // Constructor, runs when the entity is created"); + writer.println(" public ExampleEntity(Position pos){"); + writer.println(" super(pos);"); + writer.println(" }"); + writer.println(" // Registry constructor, used only for adding to the registry"); + writer.println(" public ExampleEntity(){"); + writer.println(" super(\"example\", false, 0);"); + writer.println(" }"); + writer.println(" // Custom constructor, used by the engine when building a scene"); + writer.println(" public TridEntity construct(Position pos, Dimension collision, int[] data){"); + writer.println(" return new ExampleEntity(pos);"); + writer.println(" }"); + writer.println(""); + writer.println(" // Render while in game"); + writer.println(" public void render(Graphics g, JPanel panel, int x, int y){"); + writer.println(""); + writer.println(" }"); + writer.println(""); + writer.println(" // Runs every tick while the game is running"); + writer.println(" public void update(long elapsedTime){"); + writer.println(" "); + writer.println(" }"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + + // src/update + try{ + File file = new File("data/projects/" + name + "/src/update/Inputs.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package update;"); + writer.println(""); + writer.println("import java.awt.*;"); + writer.println("import java.awt.event.*;"); + writer.println("import blib.util.*;"); + writer.println("public class Inputs {"); + writer.println(" "); + writer.println(" public static void keyPressed(int key){"); + writer.println(" "); + writer.println(" }"); + writer.println(""); + writer.println(" public static void mousePressed(int mb, Point mousePos, Position worldPos){"); + writer.println(""); + writer.println(" }"); + writer.println(""); + writer.println(" public static void onScroll(int scroll){"); + writer.println(" "); + writer.println(" }"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + try{ + File file = new File("data/projects/" + name + "/src/update/Update.java"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("package update;"); + writer.println(""); + writer.println("import trident.*;"); + writer.println("import ent.*;"); + writer.println("import java.util.ArrayList;"); + writer.println("public class Update {"); + writer.println(""); + writer.println(" public static void setup(){"); + writer.println(" // Add custom entities to the registry here. Required in order to load them properly"); + writer.println(" Trident.addCustomEntity(new ExampleEntity()); // Use the empty constructor"); + writer.println(""); + writer.println(" // Set settings"); + writer.println(" Trident.setPlrSpeed(0.2);"); + writer.println(" Trident.setShortCollision(true);"); + writer.println(""); + writer.println(" // Post Processing"); + writer.println(" Trident.setBloom(0.2);"); + writer.println(" Trident.setExposure(1);"); + writer.println(" Trident.enableBloom = false;"); + writer.println(" Trident.enableExposure = false;"); + writer.println(" Trident.setLightBlur(1);"); + writer.println(" Trident.setLightExposure(0.001);"); + writer.println(" }"); + writer.println(""); + writer.println(" public static void sceneStart(String scene){"); + writer.println(""); + writer.println(" }"); + writer.println(" "); + writer.println(" public static void update(long elapsedTime){"); + writer.println(""); + writer.println(" }"); + writer.println(""); + writer.println(" public static void trigger(int id){"); + writer.println(" "); + writer.println(" }"); + writer.println(""); + writer.println(" public static int command(ArrayList cmdParts){ // cmdParts.get(0) is the command, while the rest are arguments for the command."); + writer.println(" switch(cmdParts.get(0)){"); + writer.println(" case \"helloWorld\":"); + writer.println(" System.out.println(\"Hello, World!\");"); + writer.println(" return 0;"); + writer.println(" case \"ping\":"); + writer.println(" System.out.println(\"pong\");"); + writer.println(" return 0;"); + writer.println(" }"); + writer.println(" return 1; // return 1 if command is not recognized"); + writer.println(" }"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + + + // data/scenes + try{ + File file = new File("data/projects/" + name + "/data/scenes/default.bson"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("string name default"); + writer.println("string dir east"); + writer.println("int light 25"); + writer.println("{ bgColor"); + writer.println("int 255"); + writer.println("int 255"); + writer.println("int 255"); + writer.println("}"); + writer.println("{ entities"); + writer.println("string boxcoll"); + writer.println("double -200"); + writer.println("double 0"); + writer.println("boolean true"); + writer.println("int 100"); + writer.println("int 100"); + writer.println("int 0"); + writer.println("int 255"); + writer.println("int 0"); + writer.println("string plrstart"); + writer.println("double -300"); + writer.println("double 0"); + writer.println("boolean false"); + writer.println("string inviscoll"); + writer.println("double -200"); + writer.println("double 100"); + writer.println("boolean true"); + writer.println("int 100"); + writer.println("int 100"); + writer.println("string boxnocoll"); + writer.println("double -200"); + writer.println("double -100"); + writer.println("boolean false"); + writer.println("int 100"); + writer.println("int 100"); + writer.println("int 255"); + writer.println("int 0"); + writer.println("int 0"); + writer.println("string light"); + writer.println("double -200"); + writer.println("double 200"); + writer.println("boolean false"); + writer.println("int 100"); + writer.println("}"); + writer.close(); + }catch(Exception e){} + + // data/animations + try{ + File file = new File("data/projects/" + name + "/data/animations/intro.anim"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("intro"); + writer.println("false"); + writer.println("1.0"); + writer.println("0.0"); + writer.println("0.0"); + writer.println("0.0"); + writer.println("1000"); + writer.println("0.0"); + writer.println("0.0"); + writer.println("0.0"); + writer.println("0.0"); + writer.println("3000"); + writer.println("0.0"); + writer.println("0.0"); + writer.println("1.0"); + writer.println("0.0"); + writer.println("1000"); + writer.close(); + }catch(Exception e){} + + + setupScenes(); + currentScene = loadedScenes.get(0); + } + + public static void loadRegistry(){ + ArrayList objects = BSonParser.readFile("data/projectRegistry.bson"); + BSonObject obj = BSonParser.getObject("projects", objects); + BSonList asList = (BSonList)obj; + projRegistry = new String[asList.list.size()]; + for(int i = 0; i < asList.list.size(); i++){ + projRegistry[i] = asList.list.get(i).getString(); + } + } + + public static void saveRegistry(){ + try{ + File file = new File("data/projectRegistry.bson"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("{ projects"); + for(String s: projRegistry){ + writer.println("string " + s); + } + writer.println("}"); + writer.close(); + }catch(Exception e){e.printStackTrace();} + } + + public void setupScenes(){ + try{ + loadedScenes = new ArrayList(); + File dir = new File("data/projects/" + name + "/data/scenes"); + File[] files = dir.listFiles(); + ArrayList sceneFiles = new ArrayList(); + for(File f: files){ + if(BTools.hasExtension(f, "bson")) sceneFiles.add(f); + } + + for(File f: sceneFiles){ + loadedScenes.add(new Scene(f)); + } + }catch(Exception e){ + System.out.println("Error setting up scenes."); + e.printStackTrace(); + } + + } + + public boolean loadScene(String name){ + for(Scene s: loadedScenes){ + if(s.name.equals(name)){ + currentScene = s; + return true; + } + } + System.out.println("***********************************************************************************"); + System.out.println("Error loading scene: No scene with name '" + name + "' found."); + System.out.println("***********************************************************************************"); + return false; + } +} diff --git a/Trident/Trident/src/project/Scene.java b/Trident/Trident/src/project/Scene.java new file mode 100644 index 0000000..71e863e --- /dev/null +++ b/Trident/Trident/src/project/Scene.java @@ -0,0 +1,183 @@ +package project; + +import java.util.ArrayList; +import java.awt.*; +import java.io.*; +import blib.bson.*; +import blib.util.*; +import blib.game.*; +import project.ent.*; +public class Scene { + + public final String name; + public ArrayList entities; + protected Position plrStart = new Position(); + public int plrDir = Player.SOUTH; + public Color bgColor = Color.white; + private TridEntity[] entRegistry = { + new BoxColl(), + new BoxNoColl(), + new InvisColl(), + new PlrStart(), + new Trigger(), + new project.ent.Light(), + }; + public int defaultLight = 255; + + public Scene(String n){ // Empty scene + name = n; + entities = new ArrayList(); + } + public Scene(File f) throws IOException{ + entities = new ArrayList(); + ArrayList objects = BSonParser.readFile(f.getAbsolutePath()); + BSonObject obj = BSonParser.getObject("name", objects); + name = obj.getString(); + obj = BSonParser.getObject("dir", objects); + if(obj != null){ + String str = obj.getString(); + if(str.equals("west")) plrDir = Player.WEST; + if(str.equals("north")) plrDir = Player.NORTH; + if(str.equals("east")) plrDir = Player.EAST; + } + obj = BSonParser.getObject("bgColor", objects); + BSonList asList = (BSonList)obj; + int r, g, b; + r = asList.list.get(0).getInt(); + g = asList.list.get(1).getInt(); + b = asList.list.get(2).getInt(); + bgColor = new Color(r, g, b); + obj = BSonParser.getObject("light", objects); + defaultLight = obj.getInt(); + obj = BSonParser.getObject("entities", objects); + asList = (BSonList)obj; + for(int i = 0; i < asList.list.size(); i++){ + System.out.println(i); + String objName = asList.list.get(i).getString(); + i++; + boolean foundEnt = false; + for(TridEntity e: entRegistry){ + if(e.name.equals(objName)){ + System.out.println("load " + objName); + double x, y; + x = asList.list.get(i).getDouble(); + i++; + y = asList.list.get(i).getDouble(); + i++; + int w = 0, h = 0; + i++; + if(e.HASCOLLISION){ + w = asList.list.get(i).getInt(); + i++; + h = asList.list.get(i).getInt(); + i++; + } + int[] data = new int[e.numData]; + for(int j = 0; j < e.numData; j++){ + data[j] = asList.list.get(i).getInt(); + i++; + } + i--; + entities.add(e.construct(new Position(x, y), (e.HASCOLLISION ? (new Dimension(w, h)) : null), data)); + foundEnt = true; + break; + } + } + if(!foundEnt){ + double x, y; + x = asList.list.get(i).getDouble(); + i++; + y = asList.list.get(i).getDouble(); + i++; + int w = 0, h = 0; + boolean hasColl = asList.list.get(i).getBoolean(); + i++; + if(hasColl){ + w = asList.list.get(i).getInt(); + i++; + h = asList.list.get(i).getInt(); + i++; + } + + int[] data = new int[0]; + while(i < asList.list.size() && asList.list.get(i).type == BSonObject.INT){ + int[] newData = new int[data.length + 1]; + for(int j = 0; j < data.length; j++) newData[j] = data[j]; + newData[data.length] = asList.list.get(i).getInt(); + data = newData; + i++; + } + entities.add(new CustomEntity(new Position(x, y), new Dimension(w, h), data, objName)); + i--; + } + } + } + + public String getDir(){ + if(plrDir == Player.SOUTH) return "south"; + if(plrDir == Player.EAST) return "east"; + if(plrDir == Player.WEST) return "west"; + if(plrDir == Player.NORTH) return "north"; + return "unknown direction"; + } + + public void save(String projDir){ + try{ + File file = new File(projDir + "/data/scenes/" + name + ".bson"); + file.createNewFile(); + PrintWriter writer = new PrintWriter(file); + writer.println("string name " + name); + writer.println("string dir " + getDir()); + writer.println("int light " + defaultLight); + writer.println("{ bgColor"); + writer.println("int " + bgColor.getRed()); + writer.println("int " + bgColor.getGreen()); + writer.println("int " + bgColor.getBlue()); + writer.println("}"); + writer.println("{ entities"); + for(TridEntity e: entities){ + writer.println("string " + e.name); + writer.println("double " + e.position.x); + writer.println("double " + e.position.y); + writer.println("boolean " + e.HASCOLLISION); + if(e.HASCOLLISION){ + writer.println("int " + e.getCollision().width); + writer.println("int " + e.getCollision().height); + } + if(e instanceof BoxNoColl){ + BoxNoColl box = (BoxNoColl)e; + writer.println("int " + box.width); + writer.println("int " + box.height); + writer.println("int " + box.color.getRed()); + writer.println("int " + box.color.getGreen()); + writer.println("int " + box.color.getBlue()); + } + if(e instanceof BoxColl){ + BoxColl box = (BoxColl)e; + writer.println("int " + box.color.getRed()); + writer.println("int " + box.color.getGreen()); + writer.println("int " + box.color.getBlue()); + } + if(e instanceof Trigger){ + Trigger trig = (Trigger)e; + writer.println("int " + trig.box.width); + writer.println("int " + trig.box.height); + writer.println("int " + trig.id); + } + if(e instanceof project.ent.Light){ + project.ent.Light light = (project.ent.Light)e; + writer.println("int " + light.radius); + } + if(e instanceof CustomEntity){ + CustomEntity custom = (CustomEntity)e; + for(int i: custom.data){ + writer.println("int " + i); + } + } + } + writer.println("}"); + writer.close(); + }catch(Exception e){} + } + +} diff --git a/Trident/Trident/src/project/TridEntity.java b/Trident/Trident/src/project/TridEntity.java new file mode 100644 index 0000000..0bcc73d --- /dev/null +++ b/Trident/Trident/src/project/TridEntity.java @@ -0,0 +1,65 @@ +package project; + +import blib.game.*; +import blib.util.*; + +import javax.swing.*; +import java.awt.*; +public class TridEntity extends Entity { + + public final boolean HASCOLLISION; + public Dimension collision; + public String engineRenderData = ""; + private ImageIcon engineImg = new ImageIcon("data/images/trident/customEnt.png"); + public String name; + protected int numData; + + public TridEntity(Position pos){ + super(pos); + HASCOLLISION = false; + collision = null; + } + public TridEntity(Position pos, Dimension collision){ + super(pos); + if(collision == null || collision.equals(new Dimension(0, 0))) HASCOLLISION = false; + else HASCOLLISION = true; + this.collision = collision; + } + public TridEntity(String n, boolean hasColl, int numData){ + super(new Position()); + HASCOLLISION = hasColl; + collision = null; + name = n; + this.numData = numData; + } + public TridEntity construct(Position pos, Dimension collision, int[] data){ + System.out.println("Error: tried to create an empty entity"); + return null; + } + + public final Rectangle getCollision(){ + return new Rectangle((int)position.x - (collision.width / 2), (int)position.y - (collision.height / 2), collision.width, collision.height); + } + + public void gameStart(){ + + } + + public void render(Graphics g, JPanel panel, int x, int y){ + + } + + public void engineRender(Graphics g, JPanel panel, int x, int y){ + if(HASCOLLISION){ + g.setColor(Color.red); + g.drawRect(x - getCollision().width / 2, y - getCollision().height / 2, getCollision().width, getCollision().height); + g.drawLine(x - getCollision().width / 2, y - getCollision().height / 2, x + getCollision().width / 2, y + getCollision().height / 2); + } + engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2); + } + + public void update(long elapsedTime){ + + } + +} diff --git a/Trident/Trident/src/project/ent/BoxColl.java b/Trident/Trident/src/project/ent/BoxColl.java new file mode 100644 index 0000000..6c59b3c --- /dev/null +++ b/Trident/Trident/src/project/ent/BoxColl.java @@ -0,0 +1,39 @@ +package project.ent; + +import blib.util.*; +import java.awt.*; +import javax.swing.*; + +import project.*; +public class BoxColl extends TridEntity{ + + public Color color = Color.white; + + private ImageIcon engineImg = new ImageIcon("data/images/trident/boxColl.png"); + + public BoxColl(Position pos, Dimension size, Color c){ + super(pos, size); + color = c; + name = "boxcoll"; + } + public BoxColl(Position pos, Dimension size){ + super(pos, size); + name = "boxcoll"; + } + public BoxColl(){ + super("boxcoll", true, 3); + } + public TridEntity construct(Position pos, Dimension collision, int[] data){ + return new BoxColl(pos, collision, new Color(data[0], data[1], data[2])); + } + + public void render(Graphics g, JPanel panel, int x, int y){ + g.setColor(color); + g.fillRect(x - getCollision().width / 2, y - getCollision().height / 2, getCollision().width, getCollision().height); + } + + public void engineRender(Graphics g, JPanel panel, int x, int y){ + render(g, panel, x, y); + engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2); + } +} diff --git a/Trident/Trident/src/project/ent/BoxNoColl.java b/Trident/Trident/src/project/ent/BoxNoColl.java new file mode 100644 index 0000000..382fb54 --- /dev/null +++ b/Trident/Trident/src/project/ent/BoxNoColl.java @@ -0,0 +1,47 @@ +package project.ent; + +import blib.util.*; +import java.awt.*; +import javax.swing.*; +import blib.game.*; + +import project.*; +public class BoxNoColl extends TridEntity{ + + public Color color = Color.white; + public int width, height; + + private ImageIcon engineImg = new ImageIcon("data/images/trident/box.png"); + + public BoxNoColl(Position pos, Color c, int w, int h){ + super(pos); + color = c; + width = w; + height = h; + renderType = Entity.UNDER; + name = "boxnocoll"; + } + public BoxNoColl(Position pos, int w, int h){ + super(pos); + width = w; + height = h; + renderType = Entity.UNDER; + name = "boxnocoll"; + } + public BoxNoColl(){ + super("boxnocoll", false, 5); + } + public TridEntity construct(Position pos, Dimension collision, int[] data){ + return new BoxNoColl(pos, new Color(data[2], data[3], data[4]), data[0], data[1]); + } + + public void render(Graphics g, JPanel panel, int x, int y){ + g.setColor(color); + g.fillRect(x - width / 2, y - height / 2, width, height); + } + + public void engineRender(Graphics g, JPanel panel, int x, int y){ + render(g, panel, x, y); + engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2); + } +} diff --git a/Trident/Trident/src/project/ent/CustomEntity.java b/Trident/Trident/src/project/ent/CustomEntity.java new file mode 100644 index 0000000..c1e50b2 --- /dev/null +++ b/Trident/Trident/src/project/ent/CustomEntity.java @@ -0,0 +1,18 @@ +package project.ent; + +import blib.util.*; +import project.*; +import java.awt.*; +public class CustomEntity extends TridEntity{ + + public int[] data; + + public CustomEntity(Position pos, Dimension d, int[] dat, String n){ + super(pos, d); + data = dat; + name = n; + } + public CustomEntity(){ + super("custom", false, 0); + } +} diff --git a/Trident/Trident/src/project/ent/InvisColl.java b/Trident/Trident/src/project/ent/InvisColl.java new file mode 100644 index 0000000..bdc46e3 --- /dev/null +++ b/Trident/Trident/src/project/ent/InvisColl.java @@ -0,0 +1,31 @@ +package project.ent; + +import blib.util.*; +import java.awt.*; +import javax.swing.*; + +import project.*; +public class InvisColl extends TridEntity{ + + public Color color = Color.red; + + private ImageIcon engineImg = new ImageIcon("data/images/trident/collision.png"); + + public InvisColl(Position pos, Dimension size){ + super(pos, size); + name = "inviscoll"; + } + public InvisColl(){ + super("inviscoll", true, 0); + } + public TridEntity construct(Position pos, Dimension collision, int[] data){ + return new InvisColl(pos, collision); + } + + public void engineRender(Graphics g, JPanel panel, int x, int y){ + g.setColor(color); + g.drawRect(x - getCollision().width / 2, y - getCollision().height / 2, getCollision().width, getCollision().height); + g.drawLine(x - getCollision().width / 2, y - getCollision().height / 2, x + getCollision().width / 2, y + getCollision().height / 2); + engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2); + } +} diff --git a/Trident/Trident/src/project/ent/Light.java b/Trident/Trident/src/project/ent/Light.java new file mode 100644 index 0000000..106d09a --- /dev/null +++ b/Trident/Trident/src/project/ent/Light.java @@ -0,0 +1,31 @@ +package project.ent; + +import blib.util.*; +import java.awt.*; +import javax.swing.*; + +import project.*; +public class Light extends TridEntity{ + + public int radius; + + private ImageIcon engineImg = new ImageIcon("data/images/trident/light.png"); + + public Light(Position pos, int r){ + super(pos); + name = "light"; + radius = r; + } + public Light(){ + super("light", false, 1); + } + public TridEntity construct(Position pos, Dimension collision, int[] data){ + return new Light(pos, data[0]); + } + + public void engineRender(Graphics g, JPanel panel, int x, int y){ + engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2); + g.setColor(Color.red); + g.drawOval(x - radius, y - radius, radius * 2, radius * 2); + } +} diff --git a/Trident/Trident/src/project/ent/PlrStart.java b/Trident/Trident/src/project/ent/PlrStart.java new file mode 100644 index 0000000..149132f --- /dev/null +++ b/Trident/Trident/src/project/ent/PlrStart.java @@ -0,0 +1,27 @@ +package project.ent; + +import blib.util.*; +import java.awt.*; +import javax.swing.*; + +import project.*; +public class PlrStart extends TridEntity{ + public Color color = Color.red; + + private ImageIcon engineImg = new ImageIcon("data/images/trident/plrStart.png"); + + public PlrStart(Position pos){ + super(pos); + name = "plrstart"; + } + public PlrStart(){ + super("plrstart", false, 0); + } + public TridEntity construct(Position pos, Dimension collision, int[] data){ + return new PlrStart(pos); + } + + public void engineRender(Graphics g, JPanel panel, int x, int y){ + engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2); + } +} diff --git a/Trident/Trident/src/project/ent/Trigger.java b/Trident/Trident/src/project/ent/Trigger.java new file mode 100644 index 0000000..c5350d0 --- /dev/null +++ b/Trident/Trident/src/project/ent/Trigger.java @@ -0,0 +1,35 @@ +package project.ent; + +import blib.util.*; +import java.awt.*; +import javax.swing.*; + +import project.*; +public class Trigger extends TridEntity{ + + public Color color = Color.blue; + public Dimension box; + public int id; + + private ImageIcon engineImg = new ImageIcon("data/images/trident/trigger.png"); + + public Trigger(Position pos, Dimension size, int i){ + super(pos); + name = "trigger"; + box = size; + id = i; + } + public Trigger(){ + super("trigger", false, 3); + } + public TridEntity construct(Position pos, Dimension collision, int[] data){ + return new Trigger(pos, new Dimension(data[0], data[1]), data[2]); + } + + public void engineRender(Graphics g, JPanel panel, int x, int y){ + g.setColor(color); + g.drawRect(x - box.width / 2, y - box.height / 2, box.width, box.height); + g.drawLine(x - box.width / 2, y - box.height / 2, x + box.width / 2, y + box.height / 2); + engineImg.paintIcon(panel, g, x - engineImg.getIconWidth() / 2, y - engineImg.getIconHeight() / 2); + } +}