Skip to content
This repository was archived by the owner on Apr 3, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all 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
16 changes: 8 additions & 8 deletions docs/app.min.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions src/Runner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export class Runner {

run(core: app.core.Core, vm: ui.MainViewModel) {
const localPlayer = core.playerList.get(core.localPlayer.value);
this.updateResearch(core, vm, localPlayer);
this.updateResearch(vm, localPlayer);
this.updateSense(core, vm, localPlayer);
this.canvas.height = window.innerHeight;
this.canvas.width = window.innerWidth;
Expand Down Expand Up @@ -61,9 +61,9 @@ export class Runner {
this.radar.renderPlayers(localPlayer, core.playerList.values());
}

private updateResearch(core: app.core.Core, vm: ui.MainViewModel, localPlayer?: app.core.Player) {
private updateResearch(vm: ui.MainViewModel, localPlayer?: app.core.Player) {
if (vm.settings.research.recoil.enable.value && localPlayer && vm.settings.research.recoil.options)
this.recoil.update(core.buttonList, localPlayer, vm.settings.research.recoil.options);
this.recoil.update(localPlayer, vm.settings.research.recoil.options);
}

private updateSense(core: app.core.Core, vm: ui.MainViewModel, localPlayer?: app.core.Player) {
Expand All @@ -75,7 +75,7 @@ export class Runner {
: this.sense.resetPlayers.bind(this.sense);
if (localPlayer) {
itemsFn(localPlayer, core.itemList.values(), vm.settings.itemSet);
playersFn(localPlayer, core.playerList.values());
playersFn(localPlayer, core.playerList.values(), vm.settings.general.sense.options);
}
}
}
5 changes: 3 additions & 2 deletions src/lib/core/entities/Player.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ export class Player extends app.api.Adapter<app.api.Entity> {
readonly lastVisibleTime = new app.Float32(app.offsets.entity.lastVisibleTime),
readonly vecPunchWeaponAngle = new app.Vector(app.offsets.player.vecPunchWeaponAngle),
readonly viewAngle = new app.Vector(app.offsets.player.viewAngle),
readonly bleedoutState = new app.UInt8(app.offsets.player.bleedoutState)) {
super(new app.api.Entity(address, [localOrigin, glowEnable, glowThroughWalls, teamNum, name, lifeState, lastVisibleTime, vecPunchWeaponAngle, viewAngle, bleedoutState], {enableUpdate: true}));
readonly bleedoutState = new app.UInt8(app.offsets.player.bleedoutState),
readonly zooming = new app.UInt8(app.offsets.player.zooming)) {
super(new app.api.Entity(address, [localOrigin, glowEnable, glowThroughWalls, teamNum, name, lifeState, lastVisibleTime, vecPunchWeaponAngle, viewAngle, bleedoutState, zooming], {enableUpdate: true}));
}

get isValid() {
Expand Down
3 changes: 2 additions & 1 deletion src/lib/core/offsets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ export const offsets = {
lifeState: 0x798, // [RecvTable.DT_Player] -> m_lifeState
vecPunchWeaponAngle: 0x23f8, // [DataMap.C_Player] -> m_currentFrameLocalPlayer.m_vecPunchWeapon_Angle
viewAngle: 0x24e0, // [DataMap.C_Player] -> m_ammoPoolCapacity - 0x14
bleedoutState: 0x2688 // [RecvTable.DT_Player] -> m_bleedoutState
bleedoutState: 0x2688, // [RecvTable.DT_Player] -> m_bleedoutState
zooming: 0x1bc1 // [RecvTable.DT_Player] -> m_bZooming
}
};
10 changes: 3 additions & 7 deletions src/lib/features/Recoil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,11 @@ import * as app from '.';
export class Recoil {
private vecPunchWeaponAngle = app.core.VectorData.none;

update(buttonList: app.core.ButtonList, localPlayer: app.core.Player, options: IRecoilOptions) {
if (localPlayer.viewAngle.source.syncId) {
/* We sent an update, but did not receive confirmation! */
} else if (!buttonList.inAttack.value) {
this.vecPunchWeaponAngle = app.core.VectorData.none;
} else {
update(localPlayer: app.core.Player, options: IRecoilOptions) {
if (!localPlayer.viewAngle.source.syncId) {
const vecPunchWeaponAngle = localPlayer.vecPunchWeaponAngle.value;
const viewAngle = localPlayer.viewAngle.value;
if (Math.abs(vecPunchWeaponAngle.x) >= 0.5 || Math.abs(vecPunchWeaponAngle.y) >= 0.5 || Math.abs(vecPunchWeaponAngle.z) >= 0.5) {
if (Math.abs(vecPunchWeaponAngle.x) > 0 || Math.abs(vecPunchWeaponAngle.y) > 0) {
const x = viewAngle.x + (this.vecPunchWeaponAngle.x - vecPunchWeaponAngle.x) * options.percentage;
const y = viewAngle.y + (this.vecPunchWeaponAngle.y - vecPunchWeaponAngle.y) * options.percentage;
localPlayer.viewAngle.delta(new app.core.VectorData(x, y, viewAngle.z));
Expand Down
32 changes: 24 additions & 8 deletions src/lib/features/Sense.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export class Sense {
constructor(
private readonly itemDefault = new app.core.GlowData(0, 110, 225, 25, true, false),
private readonly itemHighlight = new app.core.GlowData(137, 108, 64, 0, true, false),
private readonly maximumDistance = 200) {}
private readonly maximumDistance = 200) { }

resetItems(_: app.core.Player, items: Iterable<app.core.Item>) {
for (const item of items) {
Expand All @@ -19,7 +19,7 @@ export class Sense {
if (player.isValid && !player.isSameTeam(localPlayer)) {
if (this.inRange(localPlayer, player.localOrigin)) {
/* This could be a Bloodhound scan! */
} else if (player.glowEnable.value === 7) {
} else if (player.glowEnable.value === 7 || player.glowEnable.value === 5) {
player.glowEnable.value = 2;
player.glowThroughWalls.value = 5;
}
Expand All @@ -36,14 +36,20 @@ export class Sense {
}
}
}
updatePlayers(localPlayer: app.core.Player, players: Iterable<app.core.Player>) {

updatePlayers(localPlayer: app.core.Player, players: Iterable<app.core.Player>, options?: ISenseOptions) {
for (const player of players) {
if (player.isValid && !player.isSameTeam(localPlayer)) {
if (this.inRange(localPlayer, player.localOrigin)) {
player.glowEnable.value = 7;
player.glowThroughWalls.value = 2;
} else if (player.glowEnable.value === 7) {
const range = this.range(localPlayer, player.localOrigin);
if (range < this.maximumDistance) {
if (options && options.longRangeMode && range > 50 && localPlayer.zooming.value == 1) {
player.glowEnable.value = 5;
player.glowThroughWalls.value = 1;
} else {
player.glowEnable.value = 7;
player.glowThroughWalls.value = 2;
}
} else if (player.glowEnable.value === 7 || player.glowEnable.value === 5) {
player.glowEnable.value = 2;
player.glowThroughWalls.value = 5;
}
Expand All @@ -56,4 +62,14 @@ export class Sense {
const dy = (localPlayer.localOrigin.value.y - origin.value.y) * 0.0254;
return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)) < this.maximumDistance;
}

private range(localPlayer: app.core.Player, origin: app.core.Vector) {
const dx = (localPlayer.localOrigin.value.x - origin.value.x) * 0.0254;
const dy = (localPlayer.localOrigin.value.y - origin.value.y) * 0.0254;
return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
}
}

export type ISenseOptions = {
longRangeMode: boolean;
}
1 change: 1 addition & 0 deletions src/ui/settings/general/language.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export const language = {
generalSense: 'Sense',
generalSenseItems: 'Highlight Items',
generalSensePlayers: 'Highlight Players',
generalSenseLongRangeMode: 'Long Range Mode',
generalViewType: 'Main',
generalViewTypeMap: 'Show Map',
generalViewTypeRadar: 'Show Radar'
Expand Down
17 changes: 17 additions & 0 deletions src/ui/settings/general/viewModels/SenseViewModel.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,23 @@
import * as lib from 'lib';
import * as mobx from 'mobx';
import * as ui from 'ui';

export class SenseViewModel {
readonly highlightItems = new ui.BoolStorage('settings.sense.highlightItems', false);
readonly highlightPlayers = new ui.BoolStorage('settings.sense.highlightPlayers', false);
readonly longRangeMode = new ui.BoolStorage('settings.sense.longRangeMode', false);

constructor() {
mobx.makeObservable(this);
mobx.autorun(this.updateOptions.bind(this));
}

@mobx.observable
options?: lib.features.ISenseOptions;

private updateOptions() {
this.options = {
longRangeMode: this.longRangeMode.value
};
}
}
5 changes: 5 additions & 0 deletions src/ui/settings/general/views/SenseView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,10 @@ export const SenseView = ui.createView<{vm: app.SenseViewModel}>(({vm}) => (
control={<ui.material.Switch
onChange={x => vm.highlightPlayers.change(x.target.checked)}
checked={vm.highlightPlayers.value} />} />
<ui.material.FormControlLabel
label={app.language.generalSenseLongRangeMode}
control={<ui.material.Switch
onChange={x => vm.longRangeMode.change(x.target.checked)}
checked={vm.longRangeMode.value} />} />
</ui.material.FormGroup>
));