+
Radar Settings
-
+
-
+
+
+ Show Only Enemies
+ onSettingsChange({ ...settings, showOnlyEnemies: e.target.checked })}
+ className="relative h-5 w-9 rounded-full shadow-sm bg-radar-secondary/30 checked:bg-radar-secondary transition-colors duration-200 appearance-none before:absolute before:h-4 before:w-4 before:top-0.5 before:left-0.5 before:bg-white before:rounded-full before:transition-transform before:duration-200 checked:before:translate-x-4"
+ />
+
+
+
+ Enemy Names
+ onSettingsChange({ ...settings, showEnemyNames: e.target.checked })}
+ className="relative h-5 w-9 rounded-full shadow-sm bg-radar-secondary/30 checked:bg-radar-secondary transition-colors duration-200 appearance-none before:absolute before:h-4 before:w-4 before:top-0.5 before:left-0.5 before:bg-white before:rounded-full before:transition-transform before:duration-200 checked:before:translate-x-4"
+ />
+
+
+ {(!settings.showOnlyEnemies) && (
Ally Names
{
className="relative h-5 w-9 rounded-full shadow-sm bg-radar-secondary/30 checked:bg-radar-secondary transition-colors duration-200 appearance-none before:absolute before:h-4 before:w-4 before:top-0.5 before:left-0.5 before:bg-white before:rounded-full before:transition-transform before:duration-200 checked:before:translate-x-4"
/>
+ )}
- Enemy Names
+ Follow Yourself
onSettingsChange({ ...settings, showEnemyNames: e.target.checked })}
+ checked={settings.followYourself}
+ onChange={(e) => onSettingsChange({ ...settings, followYourself: e.target.checked })}
className="relative h-5 w-9 rounded-full shadow-sm bg-radar-secondary/30 checked:bg-radar-secondary transition-colors duration-200 appearance-none before:absolute before:h-4 before:w-4 before:top-0.5 before:left-0.5 before:bg-white before:rounded-full before:transition-transform before:duration-200 checked:before:translate-x-4"
/>
- View Cones
+ View Player Cones
{
className="relative h-5 w-9 rounded-full shadow-sm bg-radar-secondary/30 checked:bg-radar-secondary transition-colors duration-200 appearance-none before:absolute before:h-4 before:w-4 before:top-0.5 before:left-0.5 before:bg-white before:rounded-full before:transition-transform before:duration-200 checked:before:translate-x-4"
/>
+
+
+ Show Grenades
+ onSettingsChange({ ...settings, showGrenades: e.target.checked })}
+ className="relative h-5 w-9 rounded-full shadow-sm bg-radar-secondary/30 checked:bg-radar-secondary transition-colors duration-200 appearance-none before:absolute before:h-4 before:w-4 before:top-0.5 before:left-0.5 before:bg-white before:rounded-full before:transition-transform before:duration-200 checked:before:translate-x-4"
+ />
+
+
+ {settings.showGrenades && (
+
+ )}
+
+
+ Show Droppped Weapons
+ onSettingsChange({ ...settings, showDroppedWeapons: e.target.checked })}
+ className="relative h-5 w-9 rounded-full shadow-sm bg-radar-secondary/30 checked:bg-radar-secondary transition-colors duration-200 appearance-none before:absolute before:h-4 before:w-4 before:top-0.5 before:left-0.5 before:bg-white before:rounded-full before:transition-transform before:duration-200 checked:before:translate-x-4"
+ />
+
+
+ {settings.showDroppedWeapons && (
+
+ )}
+
+
+ Theme Color
+ onSettingsChange({ ...settings, colorScheme: e.target.value })}
+ className="ml-2 bg-radar-panel text-radar-primary rounded-md px-2 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-radar-primary"
+ style={{
+ background: `rgba(59, 130, 246, 0.2)`,
+ border: `none`
+ }}
+ >
+ Default
+ White
+ Light Blue
+ Dark Blue
+ Purple
+ Red
+ Orange
+ Yellow
+ Green
+ Light Green
+ Pink
+
+
+
+
onSettingsChange({ ...settings, whichPlayerAreYou: "0" })}>
+ Choose Yourself Again
+
diff --git a/webapp/src/components/bomb.jsx b/webapp/src/components/bomb.jsx
index 1c925d2..9c29cf9 100644
--- a/webapp/src/components/bomb.jsx
+++ b/webapp/src/components/bomb.jsx
@@ -1,5 +1,5 @@
import { useRef } from "react";
-import { getRadarPosition, teamEnum } from "../utilities/utilities";
+import { getRadarPosition, teamEnum, calculatePositionWithScale } from "../utilities/utilities";
const Bomb = ({ bombData, mapData, radarImage, localTeam, averageLatency, settings }) => {
const radarPosition = getRadarPosition(mapData, bombData);
@@ -8,12 +8,11 @@ const Bomb = ({ bombData, mapData, radarImage, localTeam, averageLatency, settin
const bombBounding = (bombRef.current &&
bombRef.current.getBoundingClientRect()) || { width: 0, height: 0 };
- const radarImageBounding = (radarImage !== undefined &&
- radarImage.getBoundingClientRect()) || { width: 0, height: 0 };
- const radarImageTranslation = {
- x: radarImageBounding.width * radarPosition.x - bombBounding.width * 0.5,
- y: radarImageBounding.height * radarPosition.y - bombBounding.height * 0.5,
- };
+ const scaledPos = calculatePositionWithScale(radarImage, radarPosition);
+ const radarImageTranslation = {
+ x: (scaledPos[0] - bombBounding.width * 0.5),
+ y: (scaledPos[1] - bombBounding.height * 0.5),
+ };
// Calculate bomb size based on settings
const baseSize = 1.5; // Base size in vw
@@ -34,7 +33,7 @@ const Bomb = ({ bombData, mapData, radarImage, localTeam, averageLatency, settin
`#c90b0b`
}`,
WebkitMask: `url('./assets/icons/c4_sml.png') no-repeat center / contain`,
- opacity: `1`,
+ opacity: `${settings.showOnlyEnemies && bombData.owner_entity < 141288103162675 && localTeam == teamEnum.terrorist ? 0 : 1}`,
zIndex: `1`,
}}
/>
diff --git a/webapp/src/components/droppedweapons.jsx b/webapp/src/components/droppedweapons.jsx
new file mode 100644
index 0000000..b4fecdb
--- /dev/null
+++ b/webapp/src/components/droppedweapons.jsx
@@ -0,0 +1,43 @@
+import { useRef } from "react";
+import { getRadarPosition, teamEnum, colorSchemePallette, weaponList, calculatePositionWithScale } from "../utilities/utilities";
+import MaskedIcon from "./maskedicon";
+
+const DroppedWeapon = ({ droppedWeaponData, mapData, settings, averageLatency, radarImage }) => {
+
+ const radarPosition = getRadarPosition(mapData, { x: droppedWeaponData.m_x, y: droppedWeaponData.m_y });
+
+ const wepRef = useRef();
+ const wepBounding = (wepRef.current &&
+ wepRef.current.getBoundingClientRect()) || { width: 0, height: 0 };
+ const scaledPos = calculatePositionWithScale(radarImage, radarPosition);
+ const radarImageTranslation = {
+ x: (scaledPos[0] - wepBounding.width * 0.5),
+ y: (scaledPos[1] - wepBounding.height * 0.5),
+ };
+
+return (
+
+
+ {(settings.droppedWeaponIgnoreNade && !weaponList["grenades"].includes(droppedWeaponData.m_name) || !settings.droppedWeaponIgnoreNade) &&
+
+
+ }
+
+
+)
+
+};
+
+export default DroppedWeapon;
\ No newline at end of file
diff --git a/webapp/src/components/grenade.jsx b/webapp/src/components/grenade.jsx
new file mode 100644
index 0000000..51b236d
--- /dev/null
+++ b/webapp/src/components/grenade.jsx
@@ -0,0 +1,104 @@
+import { useRef } from "react";
+import GrenadeEffects from "./grenadeeffects.jsx";
+import { getRadarPosition, teamEnum, calculatePositionWithScale } from "../utilities/utilities";
+import MaskedIcon from "./maskedicon.jsx";
+
+const Grenade = ({ grenadeData, mapData, settings, averageLatency, radarImage, type }) => {
+
+ const firePositions = grenadeData.m_firePositions || {};
+
+ const radarPosition = getRadarPosition(mapData, { x: grenadeData.m_x, y: grenadeData.m_y });
+
+ const grenRef = useRef();
+ const grenBounding = (grenRef.current &&
+ grenRef.current.getBoundingClientRect()) || { width: 0, height: 0 };
+ const scaledPos = calculatePositionWithScale(radarImage, radarPosition);
+ const radarImageTranslation = {
+ x: (scaledPos[0] - grenBounding.width * 0.5),
+ y: (scaledPos[1] - grenBounding.height * 0.5),
+ };
+
+ if(type == "landed") {
+ if (grenadeData.m_type == "smoke") {
+ return (
+
+ );
+ } else if (grenadeData.m_type == "molo") {
+
+ return (
+
+
+
+
+ {firePositions[0]!=null && firePositions.map((firePosition, index) => (
+
+ ))}
+
+
+
+
+
+
+
+ {Math.round(grenadeData.m_timeleft)}s
+
+
+
+
+
+
+ );
+
+ }
+
+ } else {
+ return (
+
+
+
+
+
+
+ )
+ }
+};
+
+export default Grenade;
\ No newline at end of file
diff --git a/webapp/src/components/grenadeeffects.jsx b/webapp/src/components/grenadeeffects.jsx
new file mode 100644
index 0000000..d7ed68a
--- /dev/null
+++ b/webapp/src/components/grenadeeffects.jsx
@@ -0,0 +1,72 @@
+import { useRef } from "react";
+import { getRadarPosition, teamEnum, calculatePositionWithScale } from "../utilities/utilities";
+
+const GrenadeEffects = ({ grenadeData, type, mapData, settings, averageLatency, radarImage }) => {
+
+ let radarScale = 1; try { let scale = radarImage.style.scale; if (scale) radarScale = scale;} catch {}
+
+ const smokeSize = 3 * radarScale;
+ const fireSize = 1.3 * radarScale;
+ const radarPosition = getRadarPosition(mapData, { x: grenadeData.m_x, y: grenadeData.m_y });
+
+ const grenRef = useRef();
+ const grenBounding = (grenRef.current &&
+ grenRef.current.getBoundingClientRect()) || { width: 0, height: 0 };
+
+ const scaledPos = calculatePositionWithScale(radarImage, radarPosition);
+ const radarImageTranslation = {
+ x: (scaledPos[0] - grenBounding.width * 0.5),
+ y: (scaledPos[1] - grenBounding.height * 0.5),
+ };
+
+ if (type == "smoke") {
+ return (
+
+
+
+
+
+
+ {Math.round(grenadeData.m_timeleft)}s
+
+
+
+
+ );
+ } else if (type == "molo") {
+ return (
+
+ );
+ }
+};
+
+export default GrenadeEffects;
\ No newline at end of file
diff --git a/webapp/src/components/maskedicon.jsx b/webapp/src/components/maskedicon.jsx
index a42726b..3a3f183 100644
--- a/webapp/src/components/maskedicon.jsx
+++ b/webapp/src/components/maskedicon.jsx
@@ -1,11 +1,11 @@
const MaskedIcon = ({ path, height, color }) => {
return (
diff --git a/webapp/src/components/player.jsx b/webapp/src/components/player.jsx
index 2ccd4b1..970c52e 100644
--- a/webapp/src/components/player.jsx
+++ b/webapp/src/components/player.jsx
@@ -1,6 +1,5 @@
import { useRef, useState, useEffect } from "react";
-import { getRadarPosition, playerColors } from "../utilities/utilities";
-
+import { getRadarPosition, playerColors, calculatePositionWithScale, calculateMapOffsetForCentering } from "../utilities/utilities";
let playerRotations = [];
const calculatePlayerRotation = (playerData) => {
@@ -18,18 +17,28 @@ const Player = ({ playerData, mapData, radarImage, localTeam, averageLatency, se
const [lastKnownPosition, setLastKnownPosition] = useState(null);
const radarPosition = getRadarPosition(mapData, playerData.m_position) || { x: 0, y: 0 };
const invalidPosition = radarPosition.x <= 0 && radarPosition.y <= 0;
-
const playerRef = useRef();
const playerBounding = (playerRef.current &&
playerRef.current.getBoundingClientRect()) || { width: 0, height: 0 };
const playerRotation = calculatePlayerRotation(playerData);
+ const [scaledSize, setScaledSize] = useState(0.7 * settings.dotSize);
- const radarImageBounding = (radarImage !== undefined &&
- radarImage.getBoundingClientRect()) || { width: 0, height: 0 };
-
- const scaledSize = 0.7 * settings.dotSize;
+ useEffect(() => {
+ if (window.innerHeight<=500) setScaledSize(0.7 * settings.dotSize+1.5); else setScaledSize(0.7 * settings.dotSize);
+ }, [window.innerHeight])
- // Store the last known position when the player dies
+ useEffect(() => {
+ if (settings.showOnlyEnemies && playerData.m_team === localTeam) {
+ if (!settings.followYourself) {
+ setScaledSize(0.0);
+ } else if (settings.followYourself && playerData.m_steam_id!=settings.whichPlayerAreYou) {
+ setScaledSize(0.0);
+ } else {
+ setScaledSize(0.7 * settings.dotSize);
+ }
+ if (settings.showAllNames) {settings.showAllNames = false;} } else { setScaledSize(0.7 * settings.dotSize) }
+ }, [settings.showOnlyEnemies, settings.followYourself])
+
useEffect(() => {
if (playerData.m_is_dead) {
if (!lastKnownPosition) {
@@ -38,15 +47,29 @@ const Player = ({ playerData, mapData, radarImage, localTeam, averageLatency, se
} else {
setLastKnownPosition(null);
}
- }, [playerData.m_is_dead, radarPosition, lastKnownPosition]);
+ }, [playerData.m_is_dead, radarPosition]);
const effectivePosition = playerData.m_is_dead ? lastKnownPosition || { x: 0, y: 0 } : radarPosition;
+ const scaledPos = calculatePositionWithScale(radarImage, effectivePosition);
const radarImageTranslation = {
- x: radarImageBounding.width * effectivePosition.x - playerBounding.width * 0.5,
- y: radarImageBounding.height * effectivePosition.y - playerBounding.height * 0.5,
+ x: (scaledPos[0] - playerBounding.width * 0.5),
+ y: (scaledPos[1] - playerBounding.height * 0.5),
};
+ if (playerData.m_steam_id==settings.whichPlayerAreYou) {
+ if (radarImage && mapData && playerData.m_position && settings.followYourself) {
+ const radarOffset = calculateMapOffsetForCentering(playerData.m_position, radarImage, mapData);
+ if (radarImage.getAttribute("isbeingdragged")=="false") {
+ radarImage.setAttribute("moveoverride", "true")
+ radarImage.setAttribute("newtransx", `${Math.floor(radarOffset.x)}`)
+ radarImage.setAttribute("newtransy", `${Math.floor(radarOffset.y)}`)
+ }
+ } else if (radarImage) {
+ radarImage.setAttribute("moveoverride", "false")
+ }
+ }
+
return (
) : null}
+
+
{/* Rotating container for player elements */}
{/* View cone (kept exactly as it was) */}
- {settings.showViewCones && !playerData.m_is_dead && (
+ {(settings.showOnlyEnemies && playerData.m_team === localTeam && settings.showViewCones && !playerData.m_is_dead) || (settings.showViewCones && !playerData.m_is_dead) && (
)}
+ {(mapData.leveling && !playerData.m_is_dead) && (
+
+ )}
);
};
diff --git a/webapp/src/components/playercard.jsx b/webapp/src/components/playercard.jsx
index 31abd50..22a20fb 100644
--- a/webapp/src/components/playercard.jsx
+++ b/webapp/src/components/playercard.jsx
@@ -1,47 +1,74 @@
import { useState, useEffect } from "react";
import MaskedIcon from "./maskedicon";
-import { playerColors, teamEnum } from "../utilities/utilities";
+import { playerColors, teamEnum, colorSchemePallette } from "../utilities/utilities";
-const PlayerCard = ({ playerData, isOnRightSide }) => {
+const PlayerCard = ({ playerData, isOnRightSide, settings }) => {
const [modelName, setModelName] = useState(playerData.m_model_name);
+ function getArmor(armor) {
+ if (armor<=100 && armor>0) {
+ return armor;
+ } else {
+ return 0;
+ }
+ }
+
useEffect(() => {
- if (playerData.m_model_name)
+ if (playerData.m_model_name&&!playerData.m_is_dead)
setModelName(playerData.m_model_name);
- }, [playerData.m_model_name]);
+ else
+ setModelName("cs_observer");
+ }, [playerData.m_model_name, playerData.m_is_dead]);
return (
-
+
+
- window.open(
- `https://steamcommunity.com/profiles/${playerData.m_steam_id}`,
- "_blank",
- "noopener,noreferrer"
- )
- }
+ className={`flex flex-col gap-[0.375rem] justify-center items-center`}
>
- {playerData.m_name}
+
+ window.open(
+ `https://steamcommunity.com/profiles/${playerData.m_steam_id}`,
+ "_blank",
+ "noopener,noreferrer"
+ )
+ }
+ >
+ {playerData.m_name}
+
+ {/*
*/}
+
+
+
+
+
-
-
+
{
+
{playerData.m_health}
@@ -71,9 +104,9 @@ const PlayerCard = ({ playerData, isOnRightSide }) => {
(playerData.m_has_helmet && `kevlar_helmet`) || `kevlar`
}.svg`}
height={16}
- color={`bg-radar-secondary`}
+ color={`${colorSchemePallette[settings.colorScheme][1]}`}
/>
-
{playerData.m_armor}
+
{getArmor(playerData.m_armor)}
@@ -85,8 +118,8 @@ const PlayerCard = ({ playerData, isOnRightSide }) => {
color={`${
(playerData.m_weapons.m_active ==
playerData.m_weapons.m_primary &&
- `bg-radar-primary`) ||
- `bg-radar-secondary`
+ `${colorSchemePallette[settings.colorScheme][0]}`) ||
+ `${colorSchemePallette[settings.colorScheme][1]}`
}`}
/>
)}
@@ -98,8 +131,8 @@ const PlayerCard = ({ playerData, isOnRightSide }) => {
color={`${
(playerData.m_weapons.m_active ==
playerData.m_weapons.m_secondary &&
- `bg-radar-primary`) ||
- `bg-radar-secondary`
+ `${colorSchemePallette[settings.colorScheme][0]}`) ||
+ `${colorSchemePallette[settings.colorScheme][1]}`
}`}
/>
)}
@@ -113,8 +146,8 @@ const PlayerCard = ({ playerData, isOnRightSide }) => {
height={28}
color={`${
(playerData.m_weapons.m_active == melee &&
- `bg-radar-primary`) ||
- `bg-radar-secondary`
+ `${colorSchemePallette[settings.colorScheme][0]}`) ||
+ `${colorSchemePallette[settings.colorScheme][1]}`
}`}
/>
))}
@@ -135,8 +168,8 @@ const PlayerCard = ({ playerData, isOnRightSide }) => {
height={28}
color={`${
(playerData.m_weapons.m_active == utility &&
- `bg-radar-primary`) ||
- `bg-radar-secondary`
+ `${colorSchemePallette[settings.colorScheme][0]}`) ||
+ `${colorSchemePallette[settings.colorScheme][1]}`
}`}
/>
))}
@@ -155,7 +188,8 @@ const PlayerCard = ({ playerData, isOnRightSide }) => {
].map((_, i) => (
))}
@@ -164,7 +198,7 @@ const PlayerCard = ({ playerData, isOnRightSide }) => {
)) ||
(playerData.m_team == teamEnum.terrorist &&
@@ -175,8 +209,8 @@ const PlayerCard = ({ playerData, isOnRightSide }) => {
color={
((playerData.m_weapons &&
playerData.m_weapons.m_active) == `c4` &&
- `bg-radar-primary`) ||
- `bg-radar-secondary`
+ `${colorSchemePallette[settings.colorScheme][0]}`) ||
+ `${colorSchemePallette[settings.colorScheme][1]}`
}
/>
))}
diff --git a/webapp/src/components/radar.jsx b/webapp/src/components/radar.jsx
index 6a361ed..134b497 100644
--- a/webapp/src/components/radar.jsx
+++ b/webapp/src/components/radar.jsx
@@ -1,6 +1,9 @@
-import { useRef } from "react";
+import { useRef, useState } from "react";
+import Draggable from "./Draggable"
import Player from "./player";
import Bomb from "./bomb";
+import Grenade from "./grenade";
+import DroppedWeapon from "./droppedweapons";
const Radar = ({
playerArray,
@@ -9,13 +12,30 @@ const Radar = ({
localTeam,
averageLatency,
bombData,
- settings
+ settings,
+ grenadeData,
+ droppedWeaponsData,
}) => {
const radarImageRef = useRef();
+ const [radarScale, setRadarScale] = useState(1);
+
+ const onScroll = (e) => {
+ const delta = e.deltaY * -0.001;
+ const newScale = radarScale + delta;
+ if (newScale>0.3&&newScale<4) setRadarScale(newScale)
+ };
+
+
return (
-
+
+
+
+
{playerArray.map((player) => (
)}
+
+ {grenadeData && grenadeData["landed"]!={} && settings.showGrenades && grenadeData["landed"].map((grenade) => (
+
+ ))}
+
+ {grenadeData && grenadeData["thrown"]!={} && settings.showGrenades && grenadeData["thrown"].map((grenade) => (
+
+ ))}
+
+ {settings.showDroppedWeapons && droppedWeaponsData && droppedWeaponsData!={} && droppedWeaponsData.map((droppedWeapon) => (
+
+ ))}
+
);
};
diff --git a/webapp/src/main.jsx b/webapp/src/main.jsx
index 9981940..31d28fb 100644
--- a/webapp/src/main.jsx
+++ b/webapp/src/main.jsx
@@ -1,6 +1,6 @@
import React from 'react'
import ReactDOM from 'react-dom/client'
-import App from './App.jsx'
+import App from './app.jsx'
ReactDOM.createRoot(document.getElementById('root')).render(
diff --git a/webapp/src/utilities/utilities.jsx b/webapp/src/utilities/utilities.jsx
index ceb13b8..2a1d834 100644
--- a/webapp/src/utilities/utilities.jsx
+++ b/webapp/src/utilities/utilities.jsx
@@ -1,4 +1,6 @@
export const getRadarPosition = (mapData, entityCoords) => {
+ const divide = 1024;
+
if (!entityCoords.x || !entityCoords.y) {
return { x: 0, y: 0 };
}
@@ -8,13 +10,71 @@ export const getRadarPosition = (mapData, entityCoords) => {
}
const position = {
- x: (entityCoords.x - mapData.x) / mapData.scale / 1024,
- y: (((entityCoords.y - mapData.y) / mapData.scale) * -1.0) / 1024,
+ x: (entityCoords.x - mapData.x) / mapData.scale / divide,
+ y: (((entityCoords.y - mapData.y) / mapData.scale) * -1.0) / divide,
};
return position;
};
+export const calculatePositionWithScale = (radarImage, radarPosition) => {
+ const radarImageBounding = (radarImage !== undefined &&
+ radarImage.getBoundingClientRect()) || { width: 0, height: 0 };
+ let transformRadar = [0,0,0]
+ try {
+ let match = radarImage.style.transform.match(/translate\(([^,]+)px,\s*([^)]+)px\)/)
+ if (match) transformRadar = match;
+ } catch {}
+ let radarScale = 1;
+ try {
+ let scale = radarImage.style.scale;
+ if (scale) radarScale = scale;
+ } catch {}
+
+ const unscaledWidth = radarImageBounding.width / radarScale;
+ const unscaledHeight = radarImageBounding.height / radarScale;
+ const centerX = unscaledWidth / 2;
+ const centerY = unscaledHeight / 2;
+
+ const posX = unscaledWidth * radarPosition.x + Number(transformRadar[1]);
+ const posY = unscaledHeight * radarPosition.y + Number(transformRadar[2]);
+
+ const scaledPosX = centerX + (posX - centerX) * radarScale;
+ const scaledPosY = centerY + (posY - centerY) * radarScale;
+ return [scaledPosX, scaledPosY]
+}
+
+export const calculateMapOffsetForCentering = (playerPosition, radarImage, mapData) => {
+ if (!playerPosition || !radarImage) {
+ return { x: 0, y: 0 };
+ }
+
+ const radarPosition = getRadarPosition(mapData, playerPosition) || { x: 0, y: 0 };
+ let radarScale = 1;
+ if (radarImage) radarScale = radarImage.style.scale;
+
+ if (!radarPosition) {
+ return { x: 0, y: 0 };
+ }
+
+ const radarImageBounding = (radarImage !== undefined &&
+ radarImage.getBoundingClientRect()) || { width: 0, height: 0 };
+
+ const unscaledWidth = radarImageBounding.width / radarScale;
+ const unscaledHeight = radarImageBounding.height / radarScale;
+
+ const playerXOnMap = unscaledWidth * radarPosition.x
+ const playerYOnMap = unscaledHeight * radarPosition.y
+
+ const centerX = radarImage.width/2;
+ const centerY = radarImage.height/2;
+
+ const offsetX = centerX - playerXOnMap;
+ const offsetY = centerY - playerYOnMap;
+
+ return { x: offsetX, y: offsetY };
+};
+
export const playerColors = [
// blue
"#84c8ed",
@@ -35,9 +95,117 @@ export const playerColors = [
"#ffffff",
];
+export const weaponList = {
+ "pistols": [
+ "cs75a",
+ "deagle",
+ "elite", //dual berettas
+ "fiveseven",
+ "glock",
+ "hkp2000", //p2000
+ "p250",
+ "revolver",
+ "tec9",
+ "usp-silencer",
+ "usp-silencer-off"
+ ],
+ "rifles": [
+ "ak47",
+ "aug",
+ "awp",
+ "famas",
+ "g3sg1",
+ "galilar",
+ "m4a1",
+ "m4a1-silencer",
+ "m4a1-silencer-off",
+ "scar20",
+ "sg556",
+ "ssg08"
+ ],
+ "smgs": [
+ "mac10",
+ "mp5sd",
+ "mp7",
+ "mp9",
+ "bizon",
+ "p90",
+ "ump45"
+ ],
+ "heavys": [
+ "mag7",
+ "nova",
+ "sawedoff",
+ "xm1014",
+ "m249",
+ "negev"
+ ],
+ "grenades": [
+ "smokegrenade",
+ "molotov",
+ "incgrenade",
+ "hegrenade",
+ "flashbang",
+ "decoy",
+ ]
+}
+
export const teamEnum = {
none: 0,
spectator: 1,
terrorist: 2,
counterTerrorist: 3,
};
+
+export const colorSchemePallette = {
+ undefined: [
+ "#b1d0e7",
+ "#6492b4"
+ ],
+ "default": [
+ "#b1d0e7",
+ "#6492b4"
+ ],
+ "white": [
+ "#FFFFFF",
+ "#a1a1a1ff"
+ ],
+ "light_blue": [
+ "#32c8ffff",
+ "#0183aaff"
+ ],
+ "dark_blue": [
+ "#1685c0ff",
+ "#005383ff"
+ ],
+ "purple": [
+ "#cca0ffff",
+ "#9933FF"
+ ],
+ "red": [
+ "#ff6f6fff",
+ "#CC3333"
+ ],
+ "orange": [
+ "#ffbd60ff",
+ "#FF8C00"
+ ],
+
+ "yellow": [
+ "#ffe47aff",
+ "#ffe600ff"
+ ],
+
+ "green": [
+ "#71d492ff",
+ "#00B050"
+ ],
+ "light_green": [
+ "#a9ffa9ff",
+ "#41ff41ff"
+ ],
+ "pink": [
+ "#ff8fa0ff",
+ "#ff3d9eff"
+ ]
+}
\ No newline at end of file
diff --git a/webapp/tailwind.config.js b/webapp/tailwind.config.js
index 2a06269..a84f15e 100644
--- a/webapp/tailwind.config.js
+++ b/webapp/tailwind.config.js
@@ -10,9 +10,13 @@ export default {
radar: {
"primary": "#b1d0e7",
"secondary": "#6492b4",
+
"green": "#50904c",
- "red": "#c90b0be6"
- }
+ "red": "#c90b0be6",
+
+ "redbutton": "rgb(70, 0, 0)",
+ "redbutton_hover": "rgb(150, 0, 0)"
+ },
},
},
},