From 8977cccbd34e044f22557704d2caf10b584c3c9d Mon Sep 17 00:00:00 2001 From: Bill Date: Mon, 28 Jun 2021 12:32:06 -0400 Subject: [PATCH] Add base wired & saving --- .vscode/settings.json | 3 +- package-lock.json | 14 +++ package.json | 2 + src/events/index.ts | 1 + src/events/wired/WiredEvent.ts | 6 ++ src/events/wired/index.ts | 1 + src/index.scss | 1 + src/views/wired/WiredMessageHandler.tsx | 58 ++++++++++- src/views/wired/WiredView.tsx | 97 ++++++------------- src/views/wired/WiredView.types.ts | 8 ++ .../wired/common/GetWiredActionLayout.tsx | 14 +++ src/views/wired/common/GetWiredLayout.tsx | 9 ++ src/views/wired/common/GetWiredTimeLocale.ts | 8 ++ .../wired/common/WiredActionLayoutCode.ts | 29 ++++++ src/views/wired/context/WiredContext.tsx | 22 +++++ src/views/wired/context/WiredContext.types.ts | 21 ++++ src/views/wired/utils/IWiredLayout.ts | 4 - src/views/wired/utils/WiredActionLayout.ts | 29 ------ .../actions/base/WiredActionBaseView.tsx | 57 +++++++---- .../actions/base/WiredActionBaseView.types.ts | 5 + .../WiredActionBotChangeFigureView.tsx | 50 ++++++++++ .../WiredActionBotFollowAvatarView.tsx | 23 +++++ .../WiredActionToggleFurniStateView.tsx | 12 --- src/views/wired/views/base/WiredBaseView.tsx | 79 +++++++++++++++ .../wired/views/base/WiredBaseView.types.ts | 6 ++ .../base/WiredConditionBaseView.tsx | 14 --- .../triggers/base/WiredTriggerBaseView.tsx | 14 --- 27 files changed, 425 insertions(+), 162 deletions(-) create mode 100644 src/events/wired/WiredEvent.ts create mode 100644 src/events/wired/index.ts create mode 100644 src/views/wired/common/GetWiredActionLayout.tsx create mode 100644 src/views/wired/common/GetWiredLayout.tsx create mode 100644 src/views/wired/common/GetWiredTimeLocale.ts create mode 100644 src/views/wired/common/WiredActionLayoutCode.ts create mode 100644 src/views/wired/context/WiredContext.tsx create mode 100644 src/views/wired/context/WiredContext.types.ts delete mode 100644 src/views/wired/utils/IWiredLayout.ts delete mode 100644 src/views/wired/utils/WiredActionLayout.ts create mode 100644 src/views/wired/views/actions/base/WiredActionBaseView.types.ts create mode 100644 src/views/wired/views/actions/bot-change-figure/WiredActionBotChangeFigureView.tsx create mode 100644 src/views/wired/views/actions/bot-follow-avatar/WiredActionBotFollowAvatarView.tsx delete mode 100644 src/views/wired/views/actions/toggle-furni-state/WiredActionToggleFurniStateView.tsx create mode 100644 src/views/wired/views/base/WiredBaseView.tsx create mode 100644 src/views/wired/views/base/WiredBaseView.types.ts delete mode 100644 src/views/wired/views/conditions/base/WiredConditionBaseView.tsx delete mode 100644 src/views/wired/views/triggers/base/WiredTriggerBaseView.tsx diff --git a/.vscode/settings.json b/.vscode/settings.json index 7b328b85..b0a56f10 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,5 +12,6 @@ "git.ignoreLimitWarning": true, "files.eol": "\n", "files.insertFinalNewline": true, - "files.trimFinalNewlines": true + "files.trimFinalNewlines": true, + "editor.wordWrap": "on" } diff --git a/package-lock.json b/package-lock.json index 66944ba0..3dc7f9fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2376,6 +2376,15 @@ "redux": "^4.0.0" } }, + "@types/react-slider": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/react-slider/-/react-slider-1.3.0.tgz", + "integrity": "sha512-Hr+P8wiqYAjeFTlf+NWPVGWW79npC8V7KkZdbPlMqo+iblcopPzE/z0m8503j2YmfxoKJKaPnrJe0a6spXacYQ==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, "@types/react-transition-group": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.1.tgz", @@ -15061,6 +15070,11 @@ "workbox-webpack-plugin": "5.1.4" } }, + "react-slider": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/react-slider/-/react-slider-1.3.1.tgz", + "integrity": "sha512-bD8hHJJUgAHI8g1F6PY6432l+Dmcs2fqzUwDhd+0HWDdvfjwNoXRNC2cL9OWyGTjYlJM92A8nF/w1X4pyHfytQ==" + }, "react-transition-group": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", diff --git a/package.json b/package.json index 82a862a6..260ece10 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "react-google-recaptcha": "^2.1.0", "react-redux": "^7.2.3", "react-scripts": "4.0.3", + "react-slider": "^1.3.1", "react-transition-group": "^4.4.1", "redux": "^4.0.5", "typescript": "^4.2.4", @@ -58,6 +59,7 @@ ] }, "devDependencies": { + "@types/react-slider": "^1.3.0", "@types/react-transition-group": "^4.4.1" } } diff --git a/src/events/index.ts b/src/events/index.ts index 9ec510a0..684c0bfa 100644 --- a/src/events/index.ts +++ b/src/events/index.ts @@ -5,3 +5,4 @@ export * from './inventory'; export * from './navigator'; export * from './notification-center'; export * from './room-widgets'; +export * from './wired'; diff --git a/src/events/wired/WiredEvent.ts b/src/events/wired/WiredEvent.ts new file mode 100644 index 00000000..d5959215 --- /dev/null +++ b/src/events/wired/WiredEvent.ts @@ -0,0 +1,6 @@ +import { NitroEvent } from 'nitro-renderer'; + +export class WiredEvent extends NitroEvent +{ + public static SAVE_WIRED: string = 'WE_SAVE_WIRED'; +} diff --git a/src/events/wired/index.ts b/src/events/wired/index.ts new file mode 100644 index 00000000..9f43fa22 --- /dev/null +++ b/src/events/wired/index.ts @@ -0,0 +1 @@ +export * from './WiredEvent'; diff --git a/src/index.scss b/src/index.scss index d1c389d9..08696a5c 100644 --- a/src/index.scss +++ b/src/index.scss @@ -1,5 +1,6 @@ @import url('https://fonts.googleapis.com/css2?family=Ubuntu+Condensed:wght@300;400;500&display=swap'); @import '../node_modules/animate.css/animate.css'; +@import '../node_modules/rc-slider/assets/index.css'; @import './assets/styles'; html, diff --git a/src/views/wired/WiredMessageHandler.tsx b/src/views/wired/WiredMessageHandler.tsx index 30990fc4..cae3aed7 100644 --- a/src/views/wired/WiredMessageHandler.tsx +++ b/src/views/wired/WiredMessageHandler.tsx @@ -1,6 +1,62 @@ -import { FC } from 'react'; +import { WiredFurniActionEvent, WiredFurniConditionEvent, WiredFurniTriggerEvent, WiredOpenEvent, WiredRewardResultMessageEvent, WiredSaveSuccessEvent, WiredValidationErrorEvent } from 'nitro-renderer'; +import { FC, useCallback } from 'react'; +import { CreateMessageHook } from '../../hooks/messages'; +import { useWiredContext } from './context/WiredContext'; export const WiredMessageHandler: FC<{}> = props => { + const { setTrigger = null } = useWiredContext(); + + const onWiredFurniActionEvent = useCallback((event: WiredFurniActionEvent) => + { + const parser = event.getParser(); + + setTrigger(parser.definition); + }, [ setTrigger ]); + + const onWiredFurniConditionEvent = useCallback((event: WiredFurniConditionEvent) => + { + const parser = event.getParser(); + + setTrigger(parser.definition); + }, [ setTrigger ]); + + const onWiredFurniTriggerEvent = useCallback((event: WiredFurniTriggerEvent) => + { + const parser = event.getParser(); + + setTrigger(parser.definition); + }, [ setTrigger ]); + + const onWiredOpenEvent = useCallback((event: WiredOpenEvent) => + { + const parser = event.getParser(); + }, []); + + const onWiredRewardResultMessageEvent = useCallback((event: WiredRewardResultMessageEvent) => + { + const parser = event.getParser(); + }, []); + + const onWiredSaveSuccessEvent = useCallback((event: WiredSaveSuccessEvent) => + { + const parser = event.getParser(); + + setTrigger(null); + }, [ setTrigger ]); + + const onWiredValidationErrorEvent = useCallback((event: WiredValidationErrorEvent) => + { + const parser = event.getParser(); + }, []); + + CreateMessageHook(WiredFurniActionEvent, onWiredFurniActionEvent); + CreateMessageHook(WiredFurniConditionEvent, onWiredFurniConditionEvent); + CreateMessageHook(WiredFurniTriggerEvent, onWiredFurniTriggerEvent); + CreateMessageHook(WiredOpenEvent, onWiredOpenEvent); + CreateMessageHook(WiredRewardResultMessageEvent, onWiredRewardResultMessageEvent); + CreateMessageHook(WiredSaveSuccessEvent, onWiredSaveSuccessEvent); + CreateMessageHook(WiredValidationErrorEvent, onWiredValidationErrorEvent); + return null; }; diff --git a/src/views/wired/WiredView.tsx b/src/views/wired/WiredView.tsx index 67b2cbad..7d6faba1 100644 --- a/src/views/wired/WiredView.tsx +++ b/src/views/wired/WiredView.tsx @@ -1,81 +1,42 @@ -import { ConditionDefinition, Nitro, TriggerDefinition, WiredActionDefinition, WiredFurniActionEvent, WiredFurniConditionEvent, WiredFurniTriggerEvent } from 'nitro-renderer'; -import { FC, useCallback, useEffect, useState } from 'react'; -import { CreateMessageHook } from '../../hooks/messages'; -import { NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../layout'; -import { LocalizeText } from '../../utils/LocalizeText'; -import { WiredActionBaseView } from './views/actions/base/WiredActionBaseView'; -import { WiredConditionBaseView } from './views/conditions/base/WiredConditionBaseView'; -import { WiredTriggerBaseView } from './views/triggers/base/WiredTriggerBaseView'; +import { Triggerable, UpdateActionMessageComposer, WiredActionDefinition } from 'nitro-renderer'; +import { FC, useCallback, useMemo, useState } from 'react'; +import { GetConnection } from '../../api'; +import { WiredEvent } from '../../events'; +import { useUiEvent } from '../../hooks/events'; +import { GetWiredLayout } from './common/GetWiredLayout'; +import { WiredContextProvider } from './context/WiredContext'; +import { WiredMessageHandler } from './WiredMessageHandler'; import { WiredFurniSelectorViewProps } from './WiredView.types'; export const WiredView: FC = props => { - const [ wiredDefinition, setWiredDefinition ] = useState(null); - const [ name, setName ] = useState(null); - const [ description, setDescription ] = useState(null); + const [ trigger, setTrigger ] = useState(null); + const [ intParams, setIntParams ] = useState(null); + const [ stringParam, setStringParam ] = useState(null); + const [ furniIds, setFurniIds ] = useState(null); + const [ actionDelay, setActionDelay ] = useState(null); - useEffect(() => + const wiredLayout = useMemo(() => { - if(!wiredDefinition) return; + return GetWiredLayout(trigger); + }, [ trigger ]); - const itemData = Nitro.instance.sessionDataManager.getFloorItemData(wiredDefinition.spriteId); - - if(!itemData) return; - - setName(itemData.name); - setDescription(itemData.description); - }, [ wiredDefinition ]); - - const getWiredType = useCallback(() => + const onWiredEvent = useCallback((event: WiredEvent) => { - if(wiredDefinition instanceof TriggerDefinition) - return 'trigger'; - else if(wiredDefinition instanceof ConditionDefinition) - return 'condition'; - else - return 'action'; + // check if owner & warn with confirm + + if(trigger instanceof WiredActionDefinition) + { + GetConnection().send(new UpdateActionMessageComposer(trigger.id, intParams, stringParam, furniIds, actionDelay, trigger.stuffTypeSelectionCode)); + } + }, [ trigger, intParams, stringParam, furniIds, actionDelay ]); - }, [ wiredDefinition ]); - - const getTypeBase = useCallback(() => - { - if(wiredDefinition instanceof TriggerDefinition) - return ; - else if(wiredDefinition instanceof ConditionDefinition) - return ; - else - return ; - - }, [ wiredDefinition ]); - - const onWiredFurniEvent = useCallback((event: WiredFurniTriggerEvent | WiredFurniConditionEvent | WiredFurniActionEvent) => - { - setWiredDefinition(event.getParser().definition); - }, [ setWiredDefinition ]); - - CreateMessageHook(WiredFurniTriggerEvent, onWiredFurniEvent); - CreateMessageHook(WiredFurniConditionEvent, onWiredFurniEvent); - CreateMessageHook(WiredFurniActionEvent, onWiredFurniEvent); - - if(!wiredDefinition) return null; + useUiEvent(WiredEvent.SAVE_WIRED, onWiredEvent); return ( - - {} } /> - -
- -
{ name }
-
-
{ description }
-
- { getTypeBase() } -
-
- - -
-
-
+ + + { wiredLayout } + ); }; diff --git a/src/views/wired/WiredView.types.ts b/src/views/wired/WiredView.types.ts index 44aaf900..ca325cc3 100644 --- a/src/views/wired/WiredView.types.ts +++ b/src/views/wired/WiredView.types.ts @@ -7,3 +7,11 @@ export class WiredLayoutViewProps { wiredDefinition: TriggerDefinition | WiredActionDefinition | ConditionDefinition; } + +export class WiredFurniType +{ + public static _Str_5431: number = 0; + public static _Str_4873: number = 1; + public static _Str_4991: number = 2; + public static _Str_5430: number = 3; +} diff --git a/src/views/wired/common/GetWiredActionLayout.tsx b/src/views/wired/common/GetWiredActionLayout.tsx new file mode 100644 index 00000000..b9ce455f --- /dev/null +++ b/src/views/wired/common/GetWiredActionLayout.tsx @@ -0,0 +1,14 @@ +import { WiredActionBotChangeFigureView } from '../views/actions/bot-change-figure/WiredActionBotChangeFigureView'; +import { WiredActionBotFollowAvatarView } from '../views/actions/bot-follow-avatar/WiredActionBotFollowAvatarView'; +import { WiredActionLayout } from './WiredActionLayoutCode'; + +export function GetWiredActionLayout(code: number): JSX.Element +{ + switch(code) + { + case WiredActionLayout.BOT_CHANGE_FIGURE: + return ; + case WiredActionLayout.BOT_FOLLOW_AVATAR: + return ; + } +} diff --git a/src/views/wired/common/GetWiredLayout.tsx b/src/views/wired/common/GetWiredLayout.tsx new file mode 100644 index 00000000..5f3ed3cf --- /dev/null +++ b/src/views/wired/common/GetWiredLayout.tsx @@ -0,0 +1,9 @@ +import { Triggerable, WiredActionDefinition } from 'nitro-renderer'; +import { GetWiredActionLayout } from './GetWiredActionLayout'; + +export function GetWiredLayout(trigger: Triggerable): JSX.Element +{ + if(trigger instanceof WiredActionDefinition) return GetWiredActionLayout(trigger.code); + + return null; +} diff --git a/src/views/wired/common/GetWiredTimeLocale.ts b/src/views/wired/common/GetWiredTimeLocale.ts new file mode 100644 index 00000000..02aa3b4e --- /dev/null +++ b/src/views/wired/common/GetWiredTimeLocale.ts @@ -0,0 +1,8 @@ +export function GetWiredTimeLocale(value: number): string +{ + const time = Math.floor((value / 2)); + + if(!(value % 2)) return time.toString(); + + return (time + 0.5).toString(); +} diff --git a/src/views/wired/common/WiredActionLayoutCode.ts b/src/views/wired/common/WiredActionLayoutCode.ts new file mode 100644 index 00000000..d501c152 --- /dev/null +++ b/src/views/wired/common/WiredActionLayoutCode.ts @@ -0,0 +1,29 @@ +export class WiredActionLayout +{ + public static TOGGLE_FURNI_STATE: number = 0; + public static RESET: number = 1; + public static SET_FURNI_STATE: number = 3; + public static MOVE_FURNI: number = 4; + public static GIVE_SCORE: number = 6; + public static CHAT: number = 7; + public static TELEPORT: number = 8; + public static JOIN_TEAM: number = 9; + public static LEAVE_TEAM: number = 10; + public static CHASE: number = 11; + public static FLEE: number = 12; + public static MOVE_TO_DIRECTION: number = 13; + public static GIVE_SCORE_TO_PREDEFINED_TEAM: number = 14; + public static TOGGLE_TO_RANDOM_STATE: number = 15; + public static MOVE_FURNI_TO: number = 16; + public static GIVE_REWARD: number = 17; + public static CALL_ANOTHER_STACK: number = 18; + public static KICK_FROM_ROOM: number = 19; + public static MUTE_USER: number = 20; + public static BOT_TELEPORT: number = 21; + public static BOT_MOVE: number = 22; + public static BOT_TALK: number = 23; + public static BOT_GIVE_HAND_ITEM: number = 24; + public static BOT_FOLLOW_AVATAR: number = 25; + public static BOT_CHANGE_FIGURE: number = 26; + public static BOT_TALK_DIRECT_TO_AVTR: number = 27; +} diff --git a/src/views/wired/context/WiredContext.tsx b/src/views/wired/context/WiredContext.tsx new file mode 100644 index 00000000..26c42a7a --- /dev/null +++ b/src/views/wired/context/WiredContext.tsx @@ -0,0 +1,22 @@ +import { createContext, FC, useContext } from 'react'; +import { IWiredContext, WiredContextProps } from './WiredContext.types'; + +const WiredContext = createContext({ + trigger: null, + setTrigger: null, + intParams: null, + setIntParams: null, + stringParam: null, + setStringParam: null, + furniIds: null, + setFurniIds: null, + actionDelay: null, + setActionDelay: null +}); + +export const WiredContextProvider: FC = props => +{ + return { props.children } +} + +export const useWiredContext = () => useContext(WiredContext); diff --git a/src/views/wired/context/WiredContext.types.ts b/src/views/wired/context/WiredContext.types.ts new file mode 100644 index 00000000..18e9c5ae --- /dev/null +++ b/src/views/wired/context/WiredContext.types.ts @@ -0,0 +1,21 @@ +import { Triggerable } from 'nitro-renderer'; +import { Dispatch, ProviderProps, SetStateAction } from 'react'; + +export interface IWiredContext +{ + trigger: Triggerable; + setTrigger: Dispatch>; + intParams: number[], + setIntParams: Dispatch>; + stringParam: string; + setStringParam: Dispatch>; + furniIds: number[]; + setFurniIds: Dispatch>; + actionDelay: number; + setActionDelay: Dispatch>; +} + +export interface WiredContextProps extends ProviderProps +{ + +} diff --git a/src/views/wired/utils/IWiredLayout.ts b/src/views/wired/utils/IWiredLayout.ts deleted file mode 100644 index 96d965d5..00000000 --- a/src/views/wired/utils/IWiredLayout.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface IWiredLayout -{ - code: number; -} diff --git a/src/views/wired/utils/WiredActionLayout.ts b/src/views/wired/utils/WiredActionLayout.ts deleted file mode 100644 index 78ec45d2..00000000 --- a/src/views/wired/utils/WiredActionLayout.ts +++ /dev/null @@ -1,29 +0,0 @@ -export class WiredActionLayout -{ - public static TOGGLE_FURNI_STATE: number = 0; - public static RESET: number = 1; - public static SET_FURNI_STATE: number = 3; - public static MOVE_FURNI: number = 4; - public static GIVE_SCORE: number = 6; - public static CHAT: number = 7; - public static TELEPORT: number = 8; - public static JOIN_TEAM: number = 9; - public static LEAVE_TEAM: number = 10; - public static CHASE: number = 11; - public static FLEE: number = 12; - public static MOVE_TO_DIRECTION: number = 13; - public static GIVE_SCORE_TO_PREDEFINED_TEAM: number = 14; - public static TOGGLE_TO_RANDOM_STATE: number = 15; - public static MOVE_FURNI_TO: number = 16; - public static GIVE_REWARD: number = 17; - public static CALL_ANOTHER_STACK: number = 18; - public static KICK_FROM_ROOM: number = 19; - public static MUTE_USER: number = 20; - public static BOT_TELEPORT: number = 21; - public static BOT_MOVE: number = 22; - public static BOT_TALK: number = 23; - public static BOT_GIVE_HAND_ITEM: number = 24; - public static BOT_FOLLOW_AVATAR: number = 25; - public static BOT_CHANGE_FIGURE: number = 26; - public static BOT_TALK_DIRECT_TO_AVTR: number = 27; -} diff --git a/src/views/wired/views/actions/base/WiredActionBaseView.tsx b/src/views/wired/views/actions/base/WiredActionBaseView.tsx index 42422a86..0c442703 100644 --- a/src/views/wired/views/actions/base/WiredActionBaseView.tsx +++ b/src/views/wired/views/actions/base/WiredActionBaseView.tsx @@ -1,26 +1,45 @@ -import { ConditionDefinition, TriggerDefinition, WiredActionDefinition } from 'nitro-renderer'; -import { FC, useCallback } from 'react'; -import { WiredActionLayout } from '../../../utils/WiredActionLayout'; -import { WiredActionToggleFurniStateView } from '../toggle-furni-state/WiredActionToggleFurniStateView'; +import { WiredActionDefinition } from 'nitro-renderer'; +import Slider from 'rc-slider'; +import { FC, useCallback, useEffect, useState } from 'react'; +import { LocalizeText } from '../../../../../utils/LocalizeText'; +import { GetWiredTimeLocale } from '../../../common/GetWiredTimeLocale'; +import { useWiredContext } from '../../../context/WiredContext'; +import { WiredFurniType } from '../../../WiredView.types'; +import { WiredBaseView } from '../../base/WiredBaseView'; +import { WiredActionBaseViewProps } from './WiredActionBaseView.types'; -export const WiredActionBaseView: FC<{ wiredDefinition: TriggerDefinition | WiredActionDefinition | ConditionDefinition }> = props => +export const WiredActionBaseView: FC = props => { - const { wiredDefinition = null } = props; + const { requiresFurni = WiredFurniType._Str_5431, save = null, children = null } = props; + const [ delay, setDelay ] = useState(-1); + const { trigger = null, setActionDelay = null } = useWiredContext(); - const getActionlayout = useCallback((code: number) => + useEffect(() => { - switch(code) - { - case WiredActionLayout.TOGGLE_FURNI_STATE: - return ; - default: - return null; - } - }, [ wiredDefinition ]); - + setDelay((trigger as WiredActionDefinition).delayInPulses); + }, [ trigger ]); + + const onSave = useCallback(() => + { + if(save) save(); + + setActionDelay(delay); + }, [ delay, save, setActionDelay ]); + return ( - <> - { wiredDefinition && getActionlayout(wiredDefinition.code) } - + + { children } +
+
+ { LocalizeText('wiredfurni.params.delay', [ 'seconds' ], [ GetWiredTimeLocale(delay) ]) } + setDelay(event) } + /> +
+
); } diff --git a/src/views/wired/views/actions/base/WiredActionBaseView.types.ts b/src/views/wired/views/actions/base/WiredActionBaseView.types.ts new file mode 100644 index 00000000..ef514b76 --- /dev/null +++ b/src/views/wired/views/actions/base/WiredActionBaseView.types.ts @@ -0,0 +1,5 @@ +export interface WiredActionBaseViewProps +{ + requiresFurni: number; + save: () => void; +} diff --git a/src/views/wired/views/actions/bot-change-figure/WiredActionBotChangeFigureView.tsx b/src/views/wired/views/actions/bot-change-figure/WiredActionBotChangeFigureView.tsx new file mode 100644 index 00000000..22997faa --- /dev/null +++ b/src/views/wired/views/actions/bot-change-figure/WiredActionBotChangeFigureView.tsx @@ -0,0 +1,50 @@ +import { FC, useCallback, useEffect, useState } from 'react'; +import { GetSessionDataManager } from '../../../../../api'; +import { LocalizeText } from '../../../../../utils/LocalizeText'; +import { AvatarImageView } from '../../../../shared/avatar-image/AvatarImageView'; +import { useWiredContext } from '../../../context/WiredContext'; +import { WiredFurniType } from '../../../WiredView.types'; +import { WiredActionBaseView } from '../base/WiredActionBaseView'; + +const DELIMETER: string = '\t'; +const DEFAULT_FIGURE: string = 'hd-180-1.ch-210-66.lg-270-82.sh-290-81'; + +export const WiredActionBotChangeFigureView: FC<{}> = props => +{ + const [ botName, setBotName ] = useState(''); + const [ figure, setFigure ] = useState(''); + const { trigger = null, setStringParam = null } = useWiredContext(); + + useEffect(() => + { + const data = trigger.stringData.split(DELIMETER); + + console.log(data); + + if(data.length > 0) setBotName(data[0]); + if(data.length > 1) setFigure(data[1].length > 0 ? data[1] : DEFAULT_FIGURE); + }, [ trigger ]); + + const copyLooks = useCallback(() => + { + setFigure(GetSessionDataManager().figure); + }, []); + + const save = useCallback(() => + { + setStringParam((botName + DELIMETER + figure)); + }, [ botName, figure, setStringParam ]); + + return ( + +
+ + setBotName(event.target.value) } /> +
+
+ + +
+
+ ); +} diff --git a/src/views/wired/views/actions/bot-follow-avatar/WiredActionBotFollowAvatarView.tsx b/src/views/wired/views/actions/bot-follow-avatar/WiredActionBotFollowAvatarView.tsx new file mode 100644 index 00000000..15840fec --- /dev/null +++ b/src/views/wired/views/actions/bot-follow-avatar/WiredActionBotFollowAvatarView.tsx @@ -0,0 +1,23 @@ +import { FC, useEffect, useState } from 'react'; +import { useWiredContext } from '../../../context/WiredContext'; +import { WiredFurniType } from '../../../WiredView.types'; +import { WiredActionBaseView } from '../base/WiredActionBaseView'; + +export const WiredActionBotFollowAvatarView: FC<{}> = props => +{ + const [ botName, setBotName ] = useState(''); + const [ followMode, setFollowMode ] = useState(-1); + const { trigger = null, setStringParam = null } = useWiredContext(); + + useEffect(() => + { + setBotName(trigger.stringData); + setFollowMode((trigger.intData.length > 0) ? trigger.intData[0] : 0); + }, [ trigger ]); + + return ( + + BOT_CHANGE_FIGURE + + ); +} diff --git a/src/views/wired/views/actions/toggle-furni-state/WiredActionToggleFurniStateView.tsx b/src/views/wired/views/actions/toggle-furni-state/WiredActionToggleFurniStateView.tsx deleted file mode 100644 index a1e47312..00000000 --- a/src/views/wired/views/actions/toggle-furni-state/WiredActionToggleFurniStateView.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { FC } from 'react'; -import { WiredLayoutViewProps } from '../../../WiredView.types'; -import { WiredFurniSelectorView } from '../../furni-selector/WiredFurniSelectorView'; - -export const WiredActionToggleFurniStateView: FC = props => -{ - return ( - <> - - - ); -}; diff --git a/src/views/wired/views/base/WiredBaseView.tsx b/src/views/wired/views/base/WiredBaseView.tsx new file mode 100644 index 00000000..26fa821a --- /dev/null +++ b/src/views/wired/views/base/WiredBaseView.tsx @@ -0,0 +1,79 @@ +import { FC, useCallback, useEffect, useState } from 'react'; +import { GetSessionDataManager } from '../../../../api'; +import { WiredEvent } from '../../../../events'; +import { dispatchUiEvent } from '../../../../hooks/events'; +import { NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../layout'; +import { LocalizeText } from '../../../../utils/LocalizeText'; +import { useWiredContext } from '../../context/WiredContext'; +import { WiredFurniType } from '../../WiredView.types'; +import { WiredBaseViewProps } from './WiredBaseView.types'; + +export const WiredBaseView: FC = props => +{ + const { wiredType = '', requiresFurni = WiredFurniType._Str_5431, save = null, children = null } = props; + const [ wiredName, setWiredName ] = useState(null); + const [ wiredDescription, setWiredDescription ] = useState(null); + const { trigger = null, setTrigger = null, setIntParams = null, setStringParam = null, setFurniIds = null } = useWiredContext(); + + useEffect(() => + { + if(!trigger) return; + + const spriteId = (trigger.spriteId || -1); + + const furniData = GetSessionDataManager().getFloorItemData(spriteId); + + if(!furniData) + { + setWiredName(('NAME: ' + spriteId)); + setWiredDescription(('NAME: ' + spriteId)); + } + else + { + setWiredName(furniData.name); + setWiredDescription(furniData.description); + } + + setIntParams(trigger.intData); + setStringParam(trigger.stringData); + setFurniIds(trigger.selectedItems); + }, [ trigger, setIntParams, setStringParam, setFurniIds ]); + + const onSave = useCallback(() => + { + if(save) save(); + + setTimeout(() => dispatchUiEvent(new WiredEvent(WiredEvent.SAVE_WIRED)), 1); + }, [ save ]); + + const close = useCallback(() => + { + setTrigger(null); + }, [ setTrigger ]); + + return ( + + + +
+ +
{ wiredName }
+
+
{ wiredDescription }
+
+
+ { children } +
+ { (requiresFurni !== WiredFurniType._Str_5431) && +
+ { LocalizeText('wiredfurni.pickfurnis.caption', [ 'count', 'limit' ], [ '0', '0' ]) } + { LocalizeText('wiredfurni.pickfurnis.desc') } +
} +
+ + +
+
+
+ ); +} diff --git a/src/views/wired/views/base/WiredBaseView.types.ts b/src/views/wired/views/base/WiredBaseView.types.ts new file mode 100644 index 00000000..b38c08da --- /dev/null +++ b/src/views/wired/views/base/WiredBaseView.types.ts @@ -0,0 +1,6 @@ +export interface WiredBaseViewProps +{ + wiredType: string; + requiresFurni: number; + save: () => void; +} diff --git a/src/views/wired/views/conditions/base/WiredConditionBaseView.tsx b/src/views/wired/views/conditions/base/WiredConditionBaseView.tsx deleted file mode 100644 index 05ed3e90..00000000 --- a/src/views/wired/views/conditions/base/WiredConditionBaseView.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { FC, useCallback, useState } from 'react'; -import { IWiredLayout } from '../../../utils/IWiredLayout'; - -export const WiredConditionBaseView: FC<{}> = props => -{ - const [ conditionLayouts, setConditionLayouts ] = useState([]); - - const RegisterActionLayout = useCallback((layout: IWiredLayout) => - { - setConditionLayouts(layouts => [...layouts, layout]); - }, [ setConditionLayouts ]); - - return null; -}; diff --git a/src/views/wired/views/triggers/base/WiredTriggerBaseView.tsx b/src/views/wired/views/triggers/base/WiredTriggerBaseView.tsx deleted file mode 100644 index 05071f98..00000000 --- a/src/views/wired/views/triggers/base/WiredTriggerBaseView.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { FC, useCallback, useState } from 'react'; -import { IWiredLayout } from '../../../utils/IWiredLayout'; - -export const WiredTriggerBaseView: FC<{}> = props => -{ - const [ triggerLayouts, setTriggerLayouts ] = useState([]); - - const RegisterActionLayout = useCallback((layout: IWiredLayout) => - { - setTriggerLayouts(layouts => [...layouts, layout]); - }, [ setTriggerLayouts ]); - - return null; -};