5180 fichiers 38.5 Mo 0 téléchargements 208 vues mis à jour il y a 5 heures ui
Product.ts 5 Ko Télécharger le fichier
import { GetRoomEngine, GetSessionDataManager, IFurnitureData, IObjectData, IProductData } from '@octane/renderer';
import { GetConfigurationValue } from '../octane';
import { GetPixelEffectIcon, GetSubscriptionProductIcon } from './CatalogUtilities';
import { IProduct } from './IProduct';
import { IPurchasableOffer } from './IPurchasableOffer';
import { ProductTypeEnum } from './ProductTypeEnum';

export class Product implements IProduct {
    public static EFFECT_CLASSID_NINJA_DISAPPEAR: number = 108;

    private _productType: string;
    private _productClassId: number;
    private _extraParam: string;
    private _productCount: number;
    private _productData: IProductData;
    private _furnitureData: IFurnitureData;
    private _isUniqueLimitedItem: boolean;
    private _uniqueLimitedItemSeriesSize: number;
    private _uniqueLimitedItemsLeft: number;

    constructor(
        productType: string,
        productClassId: number,
        extraParam: string,
        productCount: number,
        productData: IProductData,
        furnitureData: IFurnitureData,
        isUniqueLimitedItem: boolean = false,
        uniqueLimitedItemSeriesSize: number = 0,
        uniqueLimitedItemsLeft: number = 0
    ) {
        this._productType = productType.toLowerCase();
        this._productClassId = productClassId;
        this._extraParam = extraParam;
        this._productCount = productCount;
        this._productData = productData;
        this._furnitureData = furnitureData;
        this._isUniqueLimitedItem = isUniqueLimitedItem;
        this._uniqueLimitedItemSeriesSize = uniqueLimitedItemSeriesSize;
        this._uniqueLimitedItemsLeft = uniqueLimitedItemsLeft;
    }

    public static stripAddonProducts(products: IProduct[]): IProduct[] {
        if (products.length === 1) return products;

        return products.filter(
            (product) =>
                product.productType !== ProductTypeEnum.BADGE &&
                product.productType !== ProductTypeEnum.EFFECT &&
                product.productType !== ProductTypeEnum.CHAT_STYLE &&
                product.productClassId !== Product.EFFECT_CLASSID_NINJA_DISAPPEAR
        );
    }

    public getIconUrl(offer: IPurchasableOffer = null, stuffData: IObjectData = null): string {
        switch (this._productType) {
            case ProductTypeEnum.FLOOR:
                return GetRoomEngine().getFurnitureFloorIconUrl(this.productClassId);
            case ProductTypeEnum.WALL: {
                if (offer && this._furnitureData) {
                    let iconName = '';

                    switch (this._furnitureData.className) {
                        case 'floor':
                            iconName = ['th', this._furnitureData.className, offer.product.extraParam].join('_');
                            break;
                        case 'wallpaper':
                            iconName = ['th', 'wall', offer.product.extraParam].join('_');
                            break;
                        case 'landscape':
                            iconName = ['th', this._furnitureData.className, (offer.product.extraParam || '').replace('.', '_'), '001'].join('_');
                            break;
                    }

                    if (iconName !== '') {
                        const assetUrl = GetConfigurationValue<string>('catalog.asset.url');

                        return `${assetUrl}/${iconName}.png`;
                    }
                }

                return GetRoomEngine().getFurnitureWallIconUrl(this.productClassId, this._extraParam);
            }
            case ProductTypeEnum.EFFECT:
                return GetPixelEffectIcon(this.productClassId);
            case ProductTypeEnum.HABBO_CLUB:
                return GetSubscriptionProductIcon(this.productClassId);
            case ProductTypeEnum.BADGE:
                return GetSessionDataManager().getBadgeUrl(this._extraParam);
            case ProductTypeEnum.ROBOT:
                return null;
        }

        return null;
    }

    public get productType(): string {
        return this._productType;
    }

    public get productClassId(): number {
        return this._productClassId;
    }

    public get extraParam(): string {
        return this._extraParam;
    }

    public set extraParam(extraParam: string) {
        this._extraParam = extraParam;
    }

    public get productCount(): number {
        return this._productCount;
    }

    public get productData(): IProductData {
        return this._productData;
    }

    public get furnitureData(): IFurnitureData {
        return this._furnitureData;
    }

    public get isUniqueLimitedItem(): boolean {
        return this._isUniqueLimitedItem;
    }

    public get uniqueLimitedItemSeriesSize(): number {
        return this._uniqueLimitedItemSeriesSize;
    }

    public get uniqueLimitedItemsLeft(): number {
        return this._uniqueLimitedItemsLeft;
    }

    public set uniqueLimitedItemsLeft(uniqueLimitedItemsLeft: number) {
        this._uniqueLimitedItemsLeft = uniqueLimitedItemsLeft;
    }
}
15Sujets
1Dépôts
20Membres
2En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser