ACE3/addons/slideshow/functions/fnc_createSlideshow.sqf

109 lines
3.4 KiB
Plaintext
Raw Permalink Normal View History

#include "..\script_component.hpp"
2015-06-27 02:11:57 +00:00
/*
* Author: Jonpas, DaC
* Prepares necessary variables and default image.
*
* Arguments:
* 0: Objects <ARRAY>
* 1: Controller Objects <ARRAY>
* 2: Image Paths <ARRAY>
* 3: Action Names <ARRAY>
* 4: Slide Duration, 0 disables automatic transitions <NUMBER>
* 5: Set Name <STRING> (default: localized "Slides")
* 6: Texture Selection <NUMBER> (default: 0)
2015-06-27 02:11:57 +00:00
*
* Return Value:
* Slideshow ID <NUMBER>
2015-06-27 02:11:57 +00:00
*
* Example:
* [[object1, object2, object3], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5, "My Slides"] call ace_slideshow_fnc_createSlideshow
2015-06-27 02:11:57 +00:00
*
* Public: Yes
*/
params [
2015-09-26 21:02:18 +00:00
["_objects", [], [[]] ],
["_controllers", [], [[]] ],
["_images", [], [[]] ],
["_names", [], [[]] ],
["_duration", 0, [0]],
["_setName", localize LSTRING(Interaction), [""]],
["_selection", 0, [0]]
];
2015-06-27 02:11:57 +00:00
// Verify data
if (_objects isEqualTo []) exitWith {
ERROR("Slideshow Objects field must NOT be empty!");
};
if (count _images != count _names || {_images isEqualTo []} || {_names isEqualTo []}) exitWith {
ERROR("Slideshow Images or Names fields must NOT be empty and must have equal number of items!");
};
2015-06-27 02:11:57 +00:00
// If no controllers use objects as controllers
2015-09-26 21:06:35 +00:00
if (_controllers isEqualTo []) then {
2015-06-27 02:11:57 +00:00
_controllers = _objects;
};
TRACE_5("Information",_objects,_controllers,_images,_names,_setName);
2015-06-27 02:11:57 +00:00
if (isServer) then {
// Default images on whiteboards (first image)
{
_x setObjectTextureGlobal [_selection, _images select 0];
} count _objects;
};
2015-06-27 02:11:57 +00:00
// Number of slideshows (multiple modules support)
GVAR(slideshows) = GVAR(slideshows) + 1;
private _currentSlideshow = GVAR(slideshows); // Local variable in case GVAR gets changed during execution of below code
2015-06-29 19:54:40 +00:00
// If interaction menu module is not present, set default duration value
if !(["ace_interact_menu"] call EFUNC(common,isModLoaded)) then {
_duration = NOINTERACTMENU_DURATION;
INFO_1("Interaction Menu module not present,defaulting duration value to %1",_duration);
};
2015-07-13 20:07:21 +00:00
// Add interactions if automatic transitions are disabled, else setup automatic transitions
if (_duration == 0) then {
// Reverse the arrays so that the interactions will be added in the right order
reverse _images;
reverse _names;
2015-07-13 20:07:21 +00:00
{
if (_setName == "") then {
_setName = localize LSTRING(Interaction);
};
2015-07-13 20:07:21 +00:00
// Add Slides sub-action and populate with images
private _slidesAction = [
format [QGVAR(slideshow%1), _currentSlideshow],
_setName,
"",
{},
{true},
{(_this select 2) call FUNC(addSlideActions)},
[_objects, _images, _names, _x, _currentSlideshow, _selection],
[0, 0, 0],
2
] call EFUNC(interact_menu,createAction);
2015-07-13 20:07:21 +00:00
[_x, 0, ["ACE_MainActions"], _slidesAction] call EFUNC(interact_menu,addActionToObject);
2015-08-07 10:11:34 +00:00
nil
} count _controllers;
2015-07-13 20:07:21 +00:00
} else {
if !(isServer) exitWith {};
2015-07-13 20:07:21 +00:00
// Formatted GVAR string (multiple modules support)
private _varString = format [QGVAR(slideshow%1), _currentSlideshow];
2015-07-13 20:07:21 +00:00
TRACE_1("Current Slide",_varString);
2015-07-13 20:07:21 +00:00
// Set formatted GVAR to first slide
missionNamespace setVariable [_varString, 0];
2015-07-13 20:07:21 +00:00
// Automatic transitions handler
[FUNC(autoTransition), [_objects, _images, _varString, _currentSlideshow, _duration, _selection], _duration] call CBA_fnc_waitAndExecute;
2015-07-13 20:07:21 +00:00
};
_currentSlideshow