/* 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 3 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, see . * */ #ifndef ALCACHOFA_PLAYER_H #define ALCACHOFA_PLAYER_H #include "alcachofa/rooms.h" namespace Alcachofa { class Player { public: Player(); inline Room *currentRoom() const { return _currentRoom; } inline MainCharacter *activeCharacter() const { return _activeCharacter; } inline ShapeObject *&selectedObject() { return _selectedObject; } inline void *&pressedObject() { return _pressedObject; } inline Item *&heldItem() { return _heldItem; } inline FakeSemaphore &semaphore() { return _semaphore; } MainCharacter *inactiveCharacter() const; FakeSemaphore &semaphoreFor(MainCharacterKind kind); inline bool &isGameLoaded() { return _isGameLoaded; } inline MainCharacterKind activeCharacterKind() const { return _activeCharacter == nullptr ? MainCharacterKind::None : _activeCharacter->kind(); } void preUpdate(); void postUpdate(); void updateCursor(); void drawCursor(bool forceDefaultCursor = false); void resetCursor(); void changeRoom(const Common::String &targetRoomName, bool resetCamera, bool isTemporary = false); void changeRoomToBeforeInventory(); void triggerObject(ObjectBase *object, const char *action); void triggerDoor(const Door *door); void addLastDialogCharacter(Character *character); void stopLastDialogCharacters(); void setActiveCharacter(MainCharacterKind kind); bool isAllowedToOpenMenu(); void syncGame(Common::Serializer &s); private: static constexpr const int kMaxLastDialogCharacters = 4; Common::ScopedPtr _cursorAnimation; FakeSemaphore _semaphore; Room *_currentRoom = nullptr, *_roomBeforeInventory = nullptr; MainCharacter *_activeCharacter; ShapeObject *_selectedObject = nullptr; void *_pressedObject = nullptr; // terrible but GlobalUI wants to store a Graphic pointer Item *_heldItem = nullptr; int32 _cursorFrameI = 0; bool _isGameLoaded = true, _didLoadGlobalRooms = false, _isInTemporaryRoom = false; Character *_lastDialogCharacters[kMaxLastDialogCharacters] = { nullptr }; int _nextLastDialogCharacter = 0; }; } #endif // ALCACHOFA_PLAYER_H