From 17909d029c6a8872b2fddf4e171d7925bbbe9c5c Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Thu, 29 Feb 2024 19:27:35 +0100 Subject: Initial commit --- Guppies1.0.cbp | 196 ++ Guppies1.0.depend | 3524 ++++++++++++++++++++++++++++++++ Guppies1.0.layout | 84 + Guppies1_0App.cpp | 34 + Guppies1_0App.h | 21 + Guppies1_0Main.cpp | 757 +++++++ Guppies1_0Main.h | 246 +++ README.md | 20 + Simulation/Camera.cpp | 241 +++ Simulation/Camera.hpp | 42 + Simulation/ContactListener.cpp | 168 ++ Simulation/ContactListener.hpp | 16 + Simulation/Corpse.cpp | 99 + Simulation/Corpse.hpp | 28 + Simulation/Entity.cpp | 59 + Simulation/Entity.hpp | 34 + Simulation/GraphicObjs.hpp | 56 + Simulation/Guppie.cpp | 584 ++++++ Simulation/Guppie.hpp | 58 + Simulation/GuppiesInclude.hpp | 6 + Simulation/Params.hpp | 172 ++ Simulation/Pellet.cpp | 66 + Simulation/Pellet.hpp | 20 + Simulation/SimBase.hpp | 70 + Simulation/SimBase_CreateNew.cpp | 49 + Simulation/SimBase_Draw.cpp | 40 + Simulation/SimBase_Execute.cpp | 152 ++ Simulation/SimBase_PrepareGraphics.cpp | 269 +++ Simulation/SimBase_Update.cpp | 55 + Simulation/SimFitness.hpp | 26 + Simulation/SimFitness_StartSpecs.cpp | 60 + Simulation/SimFitness_UpdateSpecs.cpp | 40 + Simulation/Tank.cpp | 52 + Simulation/Tank.hpp | 34 + Simulation/TextDisplay.cpp | 136 ++ Simulation/TextDisplay.hpp | 55 + Simulation/Zapper.cpp | 46 + Simulation/Zapper.hpp | 14 + bin/Release/Guppies.exe | Bin 0 -> 8102912 bytes bin/Release/Instructions.txt | 255 +++ bin/Release/gfx/Thumbs.db | Bin 0 -> 35840 bytes bin/Release/gfx/font.ttf | Bin 0 -> 358324 bytes bin/Release/gfx/icon.png | Bin 0 -> 4306 bytes bin/Release/gfx/icon_big.png | Bin 0 -> 23677 bytes bin/Release/gfx/logo.png | Bin 0 -> 41537 bytes gfx/Thumbs.db | Bin 0 -> 38912 bytes gfx/font.ttf | Bin 0 -> 358324 bytes gfx/icon.png | Bin 0 -> 4306 bytes gfx/icon_big.png | Bin 0 -> 23677 bytes gfx/logo.png | Bin 0 -> 41537 bytes icon.ico | Bin 0 -> 370070 bytes obj/Release/Simulation/.keep | 0 obj/Release/resource.res | Bin 0 -> 394186 bytes prms/test.prms | 37 + resource.rc | 3 + wxsmith/Guppies1_0dialog.wxs | 1038 ++++++++++ 56 files changed, 8962 insertions(+) create mode 100644 Guppies1.0.cbp create mode 100644 Guppies1.0.depend create mode 100644 Guppies1.0.layout create mode 100644 Guppies1_0App.cpp create mode 100644 Guppies1_0App.h create mode 100644 Guppies1_0Main.cpp create mode 100644 Guppies1_0Main.h create mode 100644 README.md create mode 100644 Simulation/Camera.cpp create mode 100644 Simulation/Camera.hpp create mode 100644 Simulation/ContactListener.cpp create mode 100644 Simulation/ContactListener.hpp create mode 100644 Simulation/Corpse.cpp create mode 100644 Simulation/Corpse.hpp create mode 100644 Simulation/Entity.cpp create mode 100644 Simulation/Entity.hpp create mode 100644 Simulation/GraphicObjs.hpp create mode 100644 Simulation/Guppie.cpp create mode 100644 Simulation/Guppie.hpp create mode 100644 Simulation/GuppiesInclude.hpp create mode 100644 Simulation/Params.hpp create mode 100644 Simulation/Pellet.cpp create mode 100644 Simulation/Pellet.hpp create mode 100644 Simulation/SimBase.hpp create mode 100644 Simulation/SimBase_CreateNew.cpp create mode 100644 Simulation/SimBase_Draw.cpp create mode 100644 Simulation/SimBase_Execute.cpp create mode 100644 Simulation/SimBase_PrepareGraphics.cpp create mode 100644 Simulation/SimBase_Update.cpp create mode 100644 Simulation/SimFitness.hpp create mode 100644 Simulation/SimFitness_StartSpecs.cpp create mode 100644 Simulation/SimFitness_UpdateSpecs.cpp create mode 100644 Simulation/Tank.cpp create mode 100644 Simulation/Tank.hpp create mode 100644 Simulation/TextDisplay.cpp create mode 100644 Simulation/TextDisplay.hpp create mode 100644 Simulation/Zapper.cpp create mode 100644 Simulation/Zapper.hpp create mode 100644 bin/Release/Guppies.exe create mode 100644 bin/Release/Instructions.txt create mode 100644 bin/Release/gfx/Thumbs.db create mode 100644 bin/Release/gfx/font.ttf create mode 100644 bin/Release/gfx/icon.png create mode 100644 bin/Release/gfx/icon_big.png create mode 100644 bin/Release/gfx/logo.png create mode 100644 gfx/Thumbs.db create mode 100644 gfx/font.ttf create mode 100644 gfx/icon.png create mode 100644 gfx/icon_big.png create mode 100644 gfx/logo.png create mode 100644 icon.ico create mode 100644 obj/Release/Simulation/.keep create mode 100644 obj/Release/resource.res create mode 100644 prms/test.prms create mode 100644 resource.rc create mode 100644 wxsmith/Guppies1_0dialog.wxs diff --git a/Guppies1.0.cbp b/Guppies1.0.cbp new file mode 100644 index 0000000..45b4893 --- /dev/null +++ b/Guppies1.0.cbp @@ -0,0 +1,196 @@ + + + + + + diff --git a/Guppies1.0.depend b/Guppies1.0.depend new file mode 100644 index 0000000..944eb09 --- /dev/null +++ b/Guppies1.0.depend @@ -0,0 +1,3524 @@ +# depslib dependency file v1.0 +1352832889 source:c:\users\mostro\documents\programming\applications\guppies1.0\guppies1_0app.cpp + "Guppies1_0App.h" + "Guppies1_0Main.h" + + +1352832889 c:\users\mostro\documents\programming\applications\guppies1.0\guppies1_0app.h + + +1341838982 c:\wxwidgets-2.9.4\include\wx\app.h + "wx/event.h" + "wx/eventfilter.h" + "wx/build.h" + "wx/cmdargs.h" + "wx/init.h" + "wx/intl.h" + "wx/log.h" + "wx/unix/app.h" + "wx/msw/app.h" + "wx/motif/app.h" + "wx/dfb/app.h" + "wx/gtk/app.h" + "wx/gtk1/app.h" + "wx/x11/app.h" + "wx/osx/app.h" + "wx/cocoa/app.h" + "wx/os2/app.h" + "wx/univ/theme.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\event.h + "wx/defs.h" + "wx/cpp.h" + "wx/object.h" + "wx/clntdata.h" + "wx/gdicmn.h" + "wx/cursor.h" + "wx/mousestate.h" + "wx/dynarray.h" + "wx/thread.h" + "wx/tracker.h" + "wx/typeinfo.h" + "wx/any.h" + "wx/meta/convertible.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\defs.h + "wx/platform.h" + "wx/version.h" + "wx/dlimpexp.h" + + "wx/debug.h" + + + "wx/windowid.h" + + "wx/msw/winundef.h" + "wx/features.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\platform.h + + + + "wx/osx/config_xcode.h" + "wx/android/config_android.h" + "wx/setup.h" + "wx/msw/wince/libraries.h" + "wx/msw/libraries.h" + "wx/msw/gccpriv.h" + + + "wx/chkconf.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\config_xcode.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\android\config_android.h + +1341838982 c:\wxwidgets-2.9.4\lib\gcc_lib\mswu\wx\setup.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\wince\libraries.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\libraries.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\gccpriv.h + <_mingw.h> + + +1341838982 c:\wxwidgets-2.9.4\include\wx\chkconf.h + "wx/msw/wince/chkconf.h" + "wx/msw/chkconf.h" + "wx/gtk/chkconf.h" + "wx/cocoa/chkconf.h" + "wx/osx/chkconf.h" + "wx/os2/chkconf.h" + "wx/dfb/chkconf.h" + "wx/motif/chkconf.h" + "wx/x11/chkconf.h" + "wx/android/chkconf.h" + "wx/unix/chkconf.h" + "wx/univ/chkconf.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\wince\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\chkconf.h + "wx/osx/iphone/chkconf.h" + "wx/osx/carbon/chkconf.h" + "wx/osx/cocoa/chkconf.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\iphone\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\carbon\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\android\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\unix\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\chkconf.h + +1341838983 c:\wxwidgets-2.9.4\include\wx\version.h + "wx/cpp.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cpp.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\dlimpexp.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\debug.h + + + "wx/chartype.h" + "wx/cpp.h" + "wx/dlimpexp.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\chartype.h + "wx/platform.h" + + + + + + + + + + + + +1341838983 c:\wxwidgets-2.9.4\include\wx\windowid.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\winundef.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\features.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\object.h + "wx/memory.h" + "wx/xti.h" + "wx/rtti.h" + "wx/xti2.h" + "wx/msw/msvcrt.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\memory.h + "wx/defs.h" + "wx/string.h" + "wx/msgout.h" + + +1341838982 c:\wxwidgets-2.9.4\include\wx\string.h + "wx/defs.h" + + + + + + + + + + + + "wx/wxcrtbase.h" + "wx/strvararg.h" + "wx/buffer.h" + "wx/strconv.h" + "wx/stringimpl.h" + "wx/stringops.h" + "wx/unichar.h" + "wx/tls.h" + "wx/iosfwrap.h" + "wx/crt.h" + +1355767012 c:\wxwidgets-2.9.4\include\wx\wxcrtbase.h + "wx/chartype.h" + + + + + + + +1341838982 c:\wxwidgets-2.9.4\include\wx\strvararg.h + "wx/platform.h" + "wx/cpp.h" + "wx/chartype.h" + "wx/strconv.h" + "wx/buffer.h" + "wx/unichar.h" + + + + "wx/stringimpl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\strconv.h + "wx/defs.h" + "wx/chartype.h" + "wx/buffer.h" + "typeinfo.h" + + "wx/fontenc.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\buffer.h + "wx/chartype.h" + "wx/wxcrtbase.h" + + +1341838982 c:\wxwidgets-2.9.4\include\wx\typeinfo.h + "wx/defs.h" + + + +1341838982 c:\wxwidgets-2.9.4\include\wx\fontenc.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\unichar.h + "wx/defs.h" + "wx/chartype.h" + "wx/stringimpl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\stringimpl.h + "wx/defs.h" + "wx/chartype.h" + "wx/wxcrtbase.h" + + "wx/beforestd.h" + + "wx/afterstd.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\beforestd.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\afterstd.h + "wx/msw/winundef.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\stringops.h + "wx/chartype.h" + "wx/stringimpl.h" + "wx/unichar.h" + "wx/buffer.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\tls.h + "wx/defs.h" + "wx/msw/tls.h" + "wx/os2/tls.h" + "wx/unix/tls.h" + + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\tls.h + "wx/msw/wrapwin.h" + "wx/thread.h" + "wx/vector.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\wrapwin.h + "wx/platform.h" + + + "wx/msw/winundef.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\thread.h + "wx/defs.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\vector.h + "wx/defs.h" + + + "wx/utils.h" + "wx/scopeguard.h" + "wx/meta/movable.h" + "wx/meta/if.h" + "wx/beforestd.h" + + "wx/afterstd.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\utils.h + "wx/object.h" + "wx/list.h" + "wx/filefn.h" + "wx/hashmap.h" + "wx/versioninfo.h" + "wx/meta/implicitconversion.h" + "wx/gdicmn.h" + "wx/mousestate.h" + "wx/longlong.h" + "wx/platinfo.h" + + + + + +1341838982 c:\wxwidgets-2.9.4\include\wx\list.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/beforestd.h" + + + + "wx/afterstd.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\filefn.h + "wx/list.h" + "wx/arrstr.h" + "wx/msw/wince/time.h" + "wx/msw/private.h" + + + + + "wx/os2/private.h" + + + + + + + + + + + + + + + + + +1341838982 c:\wxwidgets-2.9.4\include\wx\arrstr.h + "wx/defs.h" + "wx/string.h" + "wx/dynarray.h" + "wx/beforestd.h" + + "wx/afterstd.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dynarray.h + "wx/defs.h" + "wx/beforestd.h" + + + "wx/afterstd.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\wince\time.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\private.h + "wx/msw/wrapwin.h" + "wx/msw/microwin.h" + "wx/log.h" + "wx/window.h" + "wx/gdicmn.h" + "wx/colour.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\microwin.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\log.h + "wx/defs.h" + "wx/string.h" + "wx/strvararg.h" + "wx/arrstr.h" + + "wx/dynarray.h" + "wx/hashmap.h" + "wx/thread.h" + "wx/iosfwrap.h" + "wx/generic/logg.h" + "wx/cocoa/log.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\hashmap.h + "wx/string.h" + "wx/wxcrt.h" + + + + + + +1341838983 c:\wxwidgets-2.9.4\include\wx\wxcrt.h + "wx/wxcrtbase.h" + "wx/string.h" + + +1341838982 c:\wxwidgets-2.9.4\include\wx\iosfwrap.h + + + "wx/msw/winundef.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\logg.h + +1341838983 c:\wxwidgets-2.9.4\include\wx\window.h + "wx/event.h" + "wx/list.h" + "wx/cursor.h" + "wx/font.h" + "wx/colour.h" + "wx/region.h" + "wx/utils.h" + "wx/intl.h" + "wx/validate.h" + "wx/palette.h" + "wx/accel.h" + "wx/access.h" + "wx/msw/window.h" + "wx/motif/window.h" + "wx/gtk/window.h" + "wx/gtk1/window.h" + "wx/x11/window.h" + "wx/dfb/window.h" + "wx/osx/window.h" + "wx/cocoa/window.h" + "wx/os2/window.h" + "wx/univ/window.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cursor.h + "wx/defs.h" + "wx/msw/cursor.h" + "wx/motif/cursor.h" + "wx/gtk/cursor.h" + "wx/gtk1/cursor.h" + "wx/x11/cursor.h" + "wx/dfb/cursor.h" + "wx/osx/cursor.h" + "wx/cocoa/cursor.h" + "wx/os2/cursor.h" + "wx/utils.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\cursor.h + "wx/msw/gdiimage.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\gdiimage.h + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/list.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gdiobj.h + "wx/object.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gdicmn.h + "wx/defs.h" + "wx/list.h" + "wx/string.h" + "wx/fontenc.h" + "wx/hashmap.h" + "wx/math.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\math.h + "wx/defs.h" + + + + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\cursor.h + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\bitmap.h + "wx/string.h" + "wx/gdicmn.h" + "wx/colour.h" + "wx/image.h" + "wx/variant.h" + "wx/msw/bitmap.h" + "wx/x11/bitmap.h" + "wx/gtk/bitmap.h" + "wx/gtk1/bitmap.h" + "wx/x11/bitmap.h" + "wx/dfb/bitmap.h" + "wx/osx/bitmap.h" + "wx/cocoa/bitmap.h" + "wx/os2/bitmap.h" + "wx/generic/mask.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\colour.h + "wx/defs.h" + "wx/gdiobj.h" + "wx/variant.h" + "wx/msw/colour.h" + "wx/motif/colour.h" + "wx/gtk/colour.h" + "wx/gtk1/colour.h" + "wx/generic/colour.h" + "wx/x11/colour.h" + "wx/osx/colour.h" + "wx/cocoa/colour.h" + "wx/os2/colour.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\variant.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/arrstr.h" + "wx/list.h" + "wx/cpp.h" + "wx/longlong.h" + "wx/datetime.h" + "wx/iosfwrap.h" + "wx/any.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\longlong.h + "wx/defs.h" + "wx/string.h" + + "wx/iosfwrap.h" + + "wx/strvararg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\datetime.h + "wx/defs.h" + "wx/msw/wince/time.h" + + + "wx/longlong.h" + "wx/anystr.h" + "wx/dynarray.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\anystr.h + "wx/string.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\any.h + "wx/defs.h" + + "wx/string.h" + "wx/meta/if.h" + "wx/typeinfo.h" + "wx/list.h" + "wx/datetime.h" + "wx/variant.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\meta\if.h + "wx/defs.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\colour.h + "wx/object.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\colour.h + "wx/object.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\colour.h + "wx/osx/core/colour.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\core\colour.h + "wx/object.h" + "wx/string.h" + "wx/osx/core/cfref.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\core\cfref.h + + + +1341838982 c:\wxwidgets-2.9.4\include\wx\image.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/gdicmn.h" + "wx/hashmap.h" + "wx/arrstr.h" + "wx/stream.h" + "wx/variant.h" + "wx/imagbmp.h" + "wx/imagpng.h" + "wx/imaggif.h" + "wx/imagpcx.h" + "wx/imagjpeg.h" + "wx/imagtga.h" + "wx/imagtiff.h" + "wx/imagpnm.h" + "wx/imagxpm.h" + "wx/imagiff.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\stream.h + "wx/defs.h" + + "wx/object.h" + "wx/string.h" + "wx/filefn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\imagbmp.h + "wx/image.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\imagpng.h + "wx/defs.h" + "wx/image.h" + "wx/versioninfo.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\versioninfo.h + "wx/string.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\imaggif.h + "wx/image.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\imagpcx.h + "wx/image.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\imagjpeg.h + "wx/defs.h" + "wx/image.h" + "wx/versioninfo.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\imagtga.h + "wx/image.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\imagtiff.h + "wx/defs.h" + "wx/image.h" + "wx/versioninfo.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\imagpnm.h + "wx/image.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\imagxpm.h + "wx/image.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\imagiff.h + "wx/image.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\bitmap.h + "wx/msw/gdiimage.h" + "wx/palette.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\palette.h + "wx/defs.h" + "wx/object.h" + "wx/gdiobj.h" + "wx/msw/palette.h" + "wx/x11/palette.h" + "wx/generic/paletteg.h" + "wx/osx/palette.h" + "wx/os2/palette.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\palette.h + "wx/gdiobj.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\paletteg.h + "wx/defs.h" + "wx/object.h" + "wx/gdiobj.h" + "wx/gdicmn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\palette.h + "wx/gdiobj.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\bitmap.h + "wx/palette.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\mask.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\font.h + "wx/defs.h" + "wx/fontenc.h" + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/msw/font.h" + "wx/motif/font.h" + "wx/gtk/font.h" + "wx/gtk1/font.h" + "wx/x11/font.h" + "wx/dfb/font.h" + "wx/osx/font.h" + "wx/cocoa/font.h" + "wx/os2/font.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\font.h + "wx/gdicmn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\font.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\region.h + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/msw/region.h" + "wx/gtk/region.h" + "wx/gtk1/region.h" + "wx/x11/region.h" + "wx/dfb/region.h" + "wx/osx/region.h" + "wx/cocoa/region.h" + "wx/os2/region.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\region.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\region.h + "wx/osx/carbon/region.h" + "wx/generic/region.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\carbon\region.h + "wx/list.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\region.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\intl.h + "wx/defs.h" + "wx/string.h" + "wx/translation.h" + "wx/fontenc.h" + "wx/language.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\translation.h + "wx/defs.h" + "wx/string.h" + "wx/buffer.h" + "wx/language.h" + "wx/hashmap.h" + "wx/strconv.h" + "wx/scopedptr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\language.h + "wx/defs.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\scopedptr.h + "wx/defs.h" + "wx/checkeddelete.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\checkeddelete.h + +1341838983 c:\wxwidgets-2.9.4\include\wx\validate.h + "wx/defs.h" + "wx/event.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\accel.h + "wx/defs.h" + "wx/object.h" + "wx/generic/accel.h" + "wx/msw/accel.h" + "wx/motif/accel.h" + "wx/gtk/accel.h" + "wx/gtk1/accel.h" + "wx/osx/accel.h" + "wx/generic/accel.h" + "wx/os2/accel.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\accel.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\accel.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\accel.h + "wx/string.h" + "wx/event.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\access.h + "wx/defs.h" + "wx/variant.h" + "wx/msw/ole/access.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\ole\access.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\window.h + "wx/settings.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\settings.h + "wx/colour.h" + "wx/font.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\window.h + "wx/brush.h" + "wx/dc.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\brush.h + "wx/defs.h" + "wx/object.h" + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/msw/brush.h" + "wx/x11/brush.h" + "wx/gtk/brush.h" + "wx/gtk1/brush.h" + "wx/dfb/brush.h" + "wx/osx/brush.h" + "wx/cocoa/brush.h" + "wx/os2/brush.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\brush.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\brush.h + "wx/gdicmn.h" + "wx/gdiobj.h" + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dc.h + "wx/object.h" + "wx/intl.h" + "wx/cursor.h" + "wx/font.h" + "wx/colour.h" + "wx/bitmap.h" + "wx/brush.h" + "wx/pen.h" + "wx/palette.h" + "wx/dynarray.h" + "wx/math.h" + "wx/image.h" + "wx/region.h" + "wx/affinematrix2d.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\pen.h + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/msw/pen.h" + "wx/x11/pen.h" + "wx/gtk/pen.h" + "wx/gtk1/pen.h" + "wx/dfb/pen.h" + "wx/osx/pen.h" + "wx/cocoa/pen.h" + "wx/os2/pen.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\pen.h + "wx/gdiobj.h" + "wx/gdicmn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\pen.h + "wx/gdiobj.h" + "wx/colour.h" + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\affinematrix2d.h + "wx/defs.h" + "wx/affinematrix2dbase.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\affinematrix2dbase.h + "wx/defs.h" + "wx/geometry.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\geometry.h + "wx/defs.h" + "wx/utils.h" + "wx/gdicmn.h" + "wx/math.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\window.h + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\meta\implicitconversion.h + "wx/defs.h" + "wx/meta/if.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\mousestate.h + "wx/gdicmn.h" + "wx/kbdstate.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\kbdstate.h + "wx/defs.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\platinfo.h + "wx/string.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\scopeguard.h + "wx/defs.h" + "wx/except.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\except.h + "wx/defs.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\meta\movable.h + "wx/meta/pod.h" + "wx/string.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\meta\pod.h + "wx/defs.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\unix\tls.h + + +1341838982 c:\wxwidgets-2.9.4\include\wx\crt.h + "wx/defs.h" + "wx/chartype.h" + "wx/wxcrt.h" + "wx/wxcrtvararg.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\wxcrtvararg.h + "wx/wxcrt.h" + "wx/strvararg.h" + "wx/string.h" + + +1341838982 c:\wxwidgets-2.9.4\include\wx\msgout.h + "wx/defs.h" + "wx/chartype.h" + "wx/strvararg.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\xti.h + "wx/defs.h" + "wx/xtitypes.h" + "wx/xtihandler.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\xtitypes.h + "wx/defs.h" + "wx/string.h" + "wx/hashmap.h" + "wx/arrstr.h" + "wx/flags.h" + "wx/intl.h" + "wx/log.h" + + +1341838982 c:\wxwidgets-2.9.4\include\wx\flags.h + +1341838983 c:\wxwidgets-2.9.4\include\wx\xtihandler.h + "wx/defs.h" + "wx/xti.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\rtti.h + "wx/memory.h" + "wx/flags.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\xti2.h + "wx/xtiprop.h" + "wx/xtictor.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\xtiprop.h + "wx/defs.h" + "wx/xti.h" + "wx/any.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\xtictor.h + "wx/defs.h" + "wx/xti.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\msvcrt.h + + + +1341838982 c:\wxwidgets-2.9.4\include\wx\clntdata.h + "wx/defs.h" + "wx/string.h" + "wx/hashmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\tracker.h + "wx/defs.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\meta\convertible.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\eventfilter.h + "wx/defs.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\build.h + "wx/version.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cmdargs.h + "wx/arrstr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\init.h + "wx/defs.h" + "wx/chartype.h" + "wx/msw/init.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\init.h + "wx/msw/wrapwin.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\unix\app.h + + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\app.h + "wx/event.h" + "wx/icon.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\icon.h + "wx/iconloc.h" + "wx/msw/icon.h" + "wx/motif/icon.h" + "wx/generic/icon.h" + "wx/generic/icon.h" + "wx/generic/icon.h" + "wx/generic/icon.h" + "wx/osx/icon.h" + "wx/generic/icon.h" + "wx/cocoa/icon.h" + "wx/os2/icon.h" + "wx/variant.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\iconloc.h + "wx/string.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\icon.h + "wx/msw/gdiimage.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\icon.h + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\icon.h + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\app.h + "wx/defs.h" + "wx/object.h" + "wx/gdicmn.h" + "wx/event.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\theme.h + "wx/string.h" + +1352834483 c:\users\mostro\documents\programming\applications\guppies1.0\guppies1_0main.h + + + + + + + + + +1341838982 c:\wxwidgets-2.9.4\include\wx\notebook.h + "wx/defs.h" + "wx/bookctrl.h" + "wx/univ/notebook.h" + "wx/msw/notebook.h" + "wx/generic/notebook.h" + "wx/gtk/notebook.h" + "wx/gtk1/notebook.h" + "wx/osx/notebook.h" + "wx/cocoa/notebook.h" + "wx/os2/notebook.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\bookctrl.h + "wx/defs.h" + "wx/control.h" + "wx/dynarray.h" + "wx/withimages.h" + "wx/notebook.h" + "wx/choicebk.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\control.h + "wx/defs.h" + "wx/window.h" + "wx/univ/control.h" + "wx/msw/control.h" + "wx/motif/control.h" + "wx/gtk/control.h" + "wx/gtk1/control.h" + "wx/osx/control.h" + "wx/cocoa/control.h" + "wx/os2/control.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\control.h + "wx/univ/inphand.h" + "wx/univ/inpcons.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\inphand.h + "wx/univ/inpcons.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\inpcons.h + "wx/object.h" + "wx/event.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\control.h + "wx/dynarray.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\control.h + +1341838983 c:\wxwidgets-2.9.4\include\wx\withimages.h + "wx/defs.h" + "wx/icon.h" + "wx/imaglist.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\imaglist.h + "wx/defs.h" + "wx/generic/imaglist.h" + "wx/msw/imaglist.h" + "wx/osx/imaglist.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\imaglist.h + "wx/list.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\imaglist.h + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\imaglist.h + "wx/defs.h" + "wx/list.h" + "wx/icon.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\choicebk.h + "wx/defs.h" + "wx/bookctrl.h" + "wx/choice.h" + "wx/containr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\choice.h + "wx/defs.h" + "wx/ctrlsub.h" + "wx/univ/choice.h" + "wx/msw/wince/choicece.h" + "wx/msw/choice.h" + "wx/motif/choice.h" + "wx/gtk/choice.h" + "wx/gtk1/choice.h" + "wx/osx/choice.h" + "wx/cocoa/choice.h" + "wx/os2/choice.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\ctrlsub.h + "wx/defs.h" + "wx/arrstr.h" + "wx/control.h" + "wx/msw/ctrlsub.h" + "wx/motif/ctrlsub.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\ctrlsub.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\choice.h + "wx/combobox.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\combobox.h + "wx/defs.h" + "wx/textctrl.h" + "wx/ctrlsub.h" + "wx/textentry.h" + "wx/univ/combobox.h" + "wx/msw/combobox.h" + "wx/motif/combobox.h" + "wx/gtk/combobox.h" + "wx/gtk1/combobox.h" + "wx/osx/combobox.h" + "wx/cocoa/combobox.h" + "wx/os2/combobox.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\textctrl.h + "wx/defs.h" + "wx/control.h" + "wx/textentry.h" + "wx/dynarray.h" + "wx/gdicmn.h" + "wx/ioswrap.h" + "wx/x11/textctrl.h" + "wx/univ/textctrl.h" + "wx/msw/wince/textctrlce.h" + "wx/msw/textctrl.h" + "wx/motif/textctrl.h" + "wx/gtk/textctrl.h" + "wx/gtk1/textctrl.h" + "wx/osx/textctrl.h" + "wx/cocoa/textctrl.h" + "wx/os2/textctrl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\textentry.h + "wx/filefn.h" + "wx/gdicmn.h" + "wx/gtk/textentry.h" + "wx/osx/textentry.h" + "wx/msw/textentry.h" + "wx/motif/textentry.h" + "wx/os2/textentry.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\textentry.h + "wx/control.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\textentry.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\ioswrap.h + "wx/beforestd.h" + + + "wx/afterstd.h" + "wx/msw/winundef.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\textctrl.h + "wx/scrolwin.h" + "wx/univ/inphand.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\scrolwin.h + "wx/panel.h" + "wx/gtk/scrolwin.h" + "wx/gtk1/scrolwin.h" + "wx/generic/scrolwin.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\panel.h + "wx/window.h" + "wx/containr.h" + "wx/univ/panel.h" + "wx/msw/panel.h" + "wx/generic/panelg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\containr.h + "wx/defs.h" + "wx/event.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\panel.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\panel.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\panelg.h + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\scrolwin.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\wince\textctrlce.h + "wx/dynarray.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\textctrl.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\textctrl.h + "wx/control.h" + "wx/textctrl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\combobox.h + "wx/combo.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\combo.h + "wx/defs.h" + "wx/control.h" + "wx/renderer.h" + "wx/bitmap.h" + "wx/textentry.h" + "wx/msw/combo.h" + "wx/generic/combo.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\renderer.h + "wx/gdicmn.h" + "wx/colour.h" + "wx/font.h" + "wx/bitmap.h" + "wx/string.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\combo.h + "wx/timer.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\timer.h + "wx/defs.h" + "wx/object.h" + "wx/longlong.h" + "wx/event.h" + "wx/stopwatch.h" + "wx/utils.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\stopwatch.h + "wx/defs.h" + "wx/longlong.h" + "wx/time.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\time.h + "wx/longlong.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\combo.h + "wx/dcbuffer.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dcbuffer.h + "wx/dcmemory.h" + "wx/dcclient.h" + "wx/window.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dcmemory.h + "wx/dc.h" + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dcclient.h + "wx/dc.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\combobox.h + "wx/choice.h" + "wx/textentry.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\combobox.h + "wx/containr.h" + "wx/choice.h" + "wx/textctrl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\wince\choicece.h + "wx/defs.h" + "wx/dynarray.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\choice.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\choice.h + "wx/control.h" + "wx/dynarray.h" + "wx/arrstr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\notebook.h + "wx/arrstr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\notebook.h + "wx/control.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\notebook.h + "wx/event.h" + "wx/control.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\notebook.h + "wx/event.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\sizer.h + "wx/defs.h" + "wx/window.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\stattext.h + "wx/defs.h" + "wx/control.h" + "wx/univ/stattext.h" + "wx/msw/stattext.h" + "wx/motif/stattext.h" + "wx/gtk/stattext.h" + "wx/gtk1/stattext.h" + "wx/osx/stattext.h" + "wx/cocoa/stattext.h" + "wx/os2/stattext.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\stattext.h + "wx/generic/stattextg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\stattextg.h + "wx/stattext.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\stattext.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\stattext.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\filepicker.h + "wx/defs.h" + "wx/pickerbase.h" + "wx/filename.h" + "wx/gtk/filepicker.h" + "wx/generic/filepickerg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\pickerbase.h + "wx/control.h" + "wx/sizer.h" + "wx/containr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\filename.h + "wx/arrstr.h" + "wx/filefn.h" + "wx/datetime.h" + "wx/intl.h" + "wx/longlong.h" + "wx/file.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\file.h + "wx/defs.h" + "wx/string.h" + "wx/filefn.h" + "wx/strconv.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\filepickerg.h + "wx/button.h" + "wx/filedlg.h" + "wx/dirdlg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\button.h + "wx/defs.h" + "wx/anybutton.h" + "wx/univ/button.h" + "wx/msw/button.h" + "wx/motif/button.h" + "wx/gtk/button.h" + "wx/gtk1/button.h" + "wx/osx/button.h" + "wx/cocoa/button.h" + "wx/os2/button.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\anybutton.h + "wx/defs.h" + "wx/bitmap.h" + "wx/control.h" + "wx/univ/anybutton.h" + "wx/msw/anybutton.h" + "wx/gtk/anybutton.h" + "wx/osx/anybutton.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\anybutton.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\anybutton.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\anybutton.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\button.h + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\button.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\button.h + "wx/control.h" + "wx/gdicmn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\filedlg.h + "wx/defs.h" + "wx/dialog.h" + "wx/arrstr.h" + "wx/generic/filedlgg.h" + "wx/msw/filedlg.h" + "wx/motif/filedlg.h" + "wx/gtk/filedlg.h" + "wx/gtk1/filedlg.h" + "wx/osx/filedlg.h" + "wx/cocoa/filedlg.h" + "wx/os2/filedlg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dialog.h + "wx/defs.h" + "wx/toplevel.h" + "wx/univ/dialog.h" + "wx/msw/dialog.h" + "wx/motif/dialog.h" + "wx/gtk/dialog.h" + "wx/gtk1/dialog.h" + "wx/osx/dialog.h" + "wx/cocoa/dialog.h" + "wx/os2/dialog.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\toplevel.h + "wx/nonownedwnd.h" + "wx/iconbndl.h" + "wx/containr.h" + "wx/weakref.h" + "wx/msw/toplevel.h" + "wx/gtk/toplevel.h" + "wx/gtk1/toplevel.h" + "wx/x11/toplevel.h" + "wx/dfb/toplevel.h" + "wx/osx/toplevel.h" + "wx/cocoa/toplevel.h" + "wx/os2/toplevel.h" + "wx/motif/toplevel.h" + "wx/univ/toplevel.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\nonownedwnd.h + "wx/window.h" + "wx/dfb/nonownedwnd.h" + "wx/gtk/nonownedwnd.h" + "wx/osx/nonownedwnd.h" + "wx/msw/nonownedwnd.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\nonownedwnd.h + "wx/window.h" + "wx/graphics.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\graphics.h + "wx/defs.h" + "wx/geometry.h" + "wx/dynarray.h" + "wx/dc.h" + "wx/image.h" + "wx/vector.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\nonownedwnd.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\iconbndl.h + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/icon.h" + "wx/dynarray.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\weakref.h + "wx/tracker.h" + "wx/meta/convertible.h" + "wx/meta/int2type.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\meta\int2type.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\toplevel.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\toplevel.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\toplevel.h + "wx/univ/inpcons.h" + "wx/univ/inphand.h" + "wx/icon.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\dialog.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\dialog.h + "wx/panel.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\dialog.h + "wx/panel.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\filedlgg.h + "wx/listctrl.h" + "wx/datetime.h" + "wx/filefn.h" + "wx/artprov.h" + "wx/filedlg.h" + "wx/generic/filectrlg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\listctrl.h + "wx/defs.h" + "wx/listbase.h" + "wx/msw/listctrl.h" + "wx/osx/listctrl.h" + "wx/generic/listctrl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\listbase.h + "wx/colour.h" + "wx/font.h" + "wx/gdicmn.h" + "wx/event.h" + "wx/control.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\listctrl.h + "wx/textctrl.h" + "wx/dynarray.h" + "wx/vector.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\listctrl.h + "wx/defs.h" + "wx/generic/listctrl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\listctrl.h + "wx/containr.h" + "wx/scrolwin.h" + "wx/textctrl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\artprov.h + "wx/string.h" + "wx/bitmap.h" + "wx/icon.h" + "wx/iconbndl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\filectrlg.h + "wx/containr.h" + "wx/listctrl.h" + "wx/filectrl.h" + "wx/filename.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\filectrl.h + "wx/defs.h" + "wx/string.h" + "wx/event.h" + "wx/gtk/filectrl.h" + "wx/generic/filectrlg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\filedlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\filedlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\dirdlg.h + "wx/dialog.h" + "wx/generic/dirdlgg.h" + "wx/generic/dirdlgg.h" + "wx/generic/dirdlgg.h" + "wx/msw/dirdlg.h" + "wx/gtk/dirdlg.h" + "wx/generic/dirdlgg.h" + "wx/osx/dirdlg.h" + "wx/cocoa/dirdlg.h" + "wx/generic/dirdlgg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\dirdlgg.h + "wx/dialog.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\dirdlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\dirdlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\statline.h + "wx/defs.h" + "wx/control.h" + "wx/univ/statline.h" + "wx/msw/statline.h" + "wx/gtk/statline.h" + "wx/gtk1/statline.h" + "wx/os2/statline.h" + "wx/osx/statline.h" + "wx/cocoa/statline.h" + "wx/generic/statline.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\statline.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\statline.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\statline.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\statline.h + +1352834593 source:c:\users\mostro\documents\programming\applications\guppies1.0\guppies1_0main.cpp + "Guppies1_0Main.h" + + + + + +1341838982 c:\wxwidgets-2.9.4\include\wx\msgdlg.h + "wx/defs.h" + "wx/dialog.h" + "wx/stockitem.h" + "wx/generic/msgdlgg.h" + "wx/cocoa/msgdlg.h" + "wx/msw/msgdlg.h" + "wx/motif/msgdlg.h" + "wx/gtk/msgdlg.h" + "wx/osx/msgdlg.h" + "wx/os2/msgdlg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\stockitem.h + "wx/defs.h" + "wx/chartype.h" + "wx/string.h" + "wx/accel.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\msgdlgg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\msgdlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\msgdlg.h + +1333917710 source:c:\users\mostro\documents\programming\applications\guppies1.0\resource.rc + "wx/msw/wx.rc" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\wx.rc + + "wx/msw/wince/wince.rc" + "wx/msw/rcdefs.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\wince\wince.rc + + "wx/msw/wince/resources.h" + "wx/msw/wince/smartphone.rc" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\wince\resources.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\wince\smartphone.rc + + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\rcdefs.h + +1354554733 source:c:\users\paul\documents\programming\applications\guppies1.0\resource.rc + "wx/msw/wx.rc" + +1352865290 source:c:\users\paul\documents\programming\applications\guppies1.0\guppies1_0app.cpp + "Guppies1_0App.h" + "Guppies1_0Main.h" + + +1352865290 c:\users\paul\documents\programming\applications\guppies1.0\guppies1_0app.h + + +1355957691 c:\users\paul\documents\programming\applications\guppies1.0\guppies1_0main.h + + + + + + + + + + + + + + + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\cocoa\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\chkconf.h + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\chkconf.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\log.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\cursor.h + "wx/gdiobj.h" + "wx/gdicmn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\cursor.h + "wx/gdiobj.h" + "wx/gdicmn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\cursor.h + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/image.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\cursor.h + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/colour.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\colour.h + "wx/object.h" + "wx/string.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\colour.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\colour.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/gdiobj.h" + "wx/palette.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\palette.h + "wx/list.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\palette.h + "wx/gdiobj.h" + "wx/os2/private.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\private.h + + + + + + + + "wx/dlimpexp.h" + "wx/fontenc.h" + "wx/thread.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\colour.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/gdiobj.h" + "wx/palette.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\colour.h + "wx/object.h" + "wx/string.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\colour.h + "wx/object.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\cursor.h + "wx/gdiobj.h" + "wx/gdicmn.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\bitmap.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/palette.h" + "wx/gdiobj.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\bitmap.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\bitmap.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/palette.h" + "wx/gdiobj.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\bitmap.h + "wx/dfb/dfbptr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\dfbptr.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\bitmap.h + "wx/palette.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\bitmap.h + "wx/os2/private.h" + "wx/os2/gdiimage.h" + "wx/gdicmn.h" + "wx/palette.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\gdiimage.h + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/list.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\cursor.h + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\cursor.h + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\font.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\font.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\font.h + "wx/hash.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\hash.h + "wx/defs.h" + "wx/string.h" + "wx/object.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\font.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\font.h + "wx/dfb/dfbptr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\font.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\font.h + "wx/gdiobj.h" + "wx/os2/private.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\region.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\region.h + "wx/list.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\region.h + "wx/list.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\region.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\region.h + "wx/generic/region.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\region.h + "wx/list.h" + "wx/os2/private.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\accel.h + "wx/object.h" + "wx/string.h" + "wx/event.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\accel.h + "wx/generic/accel.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\accel.h + "wx/generic/accel.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\accel.h + "wx/object.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\window.h + "wx/region.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\window.h + "wx/dynarray.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\window.h + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\window.h + "wx/region.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\window.h + "wx/dfb/dfbptr.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\brush.h + "wx/gdiobj.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\brush.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\brush.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/gdiobj.h" + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\brush.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/gdiobj.h" + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\brush.h + "wx/gdicmn.h" + "wx/gdiobj.h" + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\brush.h + "wx/bitmap.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\pen.h + "wx/gdicmn.h" + "wx/gdiobj.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\pen.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\pen.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/gdiobj.h" + "wx/gdicmn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\pen.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/gdiobj.h" + "wx/gdicmn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\pen.h + "wx/gdiobj.h" + "wx/gdicmn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\pen.h + "wx/gdiobj.h" + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\window.h + "wx/cocoa/NSView.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\nsview.h + "wx/hashmap.h" + "wx/cocoa/ObjcAssociate.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\objcassociate.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\window.h + + "wx/hash.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\tls.h + "wx/os2/private.h" + "wx/thread.h" + "wx/vector.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\icon.h + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\icon.h + "wx/gdicmn.h" + "wx/gdiobj.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\icon.h + "wx/bitmap.h" + "wx/os2/gdiimage.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\app.h + "wx/event.h" + "wx/hashmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\app.h + "wx/dfb/dfbptr.h" + "wx/vidmode.h" + +1341838983 c:\wxwidgets-2.9.4\include\wx\vidmode.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\app.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\app.h + "wx/frame.h" + "wx/icon.h" + "wx/strconv.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\frame.h + "wx/toplevel.h" + "wx/statusbr.h" + "wx/univ/frame.h" + "wx/msw/frame.h" + "wx/gtk/frame.h" + "wx/gtk1/frame.h" + "wx/motif/frame.h" + "wx/osx/frame.h" + "wx/cocoa/frame.h" + "wx/os2/frame.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\nonownedwnd.h + "wx/window.h" + "wx/dfb/dfbptr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\nonownedwnd.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\toplevel.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\toplevel.h + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\toplevel.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\dfb\toplevel.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\toplevel.h + "wx/hashmap.h" + "wx/cocoa/NSWindow.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\nswindow.h + "wx/hashmap.h" + "wx/cocoa/ObjcAssociate.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\toplevel.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\toplevel.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\statusbr.h + "wx/defs.h" + "wx/control.h" + "wx/list.h" + "wx/dynarray.h" + "wx/univ/statusbr.h" + "wx/msw/statusbar.h" + "wx/generic/statusbr.h" + "wx/osx/statusbr.h" + "wx/generic/statusbr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\control.h + "wx/window.h" + "wx/list.h" + "wx/validate.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\control.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\control.h + "wx/defs.h" + "wx/object.h" + "wx/list.h" + "wx/window.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\control.h + "wx/cocoa/NSControl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\nscontrol.h + "wx/hashmap.h" + "wx/cocoa/ObjcAssociate.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\control.h + "wx/dynarray.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\statusbr.h + "wx/univ/inpcons.h" + "wx/arrstr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\statusbar.h + "wx/vector.h" + "wx/tooltip.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\tooltip.h + "wx/defs.h" + "wx/msw/tooltip.h" + "wx/gtk/tooltip.h" + "wx/gtk1/tooltip.h" + "wx/osx/tooltip.h" + "wx/cocoa/tooltip.h" + "wx/os2/tooltip.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\tooltip.h + "wx/object.h" + "wx/gdicmn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\tooltip.h + "wx/string.h" + "wx/object.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\tooltip.h + "wx/defs.h" + "wx/string.h" + "wx/object.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\tooltip.h + "wx/string.h" + "wx/event.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\tooltip.h + "wx/object.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\tooltip.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\statusbr.h + "wx/defs.h" + "wx/pen.h" + "wx/arrstr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\statusbr.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\frame.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\frame.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\frame.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\frame.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\frame.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\frame.h + "wx/toolbar.h" + "wx/accel.h" + "wx/icon.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\toolbar.h + "wx/defs.h" + "wx/tbarbase.h" + "wx/univ/toolbar.h" + "wx/msw/toolbar.h" + "wx/msw/wince/tbarwce.h" + "wx/motif/toolbar.h" + "wx/gtk/toolbar.h" + "wx/gtk1/toolbar.h" + "wx/osx/toolbar.h" + "wx/cocoa/toolbar.h" + "wx/os2/toolbar.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\tbarbase.h + "wx/defs.h" + "wx/bitmap.h" + "wx/list.h" + "wx/control.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\toolbar.h + "wx/button.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\anybutton.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\button.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\button.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\button.h + "wx/defs.h" + "wx/object.h" + "wx/list.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\button.h + "wx/cocoa/NSButton.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\nsbutton.h + "wx/hashmap.h" + "wx/cocoa/ObjcAssociate.h" + "wx/cocoa/ObjcRef.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\objcref.h + "wx/osx/core/cfref.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\button.h + "wx/control.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\toolbar.h + "wx/dynarray.h" + "wx/imaglist.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\wince\tbarwce.h + "wx/dynarray.h" + "wx/msw/toolbar.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\toolbar.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\toolbar.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\toolbar.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\toolbar.h + "wx/tbarbase.h" + "wx/dynarray.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\toolbar.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\toolbar.h + "wx/timer.h" + "wx/tbarbase.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\frame.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\frame.h + "wx/os2/wxrsc.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\wxrsc.h + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\app.h + "wx/gdicmn.h" + "wx/event.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\app.h + "wx/osx/core/cfref.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\app.h + + + + + + + + + "wx/event.h" + "wx/icon.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\ctrlsub.h + "wx/dynarray.h" + "wx/generic/ctrlsub.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\ctrlsub.h + "wx/dynarray.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\textentry.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\textentry.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\textentry.h + +1341838983 c:\wxwidgets-2.9.4\include\wx\x11\textctrl.h + "wx/univ/textctrl.h" + "wx/scrolwin.h" + "wx/arrstr.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\scrolwin.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\scrolwin.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\textctrl.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\textctrl.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\textctrl.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\textctrl.h + "wx/cocoa/NSTextField.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\nstextfield.h + "wx/hashmap.h" + "wx/cocoa/ObjcAssociate.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\textctrl.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\combobox.h + "wx/choice.h" + "wx/textentry.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\combobox.h + "wx/choice.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\combobox.h + "wx/defs.h" + "wx/object.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\combobox.h + "wx/hashmap.h" + "wx/cocoa/ObjcAssociate.h" + "wx/textctrl.h" + "wx/dynarray.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\combobox.h + "wx/choice.h" + "wx/textentry.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\choice.h + "wx/clntdata.h" + "wx/dynarray.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\choice.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\choice.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\choice.h + "wx/cocoa/NSMenu.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\nsmenu.h + "wx/hashmap.h" + "wx/cocoa/ObjcAssociate.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\choice.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\notebook.h + "wx/list.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\notebook.h + "wx/list.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\notebook.h + "wx/cocoa/NSTabView.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\nstabview.h + "wx/hashmap.h" + "wx/cocoa/ObjcAssociate.h" + "wx/cocoa/ObjcRef.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\notebook.h + "wx/control.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\stattext.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\stattext.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\stattext.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\stattext.h + "wx/cocoa/NSTextField.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\stattext.h + "wx/control.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\checkbox.h + "wx/defs.h" + "wx/control.h" + "wx/univ/checkbox.h" + "wx/msw/checkbox.h" + "wx/motif/checkbox.h" + "wx/gtk/checkbox.h" + "wx/gtk1/checkbox.h" + "wx/osx/checkbox.h" + "wx/cocoa/checkbox.h" + "wx/os2/checkbox.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\checkbox.h + "wx/button.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\checkbox.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\checkbox.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\checkbox.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\checkbox.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\checkbox.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\checkbox.h + "wx/cocoa/NSButton.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\checkbox.h + "wx/control.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\filepicker.h + "wx/generic/filepickerg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\dialog.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\dialog.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\dialog.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\dialog.h + "wx/defs.h" + "wx/panel.h" + "wx/cocoa/NSPanel.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\nspanel.h + "wx/hashmap.h" + "wx/cocoa/ObjcAssociate.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\dialog.h + "wx/panel.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\filectrl.h + "wx/control.h" + "wx/filectrl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\filedlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\filedlg.h + "wx/gtk/filectrl.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\filedlg.h + "wx/generic/filedlgg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\filedlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\filedlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\dirdlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\dirdlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\statline.h + "wx/defs.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\statline.h + "wx/defs.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\statline.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\statline.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\clrpicker.h + "wx/defs.h" + "wx/pickerbase.h" + "wx/gtk/clrpicker.h" + "wx/generic/clrpickerg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\clrpicker.h + "wx/button.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\clrpickerg.h + "wx/button.h" + "wx/bmpbuttn.h" + "wx/colourdata.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\bmpbuttn.h + "wx/defs.h" + "wx/button.h" + "wx/univ/bmpbuttn.h" + "wx/msw/bmpbuttn.h" + "wx/motif/bmpbuttn.h" + "wx/gtk/bmpbuttn.h" + "wx/gtk1/bmpbuttn.h" + "wx/osx/bmpbuttn.h" + "wx/cocoa/bmpbuttn.h" + "wx/os2/bmpbuttn.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\bmpbuttn.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\bmpbuttn.h + "wx/button.h" + "wx/bitmap.h" + "wx/brush.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\bmpbuttn.h + "wx/motif/bmpmotif.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\bmpmotif.h + "wx/defs.h" + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\bmpbuttn.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\bmpbuttn.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\bmpbuttn.h + "wx/button.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\bmpbuttn.h + "wx/cocoa/NSButton.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\bmpbuttn.h + "wx/button.h" + "wx/dcclient.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\colourdata.h + "wx/colour.h" + +1356048783 source:c:\users\paul\documents\programming\applications\guppies1.0\guppies1_0main.cpp + "Guppies1_0Main.h" + + + + + + + + + "Simulation/GuppiesInclude.hpp" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\msgdlg.h + "wx/msgdlg.h" + "wx/generic/msgdlgg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\msgdlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\msgdlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\msgdlg.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\statbmp.h + "wx/defs.h" + "wx/control.h" + "wx/bitmap.h" + "wx/icon.h" + "wx/univ/statbmp.h" + "wx/msw/statbmp.h" + "wx/motif/statbmp.h" + "wx/gtk/statbmp.h" + "wx/gtk1/statbmp.h" + "wx/osx/statbmp.h" + "wx/cocoa/statbmp.h" + "wx/os2/statbmp.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\univ\statbmp.h + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\statbmp.h + "wx/control.h" + "wx/icon.h" + "wx/bitmap.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\motif\statbmp.h + "wx/motif/bmpmotif.h" + "wx/icon.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\statbmp.h + "wx/icon.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk1\statbmp.h + "wx/icon.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\statbmp.h + "wx/osx/carbon/statbmp.h" + "wx/generic/statbmpg.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\osx\carbon\statbmp.h + "wx/icon.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\statbmpg.h + "wx/statbmp.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\cocoa\statbmp.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\os2\statbmp.h + "wx/control.h" + "wx/icon.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\hyperlink.h + "wx/defs.h" + "wx/control.h" + "wx/gtk/hyperlink.h" + "wx/msw/hyperlink.h" + "wx/generic/hyperlink.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\gtk\hyperlink.h + "wx/generic/hyperlink.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\generic\hyperlink.h + +1341838982 c:\wxwidgets-2.9.4\include\wx\msw\hyperlink.h + "wx/generic/hyperlink.h" + +1355229748 c:\users\paul\documents\programming\applications\guppies1.0\params.hpp + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics.hpp + + + + + + + + + + + + + + + + + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window.hpp + + + + + + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system.hpp + + + + + + + + + + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\config.hpp + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\clock.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\export.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\time.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\err.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\inputstream.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\lock.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\noncopyable.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\mutex.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\sleep.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\string.hpp + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\thread.hpp + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\thread.inl + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\threadlocal.hpp + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\threadlocalptr.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\threadlocalptr.inl + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\utf.hpp + + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\utf.inl + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\vector2.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\vector2.inl + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\vector3.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\system\vector3.inl + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\context.hpp + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\export.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\glresource.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\contextsettings.hpp + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\event.hpp + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\joystick.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\keyboard.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\mouse.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\videomode.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\window.hpp + + + + + + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\windowhandle.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\window\windowstyle.hpp + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\blendmode.hpp + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\color.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\export.hpp + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\font.hpp + + + + + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\glyph.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\rect.hpp + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\rect.inl + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\texture.hpp + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\image.hpp + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\renderstates.hpp + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\transform.hpp + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\rendertexture.hpp + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\rendertarget.hpp + + + + + + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\view.hpp + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\primitivetype.hpp + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\vertex.hpp + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\renderwindow.hpp + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\shader.hpp + + + + + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\shape.hpp + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\drawable.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\transformable.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\vertexarray.hpp + + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\circleshape.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\rectangleshape.hpp + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\convexshape.hpp + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\sprite.hpp + + + + + + +1355493963 c:\users\paul\documents\programming\libraries\sfml-2.0-rc\include\sfml\graphics\text.hpp + + + + + + + + + + +1315071538 c:\users\paul\documents\programming\libraries\box2d\include\box2d.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1350117930 c:\users\paul\documents\programming\libraries\box2d\include\box2d\common\b2settings.h + + + +1301283100 c:\users\paul\documents\programming\libraries\box2d\include\box2d\common\b2draw.h + + +1315133282 c:\users\paul\documents\programming\libraries\box2d\include\box2d\common\b2math.h + + + + + + +1315842396 c:\users\paul\documents\programming\libraries\box2d\include\box2d\common\b2timer.h + + +1301019418 c:\users\paul\documents\programming\libraries\box2d\include\box2d\collision\shapes\b2circleshape.h + + +1314013792 c:\users\paul\documents\programming\libraries\box2d\include\box2d\collision\shapes\b2shape.h + + + + +1301019418 c:\users\paul\documents\programming\libraries\box2d\include\box2d\common\b2blockallocator.h + + +1307337762 c:\users\paul\documents\programming\libraries\box2d\include\box2d\collision\b2collision.h + + + +1314892386 c:\users\paul\documents\programming\libraries\box2d\include\box2d\collision\shapes\b2edgeshape.h + + +1314891742 c:\users\paul\documents\programming\libraries\box2d\include\box2d\collision\shapes\b2chainshape.h + + +1301019418 c:\users\paul\documents\programming\libraries\box2d\include\box2d\collision\shapes\b2polygonshape.h + + +1301293402 c:\users\paul\documents\programming\libraries\box2d\include\box2d\collision\b2broadphase.h + + + + + +1309020390 c:\users\paul\documents\programming\libraries\box2d\include\box2d\collision\b2dynamictree.h + + + +1301019418 c:\users\paul\documents\programming\libraries\box2d\include\box2d\common\b2growablestack.h + + + +1301019418 c:\users\paul\documents\programming\libraries\box2d\include\box2d\collision\b2distance.h + + +1301019418 c:\users\paul\documents\programming\libraries\box2d\include\box2d\collision\b2timeofimpact.h + + + +1315120342 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\b2body.h + + + + +1315104742 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\b2fixture.h + + + + +1314106000 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\b2worldcallbacks.h + + +1315841530 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\b2timestep.h + + +1315206396 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\b2world.h + + + + + + + +1301019418 c:\users\paul\documents\programming\libraries\box2d\include\box2d\common\b2stackallocator.h + + +1301019418 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\b2contactmanager.h + + +1305819218 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\contacts\b2contact.h + + + + + +1315195382 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\joints\b2distancejoint.h + + +1315207598 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\joints\b2joint.h + + +1315206678 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\joints\b2frictionjoint.h + + +1315206932 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\joints\b2gearjoint.h + + +1315207550 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\joints\b2wheeljoint.h + + +1315207610 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\joints\b2mousejoint.h + + +1315398326 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\joints\b2prismaticjoint.h + + +1315207320 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\joints\b2pulleyjoint.h + + +1315204772 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\joints\b2revolutejoint.h + + +1315226614 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\joints\b2ropejoint.h + + +1315203064 c:\users\paul\documents\programming\libraries\box2d\include\box2d\dynamics\joints\b2weldjoint.h + + +1353123142 c:\users\paul\documents\programming\libraries\neuralnetworks\neuralnetworks.hpp + "Population.hpp" + "SingleMLP.hpp" + "DualMLP.hpp" + "SimpleRN.hpp" + "FullyRN.hpp" + +1353121618 c:\users\paul\documents\programming\libraries\neuralnetworks\population.hpp + "NNUtils.hpp" + +1353124844 c:\users\paul\documents\programming\libraries\neuralnetworks\nnutils.hpp + + + + + + +1353118744 c:\users\paul\documents\programming\libraries\neuralnetworks\singlemlp.hpp + "NeuralNet.hpp" + +1353056560 c:\users\paul\documents\programming\libraries\neuralnetworks\neuralnet.hpp + "NodeLayer.hpp" + +1360285428 c:\users\paul\documents\programming\libraries\neuralnetworks\nodelayer.hpp + "Neuron.hpp" + "MemCell.hpp" + +1353029878 c:\users\paul\documents\programming\libraries\neuralnetworks\neuron.hpp + "Node.hpp" + +1353035574 c:\users\paul\documents\programming\libraries\neuralnetworks\node.hpp + "NNUtils.hpp" + +1353030558 c:\users\paul\documents\programming\libraries\neuralnetworks\memcell.hpp + "Neuron.hpp" + +1353119342 c:\users\paul\documents\programming\libraries\neuralnetworks\dualmlp.hpp + "NeuralNet.hpp" + +1353118744 c:\users\paul\documents\programming\libraries\neuralnetworks\simplern.hpp + "SingleMLP.hpp" + +1353118954 c:\users\paul\documents\programming\libraries\neuralnetworks\fullyrn.hpp + "DualMLP.hpp" + +1353639058 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\simbase_update.cpp + "SimBase.hpp" + +1355230367 c:\users\paul\documents\programming\applications\guppies1.0\simulation\simbase.hpp + + "Params.hpp" + "GraphicObjs.hpp" + "Camera.hpp" + "Tank.hpp" + "TextDisplay.hpp" + "Zapper.hpp" + "Pellet.hpp" + "Guppie.hpp" + "Corpse.hpp" + +1355243474 c:\users\paul\documents\programming\applications\guppies1.0\simulation\params.hpp + + + + + + +1354293943 c:\users\paul\documents\programming\applications\guppies1.0\simulation\graphicobjs.hpp + + +1353640410 c:\users\paul\documents\programming\applications\guppies1.0\simulation\camera.hpp + + + +1352712742 c:\users\paul\documents\programming\applications\guppies1.0\simulation\tank.hpp + + + "ContactListener.hpp" + +1356021184 c:\users\paul\documents\programming\applications\guppies1.0\simulation\contactlistener.hpp + + +1352800218 c:\users\paul\documents\programming\applications\guppies1.0\simulation\textdisplay.hpp + + "Params.hpp" + +1352799536 c:\users\paul\documents\programming\applications\guppies1.0\simulation\zapper.hpp + "Entity.hpp" + +1352799536 c:\users\paul\documents\programming\applications\guppies1.0\simulation\entity.hpp + + + +1352799536 c:\users\paul\documents\programming\applications\guppies1.0\simulation\pellet.hpp + "Entity.hpp" + +1356019956 c:\users\paul\documents\programming\applications\guppies1.0\simulation\guppie.hpp + + "Entity.hpp" + +1353956503 c:\users\paul\documents\programming\applications\guppies1.0\simulation\corpse.hpp + "Entity.hpp" + +1353575978 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\simfitness_startspecs.cpp + "SimFitness.hpp" + +1353125082 c:\users\paul\documents\programming\applications\guppies1.0\simulation\simfitness.hpp + + + + + + "SimBase.hpp" + +1353952906 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\entity.cpp + "Entity.hpp" + "SimBase.hpp" + +1353931125 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\simbase_draw.cpp + "SimBase.hpp" + +1354043769 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\simfitness_updatespecs.cpp + "SimFitness.hpp" + +1352800124 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\tank.cpp + "Tank.hpp" + "SimBase.hpp" + +1353950007 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\pellet.cpp + "Pellet.hpp" + "SimBase.hpp" + +1355712517 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\camera.cpp + "Camera.hpp" + "SimBase.hpp" + +1356021211 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\contactlistener.cpp + "ContactListener.hpp" + "SimBase.hpp" + +1354294236 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\simbase_preparegraphics.cpp + "SimBase.hpp" + +1355767645 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\textdisplay.cpp + "TextDisplay.hpp" + "SimBase.hpp" + + +1353949790 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\zapper.cpp + "Zapper.hpp" + "SimBase.hpp" + +1355712505 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\simbase_execute.cpp + "SimBase.hpp" + +1356019956 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\guppie.cpp + "Guppie.hpp" + "SimFitness.hpp" + +1355161016 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\corpse.cpp + "Corpse.hpp" + "SimBase.hpp" + +1355158906 source:c:\users\paul\documents\programming\applications\guppies1.0\simulation\simbase_createnew.cpp + "SimBase.hpp" + +1352150896 c:\users\paul\documents\programming\applications\guppies1.0\simulation\guppiesinclude.hpp + "SimFitness.hpp" + +1341838982 c:\wxwidgets-2.9.4\include\wx\textfile.h + "wx/defs.h" + "wx/textbuf.h" + "wx/file.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\textbuf.h + "wx/defs.h" + "wx/arrstr.h" + "wx/convauto.h" + "wx/string.h" + "wx/dynarray.h" + +1341838982 c:\wxwidgets-2.9.4\include\wx\convauto.h + "wx/strconv.h" + "wx/fontenc.h" + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics.hpp + + + + + + + + + + + + + + + + + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window.hpp + + + + + + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system.hpp + + + + + + + + + + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\config.hpp + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\clock.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\export.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\time.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\err.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\inputstream.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\lock.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\noncopyable.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\mutex.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\sleep.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\string.hpp + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\thread.hpp + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\thread.inl + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\threadlocal.hpp + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\threadlocalptr.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\threadlocalptr.inl + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\utf.hpp + + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\utf.inl + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\vector2.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\vector2.inl + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\vector3.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\system\vector3.inl + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\context.hpp + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\export.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\glresource.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\contextsettings.hpp + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\event.hpp + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\joystick.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\keyboard.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\mouse.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\videomode.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\window.hpp + + + + + + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\windowhandle.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\window\windowstyle.hpp + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\blendmode.hpp + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\color.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\export.hpp + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\font.hpp + + + + + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\glyph.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\rect.hpp + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\rect.inl + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\texture.hpp + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\image.hpp + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\renderstates.hpp + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\transform.hpp + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\rendertexture.hpp + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\rendertarget.hpp + + + + + + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\view.hpp + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\primitivetype.hpp + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\vertex.hpp + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\renderwindow.hpp + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\shader.hpp + + + + + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\shape.hpp + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\drawable.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\transformable.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\vertexarray.hpp + + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\circleshape.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\rectangleshape.hpp + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\convexshape.hpp + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\sprite.hpp + + + + + + +1361279954 c:\users\paul\documents\programming\libraries\sfml-2.0\include\sfml\graphics\text.hpp + + + + + + + + + + diff --git a/Guppies1.0.layout b/Guppies1.0.layout new file mode 100644 index 0000000..df64a4d --- /dev/null +++ b/Guppies1.0.layout @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Guppies1_0App.cpp b/Guppies1_0App.cpp new file mode 100644 index 0000000..27a2e5f --- /dev/null +++ b/Guppies1_0App.cpp @@ -0,0 +1,34 @@ +/*************************************************************** + * Name: Guppies1_0App.cpp + * Purpose: Code for Application Class + * Author: Paul T. Oliver (nino.trullen@gmail.com) + * Created: 2012-11-13 + * Copyright: Paul T. Oliver () + * License: + **************************************************************/ + +#include "Guppies1_0App.h" + +//(*AppHeaders +#include "Guppies1_0Main.h" +#include +//*) + +IMPLEMENT_APP(Guppies1_0App); + +bool Guppies1_0App::OnInit() +{ + //(*AppInitialize + bool wxsOK = true; + wxInitAllImageHandlers(); + if ( wxsOK ) + { + Guppies1_0Dialog Dlg(0); + SetTopWindow(&Dlg); + Dlg.ShowModal(); + wxsOK = false; + } + //*) + return wxsOK; + +} diff --git a/Guppies1_0App.h b/Guppies1_0App.h new file mode 100644 index 0000000..91cc38d --- /dev/null +++ b/Guppies1_0App.h @@ -0,0 +1,21 @@ +/*************************************************************** + * Name: Guppies1_0App.h + * Purpose: Defines Application Class + * Author: Paul T. Oliver (nino.trullen@gmail.com) + * Created: 2012-11-13 + * Copyright: Paul T. Oliver () + * License: + **************************************************************/ + +#ifndef GUPPIES1_0APP_H +#define GUPPIES1_0APP_H + +#include + +class Guppies1_0App : public wxApp +{ + public: + virtual bool OnInit(); +}; + +#endif // GUPPIES1_0APP_H diff --git a/Guppies1_0Main.cpp b/Guppies1_0Main.cpp new file mode 100644 index 0000000..089abf4 --- /dev/null +++ b/Guppies1_0Main.cpp @@ -0,0 +1,757 @@ +/*************************************************************** + * Name: Guppies1_0Main.cpp + * Purpose: Code for Application Frame + * Author: Paul T. Oliver (nino.trullen@gmail.com) + * Created: 2012-11-13 + * Copyright: Paul T. Oliver () + * License: + **************************************************************/ + +#include "Guppies1_0Main.h" +#include +#include + +//(*InternalHeaders(Guppies1_0Dialog) +#include +#include +#include +#include +#include +#include +//*) + +//helper functions +enum wxbuildinfoformat { + short_f, long_f }; + +wxString wxbuildinfo(wxbuildinfoformat format) +{ + wxString wxbuild(wxVERSION_STRING); + + if (format == long_f ) + { +#if defined(__WXMSW__) + wxbuild << _T("-Windows"); +#elif defined(__UNIX__) + wxbuild << _T("-Linux"); +#endif + +#if wxUSE_UNICODE + wxbuild << _T("-Unicode build"); +#else + wxbuild << _T("-ANSI build"); +#endif // wxUSE_UNICODE + } + + return wxbuild; +} + +//(*IdInit(Guppies1_0Dialog) +const long Guppies1_0Dialog::ID_STATICBITMAP1 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICLINE3 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT37 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT39 = wxNewId(); +const long Guppies1_0Dialog::ID_HYPERLINKCTRL1 = wxNewId(); +const long Guppies1_0Dialog::ID_BUTTON4 = wxNewId(); +const long Guppies1_0Dialog::ID_BUTTON3 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT38 = wxNewId(); +const long Guppies1_0Dialog::ID_PANEL4 = wxNewId(); +const long Guppies1_0Dialog::ID_FILEPICKERCTRL1 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICLINE1 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT1 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICLINE2 = wxNewId(); +const long Guppies1_0Dialog::ID_BUTTON1 = wxNewId(); +const long Guppies1_0Dialog::ID_PANEL2 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT31 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT32 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT33 = wxNewId(); +const long Guppies1_0Dialog::ID_CHOICE1 = wxNewId(); +const long Guppies1_0Dialog::ID_CHOICE2 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL18 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT35 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT34 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT36 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL22 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL23 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL24 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT28 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT30 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT29 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL19 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL20 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL21 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT2 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL1 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT3 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT4 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT5 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT6 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT7 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT8 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT9 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT10 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL2 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL3 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL4 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL5 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL6 = wxNewId(); +const long Guppies1_0Dialog::ID_CHECKBOX1 = wxNewId(); +const long Guppies1_0Dialog::ID_CHECKBOX2 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL8 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT22 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT23 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT24 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT25 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT26 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT27 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL1 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL2 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL3 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL4 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL5 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL6 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT11 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT12 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT13 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT14 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT15 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT16 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT17 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL7 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL9 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL10 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL11 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL12 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL13 = wxNewId(); +const long Guppies1_0Dialog::ID_CHECKBOX3 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT18 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT19 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT20 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT21 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL14 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL15 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL16 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL17 = wxNewId(); +const long Guppies1_0Dialog::ID_FILEPICKERCTRL2 = wxNewId(); +const long Guppies1_0Dialog::ID_FILEPICKERCTRL3 = wxNewId(); +const long Guppies1_0Dialog::ID_BUTTON5 = wxNewId(); +const long Guppies1_0Dialog::ID_BUTTON2 = wxNewId(); +const long Guppies1_0Dialog::ID_PANEL3 = wxNewId(); +const long Guppies1_0Dialog::ID_NOTEBOOK1 = wxNewId(); +const long Guppies1_0Dialog::ID_PANEL1 = wxNewId(); +//*) + +BEGIN_EVENT_TABLE(Guppies1_0Dialog,wxDialog) + //(*EventTable(Guppies1_0Dialog) + //*) +END_EVENT_TABLE() + +Guppies1_0Dialog::Guppies1_0Dialog(wxWindow* parent,wxWindowID id) +{ + //(*Initialize(Guppies1_0Dialog) + wxBoxSizer* BoxSizer4; + wxStaticBoxSizer* StaticBoxSizer2; + wxBoxSizer* BoxSizer6; + wxBoxSizer* BoxSizer19; + wxBoxSizer* BoxSizer15; + wxBoxSizer* BoxSizer20; + wxBoxSizer* BoxSizer5; + wxBoxSizer* BoxSizer10; + wxBoxSizer* BoxSizer7; + wxBoxSizer* BoxSizer8; + wxBoxSizer* BoxSizer21; + wxBoxSizer* BoxSizer13; + wxStaticBoxSizer* StaticBoxSizer4; + wxBoxSizer* BoxSizer23; + wxStaticBoxSizer* StaticBoxSizer9; + wxBoxSizer* BoxSizer2; + wxBoxSizer* BoxSizer11; + wxBoxSizer* BoxSizer16; + wxStaticBoxSizer* StaticBoxSizer7; + wxBoxSizer* BoxSizer12; + wxBoxSizer* BoxSizer18; + wxBoxSizer* BoxSizer28; + wxStaticBoxSizer* StaticBoxSizer10; + wxBoxSizer* BoxSizer14; + wxStaticBoxSizer* StaticBoxSizer8; + wxStaticBoxSizer* StaticBoxSizer3; + wxStaticBoxSizer* StaticBoxSizer6; + wxBoxSizer* BoxSizer27; + wxBoxSizer* BoxSizer17; + wxBoxSizer* BoxSizer24; + wxBoxSizer* BoxSizer26; + wxBoxSizer* BoxSizer9; + wxStaticBoxSizer* StaticBoxSizer1; + wxBoxSizer* BoxSizer22; + wxBoxSizer* BoxSizer3; + wxStaticBoxSizer* StaticBoxSizer5; + wxBoxSizer* BoxSizer25; + + Create(parent, wxID_ANY, _("Neural Guppies - 0.1 beta"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxMINIMIZE_BOX, _T("wxID_ANY")); + BoxSizer1 = new wxBoxSizer(wxHORIZONTAL); + Panel1 = new wxPanel(this, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL1")); + BoxSizer2 = new wxBoxSizer(wxVERTICAL); + Notebook1 = new wxNotebook(Panel1, ID_NOTEBOOK1, wxDefaultPosition, wxDefaultSize, 0, _T("ID_NOTEBOOK1")); + Panel4 = new wxPanel(Notebook1, ID_PANEL4, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL4")); + Panel4->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT)); + BoxSizer27 = new wxBoxSizer(wxVERTICAL); + StaticBitmap1 = new wxStaticBitmap(Panel4, ID_STATICBITMAP1, wxBitmap(wxImage(_T("gfx\\logo.png"))), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICBITMAP1")); + BoxSizer27->Add(StaticBitmap1, 0, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + StaticLine3 = new wxStaticLine(Panel4, ID_STATICLINE3, wxDefaultPosition, wxSize(10,-1), wxLI_HORIZONTAL, _T("ID_STATICLINE3")); + BoxSizer27->Add(StaticLine3, 0, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText37 = new wxStaticText(Panel4, ID_STATICTEXT37, _("\nVersion -0.1 beta 20121220\n\nBy: Paul T. Oliver"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE, _T("ID_STATICTEXT37")); + wxFont StaticText37Font(11,wxSWISS,wxFONTSTYLE_NORMAL,wxNORMAL,false,_T("DejaVu Sans Mono"),wxFONTENCODING_DEFAULT); + StaticText37->SetFont(StaticText37Font); + BoxSizer27->Add(StaticText37, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + StaticText39 = new wxStaticText(Panel4, ID_STATICTEXT39, _("paul.t.oliver.design@gmail.com"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT39")); + BoxSizer27->Add(StaticText39, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + HyperlinkCtrl1 = new wxHyperlinkCtrl(Panel4, ID_HYPERLINKCTRL1, wxEmptyString, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_CONTEXTMENU|wxHL_ALIGN_CENTRE|wxNO_BORDER, _T("ID_HYPERLINKCTRL1")); + BoxSizer27->Add(HyperlinkCtrl1, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 4); + BoxSizer28 = new wxBoxSizer(wxHORIZONTAL); + Button4 = new wxButton(Panel4, ID_BUTTON4, _("Load simulation"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON4")); + wxFont Button4Font(11,wxSWISS,wxFONTSTYLE_NORMAL,wxNORMAL,false,_T("DejaVu Sans Mono"),wxFONTENCODING_DEFAULT); + Button4->SetFont(Button4Font); + BoxSizer28->Add(Button4, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Button3 = new wxButton(Panel4, ID_BUTTON3, _("New simulation"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON3")); + wxFont Button3Font(11,wxSWISS,wxFONTSTYLE_NORMAL,wxNORMAL,false,_T("DejaVu Sans Mono"),wxFONTENCODING_DEFAULT); + Button3->SetFont(Button3Font); + BoxSizer28->Add(Button3, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer27->Add(BoxSizer28, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText38 = new wxStaticText(Panel4, ID_STATICTEXT38, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE, _T("ID_STATICTEXT38")); + BoxSizer27->Add(StaticText38, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Panel4->SetSizer(BoxSizer27); + BoxSizer27->Fit(Panel4); + BoxSizer27->SetSizeHints(Panel4); + Panel2 = new wxPanel(Notebook1, ID_PANEL2, wxPoint(29,47), wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL2")); + Panel2->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT)); + BoxSizer3 = new wxBoxSizer(wxVERTICAL); + BoxSizer4 = new wxBoxSizer(wxHORIZONTAL); + FilePickerCtrl1 = new wxFilePickerCtrl(Panel2, ID_FILEPICKERCTRL1, wxEmptyString, _("Load simulation"), _T("*.sim"), wxDefaultPosition, wxDefaultSize, wxFLP_FILE_MUST_EXIST|wxFLP_OPEN|wxFLP_USE_TEXTCTRL, wxDefaultValidator, _T("ID_FILEPICKERCTRL1")); + FilePickerCtrl1->Disable(); + BoxSizer4->Add(FilePickerCtrl1, 3, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer3->Add(BoxSizer4, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticLine1 = new wxStaticLine(Panel2, ID_STATICLINE1, wxDefaultPosition, wxSize(10,-1), wxLI_HORIZONTAL, _T("ID_STATICLINE1")); + BoxSizer3->Add(StaticLine1, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText1 = new wxStaticText(Panel2, ID_STATICTEXT1, _("No simulation loaded."), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1")); + BoxSizer3->Add(StaticText1, 3, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 10); + StaticLine2 = new wxStaticLine(Panel2, ID_STATICLINE2, wxDefaultPosition, wxSize(10,-1), wxLI_HORIZONTAL, _T("ID_STATICLINE2")); + BoxSizer3->Add(StaticLine2, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer5 = new wxBoxSizer(wxHORIZONTAL); + Button1 = new wxButton(Panel2, ID_BUTTON1, _("Resume simulation"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1")); + Button1->Disable(); + BoxSizer5->Add(Button1, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer3->Add(BoxSizer5, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Panel2->SetSizer(BoxSizer3); + BoxSizer3->Fit(Panel2); + BoxSizer3->SetSizeHints(Panel2); + Panel3 = new wxPanel(Notebook1, ID_PANEL3, wxPoint(96,8), wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL3")); + Panel3->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT)); + BoxSizer6 = new wxBoxSizer(wxHORIZONTAL); + BoxSizer20 = new wxBoxSizer(wxVERTICAL); + StaticBoxSizer8 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Neural network parameters")); + BoxSizer21 = new wxBoxSizer(wxVERTICAL); + StaticText31 = new wxStaticText(Panel3, ID_STATICTEXT31, _("Network structure"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT31")); + BoxSizer21->Add(StaticText31, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText32 = new wxStaticText(Panel3, ID_STATICTEXT32, _("Node structure"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT32")); + BoxSizer21->Add(StaticText32, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText33 = new wxStaticText(Panel3, ID_STATICTEXT33, _("Nodes per hidden layer"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT33")); + BoxSizer21->Add(StaticText33, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer8->Add(BoxSizer21, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer22 = new wxBoxSizer(wxVERTICAL); + Choice1 = new wxChoice(Panel3, ID_CHOICE1, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE1")); + Choice1->SetSelection( Choice1->Append(_("Single MLP")) ); + Choice1->Append(_("Dual MLP")); + Choice1->Append(_("Simple RN")); + Choice1->Append(_("Fully RN")); + BoxSizer22->Add(Choice1, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + Choice2 = new wxChoice(Panel3, ID_CHOICE2, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE2")); + Choice2->SetSelection( Choice2->Append(_("Neuron")) ); + Choice2->Append(_("Memory cell")); + BoxSizer22->Add(Choice2, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + TextCtrl18 = new wxTextCtrl(Panel3, ID_TEXTCTRL18, _("80"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL18")); + BoxSizer22->Add(TextCtrl18, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + StaticBoxSizer8->Add(BoxSizer22, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer20->Add(StaticBoxSizer8, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer10 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Population parameters")); + BoxSizer25 = new wxBoxSizer(wxVERTICAL); + StaticText35 = new wxStaticText(Panel3, ID_STATICTEXT35, _("Sub-population size"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT35")); + BoxSizer25->Add(StaticText35, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText34 = new wxStaticText(Panel3, ID_STATICTEXT34, _("Sub-population quantity"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT34")); + BoxSizer25->Add(StaticText34, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText36 = new wxStaticText(Panel3, ID_STATICTEXT36, _("Elites per generation"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT36")); + BoxSizer25->Add(StaticText36, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer10->Add(BoxSizer25, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer26 = new wxBoxSizer(wxVERTICAL); + TextCtrl22 = new wxTextCtrl(Panel3, ID_TEXTCTRL22, _("20"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL22")); + BoxSizer26->Add(TextCtrl22, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl23 = new wxTextCtrl(Panel3, ID_TEXTCTRL23, _("20"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL23")); + BoxSizer26->Add(TextCtrl23, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl24 = new wxTextCtrl(Panel3, ID_TEXTCTRL24, _("40"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL24")); + BoxSizer26->Add(TextCtrl24, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer10->Add(BoxSizer26, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer20->Add(StaticBoxSizer10, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer9 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Fitness bonuses")); + BoxSizer23 = new wxBoxSizer(wxVERTICAL); + StaticText28 = new wxStaticText(Panel3, ID_STATICTEXT28, _("Per pellet"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT28")); + BoxSizer23->Add(StaticText28, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText30 = new wxStaticText(Panel3, ID_STATICTEXT30, _("Per guppy"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT30")); + BoxSizer23->Add(StaticText30, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText29 = new wxStaticText(Panel3, ID_STATICTEXT29, _("Per corpse (max)"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT29")); + BoxSizer23->Add(StaticText29, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer9->Add(BoxSizer23, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer24 = new wxBoxSizer(wxVERTICAL); + TextCtrl19 = new wxTextCtrl(Panel3, ID_TEXTCTRL19, _("9000"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL19")); + BoxSizer24->Add(TextCtrl19, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl20 = new wxTextCtrl(Panel3, ID_TEXTCTRL20, _("36000"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL20")); + BoxSizer24->Add(TextCtrl20, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl21 = new wxTextCtrl(Panel3, ID_TEXTCTRL21, _("36000"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL21")); + BoxSizer24->Add(TextCtrl21, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer9->Add(BoxSizer24, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer20->Add(StaticBoxSizer9, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer6->Add(BoxSizer20, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer7 = new wxBoxSizer(wxVERTICAL); + StaticBoxSizer1 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Dish parameters")); + BoxSizer15 = new wxBoxSizer(wxVERTICAL); + StaticText2 = new wxStaticText(Panel3, ID_STATICTEXT2, _("Dish radius"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT2")); + StaticText2->SetHelpText(_("Size of the circular dish that guppies live in")); + BoxSizer15->Add(StaticText2, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer1->Add(BoxSizer15, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer16 = new wxBoxSizer(wxVERTICAL); + TextCtrl1 = new wxTextCtrl(Panel3, ID_TEXTCTRL1, _("40"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL1")); + BoxSizer16->Add(TextCtrl1, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer1->Add(BoxSizer16, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer7->Add(StaticBoxSizer1, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer2 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Entity parameters")); + BoxSizer8 = new wxBoxSizer(wxVERTICAL); + StaticText3 = new wxStaticText(Panel3, ID_STATICTEXT3, _("Zapper random force"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT3")); + BoxSizer8->Add(StaticText3, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText4 = new wxStaticText(Panel3, ID_STATICTEXT4, _("Zapper random torque"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT4")); + BoxSizer8->Add(StaticText4, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText5 = new wxStaticText(Panel3, ID_STATICTEXT5, _("Zapper quantity"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT5")); + BoxSizer8->Add(StaticText5, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText6 = new wxStaticText(Panel3, ID_STATICTEXT6, _("Pellet quantity"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT6")); + BoxSizer8->Add(StaticText6, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText7 = new wxStaticText(Panel3, ID_STATICTEXT7, _("Pellet creation delay"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT7")); + BoxSizer8->Add(StaticText7, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText8 = new wxStaticText(Panel3, ID_STATICTEXT8, _("Start scarce"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT8")); + BoxSizer8->Add(StaticText8, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText9 = new wxStaticText(Panel3, ID_STATICTEXT9, _("Corpse decay"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT9")); + BoxSizer8->Add(StaticText9, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText10 = new wxStaticText(Panel3, ID_STATICTEXT10, _("Corpse decay rate"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT10")); + BoxSizer8->Add(StaticText10, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer2->Add(BoxSizer8, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer9 = new wxBoxSizer(wxVERTICAL); + TextCtrl2 = new wxTextCtrl(Panel3, ID_TEXTCTRL2, _("50"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL2")); + BoxSizer9->Add(TextCtrl2, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl3 = new wxTextCtrl(Panel3, ID_TEXTCTRL3, _("150"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL3")); + BoxSizer9->Add(TextCtrl3, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl4 = new wxTextCtrl(Panel3, ID_TEXTCTRL4, _("20"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL4")); + BoxSizer9->Add(TextCtrl4, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl5 = new wxTextCtrl(Panel3, ID_TEXTCTRL5, _("400"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL5")); + BoxSizer9->Add(TextCtrl5, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl6 = new wxTextCtrl(Panel3, ID_TEXTCTRL6, _("150"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL6")); + BoxSizer9->Add(TextCtrl6, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + CheckBox1 = new wxCheckBox(Panel3, ID_CHECKBOX1, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX1")); + CheckBox1->SetValue(false); + BoxSizer9->Add(CheckBox1, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + CheckBox2 = new wxCheckBox(Panel3, ID_CHECKBOX2, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX2")); + CheckBox2->SetValue(true); + BoxSizer9->Add(CheckBox2, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl8 = new wxTextCtrl(Panel3, ID_TEXTCTRL8, _("3600"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL8")); + BoxSizer9->Add(TextCtrl8, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer2->Add(BoxSizer9, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer7->Add(StaticBoxSizer2, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer5 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Colors")); + BoxSizer17 = new wxBoxSizer(wxVERTICAL); + StaticText22 = new wxStaticText(Panel3, ID_STATICTEXT22, _("Background"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT22")); + BoxSizer17->Add(StaticText22, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText23 = new wxStaticText(Panel3, ID_STATICTEXT23, _("Dish fill (fog)"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT23")); + BoxSizer17->Add(StaticText23, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText24 = new wxStaticText(Panel3, ID_STATICTEXT24, _("Zappers"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT24")); + BoxSizer17->Add(StaticText24, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText25 = new wxStaticText(Panel3, ID_STATICTEXT25, _("Pellets"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT25")); + BoxSizer17->Add(StaticText25, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText26 = new wxStaticText(Panel3, ID_STATICTEXT26, _("Corpses"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT26")); + BoxSizer17->Add(StaticText26, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText27 = new wxStaticText(Panel3, ID_STATICTEXT27, _("Guppies"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT27")); + BoxSizer17->Add(StaticText27, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer5->Add(BoxSizer17, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer18 = new wxBoxSizer(wxVERTICAL); + ColourPickerCtrl1 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL1, wxColour(15,15,15), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL1")); + BoxSizer18->Add(ColourPickerCtrl1, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + ColourPickerCtrl2 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL2, wxColour(0,0,0), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL2")); + BoxSizer18->Add(ColourPickerCtrl2, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + ColourPickerCtrl3 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL3, wxColour(0,0,255), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL3")); + BoxSizer18->Add(ColourPickerCtrl3, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + ColourPickerCtrl4 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL4, wxColour(0,255,0), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL4")); + BoxSizer18->Add(ColourPickerCtrl4, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + ColourPickerCtrl5 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL5, wxColour(255,0,0), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL5")); + BoxSizer18->Add(ColourPickerCtrl5, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + ColourPickerCtrl6 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL6, wxColour(255,0,0), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL6")); + BoxSizer18->Add(ColourPickerCtrl6, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer5->Add(BoxSizer18, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer7->Add(StaticBoxSizer5, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer6->Add(BoxSizer7, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10 = new wxBoxSizer(wxVERTICAL); + StaticBoxSizer3 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Guppy parameters")); + BoxSizer11 = new wxBoxSizer(wxVERTICAL); + StaticText11 = new wxStaticText(Panel3, ID_STATICTEXT11, _("Activation delay"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT11")); + BoxSizer11->Add(StaticText11, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText12 = new wxStaticText(Panel3, ID_STATICTEXT12, _("Thrust force"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT12")); + BoxSizer11->Add(StaticText12, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText13 = new wxStaticText(Panel3, ID_STATICTEXT13, _("Thrust radius"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT13")); + BoxSizer11->Add(StaticText13, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText14 = new wxStaticText(Panel3, ID_STATICTEXT14, _("Initial energy"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT14")); + BoxSizer11->Add(StaticText14, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText15 = new wxStaticText(Panel3, ID_STATICTEXT15, _("Max energy"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT15")); + BoxSizer11->Add(StaticText15, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText16 = new wxStaticText(Panel3, ID_STATICTEXT16, _("Aging rate"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT16")); + BoxSizer11->Add(StaticText16, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText17 = new wxStaticText(Panel3, ID_STATICTEXT17, _("Leave corpse"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT17")); + BoxSizer11->Add(StaticText17, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer3->Add(BoxSizer11, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer12 = new wxBoxSizer(wxVERTICAL); + TextCtrl7 = new wxTextCtrl(Panel3, ID_TEXTCTRL7, _("120"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL7")); + BoxSizer12->Add(TextCtrl7, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl9 = new wxTextCtrl(Panel3, ID_TEXTCTRL9, _("5"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL9")); + BoxSizer12->Add(TextCtrl9, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl10 = new wxTextCtrl(Panel3, ID_TEXTCTRL10, _("0.05"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL10")); + BoxSizer12->Add(TextCtrl10, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl11 = new wxTextCtrl(Panel3, ID_TEXTCTRL11, _("60"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL11")); + BoxSizer12->Add(TextCtrl11, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl12 = new wxTextCtrl(Panel3, ID_TEXTCTRL12, _("180"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL12")); + BoxSizer12->Add(TextCtrl12, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl13 = new wxTextCtrl(Panel3, ID_TEXTCTRL13, _("600"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL13")); + BoxSizer12->Add(TextCtrl13, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + CheckBox3 = new wxCheckBox(Panel3, ID_CHECKBOX3, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX3")); + CheckBox3->SetValue(true); + BoxSizer12->Add(CheckBox3, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer3->Add(BoxSizer12, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10->Add(StaticBoxSizer3, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer4 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Energy transfers")); + BoxSizer13 = new wxBoxSizer(wxVERTICAL); + StaticText18 = new wxStaticText(Panel3, ID_STATICTEXT18, _("From zappers"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT18")); + BoxSizer13->Add(StaticText18, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText19 = new wxStaticText(Panel3, ID_STATICTEXT19, _("From pellets"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT19")); + BoxSizer13->Add(StaticText19, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText20 = new wxStaticText(Panel3, ID_STATICTEXT20, _("From other guppies"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT20")); + BoxSizer13->Add(StaticText20, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText21 = new wxStaticText(Panel3, ID_STATICTEXT21, _("From corpses (max)"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT21")); + BoxSizer13->Add(StaticText21, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer4->Add(BoxSizer13, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer14 = new wxBoxSizer(wxVERTICAL); + TextCtrl14 = new wxTextCtrl(Panel3, ID_TEXTCTRL14, _("-20"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL14")); + BoxSizer14->Add(TextCtrl14, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl15 = new wxTextCtrl(Panel3, ID_TEXTCTRL15, _("15"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL15")); + BoxSizer14->Add(TextCtrl15, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl16 = new wxTextCtrl(Panel3, ID_TEXTCTRL16, _("60"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL16")); + BoxSizer14->Add(TextCtrl16, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl17 = new wxTextCtrl(Panel3, ID_TEXTCTRL17, _("60"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL17")); + BoxSizer14->Add(TextCtrl17, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer4->Add(BoxSizer14, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10->Add(StaticBoxSizer4, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer6 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Load parameters")); + FilePickerCtrl2 = new wxFilePickerCtrl(Panel3, ID_FILEPICKERCTRL2, _T("prms/"), _("Load parameters"), _T("*.prms"), wxDefaultPosition, wxDefaultSize, wxFLP_FILE_MUST_EXIST|wxFLP_OPEN|wxFLP_USE_TEXTCTRL, wxDefaultValidator, _T("ID_FILEPICKERCTRL2")); + StaticBoxSizer6->Add(FilePickerCtrl2, 1, wxLEFT|wxRIGHT|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10->Add(StaticBoxSizer6, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer7 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Save parameters")); + FilePickerCtrl3 = new wxFilePickerCtrl(Panel3, ID_FILEPICKERCTRL3, _T("prms/"), _("Save parameters"), _T("*.prms"), wxDefaultPosition, wxDefaultSize, wxFLP_OVERWRITE_PROMPT|wxFLP_SAVE, wxDefaultValidator, _T("ID_FILEPICKERCTRL3")); + StaticBoxSizer7->Add(FilePickerCtrl3, 1, wxLEFT|wxRIGHT|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Button5 = new wxButton(Panel3, ID_BUTTON5, _("Save as default"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON5")); + StaticBoxSizer7->Add(Button5, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10->Add(StaticBoxSizer7, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer19 = new wxBoxSizer(wxHORIZONTAL); + Button2 = new wxButton(Panel3, ID_BUTTON2, _("Begin new simulation"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON2")); + BoxSizer19->Add(Button2, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10->Add(BoxSizer19, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 10); + BoxSizer6->Add(BoxSizer10, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Panel3->SetSizer(BoxSizer6); + BoxSizer6->Fit(Panel3); + BoxSizer6->SetSizeHints(Panel3); + Notebook1->AddPage(Panel4, _("Welcome"), false); + Notebook1->AddPage(Panel2, _("Load simulation"), false); + Notebook1->AddPage(Panel3, _("New simulation"), false); + BoxSizer2->Add(Notebook1, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Panel1->SetSizer(BoxSizer2); + BoxSizer2->Fit(Panel1); + BoxSizer2->SetSizeHints(Panel1); + BoxSizer1->Add(Panel1, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + SetSizer(BoxSizer1); + BoxSizer1->Fit(this); + BoxSizer1->SetSizeHints(this); + Center(); + + Connect(ID_BUTTON4,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&Guppies1_0Dialog::OnButton4Click); + Connect(ID_BUTTON3,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&Guppies1_0Dialog::OnButton3Click); + Connect(ID_CHECKBOX2,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&Guppies1_0Dialog::OnCheckBox2Click); + Connect(ID_FILEPICKERCTRL2,wxEVT_COMMAND_FILEPICKER_CHANGED,(wxObjectEventFunction)&Guppies1_0Dialog::OnFilePickerCtrl2FileChanged); + Connect(ID_FILEPICKERCTRL3,wxEVT_COMMAND_FILEPICKER_CHANGED,(wxObjectEventFunction)&Guppies1_0Dialog::OnFilePickerCtrl3FileChanged); + Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&Guppies1_0Dialog::OnBeginNewSimulation); + Connect(ID_NOTEBOOK1,wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,(wxObjectEventFunction)&Guppies1_0Dialog::OnNotebook1PageChanged); + Connect(wxID_ANY,wxEVT_INIT_DIALOG,(wxObjectEventFunction)&Guppies1_0Dialog::OnInit); + //*) + + SetIcon(wxICON(aaaa)); +} + +Guppies1_0Dialog::~Guppies1_0Dialog() +{ + //(*Destroy(Guppies1_0Dialog) + //*) +} + +void Guppies1_0Dialog::OnQuit(wxCommandEvent& event) +{ + Close(); +} + +void Guppies1_0Dialog::OnAbout(wxCommandEvent& event) +{ + wxString msg = wxbuildinfo(long_f); + wxMessageBox(msg, _("Welcome to...")); +} + +void Guppies1_0Dialog::OnNotebook1PageChanged(wxNotebookEvent& event) +{ +} + +void Guppies1_0Dialog::OnInit(wxInitDialogEvent& event) +{ +} + +void Guppies1_0Dialog::OnButton4Click(wxCommandEvent& event) +{ + Notebook1->SetSelection(1); +} + +void Guppies1_0Dialog::OnButton3Click(wxCommandEvent& event) +{ + Notebook1->SetSelection(2); +} + +void Guppies1_0Dialog::OnCheckBox2Click(wxCommandEvent& event) +{ + if (CheckBox2->IsChecked()) + { + TextCtrl8->Enable(); + } + else + { + TextCtrl8->Disable(); + } +} + + +// APLICATION STARTUP POINT //////////////////////////////////////////////////// +#include "Simulation/GuppiesInclude.hpp" + +void Guppies1_0Dialog::OnBeginNewSimulation(wxCommandEvent& event) +{ + Params params; + + // Neural network parameters + switch(Choice1->GetCurrentSelection()) + { + case 0: + params.netClass = SINGLE_MLP; + break; + case 1: + params.netClass = DUAL_MLP; + break; + case 2: + params.netClass = SIMPLE_RN; + break; + case 3: + params.netClass = FULLY_RN; + break; + } + + switch (Choice2->GetCurrentSelection()) + { + case 0: + params.nodeClass = NEURON; + break; + case 1: + params.nodeClass = MEMORY_CELL; + break; + } + + unsigned npHiddenLayer = strtoul(TextCtrl18->GetLineText(0).mb_str(), nullptr, 0); + params.npHiddenLayer = npHiddenLayer; + + // Population parameters + unsigned popSize = strtoul(TextCtrl22->GetLineText(0).mb_str(), nullptr, 0); + params.popSize = popSize; + + unsigned popQtty = strtoul(TextCtrl23->GetLineText(0).mb_str(), nullptr, 0); + params.popQtty = popQtty; + + unsigned elites = strtoul(TextCtrl24->GetLineText(0).mb_str(), nullptr, 0); + params.elites = elites; + + // Fitness bonuses + int forPellet = strtol(TextCtrl19->GetLineText(0).mb_str(), nullptr, 0); + params.forPellet = forPellet; + + int forGuppie = strtol(TextCtrl20->GetLineText(0).mb_str(), nullptr, 0); + params.forGuppie = forGuppie; + + int forCorpse = strtol(TextCtrl21->GetLineText(0).mb_str(), nullptr, 0); + params.forCorpse = forCorpse; + + // World (dish) parameters + float worldRad = strtof(TextCtrl1->GetLineText(0).mb_str(), nullptr); + params.worldRad = worldRad; + + // Entity parameters + float zapperForce = strtof(TextCtrl2->GetLineText(0).mb_str(), nullptr); + params.zapperForce = zapperForce; + + float zapperTorque = strtof(TextCtrl3->GetLineText(0).mb_str(), nullptr); + params.zapperTorque = zapperTorque; + + unsigned zapperQtty = strtoul(TextCtrl4->GetLineText(0).mb_str(), nullptr, 0); + params.zapperQtty = zapperQtty; + + unsigned pelletQtty = strtoul(TextCtrl5->GetLineText(0).mb_str(), nullptr, 0); + params.pelletQtty = pelletQtty; + + unsigned pelletCreationDelay = strtoul(TextCtrl6->GetLineText(0).mb_str(), nullptr, 0); + params.pelletCreationDelay = pelletCreationDelay; + + params.startScarce = CheckBox1->IsChecked(); + params.corpseDecay = CheckBox2->IsChecked(); + + unsigned corpseDecayTime = strtoul(TextCtrl8->GetLineText(0).mb_str(), nullptr, 0); + params.corpseDecayTime = corpseDecayTime; + + // Colors + params.clearColor.r = ColourPickerCtrl1->GetColour().Red(); + params.clearColor.g = ColourPickerCtrl1->GetColour().Green(); + params.clearColor.b = ColourPickerCtrl1->GetColour().Blue(); + + params.worldColor.r = ColourPickerCtrl2->GetColour().Red(); + params.worldColor.g = ColourPickerCtrl2->GetColour().Green(); + params.worldColor.b = ColourPickerCtrl2->GetColour().Blue(); + + params.zapperColor.r = ColourPickerCtrl3->GetColour().Red(); + params.zapperColor.g = ColourPickerCtrl3->GetColour().Green(); + params.zapperColor.b = ColourPickerCtrl3->GetColour().Blue(); + + params.pelletColor.r = ColourPickerCtrl4->GetColour().Red(); + params.pelletColor.g = ColourPickerCtrl4->GetColour().Green(); + params.pelletColor.b = ColourPickerCtrl4->GetColour().Blue(); + + params.corpseColor.r = ColourPickerCtrl5->GetColour().Red(); + params.corpseColor.g = ColourPickerCtrl5->GetColour().Green(); + params.corpseColor.b = ColourPickerCtrl5->GetColour().Blue(); + + params.guppieColorI.r = ColourPickerCtrl6->GetColour().Red(); + params.guppieColorI.g = ColourPickerCtrl6->GetColour().Green(); + params.guppieColorI.b = ColourPickerCtrl6->GetColour().Blue(); + + // Guppie parameters + unsigned activationDelay = strtoul(TextCtrl7->GetLineText(0).mb_str(), nullptr, 0); + params.activationDelay = activationDelay; + + float thrustForce = strtof(TextCtrl9->GetLineText(0).mb_str(), nullptr); + params.thrustForce = thrustForce; + + float thrustRadius = strtof(TextCtrl10->GetLineText(0).mb_str(), nullptr); + params.thrustRadius = thrustRadius; + + float initEnergy = strtof(TextCtrl11->GetLineText(0).mb_str(), nullptr); + params.initEnergy = initEnergy; + + float maxEnergy = strtof(TextCtrl12->GetLineText(0).mb_str(), nullptr); + params.maxEnergy = maxEnergy; + + float agingRate = strtof(TextCtrl13->GetLineText(0).mb_str(), nullptr); + params.agingRate = agingRate; + + params.leaveCorpse = CheckBox3->IsChecked(); + + // Energy transfers + float etFromZapper = strtof(TextCtrl14->GetLineText(0).mb_str(), nullptr); + params.etFromZapper = etFromZapper; + + float etFromPellet = strtof(TextCtrl15->GetLineText(0).mb_str(), nullptr); + params.etFromPellet = etFromPellet; + + float etFromGuppie = strtof(TextCtrl16->GetLineText(0).mb_str(), nullptr); + params.etFromGuppie = etFromGuppie; + + float etFromCorpse = strtof(TextCtrl17->GetLineText(0).mb_str(), nullptr); + params.etFromCorpse = etFromCorpse; + + // BEGIN SIMULATION ======================================================// + Close(); + + SimFitness simulation; + simulation.createNew(params); + simulation.execute(); +} + +void Guppies1_0Dialog::OnFilePickerCtrl2FileChanged(wxFileDirPickerEvent& event) +{ +} + +void Guppies1_0Dialog::OnFilePickerCtrl3FileChanged(wxFileDirPickerEvent& event) +{ + wxTextFile file(FilePickerCtrl3->GetPath()); + file.Create(); + + file.AddLine("[BEGIN PARAMS]"); + + file.AddLine(wxString::Format(("%i"), (int)Choice1->GetCurrentSelection())); + file.AddLine(wxString::Format(("%i"), (int)Choice2->GetCurrentSelection())); + + file.AddLine(TextCtrl18->GetLineText(0)); + + file.AddLine(TextCtrl22->GetLineText(0)); + file.AddLine(TextCtrl23->GetLineText(0)); + file.AddLine(TextCtrl24->GetLineText(0)); + + file.AddLine(TextCtrl19->GetLineText(0)); + file.AddLine(TextCtrl20->GetLineText(0)); + file.AddLine(TextCtrl21->GetLineText(0)); + + file.AddLine(TextCtrl1->GetLineText(0)); + + file.AddLine(TextCtrl2->GetLineText(0)); + file.AddLine(TextCtrl3->GetLineText(0)); + file.AddLine(TextCtrl4->GetLineText(0)); + file.AddLine(TextCtrl5->GetLineText(0)); + file.AddLine(TextCtrl6->GetLineText(0)); + + file.AddLine(wxString::Format(("%i"), (int)CheckBox1->IsChecked())); + file.AddLine(wxString::Format(("%i"), (int)CheckBox2->IsChecked())); + + file.AddLine(TextCtrl8->GetLineText(0)); + + file.AddLine(ColourPickerCtrl1->GetColour().GetAsString()); + file.AddLine(ColourPickerCtrl2->GetColour().GetAsString()); + file.AddLine(ColourPickerCtrl3->GetColour().GetAsString()); + file.AddLine(ColourPickerCtrl4->GetColour().GetAsString()); + file.AddLine(ColourPickerCtrl5->GetColour().GetAsString()); + file.AddLine(ColourPickerCtrl6->GetColour().GetAsString()); + + file.AddLine(TextCtrl7->GetLineText(0)); + file.AddLine(TextCtrl9->GetLineText(0)); + file.AddLine(TextCtrl10->GetLineText(0)); + file.AddLine(TextCtrl11->GetLineText(0)); + file.AddLine(TextCtrl12->GetLineText(0)); + file.AddLine(TextCtrl13->GetLineText(0)); + + file.AddLine(wxString::Format(("%i"), (int)CheckBox3->IsChecked())); + + file.AddLine(TextCtrl14->GetLineText(0)); + file.AddLine(TextCtrl15->GetLineText(0)); + file.AddLine(TextCtrl16->GetLineText(0)); + file.AddLine(TextCtrl17->GetLineText(0)); + + file.AddLine("[END PARAMS]"); + + file.Write(); + file.Close(); +} diff --git a/Guppies1_0Main.h b/Guppies1_0Main.h new file mode 100644 index 0000000..9cef6cd --- /dev/null +++ b/Guppies1_0Main.h @@ -0,0 +1,246 @@ +/*************************************************************** + * Name: Guppies1_0Main.h + * Purpose: Defines Application Frame + * Author: Paul T. Oliver (nino.trullen@gmail.com) + * Created: 2012-11-13 + * Copyright: Paul T. Oliver () + * License: + **************************************************************/ + +#ifndef GUPPIES1_0MAIN_H +#define GUPPIES1_0MAIN_H + +//(*Headers(Guppies1_0Dialog) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//*) + +class Guppies1_0Dialog: public wxDialog +{ + public: + + Guppies1_0Dialog(wxWindow* parent,wxWindowID id = -1); + virtual ~Guppies1_0Dialog(); + + private: + + //(*Handlers(Guppies1_0Dialog) + void OnQuit(wxCommandEvent& event); + void OnAbout(wxCommandEvent& event); + void OnNotebook1PageChanged(wxNotebookEvent& event); + void OnInit(wxInitDialogEvent& event); + void OnButton4Click(wxCommandEvent& event); + void OnButton3Click(wxCommandEvent& event); + void OnBeginNewSimulation(wxCommandEvent& event); + void OnCheckBox2Click(wxCommandEvent& event); + void OnFilePickerCtrl2FileChanged(wxFileDirPickerEvent& event); + void OnFilePickerCtrl3FileChanged(wxFileDirPickerEvent& event); + //*) + + //(*Identifiers(Guppies1_0Dialog) + static const long ID_STATICBITMAP1; + static const long ID_STATICLINE3; + static const long ID_STATICTEXT37; + static const long ID_STATICTEXT39; + static const long ID_HYPERLINKCTRL1; + static const long ID_BUTTON4; + static const long ID_BUTTON3; + static const long ID_STATICTEXT38; + static const long ID_PANEL4; + static const long ID_FILEPICKERCTRL1; + static const long ID_STATICLINE1; + static const long ID_STATICTEXT1; + static const long ID_STATICLINE2; + static const long ID_BUTTON1; + static const long ID_PANEL2; + static const long ID_STATICTEXT31; + static const long ID_STATICTEXT32; + static const long ID_STATICTEXT33; + static const long ID_CHOICE1; + static const long ID_CHOICE2; + static const long ID_TEXTCTRL18; + static const long ID_STATICTEXT35; + static const long ID_STATICTEXT34; + static const long ID_STATICTEXT36; + static const long ID_TEXTCTRL22; + static const long ID_TEXTCTRL23; + static const long ID_TEXTCTRL24; + static const long ID_STATICTEXT28; + static const long ID_STATICTEXT30; + static const long ID_STATICTEXT29; + static const long ID_TEXTCTRL19; + static const long ID_TEXTCTRL20; + static const long ID_TEXTCTRL21; + static const long ID_STATICTEXT2; + static const long ID_TEXTCTRL1; + static const long ID_STATICTEXT3; + static const long ID_STATICTEXT4; + static const long ID_STATICTEXT5; + static const long ID_STATICTEXT6; + static const long ID_STATICTEXT7; + static const long ID_STATICTEXT8; + static const long ID_STATICTEXT9; + static const long ID_STATICTEXT10; + static const long ID_TEXTCTRL2; + static const long ID_TEXTCTRL3; + static const long ID_TEXTCTRL4; + static const long ID_TEXTCTRL5; + static const long ID_TEXTCTRL6; + static const long ID_CHECKBOX1; + static const long ID_CHECKBOX2; + static const long ID_TEXTCTRL8; + static const long ID_STATICTEXT22; + static const long ID_STATICTEXT23; + static const long ID_STATICTEXT24; + static const long ID_STATICTEXT25; + static const long ID_STATICTEXT26; + static const long ID_STATICTEXT27; + static const long ID_COLOURPICKERCTRL1; + static const long ID_COLOURPICKERCTRL2; + static const long ID_COLOURPICKERCTRL3; + static const long ID_COLOURPICKERCTRL4; + static const long ID_COLOURPICKERCTRL5; + static const long ID_COLOURPICKERCTRL6; + static const long ID_STATICTEXT11; + static const long ID_STATICTEXT12; + static const long ID_STATICTEXT13; + static const long ID_STATICTEXT14; + static const long ID_STATICTEXT15; + static const long ID_STATICTEXT16; + static const long ID_STATICTEXT17; + static const long ID_TEXTCTRL7; + static const long ID_TEXTCTRL9; + static const long ID_TEXTCTRL10; + static const long ID_TEXTCTRL11; + static const long ID_TEXTCTRL12; + static const long ID_TEXTCTRL13; + static const long ID_CHECKBOX3; + static const long ID_STATICTEXT18; + static const long ID_STATICTEXT19; + static const long ID_STATICTEXT20; + static const long ID_STATICTEXT21; + static const long ID_TEXTCTRL14; + static const long ID_TEXTCTRL15; + static const long ID_TEXTCTRL16; + static const long ID_TEXTCTRL17; + static const long ID_FILEPICKERCTRL2; + static const long ID_FILEPICKERCTRL3; + static const long ID_BUTTON5; + static const long ID_BUTTON2; + static const long ID_PANEL3; + static const long ID_NOTEBOOK1; + static const long ID_PANEL1; + //*) + + //(*Declarations(Guppies1_0Dialog) + wxStaticText* StaticText10; + wxStaticText* StaticText22; + wxStaticText* StaticText9; + wxStaticText* StaticText20; + wxTextCtrl* TextCtrl4; + wxButton* Button4; + wxStaticText* StaticText29; + wxNotebook* Notebook1; + wxStaticText* StaticText37; + wxFilePickerCtrl* FilePickerCtrl1; + wxStaticText* StaticText13; + wxStaticText* StaticText33; + wxStaticText* StaticText2; + wxPanel* Panel4; + wxStaticText* StaticText14; + wxStaticText* StaticText30; + wxButton* Button1; + wxTextCtrl* TextCtrl16; + wxStaticText* StaticText26; + wxStaticText* StaticText6; + wxTextCtrl* TextCtrl6; + wxStaticBitmap* StaticBitmap1; + wxStaticText* StaticText19; + wxStaticText* StaticText32; + wxStaticText* StaticText8; + wxStaticText* StaticText38; + wxStaticText* StaticText11; + wxCheckBox* CheckBox3; + wxStaticText* StaticText18; + wxTextCtrl* TextCtrl19; + wxCheckBox* CheckBox2; + wxPanel* Panel1; + wxStaticText* StaticText31; + wxStaticText* StaticText1; + wxStaticText* StaticText27; + wxColourPickerCtrl* ColourPickerCtrl1; + wxStaticText* StaticText3; + wxHyperlinkCtrl* HyperlinkCtrl1; + wxButton* Button2; + wxPanel* Panel3; + wxStaticText* StaticText21; + wxCheckBox* CheckBox1; + wxTextCtrl* TextCtrl18; + wxStaticText* StaticText39; + wxStaticLine* StaticLine2; + wxColourPickerCtrl* ColourPickerCtrl6; + wxColourPickerCtrl* ColourPickerCtrl3; + wxStaticText* StaticText23; + wxStaticText* StaticText24; + wxButton* Button5; + wxTextCtrl* TextCtrl17; + wxTextCtrl* TextCtrl24; + wxTextCtrl* TextCtrl14; + wxButton* Button3; + wxTextCtrl* TextCtrl15; + wxStaticText* StaticText5; + wxStaticText* StaticText34; + wxStaticText* StaticText7; + wxTextCtrl* TextCtrl13; + wxColourPickerCtrl* ColourPickerCtrl4; + wxTextCtrl* TextCtrl21; + wxTextCtrl* TextCtrl20; + wxTextCtrl* TextCtrl22; + wxStaticLine* StaticLine3; + wxTextCtrl* TextCtrl8; + wxStaticLine* StaticLine1; + wxTextCtrl* TextCtrl2; + wxColourPickerCtrl* ColourPickerCtrl2; + wxTextCtrl* TextCtrl7; + wxStaticText* StaticText28; + wxBoxSizer* BoxSizer1; + wxTextCtrl* TextCtrl1; + wxStaticText* StaticText15; + wxStaticText* StaticText12; + wxTextCtrl* TextCtrl9; + wxStaticText* StaticText35; + wxPanel* Panel2; + wxTextCtrl* TextCtrl5; + wxTextCtrl* TextCtrl23; + wxColourPickerCtrl* ColourPickerCtrl5; + wxStaticText* StaticText25; + wxStaticText* StaticText17; + wxStaticText* StaticText4; + wxStaticText* StaticText36; + wxTextCtrl* TextCtrl3; + wxTextCtrl* TextCtrl10; + wxTextCtrl* TextCtrl12; + wxChoice* Choice1; + wxFilePickerCtrl* FilePickerCtrl2; + wxTextCtrl* TextCtrl11; + wxStaticText* StaticText16; + wxChoice* Choice2; + wxFilePickerCtrl* FilePickerCtrl3; + //*) + + DECLARE_EVENT_TABLE() +}; + +#endif // GUPPIES1_0MAIN_H diff --git a/README.md b/README.md new file mode 100644 index 0000000..7c28661 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +Neural Guppies is a NeuroEvolution experiment that evolves virtual creatures +into intelligent beings. It is a personal project aimed to test several +concepts that interest me, so I thought I should share it with the +community. However, it has no guaranty and has not been tested in any other +system but mine. Thus, if you run this on your system, you must do it at your +own risk. To see a brief introduction on Neural Guppies, visit the following +links: + +- [YouTube Playlist](https://www.youtube.com/watch?v=tCPzYM7B338&list=PLrEmYrpTcDJZZHZP8Qz4JN9PXY6-8O1HZ) + +Program is far from finished and can only begin Simulations from scratch +(loading and saving simulations will be implemented soon). If you close the +window the simulation will be lost. I've been able to successfully resume +simulations after putting the computer to Sleep or Hibernate, (without +closing the simulation window) but this may not work on all systems. + +Main concepts tested on this program are: ++ Artificial Neural Networks ++ Genetic Algorithms ++ Neuro-evolution \ No newline at end of file diff --git a/Simulation/Camera.cpp b/Simulation/Camera.cpp new file mode 100644 index 0000000..84b98a8 --- /dev/null +++ b/Simulation/Camera.cpp @@ -0,0 +1,241 @@ +#include "Camera.hpp" +#include "SimBase.hpp" + +void Camera::create(SimBase *sim) +{ + hSim = sim; + + defaultZoom = hSim->prms.worldRad / 200.f; + zoom = defaultZoom; + prevZoom = zoom; + trgtZoom = zoom; + + step = 1; + update(); +} + + +void Camera::onResize() +{ + sf::View view = hSim->window.getView(); + sf::Vector2u winSize = hSim->window.getSize(); + view.setSize(winSize.x * zoom, winSize.y * zoom); + view.setCenter(currentCrds); + hSim->window.setView(view); +} + + +void Camera::onClick() +{ + prevZoom = zoom; + trgtZoom = zoom; + + prevCrds = currentCrds; + + sf::Vector2f mousePos = hSim->window.mapPixelToCoords(sf::Mouse::getPosition(hSim->window)); + b2Vec2 b2MousePos(mousePos.x, mousePos.y); + b2Vec2 additive(0.001f, 0.001f); + b2AABB aabb; + aabb.upperBound = b2MousePos + additive; + aabb.lowerBound = b2MousePos - additive; + + QueryCallback callback; + callback.m_point = b2MousePos; + hSim->tank.world.QueryAABB(&callback, aabb); + + if (callback.m_fixture) + { + trgtBody = callback.m_fixture->GetBody(); + } + else + { + trgtCrds = mousePos; + trgtBody = nullptr; + } + + isOnFollow = false; + step = Params::CAM_STEPS; +} + + +void Camera::shift(const sf::Vector2f &newTrgtCrds, int zoomInOut, bool release) +{ + if (!release && trgtBody) + { + prevCrds = sf::Vector2f(trgtBody->GetPosition().x, trgtBody->GetPosition().y); + currentCrds = sf::Vector2f(trgtBody->GetPosition().x, trgtBody->GetPosition().y); + trgtCrds = sf::Vector2f(trgtBody->GetPosition().x, trgtBody->GetPosition().y); + isOnFollow = true; + } + else + { + trgtBody = nullptr; + prevCrds = currentCrds; + trgtCrds = newTrgtCrds; + isOnFollow = false; + } + + prevZoom = zoom; + if (zoomInOut) + { + if (zoomInOut == 1) + { + trgtZoom = zoom - 0.2f * zoom; + } + else if (zoomInOut == -1) + { + trgtZoom = zoom + 0.2f * zoom; + } + else if (zoomInOut == -2) + { + trgtZoom = defaultZoom; + } + } + else + { + trgtZoom = zoom; + } + + step = Params::CAM_STEPS; +} + +void Camera::update() +{ + if (trgtBody || step) + { + if (!step) + { + currentCrds = sf::Vector2f(trgtBody->GetPosition().x, trgtBody->GetPosition().y); + } + else + { + if (trgtBody) + { + trgtCrds = sf::Vector2f(trgtBody->GetPosition().x, trgtBody->GetPosition().y); + if (isOnFollow) + { + prevCrds = trgtCrds; + } + } + + float f1 = (step - 1.f) / (float)Params::CAM_STEPS; + float f2 = 1.f - f1; + + currentCrds = prevCrds * f1 + trgtCrds * f2; + zoom = prevZoom * f1 + trgtZoom * f2; + + if (currentCrds.x * currentCrds.x + currentCrds.y * currentCrds.y > hSim->prms.worldRad * hSim->prms.worldRad) + { + float angle = atanf(currentCrds.y / currentCrds.x); + currentCrds.y = sinf(angle) * hSim->prms.worldRad * (currentCrds.x > 1.f ? 1.f : -1.f); + currentCrds.x = cosf(angle) * hSim->prms.worldRad * (currentCrds.x > 1.f ? 1.f : -1.f); + } + + if (zoom > defaultZoom) + { + zoom = defaultZoom; + } + if (zoom < Params::MAX_ZOOM) + { + zoom = Params::MAX_ZOOM; + } + + --step; + } + + sf::View view = hSim->window.getView(); + view.setCenter(currentCrds); + view.setSize(hSim->window.getSize().x * zoom, hSim->window.getSize().y * zoom); + hSim->window.setView(view); + } + + // Prepare low zoom graphics + hSim->tank.worldEdges.setOutlineThickness(zoom * 2.f); + + if (zoom > Params::ZAPPER_RAD / 2.f) + { + if (zoom > Params::ZAPPER_RAD * 2.f) + { + setCenterRad(hSim->zapperPoint, zoom); + hSim->zapperPoint.setFillColor(hSim->prms.zapperColor); + } + else + { + setCenterRad(hSim->zapperPoint, Params::ZAPPER_RAD); + hSim->zapperPoint.setFillColor(hSim->prms.zapperColor); + } + } + else + { + setCenterRad(hSim->zapperShell, hSim->prms.ZAPPER_RAD - zoom * 2.f); + hSim->zapperShell.setOutlineThickness(zoom * 2.f); + } + + if (zoom > Params::PELLET_RAD / 2.f) + { + if (zoom > Params::PELLET_RAD * 2.f) + { + setCenterRad(hSim->pelletPoint, zoom); + hSim->pelletPoint.setFillColor(hSim->prms.pelletColor); + } + else + { + setCenterRad(hSim->pelletPoint, Params::PELLET_RAD); + hSim->pelletPoint.setFillColor(hSim->prms.pelletColor); + } + } + else + { + setCenterRad(hSim->pelletShell, hSim->prms.PELLET_RAD - zoom * 2.f); + hSim->pelletShell.setOutlineThickness(zoom * 2.f); + } + + if (zoom > Params::CORPSE_RAD / 2.f) + { + if (zoom > Params::CORPSE_RAD * 2.f) + { + setCenterRad(hSim->corpsePoint, zoom); + hSim->corpsePoint.setFillColor(hSim->prms.corpseColor); + } + else + { + setCenterRad(hSim->corpsePoint, Params::CORPSE_RAD); + hSim->corpsePoint.setFillColor(hSim->prms.corpseColor); + } + } + else + { + setCenterRad(hSim->corpseShell, hSim->prms.CORPSE_RAD - zoom * 2.f); + hSim->corpseShell.setOutlineThickness(zoom * 2.f); + } + + if (zoom > Params::EGG_RAD / 2.f) + { + if (zoom > Params::EGG_RAD * 2.f) + { + setCenterRad(hSim->eggPoint, zoom); + hSim->eggPoint.setFillColor(hSim->guppN); + } + else + { + setCenterRad(hSim->eggPoint, Params::EGG_RAD); + hSim->eggPoint.setFillColor(hSim->guppN); + } + } + else + { + setCenterRad(hSim->guppieEgg, hSim->prms.EGG_RAD - zoom * 2.f); + hSim->guppieEgg.setOutlineThickness(zoom * 2.f); + } + + if (zoom > Params::GUPPIE_RAD) + { + setCenterRad(hSim->guppiePoint, zoom); + } + + else if (zoom > 0.02f) + { + setCenterRad(hSim->guppieShell, Params::GUPPIE_RAD - zoom); + hSim->guppieShell.setOutlineThickness(zoom); + } +} diff --git a/Simulation/Camera.hpp b/Simulation/Camera.hpp new file mode 100644 index 0000000..b6ee8a9 --- /dev/null +++ b/Simulation/Camera.hpp @@ -0,0 +1,42 @@ +#ifndef __CAMERA_HPP__ +#define __CAMERA_HPP__ + +#include +#include + +class SimBase; + +class Camera +{ +public: + void create(SimBase *sim); + void onResize(); + void onClick(); + void shift(const sf::Vector2f &newTrgtCrds, int zoomInOut = 0, bool release = true); + void update(); + + sf::Vector2f getCrds() const { return currentCrds; } + float getZoom() const { return zoom; } + +private: + SimBase *hSim = nullptr; + + float defaultZoom = 0.f; + float zoom = 0.f; + float prevZoom = 0.f; + float trgtZoom = 0.f; + sf::Vector2f currentCrds = { 0.f, 0.f }; + sf::Vector2f prevCrds = { 0.f, 0.f }; + sf::Vector2f trgtCrds = { 0.f, 0.f }; + unsigned step = 0; + bool isOnFollow = false; + b2Body *trgtBody = nullptr; + + friend class ContactListener; + friend class Zapper; + friend class Pellet; + friend class Guppie; + friend class Corpse; +}; + +#endif // __CAMERA_HPP__ diff --git a/Simulation/ContactListener.cpp b/Simulation/ContactListener.cpp new file mode 100644 index 0000000..6c42365 --- /dev/null +++ b/Simulation/ContactListener.cpp @@ -0,0 +1,168 @@ +#include "ContactListener.hpp" +#include "SimBase.hpp" + +void ContactListener::PreSolve(b2Contact *contact, const b2Manifold *oldManifold) +{ + b2Body *bodyA = contact->GetFixtureA()->GetBody(); + b2Body *bodyB = contact->GetFixtureB()->GetBody(); + + Guppie *gp1 = nullptr; + Guppie *gp2 = nullptr; + + if (bodyA->GetType() == b2_dynamicBody) + { + if (((Entity *)bodyA->GetUserData())->radius == Params::GUPPIE_RAD) + { + if (((Guppie *)bodyA->GetUserData())->isActive) + { + gp1 = (Guppie *)bodyA->GetUserData(); + } + } + } + if (bodyB->GetType() == b2_dynamicBody) + { + if (((Entity *)bodyB->GetUserData())->radius == Params::GUPPIE_RAD) + { + if (((Guppie *)bodyB->GetUserData())->isActive) + { + gp2 = (Guppie *)bodyB->GetUserData(); + } + } + } + + // If only one body is a Guppie + if ((gp1 && !gp2) || (!gp1 && gp2)) + { + Guppie *gp = gp1 ? gp1 : gp2; + b2Body *bd = gp1 ? bodyB : bodyA; + + if (bd->GetType() == b2_staticBody) + { + gp->lastContactStep = hSim->prms.contactSteps; + gp->lastContact = Guppie::ZAPPER; + gp->energy += hSim->prms.etFromZapper; + } + else + { + if (((Entity *)bd->GetUserData())->radius == Params::ZAPPER_RAD) + { + gp->lastContactStep = hSim->prms.contactSteps; + gp->lastContact = Guppie::ZAPPER; + gp->energy += hSim->prms.etFromZapper; + } + else + { + sf::Transform trans; + trans.translate(gp->body->GetPosition().x, gp->body->GetPosition().y); + trans.rotate(gp->body->GetAngle() * Params::RAD_DGRS); + sf::Vector2f beak1 = trans.transformPoint(hSim->beak1.getPoint(1)); + sf::Vector2f beak2 = trans.transformPoint(hSim->beak2.getPoint(1)); + float cateteX1 = beak1.x - bd->GetPosition().x; + float cateteY1 = beak1.y - bd->GetPosition().y; + float cateteX2 = beak2.x - bd->GetPosition().x; + float cateteY2 = beak2.y - bd->GetPosition().y; + if (((Entity *)bd->GetUserData())->radius == Params::PELLET_RAD) + { + if (cateteX1 * cateteX1 + cateteY1 * cateteY1 < hSim->prms.PELLET_RAD * hSim->prms.PELLET_RAD || + cateteX2 * cateteX2 + cateteY2 * cateteY2 < hSim->prms.PELLET_RAD * hSim->prms.PELLET_RAD) + { + gp->lastContactStep = hSim->prms.contactSteps; + gp->lastContact = Guppie::PELLET; + gp->energy += hSim->prms.etFromPellet; + gp->fitness += hSim->prms.forPellet; + ((Pellet *)bd->GetUserData())->toBeDestroyed = true; + if (hSim->camera.trgtBody == bd) + { + hSim->camera.prevCrds = hSim->camera.currentCrds; + hSim->camera.step = Params::CAM_STEPS; + hSim->camera.trgtBody = gp->body; + } + } + } + else if (((Entity *)bd->GetUserData())->radius == Params::CORPSE_RAD) + { + if (cateteX1 * cateteX1 + cateteY1 * cateteY1 < hSim->prms.CORPSE_RAD * hSim->prms.CORPSE_RAD || + cateteX2 * cateteX2 + cateteY2 * cateteY2 < hSim->prms.CORPSE_RAD * hSim->prms.CORPSE_RAD) + { + gp->lastContactStep = hSim->prms.contactSteps; + gp->lastContact = Guppie::CORPSE; + gp->energy += ((Corpse *)bd->GetUserData())->energy; + gp->fitness += hSim->prms.forCorpse * (((Corpse *)bd->GetUserData())->energy / hSim->prms.etFromCorpse); + ((Corpse *)bd->GetUserData())->toBeDestroyed = true; + if (hSim->camera.trgtBody == bd) + { + hSim->camera.prevCrds = hSim->camera.currentCrds; + hSim->camera.step = Params::CAM_STEPS; + hSim->camera.trgtBody = gp->body; + } + } + } + } + } + + if (gp->energy > hSim->prms.maxEnergy) + { + gp->energy = hSim->prms.maxEnergy; + } + } + // If both bodies are guppies + else if (gp1 && gp2) + { + sf::Transform trans1; + sf::Transform trans2; + trans1.translate(gp1->body->GetPosition().x, gp1->body->GetPosition().y); + trans1.rotate(gp1->body->GetAngle() * Params::RAD_DGRS); + trans2.translate(gp2->body->GetPosition().x, gp2->body->GetPosition().y); + trans2.rotate(gp2->body->GetAngle() * Params::RAD_DGRS); + + sf::Vector2f beak1_1 = trans1.transformPoint(hSim->beak1.getPoint(1)); + sf::Vector2f beak1_2 = trans1.transformPoint(hSim->beak2.getPoint(1)); + sf::Vector2f beak2_1 = trans2.transformPoint(hSim->beak1.getPoint(1)); + sf::Vector2f beak2_2 = trans2.transformPoint(hSim->beak2.getPoint(1)); + + float cateteX1_1 = beak1_1.x - gp2->body->GetPosition().x; + float cateteY1_1 = beak1_1.y - gp2->body->GetPosition().y; + float cateteX2_1 = beak2_1.x - gp2->body->GetPosition().x; + float cateteY2_1 = beak2_1.y - gp2->body->GetPosition().y; + float cateteX1_2 = beak1_2.x - gp1->body->GetPosition().x; + float cateteY1_2 = beak1_2.y - gp1->body->GetPosition().y; + float cateteX2_2 = beak2_2.x - gp1->body->GetPosition().x; + float cateteY2_2 = beak2_2.y - gp1->body->GetPosition().y; + + if (cateteX1_1 * cateteX1_1 + cateteY1_1 * cateteY1_1 < hSim->prms.GUPPIE_RAD * hSim->prms.GUPPIE_RAD || + cateteX2_1 * cateteX2_1 + cateteY2_1 * cateteY2_1 < hSim->prms.GUPPIE_RAD * hSim->prms.GUPPIE_RAD) + { + gp1->lastContactStep = hSim->prms.contactSteps; + gp1->lastContact = Guppie::GUPPIE; + gp1->energy += hSim->prms.etFromGuppie; + gp1->fitness += hSim->prms.forGuppie; + + gp2->lastContactStep = hSim->prms.contactSteps; + gp2->lastContact = Guppie::GUPPIE; + gp2->energy -= hSim->prms.etFromGuppie; + } + + if (cateteX1_2 * cateteX1_2 + cateteY1_2 * cateteY1_2 < hSim->prms.GUPPIE_RAD * hSim->prms.GUPPIE_RAD || + cateteX2_2 * cateteX2_2 + cateteY2_2 * cateteY2_2 < hSim->prms.GUPPIE_RAD * hSim->prms.GUPPIE_RAD) + { + gp1->lastContactStep = hSim->prms.contactSteps; + gp1->lastContact = Guppie::GUPPIE; + gp1->energy -= hSim->prms.etFromGuppie; + + gp2->lastContactStep = hSim->prms.contactSteps; + gp2->lastContact = Guppie::GUPPIE; + gp2->energy += hSim->prms.etFromGuppie; + gp2->fitness += hSim->prms.forGuppie; + } + + if (gp1->energy > hSim->prms.maxEnergy) + { + gp1->energy = hSim->prms.maxEnergy; + } + + if (gp2->energy > hSim->prms.maxEnergy) + { + gp2->energy = hSim->prms.maxEnergy; + } + } +} diff --git a/Simulation/ContactListener.hpp b/Simulation/ContactListener.hpp new file mode 100644 index 0000000..4b4d472 --- /dev/null +++ b/Simulation/ContactListener.hpp @@ -0,0 +1,16 @@ +#ifndef __CONTACTLISTENER_HPP__ +#define __CONTACTLISTENER_HPP__ + +#include + +class SimBase; + +class ContactListener : public b2ContactListener +{ +public: + void PreSolve(b2Contact *contact, const b2Manifold *oldManifold); + + SimBase *hSim = nullptr; +}; + +#endif // __CONTACTLISTENER_HPP__ diff --git a/Simulation/Corpse.cpp b/Simulation/Corpse.cpp new file mode 100644 index 0000000..82879ed --- /dev/null +++ b/Simulation/Corpse.cpp @@ -0,0 +1,99 @@ +#include "Corpse.hpp" +#include "SimBase.hpp" + +void Corpse::startup(SimBase *sim) +{ + hSim = sim; + radius = Params::CORPSE_RAD; +} + +void Corpse::setup(b2Vec2 pos, b2Vec2 lVel, float angle, float aVel) +{ + if (!body) + { + return; + } + + lifetime = hSim->prms.corpseDecayTime; + energy = hSim->prms.etFromCorpse; + + body->SetTransform(pos, angle); + body->SetLinearVelocity(lVel); + body->SetAngularVelocity(aVel); +} + + +void Corpse::update() +{ + if (!body) + { + return; + } + + if (hSim->prms.corpseDecay) + { + --lifetime; + energy = hSim->prms.etFromCorpse * ((float)lifetime / (float)hSim->prms.corpseDecayTime); + } + + if (!lifetime || toBeDestroyed) + { + destroy(); + } +} + + +void Corpse::destroy() +{ + if (hSim->camera.trgtBody == body) + { + hSim->camera.prevCrds = hSim->camera.currentCrds; + hSim->camera.trgtCrds = hSim->camera.currentCrds; + hSim->camera.step = 0; + hSim->camera.trgtBody = nullptr; + } + + toBeDestroyed = false; + hSim->tank.world.DestroyBody(body); + body = nullptr; + + --hSim->corpseCount; + hSim->text.corpseCnt.setString("Corpse count: " + nts(hSim->corpseCount)); +} + + +void Corpse::draw() +{ + if (!body) + { + return; + } + + sf::Vector2f vSize = hSim->window.getView().getSize(); + sf::Vector2f vCent = hSim->window.getView().getCenter(); + if ( body->GetPosition().x + radius < vCent.x - vSize.x / 2.f || + body->GetPosition().y + radius < vCent.y - vSize.y / 2.f || + body->GetPosition().x - radius > vCent.x + vSize.x / 2.f || + body->GetPosition().y - radius > vCent.y + vSize.y / 2.f ) + { + return; + } + + sf::Color corpseColor = mix(hSim->prms.corpseColor, hSim->prms.worldColor, ((float)lifetime / (float)hSim->prms.corpseDecayTime)); + if (hSim->camera.zoom > Params::CORPSE_RAD / 2.f) + { + hSim->corpsePoint.setFillColor(corpseColor); + hSim->corpsePoint.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->window.draw(hSim->corpsePoint); + } + else + { + hSim->corpseShell.setOutlineColor(corpseColor); + hSim->corpseShell.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->corpseNucleus.setFillColor(corpseColor); + hSim->corpseNucleus.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->corpseNucleus.setRotation(body->GetAngle() * Params::RAD_DGRS); + hSim->window.draw(hSim->corpseShell); + hSim->window.draw(hSim->corpseNucleus); + } +} diff --git a/Simulation/Corpse.hpp b/Simulation/Corpse.hpp new file mode 100644 index 0000000..0153c24 --- /dev/null +++ b/Simulation/Corpse.hpp @@ -0,0 +1,28 @@ +#ifndef __CORPSE_HPP__ +#define __CORPSE_HPP__ + +#include "Entity.hpp" + +class Corpse : public Entity +{ +public: + void startup(SimBase *sim); + void update(); + void draw(); + + bool isCreated() const { return body ? true : false; } + bool toBeDestroyed = false; + + void setup(b2Vec2 pos, b2Vec2 lVel, float angle, float aVel); + +private: + void destroy(); + + unsigned lifetime = 0; + float energy = 0.f; + + friend class ContactListener; + friend class Guppie; +}; + +#endif // __CORPSE_HPP__ diff --git a/Simulation/Entity.cpp b/Simulation/Entity.cpp new file mode 100644 index 0000000..d5ccb75 --- /dev/null +++ b/Simulation/Entity.cpp @@ -0,0 +1,59 @@ +#include "Entity.hpp" +#include "SimBase.hpp" + +void Entity::create() +{ + if (!hSim || body || !radius) + { + return; + } + + b2BodyDef bodyDef; + bodyDef.type = b2_dynamicBody; + bodyDef.position = { hSim->prms.worldRad, hSim->prms.worldRad }; + float hypotenuse = hSim->prms.worldRad - radius; + while (bodyDef.position.x * bodyDef.position.x + bodyDef.position.y * bodyDef.position.y > hypotenuse * hypotenuse) + { + bodyDef.position.x = realRand(-hSim->prms.worldRad, hSim->prms.worldRad); + bodyDef.position.y = realRand(-hSim->prms.worldRad, hSim->prms.worldRad); + } + bodyDef.angle = realRand(0.f, 360.f / Params::RAD_DGRS); + bodyDef.linearDamping = 0.1f; + bodyDef.angularDamping = 0.1f; + bodyDef.allowSleep = true; + bodyDef.userData = this; + + body = hSim->tank.world.CreateBody(&bodyDef); + + b2CircleShape shape; + shape.m_radius = radius; + + b2FixtureDef fixture; + fixture.shape = &shape; + fixture.friction = 1.f; + fixture.restitution = 1.f; + fixture.density = 1.f; + + body->CreateFixture(&fixture); + + if (radius == Params::PELLET_RAD) + { + ++hSim->pelletCount; + hSim->text.pelletCnt.setString("Pellet count: " + nts(hSim->pelletCount) + " / " + nts(hSim->prms.pelletQtty)); + } + else if (radius == Params::CORPSE_RAD) + { + ++hSim->corpseCount; + hSim->text.corpseCnt.setString("Corpse count: " + nts(hSim->corpseCount)); + } + else if (radius == Params::GUPPIE_RAD) + { + ++hSim->guppieCount; + hSim->text.guppieCnt.setString("Guppie count: " + nts(hSim->guppieCount)); + ((Guppie *)this)->energy = hSim->prms.initEnergy; + body->SetLinearDamping(2.f); + body->SetAngularDamping(2.f); + + ((b2CircleShape *)body->GetFixtureList()->GetShape())->m_radius = hSim->prms.EGG_RAD; + } +} diff --git a/Simulation/Entity.hpp b/Simulation/Entity.hpp new file mode 100644 index 0000000..0374611 --- /dev/null +++ b/Simulation/Entity.hpp @@ -0,0 +1,34 @@ +#ifndef __ENTITY_HPP__ +#define __ENTITY_HPP__ + +#include +#include + +class SimBase; + +class Entity +{ +public: + virtual void startup(SimBase *sim) = 0; + + void create(); + void destroy(); + + virtual void update() = 0; + virtual void draw() = 0; + + float getRadius() const { return radius; } + +protected: + SimBase *hSim = nullptr; + + b2Body *body = nullptr; + float radius = 0.f; + float resistance = 0.f; + + friend class ContactListener; + friend class Guppie; + friend class Camera; +}; + +#endif // __ENTITY_HPP__ diff --git a/Simulation/GraphicObjs.hpp b/Simulation/GraphicObjs.hpp new file mode 100644 index 0000000..8fab10e --- /dev/null +++ b/Simulation/GraphicObjs.hpp @@ -0,0 +1,56 @@ +#ifndef __GRAPHICOBJS_HPP__ +#define __GRAPHICOBJS_HPP__ + +#include + +class GraphicObjs +{ +protected: + sf::CircleShape zapperPoint = sf::CircleShape(0, 12); + sf::CircleShape zapperShell; + sf::CircleShape zapperNucleus = sf::CircleShape(0, 5); + + sf::CircleShape pelletPoint = sf::CircleShape(0, 6); + sf::CircleShape pelletShell; + sf::CircleShape pelletNucleus = sf::CircleShape(0, 3); + + sf::CircleShape guppiePoint = sf::CircleShape(0, 6); + sf::CircleShape guppieShell = sf::CircleShape(0, 30); + /////////////// + sf::CircleShape eggPoint = sf::CircleShape(0, 6); + sf::CircleShape guppieEgg = sf::CircleShape(0, 60); + /////////////// + sf::Color guppN; + sf::Vector2f visionCone[31]; + sf::Vector2f skinRadius[180]; + sf::Vector2f senseRadius[180]; + ///////////////////////////// + sf::CircleShape gOuterSkin; + /////////////////////////// + sf::ConvexShape beak1; + sf::ConvexShape beak2; + /////////////////////////// + sf::ConvexShape touchCells[30]; + sf::ConvexShape smellCells[30]; + sf::ConvexShape tailMask; + ////////////////////////////// + sf::CircleShape innerBodyMask; + ///////////////////////////// + sf::ConvexShape thrusters[4]; + sf::ConvexShape thrusterMask; + sf::ConvexShape heart; + sf::ConvexShape heartMask; + sf::ConvexShape heartTop; + sf::ConvexShape heartTri; + sf::ConvexShape glandMask; + sf::ConvexShape gland; + sf::ConvexShape eyeMask; + sf::ConvexShape eyeCells[15]; + sf::ConvexShape eyeCavity; + + sf::CircleShape corpsePoint = sf::CircleShape(0, 6); + sf::CircleShape corpseShell; + sf::CircleShape corpseNucleus = sf::CircleShape(0, 4); +}; + +#endif // __GRAPHICOBJS_HPP__ diff --git a/Simulation/Guppie.cpp b/Simulation/Guppie.cpp new file mode 100644 index 0000000..91788c2 --- /dev/null +++ b/Simulation/Guppie.cpp @@ -0,0 +1,584 @@ +#include "Guppie.hpp" +#include "SimFitness.hpp" + +void Guppie::startup(SimBase *sim) +{ + hSim = sim; + radius = Params::GUPPIE_RAD; +} + +void Guppie::update() +{ + if (!body) + { + return; + } + + // Update states + ++lifetime; + + if (lifetime < hSim->prms.activationDelay) + { + return; + } + + if (lifetime == hSim->prms.activationDelay) + { + isActive = true; + skinColor = hSim->guppN; + glandState = ALPHA; + + ((b2CircleShape *)body->GetFixtureList()->GetShape())->m_radius = hSim->prms.GUPPIE_RAD; + } + + fitness += energy; + + energy -= (1.f / 60.f) + (float)lifetime / (hSim->prms.agingRate * 3600.f); + + if (energy < 0.f) + { + destroy(); + return; + } + + if (lastContactStep) + { + --lastContactStep; + } + + if (skinColor.r) + { + skinColor.r -= 1; + } + if (skinColor.g) + { + skinColor.g -= 1; + } + if (skinColor.b) + { + skinColor.b -= 1; + } + + // Update sensors + sf::Transform trans; + trans.translate(body->GetPosition().x, body->GetPosition().y); + trans.rotate(body->GetAngle() * Params::RAD_DGRS); + // Eye sensors + sf::Vector2f eyePoint = trans.transformPoint(hSim->visionCone[30]); + for (int i = 0; i < 15; ++i) + { + RayCastCallback points[2]; + sf::Color colors[2]; + for (int j = 0; j < 2; ++j) + { + colors[j] = hSim->prms.worldColor; + sf::Vector2f eyeLine = trans.transformPoint(hSim->visionCone[i * 2 + j]); + hSim->tank.world.RayCast(&points[j], b2Vec2(eyePoint.x, eyePoint.y), b2Vec2(eyeLine.x, eyeLine.y)); + if (points[j].m_fixture) + { + if (points[j].m_fixture->GetBody()->GetType() == b2_staticBody) + { + colors[j] = mix(hSim->prms.worldColor, hSim->prms.zapperColor, points[j].m_fraction); + } + else + { + Entity *entity = (Entity *)points[j].m_fixture->GetBody()->GetUserData(); + if (entity->radius == Params::ZAPPER_RAD) + { + colors[j] = mix(hSim->prms.worldColor, hSim->prms.zapperColor, points[j].m_fraction); + } + else if (entity->radius == Params::EGG_RAD) + { + colors[j] = mix(hSim->prms.worldColor, hSim->guppN, points[j].m_fraction); + } + else if (entity->radius == Params::PELLET_RAD) + { + colors[j] = mix(hSim->prms.worldColor, hSim->prms.pelletColor, points[j].m_fraction); + } + else if (entity->radius == Params::CORPSE_RAD) + { + sf::Color corpseColor = mix(hSim->prms.corpseColor, hSim->prms.worldColor, ((float)((Corpse *)entity)->lifetime / (float)hSim->prms.corpseDecayTime)); + colors[j] = mix(hSim->prms.worldColor, corpseColor, points[j].m_fraction); + } + else if (entity->radius == Params::GUPPIE_RAD) + { + if (!((Guppie *)entity)->isActive) + { + colors[j] = mix(hSim->prms.worldColor, hSim->guppN, points[j].m_fraction); + } + else + { + colors[j] = mix(hSim->prms.worldColor, ((Guppie *)entity)->skinColor, points[j].m_fraction); + } + } + } + } + } + + sf::Color sum = mix(colors[0], colors[1], 0.5f); + eyeR[i] = (float)sum.r / 256.f; + eyeG[i] = (float)sum.g / 256.f; + eyeB[i] = (float)sum.b / 256.f; + } + // Skin sensors + for (int i = 0; i < 30; ++i) + { + RayCastCallback points[6]; + float valueTouch = 0.f; +// float valueSmell = 0.f; + for (int j = 0; j < 6; ++j) + { + sf::Vector2f skinPoint = trans.transformPoint(hSim->skinRadius[i * 6 + j]); + sf::Vector2f senseLine = trans.transformPoint(hSim->senseRadius[i * 6 + j]); + hSim->tank.world.RayCast(&points[j], b2Vec2(skinPoint.x, skinPoint.y), b2Vec2(senseLine.x, senseLine.y)); + if (points[j].m_fixture) + { + valueTouch += 1.f - points[j].m_fraction; + // FOR SWARM SIMULATION STYLE +// if (points[j].m_fixture->GetBody()->GetType() == b2_dynamicBody) +// { +// Entity *entity = (Entity *)points[j].m_fixture->GetBody()->GetUserData(); +// if (entity->radius == Params::GUPPIE_RAD) +// { +// if (((Guppie *)entity)->isActive) +// { +// if (((Guppie *)entity)->glandState == glandState) +// { +// valueSmell += 1.f - points[j].m_fraction; +// } +// } +// } +// } + } + } + + touch[i] = valueTouch / 6.f; +// smell[i] = valueSmell / 6.f; + } + // Current color sensor + cColorR = (float)skinColor.r / 255.f; + cColorG = (float)skinColor.g / 255.f; + cColorB = (float)skinColor.b / 255.f; + // Current gland color sensor +// cGland1 = 0.f; +// cGland2 = 0.f; +// cGland3 = 0.f; +// if (glandState == ALPHA) +// { +// cGland1 = 1.f; +// } +// else if (glandState == BETTA) +// { +// cGland2 = 1.f; +// } +// else +// { +// cGland3 = 1.f; +// } + // Speed sensors + b2Vec2 axisSpeed = body->GetLinearVelocity(); + sf::Transform rotat; + rotat.rotate(body->GetAngle() * Params::RAD_DGRS); + sf::Vector2f fwdDirect = rotat.transformPoint(sf::Vector2f(0.f, -1.f)); + sf::Vector2f sdeDirect = rotat.transformPoint(sf::Vector2f(1.f, 0.f)); + fwdSpeed = sigmoid(axisSpeed.x * fwdDirect.x + axisSpeed.y * fwdDirect.y); + sideSpeed = sigmoid(axisSpeed.x * sdeDirect.x + axisSpeed.y * sdeDirect.y); + // Rotation sensor + rotation = sigmoid(body->GetAngularVelocity()); + // Low energy sensor + lowEnergy = sigmoid(energy / 10.f) * 2.f - 1.f; + + // Merge inputs and get response from neural net + std::vector inputs; + inputs.insert(inputs.end(), eyeR.begin(), eyeR.end()); + inputs.insert(inputs.end(), eyeG.begin(), eyeG.end()); + inputs.insert(inputs.end(), eyeB.begin(), eyeB.end()); + inputs.insert(inputs.end(), touch.begin(), touch.end()); +// inputs.insert(inputs.end(), smell.begin(), smell.end()); + inputs.push_back(cColorR); + inputs.push_back(cColorG); + inputs.push_back(cColorB); +// inputs.push_back(cGland1); +// inputs.push_back(cGland2); +// inputs.push_back(cGland3); + inputs.push_back(fwdSpeed); + inputs.push_back(sideSpeed); + inputs.push_back(rotation); + inputs.push_back(lowEnergy); + + std::vector outputs = neuralNet->io(inputs); + + // Apply outputs + thruster1 = outputs[0]; + thruster2 = outputs[1]; + addClrR = outputs[2]; + addClrG = outputs[3]; + addClrB = outputs[4]; +// addGln1 = outputs[5]; +// addGln2 = outputs[6]; +// addGln3 = outputs[7]; + + // Handle outputs + // Guppies gain fitness by going straight forward + if (thruster1 + thruster2 > 1.f) + { + float forwardness = thruster1 + thruster2 - 1.f; + fitness += forwardness * hSim->prms.forGoingStraight; + } + + // Apply thrust + sf::Vector2f leftThrustPoint = trans.transformPoint(-hSim->prms.thrustRadius, 0.f); + sf::Vector2f rightThrustPoint = trans.transformPoint(hSim->prms.thrustRadius, 0.f); + + thruster1 = thruster1 * 2.f - 1.f; + sf::Vector2f thrLeft = rotat.transformPoint(-hSim->prms.thrustRadius, thruster1 * hSim->prms.thrustForce); + body->ApplyForce(b2Vec2(thrLeft.x, thrLeft.y), b2Vec2(leftThrustPoint.x, leftThrustPoint.y)); + + thruster2 = thruster2 * 2.f - 1.f; + sf::Vector2f thrRight = rotat.transformPoint(hSim->prms.thrustRadius, thruster2 * hSim->prms.thrustForce); + body->ApplyForce(b2Vec2(thrRight.x, thrRight.y), b2Vec2(rightThrustPoint.x, rightThrustPoint.y)); + // Substract energy +// energy -= fabsf(thruster1 / 60.f); +// energy -= fabsf(thruster2 / 60.f); + + // Apply color change + float temp = 0.f; + if ((temp = skinColor.r + addClrR * 8.f) < 255) + { + skinColor.r += temp; + } + else + { + skinColor.r = 255; + } + if ((temp = skinColor.g + addClrG * 8.f) < 255) + { + skinColor.g += temp; + } + else + { + skinColor.g = 255; + } + if ((temp = skinColor.b + addClrB * 8.f) < 255) + { + skinColor.b += temp; + } + else + { + skinColor.b = 255; + } + // Substract energy +// energy -= addClrR / 60.f; +// energy -= addClrG / 60.f; +// energy -= addClrB / 60.f; + // Apply gland change +// nGland1 += addGln1; +// nGland2 += addGln2; +// nGland3 += addGln3; +// bool changeGln = false; +// if (nGland1 > 30.f) +// { +// glandState = ALPHA; +// changeGln = true; +// } +// else if (nGland2 > 30.f) +// { +// glandState = BETTA; +// changeGln = true; +// } +// else if (nGland3 > 30.f) +// { +// glandState = GAMMA; +// changeGln = true; +// } +// if (changeGln) +// { +// nGland1 = 0.f; +// nGland2 = 0.f; +// nGland3 = 0.f; +// } +// // Substract energy +// energy -= addGln1 / 60.f; +// energy -= addGln2 / 60.f; +// energy -= addGln3 / 60.f; + + if (hSim->prms.simStyle == SELECTION_BY_FITNESS) + { + if (fitness > ((SimFitness *)hSim)->fitnessRecord) + { + ((SimFitness *)hSim)->fitnessRecord = fitness; + hSim->text.longestLife.setString("Fitness record: " + nts(((SimFitness *)hSim)->fitnessRecord)); + } + } +} + + +void Guppie::destroy() +{ + if (!body) + { + return; + } + + --hSim->guppieCount; + hSim->text.guppieCnt.setString("Guppie count: " + nts(hSim->guppieCount)); + + // Place a corpse + if (hSim->prms.leaveCorpse) + { + bool vacant = false; + for (auto &i : hSim->corpses) + { + if (!i.isCreated()) + { + i.create(); + i.setup(body->GetPosition(), body->GetLinearVelocity(), body->GetAngle(), body->GetAngularVelocity()); + if (hSim->camera.trgtBody == body) + { + hSim->camera.trgtBody = i.body; + } + vacant = true; + break; + } + } + if (!vacant) + { + hSim->corpses.push_back(Corpse()); + hSim->corpses.back().startup(hSim); + hSim->corpses.back().create(); + hSim->corpses.back().setup(body->GetPosition(), body->GetLinearVelocity(), body->GetAngle(), body->GetAngularVelocity()); + if (hSim->camera.trgtBody == body) + { + hSim->camera.trgtBody = hSim->corpses.back().body; + } + } + } + else if (hSim->camera.trgtBody == body) + { + hSim->camera.trgtBody = nullptr; + } + + hSim->tank.world.DestroyBody(body); + body = nullptr; +} + + +void Guppie::draw() +{ + if (!body) + { + return; + } + + sf::Vector2f vSize = hSim->window.getView().getSize(); + sf::Vector2f vCent = hSim->window.getView().getCenter(); + if ( body->GetPosition().x + radius < vCent.x - vSize.x / 2.f || + body->GetPosition().y + radius < vCent.y - vSize.y / 2.f || + body->GetPosition().x - radius > vCent.x + vSize.x / 2.f || + body->GetPosition().y - radius > vCent.y + vSize.y / 2.f ) + { + return; + } + + if (hSim->camera.zoom > Params::GUPPIE_RAD) + { + float blend = sigmoid((hSim->camera.zoom - Params::GUPPIE_RAD) * 8.f); + if (isActive) + { + hSim->guppiePoint.setFillColor(mix(hSim->prms.worldColor, skinColor, blend)); + } + else + { + hSim->guppiePoint.setFillColor(mix(hSim->prms.worldColor, hSim->guppN, blend)); + } + + hSim->guppiePoint.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->window.draw(hSim->guppiePoint); + return; + } + + // Position and rotate + float posX = body->GetPosition().x; + float posY = body->GetPosition().y; + float rot = body->GetAngle() * Params::RAD_DGRS; + sf::ConvexShape *shape = nullptr; + + hSim->gOuterSkin.setPosition(posX, posY); + for (shape = &hSim->beak1; shape <= &hSim->tailMask; ++shape) + { + shape->setPosition(posX, posY); + shape->setRotation(rot); + } + hSim->innerBodyMask.setPosition(posX, posY); + hSim->innerBodyMask.setRotation(rot); + for (shape = hSim->thrusters; shape <= &hSim->eyeCavity; ++shape) + { + shape->setPosition(posX, posY); + shape->setRotation(rot); + } + + // Apply colors + // When inactive + if (!isActive) + { + // Skin + hSim->beak1.setFillColor(hSim->guppN); + hSim->beak2.setFillColor(hSim->guppN); + hSim->gOuterSkin.setFillColor(hSim->guppN); + for (int i = 0; i < 15; ++i) + { + hSim->eyeCells[i].setFillColor(hSim->prms.worldColor); + } + for (int i = 0; i < 30; ++i) + { + hSim->touchCells[i].setFillColor(hSim->guppN); + hSim->smellCells[i].setFillColor(hSim->guppN); + } + // Thrusters + for (int i = 0; i < 4; ++i) + { + hSim->thrusters[i].setFillColor(hSim->guppN); + } + // Heart + hSim->heart.setFillColor(hSim->guppN); + hSim->heartTop.setFillColor(hSim->guppN); + hSim->heartTri.setFillColor(hSim->guppN); + hSim->heartMask.setFillColor(hSim->guppN); + // Gland + hSim->gland.setFillColor(hSim->guppN); + } + // When active + else + { + // Outer skin + hSim->beak1.setFillColor(skinColor); + hSim->beak2.setFillColor(skinColor); + hSim->gOuterSkin.setFillColor(skinColor); + // Eye cells + for (int i = 0; i < 15; ++i) + { + sf::Color cellColor; + cellColor.r = eyeR[i] * 255.f; + cellColor.g = eyeG[i] * 255.f; + cellColor.b = eyeB[i] * 255.f; + hSim->eyeCells[i].setFillColor(cellColor); + } + // Skin cells + for (int i = 0; i < 30; ++i) + { + hSim->touchCells[i].setFillColor(mix(hSim->prms.guppieColorI, hSim->guppN, touch[i])); +// hSim->smellCells[i].setFillColor(mix(hSim->prms.guppieColorI, hSim->guppN, smell[i])); + } + // Thrusters + if (thruster1 > 0.f) + { + hSim->thrusters[3].setFillColor(mix(hSim->prms.guppieColorI, hSim->guppN, thruster1)); + hSim->thrusters[1].setFillColor(hSim->guppN); + } + else + { + hSim->thrusters[1].setFillColor(mix(hSim->prms.guppieColorI, hSim->guppN, -thruster1)); + hSim->thrusters[3].setFillColor(hSim->guppN); + } + + if (thruster2 > 0.f) + { + hSim->thrusters[2].setFillColor(mix(hSim->prms.guppieColorI, hSim->guppN, thruster2)); + hSim->thrusters[0].setFillColor(hSim->guppN); + } + else + { + hSim->thrusters[0].setFillColor(mix(hSim->prms.guppieColorI, hSim->guppN, -thruster2)); + hSim->thrusters[2].setFillColor(hSim->guppN); + } + // Heart beat + sf::Color beat = mix(hSim->guppN, hSim->prms.guppieColorI, sinf(((float)lifetime * (1.f + (1.f - lowEnergy))) / 15.f) / 2.f + 0.5f); + hSim->heart.setFillColor(beat); + hSim->heartTop.setFillColor(beat); + hSim->heartTri.setFillColor(beat); + // Stomach + if (lastContactStep) + { + if (lastContact == ZAPPER) + { + hSim->heartMask.setFillColor(mix(hSim->prms.zapperColor, hSim->guppN, (float)lastContactStep / (float)hSim->prms.contactSteps)); + } + else if (lastContact == PELLET) + { + hSim->heartMask.setFillColor(mix(hSim->prms.pelletColor, hSim->guppN, (float)lastContactStep / (float)hSim->prms.contactSteps)); + } + else if (lastContact == CORPSE) + { + hSim->heartMask.setFillColor(mix(hSim->prms.corpseColor, hSim->guppN, (float)lastContactStep / (float)hSim->prms.contactSteps)); + } + else + { + hSim->heartMask.setFillColor(mix(hSim->prms.guppieColorI, hSim->guppN, (float)lastContactStep / (float)hSim->prms.contactSteps)); + } + } + else + { + hSim->heartMask.setFillColor(hSim->guppN); + } + // Gland + if (glandState == ALPHA) + { + hSim->gland.setFillColor(hSim->prms.glandColor1); + } + else if (glandState == BETTA) + { + hSim->gland.setFillColor(hSim->prms.glandColor2); + } + else + { + hSim->gland.setFillColor(hSim->prms.glandColor3); + } + } + + // Draw + hSim->window.draw(hSim->gOuterSkin); + for (shape = &hSim->beak1; shape <= &hSim->tailMask; ++shape) + { + hSim->window.draw(*shape); + } + hSim->window.draw(hSim->innerBodyMask); + for (shape = hSim->thrusters; shape <= &hSim->eyeCavity; ++shape) + { + hSim->window.draw(*shape); + } + + if (hSim->camera.zoom > 0.02f) + { + if (isActive) + { + hSim->guppieShell.setOutlineColor(skinColor); + } + else + { + hSim->guppieShell.setOutlineColor(hSim->guppN); + } + + hSim->guppieShell.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->window.draw(hSim->guppieShell); + } + + if (!isActive) + { + hSim->guppieEgg.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->window.draw(hSim->guppieEgg); + } +} + + +void Guppie::clean() +{ + isActive = false; + lifetime = 0; + fitness = 0.; + energy = 0.f; + skinColor = hSim->guppN; +// nGland1 = 0.f; +// nGland2 = 0.f; +// nGland3 = 0.f; + lastContactStep = 0; +} diff --git a/Simulation/Guppie.hpp b/Simulation/Guppie.hpp new file mode 100644 index 0000000..14770ff --- /dev/null +++ b/Simulation/Guppie.hpp @@ -0,0 +1,58 @@ +#ifndef __GUPPIE_HPP__ +#define __GUPPIE_HPP__ + +#include +#include "Entity.hpp" + +class Guppie : public Entity +{ +public: + void startup(SimBase *sim); + void update(); + void draw(); + +private: + void destroy(); + void clean(); + + // State variables + bool isActive = false; + unsigned lifetime = 0; + double fitness = 0; + float energy = 0.f; + sf::Color skinColor; + enum gs { ALPHA = 0, BETTA = 1, GAMMA = 2 } glandState; +// float nGland1 = 0.f; +// float nGland2 = 0.f; +// float nGland3 = 0.f; + enum lc { ZAPPER, PELLET, CORPSE, GUPPIE } lastContact; + unsigned lastContactStep = 0; + + // Sensors + std::vector eyeR = std::vector(15, 0.f); + std::vector eyeG = std::vector(15, 0.f); + std::vector eyeB = std::vector(15, 0.f); + std::vector touch = std::vector(30, 0.f); +// std::vector smell = std::vector(30, 0.f); + float cColorR = 0.f, cColorG = 0.f, cColorB = 0.f; +// float cGland1 = 0.f, cGland2 = 0.f, cGland3 = 0.f; + float fwdSpeed = 0.f; + float sideSpeed = 0.f; + float rotation = 0.f; + float lowEnergy = 0.f; + + // Neural net + std::shared_ptr neuralNet; + + // Outputs + float thruster1 = 0.f, thruster2 = 0.f; + float addClrR = 0.f, addClrG = 0.f, addClrB = 0.f; +// float addGln1 = 0.f, addGln2 = 0.f, addGln3 = 0.f; + + friend class ContactListener; + friend class SimFitness; + friend class Entity; + friend class Camera; +}; + +#endif // __GUPPIE_HPP__ diff --git a/Simulation/GuppiesInclude.hpp b/Simulation/GuppiesInclude.hpp new file mode 100644 index 0000000..4a7bf94 --- /dev/null +++ b/Simulation/GuppiesInclude.hpp @@ -0,0 +1,6 @@ +#ifndef __GUPPIESINCLUDE_HPP__ +#define __GUPPIESINCLUDE_HPP__ + +#include "SimFitness.hpp" + +#endif // __GUPPIESINCLUDE_HPP__ diff --git a/Simulation/Params.hpp b/Simulation/Params.hpp new file mode 100644 index 0000000..979cd4e --- /dev/null +++ b/Simulation/Params.hpp @@ -0,0 +1,172 @@ +#ifndef __PARAMS_HPP__ +#define __PARAMS_HPP__ + +#include +#include + +#include +#include + +#include + + +enum SimStyle +{ + SELECTION_BY_FITNESS +}; + +struct Params +{ + // Variable parameters must be defined before simulation starts + + // Simulation params + SimStyle simStyle = SELECTION_BY_FITNESS; + // If selection by fitness + NeuralNetClass netClass = SIMPLE_RN; + NodeClass nodeClass = MEMORY_CELL; + unsigned npHiddenLayer = 80; + unsigned popSize = 30; + unsigned popQtty = 10; + unsigned elites = 30; + + // World params + float worldRad = 40.f; + + // Entity params + float zapperForce = 50.f;//100 + float zapperTorque = 150.f;//300 + unsigned zapperQtty = 20; + unsigned pelletQtty = 400; + unsigned pelletCreationDelay = 150; + bool startScarce = false; + bool corpseDecay = true; + float corpseDecayTime = 3600.f; + + // Goopy params + unsigned activationDelay = 120; + unsigned contactSteps = 15; + float thrustForce = 5.f; + float thrustRadius = 0.05f; + float initEnergy = 60.f; + float maxEnergy = 180.f; + float agingRate = 600.f; + bool leaveCorpse = true; + + // Energy transfers + float etFromZapper = -20.f; + float etFromPellet = 15.f; + float etFromGuppie = 60.f; + float etFromCorpse = 60.f; + + // Fitness bonus + float forPellet = 9000.f; + float forGuppie = 36000.f; + float forCorpse = 36000.f; + float forGoingStraight = 12.f; + + // Colors + sf::Color clearColor = { 0, 0, 10 }; + sf::Color worldColor = { 0, 0, 0 }; + sf::Color textColor = { 191, 191, 191 }; + sf::Color zapperColor = { 0, 0, 255 }; + sf::Color pelletColor = { 0, 255, 0 }; + sf::Color corpseColor = { 0, 255, 0 }; + sf::Color guppieColorI = { 255, 0, 0 }; + sf::Color glandColor1 = { 255, 127, 0 }; + sf::Color glandColor2 = { 0, 255, 127 }; + sf::Color glandColor3 = { 127, 0, 255 }; + + + // Constant values cant be changed + constexpr static unsigned WIN_WIDTH = 800; + constexpr static unsigned WIN_HEIGHT = 600; + constexpr static unsigned ANTIALIAS = 8; + constexpr static unsigned CAM_STEPS = 8; + constexpr static float ZAPPER_RAD = 5.f; + constexpr static float GUPPIE_RAD = 0.5f; + constexpr static float EGG_RAD = 1.5f; + constexpr static float CORPSE_RAD = 0.25f; + constexpr static float PELLET_RAD = 0.1f; + constexpr static float TXT_SIZE = 12.f; + constexpr static float MAX_ZOOM = 0.002f; + constexpr static float RAD_DGRS = 57.2957795f; +}; + + +// Utility functions +template +inline std::string nts(T num) +{ + std::ostringstream ss; + ss << num; + return ss.str(); +} + + +inline sf::Vector2f vecMult(const sf::Vector2f &v1, const sf::Vector2f &v2) +{ + return sf::Vector2f(v1.x * v2.x, v1.y * v2.y); +} + + +inline void setCenterRad(sf::CircleShape &circle, float radius) +{ + circle.setRadius(radius); + circle.setOrigin(radius, radius); +} + + +inline sf::Color mix(const sf::Color &clr1, const sf::Color &clr2, float f1 = 0.2f) +{ + sf::Color result; + float f2 = 1.f - f1; + + result.r = clr1.r * f1 + clr2.r * f2; + result.g = clr1.g * f1 + clr2.g * f2; + result.b = clr1.b * f1 + clr2.b * f2; + + return result; +} + + +// Utility classes +class QueryCallback : public b2QueryCallback +{ +public: + bool ReportFixture(b2Fixture* fixture) + { + b2Body* body = fixture->GetBody(); + if (body->GetType() != b2_staticBody) + { + bool inside = fixture->TestPoint(m_point); + if (inside) + { + m_fixture = fixture; + return false; + } + } + + return true; + } + + b2Vec2 m_point; + b2Fixture *m_fixture = nullptr; +}; + + +class RayCastCallback : public b2RayCastCallback +{ +public: + float32 ReportFixture(b2Fixture *fixture, const b2Vec2 &point, const b2Vec2 &normal, float32 fraction) + { + m_fixture = fixture; + m_fraction = fraction; + + return fraction; + } + + float m_fraction = 0.f; + b2Fixture *m_fixture = nullptr; +}; + +#endif // __PARAMS_HPP__ diff --git a/Simulation/Pellet.cpp b/Simulation/Pellet.cpp new file mode 100644 index 0000000..1a911ff --- /dev/null +++ b/Simulation/Pellet.cpp @@ -0,0 +1,66 @@ +#include "Pellet.hpp" +#include "SimBase.hpp" + +void Pellet::startup(SimBase *sim) +{ + hSim = sim; + radius = Params::PELLET_RAD; +} + + +void Pellet::update() +{ + if (!body) + { + return; + } + + if (toBeDestroyed) + { + destroy(); + } +} + + +void Pellet::destroy() +{ + toBeDestroyed = false; + hSim->tank.world.DestroyBody(body); + body = nullptr; + + --hSim->pelletCount; + hSim->text.pelletCnt.setString("Pellet count: " + nts(hSim->pelletCount) + " / " + nts(hSim->prms.pelletQtty)); +} + + +void Pellet::draw() +{ + if (!body) + { + return; + } + + sf::Vector2f vSize = hSim->window.getView().getSize(); + sf::Vector2f vCent = hSim->window.getView().getCenter(); + if ( body->GetPosition().x + radius < vCent.x - vSize.x / 2.f || + body->GetPosition().y + radius < vCent.y - vSize.y / 2.f || + body->GetPosition().x - radius > vCent.x + vSize.x / 2.f || + body->GetPosition().y - radius > vCent.y + vSize.y / 2.f ) + { + return; + } + + if (hSim->camera.zoom > Params::PELLET_RAD / 2.f) + { + hSim->pelletPoint.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->window.draw(hSim->pelletPoint); + } + else + { + hSim->pelletShell.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->pelletNucleus.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->pelletNucleus.setRotation(body->GetAngle() * hSim->prms.RAD_DGRS); + hSim->window.draw(hSim->pelletShell); + hSim->window.draw(hSim->pelletNucleus); + } +} diff --git a/Simulation/Pellet.hpp b/Simulation/Pellet.hpp new file mode 100644 index 0000000..f3c31f8 --- /dev/null +++ b/Simulation/Pellet.hpp @@ -0,0 +1,20 @@ +#ifndef __PELLET_HPP__ +#define __PELLET_HPP__ + +#include "Entity.hpp" + +class Pellet : public Entity +{ +public: + void startup(SimBase *sim); + void update(); + void draw(); + + bool isCreated() const { return body ? true : false; } + bool toBeDestroyed = false; + +private: + void destroy(); +}; + +#endif // __PELLET_HPP__ diff --git a/Simulation/SimBase.hpp b/Simulation/SimBase.hpp new file mode 100644 index 0000000..83e7f4c --- /dev/null +++ b/Simulation/SimBase.hpp @@ -0,0 +1,70 @@ +#ifndef __SIMBASE_HPP__ +#define __SIMBASE_HPP__ + +//#include +#include + +#include "Params.hpp" +#include "GraphicObjs.hpp" + +#include "Camera.hpp" +#include "Tank.hpp" +#include "TextDisplay.hpp" +#include "Zapper.hpp" +#include "Pellet.hpp" +#include "Guppie.hpp" +#include "Corpse.hpp" + +class SimBase : public GraphicObjs +{ +public: + bool createNew(const Params &usrPrms); + //bool load(const std::ifstream &file); + void execute(); + +protected: + void prepareGraphics(); + void update(); + void draw(); + + virtual bool startSpecs() = 0; + virtual void updateSpecs() = 0; + //void onClose(); + + Params prms; + sf::RenderWindow window; + Camera camera; + Tank tank; + TextDisplay text; + + sf::Clock timer; + unsigned frameCounter = 0; + + bool paused = false; + bool gfx = true; + bool displayText = true; + bool vSync = true; + bool fullscreen = false; + unsigned step = 0; + + unsigned pelletCount = 0; + unsigned guppieCount = 0; + unsigned corpseCount = 0; + + std::list zappers; + std::list pellets; + std::list guppies; + std::list corpses; + + friend class Camera; + friend class Tank; + friend class ContactListener; + friend class TextDisplay; + friend class Entity; + friend class Zapper; + friend class Pellet; + friend class Corpse; + friend class Guppie; +}; + +#endif // __SIMBASE_HPP__ diff --git a/Simulation/SimBase_CreateNew.cpp b/Simulation/SimBase_CreateNew.cpp new file mode 100644 index 0000000..de752aa --- /dev/null +++ b/Simulation/SimBase_CreateNew.cpp @@ -0,0 +1,49 @@ +#include "SimBase.hpp" + +bool SimBase::createNew(const Params &usrPrms) +{ + prms = usrPrms; + + seedRand(); + + sf::VideoMode vmd = sf::VideoMode(prms.WIN_WIDTH, prms.WIN_HEIGHT); + sf::ContextSettings ctx = sf::ContextSettings(0, 0, prms.ANTIALIAS, 2, 0); + window.create(vmd, "Neural Guppies - 0.1 beta", sf::Style::Default, ctx); + window.setVerticalSyncEnabled(vSync); + + sf::Image icon; + icon.loadFromFile("gfx/icon.png"); + window.setIcon(32, 32, icon.getPixelsPtr()); + + prepareGraphics(); + + camera.create(this); + tank.create(this); + + zappers.resize(prms.zapperQtty); + for (auto &i : zappers) + { + i.startup(this); + i.create(); + } + + pellets.resize(prms.pelletQtty); + for (auto &i : pellets) + { + i.startup(this); + } + if (!prms.startScarce) + { + for (auto &i : pellets) + { + i.create(); + } + } + + if (!startSpecs()) + { + return false; + } + + return true; +} diff --git a/Simulation/SimBase_Draw.cpp b/Simulation/SimBase_Draw.cpp new file mode 100644 index 0000000..0bfe915 --- /dev/null +++ b/Simulation/SimBase_Draw.cpp @@ -0,0 +1,40 @@ +#include "SimBase.hpp" + +void SimBase::draw() +{ + window.clear(prms.clearColor); + + camera.update(); + + if (gfx) + { + tank.draw(); + + for (auto &i : zappers) + { + i.draw(); + } + + for (auto &i : pellets) + { + i.draw(); + } + + for (auto &i : guppies) + { + i.draw(); + } + + for (auto &i : corpses) + { + i.draw(); + } + } + + if (displayText) + { + text.print(); + } + + window.display(); +} diff --git a/Simulation/SimBase_Execute.cpp b/Simulation/SimBase_Execute.cpp new file mode 100644 index 0000000..eb3166a --- /dev/null +++ b/Simulation/SimBase_Execute.cpp @@ -0,0 +1,152 @@ +#include "SimBase.hpp" + +void SimBase::execute() +{ + while (window.isOpen()) + { + update(); + + sf::Event event; + while (window.pollEvent(event)) + { + if (event.type == sf::Event::Closed) + { + window.close(); + } + + if (event.type == sf::Event::Resized) + { + camera.onResize(); + } + + if (event.type == sf::Event::MouseButtonPressed) + { + if (event.mouseButton.button == sf::Mouse::Button::Left) + { + camera.onClick(); + } + } + + if (event.type == sf::Event::MouseWheelMoved) + { + sf::Vector2f mousePos = window.mapPixelToCoords(sf::Mouse::getPosition(window)); + float f1 = 2.f / 10.f; + float f2 = 1.f - f1; + + if (event.mouseWheel.delta > 0) + { + sf::Vector2f target = camera.getCrds() * f2 + mousePos * f1; + camera.shift(target, 1); + } + else + { + mousePos = camera.getCrds() * 2.f - mousePos; + sf::Vector2f target = camera.getCrds() * f2 + mousePos * f1; + camera.shift(target, -1); + } + } + + if (event.type == sf::Event::KeyPressed) + { + if (event.key.code == sf::Keyboard::Escape) + { + window.close(); + } + + if (event.key.code == sf::Keyboard::Space) + { + paused = !paused; + text.simState.setString("Sim. state: " + std::string(paused ? "PAUSED" : "RUNNING")); + } + + if (event.key.code == sf::Keyboard::G) + { + gfx = !gfx; + text.gfx.setString("Graphics: " + std::string(gfx ? "ON" : "OFF")); + } + + if (event.key.code == sf::Keyboard::T) + { + displayText = !displayText; + } + + if (event.key.code == sf::Keyboard::V) + { + vSync = !vSync; + window.setVerticalSyncEnabled(vSync); + text.vSync.setString("V. Sync: " + std::string(vSync ? "ON" : "OFF")); + } + + if (event.key.code == sf::Keyboard::Z) + { + camera.shift(sf::Vector2f(), -2); + } + + if (event.key.code == sf::Keyboard::F11) + { + sf::ContextSettings ctx = window.getSettings(); + std::string title = "Neural Guppies - 0.1 beta"; + + if (fullscreen) + { + fullscreen = false; + window.create(sf::VideoMode(prms.WIN_WIDTH, prms.WIN_HEIGHT), title, sf::Style::Default, ctx); + sf::Image icon; + icon.loadFromFile("gfx/icon.png"); + window.setIcon(32, 32, icon.getPixelsPtr()); + } + else + { + fullscreen = true; + window.create(sf::VideoMode::getDesktopMode(), title, sf::Style::Fullscreen, ctx); + } + + window.setVerticalSyncEnabled(vSync); + camera.onResize(); + } + + if (event.key.code == sf::Keyboard::I) + { + camera.shift(camera.getCrds(), 1, false); + } + + if (event.key.code == sf::Keyboard::O) + { + camera.shift(camera.getCrds(), -1, false); + } + + if ( event.key.code == sf::Keyboard::W || + event.key.code == sf::Keyboard::A || + event.key.code == sf::Keyboard::S || + event.key.code == sf::Keyboard::D ) + { + float shift = 30.f * camera.getZoom(); + sf::Vector2f shiftVec; + + if (event.key.code == sf::Keyboard::W) + { + shiftVec.y = -shift; + } + else if (event.key.code == sf::Keyboard::A) + { + shiftVec.x = -shift; + } + else if (event.key.code == sf::Keyboard::S) + { + shiftVec.y = shift; + } + else if (event.key.code == sf::Keyboard::D) + { + shiftVec.x = shift; + } + + camera.shift(camera.getCrds() + shiftVec); + } + } + } + + draw(); + } + + //onClose(); +} diff --git a/Simulation/SimBase_PrepareGraphics.cpp b/Simulation/SimBase_PrepareGraphics.cpp new file mode 100644 index 0000000..ba7b56d --- /dev/null +++ b/Simulation/SimBase_PrepareGraphics.cpp @@ -0,0 +1,269 @@ +#include "SimBase.hpp" + +void SimBase::prepareGraphics() +{ + // Prepare zappers + setCenterRad(zapperShell, prms.ZAPPER_RAD); + zapperShell.setPointCount(180); + zapperShell.setFillColor(mix(prms.zapperColor, prms.worldColor)); + zapperShell.setOutlineColor(prms.zapperColor); + setCenterRad(zapperNucleus, prms.ZAPPER_RAD); + zapperNucleus.setFillColor(prms.zapperColor); + + // Prepare pellets + setCenterRad(pelletShell, prms.PELLET_RAD); + pelletShell.setPointCount(60); + pelletShell.setFillColor(mix(prms.pelletColor, prms.worldColor)); + pelletShell.setOutlineColor(prms.pelletColor); + setCenterRad(pelletNucleus, prms.PELLET_RAD); + pelletNucleus.setFillColor(prms.pelletColor); + + // Prepare corpses + setCenterRad(corpseShell, prms.CORPSE_RAD); + corpseShell.setPointCount(60); + corpseShell.setFillColor(mix(prms.corpseColor, prms.worldColor)); + corpseShell.setOutlineColor(prms.corpseColor); + setCenterRad(corpseNucleus, prms.CORPSE_RAD); + corpseNucleus.setFillColor(prms.corpseColor); + + // Prepare guppies + guppieShell.setFillColor(sf::Color::Transparent); + guppN = mix(prms.guppieColorI, prms.worldColor, 0.1f); + // Prepare egg + guppieEgg.setFillColor(sf::Color::Transparent); + guppieEgg.setOutlineColor(guppN); + guppieEgg.setRadius(prms.EGG_RAD); + // Prepare vision cone shape + sf::CircleShape fovTempA = sf::CircleShape(10.f, 360); + sf::ConvexShape fovTemp; + fovTemp.setPointCount(360); + for (int i = 0; i < 360; ++i) + { + fovTemp.setPoint(i, fovTempA.getPoint(i) - sf::Vector2f(10.f, 10.f + prms.GUPPIE_RAD)); + } + for (int i = 0; i < 15; ++i) + { + visionCone[i] = fovTemp.getPoint(i * 2 + 331); + } + for (int i = 0; i < 15; ++i) + { + visionCone[i + 15] = fovTemp.getPoint(i * 2 + 1); + } + visionCone[30] = sf::Vector2f(0.f, -prms.GUPPIE_RAD); + // Prepare beaks + beak1.setPointCount(3); + beak1.setPoint(0, sf::Vector2f(0.f, -0.5f)); + beak1.setPoint(1, sf::Vector2f(0.0116f, -0.5201f)); + beak1.setPoint(2, sf::Vector2f(0.0236f, -0.4994f)); + beak2.setPointCount(3); + beak2.setPoint(0, sf::Vector2f(0.f, -0.5f)); + beak2.setPoint(1, sf::Vector2f(-0.0116f, -0.5201f)); + beak2.setPoint(2, sf::Vector2f(-0.0236f, -0.4994f)); + // Prepare skin radius shape + sf::CircleShape sknTempA = sf::CircleShape(prms.GUPPIE_RAD, 360); + sf::ConvexShape sknTemp; + sknTemp.setPointCount(360); + for (int i = 0; i < 360; ++i) + { + sknTemp.setPoint(i, sknTempA.getPoint(i) - sf::Vector2f(prms.GUPPIE_RAD, prms.GUPPIE_RAD)); + } + for (int i = 0; i < 180; ++i) + { + skinRadius[i] = sknTemp.getPoint(i * 2 + 1); + } + // Prepare sense radius shape + sf::CircleShape snsTempA = sf::CircleShape(10.f, 360); + sf::ConvexShape snsTemp; + snsTemp.setPointCount(360); + for (int i = 0; i < 360; ++i) + { + snsTemp.setPoint(i, snsTempA.getPoint(i) - sf::Vector2f(10.f, 10.f)); + } + for (int i = 0; i < 180; ++i) + { + senseRadius[i] = snsTemp.getPoint(i * 2 + 1); + } + // Draw skin + gOuterSkin.setPointCount(180); + setCenterRad(gOuterSkin, prms.GUPPIE_RAD); + // Draw touch and smell cells + sf::CircleShape tcTemp = sf::CircleShape(prms.GUPPIE_RAD - 0.04f, 180); + tcTemp.setOrigin(prms.GUPPIE_RAD - 0.04f, prms.GUPPIE_RAD - 0.04f); + sf::CircleShape scTemp = sf::CircleShape(prms.GUPPIE_RAD - 0.06f, 180); + scTemp.setOrigin(prms.GUPPIE_RAD - 0.06f, prms.GUPPIE_RAD - 0.06f); + for (int i = 0; i < 30; ++i) + { + touchCells[i].setPointCount(8); + smellCells[i].setPointCount(8); + for (int j = 0; j < 7; ++j) + { + touchCells[i].setPoint(j, tcTemp.getPoint((i * 6 + j) % 180)); + smellCells[i].setPoint(j, scTemp.getPoint((i * 6 + j) % 180)); + } + touchCells[i].setPoint(7, tcTemp.getOrigin()); + touchCells[i].setOrigin(tcTemp.getOrigin()); + smellCells[i].setPoint(7, scTemp.getOrigin()); + smellCells[i].setOrigin(scTemp.getOrigin()); + smellCells[i].setFillColor(guppN); + } + // Draw inner body masks + tailMask.setFillColor(guppN); + tailMask.setPointCount(3); + tailMask.setPoint(0, sf::Vector2f(0.f, 0.5f)); + tailMask.setPoint(1, sf::Vector2f(-0.0478f, 0.4173f)); + tailMask.setPoint(2, sf::Vector2f( 0.0478f, 0.4173f)); + innerBodyMask.setFillColor(guppN); + innerBodyMask.setPointCount(180); + setCenterRad(innerBodyMask, prms.GUPPIE_RAD - 0.08f); + // Draw thrusters + sf::CircleShape thTemp = sf::CircleShape(prms.GUPPIE_RAD - 0.1f, 180); + for (int i = 0; i < 4; ++i) + { + thrusters[i].setPointCount(41); + thrusters[i].setOrigin(prms.GUPPIE_RAD - 0.1f, prms.GUPPIE_RAD - 0.1f); + } + thrusters[0].setPoint(0, sf::Vector2f(0.4863f, 0.0094f)); + for (int i = 0; i < 38; ++i) + { + thrusters[0].setPoint(i + 1, thTemp.getPoint(i + 7)); + } + thrusters[0].setPoint(39, sf::Vector2f(0.7999f, 0.39f)); + thrusters[0].setPoint(40, sf::Vector2f(prms.GUPPIE_RAD - 0.1f, 0.39f)); + for (int i = 0; i < 41; ++i) + { + sf::Vector2f p1 = vecMult(thrusters[0].getPoint(i), sf::Vector2f(-1.f, 1.f)) + sf::Vector2f((prms.GUPPIE_RAD - 0.1f) * 2.f, 0.f); + sf::Vector2f p2 = vecMult(thrusters[0].getPoint(i), sf::Vector2f(1.f, -1.f)) + sf::Vector2f(0.f, (prms.GUPPIE_RAD - 0.1f) * 2.f); + sf::Vector2f p3 = vecMult(thrusters[0].getPoint(i), sf::Vector2f(-1.f, -1.f)) + sf::Vector2f((prms.GUPPIE_RAD - 0.1f) * 2.f, (prms.GUPPIE_RAD - 0.1f) * 2.f); + thrusters[1].setPoint(i, p1); + thrusters[2].setPoint(i, p2); + thrusters[3].setPoint(i, p3); + } + // Draw thruster mask + thrusterMask.setFillColor(guppN); + thrusterMask.setPointCount(48); + thrusterMask.setPoint(0, sf::Vector2f(0.0863f, -0.3906f)); + thrusterMask.setPoint(1, sf::Vector2f(0.214f, -0.1694f)); + thrusterMask.setPoint(2, sf::Vector2f(0.2148f, -0.1679f)); + thrusterMask.setPoint(3, sf::Vector2f(0.2237f, -0.1509f)); + thrusterMask.setPoint(4, sf::Vector2f(0.2313f, -0.1335f)); + thrusterMask.setPoint(5, sf::Vector2f(0.2377f, -0.1159f)); + thrusterMask.setPoint(6, sf::Vector2f(0.2429f, -0.0981f)); + thrusterMask.setPoint(7, sf::Vector2f(0.2471f, -0.0803f)); + thrusterMask.setPoint(8, sf::Vector2f(0.2504f, -0.0624f)); + thrusterMask.setPoint(9, sf::Vector2f(0.2527f, -0.0446f)); + thrusterMask.setPoint(10, sf::Vector2f(0.2542f, -0.0267f)); + thrusterMask.setPoint(11, sf::Vector2f(0.2549f, -0.01f)); + for (int i = 0; i < 12; ++i) + { + thrusterMask.setPoint(i + 12, vecMult(thrusterMask.getPoint(11 - i), sf::Vector2f(1.f, -1.f))); + } + for (int i = 0; i < 24; ++i) + { + thrusterMask.setPoint(i + 24, vecMult(thrusterMask.getPoint(23 - i), sf::Vector2f(-1.f, 1.f))); + } + // Draw heart + heart.setPointCount(43); + heart.setPoint(0, sf::Vector2f(0.1883f, -0.1321f)); + heart.setPoint(1, sf::Vector2f(0.1901f, -0.1282f)); + heart.setPoint(2, sf::Vector2f(0.1962f, -0.1133f)); + heart.setPoint(3, sf::Vector2f(0.2013f, -0.0982f)); + heart.setPoint(4, sf::Vector2f(0.2055f, -0.0830f)); + heart.setPoint(5, sf::Vector2f(0.2088f, -0.0679f)); + heart.setPoint(6, sf::Vector2f(0.2114f, -0.0527f)); + heart.setPoint(7, sf::Vector2f(0.2132f, -0.0376f)); + heart.setPoint(8, sf::Vector2f(0.2144f, -0.0225f)); + heart.setPoint(9, sf::Vector2f(0.2149f, -0.0075f)); + for (int i = 0; i < 9; ++i) + { + heart.setPoint(i + 10, vecMult(heart.getPoint(9 - i), sf::Vector2f(1.f, -1.f))); + } + heart.setPoint(19, sf::Vector2f(0.1829f, 0.1429f)); + heart.setPoint(20, sf::Vector2f(0.1793f, 0.1494f)); + heart.setPoint(21, sf::Vector2f(0.f, 0.46f)); + for (int i = 0; i < 21; ++i) + { + heart.setPoint(i + 22, vecMult(heart.getPoint(20 - i), sf::Vector2f(-1.f, 1.f))); + } + // Draw heart mask + heartMask.setFillColor(guppN); + heartMask.setPointCount(37); + heartMask.setPoint(0, sf::Vector2f(0.1655f, -0.078f)); + heartMask.setPoint(1, sf::Vector2f(0.168f, -0.0679f)); + heartMask.setPoint(2, sf::Vector2f(0.1705f, -0.0554f)); + heartMask.setPoint(3, sf::Vector2f(0.1723f, -0.043f)); + heartMask.setPoint(4, sf::Vector2f(0.1737f, -0.0306f)); + heartMask.setPoint(5, sf::Vector2f(0.1745f, -0.0183f)); + heartMask.setPoint(6, sf::Vector2f(0.1749f, -0.0061f)); + for (int i = 0; i < 6; ++i) + { + heartMask.setPoint(i + 7, vecMult(heartMask.getPoint(6 - i), sf::Vector2f(1.f, -1.f))); + } + heartMask.setPoint(13, sf::Vector2f(0.1648f, 0.0804f)); + heartMask.setPoint(14, sf::Vector2f(0.1610f, 0.093f)); + heartMask.setPoint(15, sf::Vector2f(0.1563f, 0.1055f)); + heartMask.setPoint(16, sf::Vector2f(0.1508f, 0.1178f)); + heartMask.setPoint(17, sf::Vector2f(0.1447f, 0.1294f)); + heartMask.setPoint(18, sf::Vector2f(0.f, 0.38f)); + for (int i = 0; i < 18; ++i) + { + heartMask.setPoint(i + 19, vecMult(heartMask.getPoint(17 - i), sf::Vector2f(-1.f, 1.f))); + } + // Draw heart top + heartTop.setPointCount(8); + heartTop.setPoint(0, sf::Vector2f(-0.1655f, -0.0780f)); + heartTop.setPoint(1, sf::Vector2f(-0.1401f, -0.0689f)); + heartTop.setPoint(2, sf::Vector2f(-0.1097f, -0.0601f)); + heartTop.setPoint(3, sf::Vector2f(-0.1025f, -0.0584f)); + for (int i = 0; i < 4; ++i) + { + heartTop.setPoint(i + 4, vecMult(heartTop.getPoint(3 - i), sf::Vector2f(-1.f, 1.f))); + } + // Draw heart triangle + heartTri.setPointCount(3); + heartTri.setPoint(0, sf::Vector2f(-0.1025f, -0.0584f)); + heartTri.setPoint(1, sf::Vector2f(0.f, 0.0935f)); + heartTri.setPoint(2, sf::Vector2f(0.1025f, -0.0584f)); + // Draw gland mask + glandMask.setFillColor(guppN); + glandMask.setPointCount(3); + glandMask.setPoint(0, sf::Vector2f(-0.0783f, -0.0942f)); + glandMask.setPoint(1, sf::Vector2f(0.f, 0.022f)); + glandMask.setPoint(2, sf::Vector2f(0.0783f, -0.0942f)); + // Draw gland + gland.setPointCount(3); + gland.setPoint(0, sf::Vector2f(-0.0513f, -0.0899f)); + gland.setPoint(1, sf::Vector2f(0.f, -0.0138f)); + gland.setPoint(2, sf::Vector2f(0.0513f, -0.0899f)); + // Draw eye mask + sf::CircleShape emTemp = sf::CircleShape(0.4133f, 180); + eyeMask.setFillColor(guppN); + eyeMask.setOrigin(0.4133f, 0.9133f); + eyeMask.setPointCount(32); + for (int i = 0; i < 31; ++i) + { + eyeMask.setPoint(i, emTemp.getPoint(i + 75)); + } + eyeMask.setPoint(31, sf::Vector2f(0.4133f, 0.4133f)); + // Draw eye cells + sf::CircleShape ecTemp = sf::CircleShape(0.3933f, 180); + for (int i = 0; i < 15; ++i) + { + eyeCells[i].setPointCount(4); + eyeCells[i].setOrigin(0.3933f, 0.8933f); + for (int j = 0; j < 3; ++j) + { + eyeCells[i].setPoint(j, ecTemp.getPoint(i * 2 + j + 75)); + } + eyeCells[i].setPoint(3, sf::Vector2f(0.3933f, 0.3933f)); + } + // Draw eye cavity + sf::CircleShape ekTemp = sf::CircleShape(0.3333f, 180); + eyeCavity.setPointCount(32); + eyeCavity.setFillColor(prms.worldColor); + eyeCavity.setOrigin(0.3333f, 0.8333f); + for (int i = 0; i < 31; ++i) + { + eyeCavity.setPoint(i, ekTemp.getPoint(i + 75)); + } + eyeCavity.setPoint(31, sf::Vector2f(0.3333f, 0.3333f)); +} diff --git a/Simulation/SimBase_Update.cpp b/Simulation/SimBase_Update.cpp new file mode 100644 index 0000000..fc50c58 --- /dev/null +++ b/Simulation/SimBase_Update.cpp @@ -0,0 +1,55 @@ +#include "SimBase.hpp" + +void SimBase::update() +{ + if (paused) + { + camera.update(); + return; + } + + ++step; + text.steps.setString("Steps: " + nts(step)); + + if (timer.getElapsedTime().asSeconds() > 1.f) + { + timer.restart(); + text.fps.setString("FPS: " + nts(frameCounter)); + frameCounter = 0; + } + else + { + ++frameCounter; + } + + for (auto &i : zappers) + { + i.update(); + } + + // Create new pellet if needed + if (pelletCount < prms.pelletQtty && !(step % prms.pelletCreationDelay)) + { + for (auto &i : pellets) + { + if (!i.isCreated()) + { + i.create(); + break; + } + } + } + for (auto &i : pellets) + { + i.update(); + } + + for (auto &i : corpses) + { + i.update(); + } + + updateSpecs(); + + tank.updateAllPhysics(); +} diff --git a/Simulation/SimFitness.hpp b/Simulation/SimFitness.hpp new file mode 100644 index 0000000..7eb7974 --- /dev/null +++ b/Simulation/SimFitness.hpp @@ -0,0 +1,26 @@ +#ifndef __SIMFITNESS_HPP__ +#define __SIMFITNESS_HPP__ + +#include +#include +#include +#include +#include + +#include "SimBase.hpp" + +class SimFitness : public SimBase +{ + bool startSpecs(); + void updateSpecs(); + + std::unique_ptr population; + + unsigned currentPopulation = 0; + unsigned currentGeneration = 0; + unsigned fitnessRecord = 0; + + friend class Guppie; +}; + +#endif // __SIMFITNESS_HPP__ diff --git a/Simulation/SimFitness_StartSpecs.cpp b/Simulation/SimFitness_StartSpecs.cpp new file mode 100644 index 0000000..8fe1a41 --- /dev/null +++ b/Simulation/SimFitness_StartSpecs.cpp @@ -0,0 +1,60 @@ +#include "SimFitness.hpp" + +bool SimFitness::startSpecs() +{ + if (!text.startup(this, SELECTION_BY_FITNESS)) + { + return false; + } + + std::unique_ptr dummy; + if (prms.netClass == SINGLE_MLP) + { + dummy = std::unique_ptr(new SingleMLP(82, prms.npHiddenLayer, 5, prms.nodeClass, true)); + } + else if (prms.netClass == DUAL_MLP) + { + dummy = std::unique_ptr(new DualMLP(82, prms.npHiddenLayer, 5, prms.nodeClass, true)); + } + else if (prms.netClass == SIMPLE_RN) + { + dummy = std::unique_ptr(new SimpleRN(82, prms.npHiddenLayer, 5, prms.nodeClass, true)); + } + else if (prms.netClass == FULLY_RN) + { + dummy = std::unique_ptr(new FullyRN(82, prms.npHiddenLayer, 5, prms.nodeClass, true)); + } + unsigned chromosomeSize = dummy->getChromosomeSize(); + population = std::unique_ptr(new Population(prms.popQtty * prms.popSize, prms.elites, chromosomeSize)); + + // Set first population + guppies.resize(prms.popSize); + unsigned index = 0; + for (auto &i : guppies) + { + i.startup(this); + if (prms.netClass == SINGLE_MLP) + { + i.neuralNet = std::shared_ptr(new SingleMLP(82, prms.npHiddenLayer, 5, prms.nodeClass, true)); + } + else if (prms.netClass == DUAL_MLP) + { + i.neuralNet = std::shared_ptr(new DualMLP(82, prms.npHiddenLayer, 5, prms.nodeClass, true)); + } + else if (prms.netClass == SIMPLE_RN) + { + i.neuralNet = std::shared_ptr(new SimpleRN(82, prms.npHiddenLayer, 5, prms.nodeClass, true)); + } + else if (prms.netClass == FULLY_RN) + { + i.neuralNet = std::shared_ptr(new FullyRN(82, prms.npHiddenLayer, 5, prms.nodeClass, true)); + } + i.create(); + // Set neural net initial random weights + i.neuralNet->setChromosome(population->getChromosome(index)); + + ++index; + } + + return true; +} diff --git a/Simulation/SimFitness_UpdateSpecs.cpp b/Simulation/SimFitness_UpdateSpecs.cpp new file mode 100644 index 0000000..3919914 --- /dev/null +++ b/Simulation/SimFitness_UpdateSpecs.cpp @@ -0,0 +1,40 @@ +#include "SimFitness.hpp" + +void SimFitness::updateSpecs() +{ + for (auto &i : guppies) + { + i.update(); + } + + if (!guppieCount) + { + unsigned soul = 0; + for (auto &i : guppies) + { + population->setFitness(currentPopulation * prms.popSize + soul, (unsigned)i.fitness); + ++soul; + } + + ++currentPopulation; + if (currentPopulation == prms.popQtty) + { + population->roulleteWheel(); + + currentPopulation = 0; + ++currentGeneration; + } + + unsigned index = 0; + for (auto &i : guppies) + { + i.clean(); + i.create(); + i.neuralNet->setChromosome(population->getChromosome(currentPopulation * prms.popSize + index)); + ++index; + } + + text.currentPop.setString("Current population: " + nts(currentPopulation + 1) + " / " + nts(prms.popQtty)); + text.currentGen.setString("Current generation: " + nts(currentGeneration + 1)); + } +} diff --git a/Simulation/Tank.cpp b/Simulation/Tank.cpp new file mode 100644 index 0000000..7d0c6d1 --- /dev/null +++ b/Simulation/Tank.cpp @@ -0,0 +1,52 @@ +#include "Tank.hpp" +#include "SimBase.hpp" + +void Tank::create(SimBase *sim) +{ + hSim = sim; + + // Prepare tank graphics + setCenterRad(worldEdges, hSim->prms.worldRad); + worldEdges.setPointCount(360); + worldEdges.setFillColor(hSim->prms.worldColor); + worldEdges.setOutlineColor(hSim->prms.zapperColor); + worldEdges.setOutlineThickness(hSim->prms.worldRad / 100.f); + + // Prepare tank physics + world.SetAllowSleeping(true); + contactListener.hSim = hSim; + world.SetContactListener(&contactListener); + + // Create edge of the world + b2BodyDef worldDef; + worldDef.type = b2_staticBody; + + tankEdge = world.CreateBody(&worldDef); + + b2ChainShape shape; + b2Vec2 vrtx[360]; + for (int dgr = 0; dgr < 360; ++dgr) + { + vrtx[dgr].Set(cosf((float)dgr / Params::RAD_DGRS), sinf((float)dgr / Params::RAD_DGRS)), + vrtx[dgr] *= hSim->prms.worldRad; + } + shape.CreateLoop(vrtx, 360); + + b2FixtureDef worldFix; + worldFix.shape = &shape; + worldFix.friction = 1.f; + + tankEdge->CreateFixture(&worldFix); +} + + +void Tank::updateAllPhysics() +{ + world.Step(1.f / 60.f, 8, 3); +} + + +void Tank::draw() +{ + hSim->window.draw(worldEdges); +} diff --git a/Simulation/Tank.hpp b/Simulation/Tank.hpp new file mode 100644 index 0000000..f11d42b --- /dev/null +++ b/Simulation/Tank.hpp @@ -0,0 +1,34 @@ +#ifndef __TANK_HPP__ +#define __TANK_HPP__ + +#include +#include + +#include "ContactListener.hpp" + +class SimBase; + +class Tank +{ +public: + void create(SimBase *sim); + void updateAllPhysics(); + void draw(); + +private: + SimBase *hSim = nullptr; + + b2World world = b2World(b2Vec2(0.f, 0.f)); + sf::CircleShape worldEdges; + b2Body *tankEdge = nullptr; + + ContactListener contactListener; + + friend class Camera; + friend class Entity; + friend class Pellet; + friend class Guppie; + friend class Corpse; +}; + +#endif // __TANK_HPP__ diff --git a/Simulation/TextDisplay.cpp b/Simulation/TextDisplay.cpp new file mode 100644 index 0000000..6cdd1ad --- /dev/null +++ b/Simulation/TextDisplay.cpp @@ -0,0 +1,136 @@ +#include "TextDisplay.hpp" +#include "SimBase.hpp" + +#include + +bool TextDisplay::startup(SimBase *sim, SimStyle style) +{ + hSim = sim; + sStyle = style; + + if (!font.loadFromFile("gfx\\font.ttf")) + { + return false; + } + + const float TXT_MARGIN = Params::TXT_SIZE / 2.f; + + // RIGHT PANEL + // Prepare left panel text + simState = sf::Text("Sim. state: RUNNING", font, Params::TXT_SIZE); + steps = sf::Text("Steps: 0", font, Params::TXT_SIZE); + // Separator + fps = sf::Text("FPS: 0", font, Params::TXT_SIZE); + gfx = sf::Text("Graphics: ON", font, Params::TXT_SIZE); + vSync = sf::Text("V. Sync: ON", font, Params::TXT_SIZE); + // Separator + worldRad = sf::Text("World radius: " + nts(hSim->prms.worldRad), font, Params::TXT_SIZE); + // Separator + zapperCnt = sf::Text("Zapper count: " + nts(hSim->prms.zapperQtty), font, Params::TXT_SIZE); + pelletCnt = sf::Text("Pellet count: " + nts(hSim->pelletCount) + " / " + nts(hSim->prms.pelletQtty), font, Params::TXT_SIZE); + guppieCnt = sf::Text("Guppie count: 0", font, Params::TXT_SIZE); + corpseCnt = sf::Text("Corpse count: 0", font, Params::TXT_SIZE); + if (sStyle == SELECTION_BY_FITNESS) + { + simStyle = sf::Text("Sim. style: FITNESS SELECTION", font, Params::TXT_SIZE); + currentPop = sf::Text("Current population: 1 / " + nts(hSim->prms.popQtty), font, Params::TXT_SIZE); + currentGen = sf::Text("Current generation: 1", font, Params::TXT_SIZE); + // Separator + longestLife = sf::Text("Fitness record: 0", font, Params::TXT_SIZE); + } + // Position and color text items + sf::Text *line = nullptr; + float posX = TXT_MARGIN * 2.f; + float posY = TXT_MARGIN * 2.f - Params::TXT_SIZE / 4.f; + for (line = &simState; line <= &corpseCnt; ++line) + { + line->setPosition(posX, posY); + line->setColor(hSim->prms.textColor); + posY += Params::TXT_SIZE; + if (line == &steps || line == &vSync || line == &worldRad || line == &corpseCnt) + { + posY += Params::TXT_SIZE; + } + } + if (sStyle == SELECTION_BY_FITNESS) + { + for (line = &simStyle; line <= &longestLife; ++line) + { + line->setPosition(posX, posY); + line->setColor(hSim->prms.textColor); + posY += Params::TXT_SIZE; + if (line == ¤tGen) + { + posY += Params::TXT_SIZE; + } + } + } + // Prepare left panel + float lpTxtWidth = 0.f; + float lpTxtHeight = 0.f; + for (line = &simState; line <= &corpseCnt; ++line) + { + line->getGlobalBounds().width > lpTxtWidth ? lpTxtWidth = line->getGlobalBounds().width : lpTxtWidth = lpTxtWidth; + } + if (sStyle == SELECTION_BY_FITNESS) + { + for (line = &simStyle; line <= &longestLife; ++line) + { + line->getGlobalBounds().width > lpTxtWidth ? lpTxtWidth = line->getGlobalBounds().width : lpTxtWidth = lpTxtWidth; + } + lpTxtHeight = (longestLife.getGlobalBounds().height + longestLife.getPosition().y) - simState.getPosition().y; + } + leftPanel.setSize(sf::Vector2f(lpTxtWidth + TXT_MARGIN * 2.f, lpTxtHeight + TXT_MARGIN * 2.f)); + leftPanel.setPosition(TXT_MARGIN, TXT_MARGIN); + leftPanel.setOutlineThickness(1.f); + leftPanel.setFillColor(sf::Color(0, 0, 0, 191)); + leftPanel.setOutlineColor(hSim->prms.textColor); + // Append left panel separators + for (int i = 0; i < 5; ++i) + { + sepLP[i].setSize(sf::Vector2f(lpTxtWidth, 1.f)); + sepLP[i].setFillColor(hSim->prms.textColor); + } + sepLP[0].setPosition(posX, fps.getPosition().y - TXT_MARGIN * 2.f / 3.f); + sepLP[1].setPosition(posX, worldRad.getPosition().y - TXT_MARGIN * 2.f / 3.f); + sepLP[2].setPosition(posX, zapperCnt.getPosition().y - TXT_MARGIN * 2.f / 3.f); + if (sStyle == SELECTION_BY_FITNESS) + { + sepLP[3].setPosition(posX, simStyle.getPosition().y - TXT_MARGIN * 2.f / 3.f); + sepLP[4].setPosition(posX, longestLife.getPosition().y - TXT_MARGIN * 2.f / 3.f); + } + + return true; +} + + +void TextDisplay::print() +{ + sf::View textView = sf::View(sf::Vector2f(hSim->window.getSize().x / 2.f, hSim->window.getSize().y / 2.f), sf::Vector2f(hSim->window.getSize().x, hSim->window.getSize().y)); + sf::View crntView = hSim->window.getView(); + + hSim->window.setView(textView); + + // Print left panel + hSim->window.draw(leftPanel); + sf::Text *line = nullptr; + for (line = &simState; line <= &simStyle; ++line) + { + hSim->window.draw(*line); + } + if (sStyle == SELECTION_BY_FITNESS) + { + for (line = ¤tPop; line <= &longestLife; ++line) + { + hSim->window.draw(*line); + } + } + for (int i = 0; i < 5; ++i) + { + hSim->window.draw(sepLP[i]); + } + + // Print right panel + + hSim->window.setView(crntView); +} diff --git a/Simulation/TextDisplay.hpp b/Simulation/TextDisplay.hpp new file mode 100644 index 0000000..b46cefb --- /dev/null +++ b/Simulation/TextDisplay.hpp @@ -0,0 +1,55 @@ +#ifndef __TEXTDISPLAY_HPP__ +#define __TEXTDISPLAY_HPP__ + +#include + +#include "Params.hpp" + +class SimBase; + +class TextDisplay +{ +public: + bool startup(SimBase *sim, SimStyle style); + void print(); + +private: + SimBase *hSim = nullptr; + SimStyle sStyle; + + sf::Font font; + sf::RectangleShape leftPanel; + + // ON LEFT PANEL + sf::Text simState; + sf::Text steps; + // Separator + sf::Text fps; + sf::Text gfx; + sf::Text vSync; + // Separator + sf::Text worldRad; + // Separator + sf::Text zapperCnt; + sf::Text pelletCnt; + sf::Text guppieCnt; + sf::Text corpseCnt; + // Separator + sf::Text simStyle; + // If sim. style == sel. by fitness + sf::Text currentPop; + sf::Text currentGen; + // Separator + sf::Text longestLife; + // Left panel separators + sf::RectangleShape sepLP[5]; + + friend class SimBase; + friend class SimFitness; + friend class Entity; + friend class Pellet; + friend class Guppie; + friend class Corpse; +}; + +#endif // __TEXTDISPLAY_HPP__ diff --git a/Simulation/Zapper.cpp b/Simulation/Zapper.cpp new file mode 100644 index 0000000..f31b996 --- /dev/null +++ b/Simulation/Zapper.cpp @@ -0,0 +1,46 @@ +#include "Zapper.hpp" +#include "SimBase.hpp" + +void Zapper::startup(SimBase *sim) +{ + hSim = sim; + radius = Params::ZAPPER_RAD; +} + + +void Zapper::update() +{ + float forceX = realRand(-hSim->prms.zapperForce, hSim->prms.zapperForce); + float forceY = realRand(-hSim->prms.zapperForce, hSim->prms.zapperForce); + body->ApplyForceToCenter(b2Vec2(forceX, forceY)); + float torque = realRand(-hSim->prms.zapperTorque, hSim->prms.zapperTorque); + body->ApplyTorque(torque); +} + + +void Zapper::draw() +{ + sf::Vector2f vSize = hSim->window.getView().getSize(); + sf::Vector2f vCent = hSim->window.getView().getCenter(); + if ( body->GetPosition().x + radius < vCent.x - vSize.x / 2.f || + body->GetPosition().y + radius < vCent.y - vSize.y / 2.f || + body->GetPosition().x - radius > vCent.x + vSize.x / 2.f || + body->GetPosition().y - radius > vCent.y + vSize.y / 2.f ) + { + return; + } + + if (hSim->camera.zoom > Params::ZAPPER_RAD / 2.f) + { + hSim->zapperPoint.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->window.draw(hSim->zapperPoint); + } + else + { + hSim->zapperShell.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->zapperNucleus.setPosition(body->GetPosition().x, body->GetPosition().y); + hSim->zapperNucleus.setRotation(body->GetAngle() * hSim->prms.RAD_DGRS); + hSim->window.draw(hSim->zapperShell); + hSim->window.draw(hSim->zapperNucleus); + } +} diff --git a/Simulation/Zapper.hpp b/Simulation/Zapper.hpp new file mode 100644 index 0000000..e71ff82 --- /dev/null +++ b/Simulation/Zapper.hpp @@ -0,0 +1,14 @@ +#ifndef __ZAPPER_HPP__ +#define __ZAPPER_HPP__ + +#include "Entity.hpp" + +class Zapper : public Entity +{ +public: + void startup(SimBase *sim); + void update(); + void draw(); +}; + +#endif // __ZAPPER_HPP__ diff --git a/bin/Release/Guppies.exe b/bin/Release/Guppies.exe new file mode 100644 index 0000000..073fffb Binary files /dev/null and b/bin/Release/Guppies.exe differ diff --git a/bin/Release/Instructions.txt b/bin/Release/Instructions.txt new file mode 100644 index 0000000..c7b48c0 --- /dev/null +++ b/bin/Release/Instructions.txt @@ -0,0 +1,255 @@ +================================================================================ +NEURAL GUPPIES -v0.1 beta +Author: Paul T. Oliver (paul.t.oliver.design@gmail.com) +================================================================================ + +================================================================================ +Index: + +I. Disclaimer +II. Usage instructions +III. Parameters +IV. Controls + +================================================================================ + +================================================================================ +I. DISCLAIMER: + +Neural Guppies is a NeuroEvolution experiment that evolves virtual creatures +into intelligent beings. It is a personal project aimed to test several +concepts that interest me, so I thought I should share it with the +community. However, it has no guaranty and has not been tested in any other +system but mine. Thus, if you run this on your system, you must do it at your +own risk. To see a brief introduction on Neural Guppies, visit the following +links: + +http://www.youtube.com/watch?v=tCPzYM7B338 +http://www.youtube.com/watch?v=N-HjfS4P6r4 +http://www.youtube.com/watch?v=X7qUH8mSyUE +http://forum.codecall.net/topic/72637-goopies-evolving-neural-networks-wip/ + +Program is far from finished and can only begin Simulations from scratch +(loading and saving simulations will be implemented soon). If you close the +window the simulation will be lost. I've been able to successfully resume +simulations after putting the computer to Sleep or Hibernate, (without +closing the simulation window) but this may not work on all systems. + +Main concepts tested on this program are: + - Artificial Neural Networks + - Genetic Algorithms + - Neuro-evolution + +================================================================================ + +================================================================================ +II. USAGE INSTRUCTIONS: + +1) Extract NeuralGuppies-v0.1beta.zip to your preferred directory. + +2) To begin a new simulation simply run Guppies.exe. + +3) Click on NEW SIMULATION. + +4) Set simulation parameters (see below to see what each parameter means). + +5) Click on Begin new simulation. + +================================================================================ + +================================================================================ +III. PARAMETERS: + +The program comes with default parameters built in. You should use those as a +starting point and experiment by tweaking them as much as you like. No control +is set to the inputed parameters, so you must take care that they make sense to +the program (for example, you should not make a world so small that objects +don't fit on it!). + +What follows is a list of all the tweak-able parameters and what they mean. +After the name of each numerical parameter is the type of number that it +expects (positive integer, integer, positive floating point or floating point). +My recommendation is to change them in small gaps you you can see how each of +them affects the simulation. + +1) NETWORK STRUCTURE: + Defines the main topology of the Neural Network (i.e. the way that Nodes + connect with each other). The four possible choices (in order of + complexity) are: + + a) Single MultiLayer Perceptron: + A FeedForward network with 1 hidden layer. Information flows + unidirectionally from input nodes to output nodes (and not the + other way around). + + b) Dual MultiLayer Perceptron: + Same as above, but with two hidden layers instead of one. + + c) Simple Recurrent Network (Elman Network): + This type of recurrent network has a set of "context" units that + store the output of the (single) hidden layer and feeds it back + to the input layer on the next time-step, giving it a kind of + "temporal" perception. + + d) Fully Recurrent Network: + All Nodes in this network are connected to each other. It's the + most complex (and processor intensive) network of the four. + +2) NODE STRUCTURE: + Defines the structure of each network node. The two choices are: + + a) Neuron: + Each neuron computes its outputs from a given set of inputs. Output + equals the weighted sum of all inputs. + + b) Memory Cell: + This kind of node is based in the Long-Short Term Memory recurrent + network model. It contains 4 neurons, 3 of them act as "gates" that + allow it to block input, store it and output it, thus being able to + hold in information or "memories" for a long time span. It's the + most complex (and processor intensive) type of node. + +3) NODES PER HIDDEN LAYER (expects a positive integer): + Number of nodes that reside on each hidden layer. SingleMLPs, SimpleRNs and + FullyRNs have one hidden layer. DualMLPs have two (thus, their number of + hidden nodes is "this value" x 2). The more nodes, the more complex the + Neural Networks of the Guppies are (and the more time it'll take to evolve + them) but the more "intelligent" they can become (theoretically). + +4) SUB POPULATION SIZE (expects a positive integer): + Populations of Guppies are divided into sub-populations of individuals that + are placed on the Dish simultaneously. If you experience a slow frame rate, + you can make this sub-populations smaller in order to reduce processor + overhead. However, the bigger the sub-populations, the more chance the + Guppies have to interact with each other. + +5) SUB POPULATION QUANTITY (expects a positive integer): + Number of sub-populations (or population divisions). Thus, total population + of Guppies equals "sub-population qtty" x "this number". Larger populations + give the genetic algorithm more information (genes) to mix, thus they will + likely result in more "intelligent" Guppies. However, the larger the + population, the more cycles (time) the GA will need in order to evolve + intelligence. + +6) FITNESS BONUSES (expects a positive floating point value): + Bonus fitness points each Guppy receives for eating a food pellet (remember + that the more fitness points a Guppy makes during its life, the more + chance it has to reproduce). + +7) FITNESS BONUS PER GUPPY (expects a positive floating point value): + Bonus fitness points each Guppy receives for attacking another Guppy. + +8) FITNESS BONUS PER CORPSE max (expects a positive floating point value): + Bonus fitness points each Guppy receives for eating a corpse. Since corpses + "decay" this is the MAX value of a "fresh" corpse. + +9) DISH SIZE (expects a positive floating point value): + Size of the world. + +10) ZAPPER RANDOM FORCE (expects a positive floating point value): + Random movement force applied to Zappers each frame. + +11) ZAPPER RANDOM TORQUE (expects a positive floating point value): + Random rotation force applied to Zappers each frame. + +12) ZAPPER QUANTITY (expects a positive integer): + Number of Zappers (does not change). + +13) PELLET QUANTITY (expects a positive integer): + Max number of food pellets that can exist on any given time. + +14) PELLET CREATION DELAY (expects a positive integer): + Time it takes (in frames) for a new Pellet to be spawned in the world. + +15) START SCARCE: + Begin simulation with no Pellets in the world. + +16) CORPSE DECAY: + Corpses have a limited lifetime after they are created, after which they + disappear. + +17) CORPSE DECAY RATE (expects a positive integer): + Time it takes (in frames) for a corpse to decay. + +18) COLORS: + Colors of the entities in the world. Remember that Guppies "see" in three + colors (RED, GREEN and BLUE). Entities with similar colors would be + difficult to distinguish for a Guppy. + +19) ACTIVATION DELAY (expects a positive integer): + Time it takes for a Guppy to pass from being an "Egg" to being an adult. + It's important to leave this value a bit high (above 100) so to prevent a + Guppy from being born too near to another entity. + +20) THRUST FORCE (expects a positive floating point value): + Strength of Guppy thrust force. The higher the force, the higher the speed. + +21) THRUST RADIUS (expects a positive floating point value): + The higher this value, the faster the Guppies can "turn". Too high they + might not be able to control themselves. Default value provides a good + balance. + +22) INITIAL ENERGY (expects a positive floating point value): + Initial energy Guppies begin their life with. Each "energy point" + represents at most one second (60 frames) of life. + +23) MAX ENERGY (expects a positive floating point value): + Maximum energy points a Guppy can have at any given time. + +24) AGING RATE (expects a positive integer): + Rate at which Guppies "age". Aging for a Guppy means that it consumes + energy points faster (thus, it gets harder to stay alive the longer a Guppy + lives). This value being "x", each Guppy consumes 1 additional energy point + per second every "x" seconds it has lived. In other words, the smaller this + value is, the faster Guppies age. + +25) LEAVE CORPSE: + Guppy leaves a corpse behind when it dies. + +26) ENERGY TRANSFERS (expects floating point values): + Quantity of energy points transfered from entity to Guppy during collision. + Zappers should have a negative value so that they "steal" energy from the + Guppies whenever they touch. Other entities transfer their energy whenever + a Guppy attacks them head on (i.e. when they hit them with their frontal + "beak"). This should be made positive, so that they give the Guppy + additional lifetime. + +================================================================================ + +================================================================================ +IV. CONTROLS: + +Once you hit the "Begin new simulation" button the parameter window will close +and the simulation window will pop up. + +You can resize, minimize or maximize this window at any time, but if you close +it the simulation will be lost! Next is a list of controls so you can navigate +around the Dish and take a close look at th Guppies: + +I) Zoom in. +O) Zoom out. +Z) Zoom out completely. + +W) Shift camera up. +A) Shift camera left. +S) Shift camera down. +D) Shift camera right. + +F11) Switch to Fullscreen. + +SPACE) Pause simulation. + +V) Turn on/off vSync (when turned off, rendering will be done at max speed). +G) Turn on/off graphics (simulation goes faster when graphics are turned off). +T) Turn on/off text display. + +MOUSE WHEEL UP/DOWN) Zoom in/out on cursor position. + +MOUSE CLICK) Shift camera to cursor position. If you click on an entity, that + will cause the camera to "follow" it around. + +* To accelerate the simulation to the max you should disable vSync, Graphics + and text rendering all at once. That way evolution can happen faster while + you're not directly looking at it. + +================================================================================ \ No newline at end of file diff --git a/bin/Release/gfx/Thumbs.db b/bin/Release/gfx/Thumbs.db new file mode 100644 index 0000000..ed02542 Binary files /dev/null and b/bin/Release/gfx/Thumbs.db differ diff --git a/bin/Release/gfx/font.ttf b/bin/Release/gfx/font.ttf new file mode 100644 index 0000000..53d8f2e Binary files /dev/null and b/bin/Release/gfx/font.ttf differ diff --git a/bin/Release/gfx/icon.png b/bin/Release/gfx/icon.png new file mode 100644 index 0000000..6d3fafa Binary files /dev/null and b/bin/Release/gfx/icon.png differ diff --git a/bin/Release/gfx/icon_big.png b/bin/Release/gfx/icon_big.png new file mode 100644 index 0000000..b23423a Binary files /dev/null and b/bin/Release/gfx/icon_big.png differ diff --git a/bin/Release/gfx/logo.png b/bin/Release/gfx/logo.png new file mode 100644 index 0000000..91f7ff6 Binary files /dev/null and b/bin/Release/gfx/logo.png differ diff --git a/gfx/Thumbs.db b/gfx/Thumbs.db new file mode 100644 index 0000000..e0984dd Binary files /dev/null and b/gfx/Thumbs.db differ diff --git a/gfx/font.ttf b/gfx/font.ttf new file mode 100644 index 0000000..53d8f2e Binary files /dev/null and b/gfx/font.ttf differ diff --git a/gfx/icon.png b/gfx/icon.png new file mode 100644 index 0000000..6d3fafa Binary files /dev/null and b/gfx/icon.png differ diff --git a/gfx/icon_big.png b/gfx/icon_big.png new file mode 100644 index 0000000..b23423a Binary files /dev/null and b/gfx/icon_big.png differ diff --git a/gfx/logo.png b/gfx/logo.png new file mode 100644 index 0000000..91f7ff6 Binary files /dev/null and b/gfx/logo.png differ diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000..9c73e10 Binary files /dev/null and b/icon.ico differ diff --git a/obj/Release/Simulation/.keep b/obj/Release/Simulation/.keep new file mode 100644 index 0000000..e69de29 diff --git a/obj/Release/resource.res b/obj/Release/resource.res new file mode 100644 index 0000000..fd7ddf2 Binary files /dev/null and b/obj/Release/resource.res differ diff --git a/prms/test.prms b/prms/test.prms new file mode 100644 index 0000000..8780150 --- /dev/null +++ b/prms/test.prms @@ -0,0 +1,37 @@ +[BEGIN PARAMS] +0 +0 +80 +20 +20 +40 +9000 +36000 +36000 +40 +50 +150 +20 +400 +150 +0 +1 +3600 +rgb(15, 15, 15) +black +blue +green +red +red +120 +5 +0.05 +60 +180 +600 +1 +-20 +15 +60 +60 +[END PARAMS] diff --git a/resource.rc b/resource.rc new file mode 100644 index 0000000..7cbfc37 --- /dev/null +++ b/resource.rc @@ -0,0 +1,3 @@ +aaaa ICON "icon.ico" + +#include "wx/msw/wx.rc" diff --git a/wxsmith/Guppies1_0dialog.wxs b/wxsmith/Guppies1_0dialog.wxs new file mode 100644 index 0000000..f21dbd5 --- /dev/null +++ b/wxsmith/Guppies1_0dialog.wxs @@ -0,0 +1,1038 @@ + + + + Neural Guppies - 0.1 beta + 1 + 0 + + + + + + + wxVERTICAL + + + + + + wxSYS_COLOUR_BTNHIGHLIGHT + + wxVERTICAL + + + gfx\logo.png + + + wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL + 5 + + + + 10,-1 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + 11 + + normal + 0 + swiss + DejaVu Sans Mono + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + + + + + + wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + + + + wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 4 + + + + + + + + 11 + + normal + 0 + swiss + DejaVu Sans Mono + + + + wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + 11 + + normal + 0 + swiss + DejaVu Sans Mono + + + + wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + + wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + + 29,47 + wxSYS_COLOUR_BTNHIGHLIGHT + + wxVERTICAL + + + + + Load simulation + *.sim + 0 + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + 10,-1 + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 10 + + + + + 10,-1 + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + 0 + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + + 96,8 + wxSYS_COLOUR_BTNHIGHLIGHT + + + + wxVERTICAL + + + + + + wxVERTICAL + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxVERTICAL + + + + Single MLP + Dual MLP + Simple RN + Fully RN + + 0 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + + + + + + Neuron + Memory cell + + 0 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + + + + + 80 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxVERTICAL + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxVERTICAL + + + 20 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 20 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 40 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxVERTICAL + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxVERTICAL + + + 9000 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 36000 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 36000 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxVERTICAL + + + + + + wxVERTICAL + + + + Size of the circular dish that guppies live in + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxVERTICAL + + + 40 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxVERTICAL + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxVERTICAL + + + 50 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 150 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 20 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 400 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 150 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 1 + + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 3600 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxVERTICAL + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxVERTICAL + + + #0F0F0F + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL + 5 + + + + + #000000 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL + 5 + + + + + #0000FF + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL + 5 + + + + + #00FF00 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL + 5 + + + + + #FF0000 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL + 5 + + + + + #FF0000 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxVERTICAL + + + + + + wxVERTICAL + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxVERTICAL + + + 120 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 5 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 0.05 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 60 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 180 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 600 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 1 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxVERTICAL + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxVERTICAL + + + -20 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 15 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 60 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + 60 + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + Load parameters + prms/ + *.prms + + + wxLEFT|wxRIGHT|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + Save parameters + prms/ + *.prms + wxFLP__SMALL + + + + wxLEFT|wxRIGHT|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + + + wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 10 + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + + + + + -- cgit v1.2.1