1 /*
2 * Copyright (C) 2004 Ivo Danihelka (ivo@danihelka.net)
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 */
9 #include "Planner.h"
10
11 #include "ScriptState.h"
12 #include "CommandQueue.h"
13 #include "DialogStack.h"
14
15 #include "SubTitleAgent.h"
16 #include "ScriptCmd.h"
17 #include "dialog-script.h"
18 #include "options-script.h"
19
20 //-----------------------------------------------------------------
Planner()21 Planner::Planner()
22 {
23 m_plan = new CommandQueue();
24 m_dialogs = new DialogStack();
25 registerScriptFuncs();
26 }
27 //-----------------------------------------------------------------
28 void
registerScriptFuncs()29 Planner::registerScriptFuncs()
30 {
31 m_script->registerFunc("game_planAction", script_game_planAction);
32 m_script->registerFunc("game_isPlanning", script_game_isPlanning);
33 m_script->registerFunc("game_killPlan", script_game_killPlan);
34
35 m_script->registerFunc("dialog_isDialog", script_dialog_isDialog);
36 m_script->registerFunc("dialog_addFont", script_dialog_addFont);
37 m_script->registerFunc("dialog_addDialog", script_dialog_addDialog);
38 m_script->registerFunc("model_isTalking", script_model_isTalking);
39 m_script->registerFunc("model_talk", script_model_talk);
40 m_script->registerFunc("model_killSound", script_model_killSound);
41
42 m_script->registerFunc("sound_playMusic", script_sound_playMusic);
43 m_script->registerFunc("sound_stopMusic", script_sound_stopMusic);
44
45 m_script->registerFunc("options_getParam", script_options_getParam);
46 }
47 //-----------------------------------------------------------------
~Planner()48 Planner::~Planner()
49 {
50 //NOTE: planned ScriptCmd must be removed before script
51 delete m_plan;
52 delete m_dialogs;
53 }
54 //-----------------------------------------------------------------
55 /**
56 * Execute next action.
57 * @return true for finished plan
58 */
59 bool
satisfyPlan()60 Planner::satisfyPlan()
61 {
62 m_dialogs->updateStack();
63 m_plan->executeFirst();
64 return m_plan->empty();
65 }
66 //-----------------------------------------------------------------
67 void
killPlan()68 Planner::killPlan()
69 {
70 m_dialogs->killTalks();
71 SubTitleAgent::agent()->killTalks();
72 interruptPlan();
73 }
74 //-----------------------------------------------------------------
75 void
interruptPlan()76 Planner::interruptPlan()
77 {
78 m_plan->removeAll();
79 }
80 //-----------------------------------------------------------------
81 void
planAction(int funcRef)82 Planner::planAction(int funcRef)
83 {
84 m_plan->planCommand(new ScriptCmd(m_script, funcRef));
85 }
86 //-----------------------------------------------------------------
87 /**
88 * Return true when there is a planned command in queue.
89 */
90 bool
isPlanning() const91 Planner::isPlanning() const
92 {
93 return !m_plan->empty();
94 }
95
96