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; }