Add tools from hiker
This commit is contained in:
parent
8b069df97f
commit
656ddcfdee
9
tools/ai_test/test_track.sh
Executable file
9
tools/ai_test/test_track.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
for track in abyss cocoa_temple fortmagma greenvalley lighthouse olivermath snowmountain stk_enterprise zengarden hacienda mansion snowtuxpeak farm mines sandtrack city gran_paradiso_island minigolf scotland xr591; do
|
||||||
|
echo "Testing $track"
|
||||||
|
$1 --log=0 -R \
|
||||||
|
--ai=nolok,nolok,nolok,nolok,nolok,nolok,nolok,nolok \
|
||||||
|
--track=$track --difficulty=2 --type=1 --test-ai=2 \
|
||||||
|
--profile-laps=10 --no-graphics > stdout.$track
|
||||||
|
done
|
198
tools/check_textures.py
Executable file
198
tools/check_textures.py
Executable file
@ -0,0 +1,198 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import struct
|
||||||
|
|
||||||
|
# Reads all texture names from the specified directory.
|
||||||
|
# Textures must end in jpg, png, or bmp.
|
||||||
|
# Returns a directory with the texture name as key.
|
||||||
|
def readAllTextures(dir, result):
|
||||||
|
if type(dir)==type([]):
|
||||||
|
for i in dir:
|
||||||
|
readAllTextures(i,result)
|
||||||
|
return
|
||||||
|
|
||||||
|
re_is_texture = re.compile("^.*\.(jpg|png|bmp)$")
|
||||||
|
for i in os.listdir(dir):
|
||||||
|
if re_is_texture.match(i):
|
||||||
|
result[i]=1
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Reads all texture names specified in a materials.xml file.
|
||||||
|
|
||||||
|
def readMaterialsXML(filename):
|
||||||
|
textures = {}
|
||||||
|
f = open(filename, "r")
|
||||||
|
|
||||||
|
# Crude RE instead of XML parsing
|
||||||
|
re_texture_name = re.compile("^ *<material name=\"([^\"]*)\"")
|
||||||
|
for i in f.readlines():
|
||||||
|
g = re_texture_name.match(i)
|
||||||
|
if g:
|
||||||
|
textures[g.groups(1)[0]] = 1
|
||||||
|
|
||||||
|
return textures
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
def getTexturesFromB3D(filename, textures):
|
||||||
|
f = open(filename, "r")
|
||||||
|
s = f.read(4)
|
||||||
|
if s!="BB3D":
|
||||||
|
print filename,"is not a valid b3d file"
|
||||||
|
f.close()
|
||||||
|
return
|
||||||
|
start_texs = 12
|
||||||
|
f.seek(start_texs)
|
||||||
|
s = f.read(4)
|
||||||
|
if s!="TEXS":
|
||||||
|
print "Can not handle '%s' b3d file - ignored."%filename
|
||||||
|
f.close()
|
||||||
|
return
|
||||||
|
n = struct.unpack("<i", f.read(4))[0] # Read end of section
|
||||||
|
n = n - start_texs - 4 # number of bytes to read in tex section
|
||||||
|
s = f.read(n)
|
||||||
|
i = 0
|
||||||
|
while i<n:
|
||||||
|
tex_name=""
|
||||||
|
while ord(s[i]):
|
||||||
|
tex_name = tex_name+s[i]
|
||||||
|
i=i+1
|
||||||
|
textures[tex_name] = 1
|
||||||
|
# Update the offst: add 1 byte string terminator,
|
||||||
|
# and 7 int/float values
|
||||||
|
i = i + 7*4 + 1
|
||||||
|
f.close()
|
||||||
|
return
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Reads all textures mentioned in a track.xml or kart.xml file (e.g. icons,
|
||||||
|
# screenshots, shadows)
|
||||||
|
def findTrackData(dir, textures, b3dfiles):
|
||||||
|
f = open(dir+"track.xml", "r")
|
||||||
|
if f:
|
||||||
|
r_screenshot = re.compile("^ *screenshot *= \"(.*)\" *$")
|
||||||
|
|
||||||
|
for i in f.readlines():
|
||||||
|
g = r_screenshot.match(i)
|
||||||
|
if g:
|
||||||
|
textures[g.group(1)] = 1
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
f = open(dir+"scene.xml", "r")
|
||||||
|
if f:
|
||||||
|
r_model = re.compile(" model=\"((.*)\.b3d.?)\"")
|
||||||
|
for i in f.readlines():
|
||||||
|
g = r_model.search(i)
|
||||||
|
if g:
|
||||||
|
b3dfiles[g.groups(1)[0]] = 1
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
def findKartData(dir, textures, b3dfiles):
|
||||||
|
f = open(dir+"scene.xml", "r")
|
||||||
|
if f:
|
||||||
|
r_model = re.compile(" model=\"((.*)\.b3d.?)\"")
|
||||||
|
for i in f.readlines():
|
||||||
|
g = r_model.search(i)
|
||||||
|
if g:
|
||||||
|
b3dfiles[g.groups(1)[0]] = 1
|
||||||
|
f.close()
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
f = open(dir+"scene.xml", "r")
|
||||||
|
if not f: return
|
||||||
|
print "WARNING"
|
||||||
|
if 1:
|
||||||
|
print "WARNING - kart.xml not done yet"
|
||||||
|
f = open(dir+"kart.xml", "r")
|
||||||
|
if not f: return
|
||||||
|
r_screenshot = re.compile("^ *screenshot *= \"(.*)\" *$")
|
||||||
|
for i in f.readlines():
|
||||||
|
g = r_screenshot.match(i)
|
||||||
|
if g:
|
||||||
|
textures[g.group(1)] = 1
|
||||||
|
f.close()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Checks if all textures for a specified track- or kart-directory
|
||||||
|
# are actually used.
|
||||||
|
|
||||||
|
def checkDir(dir, shared_textures):
|
||||||
|
|
||||||
|
# First read all *png/jpg/bmp files
|
||||||
|
# ---------------------------------
|
||||||
|
existing_textures = {}
|
||||||
|
readAllTextures(dir, existing_textures)
|
||||||
|
|
||||||
|
# Find all b3d files in the directory (print warnings for b3dz)
|
||||||
|
# -------------------------------------------------------------
|
||||||
|
b3d_files_in_dir = {}
|
||||||
|
for i in os.listdir(dir):
|
||||||
|
if i[-4:]==".b3d":
|
||||||
|
b3d_files_in_dir[i] = 1
|
||||||
|
elif i[-5:]==".b3dz":
|
||||||
|
print "Can't handle file '%s'."%i
|
||||||
|
|
||||||
|
# Find all textures listed in materials.xml
|
||||||
|
# -----------------------------------------
|
||||||
|
materials = readMaterialsXML(dir+"/materials.xml")
|
||||||
|
|
||||||
|
# Find all textures in track.xml and kart.xml files
|
||||||
|
# -------------------------------------------------
|
||||||
|
used_textures = {}
|
||||||
|
used_b3d_files = {}
|
||||||
|
findTrackData(dir, used_textures, used_b3d_files)
|
||||||
|
#findKartData(dir, used_textures, used_b3d_files)
|
||||||
|
|
||||||
|
# 1) Check if there are any missing b3d files
|
||||||
|
# ===========================================
|
||||||
|
for i in used_b3d_files.keys():
|
||||||
|
if not b3d_files_in_dir.get(i):
|
||||||
|
print "File '%s' is missing."%(dir+i)
|
||||||
|
|
||||||
|
# 2) Check if there are any unnecessary b3d files
|
||||||
|
# ===============================================
|
||||||
|
for i in b3d_files_in_dir:
|
||||||
|
if not used_b3d_files.get(i):
|
||||||
|
print "File '%s' is not used."%i
|
||||||
|
continue
|
||||||
|
del used_b3d_files[i]
|
||||||
|
# Load all textures used in this b3d file
|
||||||
|
getTexturesFromB3D(dir+i, used_textures)
|
||||||
|
|
||||||
|
# 3) Check if all textures used can be found
|
||||||
|
# ==========================================
|
||||||
|
for i in used_textures:
|
||||||
|
if not existing_textures.get(i)==1:
|
||||||
|
if not shared_textures.get(i):
|
||||||
|
print "Cannot find texture '%s'."%i
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
del existing_textures[i]
|
||||||
|
|
||||||
|
|
||||||
|
for i in existing_textures:
|
||||||
|
print "Texture '%s' is not used anywhere."%(dir+i)
|
||||||
|
|
||||||
|
# Now check that all entries in materials.xml are indeed used and exist
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
if __name__=="__main__":
|
||||||
|
assets = "../stk-assets/"
|
||||||
|
shared_textures = {}
|
||||||
|
readAllTextures([assets+"textures",
|
||||||
|
assets+"/textures/deprecated"],
|
||||||
|
shared_textures)
|
||||||
|
|
||||||
|
for i in os.listdir(assets+"tracks"):
|
||||||
|
checkDir(assets+"tracks/"+i+"/", shared_textures)
|
||||||
|
break
|
||||||
|
|
||||||
|
#for i in os.listdir(assets+"karts"):
|
||||||
|
# checkDir(assets+"karts/"+i+"/", shared_textures)
|
Loading…
Reference in New Issue
Block a user