Merge branch 'develop' of github.com:thecodingmachine/workadventure into main
This commit is contained in:
commit
6156f9e4d6
@ -13,3 +13,7 @@ TURN_STATIC_AUTH_SECRET=
|
|||||||
|
|
||||||
# The email address used by Let's encrypt to send renewal warnings (compulsory)
|
# The email address used by Let's encrypt to send renewal warnings (compulsory)
|
||||||
ACME_EMAIL=
|
ACME_EMAIL=
|
||||||
|
|
||||||
|
MAX_PER_GROUP=4
|
||||||
|
MAX_USERNAME_LENGTH=8
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ const HTTP_PORT = parseInt(process.env.HTTP_PORT || '8080') || 8080;
|
|||||||
const GRPC_PORT = parseInt(process.env.GRPC_PORT || '50051') || 50051;
|
const GRPC_PORT = parseInt(process.env.GRPC_PORT || '50051') || 50051;
|
||||||
export const SOCKET_IDLE_TIMER = parseInt(process.env.SOCKET_IDLE_TIMER as string) || 30; // maximum time (in second) without activity before a socket is closed
|
export const SOCKET_IDLE_TIMER = parseInt(process.env.SOCKET_IDLE_TIMER as string) || 30; // maximum time (in second) without activity before a socket is closed
|
||||||
export const TURN_STATIC_AUTH_SECRET = process.env.TURN_STATIC_AUTH_SECRET || '';
|
export const TURN_STATIC_AUTH_SECRET = process.env.TURN_STATIC_AUTH_SECRET || '';
|
||||||
|
export const MAX_PER_GROUP = parseInt(process.env.MAX_PER_GROUP || '4');
|
||||||
|
|
||||||
export {
|
export {
|
||||||
MINIMUM_DISTANCE,
|
MINIMUM_DISTANCE,
|
||||||
|
@ -4,9 +4,9 @@ import {PositionInterface} from "_Model/PositionInterface";
|
|||||||
import {Movable} from "_Model/Movable";
|
import {Movable} from "_Model/Movable";
|
||||||
import {PositionNotifier} from "_Model/PositionNotifier";
|
import {PositionNotifier} from "_Model/PositionNotifier";
|
||||||
import {gaugeManager} from "../Services/GaugeManager";
|
import {gaugeManager} from "../Services/GaugeManager";
|
||||||
|
import {MAX_PER_GROUP} from "../Enum/EnvironmentVariable";
|
||||||
|
|
||||||
export class Group implements Movable {
|
export class Group implements Movable {
|
||||||
static readonly MAX_PER_GROUP = 4;
|
|
||||||
|
|
||||||
private static nextId: number = 1;
|
private static nextId: number = 1;
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ export class Group implements Movable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isFull(): boolean {
|
isFull(): boolean {
|
||||||
return this.users.size >= Group.MAX_PER_GROUP;
|
return this.users.size >= MAX_PER_GROUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
isEmpty(): boolean {
|
isEmpty(): boolean {
|
||||||
|
@ -510,19 +510,6 @@ export class SocketManager {
|
|||||||
return this.rooms;
|
return this.rooms;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param token
|
|
||||||
*/
|
|
||||||
/*searchClientByUuid(uuid: string): ExSocketInterface | null {
|
|
||||||
for(const socket of this.sockets.values()){
|
|
||||||
if(socket.userUuid === uuid){
|
|
||||||
return socket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
public handleQueryJitsiJwtMessage(user: User, queryJitsiJwtMessage: QueryJitsiJwtMessage) {
|
public handleQueryJitsiJwtMessage(user: User, queryJitsiJwtMessage: QueryJitsiJwtMessage) {
|
||||||
const room = queryJitsiJwtMessage.getJitsiroom();
|
const room = queryJitsiJwtMessage.getJitsiroom();
|
||||||
|
@ -116,6 +116,7 @@ services:
|
|||||||
ADMIN_API_TOKEN: "$ADMIN_API_TOKEN"
|
ADMIN_API_TOKEN: "$ADMIN_API_TOKEN"
|
||||||
JITSI_URL: $JITSI_URL
|
JITSI_URL: $JITSI_URL
|
||||||
JITSI_ISS: $JITSI_ISS
|
JITSI_ISS: $JITSI_ISS
|
||||||
|
MAX_PER_GROUP: "$MAX_PER_GROUP"
|
||||||
volumes:
|
volumes:
|
||||||
- ./back:/usr/src/app
|
- ./back:/usr/src/app
|
||||||
labels:
|
labels:
|
||||||
|
@ -38,6 +38,8 @@ services:
|
|||||||
TURN_USER: ""
|
TURN_USER: ""
|
||||||
TURN_PASSWORD: ""
|
TURN_PASSWORD: ""
|
||||||
START_ROOM_URL: "$START_ROOM_URL"
|
START_ROOM_URL: "$START_ROOM_URL"
|
||||||
|
MAX_PER_GROUP: "$MAX_PER_GROUP"
|
||||||
|
MAX_USERNAME_LENGTH: "$MAX_USERNAME_LENGTH"
|
||||||
command: yarn run start
|
command: yarn run start
|
||||||
volumes:
|
volumes:
|
||||||
- ./front:/usr/src/app
|
- ./front:/usr/src/app
|
||||||
@ -110,6 +112,7 @@ services:
|
|||||||
JITSI_URL: $JITSI_URL
|
JITSI_URL: $JITSI_URL
|
||||||
JITSI_ISS: $JITSI_ISS
|
JITSI_ISS: $JITSI_ISS
|
||||||
TURN_STATIC_AUTH_SECRET: SomeStaticAuthSecret
|
TURN_STATIC_AUTH_SECRET: SomeStaticAuthSecret
|
||||||
|
MAX_PER_GROUP: "MAX_PER_GROUP"
|
||||||
volumes:
|
volumes:
|
||||||
- ./back:/usr/src/app
|
- ./back:/usr/src/app
|
||||||
labels:
|
labels:
|
||||||
|
2
front/dist/resources/html/gameMenuIcon.html
vendored
2
front/dist/resources/html/gameMenuIcon.html
vendored
@ -8,7 +8,7 @@
|
|||||||
}
|
}
|
||||||
#menuIcon button img{
|
#menuIcon button img{
|
||||||
width: 14px;
|
width: 14px;
|
||||||
padding-top: 3px;
|
padding-top: 0;
|
||||||
cursor: url('/resources/logos/cursor_pointer.png'), pointer;
|
cursor: url('/resources/logos/cursor_pointer.png'), pointer;
|
||||||
}
|
}
|
||||||
#menuIcon section {
|
#menuIcon section {
|
||||||
|
2
front/dist/resources/html/gameShare.html
vendored
2
front/dist/resources/html/gameShare.html
vendored
@ -5,7 +5,7 @@
|
|||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
margin: 20px auto 0;
|
margin: 20px auto 0;
|
||||||
width: 298px;
|
width: 298px;
|
||||||
height: 150px;
|
height: 160px;
|
||||||
}
|
}
|
||||||
#gameShare h1 {
|
#gameShare h1 {
|
||||||
background-image: linear-gradient(top, #f1f3f3, #d4dae0);
|
background-image: linear-gradient(top, #f1f3f3, #d4dae0);
|
||||||
|
45
front/dist/resources/logos/monitor-close.svg
vendored
45
front/dist/resources/logos/monitor-close.svg
vendored
@ -1,44 +1 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<svg id="Capa_1" data-name="Capa 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 469.33 426.67"><defs><style>.cls-1{fill:#fff;}</style></defs><path class="cls-1" d="M426.67,21.33h-384A42.66,42.66,0,0,0,0,64V320a42.66,42.66,0,0,0,42.67,42.67H192v42.66H149.33V448H320V405.33H277.33V362.67H426.67A42.66,42.66,0,0,0,469.33,320V64A42.66,42.66,0,0,0,426.67,21.33Zm0,298.67h-384V64h384Z" transform="translate(0 -21.33)"/><path class="cls-1" d="M267.2,127.15V86.26a8.14,8.14,0,0,1,14.18-5.44l73.2,81.34a8.12,8.12,0,0,1,.25,10.57l-73.2,89.47a8.14,8.14,0,0,1-14.43-5.13V216.54c-64.25,2.09-104.35,29.55-122.42,83.77a8.13,8.13,0,0,1-15.84-2.58C128.94,202,186.59,131.59,267.2,127.15Zm8.14,73a8.13,8.13,0,0,1,8.13,8.14v26l54.36-66.44-54.36-60.39v27.6a8.13,8.13,0,0,1-8.13,8.14c-63.93,0-111.77,44.24-125.87,111.73C175.65,218.53,217.8,200.13,275.34,200.13Z" transform="translate(0 -21.33)"/></svg>
|
||||||
<!-- Generator: Adobe Illustrator 24.1.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
||||||
viewBox="0 0 512 480" style="enable-background:new 0 0 512 480;" xml:space="preserve">
|
|
||||||
<style type="text/css">
|
|
||||||
.st0{fill:#FFFFFF;}
|
|
||||||
</style>
|
|
||||||
<g>
|
|
||||||
<path class="st0" d="M411.1,384.2c-12.2,0-24.3,0-36.5,0C259.6,257.6,144.5,130.9,29.5,4.3c11.4-0.8,22.9-1.6,34.3-2.4
|
|
||||||
C179.6,129.3,295.3,256.8,411.1,384.2z"/>
|
|
||||||
<g>
|
|
||||||
<path class="st0" d="M352,152.5c-8.8-8.7-34.2-31.6-74.5-38.1c-32.3-5.2-58.1,2.7-70,7.3C170.9,81.5,134.3,41.3,97.8,1
|
|
||||||
C220.4,1,343,1,465.6,1C427.7,51.5,389.8,102,352,152.5z"/>
|
|
||||||
<path class="st0" d="M511.5,338.3c0,4.7-0.8,12.2-4.7,20.2c-1.2,2.4-3.4,6.3-7.1,10.5c-4,4.4-7.9,7.1-10.2,8.5
|
|
||||||
c-5.6,3.5-10.7,4.9-13.5,5.6c-3.8,0.9-6.7,1-10.2,1.2c-3.6,0.2-5.3,0-13.1,0c-3,0-5.4,0-7,0C414.5,307,383.2,229.8,352,152.5
|
|
||||||
C402.9,62.7,448.7,1,465.6,1c7.5,0,14.3,2.3,14.3,2.3c14.5,4.8,22.3,15.8,23.6,17.8c7.4,10.8,8,21.7,8,25.9
|
|
||||||
C511.5,144.1,511.5,241.2,511.5,338.3z"/>
|
|
||||||
<path class="st0" d="M312.5,192c-5.2-5.2-15.6-14.1-31.4-19.4c-12.8-4.2-24-4.3-30.9-3.8c-6.2-7.1-12.4-14.2-18.6-21.3
|
|
||||||
c10.3-2.4,36.5-6.8,65.1,5.3c15.3,6.5,26.1,15.5,32.7,22.2C323.7,180.8,318.1,186.4,312.5,192z"/>
|
|
||||||
<path class="st0" d="M329.4,175.1c38.8,69.7,77.6,139.4,116.4,209.1c-50.3-55.4-100.6-110.8-151-166.2c6.9,2.9,14.9,0.7,19.2-5.2
|
|
||||||
c4.6-6.2,4-15.1-1.6-20.8C318.1,186.4,323.7,180.8,329.4,175.1z"/>
|
|
||||||
<path class="st0" d="M445.8,384.2L445.8,384.2c-38.8-69.7-77.6-139.4-116.4-209.1c5.3,4.9,12.9,6,18.9,2.7
|
|
||||||
c7.8-4.2,8.3-13.4,8.3-13.8C386.4,237.4,416.1,310.8,445.8,384.2z"/>
|
|
||||||
</g>
|
|
||||||
<path class="st0" d="M162.2,150.4C108.3,213,54.4,275.7,0.5,338.3c0-97.1,0-194.3,0-291.4c0-4,0.6-15.1,8.1-26
|
|
||||||
C16,10.2,25.7,5.8,29.5,4.3C73.7,53,118,101.7,162.2,150.4z"/>
|
|
||||||
<path class="st0" d="M199.5,192c-5.3-6-10.6-12-15.8-18C122.6,228.8,61.6,283.6,0.5,338.3c0,4.1,0.6,15.5,8.6,26.7
|
|
||||||
c1.7,2.4,9.6,12.9,24.1,17.2c5.3,1.6,10,1.9,13.1,1.9C97.5,320.2,148.5,256.1,199.5,192z"/>
|
|
||||||
<path class="st0" d="M84.7,384.2c-12.7,0-25.5,0-38.2,0c58.2-56.2,116.5-112.5,174.7-168.7c8.3,9.1,16.6,18.2,24.9,27.2
|
|
||||||
c-2.2,1.1-5.5,3-8.4,6.4c-3.1,3.7-4.2,7.3-4.4,7.8C231.3,262.4,194.5,295.2,84.7,384.2z"/>
|
|
||||||
<path class="st0" d="M46.4,384.2c-15.3-15.3-30.6-30.6-45.9-45.9C52.8,277.5,105.1,216.8,157.4,156c-3.7,6.7-2.2,15.1,3.5,20
|
|
||||||
c5.4,4.6,13.3,5.1,19.4,1C135.7,246.1,91.1,315.1,46.4,384.2z"/>
|
|
||||||
<path class="st0" d="M49.6,384.3c-1.1,0-2.1,0-3.2-0.1c50.1-62.9,100.2-125.8,150.3-188.7c-3.5,6.6-2.1,14.8,3.4,19.7
|
|
||||||
c5.8,5.2,14.8,5.3,21,0.3C164,271.7,106.8,328,49.6,384.3z"/>
|
|
||||||
<path class="st0" d="M374.6,384.2c-96.6,0-193.3,0-289.9,0C16.5,308,1.3,223,28.5,194.5C57,164.7,150.6,177,233.3,256.9
|
|
||||||
c-3.9,11.8,2,24.8,13.3,29.6c11,4.7,24,0.4,30.2-10C309.3,312.4,342,348.3,374.6,384.2z"/>
|
|
||||||
<path class="st0" d="M219.7,226.7"/>
|
|
||||||
<path class="st0" d="M368.9,480c-74.9,0-149.8,0-224.7,0c-8.8,0-16-7.2-16-16c0-8.8,7.2-16,16-16c74.9,0,149.9,0,224.8,0.1
|
|
||||||
c8.3,0.7,14.7,7.6,14.7,15.9C383.7,472.3,377.2,479.3,368.9,480z"/>
|
|
||||||
<rect x="208.1" y="384.2" class="st0" width="31.9" height="63.9"/>
|
|
||||||
<rect x="272" y="384.2" class="st0" width="32" height="63.9"/>
|
|
||||||
<path class="st0" d="M410.3,395.5"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 884 B |
29
front/dist/resources/logos/monitor.svg
vendored
29
front/dist/resources/logos/monitor.svg
vendored
@ -1,15 +1,24 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Generator: Adobe Illustrator 24.1.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 512 480" style="enable-background:new 0 0 512 480;" xml:space="preserve">
|
viewBox="0 0 469.3 469.3" style="enable-background:new 0 0 469.3 469.3;" xml:space="preserve">
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
.st0{fill:#FFFFFF;}
|
.st0{fill:#FFFFFF;}
|
||||||
|
.st1{opacity:0.9;fill:#FFFFFF;stroke:#FFFFFF;stroke-width:15;stroke-miterlimit:10;enable-background:new ;}
|
||||||
</style>
|
</style>
|
||||||
<path class="st0" d="M466,0H46C20.6,0,0,20.6,0,46v292c0,25.4,20.6,46,46,46h162v64h-64c-8.8,0-16,7.2-16,16s7.2,16,16,16h224
|
<g>
|
||||||
c8.8,0,16-7.2,16-16s-7.2-16-16-16h-64v-64h162c25.4,0,46-20.6,46-46V46C512,20.6,491.4,0,466,0z M232,264c0-13.3,10.7-24,24-24
|
<g>
|
||||||
c13.3,0,24,10.7,24,24s-10.7,24-24,24C242.7,288,232,277.3,232,264z M272,448h-32v-64h32V448z M312.6,214.1
|
<path class="st0" d="M426.7,21.3h-384C19.1,21.3,0,40.4,0,64v256c0,23.6,19.1,42.7,42.7,42.7H192v42.7h-42.7V448H320v-42.7h-42.7
|
||||||
c-6.2,6.2-16.4,6.2-22.6,0c-18.7-18.8-49.1-18.8-67.9,0c0,0,0,0,0,0c-6.4,6.1-16.5,5.8-22.6-0.6c-5.9-6.2-5.9-15.9,0-22
|
v-42.7h149.3c23.6,0,42.7-19.1,42.7-42.7V64C469.3,40.4,450.2,21.3,426.7,21.3z M426.7,320h-384V64h384V320z"/>
|
||||||
c31.2-31.2,81.9-31.2,113.1,0c0,0,0,0,0,0C318.8,197.7,318.8,207.8,312.6,214.1z M352.2,174.5c-6.2,6.2-16.4,6.3-22.6,0c0,0,0,0,0,0
|
</g>
|
||||||
c-40.6-40.6-106.4-40.6-147.1,0c-6.2,6.3-16.4,6.3-22.6,0c-6.3-6.2-6.3-16.4,0-22.6c53.1-53.1,139.2-53.1,192.3,0c0,0,0,0,0,0
|
</g>
|
||||||
C358.4,158.1,358.4,168.2,352.2,174.5C352.2,174.5,352.2,174.5,352.2,174.5L352.2,174.5z"/>
|
<g>
|
||||||
|
<g>
|
||||||
|
<path class="st0" d="M267.2,127.2V86.3c0-4.5,3.6-8.1,8.1-8.1c2.3,0,4.5,1,6,2.7l73.2,81.3c2.7,3,2.8,7.5,0.3,10.6l-73.2,89.5
|
||||||
|
c-2.8,3.5-8,4-11.4,1.1c-1.9-1.5-3-3.8-3-6.3v-40.5c-64.3,2.1-104.4,29.6-122.4,83.8c-1.1,3.3-4.2,5.6-7.7,5.6
|
||||||
|
c-0.4,0-0.9,0-1.3-0.1c-3.9-0.6-6.8-4-6.8-8C128.9,202,186.6,131.6,267.2,127.2z M275.3,200.1c4.5,0,8.1,3.6,8.1,8.1v26l54.4-66.4
|
||||||
|
l-54.4-60.4V135c0,4.5-3.6,8.1-8.1,8.1c-63.9,0-111.8,44.2-125.9,111.7C175.6,218.5,217.8,200.1,275.3,200.1z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path class="st1" d="M13.4,42.7C153.6,142.3,293.8,241.9,434,341.5"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.3 KiB |
48
front/dist/resources/style/style.css
vendored
48
front/dist/resources/style/style.css
vendored
@ -44,13 +44,13 @@ body .message-info.warning{
|
|||||||
.video-container i{
|
.video-container i{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 65px;
|
height: 100px;
|
||||||
left: calc(50% - 50px);
|
left: calc(50% - 50px);
|
||||||
top: calc(50% - 50px);
|
top: calc(50% - 50px);
|
||||||
background-color: black;
|
background-color: black;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding-top: 35px;
|
padding-top: 32px;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
@ -58,8 +58,8 @@ body .message-info.warning{
|
|||||||
.video-container img{
|
.video-container img{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
display: none;
|
display: none;
|
||||||
width: 25px;
|
width: 40px;
|
||||||
height: 25px;
|
height: 40px;
|
||||||
left: 5px;
|
left: 5px;
|
||||||
bottom: 5px;
|
bottom: 5px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
@ -108,10 +108,12 @@ body .message-info.warning{
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
cursor: url('/resources/logos/cursor_pointer.png'), pointer;
|
cursor: url('/resources/logos/cursor_pointer.png'), pointer;
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
}
|
}
|
||||||
.video-container button.report span{
|
.video-container button.report span{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 8px;
|
bottom: 6px;
|
||||||
left: 36px;
|
left: 36px;
|
||||||
color: white;
|
color: white;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
@ -136,7 +138,7 @@ body .message-info.warning{
|
|||||||
#div-myCamVideo {
|
#div-myCamVideo {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 15px;
|
right: 15px;
|
||||||
bottom: 15px;
|
bottom: 30px;
|
||||||
border-radius: 15px 15px 15px 15px;
|
border-radius: 15px 15px 15px 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,7 +170,7 @@ video#myCamVideo{
|
|||||||
background: #666;
|
background: #666;
|
||||||
box-shadow: 2px 2px 24px #444;
|
box-shadow: 2px 2px 24px #444;
|
||||||
border-radius: 48px;
|
border-radius: 48px;
|
||||||
transform: translateY(40px);
|
transform: translateY(20px);
|
||||||
transition-timing-function: ease-in-out;
|
transition-timing-function: ease-in-out;
|
||||||
bottom: 20px;
|
bottom: 20px;
|
||||||
}
|
}
|
||||||
@ -184,7 +186,7 @@ video#myCamVideo{
|
|||||||
.btn-cam-action div:hover{
|
.btn-cam-action div:hover{
|
||||||
background: #407cf7;
|
background: #407cf7;
|
||||||
box-shadow: 4px 4px 48px #666;
|
box-shadow: 4px 4px 48px #666;
|
||||||
transition: 280ms;
|
transition: 120ms;
|
||||||
}
|
}
|
||||||
.btn-micro{
|
.btn-micro{
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
@ -220,8 +222,8 @@ video#myCamVideo{
|
|||||||
.connecting-spinner {
|
.connecting-spinner {
|
||||||
/*display: inline-block;*/
|
/*display: inline-block;*/
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: calc(50% - 68px);
|
left: calc(50% - 62px);
|
||||||
top: calc(50% - 68px);
|
top: calc(50% - 62px);
|
||||||
|
|
||||||
|
|
||||||
width: 130px;
|
width: 130px;
|
||||||
@ -804,7 +806,7 @@ input[type=range]:focus::-ms-fill-upper {
|
|||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
.main-container .audio-playing img{
|
.main-container .audio-playing img{
|
||||||
width: 30px;
|
/*width: 30px;*/
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
background-color: #ffda01;
|
background-color: #ffda01;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
@ -812,6 +814,7 @@ input[type=range]:focus::-ms-fill-upper {
|
|||||||
.main-container .audio-playing p{
|
.main-container .audio-playing p{
|
||||||
color: white;
|
color: white;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
|
margin-top: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* VIDEO QUALITY */
|
/* VIDEO QUALITY */
|
||||||
@ -861,10 +864,10 @@ div.modal-report-user{
|
|||||||
|
|
||||||
.modal-report-user img{
|
.modal-report-user img{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
height: 50px;
|
height: 24px;
|
||||||
width: 50px;
|
width: 24px;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
left: calc(50% - 25px);
|
left: calc(50% - 12px);
|
||||||
top: 10px;
|
top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1028,7 +1031,7 @@ div.modal-report-user{
|
|||||||
background-color: #2d2d2dba;
|
background-color: #2d2d2dba;
|
||||||
right: 34px;
|
right: 34px;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
padding: 6px 0px;
|
padding: 2px 0px;
|
||||||
border-radius: 15px;
|
border-radius: 15px;
|
||||||
border: none;
|
border: none;
|
||||||
color: white;
|
color: white;
|
||||||
@ -1084,18 +1087,18 @@ div.modal-report-user{
|
|||||||
.discussion .send-message{
|
.discussion .send-message{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 45px;
|
bottom: 45px;
|
||||||
width: 220px;
|
width: 200px;
|
||||||
height: 26px;
|
height: 26px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.discussion .send-message input{
|
.discussion .send-message input{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: calc(100% - 10px);
|
width: calc(100% - 20px);
|
||||||
height: 20px;
|
height: 30px;
|
||||||
background-color: #171717;
|
background-color: #171717;
|
||||||
color: white;
|
color: white;
|
||||||
border-radius: 15px;
|
border-radius: 10px;
|
||||||
border: none;
|
border: none;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
}
|
}
|
||||||
@ -1128,10 +1131,11 @@ div.action p.action-body{
|
|||||||
padding: 10px;
|
padding: 10px;
|
||||||
background-color: #2d2d2dba;
|
background-color: #2d2d2dba;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: 12px;
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
max-width: 150px;
|
max-width: 250px;
|
||||||
margin-left: calc(50% - 75px);
|
margin-left: calc(50% - 125px);
|
||||||
border-radius: 15px;
|
border-radius: 15px;
|
||||||
}
|
}
|
||||||
.popUpElement{
|
.popUpElement{
|
||||||
|
@ -5,6 +5,7 @@ export enum AdminMessageEventTypes {
|
|||||||
admin = 'message',
|
admin = 'message',
|
||||||
audio = 'audio',
|
audio = 'audio',
|
||||||
ban = 'ban',
|
ban = 'ban',
|
||||||
|
banned = 'banned',
|
||||||
}
|
}
|
||||||
|
|
||||||
interface AdminMessageEvent {
|
interface AdminMessageEvent {
|
||||||
|
@ -188,7 +188,7 @@ export class RoomConnection implements RoomConnection {
|
|||||||
} else if (message.hasSendusermessage()) {
|
} else if (message.hasSendusermessage()) {
|
||||||
adminMessagesService.onSendusermessage(message.getSendusermessage() as SendUserMessage);
|
adminMessagesService.onSendusermessage(message.getSendusermessage() as SendUserMessage);
|
||||||
} else if (message.hasBanusermessage()) {
|
} else if (message.hasBanusermessage()) {
|
||||||
adminMessagesService.onSendusermessage(message.getSendusermessage() as BanUserMessage);
|
adminMessagesService.onSendusermessage(message.getBanusermessage() as BanUserMessage);
|
||||||
} else if (message.hasWorldfullwarningmessage()) {
|
} else if (message.hasWorldfullwarningmessage()) {
|
||||||
worldFullWarningStream.onMessage();
|
worldFullWarningStream.onMessage();
|
||||||
} else if (message.hasRefreshroommessage()) {
|
} else if (message.hasRefreshroommessage()) {
|
||||||
|
@ -15,6 +15,7 @@ const ZOOM_LEVEL = 1/*3/4*/;
|
|||||||
const POSITION_DELAY = 200; // Wait 200ms between sending position events
|
const POSITION_DELAY = 200; // Wait 200ms between sending position events
|
||||||
const MAX_EXTRAPOLATION_TIME = 100; // Extrapolate a maximum of 250ms if no new movement is sent by the player
|
const MAX_EXTRAPOLATION_TIME = 100; // Extrapolate a maximum of 250ms if no new movement is sent by the player
|
||||||
export const MAX_USERNAME_LENGTH = parseInt(process.env.MAX_USERNAME_LENGTH || '') || 8;
|
export const MAX_USERNAME_LENGTH = parseInt(process.env.MAX_USERNAME_LENGTH || '') || 8;
|
||||||
|
export const MAX_PER_GROUP = parseInt(process.env.MAX_PER_GROUP || '4');
|
||||||
|
|
||||||
export {
|
export {
|
||||||
DEBUG_MODE,
|
DEBUG_MODE,
|
||||||
|
@ -10,7 +10,14 @@ import {
|
|||||||
RoomJoinedMessageInterface
|
RoomJoinedMessageInterface
|
||||||
} from "../../Connexion/ConnexionModels";
|
} from "../../Connexion/ConnexionModels";
|
||||||
import {CurrentGamerInterface, hasMovedEventName, Player} from "../Player/Player";
|
import {CurrentGamerInterface, hasMovedEventName, Player} from "../Player/Player";
|
||||||
import {DEBUG_MODE, JITSI_PRIVATE_MODE, POSITION_DELAY, RESOLUTION, ZOOM_LEVEL} from "../../Enum/EnvironmentVariable";
|
import {
|
||||||
|
DEBUG_MODE,
|
||||||
|
JITSI_PRIVATE_MODE,
|
||||||
|
MAX_PER_GROUP,
|
||||||
|
POSITION_DELAY,
|
||||||
|
RESOLUTION,
|
||||||
|
ZOOM_LEVEL
|
||||||
|
} from "../../Enum/EnvironmentVariable";
|
||||||
import {ITiledMap, ITiledMapLayer, ITiledMapLayerProperty, ITiledMapObject, ITiledTileSet} from "../Map/ITiledMap";
|
import {ITiledMap, ITiledMapLayer, ITiledMapLayerProperty, ITiledMapObject, ITiledTileSet} from "../Map/ITiledMap";
|
||||||
import {AddPlayerInterface} from "./AddPlayerInterface";
|
import {AddPlayerInterface} from "./AddPlayerInterface";
|
||||||
import {PlayerAnimationDirections} from "../Player/Animation";
|
import {PlayerAnimationDirections} from "../Player/Animation";
|
||||||
@ -138,7 +145,7 @@ export class GameScene extends ResizableScene implements CenterListener {
|
|||||||
// A promise that will resolve when the "create" method is called (signaling loading is ended)
|
// A promise that will resolve when the "create" method is called (signaling loading is ended)
|
||||||
private createPromise: Promise<void>;
|
private createPromise: Promise<void>;
|
||||||
private createPromiseResolve!: (value?: void | PromiseLike<void>) => void;
|
private createPromiseResolve!: (value?: void | PromiseLike<void>) => void;
|
||||||
|
private iframeSubscriptionList! : Array<Subscription>;
|
||||||
MapUrlFile: string;
|
MapUrlFile: string;
|
||||||
RoomId: string;
|
RoomId: string;
|
||||||
instance: string;
|
instance: string;
|
||||||
@ -468,9 +475,10 @@ export class GameScene extends ResizableScene implements CenterListener {
|
|||||||
this.openChatIcon = new OpenChatIcon(this, 2, this.game.renderer.height - 2)
|
this.openChatIcon = new OpenChatIcon(this, 2, this.game.renderer.height - 2)
|
||||||
|
|
||||||
// FIXME: change this to use the UserInputManager class for input
|
// FIXME: change this to use the UserInputManager class for input
|
||||||
this.input.keyboard.on('keyup-M', () => {
|
// FIXME: Comment this feature because when user write M key in report input, the layout change.
|
||||||
|
/*this.input.keyboard.on('keyup-M', () => {
|
||||||
this.switchLayoutMode();
|
this.switchLayoutMode();
|
||||||
});
|
});*/
|
||||||
|
|
||||||
this.reposition();
|
this.reposition();
|
||||||
|
|
||||||
@ -764,7 +772,8 @@ export class GameScene extends ResizableScene implements CenterListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private listenToIframeEvents(): void {
|
private listenToIframeEvents(): void {
|
||||||
iframeListener.openPopupStream.subscribe((openPopupEvent) => {
|
this.iframeSubscriptionList = [];
|
||||||
|
this.iframeSubscriptionList.push(iframeListener.openPopupStream.subscribe((openPopupEvent) => {
|
||||||
|
|
||||||
let objectLayerSquare : ITiledMapObject;
|
let objectLayerSquare : ITiledMapObject;
|
||||||
const targetObjectData = this.getObjectLayerData(openPopupEvent.targetObject);
|
const targetObjectData = this.getObjectLayerData(openPopupEvent.targetObject);
|
||||||
@ -808,7 +817,6 @@ ${escapedMessage}
|
|||||||
}
|
}
|
||||||
id++;
|
id++;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.tweens.add({
|
this.tweens.add({
|
||||||
targets : domElement ,
|
targets : domElement ,
|
||||||
scale : 1,
|
scale : 1,
|
||||||
@ -817,9 +825,9 @@ ${escapedMessage}
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.popUpElements.set(openPopupEvent.popupId, domElement);
|
this.popUpElements.set(openPopupEvent.popupId, domElement);
|
||||||
});
|
}));
|
||||||
|
|
||||||
iframeListener.closePopupStream.subscribe((closePopupEvent) => {
|
this.iframeSubscriptionList.push(iframeListener.closePopupStream.subscribe((closePopupEvent) => {
|
||||||
const popUpElement = this.popUpElements.get(closePopupEvent.popupId);
|
const popUpElement = this.popUpElements.get(closePopupEvent.popupId);
|
||||||
if (popUpElement === undefined) {
|
if (popUpElement === undefined) {
|
||||||
console.error('Could not close popup with ID ', closePopupEvent.popupId,'. Maybe it has already been closed?');
|
console.error('Could not close popup with ID ', closePopupEvent.popupId,'. Maybe it has already been closed?');
|
||||||
@ -835,23 +843,25 @@ ${escapedMessage}
|
|||||||
this.popUpElements.delete(closePopupEvent.popupId);
|
this.popUpElements.delete(closePopupEvent.popupId);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
}));
|
||||||
|
|
||||||
iframeListener.disablePlayerControlStream.subscribe(()=>{
|
this.iframeSubscriptionList.push(iframeListener.disablePlayerControlStream.subscribe(()=>{
|
||||||
this.userInputManager.disableControls();
|
this.userInputManager.disableControls();
|
||||||
})
|
}));
|
||||||
iframeListener.enablePlayerControlStream.subscribe(()=>{
|
|
||||||
|
this.iframeSubscriptionList.push(iframeListener.enablePlayerControlStream.subscribe(()=>{
|
||||||
this.userInputManager.restoreControls();
|
this.userInputManager.restoreControls();
|
||||||
})
|
}));
|
||||||
let scriptedBubbleSprite : Sprite;
|
let scriptedBubbleSprite : Sprite;
|
||||||
iframeListener.displayBubbleStream.subscribe(()=>{
|
this.iframeSubscriptionList.push(iframeListener.displayBubbleStream.subscribe(()=>{
|
||||||
scriptedBubbleSprite = new Sprite(this,this.CurrentPlayer.x + 25,this.CurrentPlayer.y,'circleSprite-white');
|
scriptedBubbleSprite = new Sprite(this,this.CurrentPlayer.x + 25,this.CurrentPlayer.y,'circleSprite-white');
|
||||||
scriptedBubbleSprite.setDisplayOrigin(48, 48);
|
scriptedBubbleSprite.setDisplayOrigin(48, 48);
|
||||||
this.add.existing(scriptedBubbleSprite);
|
this.add.existing(scriptedBubbleSprite);
|
||||||
})
|
}));
|
||||||
iframeListener.removeBubbleStream.subscribe(()=>{
|
|
||||||
|
this.iframeSubscriptionList.push(iframeListener.removeBubbleStream.subscribe(()=>{
|
||||||
scriptedBubbleSprite.destroy();
|
scriptedBubbleSprite.destroy();
|
||||||
})
|
}));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -896,6 +906,10 @@ ${escapedMessage}
|
|||||||
this.simplePeer.closeAllConnections();
|
this.simplePeer.closeAllConnections();
|
||||||
this.simplePeer?.unregister();
|
this.simplePeer?.unregister();
|
||||||
this.messageSubscription?.unsubscribe();
|
this.messageSubscription?.unsubscribe();
|
||||||
|
|
||||||
|
for(const iframeEvents of this.iframeSubscriptionList){
|
||||||
|
iframeEvents.unsubscribe();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private removeAllRemotePlayers(): void {
|
private removeAllRemotePlayers(): void {
|
||||||
@ -1344,7 +1358,7 @@ ${escapedMessage}
|
|||||||
this,
|
this,
|
||||||
Math.round(groupPositionMessage.position.x),
|
Math.round(groupPositionMessage.position.x),
|
||||||
Math.round(groupPositionMessage.position.y),
|
Math.round(groupPositionMessage.position.y),
|
||||||
groupPositionMessage.groupSize === 4 ? 'circleSprite-red' : 'circleSprite-white'
|
groupPositionMessage.groupSize === MAX_PER_GROUP ? 'circleSprite-red' : 'circleSprite-white'
|
||||||
);
|
);
|
||||||
sprite.setDisplayOrigin(48, 48);
|
sprite.setDisplayOrigin(48, 48);
|
||||||
this.add.existing(sprite);
|
this.add.existing(sprite);
|
||||||
|
@ -105,7 +105,12 @@ export class MenuScene extends Phaser.Scene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public revealMenuIcon(): void {
|
public revealMenuIcon(): void {
|
||||||
(this.menuButton.getChildByID('menuIcon') as HTMLElement).hidden = false
|
//TODO fix me: add try catch because at the same time, 'this.menuButton' variable doesn't exist and there is error on 'getChildByID' function
|
||||||
|
try {
|
||||||
|
(this.menuButton.getChildByID('menuIcon') as HTMLElement).hidden = false;
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
openSideMenu() {
|
openSideMenu() {
|
||||||
@ -322,7 +327,9 @@ export class MenuScene extends Phaser.Scene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private gotToCreateMapPage() {
|
private gotToCreateMapPage() {
|
||||||
const sparkHost = 'https://'+window.location.host.replace('play.', '')+'/choose-map.html';
|
//const sparkHost = 'https://'+window.location.host.replace('play.', '')+'/choose-map.html';
|
||||||
|
//TODO fix me: this button can to send us on WorkAdventure BO.
|
||||||
|
const sparkHost = 'https://workadventu.re/getting-started';
|
||||||
window.open(sparkHost, '_blank');
|
window.open(sparkHost, '_blank');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,8 +72,8 @@ export class ReportMenu extends Phaser.GameObjects.DOMElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public close(): void {
|
public close(): void {
|
||||||
|
gameManager.getCurrentGameScene(this.scene).userInputManager.restoreControls();
|
||||||
this.opened = false;
|
this.opened = false;
|
||||||
gameManager.getCurrentGameScene(this.scene).userInputManager.initKeyBoardEvent();
|
|
||||||
const mainEl = this.getChildByID('gameReport') as HTMLElement;
|
const mainEl = this.getChildByID('gameReport') as HTMLElement;
|
||||||
this.scene.tweens.add({
|
this.scene.tweens.add({
|
||||||
targets: this,
|
targets: this,
|
||||||
|
@ -14,6 +14,12 @@ let videoConstraint: boolean|MediaTrackConstraints = {
|
|||||||
resizeMode: 'crop-and-scale',
|
resizeMode: 'crop-and-scale',
|
||||||
aspectRatio: 1.777777778
|
aspectRatio: 1.777777778
|
||||||
};
|
};
|
||||||
|
const audioConstraint: boolean|MediaTrackConstraints = {
|
||||||
|
//TODO: make these values configurable in the game settings menu and store them in localstorage
|
||||||
|
autoGainControl: false,
|
||||||
|
echoCancellation: true,
|
||||||
|
noiseSuppression: false
|
||||||
|
};
|
||||||
|
|
||||||
export type UpdatedLocalStreamCallback = (media: MediaStream|null) => void;
|
export type UpdatedLocalStreamCallback = (media: MediaStream|null) => void;
|
||||||
export type StartScreenSharingCallback = (media: MediaStream) => void;
|
export type StartScreenSharingCallback = (media: MediaStream) => void;
|
||||||
@ -36,7 +42,7 @@ export class MediaManager {
|
|||||||
webrtcInAudio: HTMLAudioElement;
|
webrtcInAudio: HTMLAudioElement;
|
||||||
private webrtcOutAudio: HTMLAudioElement;
|
private webrtcOutAudio: HTMLAudioElement;
|
||||||
constraintsMedia : MediaStreamConstraints = {
|
constraintsMedia : MediaStreamConstraints = {
|
||||||
audio: true,
|
audio: audioConstraint,
|
||||||
video: videoConstraint
|
video: videoConstraint
|
||||||
};
|
};
|
||||||
updatedLocalStreamCallBacks : Set<UpdatedLocalStreamCallback> = new Set<UpdatedLocalStreamCallback>();
|
updatedLocalStreamCallBacks : Set<UpdatedLocalStreamCallback> = new Set<UpdatedLocalStreamCallback>();
|
||||||
@ -234,7 +240,7 @@ export class MediaManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public enableMicrophone() {
|
public enableMicrophone() {
|
||||||
this.constraintsMedia.audio = true;
|
this.constraintsMedia.audio = audioConstraint;
|
||||||
|
|
||||||
this.getCamera().then((stream) => {
|
this.getCamera().then((stream) => {
|
||||||
//TODO show error message tooltip upper of camera button
|
//TODO show error message tooltip upper of camera button
|
||||||
@ -309,12 +315,17 @@ export class MediaManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private enableScreenSharing() {
|
private enableScreenSharing() {
|
||||||
this.monitorClose.style.display = "none";
|
|
||||||
this.monitor.style.display = "block";
|
|
||||||
this.monitorBtn.classList.add("enabled");
|
|
||||||
this.getScreenMedia().then((stream) => {
|
this.getScreenMedia().then((stream) => {
|
||||||
this.triggerStartedScreenSharingCallbacks(stream);
|
this.triggerStartedScreenSharingCallbacks(stream);
|
||||||
|
this.monitorClose.style.display = "none";
|
||||||
|
this.monitor.style.display = "block";
|
||||||
|
this.monitorBtn.classList.add("enabled");
|
||||||
|
}, () => {
|
||||||
|
this.monitorClose.style.display = "block";
|
||||||
|
this.monitor.style.display = "none";
|
||||||
|
this.monitorBtn.classList.remove("enabled");
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private disableScreenSharing() {
|
private disableScreenSharing() {
|
||||||
|
@ -34,7 +34,7 @@ const fps : Phaser.Types.Core.FPSConfig = {
|
|||||||
/**
|
/**
|
||||||
* Use setTimeout instead of requestAnimationFrame to run the game loop.
|
* Use setTimeout instead of requestAnimationFrame to run the game loop.
|
||||||
*/
|
*/
|
||||||
forceSetTimeOut: true,
|
forceSetTimeOut: false,
|
||||||
/**
|
/**
|
||||||
* Calculate the average frame delta from this many consecutive frame intervals.
|
* Calculate the average frame delta from this many consecutive frame intervals.
|
||||||
*/
|
*/
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
{
|
{
|
||||||
"name":"exitUrl",
|
"name":"exitUrl",
|
||||||
"type":"string",
|
"type":"string",
|
||||||
"value":"@\/tcm\/workadventure\/floor0"
|
"value":"\/@\/tcm\/workadventure\/floor0"
|
||||||
}],
|
}],
|
||||||
"type":"tilelayer",
|
"type":"tilelayer",
|
||||||
"visible":true,
|
"visible":true,
|
||||||
@ -355,7 +355,7 @@
|
|||||||
"value":"scriptTuto.js"
|
"value":"scriptTuto.js"
|
||||||
}],
|
}],
|
||||||
"renderorder":"right-down",
|
"renderorder":"right-down",
|
||||||
"tiledversion":"2021.03.23",
|
"tiledversion":"1.5.0",
|
||||||
"tileheight":32,
|
"tileheight":32,
|
||||||
"tilesets":[
|
"tilesets":[
|
||||||
{
|
{
|
||||||
|
@ -364,6 +364,10 @@ export class SocketManager implements ZoneEventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
emitPlayGlobalMessage(client: ExSocketInterface, playglobalmessage: PlayGlobalMessage) {
|
emitPlayGlobalMessage(client: ExSocketInterface, playglobalmessage: PlayGlobalMessage) {
|
||||||
|
if (!client.tags.includes('admin')) {
|
||||||
|
//In case of xss injection, we just kill the connection.
|
||||||
|
throw 'Client is not an admin!';
|
||||||
|
}
|
||||||
const pusherToBackMessage = new PusherToBackMessage();
|
const pusherToBackMessage = new PusherToBackMessage();
|
||||||
pusherToBackMessage.setPlayglobalmessage(playglobalmessage);
|
pusherToBackMessage.setPlayglobalmessage(playglobalmessage);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user