diff options
author | Rodrigo Perez Fulloni <rodripf@gmail.com> | 2012-12-17 22:24:44 (GMT) |
---|---|---|
committer | Rodrigo Perez Fulloni <rodripf@gmail.com> | 2012-12-17 22:24:44 (GMT) |
commit | f891b3a18c952b88967f7408bb942ef3c0cd111f (patch) | |
tree | 2a746cb54bdc837a892f908c85599fed7e103300 /src/pygame/__init__.py |
Diffstat (limited to 'src/pygame/__init__.py')
-rw-r--r-- | src/pygame/__init__.py | 304 |
1 files changed, 304 insertions, 0 deletions
diff --git a/src/pygame/__init__.py b/src/pygame/__init__.py new file mode 100644 index 0000000..1e8727e --- /dev/null +++ b/src/pygame/__init__.py @@ -0,0 +1,304 @@ +## pygame - Python Game Library +## Copyright (C) 2000-2001 Pete Shinners +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Library General Public +## License as published by the Free Software Foundation; either +## version 2 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Library General Public License for more details. +## +## You should have received a copy of the GNU Library General Public +## License along with this library; if not, write to the Free +## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +## +## Pete Shinners +## pete@shinners.org +"""Pygame is a set of Python modules designed for writing games. +It is written on top of the excellent SDL library. This allows you +to create fully featured games and multimedia programs in the python +language. The package is highly portable, with games running on +Windows, MacOS, OS X, BeOS, FreeBSD, IRIX, and Linux. +""" + +import sys, os, string + +# check if is old windows... if so use directx video driver by default. +# if someone sets this respect their setting... +if not 'SDL_VIDEODRIVER' in os.environ: + # http://docs.python.org/lib/module-sys.html + # 0 (VER_PLATFORM_WIN32s) Win32s on Windows 3.1 + # 1 (VER_PLATFORM_WIN32_WINDOWS) Windows 95/98/ME + # 2 (VER_PLATFORM_WIN32_NT) Windows NT/2000/XP + # 3 (VER_PLATFORM_WIN32_CE) Windows CE + if hasattr(sys, "getwindowsversion"): + try: + if (sys.getwindowsversion()[3] in [1,2] and + sys.getwindowsversion()[0] in [0,1,2,3,4,5]): + os.environ['SDL_VIDEODRIVER'] = 'directx' + except: + pass + + +class MissingModule: + _NOT_IMPLEMENTED_ = True + def __init__(self, name, info='', urgent=0): + self.name = name + self.info = str(info) + try: + exc = sys.exc_info() + if exc[0] != None: + self.reason = "%s: %s" % (exc[0].__name__, str(exc[1])) + else: + self.reason = "" + finally: + del exc + self.urgent = urgent + if urgent: + self.warn() + + def __getattr__(self, var): + if not self.urgent: + self.warn() + self.urgent = 1 + MissingPygameModule = "%s module not available" % self.name + if self.reason: + MissingPygameModule += "\n(%s)" % self.reason + raise NotImplementedError(MissingPygameModule) + + def __nonzero__(self): + return 0 + + def warn(self): + if self.urgent: type = 'import' + else: type = 'use' + message = '%s %s: %s' % (type, self.name, self.info) + if self.reason: + message += "\n(%s)" % self.reason + try: + import warnings + if self.urgent: level = 4 + else: level = 3 + warnings.warn(message, RuntimeWarning, level) + except ImportError: + print (message) + + + +#we need to import like this, each at a time. the cleanest way to import +#our modules is with the import command (not the __import__ function) + +#first, the "required" modules +from pygame.base import * +from pygame.constants import * +from pygame.version import * +from pygame.rect import Rect +from pygame.compat import geterror +import pygame.rwobject +import pygame.surflock +import pygame.color +Color = color.Color +__version__ = ver + +#next, the "standard" modules +#we still allow them to be missing for stripped down pygame distributions +try: import pygame.cdrom +except (ImportError,IOError):cdrom=MissingModule("cdrom", geterror(), 1) + +try: import pygame.cursors +except (ImportError,IOError):cursors=MissingModule("cursors", geterror(), 1) + +try: import pygame.display +except (ImportError,IOError):display=MissingModule("display", geterror(), 1) + +try: import pygame.draw +except (ImportError,IOError):draw=MissingModule("draw", geterror(), 1) + +try: import pygame.event +except (ImportError,IOError):event=MissingModule("event", geterror(), 1) + +try: import pygame.image +except (ImportError,IOError):image=MissingModule("image", geterror(), 1) + +try: import pygame.joystick +except (ImportError,IOError):joystick=MissingModule("joystick", geterror(), 1) + +try: import pygame.key +except (ImportError,IOError):key=MissingModule("key", geterror(), 1) + +try: import pygame.mouse +except (ImportError,IOError):mouse=MissingModule("mouse", geterror(), 1) + +try: import pygame.sprite +except (ImportError,IOError):sprite=MissingModule("sprite", geterror(), 1) + + +try: import pygame.threads +except (ImportError,IOError):threads=MissingModule("threads", geterror(), 1) + + +def warn_unwanted_files(): + """ Used to warn about unneeded old files. + """ + + # a temporary hack to warn about camera.so and camera.pyd. + install_path= os.path.split(pygame.base.__file__)[0] + extension_ext = os.path.splitext(pygame.base.__file__)[1] + + # here are the .so/.pyd files we need to ask to remove. + ext_to_remove = ["camera"] + + # here are the .py/.pyo/.pyc files we need to ask to remove. + py_to_remove = ["color"] + + if os.name == "e32": # Don't warn on Symbian. The color.py is used as a wrapper. + py_to_remove = [] + + # See if any of the files are there. + extension_files = ["%s%s" % (x, extension_ext) for x in ext_to_remove] + + py_files = ["%s%s" % (x, py_ext) + for py_ext in [".py", ".pyc", ".pyo"] + for x in py_to_remove] + + files = py_files + extension_files + + unwanted_files = [] + for f in files: + unwanted_files.append( os.path.join( install_path, f ) ) + + + + ask_remove = [] + for f in unwanted_files: + if os.path.exists(f): + ask_remove.append(f) + + + if ask_remove: + message = "Detected old file(s). Please remove the old files:\n" + + for f in ask_remove: + message += "%s " % f + message += "\nLeaving them there might break pygame. Cheers!\n\n" + + try: + import warnings + level = 4 + warnings.warn(message, RuntimeWarning, level) + except ImportError: + print (message) + + +# disable, because we hopefully don't need it. +#warn_unwanted_files() + + + +try: from pygame.surface import * +except (ImportError,IOError):Surface = lambda:Missing_Function + + +try: + import pygame.mask + from pygame.mask import Mask +except (ImportError,IOError):Mask = lambda:Missing_Function + +try: from pygame.pixelarray import * +except (ImportError,IOError): PixelArray = lambda:Missing_Function + +try: from pygame.overlay import * +except (ImportError,IOError):Overlay = lambda:Missing_Function + +try: import pygame.time +except (ImportError,IOError):time=MissingModule("time", geterror(), 1) + +try: import pygame.transform +except (ImportError,IOError):transform=MissingModule("transform", geterror(), 1) + +#lastly, the "optional" pygame modules +try: + import pygame.font + import pygame.sysfont + pygame.font.SysFont = pygame.sysfont.SysFont + pygame.font.get_fonts = pygame.sysfont.get_fonts + pygame.font.match_font = pygame.sysfont.match_font +except (ImportError,IOError):font=MissingModule("font", geterror(), 0) + +# try and load pygame.mixer_music before mixer, for py2app... +try: + import pygame.mixer_music + #del pygame.mixer_music + #print ("NOTE2: failed importing pygame.mixer_music in lib/__init__.py") +except (ImportError,IOError): + pass + +try: import pygame.mixer +except (ImportError,IOError):mixer=MissingModule("mixer", geterror(), 0) + +try: import pygame.movie +except (ImportError,IOError):movie=MissingModule("movie", geterror(), 0) + +#try: import pygame.movieext +#except (ImportError,IOError):movieext=MissingModule("movieext", geterror(), 0) + +try: import pygame.scrap +except (ImportError,IOError):scrap=MissingModule("scrap", geterror(), 0) + +try: import pygame.surfarray +except (ImportError,IOError):surfarray=MissingModule("surfarray", geterror(), 0) + +try: import pygame.sndarray +except (ImportError,IOError):sndarray=MissingModule("sndarray", geterror(), 0) + +try: import pygame.fastevent +except (ImportError,IOError):fastevent=MissingModule("fastevent", geterror(), 0) + +#there's also a couple "internal" modules not needed +#by users, but putting them here helps "dependency finder" +#programs get everything they need (like py2exe) +try: import pygame.imageext; del pygame.imageext +except (ImportError,IOError):pass + +def packager_imports(): + """ + Some additional things that py2app/py2exe will want to see + """ + import atexit + import Numeric + import numpy + import OpenGL.GL + import pygame.macosx + import pygame.mac_scrap + import pygame.bufferproxy + import pygame.colordict + +#make Rects pickleable +try: + import copy_reg +except ImportError: + import copyreg as copy_reg +def __rect_constructor(x,y,w,h): + return Rect(x,y,w,h) +def __rect_reduce(r): + assert type(r) == Rect + return __rect_constructor, (r.x, r.y, r.w, r.h) +copy_reg.pickle(Rect, __rect_reduce, __rect_constructor) + + +#make Colors pickleable +def __color_constructor(r,g,b,a): + return Color(r,g,b,a) +def __color_reduce(c): + assert type(c) == Color + return __color_constructor, (c.r, c.g, c.b, c.a) +copy_reg.pickle(Color, __color_reduce, __color_constructor) + + + + +#cleanup namespace +del pygame, os, sys, rwobject, surflock, MissingModule, copy_reg, geterror |