Mercurial > traipse_dev
diff orpg/mapper/fog_handler.py @ 0:4385a7d0efd1 grumpy-goblin
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
author | sirebral |
---|---|
date | Tue, 14 Jul 2009 16:41:58 -0500 |
parents | |
children | 0b8b7e3ed78d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orpg/mapper/fog_handler.py Tue Jul 14 16:41:58 2009 -0500 @@ -0,0 +1,198 @@ +# Copyright (C) 2000-2001 The OpenRPG Project +# +# openrpg-dev@lists.sourceforge.net +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# -- +# +# File: mapper/fog_handler.py +# Author: Mark Tarrabain +# +# Description: Handler for fog layer +# + +from fog import * +from base_handler import * +from region import * + +#CTRL_REVEAL = wx.NewId() +#CTRL_HIDE = wx.NewId() +#CTRL_REMOVE = wx.NewId() +#CTRL_SHOWALL = wx.NewId() +#CTRL_HIDEALL = wx.NewId() +#CTRL_COLOR = wx.NewId() +#CTRL_PEN = wx.NewId() + +class fog_handler(base_layer_handler): + def __init__(self, parent, id, canvas): + self.showmode = 1 + self.drawing = False + self.pencolor=wx.WHITE + base_layer_handler.__init__(self, parent, id, canvas) + + def build_ctrls(self): + foglayer = self.canvas.layers['fog'] + base_layer_handler.build_ctrls(self) + self.f_type_radio = {} + self.fogshow = wx.RadioButton(self, wx.ID_ANY, "Show", style=wx.RB_GROUP) + self.foghide = wx.RadioButton(self, wx.ID_ANY, "Hide") + + self.sizer.Add(self.foghide) + self.sizer.Add(self.fogshow) + self.sizer.Add(wx.Size(20,25),1) + + + def build_menu(self,label = "fog"): + base_layer_handler.build_menu(self,label) + self.main_menu.AppendSeparator() + + item = wx.MenuItem(self.main_menu, wx.ID_ANY, "&Hide All", "Hide All") + self.canvas.Bind(wx.EVT_MENU, self.on_hideall, item) + self.main_menu.AppendItem(item) + + item = wx.MenuItem(self.main_menu, wx.ID_ANY, "&Fog Mask", "Fog Mask") + self.canvas.Bind(wx.EVT_MENU, self.on_color, item) + self.main_menu.AppendItem(item) + + item = wx.MenuItem(self.main_menu, wx.ID_ANY, "&Remove Fog Layer", "Remove Fog Layer") + self.canvas.Bind(wx.EVT_MENU, self.on_remove, item) + self.main_menu.AppendItem(item) + + item = wx.MenuItem(self.main_menu, wx.ID_ANY, "&Pen Color", "Pen Color") + self.canvas.Bind(wx.EVT_MENU, self.on_pen_color, item) + self.main_menu.AppendItem(item) + + + + + def on_remove(self,evt): + session=self.canvas.frame.session + if (session.my_role() != session.ROLE_GM): + open_rpg.get_component("chat").InfoPost("You must be a GM to use this feature") + return + self.canvas.layers['fog'].remove_fog() + self.canvas.Refresh(False) + + def on_showall(self,evt): + session=self.canvas.frame.session + if (session.my_role() != session.ROLE_GM): + open_rpg.get_component("chat").InfoPost("You must be a GM to use this feature") + return + foglayer = self.canvas.layers['fog'] + foglayer.showall() + self.canvas.Refresh(False) + + def on_pen_color(self,evt): + data = wx.ColourData() + data.SetChooseFull(True) + data.SetColour(self.pencolor) + dlg = wx.ColourDialog(self.canvas, data) + if dlg.ShowModal() == wx.ID_OK: + data = dlg.GetColourData() + color = data.GetColour() + self.pencolor=color + dlg.Destroy() + + def on_hideall(self,evt): + session=self.canvas.frame.session + if (session.my_role() != session.ROLE_GM): + open_rpg.get_component("chat").InfoPost("You must be a GM to use this feature") + return + foglayer=self.canvas.layers['fog'] + foglayer.clear() + self.canvas.Refresh(False) + + def on_color(self,evt): + session=self.canvas.frame.session + if (session.my_role() != session.ROLE_GM): + open_rpg.get_component("chat").InfoPost("You must be a GM to use this feature") + return + data = wx.ColourData() + data.SetChooseFull(True) + data.SetColour(self.canvas.layers['fog'].color) + dlg = wx.ColourDialog(self.canvas, data) + if dlg.ShowModal() == wx.ID_OK: + data = dlg.GetColourData() + color = data.GetColour() + if "__WXGTK__" not in wx.PlatformInfo: + color = wx.Color(color.Red(), color.Green(), color.Blue(), 128) + self.canvas.layers['fog'].color = color + dlg.Destroy() + self.canvas.layers['fog'].fill_fog() + self.canvas.Refresh(False) + + def update_info(self): + foglayer = self.canvas.layers['fog'] + pass + + + def on_motion(self, evt): + scale = self.canvas.layers['grid'].mapscale + dc = wx.ClientDC(self.canvas) + dc.SetUserScale(scale, scale) + self.canvas.PrepareDC(dc) + pos = evt.GetLogicalPosition(dc) + pos.x /= COURSE + pos.y /= COURSE + pos.x /= scale + pos.y /= scale + + if evt.m_leftDown: + if not self.drawing: + self.line = [] + self.line.append(IPoint().make(pos.x, pos.y)) + elif pos.x != self.last.x or pos.y != self.last.y: + pen= wx.Pen(self.pencolor) + pen.SetWidth(COURSE/2+1) + dc.SetPen(pen) + multi = scale*COURSE + dc.DrawLine(self.last.x*multi, self.last.y*multi, pos.x*multi, pos.y*multi) + dc.SetPen(wx.NullPen) + self.line.append(IPoint().make(pos.x, pos.y)) + self.last = pos + self.drawing = True + del dc + + def on_left_up(self,evt): + if self.drawing == True: + session=self.canvas.frame.session + if (session.my_role() != session.ROLE_GM): + open_rpg.get_component("chat").InfoPost("You must be a GM to use this feature") + else: + # This code sets the mode to either new or del depending on the action to function with the updated createregen code. + if (self.fogshow.GetValue() == 1): + showmode = 'new' + else: + showmode = 'del' + scale = self.canvas.layers['grid'].mapscale + dc = wx.ClientDC(self.canvas) + self.canvas.PrepareDC(dc) + dc.SetUserScale(scale,scale) + pen= wx.Pen(self.pencolor) + pen.SetWidth(COURSE/2+1) + dc.SetPen(pen) + dc.DrawLine(self.last.x*scale*COURSE,self.last.y*scale*COURSE,self.line[0].X*scale*COURSE,self.line[0].Y*scale*COURSE) + dc.SetPen(wx.NullPen) + wx.BeginBusyCursor() + # This prevents the divide by zero error by not even sending the line to be proccessed if it contains less then 3 points + if (len(self.line)>1): + self.canvas.layers['fog'].createregn(self.line, showmode) + else: + #print "Error Divide by zero, ignoring this section" + pass + wx.EndBusyCursor() + del dc + self.canvas.Refresh(False) + self.drawing = False