Example #1
0
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();
}
Example #2
0
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);
}
Example #3
0
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++;
    }
}
Example #4
0
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);
}
Example #5
0
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;
}
Example #6
0
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();
}
Example #7
0
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();
}
Example #8
0
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();
}
Example #10
0
//----------------------------------------------------------------------------
// 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);

}
Example #11
0
    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;
        };
    }
Example #12
0
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++;
    }
}