# hft-syncThreeJS
**Repository Path**: greggman/hft-syncThreeJS
## Basic Information
- **Project Name**: hft-syncThreeJS
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-05-05
- **Last Updated**: 2021-09-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
SyncThreeJS
===========
This is a demo that "happens" to use HappyFunTimes.
**It is not a game**. It's just a demo
Instead it shows using HappyFunTimes to keep multiple
machines in sync. So for example if you wanted
to make a virtual display across multiple machines
this is one technique to do it.
## Running
git clone https://github.com/greggman/hft-sync2d
cd hft-sync2d
npm install
npm start
Then open a browser window to `http://localhost:18679/game.html`
Choose **"Start Window Position Based"** and then move and resize the windows.
## How it works
The basic premise is this:
* open a browser window on multiple machines.
On each machine, put settings in the url specifying where in a larger virtual display that
particular machine is.
For example, if you have 2 machines set next to each other each with a resolution of 1280x960.
Machine ABC on the left and Machine DEF on the right. Together they make a virutal display
2560x960
+---------------++---------------+
| || |
| || |
| Machine ABC || Machine DEF |
| || |
|<---- 1280 --->||<---- 1280 --->|
+---------------++---------------+
<------------ 2560 ------------>
On Machine ABC you'd use URL
http:///games//sync2d.html?settings={shared:{fillWidth:2560,fullHeight:960},left:0,top:0,server:true}
On Machine DEF you'd use URL
http:///games//sync2d.html?settings={shared:{fillWidth:2560,fullHeight:960},left:1280,top:0,server:false}
The difference between those URLs is the `left` parameter and the `server` parameter.
One machine is "the server". It controls the other machines. The `left` and `top` parameters
tell that machine which part of the larger virtual display it represents. Each machine looks up the size
of the window it creates to get the correct width and height.
After that the sample uses [three.js](http://threejs.org) and sets the camera's parameters calling
`camera.setViewOffset` that part of the scene rendered represents
the correct part of the larger virtual canvas. All machines draw the entire scene.
All drawing is based on a clock. Because the clock is kept in sync by HappyFunTimes
all the machines match up on what they are trying to draw.
As far as keeping settings in sync the machine with `server: true` displays a set of sliders.
It sends the the updated settings to HappyFunTimes which are then propogated to all the machines.
The `server` setting has nothing to do with networking or syncing only whether or not to display to UI