Shinya Kitaoka 810553
#pragma once
Shinya Kitaoka 810553
Toshihiro Shimizu 890ddd
#ifndef TTIO_PLI_INCLUDED
Toshihiro Shimizu 890ddd
#define TTIO_PLI_INCLUDED
Toshihiro Shimizu 890ddd
Shinya Kitaoka 79e39b
#include <memory></memory>
Shinya Kitaoka 79e39b
Toshihiro Shimizu 890ddd
#include "tlevel_io.h"
Toshihiro Shimizu 890ddd
Campbell Barton 8c6c57
class GroupTag;
Toshihiro Shimizu 890ddd
class ParsedPli;
Toshihiro Shimizu 890ddd
class ImageTag;
Toshihiro Shimizu 890ddd
class TImageWriterPli;
Toshihiro Shimizu 890ddd
class TImageReaderPli;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===========================================================================
Toshihiro Shimizu 890ddd
/*
Shinya Kitaoka d1f6c4
class TWriterInfoPli final : public TWriterInfo {
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
 ~TWriterInfoPli() {}
Shinya Kitaoka 120a6e
  static TWriterInfo *create(const std::string &ext) { return new
Shinya Kitaoka 120a6e
TWriterInfoPli(); }
Toshihiro Shimizu 890ddd
  TWriterInfo *clone() const {
Toshihiro Shimizu 890ddd
  return new TWriterInfoPli(*this); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
  TWriterInfoPli() {}
Toshihiro Shimizu 890ddd
  TWriterInfoPli(const TWriterInfoPli&) {}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
//===========================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
  TLevelWriterPli:
Toshihiro Shimizu 890ddd
 */
Shinya Kitaoka d1f6c4
class TLevelWriterPli final : public TLevelWriter {
Shinya Kitaoka 120a6e
  //! object to manage a pli
Shinya Kitaoka 120a6e
  std::unique_ptr<parsedpli> m_pli;</parsedpli>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! number of frame in pli
Shinya Kitaoka 120a6e
  UINT m_frameNumber;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //  vettore da utilizzare per il calcolo della palette
Shinya Kitaoka 120a6e
  std::vector<tpixel> m_colorArray;</tpixel>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TLevelWriterPli(const TFilePath &path, TPropertyGroup *winfo);
Shinya Kitaoka 120a6e
  ~TLevelWriterPli();
Shinya Kitaoka 473e70
  TImageWriterP getFrameWriter(TFrameId fid) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  friend class TImageWriterPli;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  static TLevelWriter *create(const TFilePath &f, TPropertyGroup *winfo) {
Shinya Kitaoka 120a6e
    return new TLevelWriterPli(f, winfo);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  // not implemented
Shinya Kitaoka 120a6e
  TLevelWriterPli(const TLevelWriterPli &);
Shinya Kitaoka 120a6e
  TLevelWriterPli &operator=(const TLevelWriterPli &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===========================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef std::pair<imagetag *,="" bool=""> pliFrameInfo;</imagetag>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
  TLevelReaderPli:
Toshihiro Shimizu 890ddd
 */
Shinya Kitaoka d1f6c4
class TLevelReaderPli final : public TLevelReader {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TLevelReaderPli(const TFilePath &path);
Shinya Kitaoka 120a6e
  ~TLevelReaderPli();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  /*!
Shinya Kitaoka 120a6e
Return info about current pli
Shinya Kitaoka 120a6e
*/
Shinya Kitaoka 473e70
  TLevelP loadInfo() override;
Shinya Kitaoka 473e70
  void doReadPalette(bool doReadIt) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  /*!
Shinya Kitaoka 120a6e
Return an image with Reader information
Shinya Kitaoka 120a6e
*/
Shinya Kitaoka 473e70
  TImageReaderP getFrameReader(TFrameId fid) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  QString getCreator() override;
Shinya Kitaoka 120a6e
  friend class TImageReaderPli;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  bool m_init;
Shinya Kitaoka 120a6e
  //! struct which contanins reference to frame
Shinya Kitaoka 120a6e
  std::map<tframeid, pliframeinfo=""> m_mapOfImage;</tframeid,>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Reference to pli palette
Shinya Kitaoka 120a6e
  TPixel *m_palette;
Shinya Kitaoka 120a6e
  bool m_readPalette;
Shinya Kitaoka 120a6e
  //!
Shinya Kitaoka 120a6e
  TUINT32 m_paletteCount;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! flag to check if file exists
Shinya Kitaoka 120a6e
  bool m_doesExist;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! object to manage a pli
Shinya Kitaoka 120a6e
  ParsedPli *m_pli;
Shinya Kitaoka 120a6e
  TLevelP m_level;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  static TLevelReader *create(const TFilePath &f) {
Shinya Kitaoka 120a6e
    return new TLevelReaderPli(f);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  // not implemented
Shinya Kitaoka 120a6e
  TLevelReaderPli(const TLevelReaderPli &);
Shinya Kitaoka 120a6e
  TLevelReaderPli &operator=(const TLevelReaderPli &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===========================================================================
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
Classe locale per la lettura di un frame del livello.
Toshihiro Shimizu 890ddd
*/
Shinya Kitaoka d1f6c4
class TImageReaderPli final : public TImageReader {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TFrameId m_frameId;  //
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  // not implemented
Shinya Kitaoka 120a6e
  TImageReaderPli(const TImageReaderPli &);
Shinya Kitaoka 120a6e
  TImageReaderPli &operator=(const TImageReaderPli &src);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TImageReaderPli(const TFilePath &f, const TFrameId &frameId,
Shinya Kitaoka 120a6e
                  TLevelReaderPli *);
Shinya Kitaoka 120a6e
  ~TImageReaderPli() {}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  TImageP load() override;
Shinya Kitaoka 120a6e
  TImageP doLoad();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TDimension getSize() const;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TRect getBBox() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  //! Size of image
Shinya Kitaoka 120a6e
  int m_lx, m_ly;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Reference to level reader
Shinya Kitaoka 120a6e
  TLevelReaderPli *m_lrp;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Campbell Barton 8c6c57
// Functions
Campbell Barton 8c6c57
shun-iwasawa 27b0cf
TPalette *readPalette(GroupTag *paletteTag, int majorVersion, int minorVersion);
Campbell Barton 8c6c57
Shinya Kitaoka 120a6e
#endif  // TTIO_PLI_INCLUDED