Rooms and matchmaking
* Added missing config (route) data * Fetch room class, database hash * Basic room querying * Built-in room generation during first runtime * Matchmaking response base and notes for myself, later today * Instance fixes * Challenge and quick play routes (unused for now) * Rooms route (untested) * Matchmaking goto route * Avatar route addition * Settings/set route
This commit is contained in:
@@ -1,7 +1,39 @@
|
||||
/* Galvanic Corrosion - Rec Room custom server for communities.
|
||||
<https://gitea.proxnet.dev/zombieb-galvanic-corrosion>
|
||||
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
import { Profile } from "../profiles.ts";
|
||||
import Instances from "./instances.ts";
|
||||
import { MatchmakingErrorCode, RoomInstance } from "./types.ts";
|
||||
|
||||
const loginLocks: Map<number, string> = new Map();
|
||||
|
||||
interface MatchmakingOptions {
|
||||
roomName: string,
|
||||
subRoomName?: string,
|
||||
private?: boolean,
|
||||
instanceId?: string,
|
||||
profile: Profile
|
||||
}
|
||||
|
||||
interface MatchmakingResponse {
|
||||
errorCode: MatchmakingErrorCode,
|
||||
roomInstance?: RoomInstance
|
||||
}
|
||||
|
||||
class MatchmakingBase {
|
||||
|
||||
createLoginLock(prof: Profile, lock: string) {
|
||||
@@ -19,6 +51,33 @@ class MatchmakingBase {
|
||||
loginLocks.delete(prof.getId());
|
||||
}
|
||||
|
||||
matchmake(options: MatchmakingOptions) {
|
||||
|
||||
if (options.instanceId) {
|
||||
|
||||
// get instance
|
||||
// if instance exists, check private
|
||||
|
||||
}
|
||||
/*
|
||||
if roomname is dormroom, create the profile's dormroom if it does not exist
|
||||
set the target room to the profile's dormroom id
|
||||
|
||||
get all public instances for roomname
|
||||
filter out private and full instances
|
||||
if a subroomname was specified, filter out subrooms that are not that subroom
|
||||
|
||||
pick an instance of the given instances at random
|
||||
if none exist, create one
|
||||
use only matchmakeable subrooms
|
||||
if none are matchmakeable, go to "Home"
|
||||
if "Home" does not exist, go to the first index
|
||||
|
||||
go to that instance
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const Matchmaking = new MatchmakingBase();
|
||||
|
||||
Reference in New Issue
Block a user