pull from pyflakes branch: unravel/mangle imports

This commit is contained in:
David Sowder 2012-03-11 16:05:50 -05:00
parent a8ad2a5186
commit fead577efd
6 changed files with 830 additions and 857 deletions

View File

@ -9,9 +9,10 @@ OpenGLContext.scenegraph.boundingvolume module.
Based on code from: Based on code from:
http://www.markmorley.com/opengl/frustumculling.html http://www.markmorley.com/opengl/frustumculling.html
""" """
from OpenGL.GL import *
from numpy import * import logging
import logging import numpy
import OpenGL.GL
context_log = logging.getLogger() context_log = logging.getLogger()
@ -30,9 +31,9 @@ def viewingMatrix(projection=None, model=None):
matrix, the function will raise a RuntimeError matrix, the function will raise a RuntimeError
""" """
if projection is None: if projection is None:
projection = glGetDoublev(GL_PROJECTION_MATRIX) projection = OpenGL.GL.glGetDoublev(OpenGL.GL.GL_PROJECTION_MATRIX)
if model is None: if model is None:
model = glGetDoublev(GL_MODELVIEW_MATRIX) model = OpenGL.GL.glGetDoublev(OpenGL.GL.GL_MODELVIEW_MATRIX)
# hmm, this will likely fail on 64-bit platforms :( # hmm, this will likely fail on 64-bit platforms :(
if projection is None or model is None: if projection is None or model is None:
context_log.warn( context_log.warn(
@ -44,20 +45,20 @@ def viewingMatrix(projection=None, model=None):
if model: if model:
return model return model
else: else:
return identity(4, 'd') return numpy.identity(4, 'd')
if allclose(projection, -1.79769313e+308): if numpy.allclose(projection, -1.79769313e+308):
context_log.warn( context_log.warn(
"""Attempt to retrieve projection matrix when uninitialised %s, model=%s""", """Attempt to retrieve projection matrix when uninitialised %s, model=%s""",
projection, model, projection, model,
) )
return model return model
if allclose(model, -1.79769313e+308): if numpy.allclose(model, -1.79769313e+308):
context_log.warn( context_log.warn(
"""Attempt to retrieve model-view matrix when uninitialised %s, projection=%s""", """Attempt to retrieve model-view matrix when uninitialised %s, projection=%s""",
model, projection, model, projection,
) )
return projection return projection
return dot(model, projection) return numpy.dot(model, projection)
class Frustum (object): class Frustum (object):
@ -84,15 +85,15 @@ class Frustum (object):
frustcullaccel C extension module) frustcullaccel C extension module)
""" """
distances = sum(self.planes[newaxis, :, :] * points[:, newaxis, :], -1) distances = sum(self.planes[OpenGL.GL.newaxis, :, :] * points[:, OpenGL.GL.newaxis, :], -1)
return ~any(distances < -radius, -1) return ~any(distances < -radius, -1)
def visible1(self, point, radius): def visible1(self, point, radius):
#return self.visible(array(point[newaxis, :]), radius) #return self.visible(array(point[OpenGL.GL.newaxis, :]), radius)
distance = sum(self.planes * point, -1) distance = sum(self.planes * point, -1)
vis = ~any(distance < -radius) vis = ~any(distance < -radius)
#assert vis == self.visible(array(point)[newaxis, :], radius) #assert vis == self.visible(array(point)[OpenGL.GL.newaxis, :], radius)
return vis return vis
@ -113,8 +114,8 @@ class Frustum (object):
""" """
if matrix is None: if matrix is None:
matrix = viewingMatrix() matrix = viewingMatrix()
clip = ravel(matrix) clip = numpy.ravel(matrix)
frustum = zeros((6, 4), 'd') frustum = numpy.zeros((6, 4), 'd')
# right # right
frustum[0][0] = clip[3] - clip[0] frustum[0][0] = clip[3] - clip[0]
frustum[0][1] = clip[7] - clip[4] frustum[0][1] = clip[7] - clip[4]
@ -155,10 +156,10 @@ class Frustum (object):
@classmethod @classmethod
def normalize(cls, frustum): def normalize(cls, frustum):
"""Normalize clipping plane equations""" """Normalize clipping plane equations"""
magnitude = sqrt(frustum[:, 0] * frustum[:, 0] + frustum[:, 1] * frustum[:, 1] + frustum[:, 2] * frustum[:, 2]) magnitude = numpy.sqrt(frustum[:, 0] * frustum[:, 0] + frustum[:, 1] * frustum[:, 1] + frustum[:, 2] * frustum[:, 2])
# eliminate any planes which have 0-length vectors, # eliminate any planes which have 0-length vectors,
# those planes can't be used for excluding anything anyway... # those planes can't be used for excluding anything anyway...
frustum = compress(magnitude, frustum, 0) frustum = numpy.compress(magnitude, frustum, 0)
magnitude = compress(magnitude, magnitude, 0) magnitude = numpy.compress(magnitude, magnitude, 0)
magnitude = reshape(magnitude.astype('d'), (len(frustum), 1)) magnitude = numpy.reshape(magnitude.astype('d'), (len(frustum), 1))
return frustum / magnitude return frustum / magnitude

File diff suppressed because it is too large Load Diff

224
mcedit.py
View File

