1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  */
22 
23 #include "ags/engine/ac/dialog.h"
24 #include "ags/shared/ac/dialog_topic.h"
25 #include "ags/engine/ac/dialog_options_rendering.h"
26 #include "ags/shared/ac/game_struct_defines.h"
27 #include "ags/engine/debugging/debug_log.h"
28 #include "ags/engine/script/runtime_script_value.h"
29 #include "ags/engine/ac/dynobj/cc_dialog.h"
30 #include "ags/shared/debugging/out.h"
31 #include "ags/engine/script/script_api.h"
32 #include "ags/engine/script/script_runtime.h"
33 #include "ags/globals.h"
34 
35 namespace AGS3 {
36 
37 // ** SCRIPT DIALOGOPTIONSRENDERING OBJECT
38 
DialogOptionsRendering_Update(ScriptDialogOptionsRendering * dlgOptRender)39 void DialogOptionsRendering_Update(ScriptDialogOptionsRendering *dlgOptRender) {
40 	dlgOptRender->needRepaint = true;
41 }
42 
DialogOptionsRendering_RunActiveOption(ScriptDialogOptionsRendering * dlgOptRender)43 bool DialogOptionsRendering_RunActiveOption(ScriptDialogOptionsRendering *dlgOptRender) {
44 	dlgOptRender->chosenOptionID = dlgOptRender->activeOptionID;
45 	return dlgOptRender->chosenOptionID >= 0;
46 }
47 
DialogOptionsRendering_GetX(ScriptDialogOptionsRendering * dlgOptRender)48 int DialogOptionsRendering_GetX(ScriptDialogOptionsRendering *dlgOptRender) {
49 	return dlgOptRender->x;
50 }
51 
DialogOptionsRendering_SetX(ScriptDialogOptionsRendering * dlgOptRender,int newX)52 void DialogOptionsRendering_SetX(ScriptDialogOptionsRendering *dlgOptRender, int newX) {
53 	dlgOptRender->x = newX;
54 }
55 
DialogOptionsRendering_GetY(ScriptDialogOptionsRendering * dlgOptRender)56 int DialogOptionsRendering_GetY(ScriptDialogOptionsRendering *dlgOptRender) {
57 	return dlgOptRender->y;
58 }
59 
DialogOptionsRendering_SetY(ScriptDialogOptionsRendering * dlgOptRender,int newY)60 void DialogOptionsRendering_SetY(ScriptDialogOptionsRendering *dlgOptRender, int newY) {
61 	dlgOptRender->y = newY;
62 }
63 
DialogOptionsRendering_GetWidth(ScriptDialogOptionsRendering * dlgOptRender)64 int DialogOptionsRendering_GetWidth(ScriptDialogOptionsRendering *dlgOptRender) {
65 	return dlgOptRender->width;
66 }
67 
DialogOptionsRendering_SetWidth(ScriptDialogOptionsRendering * dlgOptRender,int newWidth)68 void DialogOptionsRendering_SetWidth(ScriptDialogOptionsRendering *dlgOptRender, int newWidth) {
69 	dlgOptRender->width = newWidth;
70 }
71 
DialogOptionsRendering_GetHeight(ScriptDialogOptionsRendering * dlgOptRender)72 int DialogOptionsRendering_GetHeight(ScriptDialogOptionsRendering *dlgOptRender) {
73 	return dlgOptRender->height;
74 }
75 
DialogOptionsRendering_SetHeight(ScriptDialogOptionsRendering * dlgOptRender,int newHeight)76 void DialogOptionsRendering_SetHeight(ScriptDialogOptionsRendering *dlgOptRender, int newHeight) {
77 	dlgOptRender->height = newHeight;
78 }
79 
DialogOptionsRendering_GetHasAlphaChannel(ScriptDialogOptionsRendering * dlgOptRender)80 int DialogOptionsRendering_GetHasAlphaChannel(ScriptDialogOptionsRendering *dlgOptRender) {
81 	return dlgOptRender->hasAlphaChannel;
82 }
83 
DialogOptionsRendering_SetHasAlphaChannel(ScriptDialogOptionsRendering * dlgOptRender,bool hasAlphaChannel)84 void DialogOptionsRendering_SetHasAlphaChannel(ScriptDialogOptionsRendering *dlgOptRender, bool hasAlphaChannel) {
85 	dlgOptRender->hasAlphaChannel = hasAlphaChannel;
86 }
87 
DialogOptionsRendering_GetParserTextboxX(ScriptDialogOptionsRendering * dlgOptRender)88 int DialogOptionsRendering_GetParserTextboxX(ScriptDialogOptionsRendering *dlgOptRender) {
89 	return dlgOptRender->parserTextboxX;
90 }
91 
DialogOptionsRendering_SetParserTextboxX(ScriptDialogOptionsRendering * dlgOptRender,int newX)92 void DialogOptionsRendering_SetParserTextboxX(ScriptDialogOptionsRendering *dlgOptRender, int newX) {
93 	dlgOptRender->parserTextboxX = newX;
94 }
95 
DialogOptionsRendering_GetParserTextboxY(ScriptDialogOptionsRendering * dlgOptRender)96 int DialogOptionsRendering_GetParserTextboxY(ScriptDialogOptionsRendering *dlgOptRender) {
97 	return dlgOptRender->parserTextboxY;
98 }
99 
DialogOptionsRendering_SetParserTextboxY(ScriptDialogOptionsRendering * dlgOptRender,int newY)100 void DialogOptionsRendering_SetParserTextboxY(ScriptDialogOptionsRendering *dlgOptRender, int newY) {
101 	dlgOptRender->parserTextboxY = newY;
102 }
103 
DialogOptionsRendering_GetParserTextboxWidth(ScriptDialogOptionsRendering * dlgOptRender)104 int DialogOptionsRendering_GetParserTextboxWidth(ScriptDialogOptionsRendering *dlgOptRender) {
105 	return dlgOptRender->parserTextboxWidth;
106 }
107 
DialogOptionsRendering_SetParserTextboxWidth(ScriptDialogOptionsRendering * dlgOptRender,int newWidth)108 void DialogOptionsRendering_SetParserTextboxWidth(ScriptDialogOptionsRendering *dlgOptRender, int newWidth) {
109 	dlgOptRender->parserTextboxWidth = newWidth;
110 }
111 
DialogOptionsRendering_GetDialogToRender(ScriptDialogOptionsRendering * dlgOptRender)112 ScriptDialog *DialogOptionsRendering_GetDialogToRender(ScriptDialogOptionsRendering *dlgOptRender) {
113 	return &_G(scrDialog)[dlgOptRender->dialogID];
114 }
115 
DialogOptionsRendering_GetSurface(ScriptDialogOptionsRendering * dlgOptRender)116 ScriptDrawingSurface *DialogOptionsRendering_GetSurface(ScriptDialogOptionsRendering *dlgOptRender) {
117 	dlgOptRender->surfaceAccessed = true;
118 	return dlgOptRender->surfaceToRenderTo;
119 }
120 
DialogOptionsRendering_GetActiveOptionID(ScriptDialogOptionsRendering * dlgOptRender)121 int DialogOptionsRendering_GetActiveOptionID(ScriptDialogOptionsRendering *dlgOptRender) {
122 	return dlgOptRender->activeOptionID + 1;
123 }
124 
DialogOptionsRendering_SetActiveOptionID(ScriptDialogOptionsRendering * dlgOptRender,int activeOptionID)125 void DialogOptionsRendering_SetActiveOptionID(ScriptDialogOptionsRendering *dlgOptRender, int activeOptionID) {
126 	int optionCount = _G(dialog)[_G(scrDialog)[dlgOptRender->dialogID].id].numoptions;
127 	if ((activeOptionID < 0) || (activeOptionID > optionCount))
128 		quitprintf("DialogOptionsRenderingInfo.ActiveOptionID: invalid ID specified for this dialog (specified %d, valid range: 1..%d)", activeOptionID, optionCount);
129 
130 	if (dlgOptRender->activeOptionID != activeOptionID - 1) {
131 		dlgOptRender->activeOptionID = activeOptionID - 1;
132 		dlgOptRender->needRepaint = true;
133 	}
134 }
135 
136 //=============================================================================
137 //
138 // Script API Functions
139 //
140 //=============================================================================
141 
Sc_DialogOptionsRendering_Update(void * self,const RuntimeScriptValue * params,int32_t param_count)142 RuntimeScriptValue Sc_DialogOptionsRendering_Update(void *self, const RuntimeScriptValue *params, int32_t param_count) {
143 	API_OBJCALL_VOID(ScriptDialogOptionsRendering, DialogOptionsRendering_Update);
144 }
145 
Sc_DialogOptionsRendering_RunActiveOption(void * self,const RuntimeScriptValue * params,int32_t param_count)146 RuntimeScriptValue Sc_DialogOptionsRendering_RunActiveOption(void *self, const RuntimeScriptValue *params, int32_t param_count) {
147 	API_OBJCALL_BOOL(ScriptDialogOptionsRendering, DialogOptionsRendering_RunActiveOption);
148 }
149 
150 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetActiveOptionID(void * self,const RuntimeScriptValue * params,int32_t param_count)151 RuntimeScriptValue Sc_DialogOptionsRendering_GetActiveOptionID(void *self, const RuntimeScriptValue *params, int32_t param_count) {
152 	API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetActiveOptionID);
153 }
154 
155 // void (ScriptDialogOptionsRendering *dlgOptRender, int activeOptionID)
Sc_DialogOptionsRendering_SetActiveOptionID(void * self,const RuntimeScriptValue * params,int32_t param_count)156 RuntimeScriptValue Sc_DialogOptionsRendering_SetActiveOptionID(void *self, const RuntimeScriptValue *params, int32_t param_count) {
157 	API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetActiveOptionID);
158 }
159 
160 // ScriptDialog* (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetDialogToRender(void * self,const RuntimeScriptValue * params,int32_t param_count)161 RuntimeScriptValue Sc_DialogOptionsRendering_GetDialogToRender(void *self, const RuntimeScriptValue *params, int32_t param_count) {
162 	API_OBJCALL_OBJ(ScriptDialogOptionsRendering, ScriptDialog, _GP(ccDynamicDialog), DialogOptionsRendering_GetDialogToRender);
163 }
164 
165 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetHeight(void * self,const RuntimeScriptValue * params,int32_t param_count)166 RuntimeScriptValue Sc_DialogOptionsRendering_GetHeight(void *self, const RuntimeScriptValue *params, int32_t param_count) {
167 	API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetHeight);
168 }
169 
170 // void (ScriptDialogOptionsRendering *dlgOptRender, int newHeight)
Sc_DialogOptionsRendering_SetHeight(void * self,const RuntimeScriptValue * params,int32_t param_count)171 RuntimeScriptValue Sc_DialogOptionsRendering_SetHeight(void *self, const RuntimeScriptValue *params, int32_t param_count) {
172 	API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetHeight);
173 }
174 
175 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetParserTextboxX(void * self,const RuntimeScriptValue * params,int32_t param_count)176 RuntimeScriptValue Sc_DialogOptionsRendering_GetParserTextboxX(void *self, const RuntimeScriptValue *params, int32_t param_count) {
177 	API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetParserTextboxX);
178 }
179 
180 // void (ScriptDialogOptionsRendering *dlgOptRender, int newX)
Sc_DialogOptionsRendering_SetParserTextboxX(void * self,const RuntimeScriptValue * params,int32_t param_count)181 RuntimeScriptValue Sc_DialogOptionsRendering_SetParserTextboxX(void *self, const RuntimeScriptValue *params, int32_t param_count) {
182 	API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetParserTextboxX);
183 }
184 
185 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetParserTextboxY(void * self,const RuntimeScriptValue * params,int32_t param_count)186 RuntimeScriptValue Sc_DialogOptionsRendering_GetParserTextboxY(void *self, const RuntimeScriptValue *params, int32_t param_count) {
187 	API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetParserTextboxY);
188 }
189 
190 // void (ScriptDialogOptionsRendering *dlgOptRender, int newY)
Sc_DialogOptionsRendering_SetParserTextboxY(void * self,const RuntimeScriptValue * params,int32_t param_count)191 RuntimeScriptValue Sc_DialogOptionsRendering_SetParserTextboxY(void *self, const RuntimeScriptValue *params, int32_t param_count) {
192 	API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetParserTextboxY);
193 }
194 
195 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetParserTextboxWidth(void * self,const RuntimeScriptValue * params,int32_t param_count)196 RuntimeScriptValue Sc_DialogOptionsRendering_GetParserTextboxWidth(void *self, const RuntimeScriptValue *params, int32_t param_count) {
197 	API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetParserTextboxWidth);
198 }
199 
200 // void (ScriptDialogOptionsRendering *dlgOptRender, int newWidth)
Sc_DialogOptionsRendering_SetParserTextboxWidth(void * self,const RuntimeScriptValue * params,int32_t param_count)201 RuntimeScriptValue Sc_DialogOptionsRendering_SetParserTextboxWidth(void *self, const RuntimeScriptValue *params, int32_t param_count) {
202 	API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetParserTextboxWidth);
203 }
204 
205 // ScriptDrawingSurface* (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetSurface(void * self,const RuntimeScriptValue * params,int32_t param_count)206 RuntimeScriptValue Sc_DialogOptionsRendering_GetSurface(void *self, const RuntimeScriptValue *params, int32_t param_count) {
207 	API_OBJCALL_OBJAUTO(ScriptDialogOptionsRendering, ScriptDrawingSurface, DialogOptionsRendering_GetSurface);
208 }
209 
210 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetWidth(void * self,const RuntimeScriptValue * params,int32_t param_count)211 RuntimeScriptValue Sc_DialogOptionsRendering_GetWidth(void *self, const RuntimeScriptValue *params, int32_t param_count) {
212 	API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetWidth);
213 }
214 
215 // void (ScriptDialogOptionsRendering *dlgOptRender, int newWidth)
Sc_DialogOptionsRendering_SetWidth(void * self,const RuntimeScriptValue * params,int32_t param_count)216 RuntimeScriptValue Sc_DialogOptionsRendering_SetWidth(void *self, const RuntimeScriptValue *params, int32_t param_count) {
217 	API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetWidth);
218 }
219 
220 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetX(void * self,const RuntimeScriptValue * params,int32_t param_count)221 RuntimeScriptValue Sc_DialogOptionsRendering_GetX(void *self, const RuntimeScriptValue *params, int32_t param_count) {
222 	API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetX);
223 }
224 
225 // void (ScriptDialogOptionsRendering *dlgOptRender, int newX)
Sc_DialogOptionsRendering_SetX(void * self,const RuntimeScriptValue * params,int32_t param_count)226 RuntimeScriptValue Sc_DialogOptionsRendering_SetX(void *self, const RuntimeScriptValue *params, int32_t param_count) {
227 	API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetX);
228 }
229 
230 // int (ScriptDialogOptionsRendering *dlgOptRender)
Sc_DialogOptionsRendering_GetY(void * self,const RuntimeScriptValue * params,int32_t param_count)231 RuntimeScriptValue Sc_DialogOptionsRendering_GetY(void *self, const RuntimeScriptValue *params, int32_t param_count) {
232 	API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetY);
233 }
234 
235 // void (ScriptDialogOptionsRendering *dlgOptRender, int newY)
Sc_DialogOptionsRendering_SetY(void * self,const RuntimeScriptValue * params,int32_t param_count)236 RuntimeScriptValue Sc_DialogOptionsRendering_SetY(void *self, const RuntimeScriptValue *params, int32_t param_count) {
237 	API_OBJCALL_VOID_PINT(ScriptDialogOptionsRendering, DialogOptionsRendering_SetY);
238 }
239 
Sc_DialogOptionsRendering_GetHasAlphaChannel(void * self,const RuntimeScriptValue * params,int32_t param_count)240 RuntimeScriptValue Sc_DialogOptionsRendering_GetHasAlphaChannel(void *self, const RuntimeScriptValue *params, int32_t param_count) {
241 	API_OBJCALL_INT(ScriptDialogOptionsRendering, DialogOptionsRendering_GetHasAlphaChannel);
242 }
243 
Sc_DialogOptionsRendering_SetHasAlphaChannel(void * self,const RuntimeScriptValue * params,int32_t param_count)244 RuntimeScriptValue Sc_DialogOptionsRendering_SetHasAlphaChannel(void *self, const RuntimeScriptValue *params, int32_t param_count) {
245 	API_OBJCALL_VOID_PBOOL(ScriptDialogOptionsRendering, DialogOptionsRendering_SetHasAlphaChannel);
246 }
247 
248 
RegisterDialogOptionsRenderingAPI()249 void RegisterDialogOptionsRenderingAPI() {
250 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::Update^0", Sc_DialogOptionsRendering_Update);
251 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::RunActiveOption^0", Sc_DialogOptionsRendering_RunActiveOption);
252 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_ActiveOptionID", Sc_DialogOptionsRendering_GetActiveOptionID);
253 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_ActiveOptionID", Sc_DialogOptionsRendering_SetActiveOptionID);
254 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_DialogToRender", Sc_DialogOptionsRendering_GetDialogToRender);
255 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_Height", Sc_DialogOptionsRendering_GetHeight);
256 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_Height", Sc_DialogOptionsRendering_SetHeight);
257 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_ParserTextBoxX", Sc_DialogOptionsRendering_GetParserTextboxX);
258 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_ParserTextBoxX", Sc_DialogOptionsRendering_SetParserTextboxX);
259 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_ParserTextBoxY", Sc_DialogOptionsRendering_GetParserTextboxY);
260 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_ParserTextBoxY", Sc_DialogOptionsRendering_SetParserTextboxY);
261 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_ParserTextBoxWidth", Sc_DialogOptionsRendering_GetParserTextboxWidth);
262 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_ParserTextBoxWidth", Sc_DialogOptionsRendering_SetParserTextboxWidth);
263 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_Surface", Sc_DialogOptionsRendering_GetSurface);
264 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_Width", Sc_DialogOptionsRendering_GetWidth);
265 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_Width", Sc_DialogOptionsRendering_SetWidth);
266 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_X", Sc_DialogOptionsRendering_GetX);
267 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_X", Sc_DialogOptionsRendering_SetX);
268 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_Y", Sc_DialogOptionsRendering_GetY);
269 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_Y", Sc_DialogOptionsRendering_SetY);
270 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::get_HasAlphaChannel", Sc_DialogOptionsRendering_GetHasAlphaChannel);
271 	ccAddExternalObjectFunction("DialogOptionsRenderingInfo::set_HasAlphaChannel", Sc_DialogOptionsRendering_SetHasAlphaChannel);
272 }
273 
274 } // namespace AGS3
275