Skip to content
This repository was archived by the owner on Aug 27, 2024. It is now read-only.

Commit 8a184e0

Browse files
authored
Merge pull request #154 from CptWesley/api-rotation
2 parents 8ad7f67 + 9f02694 commit 8a184e0

File tree

9 files changed

+42
-28
lines changed

9 files changed

+42
-28
lines changed

overwolf/src/AppSettings/pages/WindowSettingsPage.tsx

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -178,17 +178,29 @@ export default function WindowSettingsPage(props: IAppSettingsPageProps) {
178178
{t('settings.window.resamplingRate')}
179179
</label>
180180
</div>
181-
<div className={classes.setting} title={t('settings.window.showPlayerCoordinatesTooltip')}>
182-
<label className={classes.checkbox}>
183-
<input
184-
type='checkbox'
185-
checked={settings.showPlayerCoordinates}
186-
onChange={e => updateSimpleSetting('showPlayerCoordinates', e.currentTarget.checked)}
187-
/>
188-
{t('settings.window.showPlayerCoordinates')}
181+
<div className={classes.setting}>
182+
<label className={classes.select} title={t('settings.window.rotationSourceTooltip')}>
183+
<select
184+
value={settings.rotationSource}
185+
onChange={e => updateSimpleSetting('rotationSource', e.currentTarget.value as RotationSource)}
186+
>
187+
<option value='api'>{t('settings.window.rotationSourceApi')}</option>
188+
<option value='computed'>{t('settings.window.rotationSourceComputed')}</option>
189+
</select>
190+
{t('settings.window.rotationSource')}
189191
</label>
190192
</div>
191193
<AdvancedSettings>
194+
<div className={classes.setting} title={t('settings.window.showPlayerCoordinatesTooltip')}>
195+
<label className={classes.checkbox}>
196+
<input
197+
type='checkbox'
198+
checked={settings.showPlayerCoordinates}
199+
onChange={e => updateSimpleSetting('showPlayerCoordinates', e.currentTarget.checked)}
200+
/>
201+
{t('settings.window.showPlayerCoordinates')}
202+
</label>
203+
</div>
192204
<div className={classes.setting} title={t('settings.window.showNavMeshTooltip')}>
193205
<label className={classes.checkbox}>
194206
<input

overwolf/src/Global.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ declare type IconSettings = {
5353

5454
declare type PlayerData = {
5555
position: Vector3,
56-
rotation: Vector3,
56+
rotation: number,
5757
compass: string,
5858
map: string | undefined,
5959
name: string | undefined,
@@ -66,6 +66,11 @@ type AnimationInterpolation =
6666
| 'linear'
6767
;
6868

69+
type RotationSource =
70+
| 'api'
71+
| 'computed'
72+
;
73+
6974
declare type GraphNode = {
7075
position: Vector2,
7176
neighbors: number[],

overwolf/src/Minimap.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,14 @@ export default function Minimap(props: IProps) {
101101
zoomBy,
102102
} = useMinimapRenderer(canvas, hoverLabelCanvas);
103103

104-
function setPosition(pos: Vector2) {
104+
function setPosition(pos: Vector2, rotation: number) {
105105
if (appContext.settings.shareLocation) {
106106
const sharedLocation = updateFriendLocation(appContext.settings.channelsServerUrl, playerName.current, pos);
107107
sharedLocation.then(setFriends);
108108
}
109109

110110
store('lastKnownPosition', pos);
111-
setPlayerPosition(pos);
111+
setPlayerPosition(pos, rotation);
112112
}
113113

114114
function setFriends(channels: undefined | FriendData[]) {
@@ -268,7 +268,7 @@ export default function Minimap(props: IProps) {
268268
(window as any).setFriends = setFriends;
269269

270270
const callbackUnregister = registerEventCallback(info => {
271-
setPosition(info.position);
271+
setPosition(info.position, info.rotation);
272272

273273
if (info.name) {
274274
playerName.current = info.name;

overwolf/src/Minimap/useMinimapRenderer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,12 +206,12 @@ export default function useMinimapRenderer(canvas: React.RefObject<HTMLCanvasEle
206206
drawWithInterpolationRef.current(force);
207207
}
208208

209-
function setPlayerPosition(pos: Vector2) {
209+
function setPlayerPosition(pos: Vector2, rotation: number) {
210210
if (pos.x === currentPlayerPosition.current.x && pos.y === currentPlayerPosition.current.y) {
211211
return;
212212
}
213213

214-
currentPlayerAngle.current = getAngle(lastPlayerPosition.current, currentPlayerPosition.current);
214+
currentPlayerAngle.current = appContext.settings.rotationSource === 'computed' ? getAngle(lastPlayerPosition.current, currentPlayerPosition.current) : rotation;
215215
lastPositionUpdate.current = performance.now();
216216
lastPlayerPosition.current = currentPlayerPosition.current;
217217
currentPlayerPosition.current = pos;
@@ -225,7 +225,7 @@ export default function useMinimapRenderer(canvas: React.RefObject<HTMLCanvasEle
225225
const predictedPosition = predictVector(lastPlayerPosition.current, currentPlayerPosition.current);
226226
updateInterpolatedPlayerPosition(predictedPosition, updateTime);
227227
}
228-
updateInterpolatedAngle(getAngle(lastPlayerPosition.current, currentPlayerPosition.current), updateTime);
228+
updateInterpolatedAngle(currentPlayerAngle.current, updateTime);
229229

230230
redraw(true);
231231
}

overwolf/src/contexts/AppContext.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export function loadAppContextSettings(): AppContextSettings {
3939
showNavMesh: load('showNavMesh'),
4040
alwaysLaunchDesktop: load('alwaysLaunchDesktop'),
4141
autoLaunchInGame: load('autoLaunchInGame'),
42+
rotationSource: load('rotationSource'),
4243
};
4344
}
4445

overwolf/src/locales/en/common.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,11 @@
6767
"resamplingRate": "Upsampling factor",
6868
"resamplingRateTooltip": "The number of samples taken when performing inter/extra-polation. A higher value will give a smoother experience, but has worse performance.",
6969
"showNavMesh": "Show Nagivation Mesh",
70-
"showNavMeshTooltip": "Shows the navigation mesh. Useful for debugging the navigation system. Causes a heavy performance hit. Don't enable unless necessary."
70+
"showNavMeshTooltip": "Shows the navigation mesh. Useful for debugging the navigation system. Causes a heavy performance hit. Don't enable unless necessary.",
71+
"rotationSource": "Rotation Data",
72+
"rotationSourceTooltip": "Determines which source of rotation data is used when rendering player on the minimap.",
73+
"rotationSourceApi": "Character Direction",
74+
"rotationSourceComputed": "Movement Direction"
7175
},
7276
"overlay": {
7377
"_": "In-game overlay",

overwolf/src/logic/hooks.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,7 @@ function transformData(info: any): PlayerData | undefined {
4444
z: parseFloat(locationParts[5]),
4545
};
4646

47-
const rotation = {
48-
x: parseFloat(locationParts[7]),
49-
y: parseFloat(locationParts[9]),
50-
z: parseFloat(locationParts[11]),
51-
};
47+
const rotation = -(parseFloat(locationParts[11]) - 90) * Math.PI / 180;
5248

5349
const compass = locationParts[13].trim();
5450

overwolf/src/logic/storage.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const simpleStorageDefaultSettings = {
3838
showNavMesh: false,
3939
alwaysLaunchDesktop: false,
4040
autoLaunchInGame: true,
41+
rotationSource: 'api' as RotationSource,
4142
};
4243

4344
{
@@ -82,6 +83,7 @@ export const scopedSettings: (keyof SimpleStorageSetting)[] = [
8283
'extrapolateLocation',
8384
'resamplingRate',
8485
'showNavMesh',
86+
'rotationSource',
8587
];
8688

8789
export const iconSettingStorageScope = 'icon';

overwolf/src/logic/util.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export function getNumberInterpolator(animationInterpolation: AnimationInterpola
1111

1212
export function getAngleInterpolator(animationInterpolation: AnimationInterpolation): Interpolator<number> {
1313
switch (animationInterpolation) {
14-
case 'cosine': return interpolateAngleCosine;
14+
case 'cosine': return interpolateAngleLinear;
1515
case 'linear': return interpolateAngleLinear;
1616
case 'none': return undefined;
1717
}
@@ -79,12 +79,6 @@ export function interpolateVectorsCosine(start: Vector2, end: Vector2, percentag
7979
};
8080
}
8181

82-
export function interpolateAngleCosine(start: number, end: number, percentage: number) {
83-
const mu = computeCosineInterpolationMu(percentage);
84-
const bestEnd = correctEndAngle(start, end);
85-
return start * (1 - mu) + bestEnd * mu;
86-
}
87-
8882
function correctEndAngle(start: number, end: number) {
8983
const alternativeEnd1 = end - Math.PI * 2;
9084
const alternativeEnd2 = end + Math.PI * 2;

0 commit comments

Comments
 (0)