From b04927df60f24bb953a197dcf133c6e8481b8393 Mon Sep 17 00:00:00 2001 From: Bill Date: Tue, 31 Aug 2021 20:02:59 -0400 Subject: [PATCH] Fix avatar part item opacity --- .../card/grid/item/NitroCardGridItemView.scss | 11 ++-------- .../card/grid/item/NitroCardGridItemView.tsx | 6 ++--- .../grid/item/NitroCardGridItemView.types.ts | 1 - src/views/avatar-editor/AvatarEditorView.tsx | 14 +++++++----- .../common/AvatarEditorGridPartItem.ts | 7 +++--- .../AvatarEditorFigureSetItemView.tsx | 2 +- .../wardrobe/AvatarEditorWardrobeView.tsx | 22 ++++++++----------- .../AvatarEditorWardrobeView.types.ts | 5 +++-- 8 files changed, 29 insertions(+), 39 deletions(-) diff --git a/src/layout/card/grid/item/NitroCardGridItemView.scss b/src/layout/card/grid/item/NitroCardGridItemView.scss index 666b8bbd..b2959864 100644 --- a/src/layout/card/grid/item/NitroCardGridItemView.scss +++ b/src/layout/card/grid/item/NitroCardGridItemView.scss @@ -9,6 +9,8 @@ position: relative; width: 100%; height: 100%; + background-position: center; + background-repeat: no-repeat; overflow: hidden; &.theme-default { @@ -67,15 +69,6 @@ background-position-y: 12px !important; } - .background { - background-position: center; - background-repeat: no-repeat; - - &.disabled { - opacity: 0.5; - } - } - .trade-button { position: absolute; bottom: 2px; diff --git a/src/layout/card/grid/item/NitroCardGridItemView.tsx b/src/layout/card/grid/item/NitroCardGridItemView.tsx index 7abf615c..a1e4b253 100644 --- a/src/layout/card/grid/item/NitroCardGridItemView.tsx +++ b/src/layout/card/grid/item/NitroCardGridItemView.tsx @@ -1,4 +1,3 @@ -import classNames from 'classnames'; import { FC } from 'react'; import { LimitedEditionStyledNumberView } from '../../../../views/shared/limited-edition/styled-number/LimitedEditionStyledNumberView'; import { useNitroCardGridContext } from '../context'; @@ -7,15 +6,14 @@ import { NitroCardGridItemViewProps } from './NitroCardGridItemView.types'; export const NitroCardGridItemView: FC = props => { - const { itemImage = undefined, itemColor = undefined, itemActive = false, itemCount = 1, itemUnique = false, itemUniqueNumber = 0, itemUnseen = false, columns = undefined, className = '', style = {}, backgroundDisabled = false, children = null, ...rest } = props; + const { itemImage = undefined, itemColor = undefined, itemActive = false, itemCount = 1, itemUnique = false, itemUniqueNumber = 0, itemUnseen = false, columns = undefined, className = '', style = {}, children = null, ...rest } = props; const { theme = NitroCardGridThemes.THEME_DEFAULT } = useNitroCardGridContext(); const imageUrl = `url(${ itemImage })`; return (
-
-
+
{ (itemCount > 1) && { itemCount } } { itemUnique && diff --git a/src/layout/card/grid/item/NitroCardGridItemView.types.ts b/src/layout/card/grid/item/NitroCardGridItemView.types.ts index 385101e4..bf005811 100644 --- a/src/layout/card/grid/item/NitroCardGridItemView.types.ts +++ b/src/layout/card/grid/item/NitroCardGridItemView.types.ts @@ -10,5 +10,4 @@ export interface NitroCardGridItemViewProps extends DetailsHTMLAttributes = props => const [ activeCategory, setActiveCategory ] = useState(null); const [ figureSetIds, setFigureSetIds ] = useState([]); const [ boundFurnitureNames, setBoundFurnitureNames ] = useState([]); - const [ savedFigures, setSavedFigures ] = useState<[ string, string ][]>(new Array(MAX_SAVED_FIGURES)); + const [ savedFigures, setSavedFigures ] = useState<[ IAvatarFigureContainer, string ][]>(new Array(MAX_SAVED_FIGURES)); const [ isWardrobeVisible, setIsWardrobeVisible ] = useState(false); const [ lastFigure, setLastFigure ] = useState(null); const [ lastGender, setLastGender ] = useState(null); @@ -79,7 +79,7 @@ export const AvatarEditorView: FC = props => const onUserWardrobePageEvent = useCallback((event: UserWardrobePageEvent) => { const parser = event.getParser(); - const savedFigures: [ string, string ][] = []; + const savedFigures: [ IAvatarFigureContainer, string ][] = []; let i = 0; @@ -90,9 +90,11 @@ export const AvatarEditorView: FC = props => i++; } - for(let [ index, value ] of parser.looks.entries()) + for(let [ index, [ look, gender ] ] of parser.looks.entries()) { - savedFigures[(index - 1)] = [ value[0], value[1] ]; + const container = GetAvatarRenderManager().createFigureContainer(look); + + savedFigures[(index - 1)] = [ container, gender ]; } setSavedFigures(savedFigures) diff --git a/src/views/avatar-editor/common/AvatarEditorGridPartItem.ts b/src/views/avatar-editor/common/AvatarEditorGridPartItem.ts index 19a96784..285cbcad 100644 --- a/src/views/avatar-editor/common/AvatarEditorGridPartItem.ts +++ b/src/views/avatar-editor/common/AvatarEditorGridPartItem.ts @@ -1,9 +1,10 @@ -import { AvatarFigurePartType, IAvatarImageListener, IAvatarRenderManager, IFigurePart, IFigurePartSet, IGraphicAsset, IPartColor, NitroContainer, NitroSprite, TextureUtils } from '@nitrots/nitro-renderer'; +import { AvatarFigurePartType, IAvatarImageListener, IAvatarRenderManager, IFigurePart, IFigurePartSet, IGraphicAsset, IPartColor, NitroAlphaFilter, NitroContainer, NitroSprite, TextureUtils } from '@nitrots/nitro-renderer'; import { GetAvatarRenderManager } from '../../../api'; import { FigureData } from './FigureData'; export class AvatarEditorGridPartItem implements IAvatarImageListener { + private static ALPHA_FILTER: NitroAlphaFilter = new NitroAlphaFilter(0.2); private static THUMB_DIRECTIONS: number[] = [2, 6, 0, 4, 3, 1]; private static DRAW_ORDER: string[] = [ AvatarFigurePartType.LEFT_HAND_ITEM, @@ -209,7 +210,7 @@ export class AvatarEditorGridPartItem implements IAvatarImageListener this._isSellable = false; } - //if(this._isDisabled) this.setAlpha(container, 0.2); + if(this._isDisabled) this.setAlpha(container, 0.2); this._imageUrl = TextureUtils.generateImageUrl(container); @@ -218,7 +219,7 @@ export class AvatarEditorGridPartItem implements IAvatarImageListener private setAlpha(container: NitroContainer, alpha: number): NitroContainer { - container.alpha = alpha; + container.filters = [ AvatarEditorGridPartItem.ALPHA_FILTER ]; return container; } diff --git a/src/views/avatar-editor/views/figure-set-item/AvatarEditorFigureSetItemView.tsx b/src/views/avatar-editor/views/figure-set-item/AvatarEditorFigureSetItemView.tsx index db7fcd7e..c79dc0a7 100644 --- a/src/views/avatar-editor/views/figure-set-item/AvatarEditorFigureSetItemView.tsx +++ b/src/views/avatar-editor/views/figure-set-item/AvatarEditorFigureSetItemView.tsx @@ -24,7 +24,7 @@ export const AvatarEditorFigureSetItemView: FC onClick(partItem) }> + onClick(partItem) }> { partItem.isHC && } { partItem.isClear && } { partItem.isSellable && } diff --git a/src/views/avatar-editor/views/wardrobe/AvatarEditorWardrobeView.tsx b/src/views/avatar-editor/views/wardrobe/AvatarEditorWardrobeView.tsx index 80d0ef23..54cf3dfa 100644 --- a/src/views/avatar-editor/views/wardrobe/AvatarEditorWardrobeView.tsx +++ b/src/views/avatar-editor/views/wardrobe/AvatarEditorWardrobeView.tsx @@ -1,11 +1,13 @@ import { SaveWardrobeOutfitMessageComposer } from '@nitrots/nitro-renderer'; import { FC, useCallback, useMemo } from 'react'; import { Button } from 'react-bootstrap'; +import { GetAvatarRenderManager } from '../../../../api'; import { SendMessageHook } from '../../../../hooks'; import { NitroCardGridItemView } from '../../../../layout/card/grid/item/NitroCardGridItemView'; import { NitroCardGridView } from '../../../../layout/card/grid/NitroCardGridView'; import { NitroCardGridThemes } from '../../../../layout/card/grid/NitroCardGridView.types'; import { AvatarImageView } from '../../../shared/avatar-image/AvatarImageView'; +import { CurrencyIcon } from '../../../shared/currency-icon/CurrencyIcon'; import { AvatarEditorWardrobeViewProps } from './AvatarEditorWardrobeView.types'; export const AvatarEditorWardrobeView: FC = props => @@ -18,7 +20,7 @@ export const AvatarEditorWardrobeView: FC = props const [ figure, gender ] = savedFigures[index]; - loadAvatarInEditor(figure, gender); + loadAvatarInEditor(figure.getFigureString(), gender); }, [ savedFigures, loadAvatarInEditor ]); const saveFigureAtWardrobeIndex = useCallback((index: number) => @@ -30,7 +32,7 @@ export const AvatarEditorWardrobeView: FC = props const figure = figureData.getFigureString(); const gender = figureData.gender; - newFigures[index] = [ figure, gender ]; + newFigures[index] = [ GetAvatarRenderManager().createFigureContainer(figure), gender ]; setSavedFigures(newFigures); SendMessageHook(new SaveWardrobeOutfitMessageComposer((index + 1), figure, gender)); @@ -42,23 +44,17 @@ export const AvatarEditorWardrobeView: FC = props const items: JSX.Element[] = []; - savedFigures.forEach((figure, index) => + savedFigures.forEach(([ figureContainer, gender ], index) => { - let figureString = null; - let gender = null; - - if(figure) - { - figureString = (figure[0] || null); - gender = (figure[1] || null); - } + const clubLevel = GetAvatarRenderManager().getFigureClubLevel(figureContainer, gender); items.push( - { figureString && } + { figureContainer && } + { clubLevel > 0 && }
- { figureString && } + { figureContainer && }
); diff --git a/src/views/avatar-editor/views/wardrobe/AvatarEditorWardrobeView.types.ts b/src/views/avatar-editor/views/wardrobe/AvatarEditorWardrobeView.types.ts index 2311c58e..7c71bc5e 100644 --- a/src/views/avatar-editor/views/wardrobe/AvatarEditorWardrobeView.types.ts +++ b/src/views/avatar-editor/views/wardrobe/AvatarEditorWardrobeView.types.ts @@ -1,10 +1,11 @@ +import { IAvatarFigureContainer } from '@nitrots/nitro-renderer'; import { Dispatch, SetStateAction } from 'react'; import { FigureData } from '../../common/FigureData'; export interface AvatarEditorWardrobeViewProps { figureData: FigureData; - savedFigures: [ string, string ][]; - setSavedFigures: Dispatch>; + savedFigures: [ IAvatarFigureContainer, string ][]; + setSavedFigures: Dispatch>; loadAvatarInEditor: (figure: string, gender: string, reset?: boolean) => void; }