avatar.pos.y -= speed;
}
- float theta = M_PI * avatar.body_rot / 180.0f;
- Vec3 newpos;
- newpos.x = avatar.pos.x + cos(theta) * dir.x - sin(theta) * dir.z;
- newpos.y = avatar.pos.y;
- newpos.z = avatar.pos.z + sin(theta) * dir.x + cos(theta) * dir.z;
+ Vec3 walk_dir = avatar.calc_walk_dir(dir.z, dir.x);
+ Vec3 newpos = avatar.pos + walk_dir;
if(noclip) {
avatar.pos = newpos;
exui_change_tab(1);
break;
+ case '\t':
+ if(exsel_grab_mouse) {
+ Exhibit *ex = exsel_grab_mouse.ex;
+ exslot_mouse.detach_exhibit();
+ exman->stash_exhibit(ex);
+ exsel_grab_mouse = ExSelection::null;
+ } else {
+ Exhibit *ex = exman->unstash_exhibit();
+ if(ex) {
+ exslot_mouse.attach_exhibit(ex, EXSLOT_ATTACH_TRANSIENT);
+ exsel_grab_mouse = ex;
+
+ Vec3 fwd = avatar.get_body_fwd();
+ exslot_mouse.node.set_position(avatar.pos + fwd * 100);
+ }
+ }
+ break;
+
case KEY_F5:
case KEY_F6:
case KEY_F7:
exslot_mouse.detach_exhibit();
- ExhibitSlot *slot = exman->nearest_empty_slot(pos, 100);
+ ExhibitSlot *slot = exman->nearest_empty_slot(pos, 300);
if(!slot) {
debug_log("no empty slot nearby\n");
if(ex->prev_slot && ex->prev_slot->empty()) {
static inline void mouse_look(float dx, float dy)
{
float scrsz = (float)win_height;
- avatar.body_rot += dx * 512.0 / scrsz;
+ avatar.set_body_rotation(avatar.body_rot + dx * 512.0 / scrsz);
avatar.head_alt += dy * 512.0 / scrsz;
if(avatar.head_alt < -90) avatar.head_alt = -90;