-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
120 lines (92 loc) · 3.19 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// SZIMULÁCIÓHOZ HASZNÁLT VÁLTOZÓK DEKLARÁCIÓJA
let galaxis = new Galaxis("Kistejút")
function inicializalas(){
}
function szimulacios_lepes(){
galaxis.gravitacios_kolcsonhatas();
galaxis.utkozeses_kolcsonhatas();
galaxis.mozgat();
}
// --------------------------------- Motorháztető alatt -----------------------------------------------
let globalID;
let running = false;
function update() {
szimulacios_lepes();
globalID = requestAnimationFrame(update);
}
startbtn.addEventListener("click", start);
stopbtn.addEventListener("click", animationStop);
resetbtn.addEventListener("click", galaxis.reset);
sulypontbtn.addEventListener("click", sulypontReset);
bolygobtn.addEventListener("click", bolygo_letevese);
vaszon.addEventListener("wheel", nagyit);
function nagyit(e){
const c = 1.1;
if (e.deltaY < 0){
console.log(vaszon.viewBox);
vaszon.setAttribute('viewBox', `${vaszon.viewBox.animVal.x/c} ${vaszon.viewBox.animVal.y/c} ${vaszon.viewBox.animVal.width/c} ${vaszon.viewBox.animVal.height/c}`);
} else if (e.deltaY > 0){
vaszon.setAttribute('viewBox', `${vaszon.viewBox.animVal.x*c} ${vaszon.viewBox.animVal.y*c} ${vaszon.viewBox.animVal.width*c} ${vaszon.viewBox.animVal.height*c}`);
}
}
function start(){
inicializalas();
animationStart();
}
function animationStart() {
if (!running) {
globalID = requestAnimationFrame(update);
running = true;
galaxis.nyillathatosag_kapcs();
}
}
function animationStop() {
if (running) {
cancelAnimationFrame(globalID);
running = false;
galaxis.nyilak_update();
galaxis.nyillathatosag_kapcs();
}
}
function sulypontReset() {
let s = galaxis.sulypont();
galaxis.eltolas(Vektor.ellentett(s));
}
vaszon.addEventListener("mousedown", bolygo_poziciojanak_megadasa, false);
vaszon.addEventListener("mouseup", bolygo_sebessegenek_megadasa, false);
let globalis_kattintasszamlalo_valtozo = 0;
// első kattintás p-t állít
// második kattintás v-t állít
// külön gomb pakolja le a bolygót, ha ez jó.
let innen = new Vektor(0,0);
let ide = new Vektor(0,0);
function bolygo_poziciojanak_megadasa(evt) {
let cursorpt = cursorPoint(evt);
innen = new Vektor(cursorpt.x, cursorpt.y);
px.value = innen.x;
py.value = innen.y;
}
function bolygo_sebessegenek_megadasa(evt) {
let cursorpt = cursorPoint(evt);
ide = new Vektor(cursorpt.x, cursorpt.y);
let v = Vektor.kivon(ide,innen);
v.leosztja(100);
vx.value = v.x;
vy.value = v.y;
}
function bolygo_letevese(){
let p = new Vektor(parseFloat(px.value), parseFloat(py.value));
let v = new Vektor(parseFloat(vx.value), parseFloat(vy.value));
let bolygocska = new Egitest(bolygonev.value, parseFloat(tomeg.value), p, v, egitest_belszin.value, egitest_kulszin.value, galaxis);
vaszon.appendChild(bolygocska.svgobject);
vaszon.appendChild(bolygocska.svgnyil);
if(running){
bolygocska.svgnyil.classList.toggle('lathatatlan');
}
}
function cursorPoint(evt) {
let pt = vaszon.createSVGPoint();
pt.x = evt.clientX;
pt.y = evt.clientY;
return pt.matrixTransform(vaszon.getScreenCTM().inverse());
}