Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vehicle quick mount #4931

Merged
merged 8 commits into from
Jun 2, 2017
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions addons/quickmount/$PBOPREFIX$
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
z\ace\addons\quickmount
41 changes: 41 additions & 0 deletions addons/quickmount/ACE_Settings.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
class ACE_Settings {
class GVAR(enabled) {
value = 0;
typeName = "BOOL";
category = CSTRING(Category);
displayName = ECSTRING(common,Enabled);
description = CSTRING(KeybindDescription);
isClientSettable = 1;
force = 0;
};
class GVAR(distance) {
value = DEFAULT_DISTANCE;
typeName = "SCALAR";
category = CSTRING(Category);
displayName = CSTRING(Distance);
description = CSTRING(DistanceDescription);
isClientSettable = 0;
force = 0;
values[] = {"0m", "1m", "2m", "3m", "4m", "5m", "6m", "7m", "8m", "9m", "10m"};
};
class GVAR(speed) {
value = DEFAULT_SPEED;
typeName = "SCALAR";
category = CSTRING(Category);
displayName = CSTRING(Speed);
description = CSTRING(SpeedDescription);
isClientSettable = 0;
force = 0;
values[] = {"0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"};
};
class GVAR(priority) {
value = DEFAULT_PRIORITY;
typeName = "SCALAR";
category = CSTRING(Category);
displayName = CSTRING(Priority);
description = CSTRING(PriorityDescription);
isClientSettable = 1;
force = 0;
values[] = {"Driver", "Gunner", "Commander", "Passenger"};
};
};
17 changes: 17 additions & 0 deletions addons/quickmount/CfgEventHandlers.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));
};
};

class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};

class Extended_PostInit_EventHandlers {
class ADDON {
clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient));
};
};
37 changes: 37 additions & 0 deletions addons/quickmount/CfgVehicles.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
class CfgVehicles {
class ACE_Module;
class GVAR(module): ACE_Module {
author = ECSTRING(common,ACETeam);
category = "ACEX";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"ACE"

displayName = CSTRING(Category);
function = QFUNC(moduleInit);
scope = 2;
isGlobal = 1;
isTriggerActivated = 0;
isDisposable = 0;
icon = QPATHTOF(UI\Icon_Module_QuickMount_ca.paa);
class Arguments {
class enabled {
displayName = ECSTRING(common,Enabled);
description = CSTRING(KeybindDescription);
typeName = "BOOL";
defaultValue = 1;
};
class distance {
displayName = CSTRING(Distance);
description = CSTRING(DistanceDescription);
typeName = "NUMBER";
defaultValue = DEFAULT_DISTANCE;
};
class speed {
displayName = CSTRING(Speed);
description = CSTRING(SpeedDescription);
typeName = "NUMBER";
defaultValue = DEFAULT_SPEED;
};
};
class ModuleDescription {
description = CSTRING(KeybindDescription);
};
};
};
9 changes: 9 additions & 0 deletions addons/quickmount/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
ace_quickmount
============
Adds a keybind to quickly enter the vehicle you are directly looking at.

## Maintainers

The people responsible for merging changes to this component or answering potential questions.

- [Kingsley](https://github.com/jameslkingsley)
Binary file not shown.
2 changes: 2 additions & 0 deletions addons/quickmount/XEH_PREP.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
PREP(getInNearest);
PREP(moduleInit);
10 changes: 10 additions & 0 deletions addons/quickmount/XEH_postInitClient.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "script_component.hpp"

if (!hasInterface) exitWith {};

["ACE3 Movement", QGVAR(mount), [localize LSTRING(KeybindName), localize LSTRING(KeybindDescription)], "", {
if (!dialog) then {
call FUNC(getInNearest);
};
false
}] call CBA_fnc_addKeybind;
9 changes: 9 additions & 0 deletions addons/quickmount/XEH_preInit.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#include "script_component.hpp"

ADDON = false;

PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;

ADDON = true;
3 changes: 3 additions & 0 deletions addons/quickmount/XEH_preStart.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include "script_component.hpp"

#include "XEH_PREP.hpp"
18 changes: 18 additions & 0 deletions addons/quickmount/config.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#include "script_component.hpp"

class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author = ECSTRING(common,ACETeam);
authors[] = {"Kingsley"};
url = ECSTRING(main,URL);
VERSION_CONFIG;
};
};

#include "CfgEventHandlers.hpp"
#include "ACE_Settings.hpp"
#include "CfgVehicles.hpp"
95 changes: 95 additions & 0 deletions addons/quickmount/functions/fnc_getInNearest.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/*
* Author: Kingsley
* Mount the player in the vehicle they are directly looking at based on their distance.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_quickmount_fnc_getInNearest;
*
* Public: No
*/
#include "script_component.hpp"

if (!GVAR(enabled) ||
{isNull ACE_player} ||
{vehicle ACE_player != ACE_player} ||
{!alive ACE_player} ||
{ACE_player getVariable ["ace_unconscious", false]}
) exitWith {};

private _start = AGLtoASL positionCameraToWorld [0, 0, 0];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

