@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,104 +1,104 @@
|
|
|
1
|
-
import { IShortcut, ShortcutType } from '@rpg-engine/shared';
|
|
2
|
-
import { Meta, Story } from '@storybook/react';
|
|
3
|
-
import React, { useEffect, useState } from 'react';
|
|
4
|
-
import { RPGUIRoot } from '../components/RPGUIRoot';
|
|
5
|
-
import {
|
|
6
|
-
defaultShortcut,
|
|
7
|
-
SHORTCUTS_STORAGE_KEY,
|
|
8
|
-
} from '../components/Spellbook/constants';
|
|
9
|
-
import { mockSpells } from '../components/Spellbook/mockSpells';
|
|
10
|
-
import { ISpellbookProps, Spellbook } from '../components/Spellbook/Spellbook';
|
|
11
|
-
import atlasJSON from '../mocks/atlas/items/items.json';
|
|
12
|
-
import atlasIMG from '../mocks/atlas/items/items.png';
|
|
13
|
-
|
|
14
|
-
const meta: Meta = {
|
|
15
|
-
title: 'Spellbook',
|
|
16
|
-
component: Spellbook,
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export default meta;
|
|
20
|
-
|
|
21
|
-
const Template: Story<ISpellbookProps> = args => {
|
|
22
|
-
const [shortcuts, setShortcuts] = useState<IShortcut[]>([]);
|
|
23
|
-
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
const shortcuts = localStorage.getItem(SHORTCUTS_STORAGE_KEY);
|
|
26
|
-
if (shortcuts) {
|
|
27
|
-
setShortcuts(JSON.parse(shortcuts));
|
|
28
|
-
}
|
|
29
|
-
}, []);
|
|
30
|
-
|
|
31
|
-
const setSpellShortcut = (key: string, index: number) => {
|
|
32
|
-
const shortcuts = JSON.parse(
|
|
33
|
-
localStorage.getItem(SHORTCUTS_STORAGE_KEY) as string
|
|
34
|
-
) as IShortcut[];
|
|
35
|
-
|
|
36
|
-
const spell = mockSpells.find(s => s.key === key);
|
|
37
|
-
if (!spell) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (!shortcuts) {
|
|
42
|
-
const newShortcuts: IShortcut[] = Array(6).fill(defaultShortcut);
|
|
43
|
-
|
|
44
|
-
newShortcuts[index] = {
|
|
45
|
-
type: ShortcutType.Spell,
|
|
46
|
-
payload: spell,
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
localStorage.setItem(SHORTCUTS_STORAGE_KEY, JSON.stringify(newShortcuts));
|
|
50
|
-
} else {
|
|
51
|
-
shortcuts[index] = {
|
|
52
|
-
type: ShortcutType.Spell,
|
|
53
|
-
payload: spell,
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
localStorage.setItem(SHORTCUTS_STORAGE_KEY, JSON.stringify(shortcuts));
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
setShortcuts(shortcuts);
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const removeShortcut = (index: number) => {
|
|
63
|
-
const shortcuts = JSON.parse(
|
|
64
|
-
localStorage.getItem(SHORTCUTS_STORAGE_KEY) as string
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
if (!shortcuts) return;
|
|
68
|
-
|
|
69
|
-
shortcuts[index] = defaultShortcut;
|
|
70
|
-
|
|
71
|
-
localStorage.setItem(SHORTCUTS_STORAGE_KEY, JSON.stringify(shortcuts));
|
|
72
|
-
|
|
73
|
-
setShortcuts(shortcuts);
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
return (
|
|
77
|
-
<RPGUIRoot>
|
|
78
|
-
<div
|
|
79
|
-
style={{
|
|
80
|
-
width: '50%',
|
|
81
|
-
height: '75%',
|
|
82
|
-
}}
|
|
83
|
-
>
|
|
84
|
-
<Spellbook
|
|
85
|
-
{...args}
|
|
86
|
-
setSpellShortcut={setSpellShortcut}
|
|
87
|
-
removeShortcut={removeShortcut}
|
|
88
|
-
shortcuts={shortcuts}
|
|
89
|
-
/>
|
|
90
|
-
</div>
|
|
91
|
-
</RPGUIRoot>
|
|
92
|
-
);
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
export const Default = Template.bind({});
|
|
96
|
-
Default.args = {
|
|
97
|
-
onClose: () => console.log('close'),
|
|
98
|
-
onSpellClick: spellKey => console.log(spellKey),
|
|
99
|
-
spells: mockSpells,
|
|
100
|
-
magicLevel: 3,
|
|
101
|
-
mana: 5,
|
|
102
|
-
atlasIMG,
|
|
103
|
-
atlasJSON,
|
|
104
|
-
};
|
|
1
|
+
import { IShortcut, ShortcutType } from '@rpg-engine/shared';
|
|
2
|
+
import { Meta, Story } from '@storybook/react';
|
|
3
|
+
import React, { useEffect, useState } from 'react';
|
|
4
|
+
import { RPGUIRoot } from '../components/RPGUIRoot';
|
|
5
|
+
import {
|
|
6
|
+
defaultShortcut,
|
|
7
|
+
SHORTCUTS_STORAGE_KEY,
|
|
8
|
+
} from '../components/Spellbook/constants';
|
|
9
|
+
import { mockSpells } from '../components/Spellbook/mockSpells';
|
|
10
|
+
import { ISpellbookProps, Spellbook } from '../components/Spellbook/Spellbook';
|
|
11
|
+
import atlasJSON from '../mocks/atlas/items/items.json';
|
|
12
|
+
import atlasIMG from '../mocks/atlas/items/items.png';
|
|
13
|
+
|
|
14
|
+
const meta: Meta = {
|
|
15
|
+
title: 'Spellbook',
|
|
16
|
+
component: Spellbook,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export default meta;
|
|
20
|
+
|
|
21
|
+
const Template: Story<ISpellbookProps> = args => {
|
|
22
|
+
const [shortcuts, setShortcuts] = useState<IShortcut[]>([]);
|
|
23
|
+
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
const shortcuts = localStorage.getItem(SHORTCUTS_STORAGE_KEY);
|
|
26
|
+
if (shortcuts) {
|
|
27
|
+
setShortcuts(JSON.parse(shortcuts));
|
|
28
|
+
}
|
|
29
|
+
}, []);
|
|
30
|
+
|
|
31
|
+
const setSpellShortcut = (key: string, index: number) => {
|
|
32
|
+
const shortcuts = JSON.parse(
|
|
33
|
+
localStorage.getItem(SHORTCUTS_STORAGE_KEY) as string
|
|
34
|
+
) as IShortcut[];
|
|
35
|
+
|
|
36
|
+
const spell = mockSpells.find(s => s.key === key);
|
|
37
|
+
if (!spell) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (!shortcuts) {
|
|
42
|
+
const newShortcuts: IShortcut[] = Array(6).fill(defaultShortcut);
|
|
43
|
+
|
|
44
|
+
newShortcuts[index] = {
|
|
45
|
+
type: ShortcutType.Spell,
|
|
46
|
+
payload: spell,
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
localStorage.setItem(SHORTCUTS_STORAGE_KEY, JSON.stringify(newShortcuts));
|
|
50
|
+
} else {
|
|
51
|
+
shortcuts[index] = {
|
|
52
|
+
type: ShortcutType.Spell,
|
|
53
|
+
payload: spell,
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
localStorage.setItem(SHORTCUTS_STORAGE_KEY, JSON.stringify(shortcuts));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
setShortcuts(shortcuts);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const removeShortcut = (index: number) => {
|
|
63
|
+
const shortcuts = JSON.parse(
|
|
64
|
+
localStorage.getItem(SHORTCUTS_STORAGE_KEY) as string
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
if (!shortcuts) return;
|
|
68
|
+
|
|
69
|
+
shortcuts[index] = defaultShortcut;
|
|
70
|
+
|
|
71
|
+
localStorage.setItem(SHORTCUTS_STORAGE_KEY, JSON.stringify(shortcuts));
|
|
72
|
+
|
|
73
|
+
setShortcuts(shortcuts);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
return (
|
|
77
|
+
<RPGUIRoot>
|
|
78
|
+
<div
|
|
79
|
+
style={{
|
|
80
|
+
width: '50%',
|
|
81
|
+
height: '75%',
|
|
82
|
+
}}
|
|
83
|
+
>
|
|
84
|
+
<Spellbook
|
|
85
|
+
{...args}
|
|
86
|
+
setSpellShortcut={setSpellShortcut}
|
|
87
|
+
removeShortcut={removeShortcut}
|
|
88
|
+
shortcuts={shortcuts}
|
|
89
|
+
/>
|
|
90
|
+
</div>
|
|
91
|
+
</RPGUIRoot>
|
|
92
|
+
);
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export const Default = Template.bind({});
|
|
96
|
+
Default.args = {
|
|
97
|
+
onClose: () => console.log('close'),
|
|
98
|
+
onSpellClick: spellKey => console.log(spellKey),
|
|
99
|
+
spells: mockSpells,
|
|
100
|
+
magicLevel: 3,
|
|
101
|
+
mana: 5,
|
|
102
|
+
atlasIMG,
|
|
103
|
+
atlasJSON,
|
|
104
|
+
};
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import { Meta, Story } from '@storybook/react';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { RPGUIRoot } from '..';
|
|
4
|
-
import {
|
|
5
|
-
IStaticBookProps,
|
|
6
|
-
StaticBook,
|
|
7
|
-
} from '../components/StaticBook/StaticBook';
|
|
8
|
-
|
|
9
|
-
const meta: Meta = {
|
|
10
|
-
title: 'Static Book',
|
|
11
|
-
component: StaticBook,
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export default meta;
|
|
15
|
-
|
|
16
|
-
const Template: Story<IStaticBookProps> = args => (
|
|
17
|
-
<RPGUIRoot>
|
|
18
|
-
<StaticBook
|
|
19
|
-
{...args}
|
|
20
|
-
onClose={() => console.log('Trying to close the book!')}
|
|
21
|
-
/>
|
|
22
|
-
</RPGUIRoot>
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
export const Default = Template.bind({});
|
|
26
|
-
|
|
27
|
-
const bookMock =
|
|
28
|
-
'Computers and RPGs have always gone hand-in-hand. Even when the bes and Oubliette. A few, such as Oubliette, had simple graphics, though most started out as just text or used ASCII’s standard set of text-mode graphics The most successful dungeon crawler of all time is, of course, Blizzard’s Diablo. But Rogue’s longest-lived descendent is arguably a much more interesting game—1987’s Nethack. Technically, it was based on a Rogue clone called, yes, Hack, but let’s not quibble. Nethack takes the basic dungeon crawling concept and adds several decades worth of development. The original PC RPGs—such as MUDs, or multi-user dungeons—appeared in the mid-70s. These weren’t for home computers, but mainframes, typically found in universities. They tended to be based on either Dungeons & Dragons, which itself launched in 1974, or be variously disguised takes on Tolkien. These included Dungeon, DND, Orthanc, and Oubliette. A few, such as Oubliette, had simple graphics, though most started out as just text or used ASCII’s standard set of text-mode graphics The most successful dungeon crawler of all time is, of course, Blizzard’s Diablo. But Rogue’s longest-lived descendent is arguably a much more interesting game—1987’s Nethack. Technically, it was based on a Rogue clone called, yes, Hack, but let’s not quibble. Nethack takes the basic dungeon crawling concept and adds several decades worth of development. Despite the primitive technology, these games often offered surprising depth. Don Daglow’s Dungeon for instance, a 1975 D&D pastiche, offered control of an entire multiplayer party, mapping, NPCs with AI, line-of-sight-based combat, and both melee and ranged attacks. Moria, from the same year, served up wireframe graphics for its characters, and even featured rudimentary 3D views of its corridors. Small ones, with no detail, but let’s not forget that even Space Invaders wasn’t out yet! Ever wondered if throwing a custard pie in a basilisk’s face will stop its petrifying stare? Nethack not only answers that question (it will), but also implements blindness if you get hit by a pie yourself, causes you to break your code if a vegan character eats one (seriously), and ensures the attack doesn’t count if you’re on a pacifist run (it does no damage, no matter your combat bonus). This level of detail lead to the saying “The Dev Team Thinks Of Everything”. Many versions are now available, from the original ASCII-based game to graphical overhauls like Vulture’s Eye. All are free, as a condition of the distribution licence. While the original Rogue was a single-player game, the first multiplayer game was probably 1980’s MUD, or Multi-User Dungeon. This was a text-based game, but with the ability to play with other people. It was also the first game to use the term “multiplayer” in its name. MUDs were hugely popular, and spawned a whole genre of games, including the aforementioned Nethack. The most successful of these was probably 1988’s MUD1, which was so popular that it was ported to the Commodore 64. The most successful of these was probably 1988’s MUD1, which was so popular that it was ported to the Commodore 64. The most successful of these was probably 1988’s MUD1, which was so popular that it was ported to the Commodore 64. The most successful of these was probably 1988’s MUD1, which was so popular that it was ported to the Commodore 64. ';
|
|
29
|
-
|
|
30
|
-
Default.args = {
|
|
31
|
-
content: bookMock,
|
|
32
|
-
};
|
|
1
|
+
import { Meta, Story } from '@storybook/react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { RPGUIRoot } from '..';
|
|
4
|
+
import {
|
|
5
|
+
IStaticBookProps,
|
|
6
|
+
StaticBook,
|
|
7
|
+
} from '../components/StaticBook/StaticBook';
|
|
8
|
+
|
|
9
|
+
const meta: Meta = {
|
|
10
|
+
title: 'Static Book',
|
|
11
|
+
component: StaticBook,
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default meta;
|
|
15
|
+
|
|
16
|
+
const Template: Story<IStaticBookProps> = args => (
|
|
17
|
+
<RPGUIRoot>
|
|
18
|
+
<StaticBook
|
|
19
|
+
{...args}
|
|
20
|
+
onClose={() => console.log('Trying to close the book!')}
|
|
21
|
+
/>
|
|
22
|
+
</RPGUIRoot>
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
export const Default = Template.bind({});
|
|
26
|
+
|
|
27
|
+
const bookMock =
|
|
28
|
+
'Computers and RPGs have always gone hand-in-hand. Even when the bes and Oubliette. A few, such as Oubliette, had simple graphics, though most started out as just text or used ASCII’s standard set of text-mode graphics The most successful dungeon crawler of all time is, of course, Blizzard’s Diablo. But Rogue’s longest-lived descendent is arguably a much more interesting game—1987’s Nethack. Technically, it was based on a Rogue clone called, yes, Hack, but let’s not quibble. Nethack takes the basic dungeon crawling concept and adds several decades worth of development. The original PC RPGs—such as MUDs, or multi-user dungeons—appeared in the mid-70s. These weren’t for home computers, but mainframes, typically found in universities. They tended to be based on either Dungeons & Dragons, which itself launched in 1974, or be variously disguised takes on Tolkien. These included Dungeon, DND, Orthanc, and Oubliette. A few, such as Oubliette, had simple graphics, though most started out as just text or used ASCII’s standard set of text-mode graphics The most successful dungeon crawler of all time is, of course, Blizzard’s Diablo. But Rogue’s longest-lived descendent is arguably a much more interesting game—1987’s Nethack. Technically, it was based on a Rogue clone called, yes, Hack, but let’s not quibble. Nethack takes the basic dungeon crawling concept and adds several decades worth of development. Despite the primitive technology, these games often offered surprising depth. Don Daglow’s Dungeon for instance, a 1975 D&D pastiche, offered control of an entire multiplayer party, mapping, NPCs with AI, line-of-sight-based combat, and both melee and ranged attacks. Moria, from the same year, served up wireframe graphics for its characters, and even featured rudimentary 3D views of its corridors. Small ones, with no detail, but let’s not forget that even Space Invaders wasn’t out yet! Ever wondered if throwing a custard pie in a basilisk’s face will stop its petrifying stare? Nethack not only answers that question (it will), but also implements blindness if you get hit by a pie yourself, causes you to break your code if a vegan character eats one (seriously), and ensures the attack doesn’t count if you’re on a pacifist run (it does no damage, no matter your combat bonus). This level of detail lead to the saying “The Dev Team Thinks Of Everything”. Many versions are now available, from the original ASCII-based game to graphical overhauls like Vulture’s Eye. All are free, as a condition of the distribution licence. While the original Rogue was a single-player game, the first multiplayer game was probably 1980’s MUD, or Multi-User Dungeon. This was a text-based game, but with the ability to play with other people. It was also the first game to use the term “multiplayer” in its name. MUDs were hugely popular, and spawned a whole genre of games, including the aforementioned Nethack. The most successful of these was probably 1988’s MUD1, which was so popular that it was ported to the Commodore 64. The most successful of these was probably 1988’s MUD1, which was so popular that it was ported to the Commodore 64. The most successful of these was probably 1988’s MUD1, which was so popular that it was ported to the Commodore 64. The most successful of these was probably 1988’s MUD1, which was so popular that it was ported to the Commodore 64. ';
|
|
29
|
+
|
|
30
|
+
Default.args = {
|
|
31
|
+
content: bookMock,
|
|
32
|
+
};
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import { Meta, Story } from '@storybook/react';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { RPGUIRoot } from '../../src';
|
|
4
|
-
import {
|
|
5
|
-
IInputProps,
|
|
6
|
-
Input as InputComponent,
|
|
7
|
-
} from '../../src/components/Input';
|
|
8
|
-
import {
|
|
9
|
-
ITextArea,
|
|
10
|
-
TextArea as TextAreaComponent,
|
|
11
|
-
} from '../../src/components/TextArea';
|
|
12
|
-
|
|
13
|
-
const meta: Meta = {
|
|
14
|
-
title: 'Text',
|
|
15
|
-
component: InputComponent,
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export default meta;
|
|
19
|
-
|
|
20
|
-
const InputTemplate: Story<IInputProps> = args => (
|
|
21
|
-
<RPGUIRoot>
|
|
22
|
-
<InputComponent {...args} />
|
|
23
|
-
</RPGUIRoot>
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
export const Input = InputTemplate.bind({});
|
|
27
|
-
|
|
28
|
-
Input.args = {
|
|
29
|
-
placeholder: 'Test placeholder',
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
const TextAreaTemplate: Story<ITextArea> = args => (
|
|
33
|
-
<RPGUIRoot>
|
|
34
|
-
<TextAreaComponent {...args} />
|
|
35
|
-
</RPGUIRoot>
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
export const TextArea = TextAreaTemplate.bind({});
|
|
39
|
-
|
|
40
|
-
TextArea.args = {
|
|
41
|
-
placeholder: 'Test placeholder',
|
|
42
|
-
};
|
|
1
|
+
import { Meta, Story } from '@storybook/react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { RPGUIRoot } from '../../src';
|
|
4
|
+
import {
|
|
5
|
+
IInputProps,
|
|
6
|
+
Input as InputComponent,
|
|
7
|
+
} from '../../src/components/Input';
|
|
8
|
+
import {
|
|
9
|
+
ITextArea,
|
|
10
|
+
TextArea as TextAreaComponent,
|
|
11
|
+
} from '../../src/components/TextArea';
|
|
12
|
+
|
|
13
|
+
const meta: Meta = {
|
|
14
|
+
title: 'Text',
|
|
15
|
+
component: InputComponent,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export default meta;
|
|
19
|
+
|
|
20
|
+
const InputTemplate: Story<IInputProps> = args => (
|
|
21
|
+
<RPGUIRoot>
|
|
22
|
+
<InputComponent {...args} />
|
|
23
|
+
</RPGUIRoot>
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
export const Input = InputTemplate.bind({});
|
|
27
|
+
|
|
28
|
+
Input.args = {
|
|
29
|
+
placeholder: 'Test placeholder',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const TextAreaTemplate: Story<ITextArea> = args => (
|
|
33
|
+
<RPGUIRoot>
|
|
34
|
+
<TextAreaComponent {...args} />
|
|
35
|
+
</RPGUIRoot>
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
export const TextArea = TextAreaTemplate.bind({});
|
|
39
|
+
|
|
40
|
+
TextArea.args = {
|
|
41
|
+
placeholder: 'Test placeholder',
|
|
42
|
+
};
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { PeriodOfDay } from '@rpg-engine/shared';
|
|
2
|
-
import { Meta, Story } from '@storybook/react';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { RPGUIRoot } from '../components/RPGUIRoot';
|
|
5
|
-
import {
|
|
6
|
-
IClockWidgetProps,
|
|
7
|
-
TimeWidget,
|
|
8
|
-
} from '../components/TimeWidget/TimeWidget';
|
|
9
|
-
|
|
10
|
-
const meta: Meta = {
|
|
11
|
-
title: 'Time Widget',
|
|
12
|
-
component: TimeWidget,
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export default meta;
|
|
16
|
-
|
|
17
|
-
const Template: Story<IClockWidgetProps> = args => (
|
|
18
|
-
<RPGUIRoot>
|
|
19
|
-
<TimeWidget {...args} />
|
|
20
|
-
</RPGUIRoot>
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
export const Default = Template.bind({});
|
|
24
|
-
Default.args = {
|
|
25
|
-
TimeClock: '10:00',
|
|
26
|
-
periodOfDay: PeriodOfDay.Morning,
|
|
27
|
-
};
|
|
1
|
+
import { PeriodOfDay } from '@rpg-engine/shared';
|
|
2
|
+
import { Meta, Story } from '@storybook/react';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { RPGUIRoot } from '../components/RPGUIRoot';
|
|
5
|
+
import {
|
|
6
|
+
IClockWidgetProps,
|
|
7
|
+
TimeWidget,
|
|
8
|
+
} from '../components/TimeWidget/TimeWidget';
|
|
9
|
+
|
|
10
|
+
const meta: Meta = {
|
|
11
|
+
title: 'Time Widget',
|
|
12
|
+
component: TimeWidget,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export default meta;
|
|
16
|
+
|
|
17
|
+
const Template: Story<IClockWidgetProps> = args => (
|
|
18
|
+
<RPGUIRoot>
|
|
19
|
+
<TimeWidget {...args} />
|
|
20
|
+
</RPGUIRoot>
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
export const Default = Template.bind({});
|
|
24
|
+
Default.args = {
|
|
25
|
+
TimeClock: '10:00',
|
|
26
|
+
periodOfDay: PeriodOfDay.Morning,
|
|
27
|
+
};
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
import { ITradeRequestItem } from '@rpg-engine/shared';
|
|
2
|
-
import { Meta, Story } from '@storybook/react';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { RPGUIRoot } from '../components/RPGUIRoot';
|
|
5
|
-
import { itemMock } from '../components/TradingMenu/items.mock';
|
|
6
|
-
import {
|
|
7
|
-
ITradingMenu,
|
|
8
|
-
TradingMenu,
|
|
9
|
-
} from '../components/TradingMenu/TradingMenu';
|
|
10
|
-
import atlasJSON from '../mocks/atlas/items/items.json';
|
|
11
|
-
import atlasIMG from '../mocks/atlas/items/items.png';
|
|
12
|
-
import { equipmentSetMock } from '../mocks/equipmentSet.mocks';
|
|
13
|
-
|
|
14
|
-
const meta: Meta = {
|
|
15
|
-
title: 'Trading Menu',
|
|
16
|
-
component: TradingMenu,
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export default meta;
|
|
20
|
-
|
|
21
|
-
const Template: Story<ITradingMenu> = args => (
|
|
22
|
-
<RPGUIRoot>
|
|
23
|
-
<TradingMenu {...args} />
|
|
24
|
-
</RPGUIRoot>
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
export const Default = Template.bind({});
|
|
28
|
-
|
|
29
|
-
const onConfirm = (items: ITradeRequestItem[]) => {
|
|
30
|
-
console.log('on confirm trading menu');
|
|
31
|
-
console.log(items);
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const onClose = () => {
|
|
35
|
-
console.log('close');
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
Default.args = {
|
|
39
|
-
traderItems: itemMock,
|
|
40
|
-
onClose: onClose,
|
|
41
|
-
onConfirm: onConfirm,
|
|
42
|
-
type: 'buy',
|
|
43
|
-
atlasJSON: atlasJSON,
|
|
44
|
-
atlasIMG: atlasIMG,
|
|
45
|
-
characterAvailableGold: 1000,
|
|
46
|
-
equipmentSet: equipmentSetMock,
|
|
47
|
-
};
|
|
1
|
+
import { ITradeRequestItem } from '@rpg-engine/shared';
|
|
2
|
+
import { Meta, Story } from '@storybook/react';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { RPGUIRoot } from '../components/RPGUIRoot';
|
|
5
|
+
import { itemMock } from '../components/TradingMenu/items.mock';
|
|
6
|
+
import {
|
|
7
|
+
ITradingMenu,
|
|
8
|
+
TradingMenu,
|
|
9
|
+
} from '../components/TradingMenu/TradingMenu';
|
|
10
|
+
import atlasJSON from '../mocks/atlas/items/items.json';
|
|
11
|
+
import atlasIMG from '../mocks/atlas/items/items.png';
|
|
12
|
+
import { equipmentSetMock } from '../mocks/equipmentSet.mocks';
|
|
13
|
+
|
|
14
|
+
const meta: Meta = {
|
|
15
|
+
title: 'Trading Menu',
|
|
16
|
+
component: TradingMenu,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export default meta;
|
|
20
|
+
|
|
21
|
+
const Template: Story<ITradingMenu> = args => (
|
|
22
|
+
<RPGUIRoot>
|
|
23
|
+
<TradingMenu {...args} />
|
|
24
|
+
</RPGUIRoot>
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
export const Default = Template.bind({});
|
|
28
|
+
|
|
29
|
+
const onConfirm = (items: ITradeRequestItem[]) => {
|
|
30
|
+
console.log('on confirm trading menu');
|
|
31
|
+
console.log(items);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const onClose = () => {
|
|
35
|
+
console.log('close');
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
Default.args = {
|
|
39
|
+
traderItems: itemMock,
|
|
40
|
+
onClose: onClose,
|
|
41
|
+
onConfirm: onConfirm,
|
|
42
|
+
type: 'buy',
|
|
43
|
+
atlasJSON: atlasJSON,
|
|
44
|
+
atlasIMG: atlasIMG,
|
|
45
|
+
characterAvailableGold: 1000,
|
|
46
|
+
equipmentSet: equipmentSetMock,
|
|
47
|
+
};
|
package/src/types/eventTypes.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export interface IPosition {
|
|
2
|
-
x: number;
|
|
3
|
-
y: number;
|
|
4
|
-
}
|
|
1
|
+
export interface IPosition {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
}
|
package/src/types/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare module '*.gif';
|
|
2
|
-
declare module '*.png';
|
|
1
|
+
declare module '*.gif';
|
|
2
|
+
declare module '*.png';
|