commit
ac1761b215
23 changed files with 718 additions and 0 deletions
@ -0,0 +1,2 @@ |
||||
.idea |
||||
|
@ -0,0 +1,6 @@ |
||||
{ |
||||
"display_name": "Doppler effect", |
||||
"info_text": "Graphical demonstration of the Doppler effect.", |
||||
"visible": false, |
||||
"tags": ["Simulation", "Maths"] |
||||
} |
After Width: | Height: | Size: 318 B |
@ -0,0 +1,154 @@ |
||||
class Doppler{ |
||||
|
||||
constructor(){ |
||||
this.waves = []; |
||||
this.source = new Source(this.waves); |
||||
this.vel = 1; |
||||
} |
||||
|
||||
update(){ |
||||
let wavesToRemove = [] |
||||
this.waves.forEach(w => w.update(this.vel, wavesToRemove)); |
||||
wavesToRemove.forEach((w, i) => this.waves.splice(i, 1)); |
||||
this.source.update(this.vel); |
||||
} |
||||
|
||||
updateMode(){ |
||||
let mode = $('#mode_holder input[name=mode]:checked').val(); |
||||
console.log('New mode: ' + mode); |
||||
this.source.mode = mode; |
||||
this.source.reset(); |
||||
} |
||||
|
||||
display(){ |
||||
this.waves.forEach(w => w.display()); |
||||
this.source.display(); |
||||
} |
||||
|
||||
} |
||||
|
||||
class Source{ |
||||
|
||||
constructor(waves){ |
||||
this.waves = waves; |
||||
this.radius = 20; |
||||
this.pos = createVector(width / 4, height / 2); |
||||
this.vel = createVector(10, 0); |
||||
this.angle = 0; |
||||
} |
||||
|
||||
reset(){ |
||||
this.pos = createVector(width / 4, height / 2); |
||||
this.vel = createVector(10, 0); |
||||
this.angle = 0; |
||||
} |
||||
|
||||
update(vel){ |
||||
this.angle += 0.03 * vel; |
||||
this.move(vel); |
||||
|
||||
if (mouseIsPressed) |
||||
this.trySendWave(vel); |
||||
} |
||||
|
||||
move(vel){ |
||||
let x, y, size; |
||||
|
||||
switch (this.mode){ |
||||
case MODE.FREE: |
||||
x = mouseX; |
||||
y = mouseY; |
||||
break; |
||||
case MODE.STRAIGHT_LEFT: |
||||
x = this.pos.x - this.vel.x * vel; |
||||
y = height / 2; |
||||
if (x < 0) |
||||
x = width; |
||||
break; |
||||
case MODE.STRAIGHT_RIGHT: |
||||
x = this.pos.x + this.vel.x * vel; |
||||
y = height / 2; |
||||
if (x > width) |
||||
x = 0; |
||||
break; |
||||
case MODE.STRAIGHT_BOTH: |
||||
x = this.pos.x + this.vel.x * vel; |
||||
y = height / 2; |
||||
if (x < 0 || x > width) |
||||
this.vel.x *= -1; |
||||
break; |
||||
case MODE.SMOOTH_HORIZONTAL: |
||||
size = Math.min(width, height) * 0.8; |
||||
x = width / 2 + sin(this.angle) * size / 2; |
||||
y = height / 2; |
||||
break; |
||||
case MODE.SMOOTH_VERTICAL: |
||||
size = Math.min(width, height) * 0.8; |
||||
x = width / 2; |
||||
y = height / 2 + cos(this.angle) * size / 2; |
||||
break; |
||||
case MODE.CIRCLE: |
||||
size = Math.min(width, height) * 0.8; |
||||
x = width / 2 + sin(this.angle) * size / 2; |
||||
y = height / 2 + cos(this.angle) * size / 2; |
||||
break; |
||||
} |
||||
this.pos.x = x; |
||||
this.pos.y = y; |
||||
} |
||||
|
||||
trySendWave(vel){ |
||||
if (frameCount % int(2 / vel) === 0){ |
||||
this.waves.push(new Wave(this.pos.x, this.pos.y, this.radius)); |
||||
} |
||||
} |
||||
|
||||
display(){ |
||||
fill(255, 0, 0); |
||||
stroke(255, 0, 0); |
||||
strokeWeight(1); |
||||
ellipse(this.pos.x, this.pos.y, this.radius, this.radius); |
||||
} |
||||
|
||||
} |
||||
|
||||
class Wave{ |
||||
|
||||
constructor(x, y, r){ |
||||
this.pos = createVector(x, y); |
||||
this.radius = r; |
||||
this.vel = 35; |
||||
} |
||||
|
||||
get isRemoveable(){ |
||||
return this.radius > width * 2.1; |
||||
} |
||||
|
||||
update(vel, removeables){ |
||||
this.grow(vel); |
||||
if (this.isRemoveable) |
||||
removeables.push(this); |
||||
} |
||||
|
||||
grow(vel){ |
||||
this.radius += this.vel * vel; |
||||
} |
||||
|
||||
display(){ |
||||
noFill(); |
||||
stroke(255); |
||||
strokeWeight(1); |
||||
ellipse(this.pos.x, this.pos.y, this.radius, this.radius); |
||||
} |
||||
|
||||
} |
||||
|
||||
let MODE = { |
||||
FREE: 'free', |
||||
STRAIGHT_LEFT: 'straight_left', |
||||
STRAIGHT_RIGHT: 'straight_right', |
||||
STRAIGHT_BOTH: 'straight_both', |
||||
SMOOTH_HORIZONTAL: 'smooth_horizontal', |
||||
SMOOTH_VERTICAL: 'smooth_vertical', |
||||
CIRCLE: 'circle' |
||||
} |
@ -0,0 +1,25 @@ |
||||
'use strict';
|
||||
|
||||
function keyPressed(){
|
||||
|
||||
} |
||||
|
||||
function keyReleased(){ |
||||
|
||||
} |
||||
|
||||
function mouseMoved(){ |
||||
|
||||
} |
||||
|
||||
function mouseDragged(){ |
||||
|
||||
} |
||||
|
||||
function mousePressed(){ |
||||
|
||||
} |
||||
|
||||
function mouseReleased(){ |
||||
|
||||
} |
@ -0,0 +1,81 @@ |
||||
'use strict'; |
||||
|
||||
let debug = false, |
||||
font, |
||||
localSettings, |
||||
loader; |
||||
|
||||
//Only for online games
|
||||
let socket; |
||||
|
||||
let antiCacheQuery = '?_=' + new Date().getTime(); |
||||
|
||||
|
||||
let doppler; |
||||
|
||||
|
||||
function preload(){ |
||||
localSettings = loadJSON('data/settings/settings.json' + antiCacheQuery, json => { |
||||
console.log('Local settings loaded: ', json); |
||||
}, error => { |
||||
console.log('Local settings failed: ', error); |
||||
}); |
||||
|
||||
font = loadFont('data/styles/fonts/Tajawal/Tajawal-Regular.ttf' + antiCacheQuery, json => { |
||||
console.log('Local font loaded: ', json); |
||||
}, error => { |
||||
console.log('Local font failed: ', error); |
||||
}); |
||||
|
||||
loadJSON('data/settings/libraries.json', json => { |
||||
loadScripts(json); |
||||
console.log('BenjoCraeft library scripts loaded: ', json); |
||||
}); |
||||
} |
||||
|
||||
function setup(){ |
||||
canvasSetup(); |
||||
interfaceSetup(); |
||||
doppler = new Doppler(); |
||||
doppler.updateMode(); |
||||
} |
||||
|
||||
function draw(){ |
||||
background(30); |
||||
|
||||
if (doppler){ |
||||
doppler.update(); |
||||
doppler.display(); |
||||
} |
||||
|
||||
if (loader){ |
||||
loader.update(); |
||||
loader.display(); |
||||
} |
||||
|
||||
if (debug) debugInformation(); |
||||
} |
||||
|
||||
function canvasSetup(){ |
||||
setFrameRate(60); |
||||
let w = $('#canvas-holder').width(), |
||||
h = $('#canvas-holder').height(); |
||||
let canvas = createCanvas(w, h); |
||||
canvas.parent('canvas-holder'); |
||||
textFont(font); |
||||
} |
||||
|
||||
function interfaceSetup(){ |
||||
|
||||
} |
||||
|
||||
function loadScripts(libs){ |
||||
for (let script in libs){ |
||||
if (libs[script]){ |
||||
let url = '/lib/benjocraeft/' + script + '.js' |
||||
$.getScript(url, () => { |
||||
console.log('Successfully loaded script: ', url) |
||||
}); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,10 @@ |
||||
'use strict'; |
||||
|
||||
function socketConnect(project, name = "noone"){ |
||||
let urlQueries = '?game=' + project.name + '&name=' + name; |
||||
let port = 3000; |
||||
let url = location.hostname + ":" + port + urlQueries; |
||||
|
||||
socket = io.connect(url); |
||||
socket.on('connect', () => console.log('Connected to ', url)); |
||||
} |
@ -0,0 +1,8 @@ |
||||
{ |
||||
"collision": false, |
||||
"colorPicker": false, |
||||
"cookie": false, |
||||
"loader": false, |
||||
"prototypes": false, |
||||
"technical": false |
||||
} |
@ -0,0 +1,23 @@ |
||||
{ |
||||
"project": { |
||||
"name": "project_pattern", |
||||
"author": "BenjoCraeft", |
||||
"version": "0.0.0", |
||||
"playerCounts": [], |
||||
"online": { |
||||
"iceServers": [ |
||||
{"urls": "stun:stun.l.google.com:19302"}, |
||||
{ |
||||
"urls": "turn:numb.viagenie.ca", |
||||
"credential": "muazkh", |
||||
"username": "webrtc@live.com" |
||||
} |
||||
] |
||||
} |
||||
}, |
||||
"frameWork": { |
||||
"frameRate": 60, |
||||
"width": null, |
||||
"height": null |
||||
} |
||||
} |
@ -0,0 +1,88 @@ |
||||
#color_picker{ |
||||
width: 300px; |
||||
height: 25%; |
||||
margin: 20px; |
||||
margin-top: 50px; |
||||
border: 5px solid #000; |
||||
background-color: #000; |
||||
-webkit-user-select: none; |
||||
-moz-user-select: none; |
||||
-ms-user-select: none; |
||||
user-select: none; |
||||
position: relative; |
||||
} |
||||
#color_picker_numeric{ |
||||
width: 80%; |
||||
padding: 5%; |
||||
margin: 5%; |
||||
background-color: #888; |
||||
border-radius: 10px; |
||||
overflow: hidden; |
||||
} |
||||
.color_picker_rgb{ |
||||
float: left; |
||||
width: 22%; |
||||
height: 35px; |
||||
font-size: 25px; |
||||
color: #000; |
||||
} |
||||
.color_picker_rgb:nth-child(1){ |
||||
margin-right: 10%; |
||||
margin-left: 3%; |
||||
background-color: #F00; |
||||
|
||||
} |
||||
.color_picker_rgb:nth-child(2){ |
||||
background-color: #0F0; |
||||
} |
||||
.color_picker_rgb:nth-child(3){ |
||||
margin-left: 10%; |
||||
background-color: #00F; |
||||
color: #FFF; |
||||
} |
||||
#color_picker_hex{ |
||||
width: 50%; |
||||
height: 30px; |
||||
font-size: 25px; |
||||
margin: 10% 25% 0 25%; |
||||
} |
||||
#saturation{ |
||||
position: relative; |
||||
width: calc(100% - 33px); |
||||
height: 100%; |
||||
background: linear-gradient(to right, #FFF 0%, #F00 100%); |
||||
float: left; |
||||
margin-right: 6px; |
||||
} |
||||
#value { |
||||
width: 100%; |
||||
height: 100%; |
||||
background: linear-gradient(to top, #000 0%, rgba(255,255,255,0) 100%); |
||||
} |
||||
#sb_picker{ |
||||
border: 2px solid; |
||||
border-color: #FFF; |
||||
position: absolute; |
||||
width: 14px; |
||||
height: 14px; |
||||
border-radius: 10px; |
||||
bottom: 50px; |
||||
left: 50px; |
||||
box-sizing: border-box; |
||||
z-index: 10; |
||||
} |
||||
#hue { |
||||
width: 27px; |
||||
height: 100%; |
||||
position: relative; |
||||
float: left; |
||||
background: linear-gradient(to bottom, #F00 0%, #F0F 17%, #00F 34%, #0FF 50%, #0F0 67%, #FF0 84%, #F00 100%); |
||||
} |
||||
#hue_picker { |
||||
position: absolute; |
||||
background: #000; |
||||
border-bottom: 1px solid #000; |
||||
top: 0; |
||||
width: 27px; |
||||
height: 2px; |
||||
} |
Binary file not shown.
@ -0,0 +1,93 @@ |
||||
Copyright 2018 Boutros International. (https://www.boutrosfonts.com) |
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1. |
||||
This license is copied below, and is also available with a FAQ at: |
||||
https://scripts.sil.org/OFL |
||||
|
||||
|
||||
----------------------------------------------------------- |
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 |
||||
----------------------------------------------------------- |
||||
|
||||
PREAMBLE |
||||
The goals of the Open Font License (OFL) are to stimulate worldwide |
||||
development of collaborative font projects, to support the font creation |
||||
efforts of academic and linguistic communities, and to provide a free and |
||||
open framework in which fonts may be shared and improved in partnership |
||||
with others. |
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and |
||||
redistributed freely as long as they are not sold by themselves. The |
||||
fonts, including any derivative works, can be bundled, embedded, |
||||
redistributed and/or sold with any software provided that any reserved |
||||
names are not used by derivative works. The fonts and derivatives, |
||||
however, cannot be released under any other type of license. The |
||||
requirement for fonts to remain under this license does not apply |
||||
to any document created using the fonts or their derivatives. |
||||
|
||||
DEFINITIONS |
||||
"Font Software" refers to the set of files released by the Copyright |
||||
Holder(s) under this license and clearly marked as such. This may |
||||
include source files, build scripts and documentation. |
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the |
||||
copyright statement(s). |
||||
|
||||
"Original Version" refers to the collection of Font Software components as |
||||
distributed by the Copyright Holder(s). |
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting, |
||||
or substituting -- in part or in whole -- any of the components of the |
||||
Original Version, by changing formats or by porting the Font Software to a |
||||
new environment. |
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical |
||||
writer or other person who contributed to the Font Software. |
||||
|
||||
PERMISSION & CONDITIONS |
||||
Permission is hereby granted, free of charge, to any person obtaining |
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify, |
||||
redistribute, and sell modified and unmodified copies of the Font |
||||
Software, subject to the following conditions: |
||||
|
||||
1) Neither the Font Software nor any of its individual components, |
||||
in Original or Modified Versions, may be sold by itself. |
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled, |
||||
redistributed and/or sold with any software, provided that each copy |
||||
contains the above copyright notice and this license. These can be |
||||
included either as stand-alone text files, human-readable headers or |
||||
in the appropriate machine-readable metadata fields within text or |
||||
binary files as long as those fields can be easily viewed by the user. |
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font |
||||
Name(s) unless explicit written permission is granted by the corresponding |
||||
Copyright Holder. This restriction only applies to the primary font name as |
||||
presented to the users. |
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font |
||||
Software shall not be used to promote, endorse or advertise any |
||||
Modified Version, except to acknowledge the contribution(s) of the |
||||
Copyright Holder(s) and the Author(s) or with their explicit written |
||||
permission. |
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole, |
||||
must be distributed entirely under this license, and must not be |
||||
distributed under any other license. The requirement for fonts to |
||||
remain under this license does not apply to any document created |
||||
using the Font Software. |
||||
|
||||
TERMINATION |
||||
This license becomes null and void if any of the above conditions are |
||||
not met. |
||||
|
||||
DISCLAIMER |
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF |
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT |
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE |
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL |
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM |
||||
OTHER DEALINGS IN THE FONT SOFTWARE. |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,88 @@ |
||||
input[type=range] { |
||||
-webkit-appearance: none; |
||||
margin: 18px 0; |
||||
width: 100%; |
||||
} |
||||
input[type=range]:focus { |
||||
outline: none; |
||||
} |
||||
input[type=range]::-webkit-slider-runnable-track { |
||||
width: 100%; |
||||
height: 8.4px; |
||||
cursor: pointer; |
||||
animate: 0.2s; |
||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; |
||||
background: #3071a9; |
||||
border-radius: 1.3px; |
||||
border: 0.2px solid #010101; |
||||
} |
||||
input[type=range]::-webkit-slider-thumb { |
||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; |
||||
border: 1px solid #000000; |
||||
height: 36px; |
||||
width: 16px; |
||||
border-radius: 3px; |
||||
background: #ffffff; |
||||
cursor: pointer; |
||||
-webkit-appearance: none; |
||||
margin-top: -14px; |
||||
} |
||||
input[type=range]:focus::-webkit-slider-runnable-track { |
||||
background: #367ebd; |
||||
} |
||||
input[type=range]::-moz-range-track { |
||||
width: 100%; |
||||
height: 8.4px; |
||||
cursor: pointer; |
||||
animate: 0.2s; |
||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; |
||||
background: #3071a9; |
||||
border-radius: 1.3px; |
||||
border: 0.2px solid #010101; |
||||
} |
||||
input[type=range]::-moz-range-thumb { |
||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; |
||||
border: 1px solid #000000; |
||||
height: 36px; |
||||
width: 16px; |
||||
border-radius: 3px; |
||||
background: #ffffff; |
||||
cursor: pointer; |
||||
} |
||||
input[type=range]::-ms-track { |
||||
width: 100%; |
||||
height: 8.4px; |
||||
cursor: pointer; |
||||
animate: 0.2s; |
||||
background: transparent; |
||||
border-color: transparent; |
||||
border-width: 16px 0; |
||||
color: transparent; |
||||
} |
||||
input[type=range]::-ms-fill-lower { |
||||
background: #2a6495; |
||||
border: 0.2px solid #010101; |
||||
border-radius: 2.6px; |
||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; |
||||
} |
||||
input[type=range]::-ms-fill-upper { |
||||
background: #3071a9; |
||||
border: 0.2px solid #010101; |
||||
border-radius: 2.6px; |
||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; |
||||
} |
||||
input[type=range]::-ms-thumb { |
||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; |
||||
border: 1px solid #000000; |
||||
height: 36px; |
||||
width: 16px; |
||||
border-radius: 3px; |
||||
background: #ffffff; |
||||
cursor: pointer; |
||||
} |
||||
input[type=range]:focus::-ms-fill-lower { |
||||
background: #3071a9; |
||||
} |
||||
input[type=range]:focus::-ms-fill-upper { |
||||
background: #367ebd; |
||||
} |
@ -0,0 +1,70 @@ |
||||
<!-- Web project created by Benjo Craeft (alias) --> |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<script src="/lib/socket.io/socket.io.min.js" type="text/javascript"></script> |
||||
<script src="/lib/socket.io/socket.io-p2p.min.js" type="text/javascript"></script> |
||||
<script src="/lib/p5/p5.min.js" type="text/javascript"></script> |
||||
<script src="/lib/p5/p5.dom.min.js" type="text/javascript"></script> |
||||
<script src="/lib/p5/p5.sound.min.js" type="text/javascript"></script> |
||||
<script src="/lib/jquery/jquery.min.js" type="text/javascript"></script> |
||||
<script src="https://cdn.jsdelivr.net/npm/vue"></script> |
||||
<script src="data/scripts/init.js" type="text/javascript"></script> |
||||
<script src="data/scripts/events.js" type="text/javascript"></script> |
||||
<script src="data/scripts/online.js" type="text/javascript"></script> |
||||
<script src="data/scripts/doppler.js" type="text/javascript"></script> |
||||
<link href="styles.css" rel="stylesheet"> |
||||
<link href="data/styles/color_picker.css" rel="stylesheet"> |
||||
<link href="data/styles/range_input.css" rel="stylesheet"> |
||||
<link href="data/images/favicon.ico" rel="icon" type="image/x-icon"> |
||||
<title>Doppler Effect</title> |
||||
</head> |
||||
<body> |
||||
<div id="p5_loading"></div> |
||||
<div id="content"> |
||||
<div id="interface"> |
||||
<h1>Doppler Effect</h1> |
||||
<fieldset id="mode_holder" onchange="doppler.updateMode();"> |
||||
<legend>Mode</legend> |
||||
|
||||
<label> |
||||
<input name="mode" type="radio" value="free"> |
||||
Follow mouse |
||||
</label> |
||||
<br> |
||||
<label> |
||||
<input name="mode" type="radio" value="straight_right"> |
||||
Straight right |
||||
</label> |
||||
<br> |
||||
<label> |
||||
<input name="mode" type="radio" value="straight_left"> |
||||
Straight left |
||||
</label> |
||||
<br> |
||||
<label> |
||||
<input name="mode" type="radio" value="straight_both"> |
||||
Straight both |
||||
</label> |
||||
<br> |
||||
<label> |
||||
<input name="mode" type="radio" value="smooth_horizontal"> |
||||
Smooth horizontal |
||||
</label> |
||||
<br> |
||||
<label> |
||||
<input name="mode" type="radio" value="smooth_vertical"> |
||||
Smooth vertical |
||||
</label> |
||||
<br> |
||||
<label> |
||||
<input name="mode" type="radio" value="circle"> |
||||
Circle |
||||
</label> |
||||
</fieldset> |
||||
</div> |
||||
<div id="canvas-holder"></div> |
||||
</div> |
||||
</body> |
||||
</html> |
@ -0,0 +1,70 @@ |
||||
a:link, a:hover, a:active, a:visited{color: #000;} |
||||
|
||||
html, body{margin: 0; padding: 0; height: 100%; width: 100%;} |
||||
|
||||
canvas{margin: 0; padding: 0; border: none; display: block;} |
||||
|
||||
button:hover{cursor: pointer;} |
||||
|
||||
@font-face{ |
||||
font-family: "Tajawal"; |
||||
src: url("data/styles/fonts/Tajawal/Tajawal-Regular.ttf"); |
||||
} |
||||
|
||||
:root{ |
||||
--if-width: 300px; |
||||
--if-b-width: 10px; |
||||
--c-width: calc(100vw - var(--if-width) - var(--if-b-width)); |
||||
--c-height: 100vh; |
||||
} |
||||
|
||||
/** |
||||
* Standard styles |
||||
*/ |
||||
|
||||
#canvas-holder{ |
||||
position: absolute; |
||||
left: calc(var(--if-width) + var(--if-b-width)); |
||||
width: var(--c-width); |
||||
height: var(--c-height); |
||||
} |
||||
#canvas-holder canvas{ |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
right: 0; |
||||
bottom: 0; |
||||
border-radius: inherit; |
||||
} |
||||
#p5_loading{ |
||||
display: none; |
||||
} |
||||
|
||||
|
||||
#interface{ |
||||
position: absolute; |
||||
left: 0; |
||||
top: 0; |
||||
width: 300px; |
||||
height: 100%; |
||||
border: 1px solid #000; |
||||
border-width: 0 var(--if-b-width) 0 0; |
||||
background-color: rgb(70, 70, 70); |
||||
|
||||
font-family: "Tajawal"; |
||||
|
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
justify-content: center; |
||||
} |
||||
|
||||
h1{ |
||||
font-size: 30px; |
||||
text-decoration: underline; |
||||
} |
||||
|
||||
#mode_holder{ |
||||
border: 5px solid #000; |
||||
font-size: 25px; |
||||
} |
After Width: | Height: | Size: 52 KiB |
Loading…
Reference in new issue