merge latest dev + fix font

This commit is contained in:
_Bastler 2021-06-04 11:14:49 +02:00
commit eee3956b60
11 changed files with 112 additions and 16 deletions

View File

@ -89,8 +89,8 @@
</div> </div>
<div class="audioplayer"> <div class="audioplayer">
<label id="label-audioplayer_decrease_while_talking" for="audioplayer_decrease_while_talking" title="decrease background volume by 50% when entering conversations"> <label id="label-audioplayer_decrease_while_talking" for="audioplayer_decrease_while_talking" title="decrease background volume by 50% when entering conversations">
reduce in conversations <input type="checkbox" class="nes-checkbox is-dark" id="audioplayer_decrease_while_talking" checked />
<input type="checkbox" id="audioplayer_decrease_while_talking" checked /> <span>reduce in conversations</span>
</label> </label>
<div id="audioplayer" style="visibility: hidden"></div> <div id="audioplayer" style="visibility: hidden"></div>
</div> </div>

View File

@ -1,7 +1,4 @@
<style> <style>
#menuIcon button {
padding: 2px 8px;
}
#menuIcon button img{ #menuIcon button img{
width: 8px; width: 8px;
padding-top: 0; padding-top: 0;

View File

@ -9,6 +9,7 @@
import {selectCharacterSceneVisibleStore} from "../Stores/SelectCharacterStore"; import {selectCharacterSceneVisibleStore} from "../Stores/SelectCharacterStore";
import SelectCharacterScene from "./selectCharacter/SelectCharacterScene.svelte"; import SelectCharacterScene from "./selectCharacter/SelectCharacterScene.svelte";
import {customCharacterSceneVisibleStore} from "../Stores/CustomCharacterStore"; import {customCharacterSceneVisibleStore} from "../Stores/CustomCharacterStore";
import {errorStore} from "../Stores/ErrorStore";
import CustomCharacterScene from "./CustomCharacterScene/CustomCharacterScene.svelte"; import CustomCharacterScene from "./CustomCharacterScene/CustomCharacterScene.svelte";
import LoginScene from "./Login/LoginScene.svelte"; import LoginScene from "./Login/LoginScene.svelte";
import {loginSceneVisibleStore} from "../Stores/LoginSceneStore"; import {loginSceneVisibleStore} from "../Stores/LoginSceneStore";
@ -21,6 +22,7 @@
import HelpCameraSettingsPopup from "./HelpCameraSettings/HelpCameraSettingsPopup.svelte"; import HelpCameraSettingsPopup from "./HelpCameraSettings/HelpCameraSettingsPopup.svelte";
import AudioPlaying from "./UI/AudioPlaying.svelte"; import AudioPlaying from "./UI/AudioPlaying.svelte";
import {soundPlayingStore} from "../Stores/SoundPlayingStore"; import {soundPlayingStore} from "../Stores/SoundPlayingStore";
import ErrorDialog from "./UI/ErrorDialog.svelte";
export let game: Game; export let game: Game;
</script> </script>
@ -78,4 +80,9 @@
{#if $requestVisitCardsStore} {#if $requestVisitCardsStore}
<VisitCard visitCardUrl={$requestVisitCardsStore}></VisitCard> <VisitCard visitCardUrl={$requestVisitCardsStore}></VisitCard>
{/if} {/if}
{#if $errorStore.length > 0}
<div>
<ErrorDialog></ErrorDialog>
</div>
{/if}
</div> </div>

View File

@ -0,0 +1,44 @@
<script lang="ts">
import {errorStore} from "../../Stores/ErrorStore";
function close(): boolean {
errorStore.clearMessages();
return false;
}
</script>
<dialog class="error-dialog nes-dialog is-dark is-rounded" id="dialog-dark-rounded" open>
<p class="nes-text is-error title">Error</p>
<div class="body">
{#each $errorStore as error}
<p>{error}</p>
{/each}
</div>
<div class="button-bar">
<button class="nes-btn is-error" on:click={close}>Close</button>
</div>
</dialog>
<style lang="scss">
dialog.error-dialog {
pointer-events: auto;
top: 10%;
.button-bar {
text-align: center;
}
.body {
max-height: 50vh;
}
p {
font-family: "Press Start 2P";
&.title {
text-align: center;
}
}
}
</style>

View File

@ -0,0 +1,23 @@
import {writable} from "svelte/store";
/**
* A store that contains a list of error messages to be displayed.
*/
function createErrorStore() {
const { subscribe, set, update } = writable<string[]>([]);
return {
subscribe,
addErrorMessage: (e: string|Error): void => {
update((messages) => {
messages.push(e.toString());
return messages;
});
},
clearMessages: (): void => {
set([]);
}
};
}
export const errorStore = createErrorStore();

View File

@ -0,0 +1,8 @@
export class BrowserTooOldError extends Error {
static NAME = 'BrowserTooOldError';
constructor() {
super('Unable to access your camera or microphone. Your browser is too old. Please consider upgrading your browser or try using a recent version of Chrome.');
this.name = BrowserTooOldError.NAME;
}
}

View File

@ -4,6 +4,8 @@ import {localUserStore} from "../Connexion/LocalUserStore";
import {ITiledMapGroupLayer, ITiledMapObjectLayer, ITiledMapTileLayer} from "../Phaser/Map/ITiledMap"; import {ITiledMapGroupLayer, ITiledMapObjectLayer, ITiledMapTileLayer} from "../Phaser/Map/ITiledMap";
import {userMovingStore} from "./GameStore"; import {userMovingStore} from "./GameStore";
import {HtmlUtils} from "../WebRtc/HtmlUtils"; import {HtmlUtils} from "../WebRtc/HtmlUtils";
import {BrowserTooOldError} from "./Errors/BrowserTooOldError";
import {errorStore} from "./ErrorStore";
/** /**
* A store that contains the camera state requested by the user (on or off). * A store that contains the camera state requested by the user (on or off).
@ -420,10 +422,9 @@ export const localStreamStore = derived<Readable<MediaStreamConstraints>, LocalS
}); });
return; return;
} else { } else {
//throw new Error('Unable to access your camera or microphone. Your browser is too old.');
set({ set({
type: 'error', type: 'error',
error: new Error('Unable to access your camera or microphone. Your browser is too old. Please consider upgrading your browser or try using a recent version of Chrome.'), error: new BrowserTooOldError(),
constraints constraints
}); });
return; return;
@ -594,3 +595,11 @@ microphoneListStore.subscribe((devices) => {
audioConstraintStore.setDeviceId(undefined); audioConstraintStore.setDeviceId(undefined);
} }
}); });
localStreamStore.subscribe(streamResult => {
if (streamResult.type === 'error') {
if (streamResult.error.name === BrowserTooOldError.NAME) {
errorStore.addErrorMessage(streamResult.error);
}
}
});

View File

@ -35,7 +35,12 @@ export class HtmlUtils {
const urlRegex = /(https?:\/\/[^\s]+)/g; const urlRegex = /(https?:\/\/[^\s]+)/g;
text = HtmlUtils.escapeHtml(text); text = HtmlUtils.escapeHtml(text);
return text.replace(urlRegex, (url: string) => { return text.replace(urlRegex, (url: string) => {
return '<a href="' + url + '" target="_blank" style=":visited {color: white}">' + url + '</a>'; const link = document.createElement('a');
link.href = url;
link.target = "_blank";
const text = document.createTextNode(url);
link.appendChild(text);
return link.outerHTML;
}); });
} }

View File

@ -81,7 +81,7 @@
} }
.top-right-btn{ .top-right-btn{
left: -6px; left: -2px;
&#cowebsite-close { &#cowebsite-close {
top: 0px; top: 0px;
} }

View File

@ -1,9 +1,5 @@
@import "~@fontsource/press-start-2p/index.css"; @import "~@fontsource/press-start-2p/index.css";
*{ *{
font-family: PixelFont-7,monospace; font-family: "Press Start 2P",monospace;
}
.nes-btn {
font-family: "Press Start 2P";
} }

View File

@ -386,7 +386,7 @@ body {
.audioplayer:first-child { .audioplayer:first-child {
display: grid; display: grid;
grid: 2rem / 4rem 10rem; grid: 2rem / 4rem 13rem;
} }
.audioplayer>button, .audioplayer>button,
@ -396,9 +396,11 @@ body {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 5px 0px;
} }
.audioplayer>div { .audioplayer>div {
padding: 0;
padding-right: 1.2rem; padding-right: 1.2rem;
} }
@ -415,6 +417,7 @@ body {
#audioplayer_mute { #audioplayer_mute {
max-width: 5rem; max-width: 5rem;
border: none; border: none;
padding: 0;
} }
#audioplayer_mute:focus, #audioplayer_mute:focus,
@ -1131,6 +1134,10 @@ div.modal-report-user {
color: white; color: white;
} }
.discussion .messages .message p a:visited{
color: white;
}
.discussion .send-message{ .discussion .send-message{
position: absolute; position: absolute;
bottom: 45px; bottom: 45px;