};
void add_location(vec3 loc){
models.push_back(translate(mat4(1.0), loc));
+ specials.push_back(0);
}
void movement(float time) {
for(size_t i = 0; i < models.size(); i++) {
for(size_t mouse_inst = 0; mouse_inst < mouse->models.size(); mouse_inst++){
vec3 mcp = mouse->closest_point(our_center, mouse_inst);
vec3 ocp = closest_point(mcp, i);
- if(can_see(mcp, ocp)){
- printf("We can see a mouse!\n");
+ if(can_see(mcp, ocp, 2.0f)){
+ specials[i] = 1;
+ mouse->specials[mouse_inst] = 2;
} else {
- if(switchtime > 900){
- cout << "Can't see mouse, our_center = " << our_center << " mcp = " << mcp << endl;
- }
+ specials[i] = 0;
+ mouse->specials[mouse_inst] = 0;
}
}
}
GameObject* add_object(GameObject *new_object, string name, bool solid = false);
void load_level();
GameObject* find_object(string name);
-bool can_see(vec3 A, vec3 B);
+bool can_see(vec3 A, vec3 B, float start_distance = 0.0f);
#define PLAYER_ON_OBJECT 1
#define ACTIVATE 2
targ->add_location_size(vec3(20, 40, 40), vec3(6, 6, 6));
Cat *cat = (Cat*)add_object(new Cat, "Cat", true);
- cat->add_location(vec3(5, 2, 40));
+ cat->add_location(vec3(10, 2, 40));
cat->texture_file = "textures/cat.jpg";
+ targ->add_location_size(vec3(0, 2, 40), vec3(5, 5, 5));
+
FloorPanel *mouse = (FloorPanel*)add_object(new FloorPanel, "Mouse", true);
- mouse->add_location(vec3(-5, 0, 40));
+ mouse->add_location(vec3(-10, 0, 40));
mouse->texture_file = "textures/mouse.jpg";
}
return min_distance;
}
-bool can_see(vec3 A, vec3 B){
+bool can_see(vec3 A, vec3 B, float start_distance){
vec3 D = normalize(B - A);
+ A += D * start_distance;
while(true){
float move_distance = closest_check(A);
/* Should the 0.01 be a parameter like "Open space width"? */