示例#1
0
void Vista::dibujar_personaje(Personaje* personaje) {
	int img_personaje_x, img_personaje_y;
	double personaje_x = personaje->getReferenciaMapaX();
	double personaje_y = personaje->getReferenciaMapaY();
	this->corregir_referencia_coordenadas_mapa_pantalla(personaje_x,
			personaje_y);
	this->transformador->transformar_isometrica_pantalla(personaje_x,
			personaje_y, img_personaje_x, img_personaje_y);

	shared_ptr<DibujoPersonaje> dibujo_pers_anterior = dynamic_pointer_cast<
			DibujoPersonaje>(
			this->factory->get_dibujo(personaje->getDibujoAnterior()));
	shared_ptr<DibujoPersonaje> dibujo_pers = dynamic_pointer_cast<
			DibujoPersonaje>(this->factory->get_dibujo(personaje->dibujar()));

	dibujo_pers->setMovimientoActual(
			dibujo_pers_anterior->getMovimientoActual());
	dibujo_pers->set_posicion_default(img_personaje_x, img_personaje_y);
	if (esta_en_seleccion(img_personaje_x, img_personaje_y)
			&& termino_de_elegir) {
		modelo->seleccionar(personaje->getReferenciaMapaX(),
				personaje->getReferenciaMapaY());
	}

	Posicion destino = personaje->get_camino();
	double mover_x = destino.get_x_exacta();
	double mover_y = destino.get_y_exacta();
	if (!adentro_del_mapa(mover_x, mover_y)) {
		mover_x = personaje->getReferenciaMapaX();
		mover_y = personaje->getReferenciaMapaY();
	}
	if (personaje->estaCongelado()) {
		dibujo_pers->congelar();
	} else {
		dibujo_pers->descongelar();
	}
	//cambio para mover por coordenadas
	personaje_x = personaje->get_posicion().get_x_exacta();
	personaje_y = personaje->get_posicion().get_y_exacta();
	//la vista recibe destinos pequenios

	double destino_x = personaje->get_destino().get_x_exacta();
	double destino_y = personaje->get_destino().get_y_exacta();
	if (personaje->estaAtacandoCliente()) {
			dibujo_pers->playMusic();
			destino_x=personaje->getDondeMira().get_x_exacta();
			destino_y=personaje->getDondeMira().get_y_exacta();
			if(personaje->esUnBote()){
				double aux=destino_x;
				destino_x=(-1*destino_y);
				destino_y=aux;
			}
			printf("Donde Estoy %g, %g",personaje_x,personaje_y);
			printf("Donde miro %g, %g",destino_x,destino_y);
	}
	dibujo_pers->elegir_frame((destino_x - personaje_x),
			(destino_y - personaje_y));
	dibujo_pers->render(gRenderer);

}
void GameControllerServer::generarRecursoRandom(SDL_mutex *mutex) {

    for (int i = 0; i <= MAX_RECURSOS; i++) {
        Posicion pos = this->modelo->mapa->posicionVacia();
        recurso_t tipo = this->modelo->generarRecursoRandom(pos);
        //creacion mensaje si creo recurso
        if (tipo.cantidad > 0) {
            msg_t mensaje;
            mensaje.type = CREAR_RECURSO;
            memcpy(mensaje.paramNombre, string_to_char_array(tipo.nombre),
                   sizeof(mensaje.paramNombre));
            mensaje.paramInt1 = tipo.cantidad;
            mensaje.paramDouble1 = pos.getX();
            mensaje.paramDouble2 = pos.getY();
            this->agregarMensaje(mensaje, mutex);
            mensaje.type = SET_ID_RECURSO;
            mensaje.paramInt1 = this->modelo->mapa->entidad_celda(
                                    pos.get_x_exacta(), pos.get_y_exacta())->getId();
            this->agregarMensaje(mensaje, mutex);
        }
    }
}
queue<msg_t> GameControllerServer::inicializacion() {
    queue<msg_t> colaInicializacion;
    msg_t mapa;
    mapa.type = PARAM_MAPA;
    mapa.paramDouble1 = this->modelo->get_ancho_mapa();
    mapa.paramDouble2 = this->modelo->get_alto_mapa();
    colaInicializacion.push(mapa);

    msg_t conf;
    conf.type = CONFIGURACION;
    conf.paramDouble1 = this->modelo->juego->conf->get_margen_scroll();
    conf.paramDouble2 = this->modelo->juego->conf->get_vel_personaje();
    colaInicializacion.push(conf);

    vector<Entidad*> entidades =
        this->modelo->obtenerEntidadesDeInicializacion();
    vector<Entidad*>::iterator it = entidades.begin();
    for (; it != entidades.end(); it++) {
        msg_t entidad;
        Entidad* ent = (*it);
        memcpy(entidad.paramNombre,
               string_to_char_array(ent->objetoMapa->nombre),
               sizeof(entidad.paramNombre));
        entidad.paramDouble1 = ent->posicion->getX();
        entidad.paramDouble2 = ent->posicion->getY();

        //problema no puede pasar los id de los recursos
        if (!ent->esUnRecurso()) {
            entidad.type = CREAR_ENTIDAD_CONSTRUIDA;
            entidad.paramInt1 = ent->getId();
            colaInicializacion.push(entidad);

        } else {
            int cant = ((Recurso*) ent)->obtenerRecurso();
            entidad.paramInt1 = cant;
            entidad.type = CREAR_RECURSO;
            colaInicializacion.push(entidad);
            entidad.type = SET_ID_RECURSO;
            entidad.paramInt1 = ent->getId();
            colaInicializacion.push(entidad);

        }

    }
    vector<Personaje*> personajes = this->modelo->devolverTodosLosPersonajes();
    vector<Personaje*>::iterator iter = personajes.begin();
    for (; iter != personajes.end(); iter++) {
        msg_t msg_crear_personaje;
        Personaje* personaje = (*iter);
        msg_crear_personaje.type = NUEVO_PERSONAJE;
        Posicion pos = personaje->get_posicion();
        memcpy(msg_crear_personaje.paramTipo,
               string_to_char_array(personaje->objetoMapa->nombre),
               sizeof(msg_crear_personaje.paramTipo));
        memcpy(msg_crear_personaje.paramNombre,
               string_to_char_array(personaje->getNombreJugador()),
               sizeof(msg_crear_personaje.paramNombre));
        msg_crear_personaje.paramDouble1 = pos.get_x_exacta();
        msg_crear_personaje.paramDouble2 = pos.get_y_exacta();
        msg_crear_personaje.paramInt1 = personaje->getId();
        colaInicializacion.push(msg_crear_personaje);
        if (personaje->estaCongelado()) {
            msg_t mensajeDesconexion;
            mensajeDesconexion.type = QUIT;
            memcpy(mensajeDesconexion.paramNombre,
                   string_to_char_array(personaje->getNombreJugador()),
                   sizeof(mensajeDesconexion.paramNombre));
            colaInicializacion.push(mensajeDesconexion);
        }
    }

    return colaInicializacion;

}