awacke1 commited on
Commit
1d3b6f2
·
verified ·
1 Parent(s): 49f7fb7

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +41 -25
index.html CHANGED
@@ -24,7 +24,7 @@
24
  scene = new THREE.Scene();
25
  // Orthographic camera for top-down view
26
  const aspect = window.innerWidth / window.innerHeight;
27
- const viewSize = plotWidth * 0.6;
28
  camera = new THREE.OrthographicCamera(
29
  -viewSize * aspect, viewSize * aspect,
30
  viewSize, -viewSize,
@@ -37,10 +37,18 @@
37
  renderer.setSize(window.innerWidth, window.innerHeight);
38
  document.body.appendChild(renderer.domElement);
39
 
 
 
 
 
 
 
 
40
  const groundGeometry = new THREE.PlaneGeometry(plotWidth, plotDepth);
41
- const groundMaterial = new THREE.MeshBasicMaterial({ color: 0x888888 });
42
  const ground = new THREE.Mesh(groundGeometry, groundMaterial);
43
  ground.rotation.x = -Math.PI / 2;
 
44
  scene.add(ground);
45
 
46
  const gridHelper = new THREE.GridHelper(plotWidth, plotWidth / 2);
@@ -66,6 +74,7 @@
66
  websocket.onopen = () => console.log('WebSocket connected');
67
  websocket.onmessage = (event) => {
68
  const data = JSON.parse(event.data);
 
69
  if (data.type === 'initial_state' || data.type === 'object_placed') {
70
  const objects = data.type === 'initial_state' ? data.payload : { [data.payload.object_data.obj_id]: data.payload.object_data };
71
  for (let obj_id in objects) {
@@ -93,89 +102,91 @@
93
  }
94
 
95
  function addObjectToScene(objData) {
 
96
  let geometry, material, mesh;
97
  switch (objData.type) {
98
  case 'Cube':
99
  geometry = new THREE.BoxGeometry(1, 1, 1);
100
- material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
101
  break;
102
  case 'Sphere':
103
  geometry = new THREE.SphereGeometry(0.5, 32, 32);
104
- material = new THREE.MeshBasicMaterial({ color: 0xff0000 });
105
  break;
106
  case 'Cylinder':
107
  geometry = new THREE.CylinderGeometry(0.5, 0.5, 1, 32);
108
- material = new THREE.MeshBasicMaterial({ color: 0x0000ff });
109
  break;
110
  case 'Cone':
111
  geometry = new THREE.ConeGeometry(0.5, 1, 32);
112
- material = new THREE.MeshBasicMaterial({ color: 0xffff00 });
113
  break;
114
  case 'Torus':
115
  geometry = new THREE.TorusGeometry(0.4, 0.1, 16, 100);
116
- material = new THREE.MeshBasicMaterial({ color: 0xff00ff });
117
  break;
118
  case 'Tree':
119
  geometry = new THREE.ConeGeometry(0.5, 2, 8);
120
- material = new THREE.MeshBasicMaterial({ color: 0x228B22 });
121
  break;
122
  case 'Rock':
123
  geometry = new THREE.DodecahedronGeometry(0.5);
124
- material = new THREE.MeshBasicMaterial({ color: 0x808080 });
125
  break;
126
  case 'Simple House':
127
  geometry = new THREE.BoxGeometry(2, 1.5, 2);
128
- material = new THREE.MeshBasicMaterial({ color: 0xA52A2A });
129
  break;
130
  case 'Pine Tree':
131
  geometry = new THREE.ConeGeometry(0.3, 1.5, 8);
132
- material = new THREE.MeshBasicMaterial({ color: 0x006400 });
133
  break;
134
  case 'Brick Wall':
135
  geometry = new THREE.BoxGeometry(3, 1, 0.2);
136
- material = new THREE.MeshBasicMaterial({ color: 0x8B4513 });
137
  break;
138
  case 'Mushroom':
139
  geometry = new THREE.SphereGeometry(0.5, 32, 16, 0, Math.PI);
140
- material = new THREE.MeshBasicMaterial({ color: 0xF5F5DC });
141
  break;
142
  case 'Cactus':
143
  geometry = new THREE.CylinderGeometry(0.2, 0.2, 1.5, 8);
144
- material = new THREE.MeshBasicMaterial({ color: 0x2E8B57 });
145
  break;
146
  case 'Campfire':
147
  geometry = new THREE.DodecahedronGeometry(0.3);
148
- material = new THREE.MeshBasicMaterial({ color: 0xFF4500 });
149
  break;
150
  case 'Star':
151
  geometry = new THREE.SphereGeometry(0.3, 4, 2);
152
- material = new THREE.MeshBasicMaterial({ color: 0xFFFF00 });
153
  break;
154
  case 'Gem':
155
  geometry = new THREE.OctahedronGeometry(0.4);
156
- material = new THREE.MeshBasicMaterial({ color: 0x00CED1 });
157
  break;
158
  case 'Tower':
159
  geometry = new THREE.CylinderGeometry(0.3, 0.5, 2, 8);
160
- material = new THREE.MeshBasicMaterial({ color: 0x708090 });
161
  break;
162
  case 'Barrier':
163
  geometry = new THREE.BoxGeometry(2, 0.5, 0.2);
164
- material = new THREE.MeshBasicMaterial({ color: 0x696969 });
165
  break;
166
  case 'Fountain':
167
  geometry = new THREE.CylinderGeometry(0.5, 0.3, 1, 32);
168
- material = new THREE.MeshBasicMaterial({ color: 0x4682B4 });
169
  break;
170
  case 'Lantern':
171
  geometry = new THREE.BoxGeometry(0.3, 0.5, 0.3);
172
- material = new THREE.MeshBasicMaterial({ color: 0xFFD700 });
173
  break;
174
  case 'Sign Post':
175
  geometry = new THREE.BoxGeometry(0.2, 1, 0.2);
176
- material = new THREE.MeshBasicMaterial({ color: 0x8B4513 });
177
  break;
178
  default:
 
179
  return;
180
  }
181
  mesh = new THREE.Mesh(geometry, material);
@@ -183,12 +194,14 @@
183
  mesh.rotation.set(objData.rotation.x, objData.rotation.y, objData.rotation.z);
184
  mesh.name = objData.obj_id;
185
  scene.add(mesh);
 
186
  }
187
 
188
  function removeObjectFromScene(obj_id) {
189
  const object = scene.getObjectByName(obj_id);
190
  if (object) {
191
  scene.remove(object);
 
192
  }
193
  }
194
 
@@ -204,16 +217,18 @@
204
 
205
  if (event.button === 0 && selectedObjectType !== 'None') {
206
  for (let intersect of intersects) {
207
- if (intersect.object.name === '') { // Ground plane
208
  const position = intersect.point;
209
- position.y = 0.5; // Adjust height above ground
 
210
  placeObject(position);
211
  break;
212
  }
213
  }
214
  } else if (event.button === 2) {
215
  for (let intersect of intersects) {
216
- if (intersect.object.name && intersect.object.name !== '') {
 
217
  websocket.send(JSON.stringify({
218
  type: 'delete_object',
219
  payload: { obj_id: intersect.object.name, username }
@@ -233,6 +248,7 @@
233
  position: { x: position.x, y: position.y, z: position.z },
234
  rotation: { x: 0, y: 0, z: 0 }
235
  };
 
236
  websocket.send(JSON.stringify({
237
  type: 'place_object',
238
  payload: { username, object_data: objectData }
 
24
  scene = new THREE.Scene();
25
  // Orthographic camera for top-down view
26
  const aspect = window.innerWidth / window.innerHeight;
27
+ const viewSize = plotWidth / 2; // Half of plotWidth for centered view
28
  camera = new THREE.OrthographicCamera(
29
  -viewSize * aspect, viewSize * aspect,
30
  viewSize, -viewSize,
 
37
  renderer.setSize(window.innerWidth, window.innerHeight);
38
  document.body.appendChild(renderer.domElement);
39
 
40
+ // Add lighting
41
+ const ambientLight = new THREE.AmbientLight(0x404040);
42
+ scene.add(ambientLight);
43
+ const directionalLight = new THREE.DirectionalLight(0xffffff, 0.5);
44
+ directionalLight.position.set(0, 10, 0);
45
+ scene.add(directionalLight);
46
+
47
  const groundGeometry = new THREE.PlaneGeometry(plotWidth, plotDepth);
48
+ const groundMaterial = new THREE.MeshLambertMaterial({ color: 0x888888 });
49
  const ground = new THREE.Mesh(groundGeometry, groundMaterial);
50
  ground.rotation.x = -Math.PI / 2;
51
+ ground.name = 'ground';
52
  scene.add(ground);
53
 
54
  const gridHelper = new THREE.GridHelper(plotWidth, plotWidth / 2);
 
74
  websocket.onopen = () => console.log('WebSocket connected');
75
  websocket.onmessage = (event) => {
76
  const data = JSON.parse(event.data);
77
+ console.log('Received message:', data);
78
  if (data.type === 'initial_state' || data.type === 'object_placed') {
79
  const objects = data.type === 'initial_state' ? data.payload : { [data.payload.object_data.obj_id]: data.payload.object_data };
80
  for (let obj_id in objects) {
 
102
  }
103
 
104
  function addObjectToScene(objData) {
105
+ console.log('Adding object:', objData);
106
  let geometry, material, mesh;
107
  switch (objData.type) {
108
  case 'Cube':
109
  geometry = new THREE.BoxGeometry(1, 1, 1);
110
+ material = new THREE.MeshLambertMaterial({ color: 0x00ff00 });
111
  break;
112
  case 'Sphere':
113
  geometry = new THREE.SphereGeometry(0.5, 32, 32);
114
+ material = new THREE.MeshLambertMaterial({ color: 0xff0000 });
115
  break;
116
  case 'Cylinder':
117
  geometry = new THREE.CylinderGeometry(0.5, 0.5, 1, 32);
118
+ material = new THREE.MeshLambertMaterial({ color: 0x0000ff });
119
  break;
120
  case 'Cone':
121
  geometry = new THREE.ConeGeometry(0.5, 1, 32);
122
+ material = new THREE.MeshLambertMaterial({ color: 0xffff00 });
123
  break;
124
  case 'Torus':
125
  geometry = new THREE.TorusGeometry(0.4, 0.1, 16, 100);
126
+ material = new THREE.MeshLambertMaterial({ color: 0xff00ff });
127
  break;
128
  case 'Tree':
129
  geometry = new THREE.ConeGeometry(0.5, 2, 8);
130
+ material = new THREE.MeshLambertMaterial({ color: 0x228B22 });
131
  break;
132
  case 'Rock':
133
  geometry = new THREE.DodecahedronGeometry(0.5);
134
+ material = new THREE.MeshLambertMaterial({ color: 0x808080 });
135
  break;
136
  case 'Simple House':
137
  geometry = new THREE.BoxGeometry(2, 1.5, 2);
138
+ material = new THREE.MeshLambertMaterial({ color: 0xA52A2A });
139
  break;
140
  case 'Pine Tree':
141
  geometry = new THREE.ConeGeometry(0.3, 1.5, 8);
142
+ material = new THREE.MeshLambertMaterial({ color: 0x006400 });
143
  break;
144
  case 'Brick Wall':
145
  geometry = new THREE.BoxGeometry(3, 1, 0.2);
146
+ material = new THREE.MeshLambertMaterial({ color: 0x8B4513 });
147
  break;
148
  case 'Mushroom':
149
  geometry = new THREE.SphereGeometry(0.5, 32, 16, 0, Math.PI);
150
+ material = new THREE.MeshLambertMaterial({ color: 0xF5F5DC });
151
  break;
152
  case 'Cactus':
153
  geometry = new THREE.CylinderGeometry(0.2, 0.2, 1.5, 8);
154
+ material = new THREE.MeshLambertMaterial({ color: 0x2E8B57 });
155
  break;
156
  case 'Campfire':
157
  geometry = new THREE.DodecahedronGeometry(0.3);
158
+ material = new THREE.MeshLambertMaterial({ color: 0xFF4500 });
159
  break;
160
  case 'Star':
161
  geometry = new THREE.SphereGeometry(0.3, 4, 2);
162
+ material = new THREE.MeshLambertMaterial({ color: 0xFFFF00 });
163
  break;
164
  case 'Gem':
165
  geometry = new THREE.OctahedronGeometry(0.4);
166
+ material = new THREE.MeshLambertMaterial({ color: 0x00CED1 });
167
  break;
168
  case 'Tower':
169
  geometry = new THREE.CylinderGeometry(0.3, 0.5, 2, 8);
170
+ material = new THREE.MeshLambertMaterial({ color: 0x708090 });
171
  break;
172
  case 'Barrier':
173
  geometry = new THREE.BoxGeometry(2, 0.5, 0.2);
174
+ material = new THREE.MeshLambertMaterial({ color: 0x696969 });
175
  break;
176
  case 'Fountain':
177
  geometry = new THREE.CylinderGeometry(0.5, 0.3, 1, 32);
178
+ material = new THREE.MeshLambertMaterial({ color: 0x4682B4 });
179
  break;
180
  case 'Lantern':
181
  geometry = new THREE.BoxGeometry(0.3, 0.5, 0.3);
182
+ material = new THREE.MeshLambertMaterial({ color: 0xFFD700 });
183
  break;
184
  case 'Sign Post':
185
  geometry = new THREE.BoxGeometry(0.2, 1, 0.2);
186
+ material = new THREE.MeshLambertMaterial({ color: 0x8B4513 });
187
  break;
188
  default:
189
+ console.warn('Unknown object type:', objData.type);
190
  return;
191
  }
192
  mesh = new THREE.Mesh(geometry, material);
 
194
  mesh.rotation.set(objData.rotation.x, objData.rotation.y, objData.rotation.z);
195
  mesh.name = objData.obj_id;
196
  scene.add(mesh);
197
+ console.log('Object added to scene:', objData.obj_id);
198
  }
199
 
200
  function removeObjectFromScene(obj_id) {
201
  const object = scene.getObjectByName(obj_id);
202
  if (object) {
203
  scene.remove(object);
204
+ console.log('Object removed:', obj_id);
205
  }
206
  }
207
 
 
217
 
218
  if (event.button === 0 && selectedObjectType !== 'None') {
219
  for (let intersect of intersects) {
220
+ if (intersect.object.name === 'ground') {
221
  const position = intersect.point;
222
+ position.y = 0.5; // Place above ground
223
+ console.log('Placing object at:', position);
224
  placeObject(position);
225
  break;
226
  }
227
  }
228
  } else if (event.button === 2) {
229
  for (let intersect of intersects) {
230
+ if (intersect.object.name && intersect.object.name !== 'ground') {
231
+ console.log('Deleting object:', intersect.object.name);
232
  websocket.send(JSON.stringify({
233
  type: 'delete_object',
234
  payload: { obj_id: intersect.object.name, username }
 
248
  position: { x: position.x, y: position.y, z: position.z },
249
  rotation: { x: 0, y: 0, z: 0 }
250
  };
251
+ console.log('Sending place_object:', objectData);
252
  websocket.send(JSON.stringify({
253
  type: 'place_object',
254
  payload: { username, object_data: objectData }