void Pile::grid() { int dim = Ogre::Math::Ceil(Ogre::Math::Log2(m_objects.size())); int i = 0, j = 0; Ogre::Vector3 max_vec = m_center + Ogre::Vector3(dim * 200.0f, 0, dim * 200.0f); if (max_vec.x > Desktop::msc_room_width / 2.0f - 200.0f) m_center.x -= max_vec.x - Desktop::msc_room_width / 2.0f + 200.0f; if (max_vec.z > Desktop::msc_room_depth / 2.0f - 200.0f) m_center.z -= max_vec.z - Desktop::msc_room_depth / 2.0f + 200.0f; for (std::vector<Object *>::iterator itr = m_objects.begin() ; itr != m_objects.end(); ++itr ) { Object * obj = *itr; Ogre::Vector3 new_pos = m_center + Ogre::Vector3(i * 200.0f, 0, j * 200.0f); new_pos.y = msc_item_hight_delim; if (!new_pos.isNaN()) obj->move(new_pos); obj->setPile(NULL); ++i; if (i == dim) { i = 0; ++j; } } m_objects.clear(); }
void Window::load() { // Generate light source: Matrix4 temp; temp.identity(); setMatrix(temp); glEnable(GL_LIGHTING); camera.set(e, d, up); object.move(0, 1, 0); cameraObject.set(initial.get(0),initial.get(1),initial.get(2)); bCurve.setPoints(initial, Vector4(-2, 8, -4, 0), Vector4(2, 8, 4, 0), endV); for (int i = 0; i < 100; i++) { points[i] = bCurve.evalBCurve((double)i / 100); } belzCamera.set(points[0], belzD, belzUp); loadTextures(); loadCharacter(); Vector4 points[49]; for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { int k = i * 7 + j; points[k] = Vector4((double)i*2 - 6, (double)10, (double)j*2 - 6, 0); } } plane.definePoints(points); }
void Session::move_missile() { Command cmd(_game_n); Object *obj; Object *obj2; std::list<Object *>::iterator it; std::list<Object *>::iterator it2; it = _listObj.begin(); while (it != _listObj.end()) { obj = *it; if (obj->getType() == 5 || obj->getType() == 6) { obj->move(); //Mouvement des missiles cmd.sendObjMove(obj, _p); if (obj->getX() > 50) //Missile depassant la fenetre { cmd.sendDestroy(obj->getId() , 0, _p); _listObj.erase(it); it = _listObj.begin(); } } it++; } }
void Window::funcKeyboardCallback(int key, int xn, int yn) { glMatrixMode(GL_PROJECTION); switch (key) { case GLUT_KEY_UP: object.move(0, 1, 0); break; case GLUT_KEY_DOWN: object.move(0, -1, 0); break; case GLUT_KEY_LEFT: object.move(1, 0, 0); break; case GLUT_KEY_RIGHT: object.move(-1, 0, 0); break; } glMatrixMode(GL_MODELVIEW); }
void Pile::move(const Ogre::Vector3 & pos) { Ogre::Vector3 p = pos; int i = 0; for (std::vector<Object *>::iterator itr = m_objects.begin() ; itr != m_objects.end(); ++itr, ++i ) { Object * obj = *itr; p.y = i * msc_item_hight_delim; obj->move(p); } m_center = pos; }
void GraphicsRunner::update() { // Clear the graphics window with a slight gray background window_.clear(BACKGROUND_COLOR); // Move and draw all objects while removing ones that need deletion for (auto i = objects_.begin(); i != objects_.end(); ++i) { Object* object = *i; // If the object needs to be deleted if (object->delete_) { // First check to see this object is a brick if (Brick* brick = dynamic_cast<Brick*>(object)) { // And if it is, apply any special properties the brick might have. This function also decrements either // numBricks_ or numSpecialBricks_ depending on the brick's type handleSpecialBrick(brick); } // Free the memory delete object; // Erase the object from the containing vector. The iterator now points at the next object. i = objects_.erase(i); // Decrement the iterator since it will be incremented in the for loop. // Note! If i == objects_.begin() then this will cause undefined behavior. The first object should never // be deleted! --i; continue; } // Move and draw object->draw(window_); if (status_ == '\0') object->move(); } // Draw the game text for (Text text : text_) window_.draw(text); // Update the level timer if the game isn't paused if (status_ == '\0') text_[2].setString(getTimeStringFromSeconds(difftime(time(0), timerStart_) - secondsPaused_)); // Finally display all the objects on the screen. window_.display(); // And check the status of the game for the next frame checkStatus(); }
void Pile::fanout() { Ogre::Vector3 max_vec, min_vec; for (std::vector<Ogre::Vector3>::iterator itr = m_positions.begin() ; itr != m_positions.end(); ++itr ) { Ogre::Vector3 p = m_center + *itr; if (p.x > max_vec.x) max_vec.x = p.x; if (p.z > max_vec.z) max_vec.z = p.z; if (p.x < min_vec.x) min_vec.x = p.x; if (p.z < min_vec.z) min_vec.z = p.z; } if (max_vec.x > Desktop::msc_room_width / 2.0f - 200.0f) m_center.x -= max_vec.x - Desktop::msc_room_width / 2.0f + 200.0f; if (min_vec.x < - Desktop::msc_room_width / 2.0f + 200.0f) m_center.x += - min_vec.x - Desktop::msc_room_width / 2.0f + 200.0f; if (max_vec.z > Desktop::msc_room_depth / 2.0f - 200.0f) m_center.z -= max_vec.z - Desktop::msc_room_depth / 2.0f + 200.0f; if (min_vec.z < - Desktop::msc_room_depth / 2.0f + 200.0f) m_center.z += - min_vec.z - Desktop::msc_room_depth / 2.0f + 200.0f; int i = 0; for (std::vector<Object *>::iterator itr = m_objects.begin() ; itr != m_objects.end(); ++itr, ++i ) { Object * obj = *itr; Ogre::Vector3 p = m_center + m_positions.at(i); p.y = msc_item_hight_delim; obj->move(p); obj->setPile(NULL); } m_objects.clear(); }
void Pile::wrapUp() { if (m_positions.size() == 0) return; if (m_wraped_up) return; Ogre::Vector3 v; for (std::vector<Ogre::Vector3>::iterator itr = m_positions.begin() ; itr != m_positions.end(); ++itr ) v += *itr; m_center = v / m_positions.size(); for (std::vector<Ogre::Vector3>::iterator itr = m_positions.begin() ; itr != m_positions.end(); ++itr ) *itr = *itr - m_center; m_wraped_up = true; int i = 1; for (std::vector<Object *>::iterator itr = m_objects.begin() ; itr != m_objects.end(); ++itr, ++i ) { Object * obj = *itr; Ogre::Vector3 cur_pos = obj->getNode()->_getDerivedPosition(); Ogre::Vector3 delta = (m_center - cur_pos); Ogre::Vector3 new_pos = cur_pos + delta; new_pos.y = i * msc_item_hight_delim; if (!new_pos.isNaN()) obj->move(new_pos); } }
//====================================================================================================================== // // moves an item // void ObjectController::HandleItemMoveBack_( uint64 targetId, Message* message, ObjectControllerCmdProperties* cmdProperties) { CreatureObject* creature = dynamic_cast<CreatureObject*>(mObject); PlayerObject* player = creature->GetGhost(); if (!player) { assert(false && "ObjectController::HandleItemMoveBack_ Player not found"); return; } // Verify that there was a target passed. if (!targetId) { gMessageLib->SendSystemMessage(::common::OutOfBand("player_structure", "move_what"), player); return; } Object* object = gWorldManager->getObjectById(targetId); if(!object) { assert(false && "ObjectController::HandleItemMoveBack_ item not found"); return; } // Verify that the item and player are in the same structure. // Verify that the item and player are in the same structure. CellObject* playerCell = dynamic_cast<CellObject*>(gWorldManager->getObjectById(player->getParentId())); if(!playerCell) { gMessageLib->SendSystemMessage(::common::OutOfBand("player_structure", "move_what"), player); return; } uint64 playerStructure = playerCell->getParentId(); CellObject* objectCell = dynamic_cast<CellObject*>(gWorldManager->getObjectById(object->getParentId())); if(!objectCell) { gMessageLib->SendSystemMessage(::common::OutOfBand("player_structure", "move_what"), player); return; } uint64 objectStructure = objectCell->getParentId(); if (objectStructure != playerStructure) { gMessageLib->SendSystemMessage(::common::OutOfBand("player_structure", "move_what"), player); return; } // Verify that the player has appropriate rights on this structure. if (playerCell) { if (BuildingObject* building = dynamic_cast<BuildingObject*>(gWorldManager->getObjectById(playerCell->getParentId()))) { if (!building->getAdminData().check_admin(player->getId())) { gMessageLib->SendSystemMessage(::common::OutOfBand("player_structure", "admin_move_only"), player); return; } } else { assert(false && "ObjectController::HandleItemMoveBack_ no structure"); return; } } else { //so were just outside ?? return; } // Move the object back 1/10th of a meter. object->move(player->mDirection, -MOVE_INCREMENT); gMessageLib->sendDataTransformWithParent053(object); object->updateWorldPosition(); }
//---------------------------------------------------------------------------- // Callback method called by GLUT when users press specific keys on the keyboard void Window::keyboardCallback(unsigned char key, int xn, int yn) { glMatrixMode(GL_PROJECTION); Matrix4 temp; switch (key) { case'q': person.rotateY(5); temp.makeRotateY(5); ahead = temp * ahead; side = temp * side; camera.rotateDirectionY(5); break; case'Q': person.rotateY(5); break; case'e': person.rotateY(-5); temp.makeRotateY(-5); ahead = temp * ahead; side = temp * side; camera.rotateDirectionY(-5); break; case'E': person.rotateY(-5); break; case 'z': camera.moveUp(1); break; case 'Z': camera.moveDown(1); break; case 'w': walk = true; person.move(ahead.get(0), ahead.get(1), ahead.get(2)); camera.move(Vector3(ahead.get(0),ahead.get(1),ahead.get(2)),1); break; case's': walk = true; person.move(-ahead.get(0), -ahead.get(1), -ahead.get(2)); camera.move(Vector3(-ahead.get(0), -ahead.get(1), -ahead.get(2)), 1); break; case 'a': person.move(side.get(0), side.get(1), side.get(2)); camera.move(Vector3(side.get(0), side.get(1), side.get(2)), 1); break; case 'd': person.move(-side.get(0), -side.get(1), -side.get(2)); camera.move(Vector3(-side.get(0), -side.get(1), -side.get(2)), 1); break; case 'i': camera.moveForward(1); break; case'k': camera.moveBackward(1); break; case 'j': camera.moveLeft(1); break; case 'l': camera.moveRight(1); break; case 'r': t = 0; cameraObject.set(initial.get(0), initial.get(1), initial.get(2)); object.reset(); object.move(0, 1, 0); belzCamera.set(points[0], belzD, belzUp); person.reset(); camera.set(e, d, up); ahead = Vector4(0, 0, -1, 0); side = Vector4(-1, 0, 0, 0); break; case 'p': cam = !cam; break; case'o': altCam = !altCam; break; case'+': t++; if (t == 100) t = 99; break; case'-': t--; if (t == 0) t = 1; break; case'.': automatic = !automatic; break; case'/': light = !light; break; } glMatrixMode(GL_MODELVIEW); }
void Panel::mouseMoveEvent(QMouseEvent *e) { QWidget::mouseMoveEvent(e); if (m_data->state == STATE_NONE) return; // 坐标转换 QPointF clickedPos = untransformCoords(e->posF()); IView *view = m_data->view; switch(m_data->state) { case STATE_MOVE_OBJECT: { Object *obj = m_data->object; IDoc *doc = m_data->doc; Handle *handle = m_data->handle; QPointF pos = clickedPos; std::list<Object *> tmp = m_data->graphData->selectedObjects(); std::list<Object *> list = parent_list_affected( tmp); // 当是包含子对象的图元被移动的时候 // 子对象也一起移动 if (list.size() > 1) { Object::object_add_updates_list(list, doc); //鼠标移动的差值 QPointF offset = pos - m_data->startAt; QPointF targetPos = m_data->origPos + offset; //对象移动的差值 QPointF delta = targetPos - obj->pos(); //qDebug() << delta; Object::object_list_move_delta(list, &delta); Object::object_add_updates_list(list, doc); } else { // 否则,只移动对象本身 obj->addUpdates(doc); //鼠标移动的差值 QPointF offset = pos - m_data->startAt; QPointF targetPos = m_data->origPos + offset; obj->move(&targetPos); obj->addUpdates(doc); } doc->flush(); update(); } break; case STATE_MOVE_HANDLE: { Object *obj = m_data->object; IDoc *doc = m_data->doc; Handle *handle = m_data->handle; QPointF pos = clickedPos; obj->addUpdates(doc); obj->moveHandle(handle, &pos, GraphLib::HANDLE_MOVE_USER); obj->addUpdates(doc); doc->flush(); update(); } break; case STATE_NONE: break; }; }
void Session::sessionthreadElems() { int i = 0; Command cmd(_game_n); Object *obj; Object *obj2; std::list<Object *>::iterator it; std::list<Object *>::iterator it2; std::cout << "Success for threadElems" << std::endl; LoadLib *lib; //_score = 10000; // TEST while (1) // On envoie des elements à l'infini { if (i == 10000) i = 0; //std::cout << "ID : " << (int)mob_id << std::endl; if ((_score < LEVEL_BOSS1 || _score >= LEVEL1) && (_score < LEVEL_BOSS2 || _score >= LEVEL2) && (_score < LEVEL_BOSS3 || _score >= LEVEL3)) Create_Mob(i); Create_Boss(i); if (i % 100 == 0) { //Detection des collisions entre missiles joueur et mobs collision_playermissile_mob(); //Detection des collisions entre missiles joueur et boss collision_playermissile_boss(21, LEVEL_BOSS1, LEVEL1, 3, 3, 20, 10); collision_playermissile_boss(22, LEVEL_BOSS2, LEVEL2, 3, 3, 3, 3); collision_playermissile_boss(24, LEVEL_BOSS3, LEVEL3, 3, 3, 20, 10); move_missile(); // Debut collision player et mob collision_player_mob(); } if (i % 200 == 0) { std::cout << "Sending each objs position" << std::endl; it = _listObj.begin(); while (it != _listObj.end()) { obj = *it; obj->move(); launchMissile(obj); cmd.sendObjMove(obj, _p); if (obj->getX() == 0) // depassant la fenetre { cmd.sendDestroy(obj->getId() , 0, _p); _listObj.erase(it); it = _listObj.begin(); } it++; } } _th->ASleep(500); i++; } }