@rpg-engine/long-bow 0.5.26 → 0.5.28

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpg-engine/long-bow",
3
- "version": "0.5.26",
3
+ "version": "0.5.28",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -83,7 +83,7 @@
83
83
  },
84
84
  "dependencies": {
85
85
  "@rollup/plugin-image": "^2.1.1",
86
- "@rpg-engine/shared": "^0.8.87",
86
+ "@rpg-engine/shared": "^0.8.92",
87
87
  "dayjs": "^1.11.2",
88
88
  "font-awesome": "^4.7.0",
89
89
  "fs-extra": "^10.1.0",
@@ -21,6 +21,7 @@ export const DraggedItem = ({
21
21
  scale,
22
22
  }: IProps): JSX.Element | null => {
23
23
  const { item } = useDragging();
24
+
24
25
  const { x, y } = useCursorPosition({
25
26
  scale,
26
27
  });
@@ -29,6 +30,10 @@ export const DraggedItem = ({
29
30
  return null;
30
31
  }
31
32
 
33
+ if (x === 0 && y === 0) {
34
+ return null;
35
+ }
36
+
32
37
  const centeredX = x - OFFSET;
33
38
  const centeredY = y - OFFSET;
34
39
 
@@ -286,9 +286,9 @@ export const ItemSlot: React.FC<IProps> = observer(
286
286
  return;
287
287
  }
288
288
 
289
- setDraggingItem(item);
290
-
291
289
  if (onDragStart && containerType) {
290
+ setDraggingItem(item);
291
+
292
292
  onDragStart(item, slotIndex, containerType);
293
293
  }
294
294
  }}
@@ -433,7 +433,7 @@ const Container = styled.div<ContainerTypes>`
433
433
  const ItemContainer = styled.div<{ isFocused?: boolean }>`
434
434
  width: 64px;
435
435
  height: 64px;
436
- // This fixes an issue where if you drag an item inside of a scrollable container (overflow), its cut out
436
+
437
437
  position: relative;
438
438
  ${props => props.isFocused && 'z-index: 100; pointer-events: none;'};
439
439
  `;
@@ -81,12 +81,8 @@ export const ItemSlotRenderer: React.FC<IProps> = ({
81
81
  switch (containerType) {
82
82
  case ItemContainerType.Equipment:
83
83
  return renderEquipment(itemToRender);
84
- case ItemContainerType.Inventory:
85
- return renderItem(itemToRender);
86
- case ItemContainerType.Depot:
87
- return renderItem(itemToRender);
88
84
  default:
89
- return null;
85
+ return renderItem(itemToRender);
90
86
  }
91
87
  };
92
88
 
@@ -1,5 +1,5 @@
1
1
  import { GRID_HEIGHT, GRID_WIDTH } from '@rpg-engine/shared';
2
- import { useEffect, useState } from 'react';
2
+ import { useCallback, useEffect, useState } from 'react';
3
3
  import { IPosition } from '../types/eventTypes';
4
4
 
5
5
  interface ICursorPositionProps {
@@ -9,10 +9,15 @@ interface ICursorPositionProps {
9
9
  export const useCursorPosition = ({ scale = 1 }: ICursorPositionProps): IPosition => {
10
10
  const [position, setPosition] = useState<IPosition>({ x: 0, y: 0 });
11
11
 
12
- const setFromEvent = (e: MouseEvent | TouchEvent) => {
12
+ const scalePosition = useCallback((x: number, y: number): IPosition => {
13
+ return {
14
+ x: ((x - GRID_WIDTH / 2) / scale) + GRID_WIDTH / 2,
15
+ y: ((y - GRID_HEIGHT / 2) / scale) + GRID_HEIGHT / 2,
16
+ };
17
+ }, [scale]);
18
+
19
+ const setFromEvent = useCallback((e: MouseEvent | TouchEvent) => {
13
20
  let x, y;
14
- const viewportCenterX = window.innerWidth / 2 - GRID_WIDTH;
15
- const viewportCenterY = window.innerHeight / - GRID_HEIGHT;
16
21
 
17
22
  if ('touches' in e) {
18
23
  x = e.touches[0].clientX;
@@ -22,25 +27,29 @@ export const useCursorPosition = ({ scale = 1 }: ICursorPositionProps): IPositio
22
27
  y = e.clientY;
23
28
  }
24
29
 
25
- // Adjusting for the global scale
26
- // Assuming the element is centrally located
27
- setPosition({
28
- x: (x - viewportCenterX) / scale + viewportCenterX,
29
- y: (y - viewportCenterY) / scale + viewportCenterY
30
- });
31
- };
30
+ const scaledPosition = scalePosition(x, y);
31
+ setPosition(scaledPosition);
32
+ }, [scale, scalePosition]);
33
+
34
+ const cleanup = useCallback(() => {
35
+ setPosition({ x: 0, y: 0 });
36
+ }, []);
32
37
 
33
38
  useEffect(() => {
34
- window.addEventListener('mousemove', setFromEvent);
35
- window.addEventListener('touchmove', setFromEvent);
39
+ const handleEvent = (e: Event) => setFromEvent(e as MouseEvent | TouchEvent);
36
40
 
37
- console.log("SCALE IS ", scale)
41
+ window.addEventListener('mousemove', handleEvent);
42
+ window.addEventListener('touchmove', handleEvent);
43
+ window.addEventListener('mouseup', cleanup);
44
+ window.addEventListener('touchend', cleanup);
38
45
 
39
46
  return () => {
40
- window.removeEventListener('mousemove', setFromEvent);
41
- window.removeEventListener('touchmove', setFromEvent);
47
+ window.removeEventListener('mousemove', handleEvent);
48
+ window.removeEventListener('touchmove', handleEvent);
49
+ window.removeEventListener('mouseup', cleanup);
50
+ window.removeEventListener('touchend', cleanup);
42
51
  };
43
- }, [scale]);
52
+ }, [setFromEvent, cleanup]);
44
53
 
45
54
  return position;
46
55
  };
@@ -31,7 +31,7 @@ Default.args = {
31
31
  onActionClick: () => console.log('action'),
32
32
  onCancelClick: () => console.log('cancel attack'),
33
33
  mana: 100,
34
- inventory: itemContainerMock,
34
+ inventory: itemContainerMock(),
35
35
  atlasJSON,
36
36
  atlasIMG,
37
37
  };
@@ -35,5 +35,5 @@ Default.args = {
35
35
  mana: 100,
36
36
  atlasIMG,
37
37
  atlasJSON,
38
- inventory: itemContainerMock,
38
+ inventory: itemContainerMock(),
39
39
  };