aboutsummaryrefslogtreecommitdiff
path: root/engines/tony/inventory.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/tony/inventory.h')
-rw-r--r--engines/tony/inventory.h212
1 files changed, 212 insertions, 0 deletions
diff --git a/engines/tony/inventory.h b/engines/tony/inventory.h
new file mode 100644
index 0000000000..5ec67f6228
--- /dev/null
+++ b/engines/tony/inventory.h
@@ -0,0 +1,212 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * 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: Inventory.CPP........ *
+ * *$. '$$$$$$$$$ 4$P 4 *
+ * J *$ "$$$$$$$" $P r Author: Giovanni Bajo........ *
+ * z$ '$$$P*4c.*$$$*.z@*R$$$ $. *
+ * z$" "" #$F^ "" '$c *
+ * z$$beu .ue=" $ "=e.. .zed$$c *
+ * "#$e z$*" . `. ^*Nc e$"" *
+ * "$$". .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_INVENTORY_H
+#define TONY_INVENTORY_H
+
+#include "common/scummsys.h"
+#include "common/system.h"
+#include "tony/font.h"
+#include "tony/gfxcore.h"
+#include "tony/loc.h"
+
+namespace Tony {
+
+struct RMInventoryItem {
+ RMItem icon;
+ RMGfxSourceBuffer8RLEByteAA *pointer;
+ int status;
+};
+
+class RMInventory : public RMGfxWoodyBuffer {
+private:
+ enum STATE {
+ CLOSED,
+ OPENING,
+ OPENED,
+ CLOSING,
+ SELECTING
+ };
+
+protected:
+ int m_nItems;
+ RMInventoryItem *m_items;
+
+ int m_inv[256];
+ int m_nInv;
+ int m_curPutY;
+ int m_curPutTime;
+
+ int m_curPos;
+ STATE m_state;
+ bool m_bHasFocus;
+ int m_nSelectObj;
+ int m_nCombine;
+ bool m_bCombining;
+
+ bool m_bBlinkingRight, m_bBlinkingLeft;
+
+ int miniAction;
+ RMItem miniInterface;
+ RMText m_hints[3];
+
+ OSystem::MutexRef m_csModifyInterface;
+
+protected:
+ // Prepara l'immagine dell'inventario. Va richiamato ogni volta
+ // che l'inventario cambia
+ void Prepare(void);
+
+ // Controlla se la posizione Y del mouse è corretta, anche in base
+ // alla posizione dell'inventario su schermo
+ bool CheckPointInside(RMPoint &pt);
+
+public:
+ RMInventory();
+ virtual ~RMInventory();
+
+ // Prepara un frame
+ void DoFrame(RMGfxTargetBuffer& bigBuf, RMPointer &ptr, RMPoint mpos, bool bCanOpen);
+
+ // Inizializzazione e chiusura
+ void Init(void);
+ void Close(void);
+ void Reset(void);
+
+ // Overload per la rimozione da otlist
+ bool RemoveThis(void);
+
+ // Overload per il disegno (per la posizione x&y e l'interfaccina)
+ void Draw(RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim);
+
+ // Metodo per determinare se l'inventario sta comandando gli input
+ bool HaveFocus(RMPoint mpos);
+
+ // Metodo per determinare se la mini interfaccia è attiva
+ bool MiniActive(void);
+
+ // Gestisce il click sinistro del mouse (solo quando c'ha focus)
+ bool LeftClick(RMPoint mpos, int &nCombineObj);
+
+ // Gestisce il tasto destro del mouse (solo quando c'ha focus)
+ void RightClick(RMPoint mpos);
+ bool RightRelease(RMPoint mpos, RMTonyAction& curAction);
+
+ // Avverte che è finito il combine
+ void EndCombine(void);
+
+public:
+ // Aggiunta di un oggetto all'inventario
+ void AddItem(int code);
+ RMInventory& operator+=(RMItem *item) { AddItem(item->MpalCode()); return *this; }
+ RMInventory& operator+=(RMItem &item) { AddItem(item.MpalCode()); return *this; }
+ RMInventory& operator+=(int code) { AddItem(code); return *this; }
+
+ // Rimozione di oggetto
+ void RemoveItem(int code);
+
+ // Siamo sopra un oggetto?
+ RMItem* WhichItemIsIn(RMPoint mpt);
+ bool ItemInFocus(RMPoint mpt);
+
+ // Cambia l'icona di un oggetto
+ void ChangeItemStatus(uint32 dwCode, uint32 dwStatus);
+
+ // Salvataggio
+ int GetSaveStateSize(void);
+ void SaveState(byte *state);
+ int LoadState(byte *state);
+};
+
+
+class RMInterface : public RMGfxSourceBuffer8RLEByte {
+private:
+ bool m_bActive;
+ RMPoint m_mpos;
+ RMPoint m_openPos;
+ RMPoint m_openStart;
+ RMText m_hints[5];
+ RMGfxSourceBuffer8RLEByte m_hotzone[5];
+ RMRect m_hotbbox[5];
+ bool m_bPalesati;
+ int m_lastHotZone;
+
+protected:
+ // Dice su quale zona calda si trova il punto
+ int OnWhichBox(RMPoint pt);
+
+public:
+ virtual ~RMInterface();
+
+ // Il solito DoFrame (polling del motore grafico)
+ void DoFrame(RMGfxTargetBuffer& bigBuf, RMPoint mousepos);
+
+ // TRUE se è attiva (non si può selezionare oggetti)
+ bool Active();
+
+ // Inizializzazione
+ void Init(void);
+ void Close(void);
+
+ // Resetta l'interfaccia
+ void Reset(void);
+
+ // Avverte dei click e rilasci del mouse
+ void Clicked(RMPoint mousepos);
+ bool Released(RMPoint mousepos, RMTonyAction &action);
+
+ // Attiva o disattiva il quinto verbo
+ void SetPalesati(bool bOn);
+ bool GetPalesati(void);
+
+ // Overloading del Draw per il posizionamente
+ virtual void Draw(RMGfxTargetBuffer &bigBuf, RMGfxPrimitive *prim);
+};
+
+} // End of namespace Tony
+
+#endif