From 118f5ca0102144b5c282f012def6c96c69052bc1 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 29 Apr 2012 23:19:30 +1000 Subject: TONY: Implemented RMGameBoxes class and all dependent classes --- engines/tony/utils.h | 247 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 246 insertions(+), 1 deletion(-) (limited to 'engines/tony/utils.h') diff --git a/engines/tony/utils.h b/engines/tony/utils.h index b1afcca074..bec42b343b 100644 --- a/engines/tony/utils.h +++ b/engines/tony/utils.h @@ -19,16 +19,261 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ +/************************************************************************** + * 様様様様様様様様様様様様様様様様様 * + * Nayma Software srl * + * e -= We create much MORE than ALL =- * + * u- z$$$c '. 様様様様様様様様様様様様様様様様様 * + * .d" d$$$$$b "b. * + * .z$* d$$$$$$$L ^*$c. * + * #$$$. $$$$$$$$$ .$$$" Project: Roasted Moths........ * + * ^*$b 4$$$$$$$$$F .d$*" * + * ^$$. 4$$$$$$$$$F .$P" Module: Loc.CPP.............. * + * *$. '$$$$$$$$$ 4$P 4 * + * J *$ "$$$$$$$" $P r Author: Giovanni Bajo........ * + * z$ '$$$P*4c.*$$$*.z@*R$$$ $. * + * z$" "" #$F^ "" '$c Desc: Classi di gestione * + * z$$beu .ue=" $ "=e.. .zed$$c dei dati di una loca- * + * "#$e z$*" . `. ^*Nc e$"" zione................ * + * "$$". .r" ^4. .^$$" ..................... * + * ^.@*"6L=\ebu^+C$"*b." * + * "**$. "c 4$$$ J" J$P*" OS: [ ] DOS [X] WIN95 [ ] PORT * + * ^"--.^ 9$" .--"" COMP: [ ] WATCOM [X] VISUAL C++ * + * " [ ] EIFFEL [ ] GCC/GXX/DJGPP * + * * + * This source code is Copyright (C) Nayma Software. ALL RIGHTS RESERVED * + * * + **************************************************************************/ #ifndef TONY_UTILS_H #define TONY_UTILS_H #include "common/scummsys.h" #include "common/file.h" +#include "common/rect.h" #include "common/str.h" +#include "tony/mpal/memory.h" namespace Tony { +using namespace ::Tony::MPAL; + +/** + * Data stream for reading data + */ +class RMDataStream { +protected: + const byte *m_buf; + int m_length; + int m_pos; + bool m_bError; + int m_ecode; + +public: + enum RMDSPos { + CUR, + START, + END + }; + +private: + enum { + SIZENOTKNOWN = 0x7FFFFFFF + }; + +public: + // Constructor and destructor + RMDataStream(); + virtual ~RMDataStream(); + + // Loading buffer + void OpenBuffer(const byte *buf, int size = SIZENOTKNOWN); + void Close(void); + + // Attributi + int Length(); + virtual int Pos(); + + // EOF + virtual bool IsEOF(); + + // Read methods + friend RMDataStream &operator>>(RMDataStream &df, char &var); + friend RMDataStream &operator>>(RMDataStream &df, byte &var); + friend RMDataStream &operator>>(RMDataStream &df, uint16 &var); + friend RMDataStream &operator>>(RMDataStream &df, int16 &var); + friend RMDataStream &operator>>(RMDataStream &df, int &var); + friend RMDataStream &operator>>(RMDataStream &df, uint32 &var); + + // Lettura generica + virtual bool Read(void *buf, int size); + + // Skipping & Seeking + virtual RMDataStream &operator+=(int nBytes); + virtual int Seek(int nBytes, RMDSPos origin = CUR); + + // Gestione errori + void SetError(int ecode); + int GetError(); + bool IsError(); +}; + +/** + * String class + */ +class RMString { +private: + char *m_string; + int m_length; + int m_realLength; + +public: + RMString(); + ~RMString(); + + // Assignment constructors + RMString(const RMString &str); + RMString(const char *str); + RMString(const int ch); + + // Metodi generici + int Length(); + void Compact(); + + // Access characters within string + char GetAt(int nIndex); + void SetAt(int nIndex, char c); + char& operator[](int nIndex); + + // String cast + operator char*() const; + + // String assignments + const RMString &operator=(const RMString &str); + const RMString &operator=(const char *str); + const RMString &operator=(const int ch); + + // String concatenation + const RMString &operator+=(RMString &str); + const RMString &operator+=(const char *str); + const RMString &operator+=(const int ch); + + // Concatentation of string or character + friend RMString operator+(const RMString &str1, const RMString &str2); + + friend RMString operator+(RMString& str, const int ch); + friend RMString operator+(const int ch, RMString &str); + + friend RMString operator+(RMString &str, const char *s); + friend RMString operator+(const char *s, RMString &str); + + // Estrazione da data stream + friend RMDataStream& operator>>(RMDataStream& df, RMString &var); + + // Formattazione di stringa + void Format(char *str, ...); + +private: + void Resize(int size, bool bMantain = false); + void Connect(const char* str, int size); +}; + +/** + * Point class + */ +class RMPoint { +public: + int x, y; + +public: + // Constructor + RMPoint(); + RMPoint(const RMPoint &p); + RMPoint(int x1, int y1); + + // Copia + RMPoint& operator=(RMPoint p); + + // Set + void Set(int x1, int y1) { x=x1; y=y1; } + + // Offset + void Offset(int xOff, int yOff); + void Offset(RMPoint p); + friend RMPoint operator+(RMPoint p1, RMPoint p2); + friend RMPoint operator-(RMPoint p1, RMPoint p2); + RMPoint &operator+=(RMPoint p); + RMPoint &operator-=(RMPoint p); + RMPoint operator-(); + + // Confronti + bool operator==(RMPoint p); + bool operator!=(RMPoint p); + + // Casting a POINT + operator Common::Point() const; + + // Extraction from data streams + friend RMDataStream& operator>>(RMDataStream &ds, RMPoint &p); +}; + +class RMRect { +public: + int x1,y1; + int x2,y2; + +public: + RMRect(); + RMRect(int x1, int y1, int x2, int y2); + RMRect(RMPoint p1, RMPoint p2); + RMRect(const RMRect &rc); + + // Attributes + RMPoint &TopLeft(); + RMPoint &BottomRight(); + RMPoint Center(); + int Width(); + int Height(); + bool IsEmpty(); + int Size(); + + // Set + void SetRect(int x1, int y1, int x2, int y2); + void SetRect(RMPoint p1, RMPoint p2); + void SetEmpty(void); + + // Copiers + void SetRect(const RMRect &rc); + void CopyRect(const RMRect &rc); + const RMRect &operator=(const RMRect &rc); + + // Offset + void Offset(int xOff, int yOff); + void Offset(RMPoint p); + friend RMRect operator+(const RMRect &rc, RMPoint p); + friend RMRect operator-(const RMRect &rc, RMPoint p); + friend RMRect operator+(RMPoint p, const RMRect &rc); + friend RMRect operator-(RMPoint p, const RMRect &rc); + const RMRect &operator+=(RMPoint p); + const RMRect &operator-=(RMPoint p); + + // Comparison + bool operator==(const RMRect &rc); + bool operator!=(const RMRect &rc); + + // Normalise + void NormalizeRect(); + + // Point in rect + bool PtInRect(RMPoint pt) { return (pt.x>=x1 && pt.x<=x2 && pt.y>=y1 && pt.y<=y2); } + + // Extract from data stream + friend RMDataStream &operator>>(RMDataStream& ds, RMRect &rc); +}; + +/** + * Resource update manager + */ class RMResUpdate { struct ResUpdInfo { uint32 dwRes; @@ -46,7 +291,7 @@ public: ~RMResUpdate(); void Init(const Common::String &fileName); - const byte *QueryResource(uint32 dwRes); + HGLOBAL QueryResource(uint32 dwRes); }; } // End of namespace Tony -- cgit v1.2.3