mirror of
https://github.com/denismhz/solar-system.git
synced 2025-11-10 00:32:24 +01:00
speed, positions, reset
This commit is contained in:
parent
48da123b72
commit
08179b1627
|
|
@ -26,6 +26,8 @@ import { Skybox } from "./skybox.jsx";
|
||||||
import { ReactPropTypes } from "react";
|
import { ReactPropTypes } from "react";
|
||||||
import { MyContext } from "./Scene3.jsx";
|
import { MyContext } from "./Scene3.jsx";
|
||||||
|
|
||||||
|
export const PlanetOverlayContext = createContext();
|
||||||
|
|
||||||
export const SharedPlanetState = () => {
|
export const SharedPlanetState = () => {
|
||||||
const { customData } = useContext(MyContext);
|
const { customData } = useContext(MyContext);
|
||||||
|
|
||||||
|
|
@ -50,16 +52,13 @@ export const SharedPlanetState = () => {
|
||||||
};
|
};
|
||||||
customData.current["handleVisibility"] = handleVisibility;
|
customData.current["handleVisibility"] = handleVisibility;
|
||||||
|
|
||||||
let [resetB, setResetB] = useState(false);
|
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
setSpeed(0);
|
setSpeed(0);
|
||||||
dateTime.current = new Date(Date.now());
|
|
||||||
};
|
};
|
||||||
customData.current["handleReset"] = handleReset;
|
customData.current["handleReset"] = handleReset;
|
||||||
|
|
||||||
//set speed (timeinterval between positions 60000ms*speed)
|
//set speed (timeinterval between positions 60000ms*speed)
|
||||||
const [speed, setSpeed] = useState(0);
|
const [speed, setSpeed] = useState(1);
|
||||||
const updateSpeed = (newSpeed) => {
|
const updateSpeed = (newSpeed) => {
|
||||||
setSpeed(newSpeed);
|
setSpeed(newSpeed);
|
||||||
speedChanged.current = true;
|
speedChanged.current = true;
|
||||||
|
|
@ -75,11 +74,12 @@ export const SharedPlanetState = () => {
|
||||||
|
|
||||||
//???????Why when i set the speed to 0 it doesnt immidiatly stop? good enough for know
|
//???????Why when i set the speed to 0 it doesnt immidiatly stop? good enough for know
|
||||||
if (speedChanged.current) {
|
if (speedChanged.current) {
|
||||||
setPosState(oldState.slice(0, posCounter));
|
setPosState(oldState.slice(0, posCounter + 10));
|
||||||
speedChanged.current = true;
|
speedChanged.current = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (posCounter % 250 == 0 || speedChanged.current) {
|
if (oldState.length - posCounter < 1500 || speedChanged.current) {
|
||||||
|
console.log("fetch");
|
||||||
if (oldState.length > 0 && speed > 0) {
|
if (oldState.length > 0 && speed > 0) {
|
||||||
dateTime.current = new Date(
|
dateTime.current = new Date(
|
||||||
oldState[oldState.length - 1].date
|
oldState[oldState.length - 1].date
|
||||||
|
|
@ -92,12 +92,7 @@ export const SharedPlanetState = () => {
|
||||||
`?date=${dateTime.current}&speed=${speed}`
|
`?date=${dateTime.current}&speed=${speed}`
|
||||||
);
|
);
|
||||||
let response = await res.json();
|
let response = await res.json();
|
||||||
//console.log(response);
|
|
||||||
if (true) {
|
|
||||||
setPosState(oldState.concat(response));
|
setPosState(oldState.concat(response));
|
||||||
|
|
||||||
//console.log(dateTime.current);
|
|
||||||
}
|
|
||||||
speedChanged.current = false;
|
speedChanged.current = false;
|
||||||
};
|
};
|
||||||
fetchData();
|
fetchData();
|
||||||
|
|
@ -106,12 +101,8 @@ export const SharedPlanetState = () => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Earth
|
<PlanetOverlayContext.Provider value={{ nameVis, iconVis, speed }}>
|
||||||
speed={speed}
|
<Earth speed={speed} getPosition={getPositions} />
|
||||||
getPosition={getPositions}
|
|
||||||
nameVis={nameVis}
|
|
||||||
iconVis={iconVis}
|
|
||||||
/>
|
|
||||||
<Mars speed={speed} />
|
<Mars speed={speed} />
|
||||||
<Jupiter speed={speed} />
|
<Jupiter speed={speed} />
|
||||||
<Saturn speed={speed} />
|
<Saturn speed={speed} />
|
||||||
|
|
@ -120,6 +111,7 @@ export const SharedPlanetState = () => {
|
||||||
<Neptune speed={speed} />
|
<Neptune speed={speed} />
|
||||||
<Uranus speed={speed} />
|
<Uranus speed={speed} />
|
||||||
<Sun />
|
<Sun />
|
||||||
|
</PlanetOverlayContext.Provider>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -36,68 +36,51 @@ import { PlanetOverlay } from "./planetOverlay";
|
||||||
import { PlanetInfo } from "./planetInfo";
|
import { PlanetInfo } from "./planetInfo";
|
||||||
import { PlanetPath } from "./path";
|
import { PlanetPath } from "./path";
|
||||||
import { MyContext } from "./Scene3";
|
import { MyContext } from "./Scene3";
|
||||||
|
import { PlanetOverlayContext } from "./SharedPlanetState";
|
||||||
|
|
||||||
export const Earth = ({ positions, speed, getPosition, nameVis, iconVis }) => {
|
export const Earth = ({ positions, speed, getPosition }) => {
|
||||||
let distanceScaleFactor = 1000000;
|
let distanceScaleFactor = 1000000;
|
||||||
const [poss, setPos] = useState([]);
|
const [posArr, setPosArr] = useState([]);
|
||||||
const [lineposs, setLinePos] = useState([]);
|
const [lineArr, setLineArr] = useState([]);
|
||||||
const [getAgain, setGetAgain] = useState(false);
|
|
||||||
//const [speed, setSpeed] = useState(60);
|
|
||||||
const line = useRef();
|
const line = useRef();
|
||||||
const clouds = useRef("clouds");
|
const clouds = useRef("clouds");
|
||||||
const earth = useRef();
|
const earth = useRef();
|
||||||
const group = useRef();
|
const group = useRef();
|
||||||
const firstRef = useRef(true);
|
|
||||||
let linePoss = [];
|
|
||||||
const { customData } = useContext(MyContext);
|
const { customData } = useContext(MyContext);
|
||||||
|
|
||||||
|
let planetPositionIndex = useRef(0);
|
||||||
|
|
||||||
useLayoutEffect(() => {
|
useLayoutEffect(() => {
|
||||||
group.current.userData.counter = 0;
|
|
||||||
group.current.userData.name = "Earth";
|
group.current.userData.name = "Earth";
|
||||||
group.current.userData.nearOvOp = 60;
|
group.current.userData.nearOvOp = 60;
|
||||||
group.current.userData.scolor = "lightgreen";
|
group.current.userData.scolor = "lightgreen";
|
||||||
const fetchData = async () => {
|
});
|
||||||
let res = await fetch(
|
|
||||||
`http://127.0.0.1:8000/duration/earth` +
|
|
||||||
`?date=${new Date(Date.now())}&speed=0`
|
|
||||||
);
|
|
||||||
let response = await res.json();
|
|
||||||
if (speed == 0) setPos([response]);
|
|
||||||
};
|
|
||||||
fetchData();
|
|
||||||
const interval = setInterval(() => {
|
|
||||||
fetchData();
|
|
||||||
}, 6000);
|
|
||||||
return () => clearInterval(interval);
|
|
||||||
}, [speed]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
console.log(speed);
|
|
||||||
}, [speed]);
|
|
||||||
|
|
||||||
let currLinePoss = [];
|
|
||||||
|
|
||||||
useFrame(() => {
|
useFrame(() => {
|
||||||
clouds.current.rotation.y += 0.00025;
|
clouds.current.rotation.y += 0.00025;
|
||||||
earth.current.rotation.y += 0.00015;
|
earth.current.rotation.y += 0.00015;
|
||||||
if (speed > 0)
|
getPosition("earth", setPosArr, posArr, planetPositionIndex.current);
|
||||||
getPosition("earth", setPos, poss, group.current.userData.counter);
|
|
||||||
//console.log(poss);
|
//if speed is 0 set the date to current date get from posArr
|
||||||
if (true && group.current.userData.counter < poss.length) {
|
//search for current date in posArr an set planetPositionIndex
|
||||||
|
if (speed == 0) planetPositionIndex.current = 0;
|
||||||
|
if (true && planetPositionIndex.current < posArr.length) {
|
||||||
group.current.position.set(
|
group.current.position.set(
|
||||||
Number(
|
Number(
|
||||||
poss[group.current.userData.counter].position.x / distanceScaleFactor
|
posArr[planetPositionIndex.current].position.x / distanceScaleFactor
|
||||||
),
|
),
|
||||||
Number(
|
Number(
|
||||||
poss[group.current.userData.counter].position.y / distanceScaleFactor
|
posArr[planetPositionIndex.current].position.y / distanceScaleFactor
|
||||||
),
|
),
|
||||||
Number(
|
Number(
|
||||||
poss[group.current.userData.counter].position.z / distanceScaleFactor
|
posArr[planetPositionIndex.current].position.z / distanceScaleFactor
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
//console.log(group.current.userData.counter);
|
planetPositionIndex.current += Number(speed);
|
||||||
group.current.userData.counter++;
|
if (speed > 0) setLineArr(lineArr.concat(group.current.position));
|
||||||
}
|
}
|
||||||
|
console.log(lineArr.length);
|
||||||
|
console.log(posArr.length);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const col = useLoader(TextureLoader, "../img/earth/6k_earth_daymap.jpg");
|
const col = useLoader(TextureLoader, "../img/earth/6k_earth_daymap.jpg");
|
||||||
|
|
@ -118,7 +101,7 @@ export const Earth = ({ positions, speed, getPosition, nameVis, iconVis }) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<group ref={group}>
|
<group ref={group}>
|
||||||
<PlanetOverlay planet={group} nameVis={nameVis} iconVis={iconVis} />
|
<PlanetOverlay planet={group} />
|
||||||
<mesh ref={earth}>
|
<mesh ref={earth}>
|
||||||
<sphereGeometry args={[6371.0 / 6000, 50, 50]} />
|
<sphereGeometry args={[6371.0 / 6000, 50, 50]} />
|
||||||
<meshPhongMaterial
|
<meshPhongMaterial
|
||||||
|
|
|
||||||
|
|
@ -33,9 +33,9 @@ export const ScreenOverlay = () => {
|
||||||
<div className="slidecontainer">
|
<div className="slidecontainer">
|
||||||
<input
|
<input
|
||||||
type="range"
|
type="range"
|
||||||
min="10"
|
min="1"
|
||||||
max="190"
|
max="10"
|
||||||
step="60"
|
step="1"
|
||||||
className="slider"
|
className="slider"
|
||||||
id="myRange"
|
id="myRange"
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
|
|
|
||||||
|
|
@ -26,11 +26,13 @@ import { MyContext } from "./Scene3";
|
||||||
import "./styles.css";
|
import "./styles.css";
|
||||||
|
|
||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
|
import { PlanetOverlayContext } from "./SharedPlanetState";
|
||||||
|
|
||||||
export const PlanetOverlay = ({ planet, nameVis, iconVis }) => {
|
export const PlanetOverlay = ({ planet }) => {
|
||||||
const ref = useRef();
|
const ref = useRef();
|
||||||
let [opacity, setOpacity] = useState(0);
|
let [opacity, setOpacity] = useState(0);
|
||||||
let [minDistance, setMinDistance] = useState(0);
|
let [minDistance, setMinDistance] = useState(0);
|
||||||
|
const { nameVis, iconVis } = useContext(PlanetOverlayContext);
|
||||||
|
|
||||||
let [scolor, setSColor] = useState("white");
|
let [scolor, setSColor] = useState("white");
|
||||||
let [follow, setFollow] = useState(false);
|
let [follow, setFollow] = useState(false);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue