This commit is contained in:
ShuriZma 2024-01-16 08:46:51 +01:00
commit 4f733c8690
Signed by: ShuriZma
GPG Key ID: 8D289758EE9B8074
10 changed files with 431 additions and 0 deletions

88
client/SeatSelector.ts Normal file
View File

@ -0,0 +1,88 @@
import * as alt from 'alt-client';
import * as native from 'natives';
import * as AthenaClient from '@AthenaClient/api/index.js';
import { SEAT_SELECTOR_EVENTS } from '@AthenaPlugins/odyssey-seat-selector/shared/events.js';
import { IPage } from '@AthenaClient/webview/page.js';
import { WebViewEventNames } from '@AthenaShared/enums/webViewEvents.js';
const PAGE_NAME = 'SeatSelectorMenu';
export function handleOpen() {
let tick;
if (alt.LocalPlayer.local.vehicle !== null) {
return;
}
const vehicle = alt.Utils.getClosestVehicle({ pos: alt.LocalPlayer.local.pos, range: 5 });
if (vehicle === null || vehicle.seatCount < 2) {
return;
}
if (vehicle.seatCount === 2) {
if (!native.isVehicleSeatFree(vehicle, 0, true)) {
return;
}
native.setPedConfigFlag(alt.Player.local.scriptID, 184, true);
native.taskEnterVehicle(alt.Player.local.scriptID, vehicle, 5000, 0, 2.0, 1, null, 0);
return;
}
new AthenaClient.webview.Page({
name: PAGE_NAME,
callbacks: {
onReady: () => {
AthenaClient.webview.emit(SEAT_SELECTOR_EVENTS.SET_VEHICLE, vehicle.scriptID);
updateData(vehicle.scriptID);
tick = alt.everyTick(() => {
if (!AthenaClient.webview.isPageOpen(PAGE_NAME)) {
return;
}
updateData(vehicle.scriptID);
});
},
onClose: () => {
alt.clearEveryTick(tick);
},
},
options: {
onOpen: {
focus: true,
showCursor: true,
setIsMenuOpenToTrue: true,
disablePauseMenu: true,
disableControls: 'all',
},
onClose: {
hideCursor: true,
unfocus: true,
setIsMenuOpenToFalse: true,
enablePauseMenu: true,
enableControls: true,
},
},
} as IPage).open();
}
function updateData(vehicleScriptId: number) {
const vehicle = alt.Vehicle.getByScriptID(vehicleScriptId);
if (vehicle === null || AthenaClient.utility.vector.distance(vehicle.pos, alt.LocalPlayer.local.pos) > 5) {
AthenaClient.webview.emit(WebViewEventNames.CLOSE_PAGE);
}
try {
let data: object[] = [];
for (let seat = 0; seat < vehicle.seatCount; seat++) {
data.push({
isFree: native.isVehicleSeatFree(vehicle, seat - 1, true),
index: seat - 1,
});
}
AthenaClient.webview.emit(SEAT_SELECTOR_EVENTS.UPDATE_DATA, data);
} catch (error) {
alt.logWarning(`Error while updating SeatSelectorMenu: ${error}!`);
}
}

55
client/index.ts Normal file
View File

