Compare commits
9 commits
78ec717551
...
54fcb95a35
| Author | SHA1 | Date | |
|---|---|---|---|
| 54fcb95a35 | |||
| 7dfb0bd2a7 | |||
| dde10e9de2 | |||
| d86be23a21 | |||
| 4dc6ff409c | |||
| 6fabe4aab7 | |||
| 5ad22ade88 | |||
| eab426e8b5 | |||
| ebe8eb3cfb |
14
README.md
|
|
@ -84,16 +84,17 @@ You can override the default content (embedded in the executable).
|
||||||
Extract and run example 3D content in your browser:
|
Extract and run example 3D content in your browser:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ unzip xrforge.com myverse/* # extract example 3D verse files
|
|
||||||
$ ./xrforge.com server # run as server
|
$ ./xrforge.com server # run as server
|
||||||
|
ℹ️ unzipping example content to folder 'myverse'
|
||||||
opening your browser at https://localhost:8080
|
opening your browser at https://localhost:8080
|
||||||
```
|
```
|
||||||
|
|
||||||
> just look around in `myverse` and get a hunch of how directories + sidecarfiles are used to manage content.
|
> Play around in the browser, and launch a file-explorer with directory `myverse`, and see how directories, sidecarfiles and symlinks are used to manage interconnected virtual worlds.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="p" id="radical">
|
<div class="p" id="radical">
|
||||||
|
|
||||||
## Radical opensource
|
## Radical opensource
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
@ -116,11 +117,12 @@ Archive: result/bin/xrforge.com
|
||||||
|
|
||||||
## Adding content
|
## Adding content
|
||||||
|
|
||||||
First you need a directory with glTF or JanusXR experiences.<br>
|
First you need a directory with glTF or (JanusXR) JML experiences.<br>
|
||||||
Just run this in the terminal:
|
Luckily, running the server (`./xrforge.com server`) once will produce example-folder `myverse`.<br>
|
||||||
|
Then run this in the terminal:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ unzip xrforge.com myverse
|
$ unzip xrforge.com myverse/* # optional: unzip example-content manually
|
||||||
$ tree myverse
|
$ tree myverse
|
||||||
myverse
|
myverse
|
||||||
├── janusxr
|
├── janusxr
|
||||||
|
|
@ -138,7 +140,7 @@ myverse
|
||||||
└── tronverse.png
|
└── tronverse.png
|
||||||
```
|
```
|
||||||
|
|
||||||
> optionally you can run `./xrforge.com admin` and change the `myverse` directory if needed.
|
> optionally you can run `./xrforge.com admin` and change default directoryname (`myverse`) if needed.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="addcontent">
|
<div class="addcontent">
|
||||||
|
|
|
||||||
4
run.sh
|
|
@ -1,5 +1,9 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
source ./.env
|
source ./.env
|
||||||
rebuild
|
rebuild
|
||||||
|
test -d myverse && {
|
||||||
|
read -p "delete ./myverse? [y/n] " ok
|
||||||
|
test "$ok" = y && rm -rf myverse
|
||||||
|
}
|
||||||
rm result/bin/xrforge.lua || true
|
rm result/bin/xrforge.lua || true
|
||||||
DEBUG=1 result/bin/xrforge.com -c 0 "$@" --nobrowser
|
DEBUG=1 result/bin/xrforge.com -c 0 "$@" --nobrowser
|
||||||
|
|
|
||||||
|
|
@ -83,17 +83,18 @@ app.plugin.pubnix = app.addPlugin('plugin/pubnix')
|
||||||
app.plugin.diskscan = app.addPlugin('plugin/diskscan')
|
app.plugin.diskscan = app.addPlugin('plugin/diskscan')
|
||||||
app.plugin.convert = app.addPlugin('plugin/convert')
|
app.plugin.convert = app.addPlugin('plugin/convert')
|
||||||
app.plugin.moderation = app.addPlugin('plugin/moderation')
|
app.plugin.moderation = app.addPlugin('plugin/moderation')
|
||||||
|
app.plugin.desktopfile = app.addPlugin('plugin/desktopfile')
|
||||||
app.plugin.xrfragments = app.addPlugin('plugin/xrfragments')
|
app.plugin.xrfragments = app.addPlugin('plugin/xrfragments')
|
||||||
app.plugin.janusxr = app.addPlugin('plugin/janusxr')
|
app.plugin.janusxr = app.addPlugin('plugin/janusxr')
|
||||||
app.plugin.clouddrive = app.addPlugin('plugin/clouddrive')
|
app.plugin.clouddrive = app.addPlugin('plugin/clouddrive')
|
||||||
app.plugin.markdown = app.addPlugin('plugin/markdown')
|
app.plugin.markdown = app.addPlugin('plugin/markdown')
|
||||||
app.plugin.rssatom = app.addPlugin('plugin/rssatom')
|
app.plugin.rssatom = app.addPlugin('plugin/rssatom')
|
||||||
app.plugin.federation = app.addPlugin('plugin/federation')
|
app.plugin.federation = app.addPlugin('plugin/federation')
|
||||||
app.plugin.manyfold = app.addPlugin('plugin/manyfold')
|
|
||||||
app.plugin.peertube = app.addPlugin('plugin/peertube')
|
app.plugin.peertube = app.addPlugin('plugin/peertube')
|
||||||
app.plugin.git = app.addPlugin('plugin/git')
|
app.plugin.git = app.addPlugin('plugin/git')
|
||||||
app.plugin.webhook = app.addPlugin('plugin/webhook')
|
app.plugin.webhook = app.addPlugin('plugin/webhook')
|
||||||
app.plugin.archive = app.addPlugin('plugin/archive')
|
app.plugin.archive = app.addPlugin('plugin/archive')
|
||||||
|
app.plugin.manyfold = app.addPlugin('plugin/manyfold')
|
||||||
app.plugin.openbrush = app.addPlugin('plugin/openbrush')
|
app.plugin.openbrush = app.addPlugin('plugin/openbrush')
|
||||||
app.plugin.scheduler = app.addPlugin('plugin/scheduler') -- should always be second last
|
app.plugin.scheduler = app.addPlugin('plugin/scheduler') -- should always be second last
|
||||||
app.plugin.staticwebgen = app.addPlugin('plugin/staticwebgen') -- should always be last
|
app.plugin.staticwebgen = app.addPlugin('plugin/staticwebgen') -- should always be last
|
||||||
|
|
@ -108,6 +109,7 @@ print = function(...) Log(kLogInfo, ... or "''") end -- nice redbean lo
|
||||||
app.url['^/data'] = '/data.lua' -- setup custom file endpoint
|
app.url['^/data'] = '/data.lua' -- setup custom file endpoint
|
||||||
|
|
||||||
app.use( app.plugin.global.middleware.homepage_2D_or_3D )
|
app.use( app.plugin.global.middleware.homepage_2D_or_3D )
|
||||||
|
app.use( app.plugin.global.middleware.force_listing )
|
||||||
|
|
||||||
app.get('^/design[/]?$', util.pagerender('page/design.html'))
|
app.get('^/design[/]?$', util.pagerender('page/design.html'))
|
||||||
app.get('^/about[/]?$', util.pagerender('page/about.html'))
|
app.get('^/about[/]?$', util.pagerender('page/about.html'))
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ end
|
||||||
util.readfile = function(filename, mode, silent)
|
util.readfile = function(filename, mode, silent)
|
||||||
local file, err = io.open(filename, mode or "r")
|
local file, err = io.open(filename, mode or "r")
|
||||||
if not file then
|
if not file then
|
||||||
if not silent then print("Error opening file:", err) end
|
if not silent then print("Error opening file:", filename, err) end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local content = file:read("*a")
|
local content = file:read("*a")
|
||||||
|
|
@ -24,7 +24,7 @@ end
|
||||||
util.writefile = function(filename, content, mode)
|
util.writefile = function(filename, content, mode)
|
||||||
local file, err = io.open(filename, mode or "w") -- Default write mode
|
local file, err = io.open(filename, mode or "w") -- Default write mode
|
||||||
if not file then
|
if not file then
|
||||||
return print("Error opening file:", err)
|
return print("Error opening file:", filename, err)
|
||||||
end
|
end
|
||||||
file:write(content)
|
file:write(content)
|
||||||
file:close()
|
file:close()
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ body.script .script{ visibility: visible !important; }
|
||||||
.margin1L{ margin: 0px 20px 10px 0px;}
|
.margin1L{ margin: 0px 20px 10px 0px;}
|
||||||
.margin1{ margin: 10px 20px; }
|
.margin1{ margin: 10px 20px; }
|
||||||
.padding1{ padding: 10px 20px 10px 20px; }
|
.padding1{ padding: 10px 20px 10px 20px; }
|
||||||
|
.nopadding{ padding:0px;}
|
||||||
|
|
||||||
.content{
|
.content{
|
||||||
font-family: sans-serif;
|
font-family: sans-serif;
|
||||||
|
|
@ -86,6 +87,7 @@ textarea{
|
||||||
input[type=submit]{
|
input[type=submit]{
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: 0 15px 0px 0px;
|
margin: 0 15px 0px 0px;
|
||||||
|
border: 1px dotted
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn a,
|
.btn a,
|
||||||
|
|
@ -102,6 +104,20 @@ input[type=submit] {
|
||||||
background:#112;
|
background:#112;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.iconbtn{
|
||||||
|
float: right;
|
||||||
|
border: 1px solid #8880 !important;
|
||||||
|
border-spacing: 10px 10px 10px 10px;
|
||||||
|
padding: 0px 5px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background: #2230;
|
||||||
|
transition: border 0.4s;
|
||||||
|
}
|
||||||
|
.iconbtn:hover{
|
||||||
|
border: 1px solid #888 !important;
|
||||||
|
background: #223;
|
||||||
|
}
|
||||||
|
|
||||||
.btn a:hover,
|
.btn a:hover,
|
||||||
input[type=submit] {
|
input[type=submit] {
|
||||||
color:#F7F;
|
color:#F7F;
|
||||||
|
|
@ -190,7 +206,7 @@ h1{
|
||||||
|
|
||||||
h1 a,
|
h1 a,
|
||||||
h2 a,
|
h2 a,
|
||||||
center a{
|
.jumbotron center a{
|
||||||
text-decoration:none;
|
text-decoration:none;
|
||||||
border:none !important;
|
border:none !important;
|
||||||
}
|
}
|
||||||
|
|
@ -204,14 +220,6 @@ table.header tr td {
|
||||||
border:none;
|
border:none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn.XR{
|
|
||||||
line-height:10px;
|
|
||||||
display: inline-block;
|
|
||||||
position: absolute;
|
|
||||||
top: 20px;
|
|
||||||
right: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* logo */
|
/* logo */
|
||||||
.logo *{
|
.logo *{
|
||||||
font-size:15px;
|
font-size:15px;
|
||||||
|
|
@ -253,7 +261,7 @@ ul{
|
||||||
.grid .tile{ border-radius:5px; }
|
.grid .tile{ border-radius:5px; }
|
||||||
.grid .tile .text{ padding:3px 0px; }
|
.grid .tile .text{ padding:3px 0px; }
|
||||||
.grid .tile .img{
|
.grid .tile .img{
|
||||||
border-radius:20px;
|
border-radius:13px;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
:root{
|
||||||
|
--gradient-1: #114,#224,#114,#3367,#424,#224;
|
||||||
|
}
|
||||||
|
|
||||||
hr{
|
hr{
|
||||||
display:none !important;
|
display:none !important;
|
||||||
}
|
}
|
||||||
|
|
@ -62,7 +66,7 @@ body{
|
||||||
}
|
}
|
||||||
|
|
||||||
.grid .tile .text{
|
.grid .tile .text{
|
||||||
padding: 10px 20px 10px 15px !important;
|
padding: 10px !important;
|
||||||
font-size:14px;
|
font-size:14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -83,9 +87,13 @@ img.icon.list-tree{
|
||||||
filter: invert(1);
|
filter: invert(1);
|
||||||
}
|
}
|
||||||
img.icon.download,
|
img.icon.download,
|
||||||
img.icon.play,{
|
img.icon.play{
|
||||||
transform: translate(0,-1px);
|
transform: translate(0,-1px);
|
||||||
}
|
}
|
||||||
|
img.icon.folder,
|
||||||
|
img.icon.file-document{
|
||||||
|
transform: translate(0,-2px);
|
||||||
|
}
|
||||||
|
|
||||||
img.icon.share{
|
img.icon.share{
|
||||||
opacity:0.66;
|
opacity:0.66;
|
||||||
|
|
|
||||||
17
src/img/file-document.svg
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
<svg
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
>
|
||||||
|
<path d="M7 18H17V16H7V18Z" fill="currentColor" />
|
||||||
|
<path d="M17 14H7V12H17V14Z" fill="currentColor" />
|
||||||
|
<path d="M7 10H11V8H7V10Z" fill="currentColor" />
|
||||||
|
<path
|
||||||
|
fill-rule="evenodd"
|
||||||
|
clip-rule="evenodd"
|
||||||
|
d="M6 2C4.34315 2 3 3.34315 3 5V19C3 20.6569 4.34315 22 6 22H18C19.6569 22 21 20.6569 21 19V9C21 5.13401 17.866 2 14 2H6ZM6 4H13V9H19V19C19 19.5523 18.5523 20 18 20H6C5.44772 20 5 19.5523 5 19V5C5 4.44772 5.44772 4 6 4ZM15 4.10002C16.6113 4.4271 17.9413 5.52906 18.584 7H15V4.10002Z"
|
||||||
|
fill="currentColor"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 645 B |
|
|
@ -9,6 +9,6 @@
|
||||||
fill-rule="evenodd"
|
fill-rule="evenodd"
|
||||||
clip-rule="evenodd"
|
clip-rule="evenodd"
|
||||||
d="M4 1.5C2.89543 1.5 2 2.39543 2 3.5V4.5C2 4.55666 2.00236 4.61278 2.00698 4.66825C0.838141 5.07811 0 6.19118 0 7.5V19.5C0 21.1569 1.34315 22.5 3 22.5H21C22.6569 22.5 24 21.1569 24 19.5V7.5C24 5.84315 22.6569 4.5 21 4.5H11.874C11.4299 2.77477 9.86384 1.5 8 1.5H4ZM9.73244 4.5C9.38663 3.9022 8.74028 3.5 8 3.5H4V4.5H9.73244ZM3 6.5C2.44772 6.5 2 6.94772 2 7.5V19.5C2 20.0523 2.44772 20.5 3 20.5H21C21.5523 20.5 22 20.0523 22 19.5V7.5C22 6.94772 21.5523 6.5 21 6.5H3Z"
|
d="M4 1.5C2.89543 1.5 2 2.39543 2 3.5V4.5C2 4.55666 2.00236 4.61278 2.00698 4.66825C0.838141 5.07811 0 6.19118 0 7.5V19.5C0 21.1569 1.34315 22.5 3 22.5H21C22.6569 22.5 24 21.1569 24 19.5V7.5C24 5.84315 22.6569 4.5 21 4.5H11.874C11.4299 2.77477 9.86384 1.5 8 1.5H4ZM9.73244 4.5C9.38663 3.9022 8.74028 3.5 8 3.5H4V4.5H9.73244ZM3 6.5C2.44772 6.5 2 6.94772 2 7.5V19.5C2 20.0523 2.44772 20.5 3 20.5H21C21.5523 20.5 22 20.0523 22 19.5V7.5C22 6.94772 21.5523 6.5 21 6.5H3Z"
|
||||||
fill="#557"
|
fill="currentColor"
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 662 B After Width: | Height: | Size: 669 B |
3
src/img/info.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="8 10 20.396395760613586 20" width="37.396395760613586" height="40"><!-- svg-source:excalidraw --><metadata></metadata><defs></defs><g stroke-linecap="round" transform="translate(10 11.351351351351354) rotate(0 8.698197880306793 8.783783783783804)"><path d="M4.35 0 C6.69 0, 9.02 0, 13.05 0 M4.35 0 C7.1 0, 9.86 0, 13.05 0 M13.05 0 C15.95 0, 17.4 1.45, 17.4 4.35 M13.05 0 C15.95 0, 17.4 1.45, 17.4 4.35 M17.4 4.35 C17.4 6.35, 17.4 8.35, 17.4 13.22 M17.4 4.35 C17.4 7.54, 17.4 10.73, 17.4 13.22 M17.4 13.22 C17.4 16.12, 15.95 17.57, 13.05 17.57 M17.4 13.22 C17.4 16.12, 15.95 17.57, 13.05 17.57 M13.05 17.57 C9.81 17.57, 6.58 17.57, 4.35 17.57 M13.05 17.57 C10.88 17.57, 8.71 17.57, 4.35 17.57 M4.35 17.57 C1.45 17.57, 0 16.12, 0 13.22 M4.35 17.57 C1.45 17.57, 0 16.12, 0 13.22 M0 13.22 C0 11.05, 0 8.88, 0 4.35 M0 13.22 C0 10.68, 0 8.15, 0 4.35 M0 4.35 C0 1.45, 1.45 0, 4.35 0 M0 4.35 C0 1.45, 1.45 0, 4.35 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(16.756756756756772 10) rotate(0 1.899999976158142 10)"><text x="0" y="16.264000000000001" font-family="Nunito, sans-serif, Segoe UI Emoji" font-size="14px" fill="#1e1e1e" text-anchor="start" style="font-weight:bold;white-space: pre;" direction="ltr" dominant-baseline="alphabetic">i</text></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
BIN
src/img/mastodon.jpg
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
src/img/nlnet.jpg
Normal file
|
After Width: | Height: | Size: 24 KiB |
43
src/img/playcover.svg
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<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="-25 -20 100 100" style="enable-background:new 0 0 58.752 58.752;" xml:space="preserve">
|
||||||
|
<g>
|
||||||
|
<path stroke="#CCC5" stroke-opacity="0.5" fill="#CCC5" d="M52.524,23.925L12.507,0.824c-1.907-1.1-4.376-1.097-6.276,0C4.293,1.94,3.088,4.025,3.088,6.264v46.205
|
||||||
|
c0,2.24,1.204,4.325,3.131,5.435c0.953,0.555,2.042,0.848,3.149,0.848c1.104,0,2.192-0.292,3.141-0.843l40.017-23.103
|
||||||
|
c1.936-1.119,3.138-3.203,3.138-5.439C55.663,27.134,54.462,25.05,52.524,23.925z M49.524,29.612L9.504,52.716
|
||||||
|
c-0.082,0.047-0.18,0.052-0.279-0.005c-0.084-0.049-0.137-0.142-0.137-0.242V6.263c0-0.1,0.052-0.192,0.14-0.243
|
||||||
|
c0.042-0.025,0.09-0.038,0.139-0.038c0.051,0,0.099,0.013,0.142,0.038l40.01,23.098c0.089,0.052,0.145,0.147,0.145,0.249
|
||||||
|
C49.663,29.47,49.611,29.561,49.524,29.612z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/img/xrforge.jpg
Normal file
|
After Width: | Height: | Size: 21 KiB |
77
src/janusweb/index.html
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>JanusWeb</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" type="text/css" href="janusweb.css" media="all" />
|
||||||
|
<link rel="manifest" href="manifest.json">
|
||||||
|
|
||||||
|
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, maximum-scale=1.0, width=device-width" />
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="theme-color" content="#2f363b">
|
||||||
|
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:title" content="XRForge JanusWeb" />
|
||||||
|
<meta property="og:description" content="The World Within The Web" />
|
||||||
|
<meta property="og:image" content="https://janusxr.com/backgrounds/wallpapers/generic.png" />
|
||||||
|
|
||||||
|
|
||||||
|
<script src="janusweb.js"></script>
|
||||||
|
<script src="media/component/janus-script-peertube/translator.js"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<janus-viewer src="./index.html"></janus-viewer> <!-- project this document in 3D -->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
<fireboxroom>
|
||||||
|
<assets></assets>
|
||||||
|
<room use_local_asset="room_plane" fwd="0 0 1">
|
||||||
|
<object js_id="links" rotation="0 180 0">
|
||||||
|
|
||||||
|
<link js_id="1" pos="3 0 10" xdir="-0.866027 0 0.499998" ydir="0 1 0" zdir="-0.499998 0 -0.866027" url="https://www.reddit.com/r/vrsites" col="#ffffff" scale="1.5 3 1" draw_glow="false" >
|
||||||
|
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
||||||
|
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
||||||
|
</paragraph>
|
||||||
|
</link>
|
||||||
|
|
||||||
|
<link js_id="3" pos="5 0 8.5" xdir="-0.707109 0 0.707105" ydir="0 1 0" zdir="-0.707105 0 -0.707109" url="https://vesta.janusxr.org" col="#ffffff" scale="1.5 3 1" draw_glow="false">
|
||||||
|
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
||||||
|
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
||||||
|
</paragraph>
|
||||||
|
</link>
|
||||||
|
|
||||||
|
<link js_id="2" pos="-3 0 10" xdir="-0.866024 0 -0.500002" ydir="0 1 0" zdir="0.500002 0 -0.866024" url="workspaces" col="#ffffff" scale="1.5 3 1" draw_glow="false">
|
||||||
|
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
||||||
|
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
||||||
|
</paragraph>
|
||||||
|
</link>
|
||||||
|
|
||||||
|
<link js_id="4" pos="-5 0 8.5" xdir="-0.707106 0 -0.707108" ydir="0 1 0" zdir="0.707108 0 -0.707106" url="bookmarks" col="#ffffff" scale="1.5 3 1" draw_glow="false">
|
||||||
|
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
||||||
|
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
||||||
|
</paragraph>
|
||||||
|
</link>
|
||||||
|
|
||||||
|
<link js_id="0" pos="0 0 10.8" xdir="-1 0 -0.000002" ydir="0 1 0" zdir="0.000002 0 -1" url="https://www.janusxr.org/newlobby/index.html" col="#ffffff" scale="1.5 3 1" draw_glow="false">
|
||||||
|
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
||||||
|
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
||||||
|
</paragraph>
|
||||||
|
</link>
|
||||||
|
|
||||||
|
<link js_id="5" pos="-6.51 0 6.5" rotation="-180 65 -180" url="https://xrforge.isvery.ninja" col="#ffffff" scale="1.5 3 1" draw_glow="false">
|
||||||
|
<paragraph js_id="p" width="300" height="700" pos="0 1.53 0.05" transparent="true" scale="0.7 1.68 1" lighting="false">
|
||||||
|
<![CDATA[ <img src="media/images/portal.svg" width="300" height="700"/> ]]>
|
||||||
|
</paragraph>
|
||||||
|
</link>
|
||||||
|
|
||||||
|
</object>
|
||||||
|
</room>
|
||||||
|
</fireboxroom>
|
||||||
|
|
||||||
|
-->
|
||||||
133
src/janusweb/media/assets.json
Normal file
|
|
@ -0,0 +1,133 @@
|
||||||
|
[
|
||||||
|
{ "assettype":"model", "name":"capsule", "src":"assets/primitives/capsule.obj" },
|
||||||
|
{ "assettype":"model", "name":"cone", "src":"assets/primitives/cone.obj" },
|
||||||
|
{ "assettype":"model", "name":"cube", "src":"assets/primitives/cube.obj" },
|
||||||
|
{ "assettype":"model", "name":"cylinder", "src":"assets/primitives/cylinder.obj" },
|
||||||
|
{ "assettype":"model", "name":"pipe", "src":"assets/primitives/pipe.obj" },
|
||||||
|
{ "assettype":"model", "name":"plane", "src":"assets/primitives/plane.obj" },
|
||||||
|
{ "assettype":"model", "name":"pyramid", "src":"assets/primitives/pyramid.obj" },
|
||||||
|
{ "assettype":"model", "name":"sphere", "src":"assets/primitives/sphere.obj" },
|
||||||
|
{ "assettype":"model", "name":"torus", "src":"assets/primitives/torus.obj" },
|
||||||
|
|
||||||
|
{ "assettype":"image", "name":"room1_tex0", "src":"assets/rooms/room1.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room2_tex0", "src":"assets/rooms/room2.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room3_tex0", "src":"assets/rooms/room3.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room4_tex0", "src":"assets/rooms/room4.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room5_tex0", "src":"assets/rooms/room5.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room6_tex0", "src":"assets/rooms/room6.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room_1pedestal_tex0", "src":"assets/rooms/room_1pedestal.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room_2pedestal_tex0", "src":"assets/rooms/room_2pedestal.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room_3_narrow_tex0", "src":"assets/rooms/room_3_narrow.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room_3_wide_tex0", "src":"assets/rooms/room_3_wide.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room_4_narrow_tex0", "src":"assets/rooms/room_4_narrow.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room_4_wide_tex0", "src":"assets/rooms/room_4_wide.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room_box_small_tex0", "src":"assets/rooms/room_box_small.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room_box_medium_tex0", "src":"assets/rooms/room_box_medium.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room1_new_tex0", "src":"assets/rooms/room1_new.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room_home_tex0", "src":"assets/rooms/room_home.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room_plane_tex0", "src":"assets/rooms/tile_d.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"room_plane2_tex0", "src":"assets/rooms/room_plane2.png", "hasalpha": false, "preload": false },
|
||||||
|
|
||||||
|
{ "assettype":"model", "name":"room1", "src":"assets/rooms/room1.obj", "tex0":"room1_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room2", "src":"assets/rooms/room2.obj", "tex0":"room2_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room3", "src":"assets/rooms/room3.obj", "tex0":"room3_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room4", "src":"assets/rooms/room4.obj", "tex0":"room4_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room5", "src":"assets/rooms/room5.obj", "tex0":"room5_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room6", "src":"assets/rooms/room6.obj", "tex0":"room6_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room_1pedestal", "src":"assets/rooms/room_1pedestal.obj", "tex0":"room_1pedestal_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room_2pedestal", "src":"assets/rooms/room_2pedestal.obj", "tex0":"room_2pedestal_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room_3_narrow", "src":"assets/rooms/room_3_narrow.obj", "tex0":"room_3_narrow_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room_3_wide", "src":"assets/rooms/room_3_wide.obj", "tex0":"room_3_wide_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room_4_narrow", "src":"assets/rooms/room_4_narrow.obj", "tex0":"room_4_narrow_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room_4_wide", "src":"assets/rooms/room_4_wide.obj", "tex0":"room_4_wide_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room_box_small", "src":"assets/rooms/room_box_small.obj", "tex0":"room_box_small_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room_box_medium", "src":"assets/rooms/room_box_medium.obj", "tex0":"room_box_medium_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room1_new", "src":"assets/rooms/room1_new.obj", "tex0":"room1_new_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room_home", "src":"assets/rooms/room_home.obj", "tex0":"room_home_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room_plane", "src":"assets/rooms/room_plane.obj", "tex0":"room_plane_tex0", "hasalpha": false },
|
||||||
|
{ "assettype":"model", "name":"room_plane2", "src":"assets/rooms/room_plane2.obj", "tex0":"room_plane2_tex0", "hasalpha": false },
|
||||||
|
|
||||||
|
{ "assettype":"model", "name":"room1_collision", "src":"assets/rooms/room1_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room2_collision", "src":"assets/rooms/room2_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room3_collision", "src":"assets/rooms/room3_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room4_collision", "src":"assets/rooms/room4_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room5_collision", "src":"assets/rooms/room5_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room6_collision", "src":"assets/rooms/room6_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room_1pedestal_collision", "src":"assets/rooms/room_1pedestal_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room_2pedestal_collision", "src":"assets/rooms/room_2pedestal_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room_3_narrow_collision", "src":"assets/rooms/room_3_narrow_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room_3_wide_collision", "src":"assets/rooms/room_3_wide_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room_4_narrow_collision", "src":"assets/rooms/room_4_narrow_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room_4_wide_collision", "src":"assets/rooms/room_4_wide_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room_box_small_collision", "src":"assets/rooms/room_box_small_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room_box_medium_collision", "src":"assets/rooms/room_box_medium_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room1_new_collision", "src":"assets/rooms/room1_new_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room_home_collision", "src":"assets/rooms/room_home_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room_plane_collision", "src":"assets/rooms/room_plane_collision.obj" },
|
||||||
|
{ "assettype":"model", "name":"room_plane2_collision", "src":"assets/rooms/room_plane2_collision.obj" },
|
||||||
|
|
||||||
|
{ "assettype":"image", "name":"black", "src":"assets/black.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"clear", "src":"assets/clear.png", "hasalpha": true, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dark_back", "src":"assets/skybox/dark_back.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dark_down", "src":"assets/skybox/dark_down.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dark_front", "src":"assets/skybox/dark_front.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dark_left", "src":"assets/skybox/dark_left.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dark_right", "src":"assets/skybox/dark_right.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dark_up", "src":"assets/skybox/dark_up.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"miramar_back", "src":"assets/skybox/miramar_back.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"miramar_down", "src":"assets/skybox/miramar_down.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"miramar_front", "src":"assets/skybox/miramar_front.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"miramar_left", "src":"assets/skybox/miramar_left.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"miramar_right", "src":"assets/skybox/miramar_right.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"miramar_up", "src":"assets/skybox/miramar_up.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"skyrender_back", "src":"assets/skybox/skyrender_back.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"skyrender_down", "src":"assets/skybox/skyrender_down.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"skyrender_front", "src":"assets/skybox/skyrender_front.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"skyrender_left", "src":"assets/skybox/skyrender_left.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"skyrender_right", "src":"assets/skybox/skyrender_right.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"skyrender_up", "src":"assets/skybox/skyrender_up.png", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dayskybox_back", "src":"assets/skybox/Day/Dayback.jpg", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dayskybox_down", "src":"assets/skybox/Day/Daybottom.jpg", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dayskybox_front", "src":"assets/skybox/Day/Dayfront.jpg", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dayskybox_left", "src":"assets/skybox/Day/Dayleft.jpg", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dayskybox_right", "src":"assets/skybox/Day/Dayright.jpg", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"dayskybox_up", "src":"assets/skybox/Day/Daytop.jpg", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"nightskybox_back", "src":"assets/skybox/Night/Nightback.jpg", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"nightskybox_down", "src":"assets/skybox/Night/Nightbottom.jpg", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"nightskybox_front", "src":"assets/skybox/Night/Nightfront.jpg", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"nightskybox_left", "src":"assets/skybox/Night/Nightleft.jpg", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"nightskybox_right", "src":"assets/skybox/Night/Nightright.jpg", "hasalpha": false, "preload": false },
|
||||||
|
{ "assettype":"image", "name":"nightskybox_up", "src":"assets/skybox/Night/Nighttop.jpg", "hasalpha": false, "preload": false },
|
||||||
|
|
||||||
|
{ "assettype":"model", "name":"avatar", "src":"assets/avatar.obj", "tex0": "avatar_tex0" },
|
||||||
|
{ "assettype":"model", "name":"avatar_head", "src":"assets/avatar_head.obj", "tex0": "avatar_head_tex0" },
|
||||||
|
{ "assettype":"model", "name":"avatar_gltf", "src":"assets/janus-avatar-base.glb" },
|
||||||
|
{ "assettype":"model", "name":"avatar_animations", "src":"assets/janus-avatar-animations.glb" },
|
||||||
|
|
||||||
|
{ "assettype":"image", "name":"avatar_tex0", "src":"assets/avatar.png", "preload": false },
|
||||||
|
{ "assettype":"image", "name":"avatar_head_tex0", "src":"assets/avatar_head.png", "preload": false },
|
||||||
|
|
||||||
|
{ "assettype":"model", "name":"avatar_janusweb", "src":"assets/hoverscreen.obj" },
|
||||||
|
|
||||||
|
{ "assettype":"model", "name":"loading", "src":"assets/loading.obj" },
|
||||||
|
|
||||||
|
{ "assettype":"image", "name":"cursor_arrow", "src":"assets/cursor/arrow.png", "hasalpha": true },
|
||||||
|
{ "assettype":"image", "name":"cursor_crosshair", "src":"assets/cursor/crosshair.png", "hasalpha": true },
|
||||||
|
{ "assettype":"image", "name":"cursor_hand", "src":"assets/cursor/hand.png", "hasalpha": true },
|
||||||
|
{ "assettype":"image", "name":"cursor_dot_inactive", "src":"assets/cursor/cursor-dot-white.png", "hasalpha": true },
|
||||||
|
{ "assettype":"image", "name":"cursor_dot_active", "src":"assets/cursor/cursor-dot-green.png", "hasalpha": true },
|
||||||
|
|
||||||
|
|
||||||
|
{ "assettype":"model", "name":"controller_daydream", "src":"assets/controllers/daydream/vr_controller_daydream.obj", "mtl":"vr_controller_daydream.mtl" },
|
||||||
|
{ "assettype":"model", "name":"controller_vive", "src":"assets/controllers/vive/ViveController.dae.gz" },
|
||||||
|
{ "assettype":"model", "name":"controller_touch_left", "src":"assets/controllers/oculus/TouchLeftModified.dae.gz" },
|
||||||
|
{ "assettype":"model", "name":"controller_touch_right", "src":"assets/controllers/oculus/TouchRight.dae.gz" },
|
||||||
|
{ "assettype":"font", "name":"helvetiker", "src":"assets/fonts/helvetiker_regular.typeface.json" },
|
||||||
|
{ "assettype":"shader", "name":"defaultportal", "shadertype":"shadertoy","fragment_src":"assets/shaders/greenportal2.shadertoy.frag", "preload":true },
|
||||||
|
|
||||||
|
{ "assettype":"model", "name":"button", "src":"component/janus-script-peertube/asset/button.glb", "preload":true},
|
||||||
|
{ "assettype":"model", "name":"icon", "src":"component/janus-script-peertube/asset/button.icon.glb", "preload":true},
|
||||||
|
{ "assettype":"sound", "name":"button-click", "src":"component/janus-script-peertube/asset/button.click.mp3", "preload":true},
|
||||||
|
{ "assettype":"sound", "name":"button-hover", "src":"component/janus-script-peertube/asset/button.hover.mp3", "preload":true}
|
||||||
|
|
||||||
|
]
|
||||||
1
src/janusweb/media/assets/webui/apps/xrforge/xrforge.js
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
//alert("xrforge")
|
||||||
10
src/janusweb/media/assets/webui/apps/xrforge/xrforge.json
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
},
|
||||||
|
"scripts": [
|
||||||
|
"./xrforge.js"
|
||||||
|
],
|
||||||
|
"css": []
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
28
src/janusweb/media/assets/webui/xrforge.json
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"apps": {
|
||||||
|
"navigation": "./apps/navigation/navigation.json",
|
||||||
|
"comms": "./apps/comms/comms.json",
|
||||||
|
"avatar": "./apps/avatar/avatar.json",
|
||||||
|
"settings": "./apps/settings/settings.json",
|
||||||
|
"inventory": "./apps/inventory/inventory.json",
|
||||||
|
"editor": "./apps/editor/editor.json?v=12",
|
||||||
|
"transporter": "./apps/transporter/transporter.json",
|
||||||
|
"locomotion": "./apps/locomotion/locomotion.json",
|
||||||
|
"virtualgamepad": "./apps/virtualgamepad/virtualgamepad.json",
|
||||||
|
"buttons": "./apps/buttons/buttons.json",
|
||||||
|
"xrmenu": "./apps/xrmenu/xrmenu.json?v=14",
|
||||||
|
"xrfragment": "./apps/xrfragment/xrfragment.json",
|
||||||
|
"xrforge": "./apps/xrforge/xrforge.json",
|
||||||
|
"vfs": "./apps/vfs/vfs.json"
|
||||||
|
},
|
||||||
|
"includes": [
|
||||||
|
],
|
||||||
|
"templates": {
|
||||||
|
"janusweb.ui": "./default.html"
|
||||||
|
},
|
||||||
|
"css": [
|
||||||
|
"./themes/default.css"
|
||||||
|
],
|
||||||
|
"scripts": [
|
||||||
|
]
|
||||||
|
}
|
||||||
104
src/janusweb/media/component/janus-script-peertube/translator.js
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
const PeertubeTranslatorBaseURL = document.currentScript.src.replace("/translator.js","")
|
||||||
|
|
||||||
|
elation.require([], function() {
|
||||||
|
elation.component.add('janusweb.translators.peertube', function() {
|
||||||
|
this.init = function() {
|
||||||
|
this.description = "peertube website to 3D translator"
|
||||||
|
}
|
||||||
|
this.exec = function(args) {
|
||||||
|
return new Promise(elation.bind(this, function(resolve, reject) {
|
||||||
|
|
||||||
|
var room = this.room = args.room;
|
||||||
|
|
||||||
|
reject() // for now
|
||||||
|
|
||||||
|
this.setupEvents()
|
||||||
|
var datapath = elation.config.get('janusweb.datapath', '/media/janusweb');
|
||||||
|
|
||||||
|
var roomdata = {
|
||||||
|
assets: {
|
||||||
|
assetlist: [
|
||||||
|
// {assettype: 'model', name: 'scene', src: args.url},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
room: {
|
||||||
|
pos: [0,0,0],
|
||||||
|
xdir: "1 0 0",
|
||||||
|
zdir: "0 0 1",
|
||||||
|
},
|
||||||
|
object: [
|
||||||
|
// {id: 'scene', js_id: 0, pos: "0 0 0", xdir: "-1 0 0", zdir: "0 0 -1", lighting: "false"}
|
||||||
|
],
|
||||||
|
link: []
|
||||||
|
};
|
||||||
|
resolve(roomdata);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
// translate XR Fragments microformat into JML
|
||||||
|
this.parseSource = async function(sourcecode, room){
|
||||||
|
this.room = room
|
||||||
|
const isJML = /<fireboxroom>[\s\S]*?<\/fireboxroom>/si;
|
||||||
|
const isPeertube = /<meta\s+[^>]*property=['"]og:platform['"]\s+[^>]*content=['"]peertube['"][^>]*\/?>/si;
|
||||||
|
const isPeertubeVideo = /<meta\s+[^>]*property=['"]og:type['"]\s+[^>]*content=['"]video['"][^>]*\/?>/si;
|
||||||
|
const isPeertubeInstance = /<meta\s+[^>]*property=['"]og:type['"]\s+[^>]*content=['"]website['"][^>]*\/?>/si;
|
||||||
|
const is = {
|
||||||
|
JML: sourcecode.match(isJML),
|
||||||
|
peertube: sourcecode.match(isPeertube),
|
||||||
|
peertubeVideo: sourcecode.match(isPeertubeVideo),
|
||||||
|
peertubeInstance: sourcecode.match(isPeertubeInstance),
|
||||||
|
}
|
||||||
|
if( is.JML || !is.peertube ) return // JML takes precedence over microformats
|
||||||
|
if( !is.peertubeVideo && !is.peertubeInstance ) return
|
||||||
|
|
||||||
|
// ok..peertube time: get domtree
|
||||||
|
let el = document.createElement("div")
|
||||||
|
el.innerHTML = sourcecode
|
||||||
|
|
||||||
|
// try to fetch title + cover
|
||||||
|
const title = el.querySelector("title")
|
||||||
|
let logo = el.querySelector("meta[property='og:image']")?.getAttribute("content")
|
||||||
|
logo = logo ? logo : el.querySelector("meta[property='og:image:url']")?.getAttribute("content")
|
||||||
|
|
||||||
|
let url = new URL( String(room.url) )
|
||||||
|
let instance = url?.origin
|
||||||
|
let search = url?.search ? new URLSearchParams(url.search).get("search") : ""
|
||||||
|
|
||||||
|
room.corsproxy = ''
|
||||||
|
// return JML
|
||||||
|
let parsed = room.parseSource(`
|
||||||
|
<title>${ title ? title.innerText.replace(/\n.*/g,'') : room.baseurl.split("/").pop() }</title>
|
||||||
|
<FireBoxRoom>
|
||||||
|
<Assets>
|
||||||
|
${ logo ? `<assetimage src="${logo}" id="logo"/>` : ''}
|
||||||
|
<assetscript src="${PeertubeTranslatorBaseURL}/janus-script-peertube.js" proxy="false"/>
|
||||||
|
</Assets>
|
||||||
|
<Room use_local_asset="room5" pos="1.15 0 -5">
|
||||||
|
${ is.peertubeInstance ? `<peertube-app pos="4.55 2.71 0" scale="2 2 1" rotation="0 90 0" js_id="mypeertube-app" instance="${instance}" ${search?`search="${search}"`:``} autoload="true"/>`
|
||||||
|
: `<peertube pos="4.55 2.71 0" scale="2 2 1" rotation="0 90 0" js_id="peertube" src="${room.url}" auto_play="true"/>`
|
||||||
|
}
|
||||||
|
<object position='12.2 0 0' rotation="0 -90 0">
|
||||||
|
${ logo ? `<image id="logo" pos='0 5 0' scale='3 3 2' lighting="false" />` : ''}
|
||||||
|
<text text="${room.url.replace(/.*:\/\//,'')}" pos='0 1.45 0' scale='7 7 7' lighting="false" col='#000000'/>
|
||||||
|
<text text="Peertube" pos='0 8.6 0' scale='4 4 4' lighting="false" col='#000000'/>
|
||||||
|
</object>
|
||||||
|
</Room>
|
||||||
|
</FireBoxRoom>
|
||||||
|
`)
|
||||||
|
return parsed
|
||||||
|
}
|
||||||
|
// peertube microformat heuristic: <meta property="og:platform" content="PeerTube">
|
||||||
|
this.parseSource.regex = /<meta\s+[^>]*property=['"]og:platform['"]\s+[^>]*content=['"]peertube['"][^>]*\/?>/si;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
elation.events.add(null, 'room_translator_register', function(e){
|
||||||
|
const room = e.element
|
||||||
|
const translators = e.data.translators
|
||||||
|
// prepend translator
|
||||||
|
e.data.translators = {}
|
||||||
|
e.data.translators['!peertube'] = elation.janusweb.translators.peertube({janus: janus})
|
||||||
|
for( let i in translators ){
|
||||||
|
e.data.translators[i] = translators[i]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
../tronverse.png
|
|
||||||
BIN
src/myverse/tech-demos.jpg
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
src/myverse/tech-demos/icosa-gallery.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
61
src/myverse/tech-demos/icosa-gallery/README.md
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
<h1>Hi there! 👋</h1>
|
||||||
|
Welcome to this XR experience.<br/>
|
||||||
|
<br/>
|
||||||
|
<div class="btn script">
|
||||||
|
<button class="btn secondary" onclick="document.querySelector('#tips').style.display = ''">Tips for navigating in XR</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="tips" style="display:none">
|
||||||
|
<br/>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<b>Keyboard+Mouse</b>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
use the WASD-keys and mousedrag to navigate
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="200">
|
||||||
|
<b>AR/VR headset</b>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
walk around / use right-longpinch (or thumbstick) for local teleports<br/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<b>PhoneVR</b>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
use gaze or bluetooth/mouse to navigate
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<b>PhoneAR</b>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
walk around and tap screen to click
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<b>Mobile</b>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
use the WASD-keys and mousedrag to navigate
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br/>
|
||||||
|
You've got this!
|
||||||
|
</div>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
Here's a demo to surf <a href="https://icosa.gallery/collections" target="_blank">icosa-gallery</a> immersively (without launching the website, <a href="https://openbrush.app" target="_blank">OpenBrush</a> or <a href="https://openblocks.app" target="_blank">OpenBlocks</a>).<br>
|
||||||
|
This is possible thanks to icosa-gallery supporting the <a href="https://xrfragment.org/#XRF%20microformat" target="_blank">XR Fragments microformat</a>.
|
||||||
|
<br>
|
||||||
|
> <b>NOTE</b>: most example assets are not optimized regarding scale/position/floor (but can be done in OpenBrush, OpenBlocks or Blender)
|
||||||
|
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=icosa gallery
|
||||||
|
URL=https://icosa.gallery/collections/LSc_DPROGR8
|
||||||
|
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 91 KiB |
|
|
@ -4,3 +4,5 @@
|
||||||
This basically extends [the seamless JanusXR portalsystem](https://coderofsalvation.github.io/janus-guide/#/home/about) by <b>interconnecting</b> otherwise immersively-disjointed ecosystems like [AFRAME](https://aframe.io), by [reprojecting them in 3D](https://coderofsalvation.github.io/janus-guide/#/home/about).
|
This basically extends [the seamless JanusXR portalsystem](https://coderofsalvation.github.io/janus-guide/#/home/about) by <b>interconnecting</b> otherwise immersively-disjointed ecosystems like [AFRAME](https://aframe.io), by [reprojecting them in 3D](https://coderofsalvation.github.io/janus-guide/#/home/about).
|
||||||
|
|
||||||
Currently only geometry markup and models are supported.
|
Currently only geometry markup and models are supported.
|
||||||
|
|
||||||
|
> This example renders a local AFRAME URL
|
||||||
1
src/myverse/tech-demos/janusxr_tutorial/AFRAME_remote.jpg
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
AFRAME.jpg
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=AFRAME remote example
|
||||||
|
URL=https://aframe.io/aframe/examples/boilerplate/hello-world/
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
# AFRAME hello world
|
||||||
|
|
||||||
|
[XRForge's](https://xrforge.isvery.ninja/) [JanusXR](https://coderofsalvation.github.io/janus-guide/)-viewer ([janusweb](https://github.com/jbaicoianu/janusweb)) can detect [AFRAME](https://aframe.io) markup in HTML/XML/even binary files(!).
|
||||||
|
This basically extends [the seamless JanusXR portalsystem](https://coderofsalvation.github.io/janus-guide/#/home/about) by <b>interconnecting</b> otherwise immersively-disjointed ecosystems like [AFRAME](https://aframe.io), by [reprojecting them in 3D](https://coderofsalvation.github.io/janus-guide/#/home/about).
|
||||||
|
|
||||||
|
Currently only geometry markup and models are supported.
|
||||||
|
|
||||||
|
> This example renders a remote AFRAME URL
|
||||||
BIN
src/myverse/tech-demos/janusxr_tutorial/arwindow.jpg
Normal file
|
After Width: | Height: | Size: 27 KiB |
|
|
@ -0,0 +1,5 @@
|
||||||
|
# ARwindow
|
||||||
|
|
||||||
|
This is an AR-experience which demonstrates a 'hidden' plane (with cutout),<br>
|
||||||
|
which creates the illusion of a VR-in-AR.<br>
|
||||||
|
A great usecase is displaying VR (glTF) animations with variable immersion.
|
||||||
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 315 KiB After Width: | Height: | Size: 315 KiB |
BIN
src/myverse/tech-demos/tronverse/tronverse-icosagallery.jpg
Normal file
|
After Width: | Height: | Size: 42 KiB |
|
|
@ -0,0 +1,5 @@
|
||||||
|
Demo of [XR Movies](https://xrfragment.org/#XR%20Movies%20%26%20books) using XR Fragments
|
||||||
|
|
||||||
|
* [default spawnpoint](https://xrfragment.org/#default%20spawn%20location)
|
||||||
|
* [WebVTT](https://xrfragment.org/#WebVTT%20subtitles) subtitles
|
||||||
|
* [href](https://xrfragment.org/#href) links/portals
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
test.xrf.png
|
||||||
|
After Width: | Height: | Size: 1 MiB |
|
|
@ -0,0 +1,27 @@
|
||||||
|
WEBVTT
|
||||||
|
|
||||||
|
00:01.000 --> 00:04.000 href:#spawn
|
||||||
|
<v welcome> to a special experience.
|
||||||
|
|
||||||
|
00:06.000 --> 00:10.000
|
||||||
|
This is a special place..
|
||||||
|
|
||||||
|
00:11.000 --> 00:16.000 href:#platformA
|
||||||
|
A place to learn..
|
||||||
|
|
||||||
|
00:20.000 --> 00:25.000 href:#platformB
|
||||||
|
A place to reflect..
|
||||||
|
|
||||||
|
|
||||||
|
00:30.000 --> 00:33.000 href:#spawn_divine
|
||||||
|
Lets go inside..
|
||||||
|
|
||||||
|
00:36.000 --> 00:39.000 href:#inside
|
||||||
|
Here we are..
|
||||||
|
|
||||||
|
00:45.000 --> 00:48.000
|
||||||
|
Let's visit portals..
|
||||||
|
|
||||||
|
00:50.000 --> 00:57.000 href:#spawn
|
||||||
|
Try the portals on your left..
|
||||||
|
|
||||||
BIN
src/myverse/tech-demos/xrfragments/website/website.glb
Normal file
BIN
src/myverse/tech-demos/xrfragments/website/website.png
Normal file
|
After Width: | Height: | Size: 337 KiB |
|
|
@ -1 +0,0 @@
|
||||||
../janusxr
|
|
||||||
62
src/myverse/vaporwave-plaza/README.md
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
|
||||||
|
<h1>Hi there! 👋</h1>
|
||||||
|
Welcome to the [VAPORWAVE PLAZA】ぼをが
|
||||||
|
<br/>
|
||||||
|
<div class="btn script">
|
||||||
|
<button class="btn secondary" onclick="document.querySelector('#tips').style.display = ''">Tips for navigating in XR</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="tips" style="display:none">
|
||||||
|
<br/>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<b>Keyboard+Mouse</b>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
use the WASD-keys and mousedrag to navigate
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="200">
|
||||||
|
<b>AR/VR headset</b>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
walk around / use right-longpinch (or thumbstick) for local teleports<br/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<b>PhoneVR</b>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
use gaze or bluetooth/mouse to navigate
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<b>PhoneAR</b>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
walk around and tap screen to click
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<b>Mobile</b>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
use the WASD-keys and mousedrag to navigate
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br/>
|
||||||
|
You've got this!
|
||||||
|
</div>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
Variation of: https://vesta.janusxr.org/virtualplaza/welcome-to-the-virtual-plaza
|
||||||
|
|
||||||
|
Updated with fixed links, works with the newer software.
|
||||||
|
|
||||||
|
#vaporwave #aesthetic
|
||||||
4
src/myverse/vaporwave-plaza/vaporwave-plaza.desktop
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=VaporWave Plaza
|
||||||
|
URL=https://vesta.janusxr.org/spyduck/vaporwave-plaza
|
||||||
BIN
src/myverse/vaporwave-plaza/vaporwave-plaza.png
Normal file
|
After Width: | Height: | Size: 457 KiB |
BIN
src/myverse/vesta.janusxr.org.jpg
Normal file
|
After Width: | Height: | Size: 26 KiB |
1
src/myverse/vesta.janusxr.org/art-galleries.jpg
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
../vesta.janusxr.org.jpg
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Andrew McIlroy
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/aussie/58db85b475edb5bb7ab9b71fc54156e8.jpg
|
||||||
|
URL=https://vesta.janusxr.org/aussie/art-gallery-andrew-mcilroy
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Compassion Art Gallery
|
||||||
|
Icon=https://thumbnails.janusxr.org/dc5bc45fe0416f5da798053320e63ef0/thumb.jpg
|
||||||
|
URL=https://vesta.janusxr.org/aussie/art-gallery-Compassion
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Spyduck The Rave Maze
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/spyduck/a40c7cd787515a658a8e6164375ea749.gif
|
||||||
|
URL=https://vesta.janusxr.org/spyduck/the-rave-maze
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Spyduck UltraViolet
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/spyduck/22a552be8602b0c564ab0dbd8a7d3cd9.jpg
|
||||||
|
URL=https://vesta.janusxr.org/spyduck/ultraviolet-gallery
|
||||||
1
src/myverse/vesta.janusxr.org/e-learnings.jpg
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
../vesta.janusxr.org.jpg
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=F1 redbull car
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/firefoxg/24dc2840ff5b56f58e68534e0e6f0d57.jpg
|
||||||
|
URL=https://vesta.janusxr.org/firefoxg/exploded-f1-car
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=NASA Apollo 17 landingzone
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/firefoxg/55018067ab5ad288f5675a2e02a66161.jpg
|
||||||
|
URL=https://vesta.janusxr.org/firefoxg/apollo-17-landing-zone
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=NASA Elysium
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/firefoxg/a51677f27e15d345f8761783d4779882.jpg
|
||||||
|
URL=https://vesta.janusxr.org/firefoxg/elysium-aka-a-stanford-torus
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=SpaceX Falcon
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/firefoxg/395a1da873c472d9a413f3463fc508e3.jpg
|
||||||
|
URL=https://vesta.janusxr.org/firefoxg/spacex-heavy-launch-webvr-simulator
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Tryceratops skull
|
||||||
|
Icon=https://thumbnails.janusxr.org/5dfa1b865e8683afb4f52a5b97edf0e1/thumb.jpg
|
||||||
|
URL=https://vesta.janusxr.org/aussie/triceratops-horridus-nat-hist-museum-oxford
|
||||||
1
src/myverse/vesta.janusxr.org/fun-worlds.jpg
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
../vesta.janusxr.org.jpg
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Art class
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/aussie/a984cd7145cf62dcfe85984f7db15abd.jpg
|
||||||
|
URL=https://vesta.janusxr.org/aussie/art-class-in-multiplayer-webvr-turkey
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Nazrin's Paint
|
||||||
|
Icon=https://nazrin.net/Hub/paintdoor.png
|
||||||
|
URL=https://nazrin.net/Janus-Paint
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Nazrin's Piano
|
||||||
|
Icon=https://nazrin.net/Hub/pianodoor.png
|
||||||
|
URL=https://nazrin.net/Piano/
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Spyduck Garden
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/spyduck/9b2e6eff24a5ee49e683f59f95f6550e.jpg
|
||||||
|
URL=https://vesta.janusxr.org/spyduck/snowy-hedge-maze-aurora
|
||||||
1
src/myverse/vesta.janusxr.org/meditation-worlds.jpg
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
../vesta.janusxr.org.jpg
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Bepi's Chapel
|
||||||
|
Icon=https://thumbnails.janusxr.org/79304283c9bb9ba139971064a3f69467/thumb.jpg
|
||||||
|
URL=https://vesta.janusxr.org/bepis/chapel
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Bepi's Cave
|
||||||
|
Icon=https://thumbnails.janusxr.org/649cbf8f75c2465772b59b92baa3712b/thumb.jpg
|
||||||
|
URL=https://vesta.janusxr.org/bepis/cave
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Finger of God Namibia
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/aussie/3b34bf71f0f089d76304f44702ee04b9.jpg
|
||||||
|
URL=https://vesta.janusxr.org/aussie/finger-of-god-namibia
|
||||||
1
src/myverse/vesta.janusxr.org/meeting-rooms.jpg
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
../vesta.janusxr.org.jpg
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Briefing room
|
||||||
|
Icon=https://thumbnails.janusxr.org/61f3ceb8c2133b39a570b8aebe8517e2/thumb.jpg
|
||||||
|
URL=https://vesta.janusxr.org/nazrin-templates/school-empty-classroom
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Dojo
|
||||||
|
Icon=https://thumbnails.janusxr.org/afaee01aac154a5e8882e01bf7ad1f45/thumb.jpg
|
||||||
|
URL=https://vesta.janusxr.org/bepis/dojo
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=JanusXR hallroom
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/spyduck/fb19151b9fd95e85874672f7c7287fb2.jpg
|
||||||
|
URL=https://vesta.janusxr.org/spyduck/janusvr-branded-hall-of-doom
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Kings Hall
|
||||||
|
Icon=https://thumbnails.janusxr.org/b1829dad52f67d0b712bccc649b3db87/thumb.jpg
|
||||||
|
URL=https://vesta.janusxr.org/bepis/kings-hall
|
||||||
1
src/myverse/vesta.janusxr.org/meetup-worlds.jpg
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
../vesta.janusxr.org.jpg
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=AlleyWay
|
||||||
|
Icon=https://thumbnails.janusxr.org/bf5aca6071f24fd7715d3cb4f261a205/thumb.jpg
|
||||||
|
URL=https://vesta.janusxr.org/bepis/alleyway-4
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Sunken shrine
|
||||||
|
Icon=https://thumbnails.janusxr.org/d62c46879f50d3a49d512881430f795e/thumb.jpg
|
||||||
|
URL=https://vesta.janusxr.org/bepis/foresty
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Spyduck Floral
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/spyduck/684da1d983cb31338847dfda9b71af27.jpg
|
||||||
|
URL=https://vesta.janusxr.org/spyduck/floral
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Spyduck Garden
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/spyduck/38d7f1aacf68707ad7a5afebd141f164.jpg
|
||||||
|
URL=https://vesta.janusxr.org/spyduck/garden
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Sunken shrine
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/spyduck/0dd3411196172200612a922aacf755bc.jpg
|
||||||
|
URL=https://vesta.janusxr.org/spyduck/sunken-shrine
|
||||||
1
src/myverse/vesta.janusxr.org/shrine-worlds.jpg
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
../vesta.janusxr.org.jpg
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Pokemon Mr Fuji's House
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/spyduck/aced374c018dede5f6df0f987de1c711.jpg
|
||||||
|
URL=https://vesta.janusxr.org/spyduck/mr-fujis-house-pokemon-rby
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Link
|
||||||
|
Name=Pokemon New Bark Town
|
||||||
|
Icon=https://vesta.janusxr.org/assets/thumbs/spyduck/596afd9658e3f995504af75249d0dc04.jpg
|
||||||
|
URL=https://vesta.janusxr.org/spyduck/new-bark-town-pokemon-gsc
|
||||||