Assets generator

From OpenSimulator

Revision as of 07:07, 20 February 2008 by Phrearch (Talk | contribs)

Jump to: navigation, search
######################################
#
# genassets.pl
#
# by: Illuminous Beltran/IBM
#
# This script generates the XML files
# needed to create a new asset set
# and associated inventory libraries
# for OpenSim.
#
# Given a directory tree of jp2 and lsl
# files, and it will traverse the tree
# and generate the assets file, the 
# inventory folder file, and the
# inventory items file.
#
# Requires the Data::UUID module
#
# http://search.cpan.org/~rjbs/Data-UUID-1.148/UUID.pm
#
######################################
use Data::UUID;

# Library name
$libName = "My Cool OpenSim Library";

# Root of your library, where your
# jp2 and lsl files are
$inputRoot="/opt/opensim/library";

# Where to put the inventory files
$invOutputDir="/opt/opensim/production/bin/inventory/MyCoolOpenSimLibrary/";

# Where to put the asset set file
$assetOutputDir="/opt/opensim/production/bin/assets/MyCoolOpenSimAssetSet/";

# Root key for OpenSim library folder
# This is a static value fixed in opensim
# so you should not have to change it unless
# it changes
$rootFolder = "00000112-000f-0000-0000-000100bba000";

#
# No user servicable parts below
#

$parent = $rootFolder;
$treeLevel = 0;

print("ROOT FOLDER:" . $rootFolder . "\n");

open(INVFDATOUT,">" . $invOutputDir . "3DDCInventoryFolders.xml") || die("Cannot Open Folders File");
print INVFDATOUT "<Nini>\n";

open(INVIDATOUT,">" . $invOutputDir . "3DDCInventoryItems.xml") || die("Cannot Open Items File");
print INVIDATOUT "<Nini>\n";

open(ASSETDATOUT,">" . $assetOutputDir . "3DDCAssetSet.xml") || die("Cannot Open Asset File");
print ASSETDATOUT "<Nini>\n";

walkTree($parent, $inputRoot, 0, "0");
  
print INVFDATOUT "</Nini>\n";
print INVIDATOUT "</Nini>\n";
print ASSETDATOUT "</Nini>\n";

close(INVFDATOUT);
close(INVIDATOUT);
close(ASSETDATOUT);

sub walkTree() {

    local $parent = shift;
    local $thisDir = shift;
    local $level = shift;
    local $atype = shift;
    local @dirs = ();
    local @files = ();
    opendir(HOMEDIR, $thisDir) || die("unable to open directory");

    while($filename = readdir(HOMEDIR)) {

        if( -d ($thisDir . "/" . $filename) ) {
           if( ($filename eq ".") || ($filename eq "..") || ($filename eq ".svn")) {next;}
           push(@dirs, $filename);
	}
    else {
          if( substr($filename, -4) eq ".jp2" || substr($filename, -4) eq ".lsl") {
              push(@files, $filename);
          }
       }
   }
   closedir(HOMEDIR);
   $uuidGen = new Data::UUID;
   $thisFolder = $uuidGen->create_str();
   print("Processing:" . $fName . "\n");
   if($_ eq "") {
       $fName = $libName;
   }
   else
   {
       $fName = $_;
   }
   if($level == 1) {
       $assetType = getType($fName);
   }
   else {
       $assetType = $atype;
   }
   writeFolder($fName, $thisFolder, $parent, $assetType);
   foreach(@files) {

$assetID = writeAsset($thisDir, $_, $assetType);

       writeItem($_, $assetID, $thisFolder, $assetType);
   }
   $parent = $thisFolder;
   $level ++;
   foreach(@dirs) {
 
          walkTree($parent, ($thisDir . "/" . $_), $level, $assetType);
   }
   print("\n");
}
sub getType() {
   $assetType = shift;
   if( index($assetType, "lsl", 0) > 0 || index($assetType, "script", 0) > 0 )
   {
       return "10";
   }
   else
   {
       return "0";
   }
}
sub writeFolder() {
   $name = shift;
   $folderID = shift;
   $parentID = shift;
   $type = shift;
   print INVFDATOUT "<Section Name=\"" . $name . " \">\n";
   print INVFDATOUT "<Key Name=\"folderID\" Value=\"" . $folderID . "\" />\n";
   print INVFDATOUT "<Key Name=\"parentFolderID\" Value=\"" . $parentID . "\" />\n";
   print INVFDATOUT "<Key Name=\"name\" Value=\"" . $name . "\" />\n";
   print INVFDATOUT "<Key Name=\"type\" Value=\"".$type."\" />\n";
   print INVFDATOUT "</Section>\n";
   print INVFDATOUT "\n";
}
sub writeItem() {
   $name = shift;
   $assetID = shift;
   $folderID = shift;
   $type = shift;
   $uuidGen = new Data::UUID;
   $inventoryID = $uuidGen->create_str();
   print INVIDATOUT "<Section Name=\"" . $name . "\">\n";
   print INVIDATOUT "<Key Name=\"inventoryID\" Value=\"" . $inventoryID . "\" />\n";
   print INVIDATOUT "<Key Name=\"assetID\" Value=\"" . $assetID . "\" />\n";
   print INVIDATOUT "<Key Name=\"folderID\" Value=\"" . $folderID . "\" />\n";
   print INVIDATOUT "<Key Name=\"name\" Value=\"" . $name . "\" />\n";
   print INVIDATOUT "<Key Name=\"description\" Value=\"" . $name . "\" />\n";
   print INVIDATOUT "<Key Name=\"assetType\" Value=\"".$type."\" />\n";
   print INVIDATOUT "<Key Name=\"inventoryType\" Value=\"".$type."\" />\n";
   print INVIDATOUT "<Key Name=\"currentPermissions\" Value=\"2147483647\" />\n";
   print INVIDATOUT "<Key Name=\"nextPermissions\" Value=\"2147483647\" />\n";
   print INVIDATOUT "<Key Name=\"everyonePermissions\" Value=\"2147483647\" />\n";
   print INVIDATOUT "<Key Name=\"basePermissions\" Value=\"2147483647\" />\n";
   print INVIDATOUT "</Section>\n";
   print INVIDATOUT "\n";
}


sub writeAsset() {
   $dir = shift;
   $name = shift;
   $type = shift;
   $uuidGen = new Data::UUID;
   $assetID = $uuidGen->create_str();
   print ASSETDATOUT "<Section Name=\"" . $name . "\">\n";
   print ASSETDATOUT "<Key Name=\"assetID\" Value=\"" . $assetID . "\" />\n";
   print ASSETDATOUT "<Key Name=\"name\" Value=\"" . $name . "\" />\n";
   print ASSETDATOUT "<Key Name=\"assetType\" Value=\"".$type."\" />\n";
   print ASSETDATOUT "<Key Name=\"inventoryType\" Value=\"".$type."\" />\n";
   print ASSETDATOUT "<Key Name=\"fileName\" Value=\"" . $dir . "/" . $name . "\" />\n";
   print ASSETDATOUT "</Section>\n";
   print ASSETDATOUT "\n";
   return $assetID;

}
Personal tools
General
About This Wiki