@ -5,55 +5,51 @@ mcedit.py
Startup, main menu, keyboard configuration, automatic updating. Startup, main menu, keyboard configuration, automatic updating.
""" """
import os
import os.path
import sys
import config
import shutil
import functools
import traceback
import logging
import pygame
from pygame.constants import *
from pygame import key, display, rect
import albow
from albow.dialogs import Dialog
from albow.openglwidgets import GLViewport from albow.openglwidgets import GLViewport
from albow.root import RootWidget from albow.root import RootWidget
from albow.dialogs import Dialog import config
from albow import * import directories
import functools
from glbackground import Panel from glbackground import Panel
import glutils
from OpenGL import GL
from numpy import *
from pymclevel.mclevel import MCInfdevOldLevel, saveFileDir
from pymclevel.materials import *
MCInfdevOldLevel.loadedChunkLimit = 0
from release import release
import leveleditor import leveleditor
from leveleditor import ControlSettings, Settings
import logging
import mceutils
import mcplatform import mcplatform
from mceutils import *
from mcplatform import platform_open from mcplatform import platform_open
from leveleditor import Settings, ControlSettings import numpy
from OpenGL import GL
import os
import os.path
import pygame
from pygame import display, key, rect
import pymclevel
import release
import shutil
import sys
import traceback
pymclevel.MCInfdevOldLevel.loadedChunkLimit = 0
ESCAPE = '\033' ESCAPE = '\033'
class FileOpener(Widget): class FileOpener(albow.Widget):
is_gl_container = True is_gl_container = True
def __init__(self, mcedit, *args, **kwargs): def __init__(self, mcedit, *args, **kwargs):
kwargs['rect'] = mcedit.rect kwargs['rect'] = mcedit.rect
Widget.__init__(self, *args, **kwargs) albow.Widget.__init__(self, *args, **kwargs)
self.anchor = 'tlbr' self.anchor = 'tlbr'
self.mcedit = mcedit self.mcedit = mcedit
helpColumn = [] helpColumn = []
label = Label("{0} {1} {2} {3} {4} {5}".format( label = albow.Label("{0} {1} {2} {3} {4} {5}".format(
config.config.get('Keys', 'Forward'), config.config.get('Keys', 'Forward'),
config.config.get('Keys', 'Left'), config.config.get('Keys', 'Left'),
config.config.get('Keys', 'Back'), config.config.get('Keys', 'Back'),
@ -66,7 +62,7 @@ class FileOpener(Widget):
helpColumn.append(label) helpColumn.append(label)
def addHelp(text): def addHelp(text):
label = Label(text) label = albow.Label(text)
label.anchor = 'whrt' label.anchor = 'whrt'
label.align = "r" label.align = "r"
helpColumn.append(label) helpColumn.append(label)
@ -77,21 +73,21 @@ class FileOpener(Widget):
addHelp("Hold SHIFT to move along a major axis") addHelp("Hold SHIFT to move along a major axis")
addHelp("Hold ALT for details") addHelp("Hold ALT for details")
helpColumn = Column(helpColumn, align="r") helpColumn = albow.Column(helpColumn, align="r")
helpColumn.topright = self.topright helpColumn.topright = self.topright
helpColumn.anchor = "whrt" helpColumn.anchor = "whrt"
#helpColumn.is_gl_container = True #helpColumn.is_gl_container = True
self.add(helpColumn) self.add(helpColumn)
keysColumn = [Label("")] keysColumn = [albow.Label("")]
buttonsColumn = [leveleditor.ControlPanel.getHeader()] buttonsColumn = [leveleditor.ControlPanel.getHeader()]
shortnames = [] shortnames = []
for world in self.mcedit.recentWorlds(): for world in self.mcedit.recentWorlds():
shortname = os.path.basename(world) shortname = os.path.basename(world)
try: try:
if MCInfdevOldLevel.isLevel(world): if pymclevel.MCInfdevOldLevel.isLevel(world):
lev = MCInfdevOldLevel(world) lev = pymclevel.MCInfdevOldLevel(world)
shortname = lev.LevelName shortname = lev.LevelName
if lev.LevelName != lev.displayName: if lev.LevelName != lev.displayName:
shortname = u"{0} ({1})".format(lev.LevelName, lev.displayName) shortname = u"{0} ({1})".format(lev.LevelName, lev.displayName)
@ -112,13 +108,13 @@ class FileOpener(Widget):
('F{0}'.format(i + 1), shortnames[i], self.createLoadButtonHandler(world)) ('F{0}'.format(i + 1), shortnames[i], self.createLoadButtonHandler(world))
for i, world in enumerate(self.mcedit.recentWorlds())]) for i, world in enumerate(self.mcedit.recentWorlds())])
commandRow = HotkeyColumn(hotkeys, keysColumn, buttonsColumn) commandRow = mceutils.HotkeyColumn(hotkeys, keysColumn, buttonsColumn)
commandRow.anchor = 'lrh' commandRow.anchor = 'lrh'
sideColumn = mcedit.makeSideColumn() sideColumn = mcedit.makeSideColumn()
sideColumn.anchor = 'wh' sideColumn.anchor = 'wh'
contentRow = Row((commandRow, sideColumn)) contentRow = albow.Row((commandRow, sideColumn))
contentRow.center = self.center contentRow.center = self.center
contentRow.anchor = "rh" contentRow.anchor = "rh"
self.add(contentRow) self.add(contentRow)
@ -134,7 +130,7 @@ class FileOpener(Widget):
def key_down(self, evt): def key_down(self, evt):
keyname = key.name(evt.key) keyname = key.name(evt.key)
if keyname == 'f4' and (key.get_mods() & (KMOD_ALT | KMOD_LALT | KMOD_RALT)): if keyname == 'f4' and (key.get_mods() & (pygame.KMOD_ALT | pygame.KMOD_LALT | pygame.KMOD_RALT)):
raise SystemExit raise SystemExit
if keyname in ('f1', 'f2', 'f3', 'f4', 'f5'): if keyname in ('f1', 'f2', 'f3', 'f4', 'f5'):
self.mcedit.loadRecentWorldNumber(int(keyname[1])) self.mcedit.loadRecentWorldNumber(int(keyname[1]))
@ -247,32 +243,32 @@ class KeyConfigPanel(Dialog):
def __init__(self): def __init__(self):
Dialog.__init__(self) Dialog.__init__(self)
keyConfigTable = TableView(columns=[TableColumn("Command", 400, "l"), TableColumn("Assigned Key", 150, "r")]) keyConfigTable = albow.TableView(columns=[albow.TableColumn("Command", 400, "l"), albow.TableColumn("Assigned Key", 150, "r")])
keyConfigTable.num_rows = lambda: len(self.keyConfigKeys) keyConfigTable.num_rows = lambda: len(self.keyConfigKeys)
keyConfigTable.row_data = self.getRowData keyConfigTable.row_data = self.getRowData
keyConfigTable.row_is_selected = lambda x: x == self.selectedKeyIndex keyConfigTable.row_is_selected = lambda x: x == self.selectedKeyIndex
keyConfigTable.click_row = self.selectTableRow keyConfigTable.click_row = self.selectTableRow
tableWidget = Widget() tableWidget = albow.Widget()
tableWidget.add(keyConfigTable) tableWidget.add(keyConfigTable)
tableWidget.shrink_wrap() tableWidget.shrink_wrap()
self.keyConfigTable = keyConfigTable self.keyConfigTable = keyConfigTable
buttonRow = (Button("Assign Key...", action=self.askAssignSelectedKey), buttonRow = (albow.Button("Assign Key...", action=self.askAssignSelectedKey),
Button("Done", action=self.dismiss)) albow.Button("Done", action=self.dismiss))
buttonRow = Row(buttonRow) buttonRow = albow.Row(buttonRow)
choiceButton = ChoiceButton(["WASD", "Arrows", "Numpad"], choose=self.choosePreset) choiceButton = mceutils.ChoiceButton(["WASD", "Arrows", "Numpad"], choose=self.choosePreset)
if config.config.get("Keys", "Forward") == "up": if config.config.get("Keys", "Forward") == "up":
choiceButton.selectedChoice = "Arrows" choiceButton.selectedChoice = "Arrows"
if config.config.get("Keys", "Forward") == "[8]": if config.config.get("Keys", "Forward") == "[8]":
choiceButton.selectedChoice = "Numpad" choiceButton.selectedChoice = "Numpad"
choiceRow = Row((Label("Presets: "), choiceButton)) choiceRow = albow.Row((albow.Label("Presets: "), choiceButton))
self.choiceButton = choiceButton self.choiceButton = choiceButton
col = Column((tableWidget, choiceRow, buttonRow)) col = albow.Column((tableWidget, choiceRow, buttonRow))
self.add(col) self.add(col)
self.shrink_wrap() self.shrink_wrap()
@ -310,7 +306,7 @@ class KeyConfigPanel(Dialog):
if labelString is None: if labelString is None:
labelString = "Press a key to assign to the action \"{0}\"\n\nPress ESC to cancel.".format(configKey) labelString = "Press a key to assign to the action \"{0}\"\n\nPress ESC to cancel.".format(configKey)
label = Label(labelString) label = albow.Label(labelString)
panel.add(label) panel.add(label)
panel.shrink_wrap() panel.shrink_wrap()
@ -361,34 +357,34 @@ class GraphicsPanel(Panel):
self.texturePackChoice.selectedChoice = self.texturePack self.texturePackChoice.selectedChoice = self.texturePack
self.texturePackChoice.choices = packs self.texturePackChoice.choices = packs
self.texturePackChoice = texturePackChoice = ChoiceButton(getPacks(), choose=packChanged) self.texturePackChoice = texturePackChoice = mceutils.ChoiceButton(getPacks(), choose=packChanged)
if self.texturePack in self.texturePackChoice.choices: if self.texturePack in self.texturePackChoice.choices:
self.texturePackChoice.selectedChoice = self.texturePack self.texturePackChoice.selectedChoice = self.texturePack
texturePackRow = Row((Label("Skin: "), texturePackChoice)) texturePackRow = albow.Row((albow.Label("Skin: "), texturePackChoice))
fieldOfViewRow = FloatInputRow("Field of View: ", fieldOfViewRow = mceutils.FloatInputRow("Field of View: ",
ref=Settings.fov.propertyRef(), width=100, min=25, max=120) ref=Settings.fov.propertyRef(), width=100, min=25, max=120)
targetFPSRow = IntInputRow("Target FPS: ", targetFPSRow = mceutils.IntInputRow("Target FPS: ",
ref=Settings.targetFPS.propertyRef(), width=100, min=1, max=60) ref=Settings.targetFPS.propertyRef(), width=100, min=1, max=60)
bufferLimitRow = IntInputRow("Vertex Buffer Limit (MB): ", bufferLimitRow = mceutils.IntInputRow("Vertex Buffer Limit (MB): ",
ref=Settings.vertexBufferLimit.propertyRef(), width=100, min=0) ref=Settings.vertexBufferLimit.propertyRef(), width=100, min=0)
fastLeavesRow = CheckBoxLabel("Fast Leaves", fastLeavesRow = mceutils.CheckBoxLabel("Fast Leaves",
ref=Settings.fastLeaves.propertyRef(), ref=Settings.fastLeaves.propertyRef(),
tooltipText="Leaves are solid, like Minecraft's 'Fast' graphics") tooltipText="Leaves are solid, like Minecraft's 'Fast' graphics")
roughGraphicsRow = CheckBoxLabel("Rough Graphics", roughGraphicsRow = mceutils.CheckBoxLabel("Rough Graphics",
ref=Settings.roughGraphics.propertyRef(), ref=Settings.roughGraphics.propertyRef(),
tooltipText="All blocks are drawn the same way (overrides 'Fast Leaves')") tooltipText="All blocks are drawn the same way (overrides 'Fast Leaves')")
enableMouseLagRow = CheckBoxLabel("Enable Mouse Lag", enableMouseLagRow = mceutils.CheckBoxLabel("Enable Mouse Lag",
ref=Settings.enableMouseLag.propertyRef(), ref=Settings.enableMouseLag.propertyRef(),
tooltipText="Enable choppy mouse movement for faster loading.") tooltipText="Enable choppy mouse movement for faster loading.")
settingsColumn = Column((fastLeavesRow, settingsColumn = albow.Column((fastLeavesRow,
roughGraphicsRow, roughGraphicsRow,
enableMouseLagRow, enableMouseLagRow,
texturePackRow, texturePackRow,
@ -397,17 +393,17 @@ class GraphicsPanel(Panel):
bufferLimitRow, bufferLimitRow,
), align='r') ), align='r')
settingsColumn = Column((Label("Settings"), settingsColumn = albow.Column((albow.Label("Settings"),
settingsColumn)) settingsColumn))
settingsRow = Row((settingsColumn,)) settingsRow = albow.Row((settingsColumn,))
optionsColumn = Column((settingsRow, Button("OK", action=mcedit.removeGraphicOptions))) optionsColumn = albow.Column((settingsRow, albow.Button("OK", action=mcedit.removeGraphicOptions)))
self.add(optionsColumn) self.add(optionsColumn)
self.shrink_wrap() self.shrink_wrap()
def _reloadTextures(self, pack): def _reloadTextures(self, pack):
if hasattr(alphaMaterials, "terrainTexture"): if hasattr(pymclevel.alphaMaterials, "terrainTexture"):
self.mcedit.displayContext.loadTextures() self.mcedit.displayContext.loadTextures()
texturePack = Settings.skin.configProperty(_reloadTextures) texturePack = Settings.skin.configProperty(_reloadTextures)
@ -421,67 +417,67 @@ class OptionsPanel(Dialog):
self.mcedit = mcedit self.mcedit = mcedit
autoBrakeRow = CheckBoxLabel("Autobrake", autoBrakeRow = mceutils.CheckBoxLabel("Autobrake",
ref=ControlSettings.autobrake.propertyRef(), ref=ControlSettings.autobrake.propertyRef(),
tooltipText="Apply brake when not pressing movement keys") tooltipText="Apply brake when not pressing movement keys")
swapAxesRow = CheckBoxLabel("Swap Axes Looking Down", swapAxesRow = mceutils.CheckBoxLabel("Swap Axes Looking Down",
ref=ControlSettings.swapAxes.propertyRef(), ref=ControlSettings.swapAxes.propertyRef(),
tooltipText="Change the direction of the Forward and Backward keys when looking down") tooltipText="Change the direction of the Forward and Backward keys when looking down")
cameraAccelRow = FloatInputRow("Camera Acceleration: ", cameraAccelRow = mceutils.FloatInputRow("Camera Acceleration: ",
ref=ControlSettings.cameraAccel.propertyRef(), width=100, min=5.0) ref=ControlSettings.cameraAccel.propertyRef(), width=100, min=5.0)
cameraDragRow = FloatInputRow("Camera Drag: ", cameraDragRow = mceutils.FloatInputRow("Camera Drag: ",
ref=ControlSettings.cameraDrag.propertyRef(), width=100, min=1.0) ref=ControlSettings.cameraDrag.propertyRef(), width=100, min=1.0)
cameraMaxSpeedRow = FloatInputRow("Camera Max Speed: ", cameraMaxSpeedRow = mceutils.FloatInputRow("Camera Max Speed: ",
ref=ControlSettings.cameraMaxSpeed.propertyRef(), width=100, min=1.0) ref=ControlSettings.cameraMaxSpeed.propertyRef(), width=100, min=1.0)
cameraBrakeSpeedRow = FloatInputRow("Camera Braking Speed: ", cameraBrakeSpeedRow = mceutils.FloatInputRow("Camera Braking Speed: ",
ref=ControlSettings.cameraBrakingSpeed.propertyRef(), width=100, min=1.0) ref=ControlSettings.cameraBrakingSpeed.propertyRef(), width=100, min=1.0)
mouseSpeedRow = FloatInputRow("Mouse Speed: ", mouseSpeedRow = mceutils.FloatInputRow("Mouse Speed: ",
ref=ControlSettings.mouseSpeed.propertyRef(), width=100, min=0.1, max=20.0) ref=ControlSettings.mouseSpeed.propertyRef(), width=100, min=0.1, max=20.0)
invertRow = CheckBoxLabel("Invert Mouse", invertRow = mceutils.CheckBoxLabel("Invert Mouse",
ref=ControlSettings.invertMousePitch.propertyRef(), ref=ControlSettings.invertMousePitch.propertyRef(),
tooltipText="Reverse the up and down motion of the mouse.") tooltipText="Reverse the up and down motion of the mouse.")
spaceHeightRow = IntInputRow("Low Detail Height", spaceHeightRow = mceutils.IntInputRow("Low Detail Height",
ref=Settings.spaceHeight.propertyRef(), ref=Settings.spaceHeight.propertyRef(),
tooltipText="When you are this far above the top of the world, move fast and use low-detail mode.") tooltipText="When you are this far above the top of the world, move fast and use low-detail mode.")
blockBufferRow = IntInputRow("Block Buffer", blockBufferRow = mceutils.IntInputRow("Block Buffer",
ref=Settings.blockBuffer.propertyRef(), min=1, ref=Settings.blockBuffer.propertyRef(), min=1,
tooltipText="Amount of memory used for temporary storage. When more than this is needed, the disk is used instead.") tooltipText="Amount of memory used for temporary storage. When more than this is needed, the disk is used instead.")
setWindowPlacementRow = CheckBoxLabel("Set Window Placement", setWindowPlacementRow = mceutils.CheckBoxLabel("Set Window Placement",
ref=Settings.setWindowPlacement.propertyRef(), ref=Settings.setWindowPlacement.propertyRef(),
tooltipText="Try to save and restore the window position.") tooltipText="Try to save and restore the window position.")
windowSizeRow = CheckBoxLabel("Window Resize Alert", windowSizeRow = mceutils.CheckBoxLabel("Window Resize Alert",
ref=Settings.shouldResizeAlert.propertyRef(), ref=Settings.shouldResizeAlert.propertyRef(),
tooltipText="Reminds you that the cursor won't work correctly after resizing the window.") tooltipText="Reminds you that the cursor won't work correctly after resizing the window.")
visibilityCheckRow = CheckBoxLabel("Visibility Check", visibilityCheckRow = mceutils.CheckBoxLabel("Visibility Check",
ref=Settings.visibilityCheck.propertyRef(), ref=Settings.visibilityCheck.propertyRef(),
tooltipText="Do a visibility check on chunks while loading. May cause a crash.") tooltipText="Do a visibility check on chunks while loading. May cause a crash.")
longDistanceRow = CheckBoxLabel("Long-Distance Mode", longDistanceRow = mceutils.CheckBoxLabel("Long-Distance Mode",
ref=Settings.longDistanceMode.propertyRef(), ref=Settings.longDistanceMode.propertyRef(),
tooltipText="Always target the farthest block under the cursor, even in mouselook mode. Shortcut: ALT-Z") tooltipText="Always target the farthest block under the cursor, even in mouselook mode. Shortcut: ALT-Z")
flyModeRow = CheckBoxLabel("Fly Mode", flyModeRow = mceutils.CheckBoxLabel("Fly Mode",
ref=Settings.flyMode.propertyRef(), ref=Settings.flyMode.propertyRef(),
tooltipText="Moving forward and backward will not change your altitude in Fly Mode.") tooltipText="Moving forward and backward will not change your altitude in Fly Mode.")
self.goPortableButton = goPortableButton = Button("Change", action=self.togglePortable) self.goPortableButton = goPortableButton = albow.Button("Change", action=self.togglePortable)
goPortableButton.tooltipText = self.portableButtonTooltip() goPortableButton.tooltipText = self.portableButtonTooltip()
goPortableRow = Row((ValueDisplay(ref=AttrRef(self, 'portableLabelText'), width=250, align='r'), goPortableButton)) goPortableRow = albow.Row((albow.ValueDisplay(ref=albow.AttrRef(self, 'portableLabelText'), width=250, align='r'), goPortableButton))
reportRow = CheckBoxLabel("Report Crashes", reportRow = mceutils.CheckBoxLabel("Report Crashes",
ref=Settings.reportCrashes.propertyRef(), ref=Settings.reportCrashes.propertyRef(),
tooltipText="Automatically report fatal errors to the author.") tooltipText="Automatically report fatal errors to the author.")
@ -512,15 +508,15 @@ class OptionsPanel(Dialog):
goPortableRow, goPortableRow,
) )
rightcol = Column(options, align='r') rightcol = albow.Column(options, align='r')
leftcol = Column(inputs, align='r') leftcol = albow.Column(inputs, align='r')
optionsColumn = Column((Label("Options"), optionsColumn = albow.Column((albow.Label("Options"),
Row((leftcol, rightcol), align="t"))) albow.Row((leftcol, rightcol), align="t")))
settingsRow = Row((optionsColumn,)) settingsRow = albow.Row((optionsColumn,))
optionsColumn = Column((settingsRow, Button("OK", action=self.dismiss))) optionsColumn = albow.Column((settingsRow, albow.Button("OK", action=self.dismiss)))
self.add(optionsColumn) self.add(optionsColumn)
self.shrink_wrap() self.shrink_wrap()
@ -550,12 +546,12 @@ class OptionsPanel(Dialog):
textChoices[1] = "This will move your schematics to your Documents folder and your settings to your Preferences folder. Continue?" textChoices[1] = "This will move your schematics to your Documents folder and your settings to your Preferences folder. Continue?"
alertText = textChoices[mcplatform.portable] alertText = textChoices[mcplatform.portable]
if ask(alertText) == "OK": if albow.ask(alertText) == "OK":
try: try:
[mcplatform.goPortable, mcplatform.goFixed][mcplatform.portable]() [mcplatform.goPortable, mcplatform.goFixed][mcplatform.portable]()
except Exception, e: except Exception, e:
traceback.print_exc() traceback.print_exc()
alert(u"Error while moving files: {0}".format(repr(e))) albow.alert(u"Error while moving files: {0}".format(repr(e)))
self.goPortableButton.tooltipText = self.portableButtonTooltip() self.goPortableButton.tooltipText = self.portableButtonTooltip()
@ -592,11 +588,11 @@ class MCEdit(GLViewport):
if len(sys.argv) > 1: if len(sys.argv) > 1:
for arg in sys.argv[1:]: for arg in sys.argv[1:]:
f = arg.decode(sys.getfilesystemencoding()) f = arg.decode(sys.getfilesystemencoding())
if isdir(join(saveFileDir, f)): if os.path.isdir(os.path.join(pymclevel.saveFileDir, f)):
f = join(saveFileDir, f) f = os.path.join(pymclevel.saveFileDir, f)
self.droppedLevel = f self.droppedLevel = f
break break
if exists(f): if os.path.exists(f):
self.droppedLevel = f self.droppedLevel = f
break break
@ -704,7 +700,7 @@ class MCEdit(GLViewport):
def makeSideColumn(self): def makeSideColumn(self):
def showhistory(): def showhistory():
try: try:
with file(os.path.join(mcplatform.dataDir), 'history.txt') as f: with file(os.path.join(directories.dataDir), 'history.txt') as f:
history = f.read() history = f.read()
history = "\n".join(history.split("\n")[:16]) history = "\n".join(history.split("\n")[:16])
@ -713,13 +709,13 @@ class MCEdit(GLViewport):
except Exception, e: except Exception, e:
history = "Exception while reading history.txt: {0}".format(e) history = "Exception while reading history.txt: {0}".format(e)
if ask(history, ["Show history.txt", "OK"]) == "Show history.txt": if albow.ask(history, ["Show history.txt", "OK"]) == "Show history.txt":
platform_open(os.path.join(mcplatform.dataDir), "history.txt") platform_open(os.path.join(directories.dataDir), "history.txt")
def showLicense(): def showLicense():
platform_open(os.path.join(mcplatform.dataDir, "LICENSE.txt")) platform_open(os.path.join(directories.dataDir, "LICENSE.txt"))
readmePath = os.path.join(mcplatform.dataDir, "README.html") readmePath = os.path.join(directories.dataDir, "README.html")
hotkeys = ([("", hotkeys = ([("",
"Keys", "Keys",
@ -744,7 +740,7 @@ class MCEdit(GLViewport):
showLicense), showLicense),
]) ])
c = HotkeyColumn(hotkeys) c = mceutils.HotkeyColumn(hotkeys)
return c return c
@ -778,7 +774,7 @@ class MCEdit(GLViewport):
if not hasattr(self, 'resizeAlert'): if not hasattr(self, 'resizeAlert'):
self.resizeAlert = self.shouldResizeAlert self.resizeAlert = self.shouldResizeAlert
if self.resizeAlert: if self.resizeAlert:
alert("Window size increased. You may have problems using the cursor until MCEdit is restarted.") albow.alert("Window size increased. You may have problems using the cursor until MCEdit is restarted.")
self.resizeAlert = False self.resizeAlert = False
shouldResizeAlert = Settings.shouldResizeAlert.configProperty() shouldResizeAlert = Settings.shouldResizeAlert.configProperty()
@ -809,7 +805,7 @@ class MCEdit(GLViewport):
self.add(self.editor) self.add(self.editor)
self.focus_switch = self.editor self.focus_switch = self.editor
alert("World created. To expand this infinite world, explore the world in Minecraft or use the Chunk Control tool to add or delete chunks.") albow.alert("World created. To expand this infinite world, explore the world in Minecraft or use the Chunk Control tool to add or delete chunks.")
def removeEditor(self): def removeEditor(self):
self.remove(self.editor) self.remove(self.editor)
@ -819,7 +815,7 @@ class MCEdit(GLViewport):
def confirm_quit(self): def confirm_quit(self):
if self.editor.unsavedEdits: if self.editor.unsavedEdits:
result = ask("There are {0} unsaved changes.".format(self.editor.unsavedEdits), result = albow.ask("There are {0} unsaved changes.".format(self.editor.unsavedEdits),
responses=["Save and Quit", "Quit", "Cancel"]) responses=["Save and Quit", "Quit", "Cancel"])
if result == "Save and Quit": if result == "Save and Quit":
self.saveAndQuit() self.saveAndQuit()
@ -851,14 +847,14 @@ class MCEdit(GLViewport):
rootwidget.add(mcedit) rootwidget.add(mcedit)
rootwidget.focus_switch = mcedit rootwidget.focus_switch = mcedit
if 0 == len(alphaMaterials.yamlDatas): if 0 == len(pymclevel.alphaMaterials.yamlDatas):
alert("Failed to load minecraft.yaml. Check the console window for details.") albow.alert("Failed to load minecraft.yaml. Check the console window for details.")
if mcedit.droppedLevel: if mcedit.droppedLevel:
mcedit.loadFile(mcedit.droppedLevel) mcedit.loadFile(mcedit.droppedLevel)
if mcedit.closeMinecraftWarning: if mcedit.closeMinecraftWarning:
answer = ask("Warning: You must close Minecraft completely before editing. Save corruption may result. Get Satisfaction to learn more.", ["Get Satisfaction", "Don't remind me again.", "OK"], default=1, cancel=1) answer = albow.ask("Warning: You must close Minecraft completely before editing. Save corruption may result. Get Satisfaction to learn more.", ["Get Satisfaction", "Don't remind me again.", "OK"], default=1, cancel=1)
if answer == "Get Satisfaction": if answer == "Get Satisfaction":
mcplatform.platform_open("http://getsatisfaction.com/mojang/topics/region_file_cache_interferes_with_map_editors_risking_save_corruption") mcplatform.platform_open("http://getsatisfaction.com/mojang/topics/region_file_cache_interferes_with_map_editors_risking_save_corruption")
if answer == "Don't remind me again.": if answer == "Don't remind me again.":
@ -916,7 +912,7 @@ def main(argv):
try: try:
if not os.path.exists(mcplatform.schematicsDir): if not os.path.exists(mcplatform.schematicsDir):
shutil.copytree( shutil.copytree(
os.path.join(mcplatform.dataDir, u'stock-schematics'), os.path.join(directories.dataDir, u'stock-schematics'),
mcplatform.schematicsDir mcplatform.schematicsDir
) )
except Exception, e: except Exception, e:
@ -946,16 +942,16 @@ class GLDisplayContext(object):
return max(20, w), max(20, h) return max(20, w), max(20, h)
def displayMode(self): def displayMode(self):
displayMode = OPENGL | RESIZABLE displayMode = pygame.OPENGL | pygame.RESIZABLE
if Settings.doubleBuffer.get(): if Settings.doubleBuffer.get():
displayMode |= DOUBLEBUF displayMode |= pygame.DOUBLEBUF
return displayMode return displayMode
def reset(self): def reset(self):
pygame.key.set_repeat(500, 100) pygame.key.set_repeat(500, 100)
try: try:
display.gl_set_attribute(GL_SWAP_CONTROL, Settings.vsync.get()) display.gl_set_attribute(pygame.GL_SWAP_CONTROL, Settings.vsync.get())
except Exception, e: except Exception, e:
logging.warning('Unable to set vertical sync: {0!r}'.format(e)) logging.warning('Unable to set vertical sync: {0!r}'.format(e))
@ -988,9 +984,9 @@ class GLDisplayContext(object):
config.saveConfig() config.saveConfig()
try: try:
iconpath = os.path.join(mcplatform.dataDir, 'favicon.png') iconpath = os.path.join(directories.dataDir, 'favicon.png')
iconfile = file(iconpath, 'rb') iconfile = file(iconpath, 'rb')
icon = image.load(iconfile, 'favicon.png') icon = pygame.image.load(iconfile, 'favicon.png')
display.set_icon(icon) display.set_icon(icon)
except Exception, e: except Exception, e:
logging.warning('Unable to set icon: {0!r}'.format(e)) logging.warning('Unable to set icon: {0!r}'.format(e))
@ -1015,7 +1011,7 @@ class GLDisplayContext(object):
def makeTerrainTexture(mats): def makeTerrainTexture(mats):
w, h = 1, 1 w, h = 1, 1
teximage = zeros((w, h, 4), dtype='uint8') teximage = numpy.zeros((w, h, 4), dtype='uint8')
teximage[:] = 127, 127, 127, 255 teximage[:] = 127, 127, 127, 255
GL.glTexImage2D( GL.glTexImage2D(
@ -1031,25 +1027,25 @@ class GLDisplayContext(object):
) )
textures = ( textures = (
(classicMaterials, 'terrain-classic.png'), (pymclevel.classicMaterials, 'terrain-classic.png'),
(indevMaterials, 'terrain-classic.png'), (pymclevel.indevMaterials, 'terrain-classic.png'),
(alphaMaterials, 'terrain.png'), (pymclevel.alphaMaterials, 'terrain.png'),
(pocketMaterials, 'terrain-pocket.png') (pymclevel.pocketMaterials, 'terrain-pocket.png')
) )
for mats, matFile in textures: for mats, matFile in textures:
try: try:
if mats.name == 'Alpha': if mats.name == 'Alpha':
tex = loadAlphaTerrainTexture() tex = mceutils.loadAlphaTerrainTexture()
else: else:
tex = loadPNGTexture(matFile) tex = mceutils.loadPNGTexture(matFile)
self.terrainTextures[mats.name] = tex self.terrainTextures[mats.name] = tex
except Exception, e: except Exception, e:
logging.warning( logging.warning(
'Unable to load terrain from {0}, using flat colors.' 'Unable to load terrain from {0}, using flat colors.'
'Error was: {1!r}'.format(matFile, e) 'Error was: {1!r}'.format(matFile, e)
) )
self.terrainTextures[mats.name] = Texture( self.terrainTextures[mats.name] = glutils.Texture(
functools.partial(makeTerrainTexture, mats) functools.partial(makeTerrainTexture, mats)
) )
mats.terrainTexture = self.terrainTextures[mats.name] mats.terrainTexture = self.terrainTextures[mats.name]

