From 4bfa3bbb499a66cbac6f9c717bb82589c770213a Mon Sep 17 00:00:00 2001 From: Aelita4 Date: Tue, 30 Jan 2024 14:57:23 +0100 Subject: [PATCH] Implement resource manager --- src/components/ResourceBar.astro | 2 +- src/lib/db/users.ts | 28 +++------------------- src/lib/utils/resourceManager.ts | 41 ++++++++++++++++++++++++++++++++ src/types/DBResource.ts | 6 +++++ src/types/Resource.ts | 1 - src/types/User.ts | 4 ++-- 6 files changed, 53 insertions(+), 29 deletions(-) create mode 100644 src/lib/utils/resourceManager.ts create mode 100644 src/types/DBResource.ts diff --git a/src/components/ResourceBar.astro b/src/components/ResourceBar.astro index 065f296..f095923 100644 --- a/src/components/ResourceBar.astro +++ b/src/components/ResourceBar.astro @@ -1,6 +1,6 @@ --- import { ObjectId } from 'mongodb'; -import { getUserResources } from '../lib/db/users'; +import { getUserResources } from '../lib/utils/resourceManager'; import { getHighestWeightedLanguage, getLocales } from '../lib/lang/langDriver'; import resourceTypes from '../lib/data/resources.json'; diff --git a/src/lib/db/users.ts b/src/lib/db/users.ts index 56d3043..25067e6 100644 --- a/src/lib/db/users.ts +++ b/src/lib/db/users.ts @@ -39,31 +39,9 @@ export const getUserByAccessToken = async(accessToken: string | AccessToken): Pr } else return getUserById(accessToken.user as ObjectId) } -export const getUserResources = async (id: ObjectId): Promise => { - const users = await Users(); - const user = await users.findOne({ _id: id }); - - const defaultResources: Resources = { - coal: 0, - iron: 0, - gold: 0 - }; - - return user?.resources === undefined ? defaultResources : user?.resources; -} - -export const updateUserResources = async (username: string, resources: any) => { - const users = await Users(); - await users.updateOne({ username }, { - $set: { - resources - } - }); -} - -export const getUserBuildings = async (username: string): Promise> => { - const users = await Users(); - const user = await users.findOne({ username }); +export const getUserBuildings = async (user: User): Promise> => { + // const users = await Users(); + // const user = await users.findOne({ username }); const buildings: Array = []; diff --git a/src/lib/utils/resourceManager.ts b/src/lib/utils/resourceManager.ts new file mode 100644 index 0000000..416270c --- /dev/null +++ b/src/lib/utils/resourceManager.ts @@ -0,0 +1,41 @@ +import { ObjectId } from "mongodb" +import { getUserById } from "../db/users"; +import { Users } from "../db/mongodb"; +import type DBResource from "../../types/DBResource"; +import type Resource from "../../types/Resource"; + +export const getUserResources = async (id: ObjectId): Promise> => { + const user = await getUserById(id); + + const defaultResources: Array = []; + + return user?.resources === undefined ? defaultResources : user?.resources; +} + +export const updateUserResources = async (id: ObjectId, resources: Array) => { + const users = await Users(); + await users.updateOne({ _id: id }, { + $set: { + resources + } + }); +} + +export const calculateCurrentAvailableResources = async (id: ObjectId): Promise> => { + const user = await getUserById(id); + + if(user === null) return []; + + const userResources = await getUserResources(id); + + userResources.forEach(res => { + const timeDiff = Math.abs((new Date()).getTime() - res.lastUpdated.getTime()); + const hours = timeDiff / (1000 * 60 * 60); + const amountToAdd = hours * res.perHourMiningRate; + res.amount += amountToAdd; + res.lastUpdated = new Date(); + }); + + updateUserResources(id, userResources); + return userResources; +} \ No newline at end of file diff --git a/src/types/DBResource.ts b/src/types/DBResource.ts new file mode 100644 index 0000000..f8da010 --- /dev/null +++ b/src/types/DBResource.ts @@ -0,0 +1,6 @@ +import type Resource from "./Resource"; + +export default interface DBResource extends Resource { + lastUpdated: Date; + perHourMiningRate: number; +} \ No newline at end of file diff --git a/src/types/Resource.ts b/src/types/Resource.ts index 4836014..2354483 100644 --- a/src/types/Resource.ts +++ b/src/types/Resource.ts @@ -1,5 +1,4 @@ export default interface Resource { name: string; - type: "solid" | "liquid" | "gas"; amount: number; } \ No newline at end of file diff --git a/src/types/User.ts b/src/types/User.ts index 3f023b8..30a43e1 100644 --- a/src/types/User.ts +++ b/src/types/User.ts @@ -1,6 +1,6 @@ import type { ObjectId } from "mongodb"; -import type Resources from "./Resources"; import type Building from "./Building"; +import type DBResource from "./DBResource"; export default interface User { _id: ObjectId; @@ -8,7 +8,7 @@ export default interface User { email: string; password: string; lastLogin: Date; - resources: Resources; + resources: Array; buildings: Array; createdAt: Date; updatedAt: Date;