def initializeExtension(self, manager): self.manager = manager self.frame = JFrame(self.getExtensionName()) self.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) # instance setup self.state = State.NOTHING self.entity = Entity() # Setupgui self.setupGui() self.addMouseListener(self) self.addMouseMotionListener(self) self.setPreferredSize(Dimension(500, 500)) self.frame.pack() self.frame.setResizable(False) self.frame.setVisible(True) self.cameraPos = [0, 0]
class FilamentGame_ModelEditor(EditorExtension, JPanel, MouseListener, MouseMotionListener): def getExtensionName(self): return "Filament Model Tool" def initializeExtension(self, manager): self.manager = manager self.frame = JFrame(self.getExtensionName()) self.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) # instance setup self.state = State.NOTHING self.entity = Entity() # Setupgui self.setupGui() self.addMouseListener(self) self.addMouseMotionListener(self) self.setPreferredSize(Dimension(500, 500)) self.frame.pack() self.frame.setResizable(False) self.frame.setVisible(True) self.cameraPos = [0, 0] def setupGui(self): cPanel = JPanel() # Draw Shape Button self.drawShapeButton = JButton("Draw", actionPerformed=self.drawShapeButtonAction) cPanel.add(self.drawShapeButton) drawShapeButton = JButton("Clear", actionPerformed=self.clearShapeButtonAction) cPanel.add(drawShapeButton) # Label self.infoLabel = JLabel("Shape Editor") cPanel.add(self.infoLabel) self.frame.add(BorderLayout.NORTH, cPanel) self.frame.add(BorderLayout.CENTER, self) def entitySelected(self, entity): self.entity = entity self.repaint() def sceneChanged(self, scene): self.scene = scene self.entity = Entity() self.repaint() # BUTTONS def drawShapeButtonAction(self, e): if self.state == State.NOTHING: self.state = State.DRAW_SHAPE self.infoLabel.setText("Click to Draw Shape") self.drawShapeButton.setText("Stop Drawing") elif self.state != State.NOTHING: self.state = State.NOTHING self.infoLabel.setText("") self.drawShapeButton.setText("Draw") self.revalidate() def clearShapeButtonAction(self, e): if self.state != State.NOTHING: self.drawShapeButtonAction(e) self.state = State.NOTHING polygon = self.entity.getModel().pol polygon.reset() self.repaint() # DRAWING def paintComponent(self, g): self.super__paintComponent(g) g.scale(1, -1) g.translate(-self.cameraPos[0] + self.getWidth() / 2, -self.cameraPos[1] - self.getHeight() / 2) self.drawGrid(g) polygon = self.entity.getModel().pol x = [] y = [] g.setColor(Color.BLACK) for i in range(polygon.npoints): x = x + [int(polygon.xpoints[i])] y = y + [int(polygon.ypoints[i])] g.drawRect(int(polygon.xpoints[i]) - 2, int(polygon.ypoints[i]) - 2, 4, 4) g.fillPolygon(x, y, polygon.npoints) def drawGrid(self, g): g.setColor(Color.RED) g.drawLine(50, 0, -50, 0) g.drawLine(0, 50, 0, -50) # MOUSE LISTENER def mouseCicked(self, e): return def mouseEntered(self, e): return def mouseExited(self, e): return def mousePressed(self, e): self.anchor = e.getPoint() self.oldCamPos = self.cameraPos def findMousePos(self, p): w = self.getWidth() h = self.getHeight() cX = self.cameraPos[0] cY = self.cameraPos[1] y = h - p.y x = p.x - w / 2 + cX y = y - h / 2 + cY return [x, y] def mouseReleased(self, e): if self.state == State.DRAW_SHAPE: try: p = self.findMousePos(e.getPoint()) self.entity.getModel().pol.addPoint(p[0], p[1]) except IllegalPathStateException: print "Error Building Polygon path!" self.repaint() def mouseMoved(self, e): return def mouseDragged(self, e): if self.state == State.NOTHING: self.cameraPos = [ self.oldCamPos[0] + self.anchor.x - e.getX(), self.oldCamPos[1] - self.anchor.y + e.getY(), ] print str(self.cameraPos) self.repaint() def update(self, delta): return
def sceneChanged(self, scene): self.scene = scene self.entity = Entity() self.repaint()