rayzor

diff src/modeller.cc @ 12:d94a69933a71

lots of stuff, can't remember
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 12 Apr 2014 23:28:24 +0300
parents 70e332156d02
children a9a948809c6f
line diff
     1.1 --- a/src/modeller.cc	Thu Apr 10 08:42:33 2014 +0300
     1.2 +++ b/src/modeller.cc	Sat Apr 12 23:28:24 2014 +0300
     1.3 @@ -1,9 +1,11 @@
     1.4 +#include <stdio.h>
     1.5  #include <string.h>
     1.6  #include <assert.h>
     1.7  #include "modeller.h"
     1.8  #include "min3d.h"
     1.9  #include "rayzor.h"
    1.10  #include "scene.h"
    1.11 +#include "keyb.h"
    1.12  
    1.13  struct ModellerImpl {
    1.14  	int mx, my;
    1.15 @@ -112,8 +114,25 @@
    1.16  {
    1.17  	if(press) {
    1.18  		switch(key) {
    1.19 +		case 'q':
    1.20 +			quit_app();
    1.21 +			break;
    1.22 +
    1.23  		case 27:
    1.24 -			quit_app();
    1.25 +			scene->clear_selection();
    1.26 +			break;
    1.27 +
    1.28 +		case '\t':
    1.29 +			{
    1.30 +				int s = scene->get_selection();
    1.31 +				if(s >= 0) {
    1.32 +					s = (s + 1) % scene->get_node_count();
    1.33 +					scene->clear_selection();
    1.34 +				} else {
    1.35 +					s = 0;
    1.36 +				}
    1.37 +				scene->select(s);
    1.38 +			}
    1.39  			break;
    1.40  
    1.41  		default:
    1.42 @@ -136,15 +155,17 @@
    1.43  	mod->prev_x = x;
    1.44  	mod->prev_y = y;
    1.45  
    1.46 -	if(mod->bnstate[0]) {
    1.47 -		mod->cam_theta += dx * 0.5;
    1.48 -		mod->cam_phi += dy * 0.5;
    1.49 +	if(kb_isdown(KB_ALT) || kb_isdown(KB_CTRL)) {
    1.50 +		if(mod->bnstate[0]) {
    1.51 +			mod->cam_theta += dx * 0.5;
    1.52 +			mod->cam_phi += dy * 0.5;
    1.53  
    1.54 -		if(mod->cam_phi < -90) mod->cam_phi = -90;
    1.55 -		if(mod->cam_phi > 90) mod->cam_phi = 90;
    1.56 -	}
    1.57 -	if(mod->bnstate[1]) {
    1.58 -		mod->cam_dist += dy * 0.1;
    1.59 -		if(mod->cam_dist < 0) mod->cam_dist = 0;
    1.60 +			if(mod->cam_phi < -90) mod->cam_phi = -90;
    1.61 +			if(mod->cam_phi > 90) mod->cam_phi = 90;
    1.62 +		}
    1.63 +		if(mod->bnstate[1]) {
    1.64 +			mod->cam_dist += dy * 0.1;
    1.65 +			if(mod->cam_dist < 0) mod->cam_dist = 0;
    1.66 +		}
    1.67  	}
    1.68  }