diff --git a/direct/src/directscripts/packpanda.nsi b/direct/src/directscripts/packpanda.nsi index 2f7c5f92a6..1995da6d9f 100755 --- a/direct/src/directscripts/packpanda.nsi +++ b/direct/src/directscripts/packpanda.nsi @@ -102,6 +102,8 @@ Section "${SMDIRECTORY}" SecCore !ifdef PPGAME + SetOutPath $INSTDIR\models\audio + File /r /x CVS ${PANDA}\models\audio\* SetOutPath $INSTDIR\bin File /r ${PANDA}\bin\ppython.exe SetOutpath $INSTDIR\game diff --git a/direct/src/directscripts/packpanda.py b/direct/src/directscripts/packpanda.py index 8266ed55c8..ff917b36f3 100755 --- a/direct/src/directscripts/packpanda.py +++ b/direct/src/directscripts/packpanda.py @@ -17,9 +17,11 @@ import sys,os,getopt,string,shutil,py_compile OPTIONLIST = [ ("game", 1, "Name of directory containing game"), ("version", 1, "Version number to add to game name"), +("rmdir", 2, "Delete all directories with given name"), +("rmext", 2, "Delete all files with given extension"), ("fast", 0, "Use fast compression instead of good compression"), -("cplegg", 0, "Convert all EGG files to BAM"), -("cplpy", 0, "Convert all PY files to PYC"), +("bam", 0, "Generate BAM files"), +("pyc", 0, "Generate PYC files"), ] def ParseFailure(): @@ -38,15 +40,21 @@ def ParseOptions(args): options = {} longopts = [] for (opt, hasval, explanation) in OPTIONLIST: - if (hasval): longopts.append(opt+"=") - else: longopts.append(opt) - options[opt] = 0 - if (hasval): options[opt]="" + if (hasval==2): + longopts.append(opt+"=") + options[opt] = [] + elif (hasval==1): + longopts.append(opt+"=") + options[opt] = "" + else: + longopts.append(opt) + options[opt] = 0 opts, extras = getopt.getopt(args, "", longopts) for option,value in opts: for (opt, hasval, explanation) in OPTIONLIST: if (option == "--"+opt): - if (hasval): options[opt] = value + if (hasval==2): options[opt].append(value) + elif (hasval==1): options[opt] = value else: options[opt] = 1 return options except: ParseFailure(); @@ -88,8 +96,6 @@ GAME=os.path.abspath(GAME) NAME=os.path.basename(GAME) SMDIRECTORY=os.path.basename(GAME) if (VER!=""): SMDIRECTORY=SMDIRECTORY+" "+VER -if (OPTIONS["cplpy"]): MAIN=NAME+".pyc" -else: MAIN=NAME+".py" ICON=os.path.join(GAME,NAME+".ico") BITMAP=os.path.join(GAME,NAME+".bmp") LICENSE=os.path.join(GAME,"LICENSE.TXT") @@ -100,6 +106,8 @@ INSTALLDIR='C:\\'+os.path.basename(GAME) if (VER!=""): INSTALLDIR=INSTALLDIR+"-"+VER COMPRESS="lzma" if (OPTIONS["fast"]): COMPRESS="zlib" +if (OPTIONS["pyc"]): MAIN=NAME+".pyc" +else: MAIN=NAME+".py" def PrintFileStatus(label, file): if (os.path.exists(file)): @@ -131,54 +139,88 @@ if (os.path.isfile(BITMAP)==0): ############################################################################## # -# If necessary, make a copy of the game for compilation purposes. +# Copy the game to a temporary directory, so we can modify it safely. +# +############################################################################## + +TMPDIR=os.path.abspath("packpanda-TMP") +print "" +print "Copying the game to "+TMPDIR+"..." +if (os.path.exists(TMPDIR)): + try: shutil.rmtree(TMPDIR) + except: sys.exit("Cannot delete "+TMPDIR) +try: shutil.copytree(GAME, TMPDIR) +except: sys.exit("Cannot copy game to "+TMPDIR) + +############################################################################## +# +# Compile all py files, convert all egg files. +# +# We do this as a sanity check, even if the user +# hasn't requested that his files be compiled. # ############################################################################## EGG2BAM=os.path.join(PANDA,"bin","egg2bam.exe") def egg2bam(file): - orig = os.getcwd() - dir = os.path.dirname(file) - base = os.path.basename(file) - pre = base[:-4] - cmd = 'egg2bam -noabs "'+base+'" -o "'+pre+'.bam"' + bam = file[:-4]+'.bam' + present = os.path.exists(bam) + if (present): bam = "packpanda-TMP.bam"; + cmd = 'egg2bam -noabs -ps rel -pd . "'+file+'" -o "'+bam+'"' print "Executing: "+cmd - os.chdir(dir) res = os.spawnl(os.P_WAIT, EGG2BAM, cmd) - if (res != 0): sys.exit("Cannot convert egg to bam") - os.chdir(orig) - os.unlink(file) + if (res != 0): sys.exit("Problem in egg file: "+file) + if (present) or (OPTIONS["bam"]==0): + os.unlink(bam) def py2pyc(file): print "Compiling python "+file + pyc = file[:-3]+'.pyc' + pyo = file[:-3]+'.pyo' + if (os.path.exists(pyc)): os.unlink(pyc) + if (os.path.exists(pyo)): os.unlink(pyo) try: py_compile.compile(file) except: sys.exit("Cannot compile "+file) - os.unlink(file) + if (OPTIONS["pyc"]==0): + if (os.path.exists(pyc)): + os.unlink(pyc) + if (os.path.exists(pyo)): + os.unlink(pyo) def CompileFiles(file): if (os.path.isfile(file)): - if OPTIONS["cplegg"] and (string.lower(file[-4:])==".egg"): + if (string.lower(file[-4:])==".egg"): egg2bam(file) - elif OPTIONS["cplpy"] and (string.lower(file[-3:])==".py"): + elif (string.lower(file[-3:])==".py"): py2pyc(file) else: pass elif (os.path.isdir(file)): for x in os.listdir(file): CompileFiles(os.path.join(file,x)) -if (OPTIONS["cplpy"] or OPTIONS["cplegg"]): - TMPDIR=os.path.abspath("packpanda-TMP") - print "Copying the game to "+TMPDIR+"..." - if (os.path.exists(TMPDIR)): - try: shutil.rmtree(TMPDIR) - except: sys.exit("Cannot delete "+TMPDIR) - try: shutil.copytree(GAME, TMPDIR) - except: sys.exit("Cannot copy game to "+TMPDIR) - print "Searching for files to compile in "+TMPDIR+"..." - CompileFiles(TMPDIR) -else: - TMPDIR=GAME +def DeleteFiles(file): + base = string.lower(os.path.basename(file)) + if (os.path.isdir(file)): + for pattern in OPTIONS["rmdir"]: + if (string.lower(pattern) == base): + print "Deleting "+file + shutil.rmtree(file) + return + for x in os.listdir(file): + DeleteFiles(os.path.join(file,x)) + else: + for ext in OPTIONS["rmext"]: + if (base[-(len(ext)+1):] == string.lower("."+ext)): + print "Deleting "+file + os.unlink(file) + return + +print "" +print "Compiling BAM and PYC files..." +os.chdir(TMPDIR) +CompileFiles(".") +DeleteFiles(".") ############################################################################## # diff --git a/direct/src/extensions/SpriteParticleRenderer-extensions.py b/direct/src/extensions/SpriteParticleRenderer-extensions.py index 2c011747aa..6da9cbf1f8 100644 --- a/direct/src/extensions/SpriteParticleRenderer-extensions.py +++ b/direct/src/extensions/SpriteParticleRenderer-extensions.py @@ -16,7 +16,7 @@ def getSourceTextureName(self): if self.sourceTextureName == None: SpriteParticleRenderer.sourceTextureName = base.config.GetString( - 'particle-sprite-texture', 'phase_3/maps/eyes.jpg') + 'particle-sprite-texture', 'phase_3/maps/feyes.jpg') # Return instance copy of class variable return self.sourceTextureName diff --git a/direct/src/showbase/Audio3DManager.py b/direct/src/showbase/Audio3DManager.py index 5db2dc356a..c08f256f96 100644 --- a/direct/src/showbase/Audio3DManager.py +++ b/direct/src/showbase/Audio3DManager.py @@ -1,4 +1,4 @@ -from pandac.VBase3 import VBase3 +from pandac.PandaModules import VBase3 from direct.task import Task class Audio3DManager: diff --git a/doc/makepanda/makepanda.py b/doc/makepanda/makepanda.py index 62f163663c..c3e56455c6 100755 --- a/doc/makepanda/makepanda.py +++ b/doc/makepanda/makepanda.py @@ -4704,18 +4704,26 @@ def MakeInstallerNSIS(file,fullname,smdirectory,installdir): os.remove(file) if (os.path.exists("nsis-output.exe")): os.remove("nsis-output.exe") - def0 = '/DCOMPRESSOR="' + COMPRESSOR + '" ' - def1 = '/DFULLNAME="' + fullname + '" ' - def2 = '/DSMDIRECTORY="' + smdirectory + '" ' - def3 = '/DINSTALLDIR="' + installdir + '" ' - def4 = '/DPANDA="..\\..\\..\\' + PREFIX + '" ' - def5 = '/DPSOURCE="..\\..\\.." ' - def6 = '/DPYEXTRAS="..\\..\\..\\thirdparty\\win-extras" ' - def7 = '/DOUTFILE="..\\..\\..\\nsis-output.exe" ' - oscmd("thirdparty/win-nsis/makensis.exe /V2 "+def0+def1+def2+def3+def4+def5+def6+def7+" direct/src/directscripts/packpanda.nsi") + psource=os.path.abspath(".") + panda=os.path.abspath(PREFIX) + cmd="thirdparty/win-nsis/makensis.exe /V2 " + cmd=cmd+'/DCOMPRESSOR="'+COMPRESSOR+'" ' + cmd=cmd+'/DNAME="'+fullname+'" ' + cmd=cmd+'/DSMDIRECTORY="'+smdirectory+'" ' + cmd=cmd+'/DINSTALLDIR="'+installdir+'" ' + cmd=cmd+'/DOUTFILE="'+psource+'\\nsis-output.exe" ' + cmd=cmd+'/DLICENSE="'+panda+'\\LICENSE" ' + cmd=cmd+'/DLANGUAGE="Panda3DEnglish" ' + cmd=cmd+'/DRUNTEXT="Run the Panda Greeting Card" ' + cmd=cmd+'/DIBITMAP="panda-install.bmp" ' + cmd=cmd+'/DUBITMAP="panda-uninstall.bmp" ' + cmd=cmd+'/DPANDA="'+panda+'" ' + cmd=cmd+'/DPSOURCE="'+psource+'" ' + cmd=cmd+'/DPYEXTRAS="'+psource+'\\thirdparty\\win-extras" ' + cmd=cmd+'"'+psource+'\\direct\\src\\directscripts\\packpanda.nsi"' + oscmd(cmd) os.rename("nsis-output.exe", file) - def MakeInstallerDPKG(file): if (older(file,ALLTARGETS)): DEB=""" diff --git a/doc/makepanda/makepanda71.vcproj b/doc/makepanda/makepanda71.vcproj index d67212e8ca..320ec17d15 100755 --- a/doc/makepanda/makepanda71.vcproj +++ b/doc/makepanda/makepanda71.vcproj @@ -18,7 +18,7 @@ + Output="..\built\python\python.exe"/> diff --git a/dtool/src/dtoolutil/executionEnvironment.cxx b/dtool/src/dtoolutil/executionEnvironment.cxx index 23bafe4685..c451154079 100644 --- a/dtool/src/dtoolutil/executionEnvironment.cxx +++ b/dtool/src/dtoolutil/executionEnvironment.cxx @@ -387,7 +387,9 @@ read_args() { char buffer[buffer_size]; DWORD size = GetModuleFileName(dllhandle, buffer, buffer_size); if (size != 0) { - _dtool_name = Filename::from_os_specific(string(buffer,size)); + Filename tmp = Filename::from_os_specific(string(buffer,size)); + tmp.make_true_case(); + _dtool_name = tmp; } } #endif @@ -414,7 +416,9 @@ read_args() { char buffer[buffer_size]; DWORD size = GetModuleFileName(NULL, buffer, buffer_size); if (size != 0) { - _binary_name = Filename::from_os_specific(string(buffer, size)); + Filename tmp = Filename::from_os_specific(string(buffer, size)); + tmp.make_true_case(); + _binary_name = tmp; } #endif // WIN32_VC diff --git a/dtool/src/dtoolutil/executionEnvironment.h b/dtool/src/dtoolutil/executionEnvironment.h index 884762f929..992e2a3fdb 100644 --- a/dtool/src/dtoolutil/executionEnvironment.h +++ b/dtool/src/dtoolutil/executionEnvironment.h @@ -51,10 +51,15 @@ public: INLINE static int get_num_args(); INLINE static string get_arg(int n); + static Filename get_cwd(); + +PUBLISHED: INLINE static string get_binary_name(); INLINE static string get_dtool_name(); - static Filename get_cwd(); +PUBLISHED: + string ns_get_binary_name() const; + string ns_get_dtool_name() const; private: bool ns_has_environment_variable(const string &var) const; @@ -66,9 +71,6 @@ private: int ns_get_num_args() const; string ns_get_arg(int n) const; - string ns_get_binary_name() const; - string ns_get_dtool_name() const; - static ExecutionEnvironment *get_ptr(); void read_environment_variables(); diff --git a/pandatool/src/maxeggimport/maxEggLoader.cxx b/pandatool/src/maxeggimport/maxEggLoader.cxx index 15a59a916f..df6ee5fe88 100755 --- a/pandatool/src/maxeggimport/maxEggLoader.cxx +++ b/pandatool/src/maxeggimport/maxEggLoader.cxx @@ -152,15 +152,25 @@ public: vector _children; public: - LVector3d GetXV(void) { return _trans.get_row3(0); } - LVector3d GetYV(void) { return _trans.get_row3(1); } - LVector3d GetZV(void) { return _trans.get_row3(2); } + void GetRotation(LVector3d &xv, LVector3d &yv, LVector3d &zv); LVector3d GetPos(void) { return _trans.get_row3(3); } MaxEggJoint *ChooseBestChild(LVector3d dir); void ChooseEndPos(double thickness); void CreateMaxBone(CoordinateSystem sys); }; +void MaxEggJoint::GetRotation(LVector3d &xv, LVector3d &yv, LVector3d &zv) +{ + xv = _trans.get_row3(0); + yv = _trans.get_row3(1); + zv = _trans.get_row3(2); + xv.normalize(); + yv.normalize(); + zv = xv.cross(yv); + zv.normalize(); + yv = zv.cross(xv); +} + MaxEggJoint *MaxEggLoader::FindJoint(EggGroup *joint) { if (joint==0) return 0; @@ -252,9 +262,11 @@ void MaxEggJoint::ChooseEndPos(double thickness) void MaxEggJoint::CreateMaxBone(CoordinateSystem sys) { - Point3 xv(ConvertCoordSys(sys, GetXV())); - Point3 yv(ConvertCoordSys(sys, GetYV())); - Point3 zv(ConvertCoordSys(sys, GetZV())); + LVector3d rxv,ryv,rzv; + GetRotation(rxv, ryv, rzv); + Point3 xv(ConvertCoordSys(sys, rxv)); + Point3 yv(ConvertCoordSys(sys, ryv)); + Point3 zv(ConvertCoordSys(sys, rzv)); Point3 pos(ConvertCoordSys(sys, GetPos())); Point3 endpos(ConvertCoordSys(sys, _endpos)); Point3 tzv(ConvertCoordSys(sys, _perp)); diff --git a/pandatool/src/mayaeggimport/mayaEggLoader.cxx b/pandatool/src/mayaeggimport/mayaEggLoader.cxx index 71a9ac1144..2db9a9a076 100755 --- a/pandatool/src/mayaeggimport/mayaEggLoader.cxx +++ b/pandatool/src/mayaeggimport/mayaEggLoader.cxx @@ -214,9 +214,7 @@ public: vector _children; public: - LVector3d GetXV(void) { return _trans.get_row3(0); } - LVector3d GetYV(void) { return _trans.get_row3(1); } - LVector3d GetZV(void) { return _trans.get_row3(2); } + void GetRotation(LVector3d &xv, LVector3d &yv, LVector3d &zv); LVector3d GetPos(void) { return _trans.get_row3(3); } MayaEggJoint *ChooseBestChild(LVector3d dir); void ChooseEndPos(double thickness); @@ -224,6 +222,18 @@ public: void AssignNames(void); }; +void MayaEggJoint::GetRotation(LVector3d &xv, LVector3d &yv, LVector3d &zv) +{ + xv = _trans.get_row3(0); + yv = _trans.get_row3(1); + zv = _trans.get_row3(2); + xv.normalize(); + yv.normalize(); + zv = xv.cross(yv); + zv.normalize(); + yv = zv.cross(xv); +} + void MayaEggJoint::AssignNames(void) { string name = _egg_joint->get_name(); @@ -322,9 +332,11 @@ void MayaEggJoint::ChooseEndPos(double thickness) void MayaEggJoint::CreateMayaBone(CoordinateSystem sys) { - MFloatPoint xv(ConvertCoordSys(sys, GetXV())); - MFloatPoint yv(ConvertCoordSys(sys, GetYV())); - MFloatPoint zv(ConvertCoordSys(sys, GetZV())); + LVector3d rxv, ryv, rzv; + GetRotation(rxv, ryv, rzv); + MFloatPoint xv(ConvertCoordSys(sys, rxv)); + MFloatPoint yv(ConvertCoordSys(sys, ryv)); + MFloatPoint zv(ConvertCoordSys(sys, rzv)); MFloatPoint pos(ConvertCoordSys(sys, GetPos())); MFloatPoint endpos(ConvertCoordSys(sys, _endpos)); MFloatPoint tzv(ConvertCoordSys(sys, _perp));