diff --git a/addons/marker_flags/$PBOPREFIX$ b/addons/marker_flags/$PBOPREFIX$ new file mode 100644 index 0000000000..cf7a6f6f77 --- /dev/null +++ b/addons/marker_flags/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\marker_flags diff --git a/addons/marker_flags/CfgEventHandlers.hpp b/addons/marker_flags/CfgEventHandlers.hpp new file mode 100644 index 0000000000..f6503c2479 --- /dev/null +++ b/addons/marker_flags/CfgEventHandlers.hpp @@ -0,0 +1,17 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_preStart)); + }; +}; + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_preInit)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); + }; +}; diff --git a/addons/marker_flags/CfgVehicles.hpp b/addons/marker_flags/CfgVehicles.hpp new file mode 100644 index 0000000000..0c8f63fe7c --- /dev/null +++ b/addons/marker_flags/CfgVehicles.hpp @@ -0,0 +1,51 @@ +class CfgVehicles { + class Man; + class CAManBase: Man { + class ACE_SelfActions { + class ACE_Equipment { + class ADDON { + displayName = CSTRING(ActionPlace); + condition = QUOTE(_player call FUNC(canPlace)); + insertChildren = QUOTE(_this call FUNC(addActions)); + }; + }; + }; + }; + + class FlagMarker_01_F; + class GVAR(white): FlagMarker_01_F { + scope = 2; + scopeCurator = 2; + author = ECSTRING(common,ACETeam); + displayName = CSTRING(white); + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,1,1,1,co)"}; + }; + class GVAR(black): GVAR(white) { + displayName = CSTRING(black); + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0,0,0,1,co)"}; + }; + class GVAR(red): GVAR(white) { + displayName = CSTRING(red); + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,0,0,1,co)"}; + }; + class GVAR(green): GVAR(white) { + displayName = CSTRING(green); + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0,1,0,1,co)"}; + }; + class GVAR(blue): GVAR(white) { + displayName = CSTRING(blue); + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0,0,1,1,co)"}; + }; + class GVAR(yellow): GVAR(white) { + displayName = CSTRING(yellow); + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,1,0,1,co)"}; + }; + class GVAR(orange): GVAR(white) { + displayName = CSTRING(orange); + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(1,0.5,0,1,co)"}; + }; + class GVAR(purple): GVAR(white) { + displayName = CSTRING(purple); + hiddenSelectionsTextures[] = {"#(argb,8,8,3)color(0.5,0,0.5,1,co)"}; + }; +}; diff --git a/addons/marker_flags/CfgWeapons.hpp b/addons/marker_flags/CfgWeapons.hpp new file mode 100644 index 0000000000..0f80e7c78b --- /dev/null +++ b/addons/marker_flags/CfgWeapons.hpp @@ -0,0 +1,55 @@ +class CfgWeapons { + class ACE_ItemCore; + class CBA_MiscItem_ItemInfo; + + class GVAR(white): ACE_ItemCore { + GVAR(vehicle) = GVAR(white); + author = ECSTRING(common,ACETeam); + scope = 2; + displayName = CSTRING(white); + model = QPATHTOF(data\ace_markerpole.p3d); + picture = QPATHTOF(ui\white_ca.paa); + icon = "iconObject_1x10"; + mapSize = 0.2; + + class ItemInfo: CBA_MiscItem_ItemInfo { + mass = 1; + }; + }; + + class GVAR(black): GVAR(white) { + GVAR(vehicle) = GVAR(black); + displayName = CSTRING(black); + picture = QPATHTOF(ui\black_ca.paa); + }; + class GVAR(red): GVAR(white) { + GVAR(vehicle) = GVAR(red); + displayName = CSTRING(red); + picture = QPATHTOF(ui\red_ca.paa); + }; + class GVAR(green): GVAR(white) { + GVAR(vehicle) = GVAR(green); + displayName = CSTRING(green); + picture = QPATHTOF(ui\green_ca.paa); + }; + class GVAR(blue): GVAR(white) { + GVAR(vehicle) = GVAR(blue); + displayName = CSTRING(blue); + picture = QPATHTOF(ui\blue_ca.paa); + }; + class GVAR(yellow): GVAR(white) { + GVAR(vehicle) = GVAR(yellow); + displayName = CSTRING(yellow); + picture = QPATHTOF(ui\yellow_ca.paa); + }; + class GVAR(orange): GVAR(white) { + GVAR(vehicle) = GVAR(orange); + displayName = CSTRING(orange); + picture = QPATHTOF(ui\orange_ca.paa); + }; + class GVAR(purple): GVAR(white) { + GVAR(vehicle) = GVAR(purple); + displayName = CSTRING(purple); + picture = QPATHTOF(ui\purple_ca.paa); + }; +}; diff --git a/addons/marker_flags/XEH_PREP.hpp b/addons/marker_flags/XEH_PREP.hpp new file mode 100644 index 0000000000..fec1927b78 --- /dev/null +++ b/addons/marker_flags/XEH_PREP.hpp @@ -0,0 +1,5 @@ +PREP(addActions); +PREP(canPlace); +PREP(getFlags); +PREP(pickUpFlag); +PREP(placeFlag); diff --git a/addons/marker_flags/XEH_postInit.sqf b/addons/marker_flags/XEH_postInit.sqf new file mode 100644 index 0000000000..0bed83af7b --- /dev/null +++ b/addons/marker_flags/XEH_postInit.sqf @@ -0,0 +1,22 @@ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +private _weapons = (call (uiNamespace getVariable [QGVAR(flagItems), {[]}])) apply {configFile >> "CfgWeapons" >> _x}; + +{ + private _name = configName _x; + private _vehicle = getText (_x >> QGVAR(vehicle)); + GVAR(flagCache) set [_name, _vehicle]; + + private _action = [ + QGVAR(pickup), + LLSTRING(ActionPickUp), + "", + {call FUNC(pickUpFlag)}, + {[_player, _target, []] call EFUNC(common,canInteractWith)}, + {}, + [_name] + ] call EFUNC(interact_menu,createAction); + [_vehicle, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass); +} forEach _weapons; diff --git a/addons/marker_flags/XEH_preInit.sqf b/addons/marker_flags/XEH_preInit.sqf new file mode 100644 index 0000000000..62febdc7cb --- /dev/null +++ b/addons/marker_flags/XEH_preInit.sqf @@ -0,0 +1,13 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP_RECOMPILE_START; +#include "XEH_PREP.hpp" +PREP_RECOMPILE_END; + +#include "initSettings.sqf" + +GVAR(flagCache) = createHashMap; + +ADDON = true; diff --git a/addons/marker_flags/XEH_preStart.sqf b/addons/marker_flags/XEH_preStart.sqf new file mode 100644 index 0000000000..ed4901a073 --- /dev/null +++ b/addons/marker_flags/XEH_preStart.sqf @@ -0,0 +1,6 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" + +private _weapons = (configProperties [configfile >> "CfgWeapons", QUOTE(isClass _x && (isText (_x >> QQGVAR(vehicle)))), true]) apply {configName _x}; +uiNamespace setVariable [QGVAR(flagItems), compileFinal str _weapons]; diff --git a/addons/marker_flags/config.cpp b/addons/marker_flags/config.cpp new file mode 100644 index 0000000000..02b054fa27 --- /dev/null +++ b/addons/marker_flags/config.cpp @@ -0,0 +1,37 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = { + QGVAR(white), + QGVAR(black), + QGVAR(red), + QGVAR(green), + QGVAR(blue), + QGVAR(yellow), + QGVAR(orange), + QGVAR(purple) + }; + weapons[] = { + QGVAR(white), + QGVAR(black), + QGVAR(red), + QGVAR(green), + QGVAR(blue), + QGVAR(yellow), + QGVAR(orange), + QGVAR(purple) + }; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_interact_menu"}; + author = ECSTRING(common,ACETeam); + authors[] = {"Brett Mayson"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgVehicles.hpp" +#include "CfgWeapons.hpp" diff --git a/addons/marker_flags/data/ace_default.rvmat b/addons/marker_flags/data/ace_default.rvmat new file mode 100644 index 0000000000..782c9714b8 --- /dev/null +++ b/addons/marker_flags/data/ace_default.rvmat @@ -0,0 +1,79 @@ +ambient[]={1,1,1,1}; +diffuse[]={1,1,1,1}; +forcedDiffuse[]={0,0,0,0}; +emmisive[]={0,0,0,1}; +specular[]={0.01,0.01,0.01,1}; //amount of glossiness - the higher the number, the higher the glossiness +specularPower=500; //area of glossiness - the higher the number, the smaller the area +PixelShaderID="Super"; +VertexShaderID="Super"; + +class Stage1 { + texture="#(rgb,1,1,1)color(0.5,0.5,1,1)"; + uvSource="tex"; + class uvTransform { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage2 { + texture="#(argb,8,8,3)color(0.5,0.5,0.5,1,dt)"; + uvSource="tex"; + class uvTransform { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage3 { + texture="#(argb,8,8,3)color(0,0,0,0,mc)"; + uvSource="tex"; + class uvTransform { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage4 { + texture="#(argb,8,8,3)color(1,1,1,1,as)"; + uvSource="tex"; + class uvTransform { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,1}; + pos[]={0,0,1}; + }; +}; +class Stage5 { + texture="#(rgb,1,1,1)color(0.2,0.2,1,1)"; + uvSource="tex"; + class uvTransform { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,0}; + pos[]={0,0,0}; + }; +}; +class Stage6 { + texture="#(ai,64,64,1)fresnel(4.7,1.2)"; + uvSource="tex"; + class uvTransform { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,1}; + pos[]={0,0,0}; + }; +}; +class Stage7 { + texture="a3\data_f\env_land_ca.paa"; + uvSource="tex"; + class uvTransform { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,1}; + pos[]={0,0,0}; + }; +}; diff --git a/addons/marker_flags/data/ace_markerpole.p3d b/addons/marker_flags/data/ace_markerpole.p3d new file mode 100644 index 0000000000..8722db4260 Binary files /dev/null and b/addons/marker_flags/data/ace_markerpole.p3d differ diff --git a/addons/marker_flags/functions/fnc_addActions.sqf b/addons/marker_flags/functions/fnc_addActions.sqf new file mode 100644 index 0000000000..57112f8de9 --- /dev/null +++ b/addons/marker_flags/functions/fnc_addActions.sqf @@ -0,0 +1,39 @@ +#include "script_component.hpp" +/* + * Author: Brett Mayson + * Adds the child actions for placing flags. + * + * Arguments: + * 0: Player + * + * Return Value: + * Actions + * + * Example: + * [player] call ace_marker_flags_fnc_addActions + * + * Public: No + */ + +params ["_unit"]; + +private _actions = []; + +{ + private _config = configFile >> "CfgWeapons" >> _x; + _actions pushBack [ + [ + _x, + getText (_config >> "displayName"), + getText (_config >> "picture"), + {[_this select 0, _this select 2] call FUNC(placeFlag)}, + {true}, + {}, + _x + ] call EFUNC(interact_menu,createAction), + [], + _unit + ]; +} forEach ([_unit] call FUNC(getFlags)); + +_actions diff --git a/addons/marker_flags/functions/fnc_canPlace.sqf b/addons/marker_flags/functions/fnc_canPlace.sqf new file mode 100644 index 0000000000..fbaefe6e89 --- /dev/null +++ b/addons/marker_flags/functions/fnc_canPlace.sqf @@ -0,0 +1,20 @@ +#include "script_component.hpp" +/* + * Authors: Brett Mayson + * Checks if a flag can be placed by a unit. + * + * Arguments: + * 0: Unit + * + * Return Value: + * Can place + * + * Example: + * player call ace_marker_flags_fnc_canPlace + * + * Public: No + */ + +params ["_unit"]; + +GVAR(placeAnywhere) || {_unit call EFUNC(common,canDig)} diff --git a/addons/marker_flags/functions/fnc_getFlags.sqf b/addons/marker_flags/functions/fnc_getFlags.sqf new file mode 100644 index 0000000000..fc8e3a8893 --- /dev/null +++ b/addons/marker_flags/functions/fnc_getFlags.sqf @@ -0,0 +1,20 @@ +#include "script_component.hpp" +/* + * Authors: Brett Mayson + * Get the placeable flags in the unit's inventory. + * + * Arguments: + * 0: Unit + * + * Return Value: + * flags + * + * Example: + * [_unit] call ace_marker_flags_fnc_getFlags + * + * Public: No + */ + +params ["_unit"]; + +(_unit call EFUNC(common,uniqueItems)) arrayIntersect keys GVAR(flagCache) diff --git a/addons/marker_flags/functions/fnc_pickUpFlag.sqf b/addons/marker_flags/functions/fnc_pickUpFlag.sqf new file mode 100644 index 0000000000..011380c020 --- /dev/null +++ b/addons/marker_flags/functions/fnc_pickUpFlag.sqf @@ -0,0 +1,28 @@ +#include "script_component.hpp" +/* + * Author: Brett Mayson + * Places a flag in front of the unit. + * + * Arguments: + * 0: Flag + * 1: Unit + * 2: Action Args + * + * Return Value: + * Nothing + * + * Example: + * [_flag,player,"x"] call ace_marker_flags_fnc_pickupFlag + * + * Public: No + */ + +params [["_flag", objNull, [objNull]], ["_unit", objNull, [objNull]], ["_args", [""], [[]]]]; +private _itemName = _args # 0; +TRACE_3("pickupFlag",_unit,_flag,_itemName); + +if (isNull _flag) exitWith {}; + +[_unit, "PutDown"] call EFUNC(common,doGesture); +deleteVehicle _flag; +[_unit, _itemName] call EFUNC(common,addToInventory); diff --git a/addons/marker_flags/functions/fnc_placeFlag.sqf b/addons/marker_flags/functions/fnc_placeFlag.sqf new file mode 100644 index 0000000000..d89bb52614 --- /dev/null +++ b/addons/marker_flags/functions/fnc_placeFlag.sqf @@ -0,0 +1,27 @@ +#include "script_component.hpp" +/* + * Author: Brett Mayson + * Places a flag in front of the unit. + * + * Arguments: + * 0: Unit + * 1: Flag + * + * Return Value: + * Flag + * + * Example: + * [player, "ace_marker_flags_white"] call ace_marker_flags_fnc_placeFlag + * + * Public: No + */ + +params [["_unit", objNull, [objNull]], ["_flag", QGVAR(white), [""]]]; + +_unit removeItem _flag; +_flag = GVAR(flagCache) get _flag; // convert to vehicle type +private _pos = _unit modelToWorld [0, 1, 0]; +private _flag = _flag createVehicle _pos; +_flag setPos _pos; +[QGVAR(placed), [_unit, _flag]] call CBA_fnc_localEvent; +[_unit, "PutDown"] call EFUNC(common,doGesture); diff --git a/addons/marker_flags/functions/script_component.hpp b/addons/marker_flags/functions/script_component.hpp new file mode 100644 index 0000000000..f70552083f --- /dev/null +++ b/addons/marker_flags/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\marker_flags\script_component.hpp" diff --git a/addons/marker_flags/initSettings.sqf b/addons/marker_flags/initSettings.sqf new file mode 100644 index 0000000000..74ae5a0721 --- /dev/null +++ b/addons/marker_flags/initSettings.sqf @@ -0,0 +1,9 @@ +private _category = [LELSTRING(common,categoryUncategorized), LLSTRING(DisplayName_Settings)]; + +[ + QGVAR(placeAnywhere), "CHECKBOX", + [LSTRING(PlaceAnywhere_DisplayName), LSTRING(PlaceAnywhere_Description)], + _category, + false, // default value + true // isGlobal +] call CBA_fnc_addSetting; diff --git a/addons/marker_flags/script_component.hpp b/addons/marker_flags/script_component.hpp new file mode 100644 index 0000000000..c85bdba3b1 --- /dev/null +++ b/addons/marker_flags/script_component.hpp @@ -0,0 +1,17 @@ +#define COMPONENT marker_flags +#define COMPONENT_BEAUTIFIED Marker Flags +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_MARKER_FLAGS + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_ENABLED_MARKER_FLAGS + #define DEBUG_SETTINGS DEBUG_ENABLED_MARKER_FLAGS +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/marker_flags/stringtable.xml b/addons/marker_flags/stringtable.xml new file mode 100644 index 0000000000..2430961c43 --- /dev/null +++ b/addons/marker_flags/stringtable.xml @@ -0,0 +1,68 @@ + + + + + Marker Flags + Markierungsfahnen + + + Place Anywhere + Überall platzieren + + + Place marker flag anywhere regardless of surface. + + + Place Flag + Flagge platzieren + + + Pick Up + 提取點 + Récupérer + Recoger + Recupera + Podnieś + Подобрать + Vyzvednutí + Pegar + 확보 + 提取点 + 受け取り + Al + Aufheben + + + Marker Flag (White) + Markierungsfahne (Weiß) + + + Marker Flag (Black) + Markierungsfahne (Schwarz) + + + Marker Flag (Red) + Markierungsfahne (Rot) + + + Marker Flag (Green) + Markierungsfahne (Grün) + + + Marker Flag (Blue) + Markierungsfahne (Blau) + + + Marker Flag (Yellow) + Markierungsfahne (Gelb) + + + Marker Flag (Orange) + Markierungsfahne (Orange) + + + Marker Flag (Purple) + Markierungsfahne (Lila) + + + diff --git a/addons/marker_flags/ui/black_ca.paa b/addons/marker_flags/ui/black_ca.paa new file mode 100644 index 0000000000..72ac604b6b Binary files /dev/null and b/addons/marker_flags/ui/black_ca.paa differ diff --git a/addons/marker_flags/ui/blue_ca.paa b/addons/marker_flags/ui/blue_ca.paa new file mode 100644 index 0000000000..9c45de381f Binary files /dev/null and b/addons/marker_flags/ui/blue_ca.paa differ diff --git a/addons/marker_flags/ui/green_ca.paa b/addons/marker_flags/ui/green_ca.paa new file mode 100644 index 0000000000..72a2f62d6c Binary files /dev/null and b/addons/marker_flags/ui/green_ca.paa differ diff --git a/addons/marker_flags/ui/orange_ca.paa b/addons/marker_flags/ui/orange_ca.paa new file mode 100644 index 0000000000..f6d8b0643a Binary files /dev/null and b/addons/marker_flags/ui/orange_ca.paa differ diff --git a/addons/marker_flags/ui/purple_ca.paa b/addons/marker_flags/ui/purple_ca.paa new file mode 100644 index 0000000000..4a8e620bd9 Binary files /dev/null and b/addons/marker_flags/ui/purple_ca.paa differ diff --git a/addons/marker_flags/ui/red_ca.paa b/addons/marker_flags/ui/red_ca.paa new file mode 100644 index 0000000000..b570688bc9 Binary files /dev/null and b/addons/marker_flags/ui/red_ca.paa differ diff --git a/addons/marker_flags/ui/white_ca.paa b/addons/marker_flags/ui/white_ca.paa new file mode 100644 index 0000000000..c69afdec28 Binary files /dev/null and b/addons/marker_flags/ui/white_ca.paa differ diff --git a/addons/marker_flags/ui/yellow_ca.paa b/addons/marker_flags/ui/yellow_ca.paa new file mode 100644 index 0000000000..c085ad2376 Binary files /dev/null and b/addons/marker_flags/ui/yellow_ca.paa differ