|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
-
-
- // // // //
-
-
- СообщитьТекущееЗначениеМасштаба = мир =>
- {
- UIkit.notification({
- message: "🔍 " + мир.масштаб,
- //status: 'primary',
- //pos: 'top-right',
- timeout: 500
- });
- };
-
-
- // // // //
-
-
- УменьшитьМасштаб = мир =>
- {
- мир.масштаб -= 0.5;
- if (мир.масштаб < 1)
- {
- мир.масштаб = 1;
- }
- мир.уведомить("изменили масштаб");
- };
-
-
- // // // //
-
-
- УвеличитьМасштаб = мир =>
- {
- мир.масштаб += 0.5;
- мир.уведомить("изменили масштаб");
- };
-
-
- // // // //
-
-
- ИзменитьРазмерОтрисовщикаThreeJS = мир =>
- {
- console.debug("масштаб:", мир.масштаб);
-
- var ширина = window.innerWidth * мир.масштаб;
- var высота = window.innerHeight * мир.масштаб;
- мир.камера.aspect = ширина / высота;
- мир.камера.updateProjectionMatrix();
- мир.отрисовщик.setSize(ширина, высота);
-
- var размер = мир.масштаб * 100;
- мир.канва.style = `
- max-width: ${размер}%;
- max-height: ${размер}%;
- width: ${размер}%;
- height: ${размер}%;
- `;
- };
-
-
- // // // //
-
-
- ЗадатьОтладочныйМасштаб = мир =>
- {
- мир.масштаб = 3;
- мир.уведомить("изменили масштаб");
- };
-
-
- // // // //
-
-
- ИсправитьОтслеживаниеНажатийНаIOS = мир =>
- {
- // https://stackoverflow.com/a/31459240/3404710
- мир.отрисовщик.domElement.style.cursor = "pointer";
- };
-
-
- // // // //
-
-
- ОтслеживатьНажатияПальцем = мир =>
- {
- window.addEventListener(
- "touchstart",
- function(событие) {
- сообщитьОНажатии(мир, событие.touches[0]);
- }
- );
- };
-
-
- // // // //
-
-
- ОтслеживатьНажатияМышью = мир =>
- {
- window.addEventListener(
- "click",
- function(событие) {
- сообщитьОНажатии(мир, событие);
- }
- );
- };
-
-
- // // // //
-
-
- ЦентрироватьСцену = мир =>
- {
- var мин = {
- "x": 0,
- "z": 0,
- };
- var макс = {
- "x": 0,
- "z": 0,
- };
- for (var номер in мир.фишки)
- {
- const фишка = мир.фишки[номер];
- if (фишка.position.x < мин.x)
- {
- мин.x = фишка.position.x;
- }
- if (фишка.position.x > макс.x)
- {
- макс.x = фишка.position.x;
- }
- if (фишка.position.z < мин.z)
- {
- мин.z = фишка.position.z;
- }
- if (фишка.position.z > макс.z)
- {
- макс.z = фишка.position.z;
- }
- }
- мир.корень.position.x -= (макс.x - мин.x) / 2;
- мир.корень.position.z -= (макс.z - мин.z) / 2;
- };
-
-
- // // // //
-
-
- СоздатьФишкиВСцене = мир =>
- {
- мир.уведомить("надо создать фишки в сцене");
- };
-
-
- // // // //
-
-
- ЗагрузитьРесурсыСцены = мир =>
- {
- мир.уведомить("надо загрузить ресурсы сцены");
- };
-
-
- // // // //
-
-
- ПодготовитьСцену = мир =>
- {
- var коэффициент = 2;
- var расстояние = 14;
- мир.камера.position.y = расстояние * коэффициент;
- мир.камера.position.z = расстояние;
- мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
-
- мир.свет = new THREE.DirectionalLight(0xffffff, 1);
- мир.свет.position.set(-0.5, 1, 0.5).normalize();
- мир.сцена.add(мир.свет);
-
- мир.корень = new THREE.Group();
- мир.сцена.add(мир.корень);
- };
-
-
- // // // //
-
-
- СоздатьЗагрузчикТекстур = мир =>
- {
- мир.загрузчикТекстур = new THREE.TextureLoader();
- };
-
-
- // // // //
-
-
- СоздатьЗагрузчикGLTF = мир =>
- {
- мир.загрузчикGLTF = new THREE.GLTFLoader();
- };
-
-
- // // // //
-
- /*
- ВстроитьОтрисовщикаThreeJS = мир =>
- {
- // Задать вид.
- var css = `
- html, body {
- margin: 0;
- }
- `;
- var вид = document.createElement("style");
- вид.innerHTML = css;
- document.head.appendChild(вид);
- document.body.appendChild(мир.отрисовщик.domElement);
- };
- */
-
- // // // //
-
-
- НастроитьThreeJS = мир =>
- {
- мир.сцена = new THREE.Scene();
- мир.сцена.background = new THREE.Color(0xFFFFFF);
- мир.камера = new THREE.PerspectiveCamera(45, 1, 0.1, 1000);
- мир.ловецНажатий = new THREE.Raycaster();
- мир.отрисовщик = new THREE.WebGLRenderer({canvas: мир.канва, antialias: true});
- };
-
-
- // // // //
-
-
- СоздатьКанвуThreeJS = мир =>
- {
- мир.канва = document.createElement("canvas");
- мир.канва.id = "канва-threejs";
- мир.канва.style = `
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- `;
- var первый = document.body.firstChild;
- if (первый)
- {
- document.body.insertBefore(мир.канва, первый);
- }
- else
- {
- document.body.appendChild(мир.канва);
- }
- };
-
-
- // // // //
-
-
- СоздатьМасштаб = мир =>
- {
- мир.масштаб = 1;
- };
-
|