/* 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. * * $URL$ * $Id$ */ #ifndef TEENAGENT_ENGINE_H #define TEENAGENT_ENGINE_H #include "engines/engine.h" #include "teenagent/pack.h" #include "teenagent/resources.h" #include "teenagent/inventory.h" #include "sound/audiostream.h" #include "sound/mixer.h" struct ADGameDescription; namespace TeenAgent { struct Object; class Scene; class MusicPlayer; class TeenAgentEngine: public Engine { public: enum Action { ActionNone, ActionExamine, ActionUse }; TeenAgentEngine(OSystem * system, const ADGameDescription *gd); virtual Common::Error run(); virtual Common::Error loadGameState(int slot); virtual Common::Error saveGameState(int slot, const char *desc); virtual bool canLoadGameStateCurrently() { return true; } virtual bool canSaveGameStateCurrently() { return !scene_busy; } virtual bool hasFeature(EngineFeature f) const; void deinit(); Object * findObject(int id, const Common::Point &point); void examine(const Common::Point &point, Object *object); void use(Object *object); bool processCallback(uint16 addr); inline Scene * getScene() { return scene; } //event driven: void displayMessage(uint16 addr, byte color = 0xd1); void displayMessage(const Common::String &str, byte color = 0xd1); void moveTo(const Common::Point & dst, byte o, bool warp = false); void moveTo(uint16 x, uint16 y, byte o, bool warp = false); void moveTo(Object * obj); void moveRel(int16 x, int16 y, byte o, bool warp = false); void playAnimation(uint16 id, byte slot = 0, bool async = false); void loadScene(byte id, const Common::Point &pos, byte o = 0); void loadScene(byte id, uint16 x, uint16 y, byte o = 0); void setOns(byte id, byte value, byte scene_id = 0); void setLan(byte id, byte value, byte scene_id = 0); void reloadLan(); void rejectMessage(); void playMusic(byte id); //schedules play void playSound(byte id, byte skip_frames = 1); void playSoundNow(byte id); void enableObject(byte id, byte scene_id = 0); void disableObject(byte id, byte scene_id = 0); void waitAnimation(); Common::RandomSource random; Scene *scene; Inventory *inventory; MusicPlayer *music; void setMusic(byte id); private: void processObject(); bool scene_busy; Action action; Object * dst_object; Audio::AudioStream *_musicStream; Audio::SoundHandle _musicHandle, _soundHandle; const ADGameDescription *_gameDescription; }; } // End of namespace TeenAgent #endif