feat: decorating the backroom

This commit is contained in:
Sainan 2024-12-22 20:21:33 +01:00
parent 6beb3c73e0
commit 65c000249c
5 changed files with 97 additions and 7 deletions

View File

@ -27,7 +27,8 @@ export const getShipController: RequestHandler = async (req, res) => {
SkinFlavourItem: ship.SkinFlavourItem
}
},
Apartment: personalRooms.Apartment
Apartment: personalRooms.Apartment,
TailorShop: personalRooms.TailorShop
};
if (config.unlockAllShipFeatures) {

View File

@ -1,6 +1,14 @@
import { toOid } from "@/src/helpers/inventoryHelpers";
import { IOrbiter, IPersonalRooms, PersonalRoomsModelType } from "@/src/types/personalRoomsTypes";
import { IApartment, IGardening, IPlacedDecosDatabase, IPictureFrameInfo, IRoom } from "@/src/types/shipTypes";
import {
IApartment,
IFavouriteLoadoutDatabase,
IGardening,
IPlacedDecosDatabase,
IPictureFrameInfo,
IRoom,
ITailorShopDatabase
} from "@/src/types/shipTypes";
import { Schema, model } from "mongoose";
const pictureFrameInfoSchema = new Schema<IPictureFrameInfo>(
@ -76,11 +84,59 @@ const orbiterSchema = new Schema<IOrbiter>(
{ _id: false }
);
const favouriteLoadoutSchema = new Schema<IFavouriteLoadoutDatabase>(
{
Tag: String,
LoadoutId: Schema.Types.ObjectId
},
{ _id: false }
);
favouriteLoadoutSchema.set("toJSON", {
virtuals: true,
transform(_document, returnedObject) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
returnedObject.LoadoutId = toOid(returnedObject.LoadoutId);
}
});
const tailorShopSchema = new Schema<ITailorShopDatabase>(
{
FavouriteLoadouts: [favouriteLoadoutSchema],
CustomJson: String,
LevelDecosVisible: Boolean,
Rooms: [roomSchema]
},
{ _id: false }
);
const tailorShopDefault: ITailorShopDatabase = {
FavouriteLoadouts: [],
CustomJson: "{}",
LevelDecosVisible: true,
Rooms: [
{
Name: "LabRoom",
MaxCapacity: 4000
},
{
Name: "LivingQuartersRoom",
MaxCapacity: 3000
},
{
Name: "HelminthRoom",
MaxCapacity: 2000
}
]
};
export const personalRoomsSchema = new Schema<IPersonalRooms>({
personalRoomsOwnerId: Schema.Types.ObjectId,
activeShipId: Schema.Types.ObjectId,
Ship: orbiterSchema,
Apartment: apartmentSchema
Apartment: apartmentSchema,
TailorShop: {
type: tailorShopSchema,
default: tailorShopDefault as any as undefined // Yeah, this is bad, but mongoose types here are wrong.
}
});
export const PersonalRooms = model<IPersonalRooms, PersonalRoomsModelType>("PersonalRooms", personalRoomsSchema);

View File

@ -37,7 +37,12 @@ export const handleSetShipDecorations = async (
): Promise<IShipDecorationsResponse> => {
const personalRooms = await getPersonalRooms(accountId);
const rooms = placedDecoration.IsApartment ? personalRooms.Apartment.Rooms : personalRooms.Ship.Rooms;
const rooms =
placedDecoration.BootLocation == "SHOP"
? personalRooms.TailorShop.Rooms
: placedDecoration.IsApartment
? personalRooms.Apartment.Rooms
: personalRooms.Ship.Rooms;
const roomToPlaceIn = rooms.find(room => room.Name === placedDecoration.Room);

View File

@ -1,4 +1,4 @@
import { IApartment, IRoom, IPlacedDecosDatabase, TBootLocation } from "@/src/types/shipTypes";
import { IApartment, IRoom, IPlacedDecosDatabase, ITailorShop, TBootLocation } from "@/src/types/shipTypes";
import { Model, Types } from "mongoose";
export interface IOrbiter {
@ -13,6 +13,7 @@ export interface IPersonalRooms {
activeShipId: Types.ObjectId;
Ship: IOrbiter;
Apartment: IApartment;
TailorShop: ITailorShop;
}
export type RoomsType = { Name: string; MaxCapacity: number; PlacedDecos: Types.DocumentArray<IPlacedDecosDatabase> };
@ -24,6 +25,9 @@ export type PersonalRoomsDocumentProps = {
Apartment: Omit<IApartment, "Rooms"> & {
Rooms: RoomsType[];
};
TailorShop: Omit<ITailorShop, "Rooms"> & {
Rooms: RoomsType[];
};
};
// eslint-disable-next-line @typescript-eslint/ban-types

View File

@ -7,6 +7,7 @@ export interface IGetShipResponse {
ShipOwnerId: string;
Ship: IShip;
Apartment: IApartment;
TailorShop: ITailorShop;
LoadOutInventory: { LoadOutPresets: ILoadoutClient };
}
@ -102,7 +103,8 @@ export interface IShipDecorationsRequest {
Pos: [number, number, number];
Rot: [number, number, number];
Room: string;
IsApartment: boolean;
BootLocation?: TBootLocation;
IsApartment?: boolean;
RemoveId?: string;
MoveId?: string;
OldRoom?: string;
@ -112,7 +114,7 @@ export interface IShipDecorationsRequest {
export interface IShipDecorationsResponse {
DecoId?: string;
Room?: string;
IsApartment: boolean;
IsApartment?: boolean;
MaxCapacityIncrease?: number;
OldRoom?: string;
NewRoom?: string;
@ -141,3 +143,25 @@ export interface IPictureFrameInfo {
TextColorB: number;
TextOrientation: number;
}
export interface IFavouriteLoadout {
Tag: string;
LoadoutId: IOid;
}
export interface IFavouriteLoadoutDatabase {
Tag: string;
LoadoutId: Types.ObjectId;
}
export interface ITailorShopDatabase {
FavouriteLoadouts: IFavouriteLoadoutDatabase[];
CustomJson: "{}"; // ???
LevelDecosVisible: boolean;
Rooms: IRoom[];
}
export interface ITailorShop extends Omit<ITailorShopDatabase, "FavouriteLoadouts"> {
FavouriteLoadouts: IFavouriteLoadout[];
Colors: []; // ???
}