mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Initial code implementation of ace_trenches
This commit is contained in:
parent
1d886ac624
commit
8ff8204905
20
addons/trenches/CfgEventHandlers.hpp
Normal file
20
addons/trenches/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
class Extended_PreInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Extended_PostInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Extended_Killed_EventHandlers {
|
||||||
|
class CAManBase {
|
||||||
|
class ADDON {
|
||||||
|
killed = QUOTE(_this call FUNC(handleKilled));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
@ -1,4 +1,32 @@
|
|||||||
class CfgVehicles {
|
class CfgVehicles {
|
||||||
|
class Man;
|
||||||
|
class CAManBase: Man {
|
||||||
|
class ACE_SelfActions {
|
||||||
|
class ACE_Equipment {
|
||||||
|
class GVAR(digEnvelopeSmall) {
|
||||||
|
displayName = CSTRING(DigEnvelopeSmall);
|
||||||
|
condition = QUOTE([ARR_2(_this select 0,'ace_trenches_trenchSmall')] call FUNC(canDigTrench));
|
||||||
|
//wait a frame to handle "Do When releasing action menu key" option
|
||||||
|
statement = QUOTE([ARR_2({_this call FUNC(placeTrench)},[ARR_2(_this select 0,'ace_trenches_trenchSmall')])] call EFUNC(common,execNextFrame));
|
||||||
|
exceptions[] = {};
|
||||||
|
showDisabled = 0;
|
||||||
|
priority = 4;
|
||||||
|
//icon = PATHTOF(UI\icon_sandbag_ca.paa);
|
||||||
|
};
|
||||||
|
class GVAR(digEnvelopeBig) {
|
||||||
|
displayName = CSTRING(DigEnvelopeBig);
|
||||||
|
condition = QUOTE([ARR_2(_this select 0,'ace_trenches_trenchBig')] call FUNC(canDigTrench));
|
||||||
|
//wait a frame to handle "Do When releasing action menu key" option
|
||||||
|
statement = QUOTE([ARR_2({_this call FUNC(placeTrench)},[ARR_2(_this select 0,'ace_trenches_trenchBig')])] call EFUNC(common,execNextFrame));
|
||||||
|
exceptions[] = {};
|
||||||
|
showDisabled = 0;
|
||||||
|
priority = 4;
|
||||||
|
//icon = PATHTOF(UI\icon_sandbag_ca.paa);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
class BagFence_base_F;
|
class BagFence_base_F;
|
||||||
class ACE_envelope_small: BagFence_base_F {
|
class ACE_envelope_small: BagFence_base_F {
|
||||||
author = ECSTRING(common,ACETeam);
|
author = ECSTRING(common,ACETeam);
|
||||||
@ -14,4 +42,23 @@ class CfgVehicles {
|
|||||||
model = QUOTE(PATHTOEF(apl,ace_envelope_big.p3d));
|
model = QUOTE(PATHTOEF(apl,ace_envelope_big.p3d));
|
||||||
scope = 2;
|
scope = 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class ACE_envelope_small_NoGeo: ACE_envelope_small {
|
||||||
|
scope = 1;
|
||||||
|
//@todo: replace by a no geo model
|
||||||
|
model = QUOTE(PATHTOEF(apl,ace_envelope_small.p3d));
|
||||||
|
};
|
||||||
|
class ACE_envelope_big_NoGeo: ACE_envelope_big {
|
||||||
|
scope = 1;
|
||||||
|
//@todo: replace by a no geo model
|
||||||
|
model = QUOTE(PATHTOEF(apl,ace_envelope_big.p3d));
|
||||||
|
};
|
||||||
|
|
||||||
|
class Box_NATO_Support_F;
|
||||||
|
class ACE_Box_Misc: Box_NATO_Support_F {
|
||||||
|
class TransportItems {
|
||||||
|
MACRO_ADDITEM(ACE_EntrenchingTool,50);
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@ -2,7 +2,7 @@ class CfgWeapons {
|
|||||||
class InventoryItem_Base_F;
|
class InventoryItem_Base_F;
|
||||||
class ACE_ItemCore;
|
class ACE_ItemCore;
|
||||||
|
|
||||||
class ACE_entrenchingtool: ACE_ItemCore {
|
class ACE_EntrenchingTool: ACE_ItemCore {
|
||||||
author = ECSTRING(common,ACETeam);
|
author = ECSTRING(common,ACETeam);
|
||||||
displayName = CSTRING(EntrenchingToolName);
|
displayName = CSTRING(EntrenchingToolName);
|
||||||
descriptionShort = CSTRING(EntrenchingToolDescription);
|
descriptionShort = CSTRING(EntrenchingToolDescription);
|
||||||
|
27
addons/trenches/XEH_postInit.sqf
Normal file
27
addons/trenches/XEH_postInit.sqf
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
if (isServer) then {
|
||||||
|
// Cancel dig on hard disconnection. Function is identical to killed
|
||||||
|
addMissionEventHandler ["HandleDisconnect", {_this call FUNC(handleKilled)}];
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!hasInterface) exitWith {};
|
||||||
|
|
||||||
|
GVAR(trench) = objNull;
|
||||||
|
GVAR(digPFH) = -1;
|
||||||
|
GVAR(digDirection) = 0;
|
||||||
|
|
||||||
|
[{_this call FUNC(handleScrollWheel)}] call EFUNC(common,addScrollWheelEventHandler);
|
||||||
|
|
||||||
|
// Cancel dig sandbag if interact menu opened
|
||||||
|
["interactMenuOpened", {[ACE_player] call FUNC(handleInteractMenuOpened)}] call EFUNC(common,addEventHandler);
|
||||||
|
|
||||||
|
// Cancel dig on player change. This does work when returning to lobby, but not when hard disconnecting.
|
||||||
|
["playerChanged", {_this call FUNC(handlePlayerChanged)}] call EFUNC(common,addEventhandler);
|
||||||
|
["playerInventoryChanged", {_this call FUNC(handlePlayerInventoryChanged)}] call EFUNC(common,addEventhandler);
|
||||||
|
["playerVehicleChanged", {[ACE_player, objNull] call FUNC(handlePlayerChanged)}] call EFUNC(common,addEventhandler);
|
||||||
|
|
||||||
|
// handle waking up dragged unit and falling unconscious while dragging
|
||||||
|
["medical_onUnconscious", {_this call FUNC(handleUnconscious)}] call EFUNC(common,addEventhandler);
|
||||||
|
|
||||||
|
//@todo Captivity?
|
22
addons/trenches/XEH_preInit.sqf
Normal file
22
addons/trenches/XEH_preInit.sqf
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
ADDON = false;
|
||||||
|
|
||||||
|
PREP(canDigTrench);
|
||||||
|
PREP(digCancel);
|
||||||
|
PREP(digConfirm);
|
||||||
|
PREP(handleInteractMenuOpened);
|
||||||
|
PREP(handleKilled);
|
||||||
|
PREP(handlePlayerChanged);
|
||||||
|
PREP(handlePlayerInventoryChanged);
|
||||||
|
PREP(handleScrollWheel);
|
||||||
|
PREP(handleUnconscious);
|
||||||
|
PREP(placeTrench);
|
||||||
|
|
||||||
|
// Trench types
|
||||||
|
// Name of the object, name of th dummy no geo object, dx, dy
|
||||||
|
GVAR(trenchSmall) = ["ACE_envelope_small", "ACE_envelope_small_NoGeo", 2, 3, 0.35];
|
||||||
|
GVAR(trenchBig) = ["ACE_envelope_big", "ACE_envelope_big_NoGeo", 6, 1.1, 0.15];
|
||||||
|
GVAR(trenchType) = GVAR(trenchSmall);
|
||||||
|
|
||||||
|
ADDON = true;
|
@ -3,13 +3,14 @@
|
|||||||
class CfgPatches {
|
class CfgPatches {
|
||||||
class ADDON {
|
class ADDON {
|
||||||
units[] = {"ACE_envelope_small","ACE_envelope_big"};
|
units[] = {"ACE_envelope_small","ACE_envelope_big"};
|
||||||
weapons[] = {"ACE_entrenchingtool"};
|
weapons[] = {"ACE_EntrenchingTool"};
|
||||||
requiredVersion = REQUIRED_VERSION;
|
requiredVersion = REQUIRED_VERSION;
|
||||||
requiredAddons[] = {"ace_interaction"};
|
requiredAddons[] = {"ace_interaction"};
|
||||||
author[] = {"Grey"};
|
author[] = {"Grey", "esteldunedain"};
|
||||||
authorUrl = "";
|
authorUrl = "";
|
||||||
VERSION_CONFIG;
|
VERSION_CONFIG;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
#include "CfgWeapons.hpp"
|
#include "CfgEventHandlers.hpp"
|
||||||
#include "CfgVehicles.hpp"
|
#include "CfgVehicles.hpp"
|
||||||
|
#include "CfgWeapons.hpp"
|
||||||
|
31
addons/trenches/functions/fnc_canDigTrench.sqf
Normal file
31
addons/trenches/functions/fnc_canDigTrench.sqf
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Author: Ruthberg, commy2, esteldunedain
|
||||||
|
* Checks if a unit can dig a trench
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
* 1: Trench type <STRING>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* Can dig <BOOL>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [ACE_player] call ace_trenches_fnc_canDigTrench
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
#define SURFACE_BLACKLIST ["water", "concrete", "tarmac", "wood", "metal", "roof_tin", "roof_tiles", "wood_int", "concrete_int", "tiles_int", "metal_int", "stony", "rock", "int_concrete", "int_tiles", "int_wood", "tiling", "wavymetal", "int_metal"]
|
||||||
|
|
||||||
|
params ["_unit","_trenchTypeName"];
|
||||||
|
|
||||||
|
if !("ACE_EntrenchingTool" in items _unit) exitWith {false};
|
||||||
|
|
||||||
|
private ["_surfaceClass", "_surfaceType"];
|
||||||
|
|
||||||
|
_surfaceClass = (surfaceType getPosASL _unit) select [1];
|
||||||
|
_surfaceType = getText (configFile >> "CfgSurfaces" >> _surfaceClass >> "soundEnviron");
|
||||||
|
TRACE_1("",_surfaceType);
|
||||||
|
|
||||||
|
!(_surfaceType in SURFACE_BLACKLIST)
|
36
addons/trenches/functions/fnc_digCancel.sqf
Normal file
36
addons/trenches/functions/fnc_digCancel.sqf
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Author: Garth 'L-H' de Wet, Ruthberg, edited by commy2 for better MP and eventual AI support
|
||||||
|
* Cancels trench dig
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: unit <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [ACE_player] call ace_sandbag_fnc_digCancel
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
|
||||||
|
// enable running again
|
||||||
|
[_unit, "forceWalk", "ACE_Trenches", false] call EFUNC(common,statusEffect_set);
|
||||||
|
|
||||||
|
// delete placement dummy
|
||||||
|
deleteVehicle GVAR(trench);
|
||||||
|
|
||||||
|
// remove digment pfh
|
||||||
|
[GVAR(digPFH)] call CBA_fnc_removePerFrameHandler;
|
||||||
|
GVAR(digPFH) = -1;
|
||||||
|
|
||||||
|
// remove mouse button actions
|
||||||
|
call EFUNC(interaction,hideMouseHint);
|
||||||
|
|
||||||
|
[_unit, "DefaultAction", _unit getVariable [QGVAR(Dig), -1]] call EFUNC(common,removeActionEventHandler);
|
||||||
|
[_unit, "zoomtemp", _unit getVariable [QGVAR(Cancel), -1]] call EFUNC(common,removeActionEventHandler);
|
||||||
|
|
||||||
|
_unit setVariable [QGVAR(isDigging), false, true];
|
56
addons/trenches/functions/fnc_digConfirm.sqf
Normal file
56
addons/trenches/functions/fnc_digConfirm.sqf
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Author: Garth 'L-H' de Wet, Ruthberg, edited by commy2 for better MP and eventual AI support and esteldunedain
|
||||||
|
* Confirms trench dig
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: unit <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [ACE_player] call ace_trenches_fnc_digConfirm
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
|
||||||
|
// enable running again
|
||||||
|
[_unit, "forceWalk", "ACE_Trenches", false] call EFUNC(common,statusEffect_set);
|
||||||
|
|
||||||
|
// delete placement dummy and create real trench
|
||||||
|
[{
|
||||||
|
if (isNull GVAR(trench)) exitWith {};
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
|
||||||
|
private ["_position", "_direction", "_trench"];
|
||||||
|
|
||||||
|
_position = getPosASL GVAR(trench);
|
||||||
|
_direction = getDir GVAR(trench);
|
||||||
|
|
||||||
|
deleteVehicle GVAR(trench);
|
||||||
|
|
||||||
|
_trench = createVehicle [GVAR(trenchType) select 0, [0, 0, 0], [], 0, "NONE"];
|
||||||
|
_trench setPosASL _position;
|
||||||
|
_trench setDir _direction;
|
||||||
|
|
||||||
|
GVAR(trench) = objNull;
|
||||||
|
}, [_unit], 1] call EFUNC(common,waitAndExecute);
|
||||||
|
|
||||||
|
// remove dig pfh
|
||||||
|
[GVAR(digPFH)] call CBA_fnc_removePerFrameHandler;
|
||||||
|
GVAR(digPFH) = -1;
|
||||||
|
|
||||||
|
// remove mouse button actions
|
||||||
|
call EFUNC(interaction,hideMouseHint);
|
||||||
|
|
||||||
|
[_unit, "DefaultAction", _unit getVariable [QGVAR(Dig), -1]] call EFUNC(common,removeActionEventHandler);
|
||||||
|
[_unit, "zoomtemp", _unit getVariable [QGVAR(Cancel), -1]] call EFUNC(common,removeActionEventHandler);
|
||||||
|
|
||||||
|
// play animation
|
||||||
|
_unit playActionNow "PutDown";
|
||||||
|
|
||||||
|
_unit setVariable [QGVAR(isDigging), false, true];
|
19
addons/trenches/functions/fnc_handleInteractMenuOpened.sqf
Normal file
19
addons/trenches/functions/fnc_handleInteractMenuOpened.sqf
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Author: commy2
|
||||||
|
* Handle opening of interaction menu.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
|
||||||
|
if (_unit getVariable [QGVAR(isDigging), false]) then {
|
||||||
|
[_unit] call FUNC(digCancel);
|
||||||
|
};
|
19
addons/trenches/functions/fnc_handleKilled.sqf
Normal file
19
addons/trenches/functions/fnc_handleKilled.sqf
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Author: commy2
|
||||||
|
* Handle death.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
|
||||||
|
if (_unit getVariable [QGVAR(isDigging), false]) then {
|
||||||
|
[_unit] call FUNC(digCancel);
|
||||||
|
};
|
24
addons/trenches/functions/fnc_handlePlayerChanged.sqf
Normal file
24
addons/trenches/functions/fnc_handlePlayerChanged.sqf
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Author: commy2
|
||||||
|
* Handle player changes.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: New Player Unit <OBJECT>
|
||||||
|
* 1: Old Player Unit <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_newPlayer", "_oldPlayer"];
|
||||||
|
|
||||||
|
if (_newPlayer getVariable [QGVAR(isDigging), false]) then {
|
||||||
|
[_newPlayer] call FUNC(digCancel);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_oldPlayer getVariable [QGVAR(isDigging), false]) then {
|
||||||
|
[_oldPlayer] call FUNC(digCancel);
|
||||||
|
};
|
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Author: commy2
|
||||||
|
* Handle the InventoryChanged event.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
* 1: Weapon <STRING>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
|
||||||
|
if (_unit getVariable [QGVAR(isDigging), false]) then {
|
||||||
|
if !("ACE_EntrenchingTool" in items _unit) then {
|
||||||
|
[_unit] call FUNC(digCancel);
|
||||||
|
};
|
||||||
|
};
|
24
addons/trenches/functions/fnc_handleScrollWheel.sqf
Normal file
24
addons/trenches/functions/fnc_handleScrollWheel.sqf
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Author: Garth 'L-H' de Wet, Ruthberg
|
||||||
|
* Handles sandbag rotation
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: scroll amount <NUMBER>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* handled <BOOL>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [1.2] call ace_sandbag_fnc_handleScrollWheel
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_scroll"];
|
||||||
|
|
||||||
|
if (GETMVAR(ACE_Modifier,0) == 0 || GVAR(digPFH) == -1) exitWith { false };
|
||||||
|
|
||||||
|
GVAR(digDirection) = GVAR(digDirection) + (_scroll * 5);
|
||||||
|
|
||||||
|
true
|
19
addons/trenches/functions/fnc_handleUnconscious.sqf
Normal file
19
addons/trenches/functions/fnc_handleUnconscious.sqf
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Author: commy2
|
||||||
|
* Handle unconsciousness.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
|
||||||
|
if (_unit getVariable [QGVAR(isDigging), false]) then {
|
||||||
|
[_unit] call FUNC(digCancel);
|
||||||
|
};
|
88
addons/trenches/functions/fnc_placeTrench.sqf
Normal file
88
addons/trenches/functions/fnc_placeTrench.sqf
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Author: Garth 'L-H' de Wet, Ruthberg, edited by commy2 for better MP and eventual AI support, esteldunedain
|
||||||
|
* Starts the place process for trench.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: unit <OBJECT>
|
||||||
|
* 1: Trench type <STRING>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [ACE_player] call ace_trenches_fnc_placeTrench
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_unit","_trenchTypeName"];
|
||||||
|
|
||||||
|
GVAR(trenchType) = missionNamespace getVariable _trenchTypeName;
|
||||||
|
|
||||||
|
TRACE_2("",_trenchTypeName,GVAR(trenchType));
|
||||||
|
// prevent the placing unit from running
|
||||||
|
[_unit, "forceWalk", "ACE_Trenches", true] call EFUNC(common,statusEffect_set);
|
||||||
|
|
||||||
|
// create the trench
|
||||||
|
private "_trench";
|
||||||
|
_trench = createVehicle [GVAR(trenchType) select 1, [0, 0, 0], [], 0, "NONE"];
|
||||||
|
|
||||||
|
GVAR(trench) = _trench;
|
||||||
|
|
||||||
|
// prevent collisions with trench
|
||||||
|
["enableSimulationGlobal", [_trench, false]] call EFUNC(common,serverEvent);
|
||||||
|
|
||||||
|
GVAR(digDirection) = 0;
|
||||||
|
|
||||||
|
// pfh that runs while the dig is in progress
|
||||||
|
GVAR(digPFH) = [{
|
||||||
|
(_this select 0) params ["_unit", "_trench"];
|
||||||
|
|
||||||
|
if (isNull _trench) exitWith {
|
||||||
|
[_unit] call FUNC(digCancel);
|
||||||
|
};
|
||||||
|
|
||||||
|
private _basePos = eyePos _unit vectorAdd (positionCameraToWorld [0, 0, 2] vectorDiff positionCameraToWorld [0, 0, 0]);
|
||||||
|
private _angle = (GVAR(digDirection) + getDir _unit);
|
||||||
|
|
||||||
|
// Stick the trench to the ground
|
||||||
|
GVAR(trenchType) params ["", "", "_dx", "_dy", "_offset"];
|
||||||
|
private _minz = (getTerrainHeightASL _basePos);
|
||||||
|
private ["_ix","_iy"];
|
||||||
|
for [{_ix = -_dx/2},{_ix <= _dx/2},{_ix = _ix + _dx/3}] do {
|
||||||
|
for [{_iy = -_dy/2},{_iy <= _dy/2},{_iy = _iy + _dy/3}] do {
|
||||||
|
private _pos = _basePos vectorAdd ([cos _angle, -sin _angle, 0] vectorMultiply _ix)
|
||||||
|
vectorAdd ([sin _angle, +cos _angle, 0] vectorMultiply _iy);
|
||||||
|
_minz = _minz min (getTerrainHeightASL _pos);
|
||||||
|
|
||||||
|
#ifdef DEBUG_MODE_FULL
|
||||||
|
_pos set [2, getTerrainHeightASL _pos];
|
||||||
|
_pos2 = +_pos;
|
||||||
|
_pos2 set [2, getTerrainHeightASL _pos+2];
|
||||||
|
drawLine3D [ASLtoAGL _pos, ASLtoAGL _pos2, [1,1,0,1]];
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
};
|
||||||
|
_basePos set [2, _minz + _offset];
|
||||||
|
|
||||||
|
_trench setPosASL _basePos;
|
||||||
|
_trench setDir _angle;
|
||||||
|
}, 0, [_unit, _trench]] call CBA_fnc_addPerFrameHandler;
|
||||||
|
|
||||||
|
// add mouse button action and hint
|
||||||
|
[localize LSTRING(ConfirmDig), localize LSTRING(CancelDig), localize LSTRING(ScrollAction)] call EFUNC(interaction,showMouseHint);
|
||||||
|
|
||||||
|
_unit setVariable [QGVAR(Dig), [
|
||||||
|
_unit, "DefaultAction",
|
||||||
|
{GVAR(digPFH) != -1},
|
||||||
|
{[_this select 0] call FUNC(digConfirm)}
|
||||||
|
] call EFUNC(common,addActionEventHandler)];
|
||||||
|
|
||||||
|
_unit setVariable [QGVAR(Cancel), [
|
||||||
|
_unit, "zoomtemp",
|
||||||
|
{GVAR(digPFH) != -1},
|
||||||
|
{[_this select 0] call FUNC(digCancel)}
|
||||||
|
] call EFUNC(common,addActionEventHandler)];
|
||||||
|
|
||||||
|
_unit setVariable [QGVAR(isDigging), true, true];
|
1
addons/trenches/functions/script_component.hpp
Normal file
1
addons/trenches/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "\z\ace\addons\trenches\script_component.hpp"
|
@ -1,25 +1,40 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project name="ACE">
|
<Project name="ACE">
|
||||||
<Package name="trenches">
|
<Package name="trenches">
|
||||||
<Key ID="STR_ACE_trenches_EntrenchingToolName">
|
<Key ID="STR_ACE_Trenches_EntrenchingToolName">
|
||||||
<English>Entrenching Tool</English>
|
<English>Entrenching Tool</English>
|
||||||
<Polish>Saperka</Polish>
|
<Polish>Saperka</Polish>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_trenches_EntrenchingToolDescription">
|
<Key ID="STR_ACE_Trenches_EntrenchingToolDescription">
|
||||||
<English>Entrenching Tool</English>
|
<English>Entrenching Tool</English>
|
||||||
<Polish>Saperka, używana do budowy okopów</Polish>
|
<Polish>Saperka, używana do budowy okopów</Polish>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_trenches_EnvelopeSmallName">
|
<Key ID="STR_ACE_Trenches_EnvelopeSmallName">
|
||||||
<English>Envelope - Small</English>
|
<English>Envelope - Small</English>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_trenches_EnevlopeSmallDescription">
|
<Key ID="STR_ACE_Trenches_EnevlopeSmallDescription">
|
||||||
<English>Small Personal Trench</English>
|
<English>Small Personal Trench</English>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_trenches_EnvelopeBigName">
|
<Key ID="STR_ACE_Trenches_DigEnvelopeSmall">
|
||||||
|
<English>Dig Small Trench</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Trenches_EnvelopeBigName">
|
||||||
<English>Envelope - Big</English>
|
<English>Envelope - Big</English>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_trenches_EnevlopeBigDescription">
|
<Key ID="STR_ACE_Trenches_EnevlopeBigDescription">
|
||||||
<English>Large Personal Trench</English>
|
<English>Large Personal Trench</English>
|
||||||
</Key>
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Trenches_DigEnvelopeBig">
|
||||||
|
<English>Dig Big Trench</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Trenches_ConfirmDig">
|
||||||
|
<English>Confirm Dig</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Trenches_CancelDig">
|
||||||
|
<English>Cancel Dig</English>
|
||||||
|
</Key>
|
||||||
|
<Key ID="STR_ACE_Trenches_ScrollAction">
|
||||||
|
<English>+Ctrl rotate</English>
|
||||||
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
||||||
|
Loading…
Reference in New Issue
Block a user