Added 3d closet demo, cleaned up menus.
This commit is contained in:
parent
2ef5379a3b
commit
e41f8194d5
74
index.html
74
index.html
@ -96,7 +96,7 @@
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: 12;
|
||||
width: 320px;
|
||||
height: 240px;
|
||||
height: 344px;
|
||||
border: 3px inset #FFD700;
|
||||
display: none;
|
||||
}
|
||||
@ -170,76 +170,8 @@
|
||||
<!--<script src='/niceware.js'></script>-->
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="overlay" id="tutorial">
|
||||
<h1>Help</h1>
|
||||
<div id="desktopTutorial"><a href="#" id="desktopLink">Desktop</a></div>
|
||||
<div id="questTutorial"><a href="#" id="questLink">Quest</a></div>
|
||||
</div>
|
||||
|
||||
<div class="overlay mini" id="main">
|
||||
<img height="120" src="/assets/ddd.svg" width="320">
|
||||
<div id="startCreate"><a href="#" id="startCreateLink">Start</a></div>
|
||||
<div id="download"><a href="#" id="downloadLink">Download Model</a></div>
|
||||
</div>
|
||||
|
||||
<div class="overlay" id="create">
|
||||
<div><input id="createName" placeholder="Enter a name for your diagram" type="text"></div>
|
||||
<div><input id="createPassword" placeholder="Enter a password (optional)" type="text"></div>
|
||||
<div><a href="#" id="createActionLink">Create</a></div>
|
||||
<div><a class="cancel" href="#" id="cancelCreateLink">Cancel</a></div>
|
||||
</div>
|
||||
<div class="overlay" id="keyboardHelp">
|
||||
<div id="closekey"><a href="#">X</a></div>
|
||||
<img height="240" src="/assets/textures/keyboardhelp2.jpg" width="480">
|
||||
<img height="240" src="/assets/textures/mousehelp.jpg" width="180">
|
||||
|
||||
</div>
|
||||
<img id="loadingGrid" src="/assets/grid3.jpg"/>
|
||||
<script>
|
||||
const create = document.querySelector('#startCreateLink');
|
||||
if (create) {
|
||||
create.addEventListener('click', function (evt) {
|
||||
evt.preventDefault();
|
||||
document.querySelector('#main').style.display = 'none';
|
||||
document.querySelector('#create').style.display = 'block';
|
||||
});
|
||||
}
|
||||
const cancel = document.querySelector('#cancelCreateLink');
|
||||
if (cancel) {
|
||||
cancel.addEventListener('click', function (evt) {
|
||||
evt.preventDefault();
|
||||
document.querySelector('#main').style.display = 'block';
|
||||
document.querySelector('#create').style.display = 'none';
|
||||
});
|
||||
}
|
||||
const close = document.querySelector('#closekey a');
|
||||
if (close) {
|
||||
close.addEventListener('click', function (evt) {
|
||||
evt.preventDefault();
|
||||
document.querySelector('#keyboardHelp').style.display = 'none';
|
||||
});
|
||||
}
|
||||
const desktopTutorial = document.querySelector('#desktopLink');
|
||||
if (desktopTutorial) {
|
||||
desktopTutorial.addEventListener('click', function (evt) {
|
||||
evt.preventDefault();
|
||||
// document.querySelector('#tutorial').style.display = 'none';
|
||||
document.querySelector('#keyboardHelp').style.display = 'block';
|
||||
});
|
||||
}
|
||||
const createAction = document.querySelector('#createActionLink');
|
||||
if (createAction) {
|
||||
createAction.addEventListener('click', function (evt) {
|
||||
evt.preventDefault();
|
||||
const value = document.querySelector('#createName').value;
|
||||
if (value && value.length > 4) {
|
||||
document.location.href = '/db/' + value;
|
||||
} else {
|
||||
window.alert('Name must be longer than 4 characters');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
var SpeechRecognition = SpeechRecognition || webkitSpeechRecognition
|
||||
@ -263,8 +195,12 @@
|
||||
*/
|
||||
|
||||
</script>
|
||||
<div class="webApp" id="webApp">
|
||||
|
||||
</div>
|
||||
<script src="/src/vrApp.ts" type="module"></script>
|
||||
|
||||
|
||||
<div class="scene">
|
||||
<canvas id="gameCanvas"></canvas>
|
||||
</div>
|
||||
|
||||
3571
package-lock.json
generated
3571
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -15,6 +15,7 @@
|
||||
"havok": "cp ./node_modules/@babylonjs/havok/lib/esm/HavokPhysics.wasm ./node_modules/.vite/deps"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.24.0",
|
||||
"@babylonjs/core": "^6.21.3",
|
||||
"@babylonjs/gui": "^6.21.3",
|
||||
"@babylonjs/havok": "1.1.4",
|
||||
@ -38,6 +39,9 @@
|
||||
"pouchdb": "^8.0.1",
|
||||
"pouchdb-find": "^7.2.2",
|
||||
"query-string": "^8.1.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"@types/react-dom": "^18.2.18",
|
||||
"@types/react": "^18.2.52",
|
||||
"round": "^2.0.1",
|
||||
"uuid": "^9.0.0"
|
||||
},
|
||||
|
||||
@ -24,6 +24,9 @@ export class PouchdbPersistenceManager {
|
||||
this.diagramListings = new PouchDB("diagramListings");
|
||||
}
|
||||
|
||||
public async getDiagramListings() {
|
||||
return this.diagramListings.allDocs({include_docs: true});
|
||||
}
|
||||
public setDiagramManager(diagramManager: DiagramManager) {
|
||||
diagramManager.onDiagramEventListingObservable.add((evt) => {
|
||||
if (evt.type == DiagramListingEventType.GETALL) {
|
||||
|
||||
140
src/react/webApp.tsx
Normal file
140
src/react/webApp.tsx
Normal file
@ -0,0 +1,140 @@
|
||||
import {useState} from "react";
|
||||
|
||||
function MainMenu({onClick}) {
|
||||
return (
|
||||
<div className="overlay mini" id="main" onClick={onClick}>
|
||||
<img height="120" src="/assets/ddd.svg" width="320"/>
|
||||
<div id="startCreate"><a href="#" id="startCreateLink">Start</a></div>
|
||||
<div id="download"><a href="#" id="downloadLink">Download Model</a></div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function CreateMenu({display}) {
|
||||
return (
|
||||
<div className="overlay" id="create" style={{'display': display}}>
|
||||
|
||||
<div>
|
||||
<div><input id="createName" placeholder="Enter a name for your diagram" type="text"/></div>
|
||||
<div><input id="createPassword" placeholder="Enter a password (optional)" type="text"/></div>
|
||||
<div><a href="#" id="createActionLink">Create</a></div>
|
||||
<div><a className="cancel" href="#" id="cancelCreateLink">Cancel</a></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function TutorialMenu({onClick}) {
|
||||
return (
|
||||
<div className="overlay" id="tutorial">
|
||||
<h1>Help</h1>
|
||||
<div id="desktopTutorial"><a href="#" id="desktopLink" onClick={onClick}>Desktop</a></div>
|
||||
<div id="questTutorial"><a href="#" id="questLink">Quest</a></div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function KeyboardHelp({display, onClick}) {
|
||||
return (
|
||||
<div className="overlay" id="keyboardHelp" style={{'display': display}}>
|
||||
<div id="closekey"><a href="#" onClick={onClick}>X</a></div>
|
||||
<img height="240" src="/assets/textures/keyboardhelp2.jpg" width="480"/>
|
||||
<img height="240" src="/assets/textures/mousehelp.jpg" width="180"/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function DiagramList() {
|
||||
return (
|
||||
<div className="overlay" id="diagramList" style={{'left': '500px'}}>
|
||||
<h1>Existing Diagrams</h1>
|
||||
<div id="diagramListContent">
|
||||
<ul>
|
||||
<li><a href="/db/ddd">ddd</a></li>
|
||||
<li><a href="/db/ddd2">ddd2</a></li>
|
||||
<li><a href="/db/ddd3">ddd3</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function Menu() {
|
||||
|
||||
const [createState, setCreateState] = useState('none');
|
||||
const [desktopTutorialState, setDesktopTutorialState] = useState('none');
|
||||
|
||||
function handleCreateClick() {
|
||||
setCreateState(createState == 'none' ? 'block' : 'none');
|
||||
}
|
||||
|
||||
function handleDesktopTutorialClick() {
|
||||
setDesktopTutorialState(desktopTutorialState == 'none' ? 'block' : 'none');
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<MainMenu onClick={handleCreateClick}/>
|
||||
<TutorialMenu onClick={handleDesktopTutorialClick}/>
|
||||
<CreateMenu display={createState}/>
|
||||
<KeyboardHelp display={desktopTutorialState} onClick={handleDesktopTutorialClick}/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default function WebApp() {
|
||||
return (
|
||||
<div>
|
||||
<Menu/>
|
||||
</div>
|
||||
)
|
||||
|
||||
|
||||
}
|
||||
/*
|
||||
const create = document.querySelector('#startCreateLink');
|
||||
if (create) {
|
||||
create.addEventListener('click', function (evt) {
|
||||
evt.preventDefault();
|
||||
document.querySelector('#main').style.display = 'none';
|
||||
document.querySelector('#create').style.display = 'block';
|
||||
});
|
||||
}
|
||||
const cancel = document.querySelector('#cancelCreateLink');
|
||||
if (cancel) {
|
||||
cancel.addEventListener('click', function (evt) {
|
||||
evt.preventDefault();
|
||||
document.querySelector('#main').style.display = 'block';
|
||||
document.querySelector('#create').style.display = 'none';
|
||||
});
|
||||
}
|
||||
const close = document.querySelector('#closekey a');
|
||||
if (close) {
|
||||
close.addEventListener('click', function (evt) {
|
||||
evt.preventDefault();
|
||||
document.querySelector('#keyboardHelp').style.display = 'none';
|
||||
});
|
||||
}
|
||||
const desktopTutorial = document.querySelector('#desktopLink');
|
||||
if (desktopTutorial) {
|
||||
desktopTutorial.addEventListener('click', function (evt) {
|
||||
evt.preventDefault();
|
||||
// document.querySelector('#tutorial').style.display = 'none';
|
||||
document.querySelector('#keyboardHelp').style.display = 'block';
|
||||
});
|
||||
}
|
||||
const createAction = document.querySelector('#createActionLink');
|
||||
if (createAction) {
|
||||
createAction.addEventListener('click', function (evt) {
|
||||
evt.preventDefault();
|
||||
const value = document.querySelector('#createName').value;
|
||||
if (value && value.length > 4) {
|
||||
document.location.href = '/db/' + value;
|
||||
} else {
|
||||
window.alert('Name must be longer than 4 characters');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
*/
|
||||
@ -1,3 +1,5 @@
|
||||
import {createRoot} from 'react-dom/client';
|
||||
import WebApp from './react/webApp';
|
||||
import {Engine, FreeCamera, Scene, Vector3} from "@babylonjs/core";
|
||||
import '@babylonjs/loaders';
|
||||
import {DiagramManager} from "./diagram/diagramManager";
|
||||
@ -16,7 +18,6 @@ import {buildQuestLink} from "./util/functions/buildQuestLink";
|
||||
import {exportGltf} from "./util/functions/exportGltf";
|
||||
import {Tutorial} from "./tutorial/tutorial";
|
||||
|
||||
|
||||
export class VrApp {
|
||||
private scene: Scene;
|
||||
private engine: Engine;
|
||||
@ -24,6 +25,8 @@ export class VrApp {
|
||||
private logger: Logger = log.getLogger('App');
|
||||
|
||||
constructor() {
|
||||
const root = createRoot(document.getElementById('webApp'));
|
||||
root.render(WebApp());
|
||||
log.setDefaultLevel('warn');
|
||||
log.getLogger('App').setLevel('debug');
|
||||
log.getLogger('DiagramManager').setLevel('debug');
|
||||
@ -61,6 +64,7 @@ export class VrApp {
|
||||
db.setConfig(newConfig);
|
||||
}, 2, false, this);
|
||||
await db.initialize();
|
||||
|
||||
const camera: FreeCamera = new FreeCamera("Main Camera",
|
||||
new Vector3(0, 1.6, 0), scene);
|
||||
//camera.setTarget(new Vector3(0, 1.6, -3));
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"jsx": "react-jsx",
|
||||
"target": "es6",
|
||||
// choose our ECMA/JavaScript version (all modern browsers support ES6 so it's your best bet)
|
||||
"allowSyntheticDefaultImports": true,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user