/* 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.
 *
 */

#ifndef MADS_NEBULAR_SCENES7_H
#define MADS_NEBULAR_SCENES7_H

#include "common/scummsys.h"
#include "mads/game.h"
#include "mads/scene.h"
#include "mads/nebular/nebular_scenes.h"

namespace MADS {

namespace Nebular {

class Scene7xx : public NebularScene {
protected:
	/**
	 * Plays an appropriate sound when entering a scene
	 */
	void setAAName();

	/**
	 * Updates the prefix used for getting player sprites for the scene
	 */
	void setPlayerSpritesPrefix();

	void sceneEntrySound();

public:
	Scene7xx(MADSEngine *vm) : NebularScene(vm) {}
};

class Scene701 : public Scene7xx {
private:
	int _fishingLineId;

public:
	Scene701(MADSEngine *vm);
	void synchronize(Common::Serializer &s);

	virtual void setup();
	virtual void enter();
	virtual void preActions();
	virtual void actions();
	virtual void step();
};

class Scene702 : public Scene7xx {
public:
	Scene702(MADSEngine *vm) : Scene7xx(vm) {}

	virtual void setup();
	virtual void enter();
	virtual void preActions();
	virtual void actions();
};

class Scene703 : public Scene7xx{
private:
	int _monsterMode;
	int _boatFrame;
	int _curSequence;
	int _boatDir;

	bool _useBomb;
	bool _startMonsterTimer;
	bool _rexDeathFl;
	bool _restartTrigger70Fl;

	uint32 _lastFrameTime;
	uint32 _monsterTime;

	Conversation _dialog1;

	void handleBottleInterface();
	void setBottleSequence();
	void handleFillBottle(int quote);

public:
	Scene703(MADSEngine *vm);
	void synchronize(Common::Serializer &s);

	virtual void setup();
	virtual void enter();
	virtual void step();
	virtual void actions();
};

class Scene704 : public Scene7xx{
private:
	int _bottleHotspotId;
	int _boatCurrentFrame;
	int _animationMode;
	int _boatDirection;

	bool _takeBottleFl;

	Conversation _dialog1;

	void handleFillBottle(int quote);
	void setBottleSequence();
	void handleBottleInterface();

public:
	Scene704(MADSEngine *vm);
	void synchronize(Common::Serializer &s);

	virtual void setup();
	virtual void enter();
	virtual void step();
	virtual void actions();
};

class Scene705 : public Scene7xx{
private:
	Conversation _dialog1;

	void handleFillBottle(int quote);
	void setBottleSequence();
	void handleBottleInterface();

public:
	Scene705(MADSEngine *vm) : Scene7xx(vm) {}
	void synchronize(Common::Serializer &s);

	virtual void setup();
	virtual void enter();
	virtual void step();
	virtual void actions();
};

class Scene706 : public Scene7xx{
private:
	int _vaseHotspotId;
	int _vaseMode;
	int _animationMode;
	int _animationFrame;

	bool _emptyPedestral;

	void handleTakeVase();
	void handleRexDeath();

public:
	Scene706(MADSEngine *vm);
	void synchronize(Common::Serializer &s);

	virtual void setup();
	virtual void enter();
	virtual void step();
	virtual void preActions();
	virtual void actions();
};

class Scene707 : public SceneTeleporter {
public:
	Scene707(MADSEngine *vm) : SceneTeleporter(vm) {}

	virtual void setup();
	virtual void enter();
	virtual void step();
	virtual void actions();
};

class Scene710 : public Scene7xx {
public:
	Scene710(MADSEngine *vm) : Scene7xx(vm) {}

	virtual void setup();
	virtual void enter();
	virtual void step();
	virtual void actions();
};

class Scene711 : public SceneTeleporter {
public:
	Scene711(MADSEngine *vm) : SceneTeleporter(vm) {}

	virtual void setup();
	virtual void enter();
	virtual void step();
	virtual void actions();
};

class Scene751 : public Scene7xx{
private:
	bool _rexHandingLine;

public:
	Scene751(MADSEngine *vm);
	void synchronize(Common::Serializer &s);

	virtual void setup();
	virtual void enter();
	virtual void step();
	virtual void preActions();
	virtual void actions();
};

class Scene752 : public Scene7xx {
private:
	int _cardId;

public:
	Scene752(MADSEngine *vm);
	void synchronize(Common::Serializer &s);

	virtual void setup();
	virtual void enter();
	virtual void step();
	virtual void preActions();
	virtual void actions();
};

} // End of namespace Nebular
} // End of namespace MADS

#endif /* MADS_NEBULAR_SCENES7_H */