im annoyed

This commit is contained in:
MyNameIsBatman 2021-06-26 23:46:40 -03:00
parent 9a94f59844
commit 4b202678c0
14 changed files with 223 additions and 0 deletions

View File

@ -14,3 +14,4 @@
@import './room/RoomView';
@import './room-host/RoomHostView';
@import './toolbar/ToolbarView';
@import './wired/WiredView';

View File

@ -11,6 +11,7 @@ import { NotificationCenterView } from '../notification-center/NotificationCente
import { RightSideView } from '../right-side/RightSideView';
import { RoomHostView } from '../room-host/RoomHostView';
import { ToolbarView } from '../toolbar/ToolbarView';
import { WiredView } from '../wired/WiredView';
import { MainViewProps } from './MainView.types';
export const MainView: FC<MainViewProps> = props =>
@ -46,6 +47,7 @@ export const MainView: FC<MainViewProps> = props =>
{ landingViewVisible && <HotelView /> }
<ToolbarView isInRoom={ !landingViewVisible } />
<RoomHostView />
<WiredView />
<AvatarEditorView />
<NavigatorView />
<InventoryView />

View File

@ -0,0 +1,6 @@
import { FC } from 'react';
export const WiredMessageHandler: FC<{}> = props =>
{
return null;
};

View File

@ -0,0 +1,3 @@
.nitro-wired {
width: 300px;
}

View File

@ -0,0 +1,81 @@
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 { WiredFurniSelectorViewProps } from './WiredView.types';
export const WiredView: FC<WiredFurniSelectorViewProps> = props =>
{
const [ wiredDefinition, setWiredDefinition ] = useState<TriggerDefinition | WiredActionDefinition | ConditionDefinition>(null);
const [ name, setName ] = useState(null);
const [ description, setDescription ] = useState(null);
useEffect(() =>
{
if(!wiredDefinition) return;
const itemData = Nitro.instance.sessionDataManager.getFloorItemData(wiredDefinition.spriteId);
if(!itemData) return;
setName(itemData.name);
setDescription(itemData.description);
}, [ wiredDefinition ]);
const getWiredType = useCallback(() =>
{
if(wiredDefinition instanceof TriggerDefinition)
return 'trigger';
else if(wiredDefinition instanceof ConditionDefinition)
return 'condition';
else
return 'action';
}, [ wiredDefinition ]);
const getTypeBase = useCallback(() =>
{
if(wiredDefinition instanceof TriggerDefinition)
return <WiredTriggerBaseView />;
else if(wiredDefinition instanceof ConditionDefinition)
return <WiredConditionBaseView />;
else
return <WiredActionBaseView wiredDefinition={ wiredDefinition } />;
}, [ 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;
return (
<NitroCardView className="nitro-wired" simple={ true }>
<NitroCardHeaderView headerText={ LocalizeText('wiredfurni.title') } onCloseClick={ event => {} } />
<NitroCardContentView className="text-black">
<div className="d-flex align-items-center">
<i className={ 'me-2 icon icon-wired-' + getWiredType()} />
<div className="fw-bold">{ name }</div>
</div>
<div>{ description }</div>
<div>
{ getTypeBase() }
</div>
<div className="d-flex mt-2">
<button className="btn btn-success me-2 w-100">{ LocalizeText('wiredfurni.ready') }</button>
<button className="btn btn-secondary w-100">{ LocalizeText('cancel') }</button>
</div>
</NitroCardContentView>
</NitroCardView>
);
};

View File

@ -0,0 +1,9 @@
import { ConditionDefinition, TriggerDefinition, WiredActionDefinition } from 'nitro-renderer';
export class WiredFurniSelectorViewProps
{}
export class WiredLayoutViewProps
{
wiredDefinition: TriggerDefinition | WiredActionDefinition | ConditionDefinition;
}

View File

@ -0,0 +1,4 @@
export interface IWiredLayout
{
code: number;
}

View File

@ -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;
}

View File

@ -0,0 +1,26 @@
import { ConditionDefinition, TriggerDefinition, WiredActionDefinition } from 'nitro-renderer';
import { FC, useCallback } from 'react';
import { WiredActionLayout } from '../../../utils/WiredActionLayout';
import { WiredActionToggleFurniStateView } from '../toggle-furni-state/WiredActionToggleFurniStateView';
export const WiredActionBaseView: FC<{ wiredDefinition: TriggerDefinition | WiredActionDefinition | ConditionDefinition }> = props =>
{
const { wiredDefinition = null } = props;
const getActionlayout = useCallback((code: number) =>
{
switch(code)
{
case WiredActionLayout.TOGGLE_FURNI_STATE:
return <WiredActionToggleFurniStateView wiredDefinition={ wiredDefinition } />;
default:
return null;
}
}, [ wiredDefinition ]);
return (
<>
{ wiredDefinition && getActionlayout(wiredDefinition.code) }
</>
);
}

View File

@ -0,0 +1,12 @@
import { FC } from 'react';
import { WiredLayoutViewProps } from '../../../WiredView.types';
import { WiredFurniSelectorView } from '../../furni-selector/WiredFurniSelectorView';
export const WiredActionToggleFurniStateView: FC<WiredLayoutViewProps> = props =>
{
return (
<>
<WiredFurniSelectorView selectedItemsCount={ 0 } maximumItemsCount={ 0 } />
</>
);
};

View File

@ -0,0 +1,14 @@
import { FC, useCallback, useState } from 'react';
import { IWiredLayout } from '../../../utils/IWiredLayout';
export const WiredConditionBaseView: FC<{}> = props =>
{
const [ conditionLayouts, setConditionLayouts ] = useState<IWiredLayout[]>([]);
const RegisterActionLayout = useCallback((layout: IWiredLayout) =>
{
setConditionLayouts(layouts => [...layouts, layout]);
}, [ setConditionLayouts ]);
return null;
};

View File

@ -0,0 +1,17 @@
import { FC } from 'react';
import { LocalizeText } from '../../../../utils/LocalizeText';
import { WiredFurniSelectorViewProps } from './WiredFurniSelectorView.types';
export const WiredFurniSelectorView: FC<WiredFurniSelectorViewProps> = props =>
{
const { selectedItemsCount = null, maximumItemsCount = null } = props;
return (
<>
<hr className="p-0 m-1" />
<div className="fw-bold">{ LocalizeText('wiredfurni.pickfurnis.caption', ['count', 'limit'], [selectedItemsCount.toString(), maximumItemsCount.toString()]) }</div>
<div>{ LocalizeText('wiredfurni.pickfurnis.desc') }</div>
<hr className="p-0 m-1" />
</>
);
}

View File

@ -0,0 +1,5 @@
export class WiredFurniSelectorViewProps
{
selectedItemsCount: number;
maximumItemsCount: number;
}

View File

@ -0,0 +1,14 @@
import { FC, useCallback, useState } from 'react';
import { IWiredLayout } from '../../../utils/IWiredLayout';
export const WiredTriggerBaseView: FC<{}> = props =>
{
const [ triggerLayouts, setTriggerLayouts ] = useState<IWiredLayout[]>([]);
const RegisterActionLayout = useCallback((layout: IWiredLayout) =>
{
setTriggerLayouts(layouts => [...layouts, layout]);
}, [ setTriggerLayouts ]);
return null;
};