mirror of
https://github.com/muerwre/orchidmap-front.git
synced 2025-04-25 11:06:40 +07:00
stickers: implemented click-adding
This commit is contained in:
parent
93e05b7efe
commit
4ea56aa43c
4 changed files with 60 additions and 43 deletions
|
@ -2,7 +2,6 @@
|
|||
import React from 'react';
|
||||
|
||||
import { STICKERS } from '$constants/stickers';
|
||||
import sprite from '$sprites/stickers.svg';
|
||||
|
||||
type Props = {
|
||||
setActiveSticker: Function
|
||||
|
@ -12,14 +11,15 @@ export const StickersDialog = ({ setActiveSticker }: Props) => (
|
|||
<div className="helper stickers-helper">
|
||||
{
|
||||
Object.keys(STICKERS).map(set => (
|
||||
STICKERS[set].layers.map((sticker, i) => (
|
||||
Object.keys(STICKERS[set].layers).map(sticker => (
|
||||
<div
|
||||
style={{
|
||||
backgroundImage: `url(${STICKERS[set].url})`,
|
||||
backgroundPosition: `${-sticker.off * 48}px 50%`,
|
||||
backgroundPosition: `${-STICKERS[set].layers[sticker].off * 48}px 50%`,
|
||||
}}
|
||||
className="sticker-preview"
|
||||
key={`${set}-${i}`}
|
||||
key={`${set}-${sticker}`}
|
||||
onClick={() => setActiveSticker({ set, sticker })}
|
||||
/>
|
||||
))
|
||||
))
|
||||
|
|
|
@ -3,43 +3,43 @@
|
|||
|
||||
// export const stickers = ['green', 'basic', 'green-small'];
|
||||
export const STICKERS = {
|
||||
BASE: {
|
||||
base: {
|
||||
title: 'Простые',
|
||||
url: require('$sprites/stickers/stickers-base.svg'),
|
||||
size: 72,
|
||||
layers: [
|
||||
{ off: 5, title: 'Александр 3', title_long: 'Парк Городское Начало' },
|
||||
{ off: 9, title: 'пл.Калинина', title_long: 'пл.Калинина' },
|
||||
{ off: 4, title: 'Мост', title_long: 'Мост' },
|
||||
{ off: 7, title: 'Икея', title_long: 'Парковка ТЦ Мега' },
|
||||
{ off: 8, title: 'Бугринка', title_long: 'Та самая коса\n(культовое место Усталых Педалек)' },
|
||||
{ off: 10, title: 'ГПНТБ', title_long: 'ГПНТБ' },
|
||||
{ off: 18, title: 'Оперный', title_long: 'Оперный театр' },
|
||||
{ off: 1, title: 'Лес', title_long: 'Берёзовая роща' },
|
||||
{ off: 2, title: 'Трасса', title_long: 'Дорога' },
|
||||
{ off: 19, title: 'Пусто', title_long: 'Пока что пусто 1' },
|
||||
{ off: 19, title: 'Пусто', title_long: 'Пока что пусто 2' },
|
||||
{ off: 3, title: 'Курочка', title_long: 'Курочка' },
|
||||
{ off: 6, title: 'Палатка', title_long: 'Палаточный лагерь' },
|
||||
{ off: 11, title: 'Фастфуд', title_long: 'Двухколёсное ожирение' },
|
||||
{ off: 12, title: 'Пивко', title_long: 'В Питере - пить!' },
|
||||
{ off: 13, title: 'Шаварма', title_long: 'Вкусная шаурма' },
|
||||
{ off: 14, title: 'Камни', title_long: 'Кааааммммуушшшки' },
|
||||
{ off: 15, title: 'Болото', title_long: 'Пошла ты,\nтрясина грёбаная!' },
|
||||
{ off: 16, title: 'Роджер', title_long: 'Может не надо?' },
|
||||
{ off: 17, title: 'Какашка', title_long: 'Нехорошее место' },
|
||||
{ off: 19, title: 'Пусто', title_long: 'Пока что пусто 1' },
|
||||
{ off: 19, title: 'Пусто', title_long: 'Пока что пусто 2' },
|
||||
{ off: 21, title: 'Старт', title_long: 'Старт здесь' },
|
||||
{ off: 22, title: '1', title_long: 'Первая точка' },
|
||||
{ off: 23, title: '2', title_long: 'Вторая точка' },
|
||||
{ off: 24, title: '3', title_long: 'Третья точка' },
|
||||
{ off: 25, title: '4', title_long: 'Четвёртая точка' },
|
||||
{ off: 26, title: '5', title_long: 'Пятая точка' },
|
||||
{ off: 27, title: '7', title_long: 'Шестая точка' },
|
||||
{ off: 28, title: 'Финиш', title_long: 'Финиш здесь' },
|
||||
{ off: 29, title: 'Осторожно!', title_long: 'Осторожно!' },
|
||||
{ off: 30, title: 'Вопрос', title_long: 'Что тут?' }
|
||||
]
|
||||
layers: {
|
||||
men: { off: 5, title: 'Александр 3', title_long: 'Парк Городское Начало' },
|
||||
square: { off: 9, title: 'пл.Калинина', title_long: 'пл.Калинина' },
|
||||
bridge: { off: 4, title: 'Мост', title_long: 'Мост' },
|
||||
ikea: { off: 7, title: 'Икея', title_long: 'Парковка ТЦ Мега' },
|
||||
bugr: { off: 8, title: 'Бугринка', title_long: 'Та самая коса\n(культовое место Усталых Педалек)' },
|
||||
monum: { off: 10, title: 'ГПНТБ', title_long: 'ГПНТБ' },
|
||||
opera: { off: 18, title: 'Оперный', title_long: 'Оперный театр' },
|
||||
forest: { off: 1, title: 'Лес', title_long: 'Берёзовая роща' },
|
||||
road: { off: 2, title: 'Трасса', title_long: 'Дорога' },
|
||||
empty1: { off: 19, title: 'Пусто', title_long: 'Пока что пусто 1' },
|
||||
empty2: { off: 19, title: 'Пусто', title_long: 'Пока что пусто 2' },
|
||||
chicken: { off: 3, title: 'Курочка', title_long: 'Курочка' },
|
||||
camp: { off: 6, title: 'Палатка', title_long: 'Палаточный лагерь' },
|
||||
burger: { off: 11, title: 'Фастфуд', title_long: 'Двухколёсное ожирение' },
|
||||
beer: { off: 12, title: 'Пивко', title_long: 'В Питере - пить!' },
|
||||
shawarma: { off: 13, title: 'Шаварма', title_long: 'Вкусная шаурма' },
|
||||
rocks: { off: 14, title: 'Камни', title_long: 'Кааааммммуушшшки' },
|
||||
swamp: { off: 15, title: 'Болото', title_long: 'Пошла ты,\nтрясина грёбаная!' },
|
||||
skull: { off: 16, title: 'Роджер', title_long: 'Может не надо?' },
|
||||
dump: { off: 17, title: 'Какашка', title_long: 'Нехорошее место' },
|
||||
empty3: { off: 19, title: 'Пусто', title_long: 'Пока что пусто 1' },
|
||||
empty4: { off: 19, title: 'Пусто', title_long: 'Пока что пусто 2' },
|
||||
start: { off: 21, title: 'Старт', title_long: 'Старт здесь' },
|
||||
p1: { off: 22, title: '1', title_long: 'Первая точка' },
|
||||
p2: { off: 23, title: '2', title_long: 'Вторая точка' },
|
||||
p3: { off: 24, title: '3', title_long: 'Третья точка' },
|
||||
p4: { off: 25, title: '4', title_long: 'Четвёртая точка' },
|
||||
p5: { off: 26, title: '5', title_long: 'Пятая точка' },
|
||||
p6: { off: 27, title: '7', title_long: 'Шестая точка' },
|
||||
p7: { off: 28, title: 'Финиш', title_long: 'Финиш здесь' },
|
||||
p8: { off: 29, title: 'Осторожно!', title_long: 'Осторожно!' },
|
||||
p9: { off: 30, title: 'Вопрос', title_long: 'Что тут?' },
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -4,6 +4,7 @@ import 'leaflet-editable';
|
|||
import { DomMarker } from '$utils/DomMarker';
|
||||
|
||||
import stickers from '$sprites/stickers.svg';
|
||||
import { STICKERS } from '$constants/stickers';
|
||||
|
||||
export class Sticker {
|
||||
constructor({
|
||||
|
@ -124,11 +125,17 @@ export class Sticker {
|
|||
this.stickerArrow.style.transform = `rotate(${angle + 3.14}rad)`;
|
||||
};
|
||||
|
||||
generateStickerSVG = sticker => (
|
||||
generateStickerSVG = ({ set, sticker }) => (
|
||||
// `
|
||||
// <svg width="64" height="64">
|
||||
// <use xlink:href="${stickers}#sticker-${sticker}" x="0" y="0" width="64" height="64" />
|
||||
// </svg>
|
||||
// `
|
||||
`
|
||||
<svg width="64" height="64">
|
||||
<use xlink:href="${stickers}#sticker-${sticker}" x="0" y="0" width="64" height="64" />
|
||||
</svg>
|
||||
<div
|
||||
class="sticker-image"
|
||||
style="background-image: url('${STICKERS[set].url}');background-position: ${-STICKERS[set].layers[sticker].off * 64} 50%">
|
||||
</div>
|
||||
`
|
||||
);
|
||||
|
||||
|
|
|
@ -72,6 +72,16 @@
|
|||
position: relative;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.sticker-image {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
left: -8px;
|
||||
top: -8px;
|
||||
position: relative;
|
||||
z-index: 0;
|
||||
background-size: cover;
|
||||
}
|
||||
}
|
||||
|
||||
.sticker-arrow {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue