using Gtk; using System; public class Plasma:TerrPlugin{ mutable host:TerrHost; public Host:TerrHost { set { host=value; } } mutable nr:int; //settings mutable sDispl=0.0; //displacement mutable sMaxInit=200; mutable sMDispl=1.0; //midpoint displacement mutable sPro=2.0; //-------------------------------------------------------------------------------------------------------------- public Register(n:int):void{ nr=n; def mItem=MenuItem("plasma"); host.MGener.Append(mItem); mItem.Activated+=EventHandler(optionsWin); } //-------------------------------------------------------------------------------------------------------------- public Run():void{ host.Start(nr); def r=Random(); def map=host.HMap; def sizeX=map.SizeX; def sizeY=map.SizeY; for (mutable x=0; xx1)&&(ys>y1)){ plasma(x1,y1,xs,ys); plasma(xs,y1,x2,ys); plasma(xs,ys,x2,y2); plasma(x1,ys,xs,y2); } cnt++; when (cnt%1000==0) host.ProgBar.FractionAddResp(progStep); } map[0,0]=r.Next(sMaxInit); map[sizeX-1,0]=r.Next(sMaxInit); map[sizeX-1,sizeY-1]=r.Next(sMaxInit); map[0,sizeY-1]=r.Next(sMaxInit); plasma(0,0,sizeX-1,sizeY-1); host.Update(); } //-------------------------------------------------------------------------------------------------------------- private optionsWin(_o:object,_e:EventArgs):void{ def win=Window("plasma"); win.BorderWidth=5; def tips=Tooltips(); def whole=VBox(false,10); win.Add(whole); def sett=VBox(false,10); whole.PackStart(sett); def displHBox=HBox(false,10); sett.PackStart(displHBox); def displLab=Label("displacement:"); displHBox.PackStart(displLab); def displSpin=SpinButton(0.0,50,0.1); displHBox.PackStart(displSpin); tips.SetTip(displSpin,"the four border points displacement factor",""); displSpin.Value=sDispl; displSpin.ValueChanged+=fun(_) { sDispl=displSpin.ValueAsInt; } def mDisplHBox=HBox(false,10); sett.PackStart(mDisplHBox); def mDisplLab=Label("midpoint displacement:"); mDisplHBox.PackStart(mDisplLab); def mDisplSpin=SpinButton(0.0,50,0.1); mDisplHBox.PackStart(mDisplSpin); tips.SetTip(mDisplSpin,"the centre point displacement factor",""); mDisplSpin.Value=sMDispl; mDisplSpin.ValueChanged+=fun(_) { sMDispl=mDisplSpin.ValueAsInt; } def maxInitHBox=HBox(false,10); sett.PackStart(maxInitHBox); def maxInitLab=Label("max. initial:"); maxInitHBox.PackStart(maxInitLab); def maxInitSpin=SpinButton(1.0,5000,1.0); maxInitHBox.PackStart(maxInitSpin); tips.SetTip(maxInitSpin,"maximal initial value",""); maxInitSpin.Value=sMaxInit; maxInitSpin.ValueChanged+=fun(_) { sMaxInit=maxInitSpin.ValueAsInt; } def buttBox=HBox(false,10); whole.PackStart(buttBox); def aboutButt=Button("about"); buttBox.PackStart(aboutButt); aboutButt.Clicked+=EventHandler(aboutButtHandler); def cancelButt=Button("cancel"); buttBox.PackStart(cancelButt); cancelButt.Clicked+=fun(_) { win.Destroy(); } def okButt=Button("ok"); buttBox.PackStart(okButt); okButt.Clicked+=fun(_) { Run(); win.Destroy(); } win.ShowAll(); } //-------------------------------------------------------------------------------------------------------------- private aboutButtHandler(_o:object,_e:EventArgs):void{ def dial=MessageDialog(null,DialogFlags.Modal,MessageType.Info,ButtonsType.Ok,"plasma plugin 0.3:0.3 by caminoix, 03.09.2006\n\nfor more information on the algorithm please see\nhttp://terraineer.sourceforge.net/plugins/plasma.php"); _=dial.Run(); dial.Destroy(); } }