awacke1 commited on
Commit
e961569
·
verified ·
1 Parent(s): 0c24f90

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -64
app.py CHANGED
@@ -10,6 +10,9 @@ def load_aframe_and_extras():
10
  <script>
11
  let score = 0;
12
  let selectedEntity = null;
 
 
 
13
 
14
  AFRAME.registerComponent('draggable', {
15
  init: function () {
@@ -67,46 +70,40 @@ def load_aframe_and_extras():
67
  var rig = document.querySelector('#rig');
68
  var gw = 8, gh = 8;
69
  var center = {x: 0, y: 0, z: 0};
70
- var height = Math.max(gw, gh) * 1.5; // y=12, high enough to see models
71
- var distance = Math.max(gw, gh) * 2; // x/z distance=16, far enough to fit the tilemap
 
72
  var pos, rot;
73
 
 
 
74
  switch(view) {
75
- case 'top':
76
  pos = {x: center.x, y: height, z: center.z};
77
- rot = {x: -90, y: 0, z: 0};
78
  break;
79
  case 'left':
80
- pos = {x: -distance, y: height, z: center.z};
81
- rot = {x: 0, y: 90, z: 0}; // Face right (towards center), y-axis up
82
  break;
83
  case 'right':
84
- pos = {x: distance, y: height, z: center.z};
85
- rot = {x: 0, y: -90, z: 0}; // Face left (towards center), y-axis up
86
  break;
87
  case 'front':
88
- pos = {x: center.x, y: height, z: -distance};
89
- rot = {x: 0, y: 0, z: 0}; // Face forward (towards center), y-axis up
90
  break;
91
  case 'back':
92
- pos = {x: center.x, y: height, z: distance};
93
- rot = {x: 0, y: 180, z: 0}; // Face backward (towards center), y-axis up
94
  break;
95
  case 'angle1':
96
- pos = {x: -distance, y: height, z: -distance};
97
- rot = {x: 0, y: 45, z: 0}; // Face towards center from top-left corner
98
  break;
99
  case 'angle2':
100
- pos = {x: distance, y: height, z: -distance};
101
- rot = {x: 0, y: -45, z: 0}; // Face towards center from top-right corner
102
  break;
103
  case 'angle3':
104
- pos = {x: -distance, y: height, z: distance};
105
- rot = {x: 0, y: 135, z: 0}; // Face towards center from bottom-left corner
106
  break;
107
  case 'angle4':
108
- pos = {x: distance, y: height, z: distance};
109
- rot = {x: 0, y: -135, z: 0}; // Face towards center from bottom-right corner
110
  break;
111
  }
112
  rig.setAttribute('position', pos);
@@ -115,45 +112,45 @@ def load_aframe_and_extras():
115
 
116
  function flyCamera(action) {
117
  var rig = document.querySelector('#rig');
118
- var pos = rig.getAttribute('position');
119
  var rot = rig.getAttribute('rotation');
120
- var speed = 0.1, rSpeed = 2;
121
 
122
  switch(action) {
123
  case 'forward':
124
- var dir = new THREE.Vector3(0, 0, -1);
125
- dir.applyQuaternion(rig.object3D.quaternion);
126
- pos.x += dir.x * speed;
127
- pos.y += dir.y * speed;
128
- pos.z += dir.z * speed;
129
  break;
130
  case 'backward':
131
- var dir = new THREE.Vector3(0, 0, 1);
132
- dir.applyQuaternion(rig.object3D.quaternion);
133
- pos.x += dir.x * speed;
134
- pos.y += dir.y * speed;
135
- pos.z += dir.z * speed;
136
  break;
137
- case 'panLeft':
138
- rot.y += rSpeed;
139
  break;
140
- case 'panRight':
141
- rot.y -= rSpeed;
142
  break;
143
- case 'rotateLeft':
144
- rot.y += rSpeed;
145
- break;
146
- case 'rotateRight':
147
- rot.y -= rSpeed;
148
  break;
149
  case 'reset':
150
- moveCamera('top');
 
151
  return;
152
  }
153
- rig.setAttribute('position', pos);
154
  rig.setAttribute('rotation', rot);
155
  }
156
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  function fireRaycast() {
158
  var cam = document.querySelector('[camera]');
159
  var dir = new THREE.Vector3(); cam.object3D.getWorldDirection(dir);
@@ -173,7 +170,7 @@ def load_aframe_and_extras():
173
 
174
  document.addEventListener('keydown', e => {
175
  switch(e.key.toLowerCase()){
176
- case '1': moveCamera('top'); break;
177
  case '2': moveCamera('left'); break;
178
  case '3': moveCamera('right'); break;
179
  case '4': moveCamera('front'); break;
@@ -184,11 +181,9 @@ def load_aframe_and_extras():
184
  case '9': moveCamera('angle4'); break;
185
  case 'w': flyCamera('forward'); break;
186
  case 'x': flyCamera('backward'); break;
187
- case 'a': flyCamera('panLeft'); break;
188
- case 'd': flyCamera('panRight'); break;
189
- case 'q': flyCamera('rotateLeft'); break;
190
- case 'e': flyCamera('rotateRight'); break;
191
- case 's': flyCamera('reset'); break;
192
  case ' ': fireRaycast(); break;
193
  }
194
  });
@@ -266,7 +261,7 @@ def main():
266
  st.markdown("### 🧭 Camera Views")
267
  st.markdown("**Select View** 📷")
268
  cols = st.columns(3)
269
- cols[0].button("🔝 Top", on_click=lambda: st.session_state.update({'camera_view': 'top'}))
270
  cols[1].button("⬅️ Left", on_click=lambda: st.session_state.update({'camera_view': 'left'}))
271
  cols[2].button("➡️ Right", on_click=lambda: st.session_state.update({'camera_view': 'right'}))
272
  cols = st.columns(3)
@@ -278,19 +273,6 @@ def main():
278
  cols[1].button("↙️ Angle 3", on_click=lambda: st.session_state.update({'camera_view': 'angle3'}))
279
  cols[2].button("↘️ Angle 4", on_click=lambda: st.session_state.update({'camera_view': 'angle4'}))
280
 
281
- st.markdown("### ✈️ Flight Controls")
282
- st.markdown("**Fly Camera** 🎮")
283
- cols = st.columns(3)
284
- cols[0].button("Q Rotate Left", on_click=lambda: st.session_state.update({'fly_action': 'rotateLeft'}))
285
- cols[1].button("W Forward", on_click=lambda: st.session_state.update({'fly_action': 'forward'}))
286
- cols[2].button("E Rotate Right", on_click=lambda: st.session_state.update({'fly_action': 'rotateRight'}))
287
- cols = st.columns(3)
288
- cols[0].button("A Pan Left", on_click=lambda: st.session_state.update({'fly_action': 'panLeft'}))
289
- cols[1].button("S Reset", on_click=lambda: st.session_state.update({'fly_action': 'reset'}))
290
- cols[2].button("D Pan Right", on_click=lambda: st.session_state.update({'fly_action': 'panRight'}))
291
- cols = st.columns(1)
292
- cols[0].button("X Backward", on_click=lambda: st.session_state.update({'fly_action': 'backward'}))
293
-
294
  st.markdown("### ➕ Add Media Files")
295
  ups = st.file_uploader("Add files (png, jpeg, obj, glb, mp4, etc.):", accept_multiple_files=True)
296
  st.markdown("### 📋 Uploaded Model Files")
@@ -341,7 +323,7 @@ def main():
341
  assets, ents = generate_tilemap(files, directory, 8, 8)
342
  scene += assets + ents + "</a-scene>"
343
 
344
- view_cmd = st.session_state.get('camera_view', 'top')
345
  if view_cmd:
346
  scene += f"<script>moveCamera('{view_cmd}');</script>"
347
  st.session_state.pop('camera_view', None)
 
10
  <script>
11
  let score = 0;
12
  let selectedEntity = null;
13
+ let velocity = {x: 0, y: 0, z: 0};
14
+ let maxSpeed = 0.5;
15
+ let accel = 0.02;
16
 
17
  AFRAME.registerComponent('draggable', {
18
  init: function () {
 
70
  var rig = document.querySelector('#rig');
71
  var gw = 8, gh = 8;
72
  var center = {x: 0, y: 0, z: 0};
73
+ var height = Math.max(gw, gh) * 1.5; // y=12 for center view
74
+ var lowHeight = height / 2; // y=6 for closer views
75
+ var offset = Math.max(gw, gh); // x/z offset=8 to position at the edge
76
  var pos, rot;
77
 
78
+ rot = {x: -90, y: 0, z: 0}; // Always top-down view
79
+
80
  switch(view) {
81
+ case 'center':
82
  pos = {x: center.x, y: height, z: center.z};
 
83
  break;
84
  case 'left':
85
+ pos = {x: -offset, y: lowHeight, z: center.z};
 
86
  break;
87
  case 'right':
88
+ pos = {x: offset, y: lowHeight, z: center.z};
 
89
  break;
90
  case 'front':
91
+ pos = {x: center.x, y: lowHeight, z: -offset};
 
92
  break;
93
  case 'back':
94
+ pos = {x: center.x, y: lowHeight, z: offset};
 
95
  break;
96
  case 'angle1':
97
+ pos = {x: -offset, y: lowHeight, z: -offset};
 
98
  break;
99
  case 'angle2':
100
+ pos = {x: offset, y: lowHeight, z: -offset};
 
101
  break;
102
  case 'angle3':
103
+ pos = {x: -offset, y: lowHeight, z: offset};
 
104
  break;
105
  case 'angle4':
106
+ pos = {x: offset, y: lowHeight, z: offset};
 
107
  break;
108
  }
109
  rig.setAttribute('position', pos);
 
112
 
113
  function flyCamera(action) {
114
  var rig = document.querySelector('#rig');
 
115
  var rot = rig.getAttribute('rotation');
116
+ var rSpeed = 2;
117
 
118
  switch(action) {
119
  case 'forward':
120
+ velocity.z = Math.max(velocity.z - accel, -maxSpeed);
 
 
 
 
121
  break;
122
  case 'backward':
123
+ velocity.z = Math.min(velocity.z + accel, maxSpeed);
 
 
 
 
124
  break;
125
+ case 'stop':
126
+ velocity = {x: 0, y: 0, z: 0};
127
  break;
128
+ case 'rollCCW':
129
+ rot.z += rSpeed;
130
  break;
131
+ case 'rollCW':
132
+ rot.z -= rSpeed;
 
 
 
133
  break;
134
  case 'reset':
135
+ moveCamera('center');
136
+ velocity = {x: 0, y: 0, z: 0};
137
  return;
138
  }
 
139
  rig.setAttribute('rotation', rot);
140
  }
141
 
142
+ function updateCameraPosition() {
143
+ var rig = document.querySelector('#rig');
144
+ var pos = rig.getAttribute('position');
145
+ pos.x += velocity.x;
146
+ pos.y += velocity.y;
147
+ pos.z += velocity.z;
148
+ rig.setAttribute('position', pos);
149
+ requestAnimationFrame(updateCameraPosition);
150
+ }
151
+
152
+ requestAnimationFrame(updateCameraPosition);
153
+
154
  function fireRaycast() {
155
  var cam = document.querySelector('[camera]');
156
  var dir = new THREE.Vector3(); cam.object3D.getWorldDirection(dir);
 
170
 
171
  document.addEventListener('keydown', e => {
172
  switch(e.key.toLowerCase()){
173
+ case '1': moveCamera('center'); break;
174
  case '2': moveCamera('left'); break;
175
  case '3': moveCamera('right'); break;
176
  case '4': moveCamera('front'); break;
 
181
  case '9': moveCamera('angle4'); break;
182
  case 'w': flyCamera('forward'); break;
183
  case 'x': flyCamera('backward'); break;
184
+ case 's': flyCamera('stop'); break;
185
+ case 'q': flyCamera('rollCCW'); break;
186
+ case 'e': flyCamera('rollCW'); break;
 
 
187
  case ' ': fireRaycast(); break;
188
  }
189
  });
 
261
  st.markdown("### 🧭 Camera Views")
262
  st.markdown("**Select View** 📷")
263
  cols = st.columns(3)
264
+ cols[0].button("🔳 Center", on_click=lambda: st.session_state.update({'camera_view': 'center'}))
265
  cols[1].button("⬅️ Left", on_click=lambda: st.session_state.update({'camera_view': 'left'}))
266
  cols[2].button("➡️ Right", on_click=lambda: st.session_state.update({'camera_view': 'right'}))
267
  cols = st.columns(3)
 
273
  cols[1].button("↙️ Angle 3", on_click=lambda: st.session_state.update({'camera_view': 'angle3'}))
274
  cols[2].button("↘️ Angle 4", on_click=lambda: st.session_state.update({'camera_view': 'angle4'}))
275
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
  st.markdown("### ➕ Add Media Files")
277
  ups = st.file_uploader("Add files (png, jpeg, obj, glb, mp4, etc.):", accept_multiple_files=True)
278
  st.markdown("### 📋 Uploaded Model Files")
 
323
  assets, ents = generate_tilemap(files, directory, 8, 8)
324
  scene += assets + ents + "</a-scene>"
325
 
326
+ view_cmd = st.session_state.get('camera_view', 'center')
327
  if view_cmd:
328
  scene += f"<script>moveCamera('{view_cmd}');</script>"
329
  st.session_state.pop('camera_view', None)