View File

@ -18,29 +18,26 @@ mceutils.py
Exception catching, some basic box drawing, texture pack loading, oddball UI elements Exception catching, some basic box drawing, texture pack loading, oddball UI elements
""" """
from OpenGL import GL, GLU from albow.controls import ValueDisplay
import numpy from albow import alert, ask, Button, Column, Label, root, Row, ValueButton, Widget
import httplib import config
import sys
import os
import platform
import traceback
import zipfile
from cStringIO import StringIO from cStringIO import StringIO
from datetime import datetime from datetime import datetime
import directories
from pygame import image, display from errorreporting import reportCrash, reportException
import png import httplib
import config
import release
import mcplatform import mcplatform
from albow import ask, alert, Widget, Button, ValueButton, Column, Row, Label, root import numpy
from OpenGL import GL, GLU
import os
import platform
import png
from pygame import display, image
import pymclevel import pymclevel
from albow.controls import ValueDisplay import release
from pymclevel import materials import sys
import traceback
import zipfile
from errorreporting import reportException, reportCrash
def alertException(func): def alertException(func):
@ -55,14 +52,12 @@ def alertException(func):
return _alertException return _alertException
from pymclevel.faces import *
def drawFace(box, face, type=GL.GL_QUADS): def drawFace(box, face, type=GL.GL_QUADS):
x, y, z, = box.origin x, y, z, = box.origin
x2, y2, z2 = box.maximum x2, y2, z2 = box.maximum
if face == FaceXDecreasing: if face == pymclevel.faces.FaceXDecreasing:
faceVertices = numpy.array( faceVertices = numpy.array(
(x, y2, z2, (x, y2, z2,
@ -71,7 +66,7 @@ def drawFace(box, face, type=GL.GL_QUADS):
x, y, z2, x, y, z2,
), dtype='f4') ), dtype='f4')
elif face == FaceXIncreasing: elif face == pymclevel.faces.FaceXIncreasing:
faceVertices = numpy.array( faceVertices = numpy.array(
(x2, y, z2, (x2, y, z2,
@ -80,7 +75,7 @@ def drawFace(box, face, type=GL.GL_QUADS):
x2, y2, z2, x2, y2, z2,
), dtype='f4') ), dtype='f4')
elif face == FaceYDecreasing: elif face == pymclevel.faces.FaceYDecreasing:
faceVertices = numpy.array( faceVertices = numpy.array(
(x2, y, z2, (x2, y, z2,
x, y, z2, x, y, z2,
@ -88,7 +83,7 @@ def drawFace(box, face, type=GL.GL_QUADS):
x2, y, z, x2, y, z,
), dtype='f4') ), dtype='f4')
elif face == FaceYIncreasing: elif face == pymclevel.faces.FaceYIncreasing:
faceVertices = numpy.array( faceVertices = numpy.array(
(x2, y2, z, (x2, y2, z,
x, y2, z, x, y2, z,
@ -96,7 +91,7 @@ def drawFace(box, face, type=GL.GL_QUADS):
x2, y2, z2, x2, y2, z2,
), dtype='f4') ), dtype='f4')
elif face == FaceZDecreasing: elif face == pymclevel.faces.FaceZDecreasing:
faceVertices = numpy.array( faceVertices = numpy.array(
(x, y, z, (x, y, z,
x, y2, z, x, y2, z,
@ -104,7 +99,7 @@ def drawFace(box, face, type=GL.GL_QUADS):
x2, y, z, x2, y, z,
), dtype='f4') ), dtype='f4')
elif face == FaceZIncreasing: elif face == pymclevel.faces.FaceZIncreasing:
faceVertices = numpy.array( faceVertices = numpy.array(
(x2, y, z2, (x2, y, z2,
x2, y2, z2, x2, y2, z2,
@ -356,7 +351,7 @@ def loadAlphaTerrainTexture():
if foliageColorFile is not None: if foliageColorFile is not None:
w, h, data = loadPNGData(slurpZipExt(foliageColorFile)) w, h, data = loadPNGData(slurpZipExt(foliageColorFile))
color = data[77, 55, :3] color = data[77, 55, :3]
materials.alphaMaterials.flatColors[17, 0, :3] = color # xxxxxxx pymclevel.materials.alphaMaterials.flatColors[17, 0, :3] = color # xxxxxxx
color = [c / 255.0 for c in color] color = [c / 255.0 for c in color]
LeafBlockRenderer.leafColor = color LeafBlockRenderer.leafColor = color
@ -366,7 +361,7 @@ def loadAlphaTerrainTexture():
if grassColorFile is not None: if grassColorFile is not None:
w, h, data = loadPNGData(slurpZipExt(grassColorFile)) w, h, data = loadPNGData(slurpZipExt(grassColorFile))
color = data[77, 55, :3] color = data[77, 55, :3]
materials.alphaMaterials.flatColors[2, 0, :3] = color # xxxxxxx pymclevel.materials.alphaMaterials.flatColors[2, 0, :3] = color # xxxxxxx
color = [c / 255.0 for c in color] color = [c / 255.0 for c in color]
GenericBlockRenderer.grassColor = color GenericBlockRenderer.grassColor = color
@ -384,7 +379,7 @@ def loadAlphaTerrainTexture():
def loadPNGData(filename_or_data): def loadPNGData(filename_or_data):
# if filename[1:4] != "PNG": # if filename[1:4] != "PNG":
if isinstance(filename_or_data, basestring): if isinstance(filename_or_data, basestring):
filename_or_data = os.path.join(mcplatform.dataDir, filename_or_data) filename_or_data = os.path.join(directories.dataDir, filename_or_data)
filename_or_data = filename_or_data.encode(sys.getfilesystemencoding()) filename_or_data = filename_or_data.encode(sys.getfilesystemencoding())
else: else:
# path = numpy.fromstring(filename, 'uint8') # path = numpy.fromstring(filename, 'uint8')

View File

@ -18,11 +18,10 @@ mcplatform.py
Platform-specific functions, folder paths, and the whole fixed/portable nonsense. Platform-specific functions, folder paths, and the whole fixed/portable nonsense.
""" """
import sys import directories
import os import os
from os.path import join, exists, dirname from os.path import dirname, exists, join
import sys
from directories import *
enc = sys.getfilesystemencoding() enc = sys.getfilesystemencoding()
@ -32,9 +31,9 @@ if sys.platform == "win32":
plat = "win32" plat = "win32"
if platform.architecture()[0] == "64bit": if platform.architecture()[0] == "64bit":
plat = "win-amd64" plat = "win-amd64"
sys.path.append(join(dataDir, "pymclevel", "build", "lib." + plat + "-2.6").encode(enc)) sys.path.append(join(directories.dataDir, "pymclevel", "build", "lib." + plat + "-2.6").encode(enc))
os.environ["YAML_ROOT"] = join(dataDir, "pymclevel").encode(enc) os.environ["YAML_ROOT"] = join(directories.dataDir, "pymclevel").encode(enc)
from pygame import display from pygame import display
@ -336,7 +335,7 @@ def platform_open(path):
win32_window_size = True win32_window_size = True
ini = u"mcedit.ini" ini = u"mcedit.ini"
parentDir = dirname(dataDir) parentDir = dirname(directories.dataDir)
docsFolder = documents_folder() docsFolder = documents_folder()
portableConfigFilePath = os.path.join(parentDir, ini) portableConfigFilePath = os.path.join(parentDir, ini)
portableSchematicsDir = os.path.join(parentDir, u"MCEdit-schematics") portableSchematicsDir = os.path.join(parentDir, u"MCEdit-schematics")
@ -419,7 +418,7 @@ else:
schematicsDir = fixedSchematicsDir schematicsDir = fixedSchematicsDir
portable = False portable = False
filtersDir = os.path.join(dataDir, "filters") filtersDir = os.path.join(directories.dataDir, "filters")
if filtersDir not in [s.decode(sys.getfilesystemencoding()) if filtersDir not in [s.decode(sys.getfilesystemencoding())
if isinstance(s, str) if isinstance(s, str)
else s else s
@ -434,4 +433,4 @@ if portable:
else: else:
jarStorage = ServerJarStorage() jarStorage = ServerJarStorage()
items.items = items.Items(join(dataDir, "pymclevel", "items.txt")) items.items = items.Items(join(directories.dataDir, "pymclevel", "items.txt"))

File diff suppressed because it is too large Load Diff