Mercurial > LightClone
changeset 46:a379bce1aeb1
Rename map.py to build.py; Add release script
author | koryspansel |
---|---|
date | Thu, 22 Sep 2011 14:35:35 -0700 |
parents | 50def8c971d9 |
children | 81d413160824 |
files | .hgignore LightTools/Map.py LightTools/build.py LightTools/release.py |
diffstat | 4 files changed, 156 insertions(+), 108 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Thu Sep 22 13:41:29 2011 -0700 +++ b/.hgignore Thu Sep 22 14:35:35 2011 -0700 @@ -9,4 +9,5 @@ Assets\UI\*.jpg Assets\UI\*.gif Bin\* -Intermediate\* \ No newline at end of file +Intermediate\* +LightTools\Build\* \ No newline at end of file
--- a/LightTools/Map.py Thu Sep 22 13:41:29 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -# -# Map -# - -import sys -import string -import struct -import os -import functools - -class MapDefinition: - Parse = functools.partial(string.split, sep=',') - - def __init__(self, size, position, direction, fcount, functions, grid): - self.Size = self._ParseVector(size) - self.Position = self._ParseVector(position) - self.Direction = self._ParseVector(direction) - self.Count = self._ParseVector(fcount) - self.Functions = self._ParseList(functions) - self.Grid = self._ParseList(grid) - - def Write(self, filename): - with open(filename, 'wb') as handle: - handle.write(struct.pack('i' * len(self.Size), *self.Size)) # 8 - handle.write(struct.pack('i' * len(self.Position), *self.Position)) # 8 - handle.write(struct.pack('i' * len(self.Direction), *self.Direction)) # 4 - handle.write(struct.pack('i' * len(self.Count), *self.Count)) # 4 - - for function in self.Functions: - handle.write(struct.pack('i' * len(function), *function)) # 4 * Count - - for tower in self.Grid: - handle.write(struct.pack('i' * len(tower), *tower)) # 8 * Size.X * Size.Y - - def _ParseVector(self, line): - return map(int, self.Parse(line)) - - def _ParseList(self, lines): - return [self._ParseVector(line) for line in lines] - -def ReadDefinition(filename): - def FilterLines(lines): - for line in map(string.strip, lines): - if line and not line.startswith('#'): - yield line.split('#')[0] - - with open(filename, 'rt') as handle: - lines = handle.readlines() - - definition = tuple(FilterLines(lines)) - - offset = 0 - size = definition[offset] - offset += 1 - position = definition[offset] - offset += 1 - direction = definition[offset] - offset += 1 - fcount = definition[offset] - offset += 1 - length = int(fcount) - functions = definition[offset:offset+length] - offset += length - grid = definition[offset:] - - return MapDefinition(size, position, direction, fcount, functions, grid) - -#if __name__ == '__main__': -# if len(sys.argv) < 2: -# print 'Usage: Map <map> [output]' -# sys.exit() -# -# path_input = os.path.abspath(sys.argv[1]) -# path_output = os.path.splitext(path_input)[0] + '.map' -# -# if len(sys.argv) > 2: -# path_output = os.path.abspath(sys.argv[2]) -# if os.path.isdir(path_output): -# path_output += os.path.splitext(os.path.basename(path_input))[0] + '.map' -# -# definition = ReadDefinition(path_input) -# if definition: -# print 'Building %s from %s' % (os.path.basename(path_output), os.path.basename(path_input)) -# definition.Write(path_output) - -if __name__ == '__main__': - path_root = os.path.dirname(sys.argv[0]) - path_assets = os.path.abspath(os.path.join(path_root, '..', 'Assets', 'Maps')) - path_build = os.path.abspath(os.path.join(path_root, '..', 'Data', 'Maps')) - - if os.path.isdir(path_assets): - for filename in os.listdir(path_assets): - if not filename.endswith('.def'): - continue - - definition = ReadDefinition(os.path.join(path_assets, filename)) - if not definition: - continue - - output = os.path.join(path_build, os.path.splitext(filename)[0] + '.map') - folder = os.path.dirname(output) - - if not os.path.isdir(folder): - os.makedirs(folder) - - print 'Building %s from %s' % (os.path.basename(output), os.path.basename(filename)) - definition.Write(output)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LightTools/build.py Thu Sep 22 14:35:35 2011 -0700 @@ -0,0 +1,89 @@ +# +# build +# + +import sys +import string +import struct +import os +import functools + +class MapDefinition: + Parse = functools.partial(string.split, sep=',') + + def __init__(self, size, position, direction, fcount, functions, grid): + self.Size = self._ParseVector(size) + self.Position = self._ParseVector(position) + self.Direction = self._ParseVector(direction) + self.Count = self._ParseVector(fcount) + self.Functions = self._ParseList(functions) + self.Grid = self._ParseList(grid) + + def Write(self, filename): + with open(filename, 'wb') as handle: + handle.write(struct.pack('i' * len(self.Size), *self.Size)) # 8 + handle.write(struct.pack('i' * len(self.Position), *self.Position)) # 8 + handle.write(struct.pack('i' * len(self.Direction), *self.Direction)) # 4 + handle.write(struct.pack('i' * len(self.Count), *self.Count)) # 4 + + for function in self.Functions: + handle.write(struct.pack('i' * len(function), *function)) # 4 * Count + + for tower in self.Grid: + handle.write(struct.pack('i' * len(tower), *tower)) # 8 * Size.X * Size.Y + + def _ParseVector(self, line): + return map(int, self.Parse(line)) + + def _ParseList(self, lines): + return [self._ParseVector(line) for line in lines] + +def ReadDefinition(filename): + def FilterLines(lines): + for line in map(string.strip, lines): + if line and not line.startswith('#'): + yield line.split('#')[0] + + with open(filename, 'rt') as handle: + lines = handle.readlines() + + definition = tuple(FilterLines(lines)) + + offset = 0 + size = definition[offset] + offset += 1 + position = definition[offset] + offset += 1 + direction = definition[offset] + offset += 1 + fcount = definition[offset] + offset += 1 + length = int(fcount) + functions = definition[offset:offset+length] + offset += length + grid = definition[offset:] + + return MapDefinition(size, position, direction, fcount, functions, grid) + +if __name__ == '__main__': + path_root = os.path.dirname(sys.argv[0]) + path_assets = os.path.abspath(os.path.join(path_root, '..', 'Assets', 'Maps')) + path_build = os.path.abspath(os.path.join(path_root, '..', 'Data', 'Maps')) + + if os.path.isdir(path_assets): + for filename in os.listdir(path_assets): + if not filename.endswith('.def'): + continue + + definition = ReadDefinition(os.path.join(path_assets, filename)) + if not definition: + continue + + output = os.path.join(path_build, os.path.splitext(filename)[0] + '.map') + folder = os.path.dirname(output) + + if not os.path.isdir(folder): + os.makedirs(folder) + + print 'Building %s from %s' % (os.path.basename(output), os.path.basename(filename)) + definition.Write(output)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LightTools/release.py Thu Sep 22 14:35:35 2011 -0700 @@ -0,0 +1,65 @@ +# +# release +# + +from os.path import join, isdir, isfile, dirname, basename, normpath + +import tempfile +import os +import sys +import shutil +import zipfile +import datetime + +def relative_walk(path): + for root, folders, files in os.walk(path): + for filename in files: + yield join(root, filename)[len(path)+1:] + +def release_project(root, location, project, target=None, build='Build'): + if target: + executable = join(root, project, 'bin', target, project + '.exe') + + else: + executable = join(root, project, 'bin', 'release', project + '.exe') + if not isfile(executable): + executable = join(root, project, 'bin', 'debug', project + '.exe') + + if not isfile(executable): + raise Exception('Error: Could not locate executable') + + data = join(root, 'data') + + if not isdir(data): + raise Exception('Error: Could not locate data folder') + + if isdir(build): + shutil.rmtree(build, True) + + os.makedirs(build) + + shutil.copyfile(executable, join(build, basename(executable))) + + for filename in relative_walk(data): + filepath = join(build, filename) + + if not isdir(dirname(filepath)): + os.makedirs(dirname(filepath)) + + shutil.copyfile(join(data, filename), filepath) + + if not isdir(location): + os.makedirs(location) + + current_date = datetime.datetime.now() + suffix = current_date.strftime('%Y%m%d%I%M%p') + print suffix + + with zipfile.ZipFile(join(location, project + '.zip'), 'w') as handle: + for filename in relative_walk(build): + handle.write(join(build, filename), filename) + +if __name__ == '__main__': + root = normpath(join(dirname(sys.argv[0]), '..')) + + release_project(root, '..\Release', 'LightClone') \ No newline at end of file