Skip to content

Commit 8b6424f

Browse files
Merge pull request #742 from LVPlayground/feature/gravityKey
add key to easily swap around gravity in the car
2 parents 40010bd + 79efe6a commit 8b6424f

6 files changed

Lines changed: 53 additions & 0 deletions

File tree

javascript/entities/player.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ export class Player extends Supplementable {
6161
// https://wiki.sa-mp.com/wroot/index.php?title=SetPlayerTeam
6262
static kNoTeam = 255;
6363

64+
// Default gravity value
65+
static kDefaultGravity = 0.008;
66+
6467
// Constants applicable to the `Player.specialAction` property.
6568
static kSpecialActionNone = 0;
6669
static kSpecialActionCrouching = 1; // read-only

javascript/entities/vehicle.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export class Vehicle extends Supplementable {
2626
static kVehicleKeysNos = 32;
2727
static kVehicleKeysBlinkerRight = 64;
2828
static kVehicleKeysBlinkerLeft = 128;
29+
static kVehicleKeysGravity = 256;
2930

3031
// Constants that indicate the seat a player is occupying in the vehicle. Values above 1 are
3132
// possible. They indicate passenger seats in the rear seat or further beyond. (E.g. for a bus.)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright 2020 Las Venturas Playground. All rights reserved.
2+
// Use of this source code is governed by the MIT license, a copy of which can
3+
// be found in the LICENSE file.
4+
5+
import Command from 'features/playground/command.js';
6+
import { CommandBuilder } from 'components/command_manager/command_builder.js';
7+
8+
// Command: /gravitykey [player]
9+
export default class GravityKeyCommand extends Command {
10+
get name() { return 'gravitykey'; }
11+
get defaultPlayerLevel() { return Player.LEVEL_MANAGEMENT; }
12+
13+
build(commandBuilder) {
14+
commandBuilder
15+
.parameters([{ name: 'target', type: CommandBuilder.PLAYER_PARAMETER, optional: true }])
16+
.build(GravityKeyCommand.prototype.onGravityKeyCommand.bind(this));
17+
}
18+
19+
// Turn on or off the ability to use indicators.
20+
async onGravityKeyCommand(player, target) {
21+
const subject = target || player;
22+
23+
if (subject.syncedData.vehicleKeys & Vehicle.kVehicleKeysGravity) {
24+
subject.syncedData.vehicleKeys &= ~ Vehicle.kVehicleKeysGravity;
25+
subject.gravity = Player.kDefaultGravity;
26+
27+
player.sendMessage(Message.COMMAND_SUCCESS, subject.name + ' can\'t switch gravity anymore.');
28+
return;
29+
}
30+
31+
subject.syncedData.vehicleKeys |= Vehicle.kVehicleKeysGravity;
32+
player.sendMessage(Message.COMMAND_SUCCESS, subject.name + ' will now able to switch gravity.');
33+
}
34+
}

javascript/features/playground/playground_commands.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class PlaygroundCommands {
7474
'features/playground/commands/fancy.js',
7575
'features/playground/commands/flap.js',
7676
'features/playground/commands/fly.js',
77+
'features/playground/commands/gravity_key.js',
7778
'features/playground/commands/indicators.js',
7879
'features/playground/commands/jetpack.js',
7980
'features/playground/commands/kickflip.js',

pawn/Driver/Driver.pwn

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ native ReportTrailerUpdate(vehicleid, trailerid);
2222
#define VEHICLE_KEYS_BINDING_NOS KEY_FIRE
2323
#define VEHICLE_KEYS_BINDING_BLINKER_RIGHT KEY_LOOK_RIGHT
2424
#define VEHICLE_KEYS_BINDING_BLINKER_LEFT KEY_LOOK_LEFT
25+
#define VEHICLE_KEYS_BINDING_GRAVITY KEY_ANALOG_UP
2526

2627
// Number of milliseconds a player has to be spraying in order to collect a spray tag.
2728
new const kSprayTagTimeMs = 2000;
@@ -53,6 +54,9 @@ new g_vehicleTrailerId[MAX_VEHICLES];
5354
// The four blinker objects for the player. 0/1 = RIGHT 2/3 = LEFT
5455
new DynamicObject: g_blinkerObjects[MAX_PLAYERS][4];
5556

57+
// The current player gravity (positive or negative)
58+
new Float: g_playerGravity[MAX_PLAYERS];
59+
5660
// Returns whether the given |modelId| is a remote controllable vehicle.
5761
IsModelRemoteControlVehicle(modelId) {
5862
switch (modelId) {
@@ -91,6 +95,7 @@ public OnPlayerConnect(playerid) {
9195
g_lastTakenDamageIssuerId[playerid] = -1;
9296
g_lastTakenDamageTime[playerid] = 0;
9397
g_sprayTagStartTime[playerid] = 0;
98+
g_playerGravity[playerid] = 0.008;
9499
g_isDisconnecting[playerid] = false;
95100

96101
// Proceed with legacy processing.
@@ -281,6 +286,7 @@ public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
281286
AddVehicleComponent(vehicleId, 1010);
282287
}
283288

289+
// Vehicle keys (7): Blinkers
284290
new const bool: pressedBlinkerRight =
285291
PRESSED(VEHICLE_KEYS_BINDING_BLINKER_RIGHT) && vehicleKeys & VEHICLE_KEYS_BLINKER_RIGHT;
286292
new const bool: pressedBlinkerLeft =
@@ -295,6 +301,12 @@ public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
295301

296302
SetBlinker(playerid, vehicleId, leftBlinker, rightBlinker);
297303
}
304+
305+
// Vehicle keys (8): Gravity
306+
if(PRESSED(VEHICLE_KEYS_BINDING_GRAVITY) && vehicleKeys & VEHICLE_KEYS_GRAVITY) {
307+
g_playerGravity[playerid] *= -1;
308+
SetPlayerGravity(playerid, g_playerGravity[playerid]);
309+
}
298310
}
299311

300312
LegacyPlayerKeyStateChange(playerid, newkeys, oldkeys);

pawn/Interface/Server.pwn

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,11 @@ native ReportPlayerTeleport(playerId, timeLimited);
4444
#define VEHICLE_KEYS_NOS 32
4545
#define VEHICLE_KEYS_BLINKER_RIGHT 64
4646
#define VEHICLE_KEYS_BLINKER_LEFT 128
47+
#define VEHICLE_KEYS_GRAVITY 256
4748

4849
native IsCommunicationMuted();
4950
native bool: SpawnPlayerInHouse(playerId);
51+
native SetPlayerGravity(playerid, Float:value);
5052

5153
// -------------------------------------------------------------------------------------------------
5254
// We override the GivePlayerMoney native as it's used to record intentional changes in a player's

0 commit comments

Comments
 (0)