v5
18
Trident/Trident/README.md
Normal file
|
@ -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).
|
BIN
Trident/Trident/bin/main/Main$1.class
Normal file
BIN
Trident/Trident/bin/main/Main$2.class
Normal file
BIN
Trident/Trident/bin/main/Main$3.class
Normal file
BIN
Trident/Trident/bin/main/Main$4.class
Normal file
BIN
Trident/Trident/bin/main/Main$5.class
Normal file
BIN
Trident/Trident/bin/main/Main$6.class
Normal file
BIN
Trident/Trident/bin/main/Main$7.class
Normal file
BIN
Trident/Trident/bin/main/Main$8.class
Normal file
BIN
Trident/Trident/bin/main/Main.class
Normal file
BIN
Trident/Trident/bin/main/MainPanel$InputListener.class
Normal file
BIN
Trident/Trident/bin/main/MainPanel$ServerListener.class
Normal file
BIN
Trident/Trident/bin/main/MainPanel.class
Normal file
BIN
Trident/Trident/bin/project/Project.class
Normal file
BIN
Trident/Trident/bin/project/Scene.class
Normal file
BIN
Trident/Trident/bin/project/TridEntity.class
Normal file
BIN
Trident/Trident/bin/project/ent/BoxColl.class
Normal file
BIN
Trident/Trident/bin/project/ent/BoxNoColl.class
Normal file
BIN
Trident/Trident/bin/project/ent/CustomEntity.class
Normal file
BIN
Trident/Trident/bin/project/ent/InvisColl.class
Normal file
BIN
Trident/Trident/bin/project/ent/Light.class
Normal file
BIN
Trident/Trident/bin/project/ent/PlrStart.class
Normal file
BIN
Trident/Trident/bin/project/ent/Trigger.class
Normal file
BIN
Trident/Trident/data/BLib.jar
Normal file
BIN
Trident/Trident/data/JHLabs Filters.jar
Normal file
BIN
Trident/Trident/data/icon.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
Trident/Trident/data/images/cursors/move.png
Normal file
After Width: | Height: | Size: 387 B |
BIN
Trident/Trident/data/images/cursors/resize.png
Normal file
After Width: | Height: | Size: 417 B |
BIN
Trident/Trident/data/images/cursors/select.png
Normal file
After Width: | Height: | Size: 351 B |
BIN
Trident/Trident/data/images/dropdown/box.png
Normal file
After Width: | Height: | Size: 366 B |
BIN
Trident/Trident/data/images/dropdown/boxColl.png
Normal file
After Width: | Height: | Size: 366 B |
BIN
Trident/Trident/data/images/dropdown/collision.png
Normal file
After Width: | Height: | Size: 222 B |
BIN
Trident/Trident/data/images/dropdown/customEnt.png
Normal file
After Width: | Height: | Size: 399 B |
BIN
Trident/Trident/data/images/dropdown/delete.png
Normal file
After Width: | Height: | Size: 252 B |
BIN
Trident/Trident/data/images/dropdown/duplicate.png
Normal file
After Width: | Height: | Size: 189 B |
BIN
Trident/Trident/data/images/dropdown/edit.png
Normal file
After Width: | Height: | Size: 192 B |
BIN
Trident/Trident/data/images/dropdown/light.png
Normal file
After Width: | Height: | Size: 258 B |
BIN
Trident/Trident/data/images/dropdown/move.png
Normal file
After Width: | Height: | Size: 153 B |
BIN
Trident/Trident/data/images/dropdown/plrStart.png
Normal file
After Width: | Height: | Size: 309 B |
BIN
Trident/Trident/data/images/dropdown/quit.png
Normal file
After Width: | Height: | Size: 225 B |
BIN
Trident/Trident/data/images/dropdown/reset.png
Normal file
After Width: | Height: | Size: 228 B |
BIN
Trident/Trident/data/images/dropdown/resize.png
Normal file
After Width: | Height: | Size: 177 B |
BIN
Trident/Trident/data/images/dropdown/select.png
Normal file
After Width: | Height: | Size: 222 B |
BIN
Trident/Trident/data/images/dropdown/trigger.png
Normal file
After Width: | Height: | Size: 222 B |
BIN
Trident/Trident/data/images/player/idleE.png
Normal file
After Width: | Height: | Size: 156 B |
BIN
Trident/Trident/data/images/player/idleN.png
Normal file
After Width: | Height: | Size: 173 B |
BIN
Trident/Trident/data/images/player/idleS.png
Normal file
After Width: | Height: | Size: 170 B |
BIN
Trident/Trident/data/images/player/idleW.png
Normal file
After Width: | Height: | Size: 163 B |
BIN
Trident/Trident/data/images/player/walkE.png
Normal file
After Width: | Height: | Size: 376 B |
BIN
Trident/Trident/data/images/player/walkN.png
Normal file
After Width: | Height: | Size: 403 B |
BIN
Trident/Trident/data/images/player/walkS.png
Normal file
After Width: | Height: | Size: 397 B |
BIN
Trident/Trident/data/images/player/walkW.png
Normal file
After Width: | Height: | Size: 361 B |
BIN
Trident/Trident/data/images/trident/box.png
Normal file
After Width: | Height: | Size: 432 B |
BIN
Trident/Trident/data/images/trident/boxColl.png
Normal file
After Width: | Height: | Size: 459 B |
BIN
Trident/Trident/data/images/trident/collision.png
Normal file
After Width: | Height: | Size: 333 B |
BIN
Trident/Trident/data/images/trident/customEnt.png
Normal file
After Width: | Height: | Size: 486 B |
BIN
Trident/Trident/data/images/trident/light.png
Normal file
After Width: | Height: | Size: 333 B |
BIN
Trident/Trident/data/images/trident/plrStart.png
Normal file
After Width: | Height: | Size: 444 B |
BIN
Trident/Trident/data/images/trident/splash.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
Trident/Trident/data/images/trident/trigger.png
Normal file
After Width: | Height: | Size: 333 B |
2
Trident/Trident/data/projectRegistry.bson
Normal file
|
@ -0,0 +1,2 @@
|
|||
{ projects
|
||||
}
|
BIN
Trident/Trident/lib/BLib.jar
Normal file
221
Trident/Trident/src/main/Main.java
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
570
Trident/Trident/src/main/MainPanel.java
Normal file
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
1416
Trident/Trident/src/project/Project.java
Normal file
183
Trident/Trident/src/project/Scene.java
Normal file
|
@ -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<TridEntity> 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<TridEntity>();
|
||||
}
|
||||
public Scene(File f) throws IOException{
|
||||
entities = new ArrayList<TridEntity>();
|
||||
ArrayList<BSonObject> 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){}
|
||||
}
|
||||
|
||||
}
|
65
Trident/Trident/src/project/TridEntity.java
Normal file
|
@ -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){
|
||||
|
||||
}
|
||||
|
||||
}
|
39
Trident/Trident/src/project/ent/BoxColl.java
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
47
Trident/Trident/src/project/ent/BoxNoColl.java
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
18
Trident/Trident/src/project/ent/CustomEntity.java
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
31
Trident/Trident/src/project/ent/InvisColl.java
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
31
Trident/Trident/src/project/ent/Light.java
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
27
Trident/Trident/src/project/ent/PlrStart.java
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
35
Trident/Trident/src/project/ent/Trigger.java
Normal file
|
@ -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);
|
||||
}
|
||||
}
|