@rpg-engine/long-bow 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +181 -181
- package/dist/long-bow.cjs.development.js +1060 -1065
- package/dist/long-bow.cjs.development.js.map +1 -1
- package/dist/long-bow.cjs.production.min.js +1 -1
- package/dist/long-bow.cjs.production.min.js.map +1 -1
- package/dist/long-bow.esm.js +1066 -1071
- package/dist/long-bow.esm.js.map +1 -1
- package/package.json +100 -100
- package/src/components/Abstractions/ModalPortal.tsx +22 -22
- package/src/components/Abstractions/SlotsContainer.tsx +62 -62
- package/src/components/Arrow/SelectArrow.tsx +69 -69
- package/src/components/Arrow/img/arrow01-left-clicked.png +0 -0
- package/src/components/Arrow/img/arrow01-left.png +0 -0
- package/src/components/Arrow/img/arrow01-right-clicked.png +0 -0
- package/src/components/Arrow/img/arrow01-right.png +0 -0
- package/src/components/Arrow/img/arrow02-left-clicked.png +0 -0
- package/src/components/Arrow/img/arrow02-left.png +0 -0
- package/src/components/Arrow/img/arrow02-right-clicked.png +0 -0
- package/src/components/Arrow/img/arrow02-right.png +0 -0
- package/src/components/Button.tsx +40 -40
- package/src/components/Character/CharacterSelection.tsx +98 -98
- package/src/components/CharacterStatus/CharacterStatus.tsx +120 -120
- package/src/components/Chat/Chat.tsx +196 -196
- package/src/components/Chatdeprecated/ChatDeprecated.tsx +198 -198
- package/src/components/CheckButton.tsx +65 -65
- package/src/components/CircularController/CircularController.tsx +282 -282
- package/src/components/CraftBook/CraftBook.tsx +286 -286
- package/src/components/CraftBook/CraftingRecipe.tsx +161 -161
- package/src/components/CraftBook/MockItems.ts +101 -101
- package/src/components/DraggableContainer.tsx +181 -180
- package/src/components/DropdownSelectorContainer.tsx +42 -42
- package/src/components/Equipment/EquipmentSet.tsx +199 -199
- package/src/components/HistoryDialog.tsx +104 -104
- package/src/components/Input.tsx +15 -15
- package/src/components/InputRadio.tsx +41 -41
- package/src/components/Item/Cards/ItemInfo.tsx +298 -298
- package/src/components/Item/Cards/ItemInfoDisplay.tsx +135 -135
- package/src/components/Item/Cards/ItemInfoWrapper.tsx +62 -62
- package/src/components/Item/Cards/ItemTooltip.tsx +83 -83
- package/src/components/Item/Cards/MobileItemTooltip.tsx +149 -149
- package/src/components/Item/Inventory/ErrorBoundary.tsx +42 -42
- package/src/components/Item/Inventory/ItemContainer.tsx +231 -231
- package/src/components/Item/Inventory/ItemContainerTypes.ts +6 -6
- package/src/components/Item/Inventory/ItemQuantitySelector.tsx +138 -138
- package/src/components/Item/Inventory/ItemSlot.tsx +580 -580
- package/src/components/Item/Inventory/itemContainerHelper.ts +175 -175
- package/src/components/ListMenu.tsx +63 -63
- package/src/components/Marketplace/Marketplace.tsx +132 -132
- package/src/components/Marketplace/MarketplaceRows.tsx +171 -171
- package/src/components/Marketplace/__mocks__/index.tsx +65 -65
- package/src/components/Multitab/Tab.tsx +66 -66
- package/src/components/Multitab/TabBody.tsx +13 -13
- package/src/components/Multitab/TabsContainer.tsx +97 -97
- package/src/components/NPCDialog/NPCDialog.tsx +121 -121
- package/src/components/NPCDialog/NPCDialogText.tsx +113 -113
- package/src/components/NPCDialog/NPCMultiDialog.tsx +159 -159
- package/src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx +237 -237
- package/src/components/ProgressBar.tsx +92 -95
- package/src/components/PropertySelect/PropertySelect.tsx +106 -106
- package/src/components/QuestInfo/QuestInfo.tsx +233 -233
- package/src/components/QuestList.tsx +135 -135
- package/src/components/RPGUIContainer.tsx +47 -47
- package/src/components/RPGUIForceRenderStart.tsx +45 -45
- package/src/components/RPGUIRoot.tsx +14 -14
- package/src/components/RadioButton.tsx +53 -53
- package/src/components/RadioInput/RadioButton.tsx +96 -96
- package/src/components/RadioInput/RadioInput.tsx +102 -102
- package/src/components/RadioInput/instruments.ts +15 -15
- package/src/components/RangeSlider.tsx +78 -78
- package/src/components/RelativeListMenu.tsx +90 -90
- package/src/components/ScrollList.tsx +79 -79
- package/src/components/Shortcuts/Shortcuts.tsx +193 -193
- package/src/components/Shortcuts/ShortcutsSetter.tsx +139 -139
- package/src/components/Shortcuts/SingleShortcut.ts +82 -82
- package/src/components/Shortcuts/useShortcutCooldown.ts +23 -23
- package/src/components/SimpleProgressBar.tsx +62 -62
- package/src/components/SkillProgressBar.tsx +133 -133
- package/src/components/SkillsContainer.tsx +217 -211
- package/src/components/Spellbook/Spell.tsx +236 -236
- package/src/components/Spellbook/Spellbook.tsx +161 -161
- package/src/components/Spellbook/cards/MobileSpellTooltip.tsx +137 -137
- package/src/components/Spellbook/cards/SpellInfo.tsx +134 -134
- package/src/components/Spellbook/cards/SpellInfoDisplay.tsx +31 -31
- package/src/components/Spellbook/cards/SpellInfoWrapper.tsx +48 -48
- package/src/components/Spellbook/cards/SpellTooltip.tsx +70 -70
- package/src/components/Spellbook/constants.ts +7 -7
- package/src/components/Spellbook/mockSpells.ts +84 -84
- package/src/components/StaticBook/StaticBook.tsx +103 -103
- package/src/components/TextArea.tsx +11 -11
- package/src/components/TimeWidget/DayNightPeriod/DayNightPeriod.tsx +35 -35
- package/src/components/TimeWidget/TimeWidget.tsx +65 -65
- package/src/components/TradingMenu/TradingItemRow.tsx +199 -199
- package/src/components/TradingMenu/TradingMenu.tsx +219 -219
- package/src/components/TradingMenu/items.mock.ts +48 -48
- package/src/components/Truncate.tsx +25 -25
- package/src/components/itemSelector/ItemSelector.tsx +136 -136
- package/src/components/shared/Column.tsx +16 -16
- package/src/components/shared/Ellipsis.tsx +68 -68
- package/src/components/shared/SpriteFromAtlas.tsx +104 -104
- package/src/components/typography/DynamicText.tsx +49 -49
- package/src/constants/uiColors.ts +20 -20
- package/src/constants/uiDevices.ts +3 -3
- package/src/constants/uiFonts.ts +12 -12
- package/src/hooks/useEventListener.ts +21 -21
- package/src/hooks/useOutsideAlerter.ts +25 -25
- package/src/index.tsx +42 -42
- package/src/libs/CastingTypeHelper.ts +7 -7
- package/src/libs/StringHelpers.ts +3 -3
- package/src/libs/itemCounter.ts +21 -21
- package/src/mocks/atlas/entities/entities.json +20215 -20215
- package/src/mocks/atlas/icons/icons.json +735 -735
- package/src/mocks/atlas/items/items.json +12086 -12086
- package/src/mocks/equipmentSet.mocks.ts +391 -391
- package/src/mocks/itemContainer.mocks.ts +605 -605
- package/src/mocks/skills.mocks.ts +128 -128
- package/src/stories/Arrow.stories.tsx +26 -26
- package/src/stories/Button.stories.tsx +36 -36
- package/src/stories/CharacterSelection.stories.tsx +44 -44
- package/src/stories/CharacterStatus.stories.tsx +29 -29
- package/src/stories/Chat.stories.tsx +187 -187
- package/src/stories/ChatDeprecated.stories.tsx +170 -170
- package/src/stories/CheckButton.stories.tsx +48 -48
- package/src/stories/CircullarController.stories.tsx +37 -37
- package/src/stories/CraftBook.stories.tsx +42 -42
- package/src/stories/DayNightPeriod.stories.tsx +27 -27
- package/src/stories/DraggableContainer.stories.tsx +28 -28
- package/src/stories/Dropdown.stories.tsx +46 -46
- package/src/stories/DropdownSelectorContainer.stories.tsx +41 -41
- package/src/stories/EquipmentSet.stories.tsx +65 -65
- package/src/stories/HistoryDialog.stories.tsx +61 -61
- package/src/stories/ItemContainer.stories.tsx +201 -201
- package/src/stories/ItemInfoDisplay.stories.tsx +33 -33
- package/src/stories/ItemQuantitySelector.stories.tsx +26 -26
- package/src/stories/ItemSelector.stories.tsx +77 -77
- package/src/stories/ItemTradingComponent.stories.tsx +35 -35
- package/src/stories/ListMenu.stories.tsx +56 -56
- package/src/stories/Marketplace.stories.tsx +42 -42
- package/src/stories/MarketplaceRows.stories.tsx +28 -28
- package/src/stories/Multitab.stories.tsx +51 -51
- package/src/stories/NPCDialog.stories.tsx +130 -130
- package/src/stories/NPCMultiDialog.stories.tsx +71 -71
- package/src/stories/ProgressBar.stories.tsx +23 -23
- package/src/stories/PropertySelect.stories.tsx +40 -40
- package/src/stories/QuestInfo.stories.tsx +107 -107
- package/src/stories/QuestList.stories.tsx +82 -82
- package/src/stories/RPGUIContainers.stories.tsx +42 -42
- package/src/stories/RadioButton.stories.tsx +49 -49
- package/src/stories/RadioInput.stories.tsx +34 -34
- package/src/stories/RangeSlider.stories.tsx +64 -64
- package/src/stories/ScrollList.stories.tsx +85 -85
- package/src/stories/Shortcuts.stories.tsx +39 -39
- package/src/stories/SimpleProgressBar.stories.tsx +22 -22
- package/src/stories/SkillProgressBar.stories.tsx +34 -34
- package/src/stories/SkillsContainer.stories.tsx +35 -35
- package/src/stories/SpellInfoDisplay.stories.tsx +27 -27
- package/src/stories/Spellbook.stories.tsx +104 -104
- package/src/stories/StaticBook.stories.tsx +32 -32
- package/src/stories/Text.stories.tsx +42 -42
- package/src/stories/TimeWidget.stories.tsx +27 -27
- package/src/stories/TradingMenu.stories.tsx +47 -47
- package/src/types/eventTypes.ts +4 -4
- package/src/types/index.d.ts +2 -2
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
import { AnimationEffectKeys, ISpell, SpellCastingType, SpellsBlueprint } from '@rpg-engine/shared';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export const mockSpells: ISpell[] = [
|
|
5
|
-
{
|
|
6
|
-
key: SpellsBlueprint.ArrowCreationSpell,
|
|
7
|
-
name: 'Arrow Creation Spell',
|
|
8
|
-
description: 'A spell that creates arrow in your inventory.',
|
|
9
|
-
magicWords: 'iquar elandi',
|
|
10
|
-
manaCost: 10,
|
|
11
|
-
minMagicLevelRequired: 3,
|
|
12
|
-
castingType: SpellCastingType.RangedCasting,
|
|
13
|
-
minLevelRequired: 1,
|
|
14
|
-
cooldown: 20,
|
|
15
|
-
maxDistanceGrid: 2,
|
|
16
|
-
castingAnimationKey: AnimationEffectKeys.SkillLevelUp,
|
|
17
|
-
targetHitAnimationKey: AnimationEffectKeys.Rooted,
|
|
18
|
-
projectileAnimationKey: AnimationEffectKeys.Energy,
|
|
19
|
-
usableEffect: () => {}
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
key: SpellsBlueprint.ArrowCreationSpell,
|
|
23
|
-
name: 'Arrow Creation Spell',
|
|
24
|
-
description: 'A spell that creates arrow in your inventory.',
|
|
25
|
-
magicWords: 'iquar elandi',
|
|
26
|
-
manaCost: 10,
|
|
27
|
-
minMagicLevelRequired: 3,
|
|
28
|
-
castingType: SpellCastingType.RangedCasting,
|
|
29
|
-
minLevelRequired: 1,
|
|
30
|
-
cooldown: 20,
|
|
31
|
-
maxDistanceGrid: 2,
|
|
32
|
-
castingAnimationKey: AnimationEffectKeys.SkillLevelUp,
|
|
33
|
-
targetHitAnimationKey: AnimationEffectKeys.Rooted,
|
|
34
|
-
projectileAnimationKey: AnimationEffectKeys.Energy,
|
|
35
|
-
usableEffect: () => {}
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
key: SpellsBlueprint.ArrowCreationSpell,
|
|
39
|
-
name: 'Arrow Creation Spell',
|
|
40
|
-
description: 'A spell that creates arrow in your inventory.',
|
|
41
|
-
magicWords: 'iquar elandi',
|
|
42
|
-
manaCost: 10,
|
|
43
|
-
minMagicLevelRequired: 3,
|
|
44
|
-
castingType: SpellCastingType.RangedCasting,
|
|
45
|
-
minLevelRequired: 1,
|
|
46
|
-
cooldown: 20,
|
|
47
|
-
maxDistanceGrid: 2,
|
|
48
|
-
castingAnimationKey: AnimationEffectKeys.SkillLevelUp,
|
|
49
|
-
targetHitAnimationKey: AnimationEffectKeys.Rooted,
|
|
50
|
-
projectileAnimationKey: AnimationEffectKeys.Energy,
|
|
51
|
-
usableEffect: () => {}
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
key: SpellsBlueprint.ArrowCreationSpell,
|
|
55
|
-
name: 'Arrow Creation Spell',
|
|
56
|
-
description: 'A spell that creates arrow in your inventory.',
|
|
57
|
-
magicWords: 'iquar elandi',
|
|
58
|
-
manaCost: 10,
|
|
59
|
-
minMagicLevelRequired: 3,
|
|
60
|
-
castingType: SpellCastingType.RangedCasting,
|
|
61
|
-
minLevelRequired: 1,
|
|
62
|
-
cooldown: 20,
|
|
63
|
-
maxDistanceGrid: 2,
|
|
64
|
-
castingAnimationKey: AnimationEffectKeys.SkillLevelUp,
|
|
65
|
-
targetHitAnimationKey: AnimationEffectKeys.Rooted,
|
|
66
|
-
projectileAnimationKey: AnimationEffectKeys.Energy,
|
|
67
|
-
usableEffect: () => {}
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
key: SpellsBlueprint.ArrowCreationSpell,
|
|
71
|
-
name: 'Arrow Creation Spell',
|
|
72
|
-
description: 'A spell that creates arrow in your inventory.',
|
|
73
|
-
magicWords: 'iquar elandi',
|
|
74
|
-
manaCost: 10,
|
|
75
|
-
minMagicLevelRequired: 3,
|
|
76
|
-
castingType: SpellCastingType.RangedCasting,
|
|
77
|
-
minLevelRequired: 1,
|
|
78
|
-
cooldown: 20,
|
|
79
|
-
maxDistanceGrid: 2,
|
|
80
|
-
castingAnimationKey: AnimationEffectKeys.SkillLevelUp,
|
|
81
|
-
targetHitAnimationKey: AnimationEffectKeys.Rooted,
|
|
82
|
-
projectileAnimationKey: AnimationEffectKeys.Energy,
|
|
83
|
-
usableEffect: () => {}
|
|
84
|
-
},
|
|
1
|
+
import { AnimationEffectKeys, ISpell, SpellCastingType, SpellsBlueprint } from '@rpg-engine/shared';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export const mockSpells: ISpell[] = [
|
|
5
|
+
{
|
|
6
|
+
key: SpellsBlueprint.ArrowCreationSpell,
|
|
7
|
+
name: 'Arrow Creation Spell',
|
|
8
|
+
description: 'A spell that creates arrow in your inventory.',
|
|
9
|
+
magicWords: 'iquar elandi',
|
|
10
|
+
manaCost: 10,
|
|
11
|
+
minMagicLevelRequired: 3,
|
|
12
|
+
castingType: SpellCastingType.RangedCasting,
|
|
13
|
+
minLevelRequired: 1,
|
|
14
|
+
cooldown: 20,
|
|
15
|
+
maxDistanceGrid: 2,
|
|
16
|
+
castingAnimationKey: AnimationEffectKeys.SkillLevelUp,
|
|
17
|
+
targetHitAnimationKey: AnimationEffectKeys.Rooted,
|
|
18
|
+
projectileAnimationKey: AnimationEffectKeys.Energy,
|
|
19
|
+
usableEffect: () => {}
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
key: SpellsBlueprint.ArrowCreationSpell,
|
|
23
|
+
name: 'Arrow Creation Spell',
|
|
24
|
+
description: 'A spell that creates arrow in your inventory.',
|
|
25
|
+
magicWords: 'iquar elandi',
|
|
26
|
+
manaCost: 10,
|
|
27
|
+
minMagicLevelRequired: 3,
|
|
28
|
+
castingType: SpellCastingType.RangedCasting,
|
|
29
|
+
minLevelRequired: 1,
|
|
30
|
+
cooldown: 20,
|
|
31
|
+
maxDistanceGrid: 2,
|
|
32
|
+
castingAnimationKey: AnimationEffectKeys.SkillLevelUp,
|
|
33
|
+
targetHitAnimationKey: AnimationEffectKeys.Rooted,
|
|
34
|
+
projectileAnimationKey: AnimationEffectKeys.Energy,
|
|
35
|
+
usableEffect: () => {}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
key: SpellsBlueprint.ArrowCreationSpell,
|
|
39
|
+
name: 'Arrow Creation Spell',
|
|
40
|
+
description: 'A spell that creates arrow in your inventory.',
|
|
41
|
+
magicWords: 'iquar elandi',
|
|
42
|
+
manaCost: 10,
|
|
43
|
+
minMagicLevelRequired: 3,
|
|
44
|
+
castingType: SpellCastingType.RangedCasting,
|
|
45
|
+
minLevelRequired: 1,
|
|
46
|
+
cooldown: 20,
|
|
47
|
+
maxDistanceGrid: 2,
|
|
48
|
+
castingAnimationKey: AnimationEffectKeys.SkillLevelUp,
|
|
49
|
+
targetHitAnimationKey: AnimationEffectKeys.Rooted,
|
|
50
|
+
projectileAnimationKey: AnimationEffectKeys.Energy,
|
|
51
|
+
usableEffect: () => {}
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
key: SpellsBlueprint.ArrowCreationSpell,
|
|
55
|
+
name: 'Arrow Creation Spell',
|
|
56
|
+
description: 'A spell that creates arrow in your inventory.',
|
|
57
|
+
magicWords: 'iquar elandi',
|
|
58
|
+
manaCost: 10,
|
|
59
|
+
minMagicLevelRequired: 3,
|
|
60
|
+
castingType: SpellCastingType.RangedCasting,
|
|
61
|
+
minLevelRequired: 1,
|
|
62
|
+
cooldown: 20,
|
|
63
|
+
maxDistanceGrid: 2,
|
|
64
|
+
castingAnimationKey: AnimationEffectKeys.SkillLevelUp,
|
|
65
|
+
targetHitAnimationKey: AnimationEffectKeys.Rooted,
|
|
66
|
+
projectileAnimationKey: AnimationEffectKeys.Energy,
|
|
67
|
+
usableEffect: () => {}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
key: SpellsBlueprint.ArrowCreationSpell,
|
|
71
|
+
name: 'Arrow Creation Spell',
|
|
72
|
+
description: 'A spell that creates arrow in your inventory.',
|
|
73
|
+
magicWords: 'iquar elandi',
|
|
74
|
+
manaCost: 10,
|
|
75
|
+
minMagicLevelRequired: 3,
|
|
76
|
+
castingType: SpellCastingType.RangedCasting,
|
|
77
|
+
minLevelRequired: 1,
|
|
78
|
+
cooldown: 20,
|
|
79
|
+
maxDistanceGrid: 2,
|
|
80
|
+
castingAnimationKey: AnimationEffectKeys.SkillLevelUp,
|
|
81
|
+
targetHitAnimationKey: AnimationEffectKeys.Rooted,
|
|
82
|
+
projectileAnimationKey: AnimationEffectKeys.Energy,
|
|
83
|
+
usableEffect: () => {}
|
|
84
|
+
},
|
|
85
85
|
];
|
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
import React, { useEffect, useState } from 'react';
|
|
2
|
-
import Draggable from 'react-draggable';
|
|
3
|
-
import styled from 'styled-components';
|
|
4
|
-
import { uiFonts } from '../../constants/uiFonts';
|
|
5
|
-
import SelectArrow from '../Arrow/SelectArrow';
|
|
6
|
-
import Book from './img/0.png';
|
|
7
|
-
|
|
8
|
-
export interface IStaticBookProps {
|
|
9
|
-
content: string;
|
|
10
|
-
onChange?: (slice: string) => void;
|
|
11
|
-
onClose?: () => void;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export const StaticBook: React.FC<IStaticBookProps> = ({
|
|
15
|
-
content,
|
|
16
|
-
onChange,
|
|
17
|
-
onClose,
|
|
18
|
-
}) => {
|
|
19
|
-
const [currentIndex, setCurrentIndex] = useState(0);
|
|
20
|
-
|
|
21
|
-
// create slicedContent with string sliced every 550 characters
|
|
22
|
-
const slicedContent = content.match(/.{1,550}/g) || [];
|
|
23
|
-
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
if (onChange) onChange(slicedContent[currentIndex]);
|
|
26
|
-
}, [currentIndex]);
|
|
27
|
-
|
|
28
|
-
const bookLength = slicedContent.length - 1;
|
|
29
|
-
|
|
30
|
-
const onLeftClick = () => {
|
|
31
|
-
if (currentIndex === 0) setCurrentIndex(bookLength);
|
|
32
|
-
else setCurrentIndex(index => index - 1);
|
|
33
|
-
};
|
|
34
|
-
const onRightClick = () => {
|
|
35
|
-
if (currentIndex === bookLength) setCurrentIndex(0);
|
|
36
|
-
else setCurrentIndex(index => index + 1);
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const getCurrentContentSlice = () => {
|
|
40
|
-
return slicedContent[currentIndex];
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
return (
|
|
44
|
-
<Draggable>
|
|
45
|
-
<Container>
|
|
46
|
-
<CloseButton onPointerDown={onClose}>X</CloseButton>
|
|
47
|
-
<ColumnBook isLastPage={currentIndex === bookLength}>
|
|
48
|
-
{getCurrentContentSlice()}
|
|
49
|
-
</ColumnBook>
|
|
50
|
-
|
|
51
|
-
<ArrowContainer>
|
|
52
|
-
{currentIndex >= 1 && (
|
|
53
|
-
<SelectArrow
|
|
54
|
-
direction="left"
|
|
55
|
-
onPointerDown={onLeftClick}
|
|
56
|
-
></SelectArrow>
|
|
57
|
-
)}
|
|
58
|
-
{currentIndex !== bookLength && (
|
|
59
|
-
<SelectArrow
|
|
60
|
-
direction="right"
|
|
61
|
-
onPointerDown={onRightClick}
|
|
62
|
-
></SelectArrow>
|
|
63
|
-
)}
|
|
64
|
-
</ArrowContainer>
|
|
65
|
-
</Container>
|
|
66
|
-
</Draggable>
|
|
67
|
-
);
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
const Container = styled.div`
|
|
71
|
-
background-image: url(${Book});
|
|
72
|
-
background-repeat: no-repeat;
|
|
73
|
-
position: relative;
|
|
74
|
-
width: 778px;
|
|
75
|
-
height: 463px;
|
|
76
|
-
background-position-y: -1rem;
|
|
77
|
-
`;
|
|
78
|
-
|
|
79
|
-
const CloseButton = styled.p`
|
|
80
|
-
position: absolute;
|
|
81
|
-
top: 1.9rem;
|
|
82
|
-
right: 5rem;
|
|
83
|
-
font-size: ${uiFonts.size.large} !important;
|
|
84
|
-
`;
|
|
85
|
-
|
|
86
|
-
interface IColumnBook {
|
|
87
|
-
isLastPage: boolean;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const ColumnBook = styled.span<IColumnBook>`
|
|
91
|
-
position: absolute;
|
|
92
|
-
left: 5.2rem;
|
|
93
|
-
top: 3.8rem;
|
|
94
|
-
width: ${({ isLastPage }) => (!isLastPage ? '77%' : '37%')};
|
|
95
|
-
column-count: ${({ isLastPage }) => (isLastPage ? 1 : 2)};
|
|
96
|
-
grid-gap: 56px;
|
|
97
|
-
min-height: 340px;
|
|
98
|
-
`;
|
|
99
|
-
const ArrowContainer = styled.span`
|
|
100
|
-
display: flex;
|
|
101
|
-
height: 100%;
|
|
102
|
-
align-items: center;
|
|
103
|
-
`;
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import Draggable from 'react-draggable';
|
|
3
|
+
import styled from 'styled-components';
|
|
4
|
+
import { uiFonts } from '../../constants/uiFonts';
|
|
5
|
+
import SelectArrow from '../Arrow/SelectArrow';
|
|
6
|
+
import Book from './img/0.png';
|
|
7
|
+
|
|
8
|
+
export interface IStaticBookProps {
|
|
9
|
+
content: string;
|
|
10
|
+
onChange?: (slice: string) => void;
|
|
11
|
+
onClose?: () => void;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const StaticBook: React.FC<IStaticBookProps> = ({
|
|
15
|
+
content,
|
|
16
|
+
onChange,
|
|
17
|
+
onClose,
|
|
18
|
+
}) => {
|
|
19
|
+
const [currentIndex, setCurrentIndex] = useState(0);
|
|
20
|
+
|
|
21
|
+
// create slicedContent with string sliced every 550 characters
|
|
22
|
+
const slicedContent = content.match(/.{1,550}/g) || [];
|
|
23
|
+
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (onChange) onChange(slicedContent[currentIndex]);
|
|
26
|
+
}, [currentIndex]);
|
|
27
|
+
|
|
28
|
+
const bookLength = slicedContent.length - 1;
|
|
29
|
+
|
|
30
|
+
const onLeftClick = () => {
|
|
31
|
+
if (currentIndex === 0) setCurrentIndex(bookLength);
|
|
32
|
+
else setCurrentIndex(index => index - 1);
|
|
33
|
+
};
|
|
34
|
+
const onRightClick = () => {
|
|
35
|
+
if (currentIndex === bookLength) setCurrentIndex(0);
|
|
36
|
+
else setCurrentIndex(index => index + 1);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const getCurrentContentSlice = () => {
|
|
40
|
+
return slicedContent[currentIndex];
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<Draggable>
|
|
45
|
+
<Container>
|
|
46
|
+
<CloseButton onPointerDown={onClose}>X</CloseButton>
|
|
47
|
+
<ColumnBook isLastPage={currentIndex === bookLength}>
|
|
48
|
+
{getCurrentContentSlice()}
|
|
49
|
+
</ColumnBook>
|
|
50
|
+
|
|
51
|
+
<ArrowContainer>
|
|
52
|
+
{currentIndex >= 1 && (
|
|
53
|
+
<SelectArrow
|
|
54
|
+
direction="left"
|
|
55
|
+
onPointerDown={onLeftClick}
|
|
56
|
+
></SelectArrow>
|
|
57
|
+
)}
|
|
58
|
+
{currentIndex !== bookLength && (
|
|
59
|
+
<SelectArrow
|
|
60
|
+
direction="right"
|
|
61
|
+
onPointerDown={onRightClick}
|
|
62
|
+
></SelectArrow>
|
|
63
|
+
)}
|
|
64
|
+
</ArrowContainer>
|
|
65
|
+
</Container>
|
|
66
|
+
</Draggable>
|
|
67
|
+
);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const Container = styled.div`
|
|
71
|
+
background-image: url(${Book});
|
|
72
|
+
background-repeat: no-repeat;
|
|
73
|
+
position: relative;
|
|
74
|
+
width: 778px;
|
|
75
|
+
height: 463px;
|
|
76
|
+
background-position-y: -1rem;
|
|
77
|
+
`;
|
|
78
|
+
|
|
79
|
+
const CloseButton = styled.p`
|
|
80
|
+
position: absolute;
|
|
81
|
+
top: 1.9rem;
|
|
82
|
+
right: 5rem;
|
|
83
|
+
font-size: ${uiFonts.size.large} !important;
|
|
84
|
+
`;
|
|
85
|
+
|
|
86
|
+
interface IColumnBook {
|
|
87
|
+
isLastPage: boolean;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const ColumnBook = styled.span<IColumnBook>`
|
|
91
|
+
position: absolute;
|
|
92
|
+
left: 5.2rem;
|
|
93
|
+
top: 3.8rem;
|
|
94
|
+
width: ${({ isLastPage }) => (!isLastPage ? '77%' : '37%')};
|
|
95
|
+
column-count: ${({ isLastPage }) => (isLastPage ? 1 : 2)};
|
|
96
|
+
grid-gap: 56px;
|
|
97
|
+
min-height: 340px;
|
|
98
|
+
`;
|
|
99
|
+
const ArrowContainer = styled.span`
|
|
100
|
+
display: flex;
|
|
101
|
+
height: 100%;
|
|
102
|
+
align-items: center;
|
|
103
|
+
`;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
export interface ITextArea
|
|
4
|
-
extends React.DetailedHTMLProps<
|
|
5
|
-
React.TextareaHTMLAttributes<HTMLTextAreaElement>,
|
|
6
|
-
HTMLTextAreaElement
|
|
7
|
-
> {}
|
|
8
|
-
|
|
9
|
-
export const TextArea: React.FC<ITextArea> = ({ ...props }) => {
|
|
10
|
-
return <textarea {...props} />;
|
|
11
|
-
};
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export interface ITextArea
|
|
4
|
+
extends React.DetailedHTMLProps<
|
|
5
|
+
React.TextareaHTMLAttributes<HTMLTextAreaElement>,
|
|
6
|
+
HTMLTextAreaElement
|
|
7
|
+
> {}
|
|
8
|
+
|
|
9
|
+
export const TextArea: React.FC<ITextArea> = ({ ...props }) => {
|
|
10
|
+
return <textarea {...props} />;
|
|
11
|
+
};
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import styled from 'styled-components';
|
|
3
|
-
|
|
4
|
-
import { PeriodOfDay } from '@rpg-engine/shared';
|
|
5
|
-
import AfternoonGif from './gif/afternoon.gif';
|
|
6
|
-
import MorningGif from './gif/morning.gif';
|
|
7
|
-
import NightGif from './gif/night.gif';
|
|
8
|
-
|
|
9
|
-
export interface IPeriodOfDayDisplayProps {
|
|
10
|
-
periodOfDay: PeriodOfDay;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export const DayNightPeriod: React.FC<IPeriodOfDayDisplayProps> = ({
|
|
14
|
-
periodOfDay,
|
|
15
|
-
}) => {
|
|
16
|
-
const periodOfDaySrcFiles = {
|
|
17
|
-
[PeriodOfDay.Morning]: MorningGif,
|
|
18
|
-
[PeriodOfDay.Afternoon]: AfternoonGif,
|
|
19
|
-
[PeriodOfDay.Night]: NightGif,
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
return (
|
|
23
|
-
<GifContainer>
|
|
24
|
-
<img src={periodOfDaySrcFiles[periodOfDay]} />
|
|
25
|
-
</GifContainer>
|
|
26
|
-
);
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const GifContainer = styled.div`
|
|
30
|
-
width: 100%;
|
|
31
|
-
|
|
32
|
-
img {
|
|
33
|
-
width: 67%;
|
|
34
|
-
}
|
|
35
|
-
`;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
|
|
4
|
+
import { PeriodOfDay } from '@rpg-engine/shared';
|
|
5
|
+
import AfternoonGif from './gif/afternoon.gif';
|
|
6
|
+
import MorningGif from './gif/morning.gif';
|
|
7
|
+
import NightGif from './gif/night.gif';
|
|
8
|
+
|
|
9
|
+
export interface IPeriodOfDayDisplayProps {
|
|
10
|
+
periodOfDay: PeriodOfDay;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const DayNightPeriod: React.FC<IPeriodOfDayDisplayProps> = ({
|
|
14
|
+
periodOfDay,
|
|
15
|
+
}) => {
|
|
16
|
+
const periodOfDaySrcFiles = {
|
|
17
|
+
[PeriodOfDay.Morning]: MorningGif,
|
|
18
|
+
[PeriodOfDay.Afternoon]: AfternoonGif,
|
|
19
|
+
[PeriodOfDay.Night]: NightGif,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<GifContainer>
|
|
24
|
+
<img src={periodOfDaySrcFiles[periodOfDay]} />
|
|
25
|
+
</GifContainer>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const GifContainer = styled.div`
|
|
30
|
+
width: 100%;
|
|
31
|
+
|
|
32
|
+
img {
|
|
33
|
+
width: 67%;
|
|
34
|
+
}
|
|
35
|
+
`;
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
import { PeriodOfDay } from '@rpg-engine/shared';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import Draggable from 'react-draggable';
|
|
4
|
-
import styled from 'styled-components';
|
|
5
|
-
import { uiFonts } from '../../constants/uiFonts';
|
|
6
|
-
import { DayNightPeriod } from './DayNightPeriod/DayNightPeriod';
|
|
7
|
-
|
|
8
|
-
import ClockWidgetImg from './img/clockwidget.png';
|
|
9
|
-
|
|
10
|
-
export interface IClockWidgetProps {
|
|
11
|
-
onClose?: () => void;
|
|
12
|
-
TimeClock: string;
|
|
13
|
-
periodOfDay: PeriodOfDay;
|
|
14
|
-
scale?: number;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const TimeWidget: React.FC<IClockWidgetProps> = ({
|
|
18
|
-
onClose,
|
|
19
|
-
TimeClock,
|
|
20
|
-
periodOfDay,
|
|
21
|
-
scale,
|
|
22
|
-
}) => {
|
|
23
|
-
return (
|
|
24
|
-
<Draggable scale={scale}>
|
|
25
|
-
<WidgetContainer>
|
|
26
|
-
<CloseButton onPointerDown={onClose}>X</CloseButton>
|
|
27
|
-
<DayNightContainer>
|
|
28
|
-
<DayNightPeriod periodOfDay={periodOfDay} />
|
|
29
|
-
</DayNightContainer>
|
|
30
|
-
<Time>{TimeClock}</Time>
|
|
31
|
-
</WidgetContainer>
|
|
32
|
-
</Draggable>
|
|
33
|
-
);
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const WidgetContainer = styled.div`
|
|
37
|
-
background-image: url(${ClockWidgetImg});
|
|
38
|
-
background-size: 10rem;
|
|
39
|
-
background-repeat: no-repeat;
|
|
40
|
-
width: 10rem;
|
|
41
|
-
position: absolute;
|
|
42
|
-
height: 100px;
|
|
43
|
-
`;
|
|
44
|
-
|
|
45
|
-
const Time = styled.div`
|
|
46
|
-
top: 0.75rem;
|
|
47
|
-
right: 0.5rem;
|
|
48
|
-
position: absolute;
|
|
49
|
-
font-size: ${uiFonts.size.small};
|
|
50
|
-
color: white;
|
|
51
|
-
`;
|
|
52
|
-
|
|
53
|
-
const CloseButton = styled.p`
|
|
54
|
-
position: absolute;
|
|
55
|
-
top: -0.5rem;
|
|
56
|
-
margin: 0;
|
|
57
|
-
right: -0.2rem;
|
|
58
|
-
font-size: ${uiFonts.size.small} !important;
|
|
59
|
-
z-index: 1;
|
|
60
|
-
`;
|
|
61
|
-
|
|
62
|
-
const DayNightContainer = styled.div`
|
|
63
|
-
margin-top: -0.3rem;
|
|
64
|
-
margin-left: -0.3rem;
|
|
65
|
-
`;
|
|
1
|
+
import { PeriodOfDay } from '@rpg-engine/shared';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import Draggable from 'react-draggable';
|
|
4
|
+
import styled from 'styled-components';
|
|
5
|
+
import { uiFonts } from '../../constants/uiFonts';
|
|
6
|
+
import { DayNightPeriod } from './DayNightPeriod/DayNightPeriod';
|
|
7
|
+
|
|
8
|
+
import ClockWidgetImg from './img/clockwidget.png';
|
|
9
|
+
|
|
10
|
+
export interface IClockWidgetProps {
|
|
11
|
+
onClose?: () => void;
|
|
12
|
+
TimeClock: string;
|
|
13
|
+
periodOfDay: PeriodOfDay;
|
|
14
|
+
scale?: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const TimeWidget: React.FC<IClockWidgetProps> = ({
|
|
18
|
+
onClose,
|
|
19
|
+
TimeClock,
|
|
20
|
+
periodOfDay,
|
|
21
|
+
scale,
|
|
22
|
+
}) => {
|
|
23
|
+
return (
|
|
24
|
+
<Draggable scale={scale}>
|
|
25
|
+
<WidgetContainer>
|
|
26
|
+
<CloseButton onPointerDown={onClose}>X</CloseButton>
|
|
27
|
+
<DayNightContainer>
|
|
28
|
+
<DayNightPeriod periodOfDay={periodOfDay} />
|
|
29
|
+
</DayNightContainer>
|
|
30
|
+
<Time>{TimeClock}</Time>
|
|
31
|
+
</WidgetContainer>
|
|
32
|
+
</Draggable>
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const WidgetContainer = styled.div`
|
|
37
|
+
background-image: url(${ClockWidgetImg});
|
|
38
|
+
background-size: 10rem;
|
|
39
|
+
background-repeat: no-repeat;
|
|
40
|
+
width: 10rem;
|
|
41
|
+
position: absolute;
|
|
42
|
+
height: 100px;
|
|
43
|
+
`;
|
|
44
|
+
|
|
45
|
+
const Time = styled.div`
|
|
46
|
+
top: 0.75rem;
|
|
47
|
+
right: 0.5rem;
|
|
48
|
+
position: absolute;
|
|
49
|
+
font-size: ${uiFonts.size.small};
|
|
50
|
+
color: white;
|
|
51
|
+
`;
|
|
52
|
+
|
|
53
|
+
const CloseButton = styled.p`
|
|
54
|
+
position: absolute;
|
|
55
|
+
top: -0.5rem;
|
|
56
|
+
margin: 0;
|
|
57
|
+
right: -0.2rem;
|
|
58
|
+
font-size: ${uiFonts.size.small} !important;
|
|
59
|
+
z-index: 1;
|
|
60
|
+
`;
|
|
61
|
+
|
|
62
|
+
const DayNightContainer = styled.div`
|
|
63
|
+
margin-top: -0.3rem;
|
|
64
|
+
margin-left: -0.3rem;
|
|
65
|
+
`;
|