1 | 'use strict';
|
2 |
|
3 | import FluxCameras from '../src/FluxCameras.js';
|
4 | import CameraControls from '../src/controls/CameraControls.js';
|
5 | import * as THREE from 'three';
|
6 |
|
7 | export function initCameras(t) {
|
8 | var cameras = new FluxCameras();
|
9 | t.equal(cameras._view, FluxCameras.VIEWS.perspective, 'Default view should be perspective');
|
10 | t.ok(cameras.getCamera(), 'Camera should be set');
|
11 | t.end();
|
12 | }
|
13 |
|
14 |
|
15 | export function serializeCameras(t) {
|
16 | var cameras = new FluxCameras();
|
17 | var cameraJson = JSON.stringify(cameras.toJSON());
|
18 | var keywords = ['perspective','orthographic','px','py','pz','rx','ry','rz','near','far'];
|
19 | for (var i=0;i<keywords.length;i++) {
|
20 | t.ok(cameraJson.indexOf(keywords[i])!==-1, 'JSON should contain '+keywords[i]);
|
21 | }
|
22 |
|
23 | var cameraStates = JSON.parse(cameraJson);
|
24 | cameraStates.perspective.px = 5;
|
25 | cameras.fromJSON(cameraStates);
|
26 | t.equal(cameras._perspCamera.position.x, 5, 'Deserialize should set values on cameras');
|
27 | t.end();
|
28 | }
|
29 |
|
30 | export function testCameraFocus(t) {
|
31 | var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
|
32 | camera.position.set(25, 100, 130);
|
33 |
|
34 | var geometry = new THREE.SphereBufferGeometry( 5000, 32, 32 );
|
35 | var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
|
36 | var sphere = new THREE.Mesh( geometry, material );
|
37 | sphere.position.set(25, 10000, 130);
|
38 |
|
39 | var domElement = document.createElement();
|
40 | var controls = new CameraControls(camera, null, domElement);
|
41 | controls.focus(sphere);
|
42 | t.ok(camera.position.y > 0, 'Camera stays above ground');
|
43 |
|
44 |
|
45 | document.listeners.mousedown(_eventFactory(5,5,1));
|
46 | document.listeners.mousemove(_eventFactory(50,50,1));
|
47 | document.listeners.mouseup(_eventFactory(50,50,1));
|
48 | var x = camera.position.x;
|
49 | var y = camera.position.y;
|
50 | var z = camera.position.z;
|
51 | controls.focus(sphere);
|
52 |
|
53 | t.ok(camera.position.x !== x, 'Camera x moves');
|
54 | t.ok(camera.position.y !== y, 'Camera y moves');
|
55 | t.ok(camera.position.z !== z, 'Camera z moves');
|
56 | t.end();
|
57 | }
|
58 |
|
59 |
|
60 | function _eventFactory(x, y, button) {
|
61 | return {
|
62 | button: button,
|
63 | target: {
|
64 | getBoundingClientRect: function () {
|
65 | return {
|
66 | left: 0,
|
67 | top: 0,
|
68 | width:100,
|
69 | height:100
|
70 | };
|
71 | }
|
72 | },
|
73 | preventDefault: function () {},
|
74 | pageX: x,
|
75 | pageY: y
|
76 | };
|
77 | }
|
78 |
|
79 |
|
80 | function _touch(event) {
|
81 | event.touches = [{pageX: event.pageX, pageY: event.pageY, target: event.target}];
|
82 | return event;
|
83 | }
|
84 |
|
85 | export function testCameraRotate(t) {
|
86 | var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
|
87 | camera.position.set(25, 100, 130);
|
88 | var domElement = document.createElement();
|
89 | var x = camera.position.x;
|
90 | var y = camera.position.y;
|
91 | var z = camera.position.z;
|
92 | new CameraControls(camera, null, domElement);
|
93 | document.listeners.mousedown(_eventFactory(5,5,0));
|
94 | document.listeners.mousemove(_eventFactory(50,50,0));
|
95 | document.listeners.mouseup(_eventFactory(50,50,0));
|
96 | t.ok(camera.position.x !== x, 'Camera x moves');
|
97 | t.ok(camera.position.y !== y, 'Camera y moves');
|
98 | t.ok(camera.position.z !== z, 'Camera z moves');
|
99 | t.end();
|
100 | }
|
101 |
|
102 | export function testCameraTouchRotate(t) {
|
103 | var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
|
104 | camera.position.set(25, 100, 130);
|
105 | var domElement = document.createElement();
|
106 | var x = camera.position.x;
|
107 | var y = camera.position.y;
|
108 | var z = camera.position.z;
|
109 | new CameraControls(camera, null, domElement);
|
110 | document.listeners.touchstart(_touch(_eventFactory(5,5,0)));
|
111 | document.listeners.touchmove(_touch(_eventFactory(50,50,0)));
|
112 | document.listeners.touchend(_touch(_eventFactory(50,50,0)));
|
113 | t.ok(camera.position.x !== x, 'Camera x moves');
|
114 | t.ok(camera.position.y !== y, 'Camera y moves');
|
115 | t.ok(camera.position.z !== z, 'Camera z moves');
|
116 | t.end();
|
117 | }
|
118 |
|
119 | export function testCameraZoom(t) {
|
120 | var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
|
121 | camera.position.set(25, 100, 130);
|
122 | var domElement = document.createElement();
|
123 | var x = camera.position.x;
|
124 | var y = camera.position.y;
|
125 | var z = camera.position.z;
|
126 | new CameraControls(camera, null, domElement);
|
127 | document.listeners.mousedown(_eventFactory(5,5,1));
|
128 | document.listeners.mousemove(_eventFactory(50,50,1));
|
129 | document.listeners.mouseup(_eventFactory(50,50,1));
|
130 | t.ok(camera.position.x === x, 'Camera x stays the same');
|
131 | t.ok(camera.position.y === y, 'Camera y stays the same');
|
132 | t.ok(camera.position.z !== z, 'Camera z moves');
|
133 | t.end();
|
134 | }
|
135 |
|
136 | export function testCameraPan(t) {
|
137 | var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
|
138 | camera.position.set(25, 100, 130);
|
139 | var domElement = document.createElement();
|
140 | var x = camera.position.x;
|
141 | var y = camera.position.y;
|
142 | var z = camera.position.z;
|
143 | new CameraControls(camera, null, domElement);
|
144 | document.listeners.mousedown(_eventFactory(5,5,2));
|
145 | document.listeners.mousemove(_eventFactory(50,50,2));
|
146 | document.listeners.mouseup(_eventFactory(50,50,2));
|
147 | t.ok(camera.position.x !== x, 'Camera x moves');
|
148 | t.ok(camera.position.y !== y, 'Camera y moves');
|
149 | t.ok(camera.position.z === z, 'Camera z stays the same');
|
150 | t.end();
|
151 | }
|
152 |
|
153 | export function testCameraDeactivate(t) {
|
154 | var camera = new THREE.PerspectiveCamera(30, 1.33, 0.1, 100000);
|
155 | camera.position.set(25, 100, 130);
|
156 | var domElement = document.createElement();
|
157 | var x = camera.position.x;
|
158 | var z = camera.position.z;
|
159 | var controls = new CameraControls(camera, null, domElement);
|
160 | controls.deactivate();
|
161 | document.listeners.mousedown(_eventFactory(5,5,2));
|
162 | t.ok(!document.listeners.mousemove, 'Dynamic listeners not added');
|
163 | t.ok(camera.position.x === x, 'Camera x stays the same');
|
164 | t.ok(camera.position.z === z, 'Camera z stays the same');
|
165 | t.end();
|
166 | }
|