stickers: implemented click-adding

This commit is contained in:
muerwre 2018-12-03 18:24:58 +07:00
parent 93e05b7efe
commit 4ea56aa43c
4 changed files with 60 additions and 43 deletions

View file

@ -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 })}
/>
))
))

View file

@ -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: 'Что тут?' },
}
}
};

View file

@ -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>
`
);

View file

@ -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 {