added world menu

This commit is contained in:
_Bastler 2021-09-28 09:44:11 +02:00
parent 8cc1584c2e
commit bb7f83cee6
7 changed files with 95 additions and 27 deletions

View File

@ -2,6 +2,7 @@
import {fly} from "svelte/transition";
import SettingsSubMenu from "./SettingsSubMenu.svelte";
import ProfileSubMenu from "./ProfileSubMenu.svelte";
import WorldsSubMenu from "./WorldsSubMenu.svelte";
import CreateMapSubMenu from "./CreateMapSubMenu.svelte";
import AboutRoomSubMenu from "./AboutRoomSubMenu.svelte";
import GlobalMessageSubMenu from "./GlobalMessagesSubMenu.svelte";
@ -52,6 +53,9 @@
case SubMenusInterface.profile:
activeComponent = ProfileSubMenu;
break;
case SubMenusInterface.worlds:
activeComponent = WorldsSubMenu;
break;
case SubMenusInterface.createMap:
activeComponent = CreateMapSubMenu;
break;

View File

@ -48,6 +48,13 @@
</script>
<div class="customize-main">
<section>
<button type="button" class="nes-btn" on:click|preventDefault={openEditSkinScene}>Edit Skin</button>
<button type="button" class="nes-btn" on:click|preventDefault={openEditCompanionScene}>Edit Companion</button>
</section>
<section>
<button type="button" class="nes-btn" on:click|preventDefault={openEnableCameraScene}>Setup camera</button>
</section>
{#if $userIsConnected}
<section>
{#if PROFILE_URL != undefined}
@ -62,17 +69,13 @@
<a type="button" class="nes-btn" href="/login">Sign in</a>
</section>
{/if}
<section>
<button type="button" class="nes-btn" on:click|preventDefault={openEditSkinScene}>Edit Skin</button>
<button type="button" class="nes-btn" on:click|preventDefault={openEditCompanionScene}>Edit Companion</button>
</section>
<section>
<button type="button" class="nes-btn" on:click|preventDefault={openEnableCameraScene}>Setup camera</button>
</section>
</div>
<style lang="scss">
div.customize-main{
div.customize-main {
overflow-y: auto;
height: 90%;
section {
display: flex;
justify-content: center;

View File

@ -0,0 +1,42 @@
<script lang="typescript">
import { connectionManager } from "../../Connexion/ConnectionManager";
import type { World } from "../../Connexion/World";
let worlds = connectionManager.getWorlds();
function worldRoomId(world: World) {
return world.roomId;
}
function worldRoomName(world: World) {
return world.roomId.replace(window.location.origin + "/", "");
}
function worldPlayer(world: World) {
return world.player;
}
</script>
<div class="customize-main">
{#await worlds then data}
<table class="nes-table is-bordered is-dark">
{#each data as world}
<tr>
<td><a href="{worldRoomId(world)}">{worldRoomName(world)}</a></td>
<td>{worldPlayer(world)}</td>
</tr>
{/each}
</table>
{/await}
</div>
<style lang="scss">
div.customize-main {
table.nes-table {
width: 100%;
}
}
</style>

View File

@ -317,6 +317,21 @@ class ConnectionManager {
}
}
async getWorlds() {
const token = localUserStore.getAuthToken();
if (!token) {
throw "No token provided";
}
const { worlds } = await Axios.get(`${PUSHER_URL}/worlds`, { params: { token } }).then((res) => {
return res.data;
}
);
return worlds;
}
get currentRoom() {
return this._currentRoom;
}

View File

@ -0,0 +1,4 @@
export interface World {
roomId: string;
player: string[];
}

View File

@ -34,6 +34,7 @@ export const warningContainerStore = createWarningContainerStore();
export enum SubMenusInterface {
settings = "Settings",
profile = "Profile",
worlds = "Worlds",
createMap = "Create a Map",
aboutRoom = "About the Room",
globalMessages = "Global Messages",
@ -44,6 +45,7 @@ function createSubMenusStore() {
const { subscribe, update } = writable<string[]>([
SubMenusInterface.settings,
SubMenusInterface.profile,
SubMenusInterface.worlds,
SubMenusInterface.createMap,
SubMenusInterface.aboutRoom,
SubMenusInterface.globalMessages,

View File

@ -119,29 +119,27 @@ export class MapController extends BaseController {
throw Error("Token cannot to be check on Hydra");
}
const worlds: Map<String, PusherRoom> = socketManager.getWorlds();
const result: any = {};
for (const room of worlds.values()) {
result[room.roomUrl] = room.getListeners().size;
/*
const result: any[] = [];
for (const room of socketManager.getWorlds().values()) {
const world : any = {};
world.roomId = room.roomUrl;
world.player = [];
for (const listener of room.getListeners()) {
const position: any = {};
position.name = listener.name;
position.roomId = listener.roomId;
position.position = listener.position;
position.viewport = listener.viewport;
result.push(position);
world.player.push(listener.name);
}
*/
result.push(world);
}
return res
.writeStatus("200 OK")
.writeHeader("Content-Type", "application/json")
.end(
JSON.stringify(result)
JSON.stringify({ worlds: result })
);
} catch (error) {
return this.errorToResponse(error, res);