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 React from 'react';
import { STICKERS } from '$constants/stickers'; import { STICKERS } from '$constants/stickers';
import sprite from '$sprites/stickers.svg';
type Props = { type Props = {
setActiveSticker: Function setActiveSticker: Function
@ -12,14 +11,15 @@ export const StickersDialog = ({ setActiveSticker }: Props) => (
<div className="helper stickers-helper"> <div className="helper stickers-helper">
{ {
Object.keys(STICKERS).map(set => ( Object.keys(STICKERS).map(set => (
STICKERS[set].layers.map((sticker, i) => ( Object.keys(STICKERS[set].layers).map(sticker => (
<div <div
style={{ style={{
backgroundImage: `url(${STICKERS[set].url})`, backgroundImage: `url(${STICKERS[set].url})`,
backgroundPosition: `${-sticker.off * 48}px 50%`, backgroundPosition: `${-STICKERS[set].layers[sticker].off * 48}px 50%`,
}} }}
className="sticker-preview" 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 = ['green', 'basic', 'green-small'];
export const STICKERS = { export const STICKERS = {
BASE: { base: {
title: 'Простые', title: 'Простые',
url: require('$sprites/stickers/stickers-base.svg'), url: require('$sprites/stickers/stickers-base.svg'),
size: 72, size: 72,
layers: [ layers: {
{ off: 5, title: 'Александр 3', title_long: 'Парк Городское Начало' }, men: { off: 5, title: 'Александр 3', title_long: 'Парк Городское Начало' },
{ off: 9, title: 'пл.Калинина', title_long: 'пл.Калинина' }, square: { off: 9, title: 'пл.Калинина', title_long: 'пл.Калинина' },
{ off: 4, title: 'Мост', title_long: 'Мост' }, bridge: { off: 4, title: 'Мост', title_long: 'Мост' },
{ off: 7, title: 'Икея', title_long: 'Парковка ТЦ Мега' }, ikea: { off: 7, title: 'Икея', title_long: 'Парковка ТЦ Мега' },
{ off: 8, title: 'Бугринка', title_long: 'Та самая коса\n(культовое место Усталых Педалек)' }, bugr: { off: 8, title: 'Бугринка', title_long: 'Та самая коса\n(культовое место Усталых Педалек)' },
{ off: 10, title: 'ГПНТБ', title_long: 'ГПНТБ' }, monum: { off: 10, title: 'ГПНТБ', title_long: 'ГПНТБ' },
{ off: 18, title: 'Оперный', title_long: 'Оперный театр' }, opera: { off: 18, title: 'Оперный', title_long: 'Оперный театр' },
{ off: 1, title: 'Лес', title_long: 'Берёзовая роща' }, forest: { off: 1, title: 'Лес', title_long: 'Берёзовая роща' },
{ off: 2, title: 'Трасса', title_long: 'Дорога' }, road: { off: 2, title: 'Трасса', title_long: 'Дорога' },
{ off: 19, title: 'Пусто', title_long: 'Пока что пусто 1' }, empty1: { off: 19, title: 'Пусто', title_long: 'Пока что пусто 1' },
{ off: 19, title: 'Пусто', title_long: 'Пока что пусто 2' }, empty2: { off: 19, title: 'Пусто', title_long: 'Пока что пусто 2' },
{ off: 3, title: 'Курочка', title_long: 'Курочка' }, chicken: { off: 3, title: 'Курочка', title_long: 'Курочка' },
{ off: 6, title: 'Палатка', title_long: 'Палаточный лагерь' }, camp: { off: 6, title: 'Палатка', title_long: 'Палаточный лагерь' },
{ off: 11, title: 'Фастфуд', title_long: 'Двухколёсное ожирение' }, burger: { off: 11, title: 'Фастфуд', title_long: 'Двухколёсное ожирение' },
{ off: 12, title: 'Пивко', title_long: 'В Питере - пить!' }, beer: { off: 12, title: 'Пивко', title_long: 'В Питере - пить!' },
{ off: 13, title: 'Шаварма', title_long: 'Вкусная шаурма' }, shawarma: { off: 13, title: 'Шаварма', title_long: 'Вкусная шаурма' },
{ off: 14, title: 'Камни', title_long: 'Кааааммммуушшшки' }, rocks: { off: 14, title: 'Камни', title_long: 'Кааааммммуушшшки' },
{ off: 15, title: 'Болото', title_long: 'Пошла ты,\nтрясина грёбаная!' }, swamp: { off: 15, title: 'Болото', title_long: 'Пошла ты,\nтрясина грёбаная!' },
{ off: 16, title: 'Роджер', title_long: 'Может не надо?' }, skull: { off: 16, title: 'Роджер', title_long: 'Может не надо?' },
{ off: 17, title: 'Какашка', title_long: 'Нехорошее место' }, dump: { off: 17, title: 'Какашка', title_long: 'Нехорошее место' },
{ off: 19, title: 'Пусто', title_long: 'Пока что пусто 1' }, empty3: { off: 19, title: 'Пусто', title_long: 'Пока что пусто 1' },
{ off: 19, title: 'Пусто', title_long: 'Пока что пусто 2' }, empty4: { off: 19, title: 'Пусто', title_long: 'Пока что пусто 2' },
{ off: 21, title: 'Старт', title_long: 'Старт здесь' }, start: { off: 21, title: 'Старт', title_long: 'Старт здесь' },
{ off: 22, title: '1', title_long: 'Первая точка' }, p1: { off: 22, title: '1', title_long: 'Первая точка' },
{ off: 23, title: '2', title_long: 'Вторая точка' }, p2: { off: 23, title: '2', title_long: 'Вторая точка' },
{ off: 24, title: '3', title_long: 'Третья точка' }, p3: { off: 24, title: '3', title_long: 'Третья точка' },
{ off: 25, title: '4', title_long: 'Четвёртая точка' }, p4: { off: 25, title: '4', title_long: 'Четвёртая точка' },
{ off: 26, title: '5', title_long: 'Пятая точка' }, p5: { off: 26, title: '5', title_long: 'Пятая точка' },
{ off: 27, title: '7', title_long: 'Шестая точка' }, p6: { off: 27, title: '7', title_long: 'Шестая точка' },
{ off: 28, title: 'Финиш', title_long: 'Финиш здесь' }, p7: { off: 28, title: 'Финиш', title_long: 'Финиш здесь' },
{ off: 29, title: 'Осторожно!', title_long: 'Осторожно!' }, p8: { off: 29, title: 'Осторожно!', title_long: 'Осторожно!' },
{ off: 30, title: 'Вопрос', title_long: 'Что тут?' } p9: { off: 30, title: 'Вопрос', title_long: 'Что тут?' },
] }
} }
}; };

View file

@ -4,6 +4,7 @@ import 'leaflet-editable';
import { DomMarker } from '$utils/DomMarker'; import { DomMarker } from '$utils/DomMarker';
import stickers from '$sprites/stickers.svg'; import stickers from '$sprites/stickers.svg';
import { STICKERS } from '$constants/stickers';
export class Sticker { export class Sticker {
constructor({ constructor({
@ -124,11 +125,17 @@ export class Sticker {
this.stickerArrow.style.transform = `rotate(${angle + 3.14}rad)`; 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"> <div
<use xlink:href="${stickers}#sticker-${sticker}" x="0" y="0" width="64" height="64" /> class="sticker-image"
</svg> 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; position: relative;
z-index: 0; z-index: 0;
} }
.sticker-image {
width: 64px;
height: 64px;
left: -8px;
top: -8px;
position: relative;
z-index: 0;
background-size: cover;
}
} }
.sticker-arrow { .sticker-arrow {