diff clients/editor/plugins/mapwizard.py @ 0:4a0efb7baf70

* Datasets becomes the new trunk and retires after that :-)
author mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
date Sun, 29 Jun 2008 18:44:17 +0000
parents
children 28532ae6f9f6
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clients/editor/plugins/mapwizard.py	Sun Jun 29 18:44:17 2008 +0000
@@ -0,0 +1,116 @@
+# MapWizard is a plugin for Fifedit. It is a step-by-step map creation utility.
+
+import math
+
+import fife
+import plugin
+import pychan
+import pychan.widgets as widgets
+from input import Input
+from selection import Selection,ClickSelection
+
+class CameraEditor():
+	"""
+	CameraEditor provides a gui dialog for camera creation. The callback is called when camera creation is complete. A
+	partial specification of the camera parameters may optionally be given.
+	"""
+	def __init__(self, engine, callback=None, map=None, layer=None):
+		self.engine = engine
+		self.callback = callback
+		self._widget = pychan.loadXML('content/gui/cameraedit.xml')
+
+		if map:
+			self._widget.distributeData({
+				'mapBox'	: map.getId(),
+			})
+
+		if layer:
+			self._widget.distributeData({
+				'layerBox'	: layer.getId(),
+			})
+
+		self._widget.mapEvents({
+			'okButton'     : self._finished,
+			'cancelButton' : self._widget.hide
+		})
+
+		self._widget.show()
+
+	def _finished(self):
+		id = self._widget.collectData('idBox')
+		if id == '':
+			print 'Please enter a camera id.'
+			return
+
+		try:
+			map = self.engine.getModel().getMap(str(self._widget.collectData('mapBox')))
+		except fife.Exception:
+			print 'Cannot find the specified map id.'
+			return
+
+		try:
+			layer = map.getLayer(str(self._widget.collectData('layerBox')))
+		except fife.Exception:
+			print 'Cannot find the specified layer id.'	
+			return
+
+		try:
+			vals = self._widget.collectData('viewBox').split(',')
+			if len(vals) != 4:
+				raise ValueError	
+
+			viewport = fife.Rect(*[int(c) for c in vals])
+		except ValueError:
+			print 'Please enter 4 comma (,) delimited values for viewport x,y,width,height.'
+			return
+
+		try:
+			refh = int(self._widget.collectData('refhBox'))
+			refw = int(self._widget.collectData('refwBox'))
+		except ValueError:
+			print 'Please enter positive integer values for reference width and height.'
+			return
+
+		try:
+			rot = int(self._widget.collectData('rotBox'))
+			tilt = int(self._widget.collectData('tiltBox'))
+		except ValueError:
+			print 'Please enter positive integer values for rotation and tilt.'
+			return
+
+		cam = self.engine.getView().addCamera(id, layer, viewport, fife.ExactModelCoordinate(0,0,0))
+		cam.setCellImageDimensions(refw, refh)
+		cam.setRotation(rot)
+		cam.setTilt(tilt)
+	
+		self._widget.hide()
+
+		if self.callback:
+			self.callback()
+
+class MapWizard(plugin.Plugin):
+	def __init__(self, engine):
+		self.engine = engine
+
+		# Fifedit plugin data
+		self.menu_items = { 'Map Wizard' : self._buildMap }
+
+		self.newMap = False
+		self.map = None
+
+	def _buildMap(self):
+		def newMap(id):
+			def newLayer(id):
+				def newCamera():
+					self.newMap = True
+
+				grid = fife.SquareGrid()
+				layer = self.map.createLayer(id, grid)
+				grid.thisown = 0
+
+				CameraEditor(self.engine, newCamera, self.map, layer)
+
+			self.map = self.engine.getModel().createMap(id)
+			Input('Enter a layer identifier for a default layer:', newLayer)
+		
+		Input('Enter a map identifier:', newMap)