Example #1
0
void Character::findVisible(){
	Character* chr;
	int cLook = lookDir->getIndex();
	int dLook;
	int dx, dy;
	Hit* hit;
	Ray* ray;
	Vertex* origin;
	Vertex* vert = model->getModelWrapper(HEAD)->getModel()->getCenter();
	Vertex* cVert;
	Coordinate* cCoord;
	Vector* vec;
	for(size_t i = 1; i < 3; i++){
		for(size_t j = 0; j < map->getCharacterSize(i); j++){
			chr = map->getCharacter(i, j);	
			cCoord = chr->getCoord();		
			dLook = abs(cLook - dirTo(cCoord)->getIndex());	
			if(dLook <= 1 || dLook == 7){
				dx = abs(loc->get(X) - cCoord->get(X));
				dy = abs(loc->get(Y) - cCoord->get(Y));
				if(dx + dy < 50){
					origin = new Vertex(vert->get(X) + loc->get(X),
							vert->get(Y), vert->get(Z) + loc->get(Y));
					cVert = chr->getCharModel()->getModelWrapper(TORSO)->getModel()->getCenter();
					vec = new Vector(cVert->get(X) + cCoord->get(X) - origin->get(X),
							cVert->get(Y) - origin->get(Y),
							cVert->get(Z) + cCoord->get(Y) - origin->get(Z));	
					ray = new Ray(origin, vec);
					hit = HitDetection::hitDetect(ray, 0, false);			
					if(hit->getType() < HIT_OBJECT && hit->getCoord() == cCoord){
						seen.insert(chr);
						chr->setVisible(VISIBLE);
					}
					delete ray;
					delete hit;
				}
			}
		}
	}
}