From 6469b11f3cd62defa0bf02c348872ccc195e476a Mon Sep 17 00:00:00 2001 From: jonpas Date: Mon, 28 Mar 2016 20:07:02 +0200 Subject: [PATCH] Cleanup tagging, use internal getTexture for getting texture from color, move tag size definition --- addons/tagging/CfgVehicles.hpp | 50 +++++-------------- addons/tagging/XEH_PREP.hpp | 6 +-- .../tagging/functions/fnc_checkTaggable.sqf | 2 +- addons/tagging/functions/fnc_createTag.sqf | 25 ++++------ addons/tagging/functions/fnc_getTexture.sqf | 26 ++++++++++ .../{fnc_tagDirection.sqf => fnc_tag.sqf} | 34 ++++++++----- addons/tagging/functions/fnc_tagGround.sqf | 25 ---------- addons/tagging/functions/fnc_tagWall.sqf | 27 ---------- addons/tagging/script_component.hpp | 3 ++ addons/tagging/stringtable.xml | 46 ++++------------- 10 files changed, 85 insertions(+), 159 deletions(-) create mode 100644 addons/tagging/functions/fnc_getTexture.sqf rename addons/tagging/functions/{fnc_tagDirection.sqf => fnc_tag.sqf} (78%) delete mode 100644 addons/tagging/functions/fnc_tagGround.sqf delete mode 100644 addons/tagging/functions/fnc_tagWall.sqf diff --git a/addons/tagging/CfgVehicles.hpp b/addons/tagging/CfgVehicles.hpp index ac0b82147c..af4daf6799 100644 --- a/addons/tagging/CfgVehicles.hpp +++ b/addons/tagging/CfgVehicles.hpp @@ -4,57 +4,31 @@ class CfgVehicles { class ACE_SelfActions { class ACE_Equipment { class ACE_tagWallBlack { - displayName = CSTRING(tagWallBlack); + displayName = CSTRING(TagBlack); condition = QUOTE(('ACE_SpraypaintBlack' in items ACE_player) && {[] call FUNC(checkTaggable)}); - statement = QUOTE([ARR_2(ACE_player,'black')] call FUNC(tagWall)); + statement = QUOTE([ARR_2(ACE_player,'black' call FUNC(getTexture))] call FUNC(tag)); showDisabled = 0; priority = 3; icon = QUOTE(PATHTOF(UI\icons\iconTaggingBlack.paa)); }; class ACE_tagWallRed: ACE_tagWallBlack { - displayName = CSTRING(tagWallRed); + displayName = CSTRING(TagRed); condition = QUOTE(('ACE_SpraypaintRed' in items ACE_player) && {[] call FUNC(checkTaggable)}); - statement = QUOTE([ARR_2(ACE_player,'red')] call FUNC(tagWall)); + statement = QUOTE([ARR_2(ACE_player,'red' call FUNC(getTexture))] call FUNC(tag)); icon = QUOTE(PATHTOF(UI\icons\iconTaggingRed.paa)); }; class ACE_tagWallGreen: ACE_tagWallBlack { - displayName = CSTRING(tagWallGreen); + displayName = CSTRING(TagGreen); condition = QUOTE(('ACE_SpraypaintGreen' in items ACE_player) && {[] call FUNC(checkTaggable)}); - statement = QUOTE([ARR_2(ACE_player,'green')] call FUNC(tagWall)); + statement = QUOTE([ARR_2(ACE_player,'green' call FUNC(getTexture))] call FUNC(tag)); icon = QUOTE(PATHTOF(UI\icons\iconTaggingGreen.paa)); }; class ACE_tagWallBlue: ACE_tagWallBlack { - displayName = CSTRING(tagWallBlue); + displayName = CSTRING(TagBlue); condition = QUOTE(('ACE_SpraypaintBlue' in items ACE_player) && {[] call FUNC(checkTaggable)}); - statement = QUOTE([ARR_2(ACE_player,'blue')] call FUNC(tagWall)); + statement = QUOTE([ARR_2(ACE_player,'blue' call FUNC(getTexture))] call FUNC(tag)); icon = QUOTE(PATHTOF(UI\icons\iconTaggingBlue.paa)); }; - /*class ACE_tagGroundBlack { - displayName = CSTRING(tagGroundBlack); - condition = QUOTE('ACE_SpraypaintBlack' in items ACE_player); - statement = QUOTE([ARR_2(ACE_player, 'black')] call FUNC(tagGround)); - showDisabled = 0; - priority = 3; - icon = QUOTE(PATHTOF(UI\icons\iconTaggingBlack.paa)); - }; - class ACE_tagGroundRed: ACE_tagGroundBlack { - displayName = CSTRING(tagGroundRed); - condition = QUOTE('ACE_SpraypaintRed' in items ACE_player); - statement = QUOTE([ARR_2(ACE_player, 'red')] call FUNC(tagGround)); - icon = QUOTE(PATHTOF(UI\icons\iconTaggingRed.paa)); - }; - class ACE_tagGroundGreen: ACE_tagGroundBlack { - displayName = CSTRING(tagGroundGreen); - condition = QUOTE('ACE_SpraypaintGreen' in items ACE_player); - statement = QUOTE([ARR_2(ACE_player, 'green')] call FUNC(tagGround)); - icon = QUOTE(PATHTOF(UI\icons\iconTaggingGreen.paa)); - }; - class ACE_tagGroundBlue: ACE_tagGroundBlack { - displayName = CSTRING(tagGroundBlue); - condition = QUOTE('ACE_SpraypaintBlue' in items ACE_player); - statement = QUOTE([ARR_2(ACE_player, 'blue')] call FUNC(tagGround)); - icon = QUOTE(PATHTOF(UI\icons\iconTaggingBlue.paa)); - };*/ }; }; }; @@ -64,26 +38,26 @@ class CfgVehicles { author = "jokoho48"; scope = 2; scopeCurator = 2; - displayName = CSTRING(spraypaintBlack); + displayName = CSTRING(SpraypaintBlack); vehicleClass = "Items"; class TransportItems { MACRO_ADDITEM(ACE_SpraypaintBlack,1); }; }; class ACE_Item_SpraypaintRed: ACE_Item_SpraypaintBlack { - displayName = CSTRING(spraypaintRed); + displayName = CSTRING(SpraypaintRed); class TransportItems { MACRO_ADDITEM(ACE_SpraypaintRed,1); }; }; class ACE_Item_SpraypaintGreen: ACE_Item_SpraypaintBlack { - displayName = CSTRING(spraypaintGreen); + displayName = CSTRING(SpraypaintGreen); class TransportItems { MACRO_ADDITEM(ACE_SpraypaintGreen,1); }; }; class ACE_Item_SpraypaintBlue: ACE_Item_SpraypaintBlack { - displayName = CSTRING(spraypaintBlue); + displayName = CSTRING(SpraypaintBlue); class TransportItems { MACRO_ADDITEM(ACE_SpraypaintBlue,1); }; diff --git a/addons/tagging/XEH_PREP.hpp b/addons/tagging/XEH_PREP.hpp index eb29d5a9e3..f8a8598cd7 100644 --- a/addons/tagging/XEH_PREP.hpp +++ b/addons/tagging/XEH_PREP.hpp @@ -1,7 +1,5 @@ - PREP(checkTaggable); PREP(createTag); -PREP(tagDirection); -PREP(tagGround); -PREP(tagWall); +PREP(getTexture); +PREP(tag); PREP(tagTestingThread); diff --git a/addons/tagging/functions/fnc_checkTaggable.sqf b/addons/tagging/functions/fnc_checkTaggable.sqf index 4c8f0c750a..b77473f25b 100644 --- a/addons/tagging/functions/fnc_checkTaggable.sqf +++ b/addons/tagging/functions/fnc_checkTaggable.sqf @@ -1,5 +1,5 @@ /* - * Author: BaerMitUmlaut and esteldunedain + * Author: BaerMitUmlaut, esteldunedain * Checks if there is a taggable surface within 2.5m in front of the player. * * Arguments: diff --git a/addons/tagging/functions/fnc_createTag.sqf b/addons/tagging/functions/fnc_createTag.sqf index 81758f8bdb..924fc5582c 100644 --- a/addons/tagging/functions/fnc_createTag.sqf +++ b/addons/tagging/functions/fnc_createTag.sqf @@ -1,5 +1,5 @@ /* - * Author: BaerMitUmlaut and esteldunedain + * Author: BaerMitUmlaut, esteldunedain * Creates a tag and handle its destruction. Only execute on the server. * * Arguments: @@ -9,7 +9,7 @@ * 3: Object it should be tied too * * Return Value: - * None + * Tag created * * Example: * [positionASL, vectorDirAndUp, "black", object] call ace_tagging_fnc_createTag @@ -19,25 +19,20 @@ #include "script_component.hpp" -params ["_tagPosASL", "_vectorDirAndUp", "_colorTexture", "_object"]; -TRACE_4("createTag:",_tagPosASL,_vectorDirAndUp,_colorTexture,_object); +params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_object"]; +TRACE_4("createTag:",_tagPosASL,_vectorDirAndUp,_texture,_object); -private _customTexture = [true, false] select (_colorTexture find ".paa" == -1); - -if (!_customTexture && {!((toLower _colorTexture) in ["black", "red", "green", "blue"])}) exitWith { - ACE_LOGERROR_1("%1 is not a valid tag colour.",_colorTexture); +if (_texture == "") exitWith { + ACE_LOGERROR_1("%1 is not a valid tag texture.",_texture); + false }; private _tag = "UserTexture1m_F" createVehicle [0,0,0]; -if (!_customTexture) then { - _tag setObjectTextureGlobal [0, "\z\ace\addons\tagging\UI\tags\" + _colorTexture + "\" + str (floor (random 3)) + ".paa"]; -} else { - _tag setObjectTextureGlobal [0, _colorTexture]; -}; +_tag setObjectTextureGlobal [0, _texture]; _tag setPosASL _tagPosASL; _tag setVectorDirAndUp _vectorDirAndUp; -if (isNull _object) exitWith {}; +if (isNull _object) exitWith {true}; // If the tag is applied to an object, handle its destruction _object setVariable [QGVAR(testVar), true]; @@ -75,3 +70,5 @@ GVAR(tagsToTest) pushBack [_tag, _tagPosASL, _vectorDirAndUp]; if (!GVAR(testingThread)) then { call FUNC(tagTestingThread); }; + +true diff --git a/addons/tagging/functions/fnc_getTexture.sqf b/addons/tagging/functions/fnc_getTexture.sqf new file mode 100644 index 0000000000..f7f6d7e5e2 --- /dev/null +++ b/addons/tagging/functions/fnc_getTexture.sqf @@ -0,0 +1,26 @@ +/* + * Author: BaerMitUmlaut, esteldunedain, Jonpas + * Puts together a full path to the given tag color texture. Internal ACE3 textures only. + * + * Arguments: + * 0: The colour of the tag (valid colours are black, red, green and blue) + * + * Return Value: + * Texture (full path), "" if not found + * + * Example: + * texture = ["blue"] call ace_tagging_fnc_getTexture + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_color"]; + +if !((toLower _color) in ["black", "red", "green", "blue"]) exitWith { + ACE_LOGERROR_1("%1 is not a valid tag colour.",_color); + "" +}; + +QUOTE(PATHTOF(UI)) + "\tags\" + _color + "\" + str (floor (random 3)) + ".paa" diff --git a/addons/tagging/functions/fnc_tagDirection.sqf b/addons/tagging/functions/fnc_tag.sqf similarity index 78% rename from addons/tagging/functions/fnc_tagDirection.sqf rename to addons/tagging/functions/fnc_tag.sqf index 9dbb65f68e..3bd559f702 100644 --- a/addons/tagging/functions/fnc_tagDirection.sqf +++ b/addons/tagging/functions/fnc_tag.sqf @@ -1,25 +1,35 @@ /* - * Author: BaerMitUmlaut and esteldunedain - * If possible, create a tag on the first surface between Start and End positions + * Author: BaerMitUmlaut, esteldunedain + * Creates a tag on a wall that is on the closest surface within 2m on front of the unit. * * Arguments: - * 0: Unit - * 1: Start position ASL - * 2: End position ASL - * 3: The colour of the tag (valid colours are black, red, green and blue or full path to custom texture) + * 0: Unit + * 1: The colour of the tag (valid colours are black, red, green and blue or full path to custom texture) * * Return Value: - * Sucess + * Sucess * * Example: - * [startPosASL, directiom "blue"] call ace_tagging_fnc_tagDirection + * success = [player, "blue"] call ace_tagging_fnc_tag * - * Public: No + * Public: Yes */ #include "script_component.hpp" -params ["_unit", "_startPosASL", "_endPosASL", "_colorTexture"]; +params [ + ["_unit", objNull, [objNull]], + ["_texture", "", [""]] +]; + +if (isNull _unit || {_texture == ""}) exitWith { + ACE_LOGERROR_2("Tag parameters invalid. Unit: %1, Texture: %2",_unit,_texture); +}; + +private _startPosASL = eyePos _unit; +private _cameraPosASL = AGLToASL positionCameraToWorld [0, 0, 0]; +private _cameraDir = (AGLToASL positionCameraToWorld [0, 0, 1]) vectorDiff _cameraPosASL; +private _endPosASL = _startPosASL vectorAdd (_cameraDir vectorMultiply 2.5); // Check for intersections below the unit private _intersections = lineIntersectsSurfaces [_startPosASL, _endPosASL, _unit, objNull, true, 1, "GEOM", "FIRE"]; @@ -79,8 +89,6 @@ _fnc_isOk = { true }; -#define TAG_SIZE 0.6 - if ( !([ 0.5*TAG_SIZE, 0.5*TAG_SIZE] call _fnc_isOk) || {!([ 0.5*TAG_SIZE,-0.5*TAG_SIZE] call _fnc_isOk) || {!([-0.5*TAG_SIZE, 0.5*TAG_SIZE] call _fnc_isOk) || @@ -102,6 +110,6 @@ _unit playActionNow "PutDown"; // Tell the server to create the tag and handle its destruction ["createTag", _this] call EFUNC(common,serverEvent); -}, [_touchingPoint vectorAdd (_surfaceNormal vectorMultiply 0.06), _vectorDirAndUp, _colorTexture, _object, _unit], 0.6] call EFUNC(common,waitAndExecute); +}, [_touchingPoint vectorAdd (_surfaceNormal vectorMultiply 0.06), _vectorDirAndUp, _texture, _object, _unit], 0.6] call EFUNC(common,waitAndExecute); true diff --git a/addons/tagging/functions/fnc_tagGround.sqf b/addons/tagging/functions/fnc_tagGround.sqf deleted file mode 100644 index dee9261e1e..0000000000 --- a/addons/tagging/functions/fnc_tagGround.sqf +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Author: BaerMitUmlaut and esteldunedain - * Creates a tag on the ground beneath the unit - * - * Arguments: - * 0: Unit - * 1: The colour of the tag (valid colours are black, red, green and blue or full path to custom texture) - * - * Return Value: - * None - * - * Example: - * [player, "blue"] call ace_tagging_fnc_tagGround - * - * Public: No - */ - -#include "script_component.hpp" - -params ["_unit", "_colorTexture"]; - -private _startPosASL = getPosASL _unit; -private _endPosASL = _startPosASL vectorAdd [0, 0, -2] vectorAdd eyeDirection _unit; - -[_unit, _startPosASL, _endPosASL, _colorTexture] call FUNC(tagDirection); diff --git a/addons/tagging/functions/fnc_tagWall.sqf b/addons/tagging/functions/fnc_tagWall.sqf deleted file mode 100644 index 85b24f7b92..0000000000 --- a/addons/tagging/functions/fnc_tagWall.sqf +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Author: BaerMitUmlaut and esteldunedain - * Creates a tag on a wall that is on the closest surface within 2m on front of the unit. - * - * Arguments: - * 0: Unit - * 1: The colour of the tag (valid colours are black, red, green and blue or full path to custom texture) - * - * Return Value: - * None - * - * Example: - * [player, "blue"] call ace_tagging_fnc_tagWall - * - * Public: No - */ - -#include "script_component.hpp" - -params ["_unit", "_colorTexture"]; - -private _startPosASL = eyePos _unit; -private _cameraPosASL = AGLToASL positionCameraToWorld [0, 0, 0]; -private _cameraDir = (AGLToASL positionCameraToWorld [0, 0, 1]) vectorDiff _cameraPosASL; -private _endPosASL = _startPosASL vectorAdd (_cameraDir vectorMultiply 2.5); - -[_unit, _startPosASL, _endPosASL, _colorTexture] call FUNC(tagDirection); diff --git a/addons/tagging/script_component.hpp b/addons/tagging/script_component.hpp index bb94aae3ff..4836d2f209 100644 --- a/addons/tagging/script_component.hpp +++ b/addons/tagging/script_component.hpp @@ -15,3 +15,6 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + + +#define TAG_SIZE 0.6 diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index 392de0d24f..0bab4f29c1 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -1,91 +1,63 @@  - + Tag black Schwarz markieren Marcar en negro Oznakuj na czarno Tag noir - + Tag red Rot markieren Marcar en rojo Oznakuj na czerwono Tag rouge - + Tag green Grün markieren Marcar en verde Oznakuj na zielono Tag vert - + Tag blue Blau markieren Marcar en azul Oznakuj na niebiesko Tag bleu - - Tag ground black - Boden schwarz markieren - Oznakuj ziemię na czarno - Marcar suelo en negro - Tag fond noir - - - Tag ground red - Boden rot markieren - Oznakuj ziemię na czerwono - Marcar suelo en rojo - Tag fond rouge - - - Tag ground green - Boden grün markieren - Oznakuj ziemię na zielono - Marcar suelo en verde - Tag fond vert - - - Tag ground blue - Boden blau markieren - Oznakuj ziemię na niebiesko - Marcar suelo en azul - Tag font bleu - - + Black spray paint Schwarze Sprühfarbe Pintura negra Czarna farba w sprayu Peinture pulvérisée noire - + Red spray paint Rote Sprühfarbe Pintura roja Czerwona farba w sprayu Peinture pulvérisée rouge - + Green spray paint Grüne Sprühfarbe Pintura verde Zielona farba w sprayu Peinture pulvérisée verte - + Blue spray paint Blaue Sprühfarbe Pintura azul Niebieska farba w sprayu Peinture pulvérisée bleue - + A can of spray paint for tagging walls. Eine Farbsprühdose um Wände zu markieren. Lata de pintura en aerosol para marcar.