Example #1
0
 /**
  * Faz a leitura do arquivos e popula as variaveis.
  * @param $fileName nome do arquivo
  */
 function load($fileName)
 {
     $f = fopen($fileName, "rb");
     $header['magic'] = fread($f, 2);
     $header['version'] = unpack("Cmajor/Cminor", fread($f, 2));
     $this->version = (double) ($header['version']['major'] . "." . $header['version']['minor']);
     $header['count'] = freadb($f, 2, 'S');
     $header['unknown'] = freadb($f, 2, 'S');
     if ($header['magic'] !== self::MAGIC) {
         throw new UnexpectedValueException("Invalid magic header, found ({$header['magic']}) expected ({self->MAGIC})");
     }
     //Faz a leitura dos sprites.
     for ($i = 0; $i < $header['count']; ++$i) {
         $width = freadb($f, 2, 'S');
         $height = freadb($f, 2, 'S');
         $size = freadb($f, 2, 'S');
         $data = fread($f, $size);
         $this->list[] = new Sprite($width, $height, $data);
     }
     //Faz a leitura da paleta de cores
     for ($i = 0; $i < 256; ++$i) {
         $this->palette[$i] = unpack('Cred/Cgreen/Cblue/Calpha', fread($f, 4));
     }
     //Define a paleta para da Sprite lido
     for ($i = 0; $i < $header['count']; ++$i) {
         $this->list[$i]->setPalette($this->palette);
     }
     fclose($f);
 }
Example #2
0
/** 
 * Carrega o sprite e monta uma estrutura do mesmo. 
 *     fileName = nome do arquivo que vai ser carregado 
**/
function loadSprite($fileName)
{
    $file = fopen($fileName, "rb");
    //http://in.php.net/manual/en/function.fopen.php
    /* 
    Leitura do cabeçalho 
        header 
            magic = assinatura do formato, valor esperado SP, tamanho 2 bytes 
            version = versão do arquivo 
                major = valor esperado ?, tamanho 1 byte 
                minor = valor esperado ?, tamanho 1 byte 
            count = quantidade de imagens no arquivo, tamanho 1 byte 
            unknown = desconhecido, tamanho 2 bytes 
    */
    $sprite['header']['magic'] = fread($file, 2);
    //http://in.php.net/manual/en/function.fread.php
    $sprite['header']['version'] = unpack("Cmajor/Cminor", fread($file, 2));
    $sprite['header']['count'] = freadb($file, 2, 'S');
    $sprite['header']['unknown'] = freadb($file, 2, 'S');
    /* 
    Leitura de todas as imagens do arquivo 
        image = array com todas as imagens 
            width = largura, tamanho 2 bytes 
            height = altura, tamanho 2 bytes 
            size = tamanho dos dados da imagem comprimidos, tamanho 2 bytes 
            data = dados da imagem comprimidos, tamanho = size 
             
                Os dados da imagem estão comprimidos usando um algoritimo RLE customizado 
                somente os bytes 0x00 são comprimidos 
                00 05 FC DA 
                neste caso os dados reais seriam 
                00 00 00 00 00 FC DA 
                 
                Cada byte dos dados corresponde a uma posição na paleta de cores 
    */
    for ($i = 0; $i < $sprite['header']['count']; $i++) {
        $sprite['image'][$i]['width'] = freadb($file, 2, 'S');
        $sprite['image'][$i]['height'] = freadb($file, 2, 'S');
        $sprite['image'][$i]['size'] = freadb($file, 2, 'S');
        $sprite['image'][$i]['data'] = fread($file, $sprite['image'][$i]['size']);
    }
    /* 
    Carrego a peleta de cores 
        palette = array de 256 posições com todas as cores usadas nas imagens 
            r = nivel de cor vermelha 
            g = nivel de cor verde 			
            b = nivel de cor azul
            a = nivel de transparencia 
    */
    for ($i = 0; $i < 256; $i++) {
        $sprite['palette'][$i] = unpack('Cr/Cg/Cb/Ca', fread($file, 4));
    }
    fclose($file);
    //http://in.php.net/manual/en/function.fclose.php
    return $sprite;
}
Example #3
0
 /**
  * Faz a leitura do arquivos e popula as variaveis.
  * @param $fileName nome do arquivo
  */
 function load($fileName)
 {
     $f = fopen($fileName, "rb");
     $header['magic'] = fread($f, 2);
     $header['version'] = unpack("Cminor/Cmajor", fread($f, 2));
     $this->version = (double) ($header['version']['major'] . "." . $header['version']['minor']);
     $header['count'] = freadb($f, 2, "S");
     fseek($f, 10, SEEK_CUR);
     //skip unknown data
     if ($header['magic'] !== self::MAGIC) {
         throw new \UnexpectedValueException("Invalid magic header, found ({$header['magic']}) expected ({self->MAGIC})");
     }
     //Navega pelo arquivo e faz a leitura de todas as animações
     for ($a = 0; $a < $header['count']; ++$a) {
         $action = new Action();
         $frameCount = freadb($f, 4, "V");
         for ($i = 0; $i < $frameCount; ++$i) {
             fseek($f, 32, SEEK_CUR);
             //skip unknown data
             $frame = new Frame();
             $spriteCount = freadb($f, 4, "V");
             for ($s = 0; $s < $spriteCount; ++$s) {
                 $sprite = new Sprite();
                 $sprite->setX(freadb($f, 4, "l"));
                 $sprite->setY(freadb($f, 4, "l"));
                 $sprite->setIndex(freadb($f, 4, "l"));
                 $sprite->setMirror(freadb($f, 4, "l"));
                 if ($this->version >= 2.0) {
                     $sprite->setColor(unpack('Cred/Cgreen/Cblue/Calpha', fread($f, 4)));
                     $sprite->setScaleX(freadb($f, 4, "f"));
                     if ($this->version >= 2.4) {
                         $sprite->setScaleY(freadb($f, 4, "f"));
                     } else {
                         $sprite->setScaleY($sprite->getScaleX());
                     }
                     $sprite->setRotation(freadb($f, 4, "l"));
                     $sprite->setType(freadb($f, 4, "l"));
                     if ($this->version >= 2.5) {
                         $sprite->setWidth(freadb($f, 4, "l"));
                         $sprite->setHeight(freadb($f, 4, "l"));
                     }
                 }
                 $frame->AddSprite($sprite);
             }
             if ($this->version >= 2.0) {
                 $frame->setEventId(freadb($f, 4, "l"));
             }
             if ($this->version >= 2.3) {
                 $attachPointCount = freadb($f, 4, "V");
                 for ($p = 0; $p < $attachPointCount; ++$p) {
                     $attachPoint = new AttachPoint();
                     freadb($f, 4, "v");
                     //extra ignore
                     $attachPoint->setX(freadb($f, 4, "l"));
                     $attachPoint->setY(freadb($f, 4, "l"));
                     $attachPoint->setAttributes(freadb($f, 4, "l"));
                     $frame->addAttachPoint($attachPoint);
                 }
             }
             $action->addFrame($frame);
         }
         $this->list[] = $action;
     }
     fclose($f);
 }