private _start = AGLtoASL (ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot"));
I think this will work a lot better for people using 3rd person

private _end = (_start vectorAdd (getCameraViewDirection ACE_player vectorMultiply GVAR(distance)));
private _objects = lineIntersectsSurfaces [_start, _end, ACE_player];
private _target = (_objects param [0, []]) param [2, objNull];

if (locked _target in [2,3]) exitWith {
[localize LSTRING(VehicleLocked)] call EFUNC(common,displayTextStructured);
true
};

if (!isNull _target &&
{alive _target} &&
{{_target isKindOf _x} count ["Air","LandVehicle","Ship","StaticMortar"] > 0} &&
{([ACE_player, _target] call EFUNC(common,canInteractWith))} &&
{speed _target <= GVAR(speed)}
) then {
private _hasAction = false;

if (GVAR(priority) > 3 || GVAR(priority) < 0) then {
GVAR(priority) = 0;
};

private _seats = ["Driver", "Gunner", "Commander", "Cargo"];
private _sortedSeats = [_seats select GVAR(priority)];
_seats deleteAt GVAR(priority);
_sortedSeats append _seats;

{
private _unit = objNull;
switch (_x) do {
case "Driver": {_unit = driver _target};
case "Gunner": {_unit = gunner _target};
case "Commander": {_unit = commander _target};
default {}; // Includes "Cargo"
};

if (_unit isEqualType objNull && {!isNull _unit} && {!alive _unit}) exitWith {
Copy link
Contributor

@commy2 commy2 Feb 22, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_unit isEqualType objNull
As opposed to what?
If it's not OBJECT, line 65 will error anyway.

Copy link
Member

@jonpas jonpas Feb 25, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does line 65 have to do with _unit? It's not even used after this exitWith block.

if (!_hasAction) then {
ACE_player action ["GetIn" + _x, _target];
_hasAction = true;
};
};

if (_target emptyPositions _x > 0) exitWith {
if (!_hasAction) then {
if (_x == "Cargo") then {
private _crew = fullCrew [_target, "turret", true];
private _turretSeat = (_crew select {isNull (_x select 0)}) param [0, []];

if (_turretSeat isEqualTo []) then {
ACE_player action ["GetIn" + _x, _target];
} else {
ACE_player action ["GetInTurret", _target, _turretSeat select 3];
};

_hasAction = true;
} else {
ACE_player action ["GetIn" + _x, _target];
};

_hasAction = true;
};
};

if (_forEachIndex == 3) then {
[localize LSTRING(VehicleFull)] call EFUNC(common,displayTextStructured);
};
} forEach _sortedSeats;
};

true
25 changes: 25 additions & 0 deletions addons/quickmount/functions/fnc_moduleInit.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Author: Kingsley
* Initializes the quick-mount module.
*
* Arguments:
* 0: The module logic <LOGIC>
* 1: Units <ARRAY> (Unused)
* 2: Activated <BOOL>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"

if (!isServer) exitWith {};

params ["_logic", "", "_activated"];

if (!_activated) exitWith {};

[_logic, QGVAR(enabled), "enabled"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(distance), "distance"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(speed), "speed"] call EFUNC(common,readSettingFromModule);
1 change: 1 addition & 0 deletions addons/quickmount/functions/script_component.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "\z\ace\addons\quickmount\script_component.hpp"
21 changes: 21 additions & 0 deletions addons/quickmount/script_component.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#define COMPONENT quickmount
#define COMPONENT_BEAUTIFIED Quick Mount
#include "\z\ace\addons\main\script_mod.hpp"

// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define ENABLE_PERFORMANCE_COUNTERS

#ifdef DEBUG_ENABLED_QUICKMOUNT
#define DEBUG_MODE_FULL
#endif

#ifdef DEBUG_SETTINGS_QUICKMOUNT
#define DEBUG_SETTINGS DEBUG_SETTINGS_QUICKMOUNT
#endif

#include "\z\ace\addons\main\script_macros.hpp"

#define DEFAULT_DISTANCE 3
#define DEFAULT_SPEED 18
#define DEFAULT_PRIORITY 0
40 changes: 40 additions & 0 deletions addons/quickmount/stringtable.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="QuickMount">
<Key ID="STR_ACE_QuickMount_Category">
<English>Quick Mount</English>
</Key>
<Key ID="STR_ACE_QuickMount_KeybindName">
<English>Vehicle quick mount</English>
<German>Fahrzeug schnell montieren</German>
<Polish>Pojazd szybkie mocowanie</Polish>
</Key>
<Key ID="STR_ACE_QuickMount_KeybindDescription">
<English>Quickly enter the vehicle you are directly looking at.</English>
</Key>
<Key ID="STR_ACE_QuickMount_VehicleFull">
<English>Vehicle Full</English>
</Key>
<Key ID="STR_ACE_QuickMount_Distance">
<English>Distance</English>
</Key>
<Key ID="STR_ACE_QuickMount_DistanceDescription">
<English>Maximum distance to check for vehicles.</English>
</Key>
<Key ID="STR_ACE_QuickMount_VehicleLocked">
<English>Vehicle Locked</English>
</Key>
<Key ID="STR_ACE_QuickMount_Speed">
<English>Maximum Speed (km/h)</English>
</Key>
<Key ID="STR_ACE_QuickMount_SpeedDescription">
<English>Maximum vehicle speed (km/h) allowed for player entry</English>
</Key>
<Key ID="STR_ACE_QuickMount_Priority">
<English>Prioritize Seat</English>
</Key>
<Key ID="STR_ACE_QuickMount_PriorityDescription">
<English>Seat priority on entry</English>
</Key>
</Package>
</Project>