@ -0,0 +1,55 @@
import { handleOpen } from './SeatSelector.js';
import { SEAT_SELECTOR_EVENTS } from '@AthenaPlugins/odyssey-seat-selector/shared/events.js';
import { KEY_BINDS } from '@AthenaShared/enums/keyBinds.js';
import * as KEYBOARD_MAP from '@AthenaShared/information/keyboardMap.js';
import * as AthenaClient from '@AthenaClient/api/index.js';
import * as alt from 'alt-client';
import * as native from 'natives';
AthenaClient.systems.hotkeys.add({
key: KEY_BINDS.SELECT_SEAT ?? KEYBOARD_MAP.default.indexOf('G'),
description: 'Select a seat',
identifier: 'seat-selector',
keyDown: () => {
handleOpen();
},
restrictions: {
isOnFoot: true,
},
});
AthenaClient.webview.on(SEAT_SELECTOR_EVENTS.ENTER_VEHICLE, (vehicle: number, index: number) => {
native.setPedConfigFlag(alt.Player.local.scriptID, 184, true);
native.taskEnterVehicle(alt.Player.local.scriptID, vehicle, 5000, index, 2.0, 1, null, 0);
});
AthenaClient.systems.hotkeys.add({
key: KEY_BINDS.VEHICLE_FUNCS ?? KEYBOARD_MAP.default.indexOf('F'),
description: 'Enter vehicle as driver',
identifier: 'enter-vehicle-as-driver',
keyDown: () => {
if (alt.Player.local.vehicle !== null) {
if (native.getEntitySpeed(alt.Player.local.vehicle) > 0.0) {
native.taskLeaveVehicle(alt.Player.local.scriptID, alt.Player.local.vehicle.scriptID, 4160);
return;
}
native.taskLeaveVehicle(alt.Player.local.scriptID, alt.Player.local.vehicle.scriptID, 0);
return;
}
let vehicle = alt.Utils.getClosestVehicle({ pos: alt.LocalPlayer.local.pos, range: 5 });
if (vehicle === null) {
return;
}
if (!native.isVehicleSeatFree(vehicle, -1, true)) {
return;
}
native.taskEnterVehicle(alt.Player.local.scriptID, vehicle, 5000, -1, 2.0, 1, null, 0);
},
});
alt.on('leftVehicle', () => {
native.setPedConfigFlag(alt.Player.local.scriptID, 184, false);
});

6
server/index.ts Normal file
View File

@ -0,0 +1,6 @@
import * as Athena from '@AthenaServer/api/index.js';
const PLUGIN_NAME = 'seat-selector';
Athena.systems.plugins.registerPlugin(PLUGIN_NAME, () => {
});

5
shared/events.ts Normal file
View File

@ -0,0 +1,5 @@
export const enum SEAT_SELECTOR_EVENTS {
SET_VEHICLE = 'SEAT-SELECTOR:set-vehicle',
UPDATE_DATA = 'SEAT-SELECTOR:update-data',
ENTER_VEHICLE = 'SEAT-SELECTOR:enter-vehicle',
}

View File

@ -0,0 +1,178 @@
<template>
<div class="carWrapper" v-bind:style="{ backgroundImage: 'url(' + determineImage() + ')' }">
<div class="cancel" v-bind:class="vehicleClass" @click="WebViewEvents.emitClose()">Nicht einsteigen</div>
<div class="seatContainer" v-bind:class="vehicleClass">
<div class="seatWrapper" v-for="seat in seats">
<div class="seat" v-bind:class="seat.isFree ? '' : 'notFree'" v-if="seat.index !== -1" @click="seat.isFree ? enterSeat(seat.index) : console.log('Seat is not free')">
<svg xmlns="http://www.w3.org/2000/svg" width="307.000000pt" height="371.000000pt" viewBox="0 0 307.000000 371.000000" preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,371.000000) scale(0.100000,-0.100000)" fill="#000000" stroke="none">
<path d="M1179 3650 c-115 -8 -183 -31 -248 -85 -51 -44 -101 -174 -126 -330 -24 -149 -17 -223 24 -241 9 -4 329 -8 711 -8 l695 -1 29 28 c29 28 29 29 23 116 -8 113 -21 174 -60 291 -55 166 -131 215 -352 230 -139 10 -542 9 -696 0z"/>
<path d="M800 3533 c-62 -7 -160 -32 -212 -55 -42 -18 -53 -29 -70 -67 -41 -93 -98 -254 -98 -276 0 -43 69 -160 142 -240 166 -182 197 -298 205 -777 l5 -288 769 0 769 0 0 229 c0 484 41 651 204 831 74 81 146 200 146 241 0 23 -51 160 -93 253 -32 69 -37 74 -88 94 -56 23 -176 52 -217 52 -21 0 -22 -1 -9 -27 45 -89 87 -285 87 -405 0 -119 -41 -170 -138 -169 -1250 4 -1378 6 -1406 24 -15 10 -35 35 -43 55 -30 71 3 330 60 470 14 34 25 61 24 60 -1 0 -18 -3 -37 -5z"/>
<path d="M2667 3293 c171 -451 300 -1078 330 -1603 5 -105 8 -119 16 -90 13 48 1 460 -18 638 -47 436 -146 780 -301 1045 -25 42 -48 77 -50 77 -1 0 8 -30 23 -67z"/>
<path d="M380 3280 c-146 -250 -246 -594 -295 -1015 -19 -166 -35 -565 -25 -630 4 -27 8 -45 9 -40 0 6 8 87 16 180 46 530 157 1059 304 1460 22 60 39 111 36 113 -2 2 -22 -29 -45 -68z"/>
<path d="M331 2893 c-97 -347 -160 -708 -196 -1118 -22 -247 -21 -273 10 -287 30 -13 99 0 186 36 128 52 351 230 369 294 13 48 13 429 0 563 -23 232 -64 337 -184 470 -42 46 -88 108 -103 136 -16 29 -31 53 -34 53 -4 0 -25 -66 -48 -147z"/>
<path d="M2663 2990 c-17 -30 -65 -93 -108 -139 -122 -132 -161 -235 -185 -486 -13 -141 -13 -489 0 -537 19 -66 213 -227 355 -293 83 -39 166 -60 200 -51 24 6 25 10 25 74 0 176 -53 622 -106 897 -28 142 -90 397 -127 515 l-23 74 -31 -54z"/>
<path d="M715 1538 c-101 -522 -107 -557 -108 -683 -1 -238 67 -458 208 -670 30 -44 67 -95 84 -113 l30 -32 623 2 622 3 58 75 c78 100 181 309 213 431 52 200 49 352 -15 684 -23 116 -55 285 -73 377 l-32 168 -781 0 -781 0 -48 -242z m1640 -553 c0 -20 -8 -20 -807 -23 -779 -2 -808 -1 -808 16 0 10 3 22 7 25 3 4 367 6 807 5 793 -3 801 -3 801 -23z"/>
<path d="M625 1648 c-125 -107 -298 -207 -358 -208 -18 0 -19 -17 -14 -407 5 -446 9 -488 66 -610 65 -139 244 -277 440 -342 36 -12 68 -21 72 -21 4 0 -18 37 -48 82 -94 141 -154 276 -194 438 -20 82 -23 119 -23 270 1 165 3 187 43 385 44 220 90 469 88 472 -1 1 -33 -26 -72 -59z"/>
<path d="M2400 1697 c0 -3 22 -124 49 -268 27 -145 57 -307 67 -359 23 -126 23 -345 -1 -455 -36 -170 -96 -313 -194 -463 l-60 -91 52 16 c181 54 389 214 451 347 56 121 59 148 63 599 4 342 2 417 -9 417 -26 0 -167 68 -234 113 -38 25 -95 69 -126 97 -32 28 -58 49 -58 47z"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="307.000000pt" height="371.000000pt" viewBox="0 0 307.000000 371.000000" preserveAspectRatio="xMidYMid meet">
<g style="fill: black" transform="translate(0.000000,371.000000) scale(0.100000,-0.100000)" fill="#000000" stroke="none">
<path d="M1230 3699 c-153 -6 -192 -14 -271 -54 -19 -10 -45 -27 -59 -40 -19 -17 -43 -24 -99 -30 -174 -16 -308 -71 -387 -158 -161 -177 -312 -613 -368 -1062 -39 -310 -50 -733 -21 -803 29 -69 86 -112 149 -112 l35 0 4 -432 c3 -378 6 -441 21 -493 30 -101 68 -165 141 -240 119 -122 266 -206 427 -245 79 -19 118 -20 744 -20 630 0 665 1 740 20 151 39 295 121 407 235 75 75 119 153 149 262 20 73 22 105 26 496 l4 417 37 0 c57 0 113 47 139 119 16 43 17 358 1 551 -37 473 -125 826 -282 1135 -51 100 -73 132 -133 191 -64 63 -80 73 -151 97 -83 27 -184 47 -244 47 -25 0 -42 7 -58 24 -29 31 -125 74 -193 86 -64 12 -543 17 -758 9z m800 -67 c92 -30 142 -70 175 -140 41 -87 75 -233 82 -354 6 -103 5 -107 -19 -130 l-24 -25 -706 1 c-691 1 -706 1 -728 21 -22 19 -22 25 -17 135 10 187 73 383 141 435 49 37 120 65 189 75 34 5 238 7 452 6 368 -2 394 -4 455 -24z m-1190 -95 c0 -2 -13 -39 -29 -83 -40 -110 -61 -227 -61 -344 0 -109 15 -141 74 -164 23 -9 214 -12 733 -11 693 1 703 1 730 21 42 32 54 75 48 179 -9 136 -36 253 -90 378 -6 14 -2 17 26 17 51 0 160 -26 217 -50 45 -20 52 -27 80 -88 57 -124 94 -227 93 -260 -1 -52 -64 -160 -146 -250 -161 -177 -199 -329 -200 -794 l0 -268 -775 0 -775 0 4 182 c3 199 -11 430 -35 547 -32 156 -75 238 -191 364 -61 67 -107 140 -124 200 -8 30 9 89 75 253 l37 92 58 26 c61 27 251 67 251 53z m-411 -209 c-42 -104 -129 -376 -168 -528 -89 -343 -157 -763 -177 -1085 -15 -247 -40 -116 -30 154 24 591 120 1036 293 1361 41 77 90 150 99 150 2 0 -6 -24 -17 -52z m2259 -25 c159 -270 257 -599 308 -1033 18 -157 30 -654 17 -689 -7 -17 -13 22 -22 145 -42 579 -178 1201 -357 1638 -16 40 14 5 54 -61z m-2278 -302 c18 -33 66 -97 107 -143 162 -179 198 -330 191 -812 l-3 -248 -82 -78 c-140 -133 -302 -225 -417 -237 -90 -9 -92 -6 -84 144 17 318 63 658 134 983 23 106 115 450 121 450 1 0 16 -27 33 -59z m2328 -87 c50 -174 104 -415 137 -606 50 -297 94 -805 71 -820 -42 -28 -181 12 -305 87 -109 66 -255 194 -270 236 -14 42 -15 449 0 594 22 222 64 324 187 459 44 48 93 111 108 141 16 30 29 53 30 52 1 -1 20 -65 42 -143z m-374 -1321 c84 -428 115 -603 122 -684 8 -106 -9 -262 -42 -378 -32 -115 -128 -307 -204 -408 l-61 -83 -629 0 -628 0 -37 41 c-75 84 -169 249 -218 384 -47 131 -62 227 -61 390 1 137 5 171 49 390 26 132 58 299 71 370 14 72 27 138 30 148 5 16 51 17 789 17 l783 0 36 -187z m-1683 -4 c-11 -63 -38 -208 -60 -323 -66 -341 -71 -408 -45 -585 29 -203 119 -420 237 -574 16 -21 27 -41 23 -44 -11 -11 -124 26 -204 66 -147 74 -258 174 -312 281 -58 116 -63 156 -67 611 l-5 416 76 27 c86 32 223 120 311 199 33 30 61 51 63 47 2 -4 -6 -59 -17 -121z m1854 7 c82 -63 179 -117 253 -141 l52 -17 0 -329 c0 -514 -23 -647 -137 -786 -77 -93 -235 -197 -372 -244 -82 -28 -86 -25 -43 34 94 126 164 276 209 446 37 141 43 352 14 516 -22 121 -108 585 -115 618 -3 13 4 10 32 -13 21 -17 69 -55 107 -84z"/>
<path d="M750 995 c-6 -8 -9 -19 -5 -25 4 -7 261 -10 805 -10 669 0 799 2 803 14 3 7 0 19 -6 25 -8 8 -230 11 -798 11 -676 0 -788 -2 -799 -15z"/>
</g>
</svg>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { onMounted, ref } from 'vue';
import WebViewEvents from '@utility/webViewEvents.js';
import { SEAT_SELECTOR_EVENTS } from '@AthenaPlugins/odyssey-seat-selector/shared/events.js';
import ResolvePath from '@utility/pathResolver.js';
import { WebViewEventNames } from '@AthenaShared/enums/webViewEvents.js';
let seats = ref([
{ isFree: true, index: -1 },
{ isFree: false, index: 0 },
{ isFree: true, index: 1 },
{ isFree: true, index: 2 },
{ isFree: false, index: 3 },
{ isFree: false, index: 4 },
{ isFree: false, index: 5 },
{ isFree: false, index: 6 },
{ isFree: false, index: 7 },
{ isFree: false, index: 8 },
{ isFree: false, index: 9 },
{ isFree: false, index: 10 },
{ isFree: false, index: 11 },
{ isFree: false, index: 12 },
{ isFree: false, index: 13 },
{ isFree: false, index: 14 },
]);
let vehicle = ref(0);
let vehicleClass = ref('service');
function enterSeat(index: number) {
console.log('enterSeat()', index);
WebViewEvents.emitClient(SEAT_SELECTOR_EVENTS.ENTER_VEHICLE, vehicle.value, index);
WebViewEvents.emitClose();
}
function determineImage() {
if (seats.value.length <= 4) {
vehicleClass.value = 'car';
return ResolvePath(`@plugins/images/odyssey-seat-selector/car.png`);
} else if (seats.value.length <= 8) {
vehicleClass.value = 'suv';
return ResolvePath(`@plugins/images/odyssey-seat-selector/ov.png`);
}
vehicleClass.value = 'service';
return ResolvePath(`@plugins/images/odyssey-seat-selector/bus.png`);
}
onMounted(() => {
WebViewEvents.on(WebViewEventNames.CLOSE_PAGE, () => {
WebViewEvents.emitClose();
});
WebViewEvents.on(SEAT_SELECTOR_EVENTS.UPDATE_DATA, (data) => {
seats.value = data;
});
WebViewEvents.on(SEAT_SELECTOR_EVENTS.SET_VEHICLE, (veh) => {
vehicle.value = veh;
});
WebViewEvents.emitReady('SeatSelectorMenu');
});
</script>
<style scoped>
.carWrapper {
min-height: 45vh;
width: 21vh;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
.carWrapper:has(.service) {
min-height: 55vh;
}
.seatContainer {
width: 12vh;
display: flex;
flex-wrap: wrap;
gap: 2vh;
margin: 12vh 4.5vh 0 4.5vh;
}
.seatContainer.suv {
gap: 0.1vh;
margin: 9.5vh 4.6vh 0 4.6vh;
}
.seatContainer.service {
gap: 1vh;
margin: 6vh 4.5vh 0 4.5vh;
}
.seatWrapper {
height: 5vh;
width: 5vh;
margin: auto;
}
.seat > svg {
position: absolute;
height: 5vh;
width: 5vh;
transform: rotate(180deg);
}
.seat > svg > g {
fill: white;
}
.notFree > svg > g {
fill: maroon;
}
.suv > .seatWrapper,
.suv > .seatWrapper > .seat > svg {
height: 4vh;
width: 4vh;
margin-bottom: 2.2vh;
}
.service > .seatWrapper,
.service > .seatWrapper > .seat > svg {
height: 4vh;
width: 4vh;
margin-bottom: 0.6vh;
}
.cancel {
background-color: #4c4c4c;
height: 1vh;
width: 8vh;
margin: 4vh 6.5vh 0 6.5vh;
text-align: center;
padding-top: 1vh;
padding-bottom: 1vh;
line-height: 1vh;
font-size: 1vh;
border-radius: 1vh;
}
.cancel.service {
margin: 0.5vh 6.5vh 0 6.5vh;
}
</style>

BIN
webview/images/bus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,51 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="307.000000pt" height="371.000000pt" viewBox="0 0 307.000000 371.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,371.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1230 3699 c-153 -6 -192 -14 -271 -54 -19 -10 -45 -27 -59 -40 -19
-17 -43 -24 -99 -30 -174 -16 -308 -71 -387 -158 -161 -177 -312 -613 -368
-1062 -39 -310 -50 -733 -21 -803 29 -69 86 -112 149 -112 l35 0 4 -432 c3
-378 6 -441 21 -493 30 -101 68 -165 141 -240 119 -122 266 -206 427 -245 79
-19 118 -20 744 -20 630 0 665 1 740 20 151 39 295 121 407 235 75 75 119 153
149 262 20 73 22 105 26 496 l4 417 37 0 c57 0 113 47 139 119 16 43 17 358 1
551 -37 473 -125 826 -282 1135 -51 100 -73 132 -133 191 -64 63 -80 73 -151
97 -83 27 -184 47 -244 47 -25 0 -42 7 -58 24 -29 31 -125 74 -193 86 -64 12
-543 17 -758 9z m800 -67 c92 -30 142 -70 175 -140 41 -87 75 -233 82 -354 6
-103 5 -107 -19 -130 l-24 -25 -706 1 c-691 1 -706 1 -728 21 -22 19 -22 25
-17 135 10 187 73 383 141 435 49 37 120 65 189 75 34 5 238 7 452 6 368 -2
394 -4 455 -24z m-1190 -95 c0 -2 -13 -39 -29 -83 -40 -110 -61 -227 -61 -344
0 -109 15 -141 74 -164 23 -9 214 -12 733 -11 693 1 703 1 730 21 42 32 54 75
48 179 -9 136 -36 253 -90 378 -6 14 -2 17 26 17 51 0 160 -26 217 -50 45 -20
52 -27 80 -88 57 -124 94 -227 93 -260 -1 -52 -64 -160 -146 -250 -161 -177
-199 -329 -200 -794 l0 -268 -775 0 -775 0 4 182 c3 199 -11 430 -35 547 -32
156 -75 238 -191 364 -61 67 -107 140 -124 200 -8 30 9 89 75 253 l37 92 58
26 c61 27 251 67 251 53z m-411 -209 c-42 -104 -129 -376 -168 -528 -89 -343
-157 -763 -177 -1085 -15 -247 -40 -116 -30 154 24 591 120 1036 293 1361 41
77 90 150 99 150 2 0 -6 -24 -17 -52z m2259 -25 c159 -270 257 -599 308 -1033
18 -157 30 -654 17 -689 -7 -17 -13 22 -22 145 -42 579 -178 1201 -357 1638
-16 40 14 5 54 -61z m-2278 -302 c18 -33 66 -97 107 -143 162 -179 198 -330
191 -812 l-3 -248 -82 -78 c-140 -133 -302 -225 -417 -237 -90 -9 -92 -6 -84
144 17 318 63 658 134 983 23 106 115 450 121 450 1 0 16 -27 33 -59z m2328
-87 c50 -174 104 -415 137 -606 50 -297 94 -805 71 -820 -42 -28 -181 12 -305
87 -109 66 -255 194 -270 236 -14 42 -15 449 0 594 22 222 64 324 187 459 44
48 93 111 108 141 16 30 29 53 30 52 1 -1 20 -65 42 -143z m-374 -1321 c84
-428 115 -603 122 -684 8 -106 -9 -262 -42 -378 -32 -115 -128 -307 -204 -408
l-61 -83 -629 0 -628 0 -37 41 c-75 84 -169 249 -218 384 -47 131 -62 227 -61
390 1 137 5 171 49 390 26 132 58 299 71 370 14 72 27 138 30 148 5 16 51 17
789 17 l783 0 36 -187z m-1683 -4 c-11 -63 -38 -208 -60 -323 -66 -341 -71
-408 -45 -585 29 -203 119 -420 237 -574 16 -21 27 -41 23 -44 -11 -11 -124
26 -204 66 -147 74 -258 174 -312 281 -58 116 -63 156 -67 611 l-5 416 76 27
c86 32 223 120 311 199 33 30 61 51 63 47 2 -4 -6 -59 -17 -121z m1854 7 c82
-63 179 -117 253 -141 l52 -17 0 -329 c0 -514 -23 -647 -137 -786 -77 -93
-235 -197 -372 -244 -82 -28 -86 -25 -43 34 94 126 164 276 209 446 37 141 43
352 14 516 -22 121 -108 585 -115 618 -3 13 4 10 32 -13 21 -17 69 -55 107
-84z"/>
<path d="M750 995 c-6 -8 -9 -19 -5 -25 4 -7 261 -10 805 -10 669 0 799 2 803
14 3 7 0 19 -6 25 -8 8 -230 11 -798 11 -676 0 -788 -2 -799 -15z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,48 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="307.000000pt" height="371.000000pt" viewBox="0 0 307.000000 371.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,371.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1179 3650 c-115 -8 -183 -31 -248 -85 -51 -44 -101 -174 -126 -330
-24 -149 -17 -223 24 -241 9 -4 329 -8 711 -8 l695 -1 29 28 c29 28 29 29 23
116 -8 113 -21 174 -60 291 -55 166 -131 215 -352 230 -139 10 -542 9 -696 0z"/>
<path d="M800 3533 c-62 -7 -160 -32 -212 -55 -42 -18 -53 -29 -70 -67 -41
-93 -98 -254 -98 -276 0 -43 69 -160 142 -240 166 -182 197 -298 205 -777 l5
-288 769 0 769 0 0 229 c0 484 41 651 204 831 74 81 146 200 146 241 0 23 -51
160 -93 253 -32 69 -37 74 -88 94 -56 23 -176 52 -217 52 -21 0 -22 -1 -9 -27
45 -89 87 -285 87 -405 0 -119 -41 -170 -138 -169 -1250 4 -1378 6 -1406 24
-15 10 -35 35 -43 55 -30 71 3 330 60 470 14 34 25 61 24 60 -1 0 -18 -3 -37
-5z"/>
<path d="M2667 3293 c171 -451 300 -1078 330 -1603 5 -105 8 -119 16 -90 13
48 1 460 -18 638 -47 436 -146 780 -301 1045 -25 42 -48 77 -50 77 -1 0 8 -30
23 -67z"/>
<path d="M380 3280 c-146 -250 -246 -594 -295 -1015 -19 -166 -35 -565 -25
-630 4 -27 8 -45 9 -40 0 6 8 87 16 180 46 530 157 1059 304 1460 22 60 39
111 36 113 -2 2 -22 -29 -45 -68z"/>
<path d="M331 2893 c-97 -347 -160 -708 -196 -1118 -22 -247 -21 -273 10 -287
30 -13 99 0 186 36 128 52 351 230 369 294 13 48 13 429 0 563 -23 232 -64
337 -184 470 -42 46 -88 108 -103 136 -16 29 -31 53 -34 53 -4 0 -25 -66 -48
-147z"/>
<path d="M2663 2990 c-17 -30 -65 -93 -108 -139 -122 -132 -161 -235 -185
-486 -13 -141 -13 -489 0 -537 19 -66 213 -227 355 -293 83 -39 166 -60 200
-51 24 6 25 10 25 74 0 176 -53 622 -106 897 -28 142 -90 397 -127 515 l-23
74 -31 -54z"/>
<path d="M715 1538 c-101 -522 -107 -557 -108 -683 -1 -238 67 -458 208 -670
30 -44 67 -95 84 -113 l30 -32 623 2 622 3 58 75 c78 100 181 309 213 431 52
200 49 352 -15 684 -23 116 -55 285 -73 377 l-32 168 -781 0 -781 0 -48 -242z
m1640 -553 c0 -20 -8 -20 -807 -23 -779 -2 -808 -1 -808 16 0 10 3 22 7 25 3
4 367 6 807 5 793 -3 801 -3 801 -23z"/>
<path d="M625 1648 c-125 -107 -298 -207 -358 -208 -18 0 -19 -17 -14 -407 5
-446 9 -488 66 -610 65 -139 244 -277 440 -342 36 -12 68 -21 72 -21 4 0 -18
37 -48 82 -94 141 -154 276 -194 438 -20 82 -23 119 -23 270 1 165 3 187 43
385 44 220 90 469 88 472 -1 1 -33 -26 -72 -59z"/>
<path d="M2400 1697 c0 -3 22 -124 49 -268 27 -145 57 -307 67 -359 23 -126
23 -345 -1 -455 -36 -170 -96 -313 -194 -463 l-60 -91 52 16 c181 54 389 214
451 347 56 121 59 148 63 599 4 342 2 417 -9 417 -26 0 -167 68 -234 113 -38
25 -95 69 -126 97 -32 28 -58 49 -58 47z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
webview/images/car.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
webview/images/ov.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB