Esempio n. 1
0
CScene::~CScene(void)
{
	// Clean up DirectX stuff
	SafeRelease(g_pD3D);
	SafeRelease(g_pD3DDevice);

	// Clean up game objects
	removeObjects();
}
Esempio n. 2
0
void CWorld::SpawnObject(CObject* obj, bool addSpawn)
{
	if (obj->m_type != OT_MOVER && obj->m_type != OT_ITEM && obj->m_type != OT_CTRL)
		return;

	CSpawnObject* owner = (CSpawnObject*)obj;

	const QRect normalizedRect = owner->m_rect.normalized();

	CSpawnObject* spawn;
	int i;
	if (addSpawn)
	{
		for (i = 0; i < owner->m_count - 1; i++)
		{
			spawn = (CSpawnObject*)CObject::CreateObject(owner->m_type);
			spawn->m_modelID = owner->m_modelID;
			spawn->m_scale = owner->m_scale;

			if (!spawn->Init())
			{
				Delete(spawn);
				return;
			}

			D3DXVECTOR3 randomPos;
			randomPos.z = (float)normalizedRect.left() + (float)(rand() % ((normalizedRect.width() - MPU) * 20)) / 20.0f;
			randomPos.x = (float)normalizedRect.top() + (float)(rand() % ((normalizedRect.height() - MPU) * 20)) / 20.0f;

			if (spawn->m_type == OT_MOVER && ((CMover*)spawn)->m_moverProp->fly)
				randomPos.y = (float)((int)(owner->m_pos.y) - 20 + (rand() % 40));
			else
				randomPos.y = GetHeight(randomPos.x, randomPos.z);

			spawn->SetRot(D3DXVECTOR3(0, (float)(rand() % 36000) / 100.0f, 0));
			spawn->SetPos(randomPos);
			spawn->m_isReal = false;
			spawn->m_owner = owner;
			AddObject(spawn);
		}
	}
	else
	{
		CPtrArray<CObject> removeObjects(owner->m_count - 1);
		for (i = 0; i < m_objects[owner->m_type].GetSize(); i++)
		{
			if (((CSpawnObject*)m_objects[owner->m_type].GetAt(i))->m_owner == owner)
				removeObjects.Append(m_objects[owner->m_type].GetAt(i));
		}

		for (i = 0; i < removeObjects.GetSize(); i++)
			DeleteObject(removeObjects[i]);
	}
}
Esempio n. 3
0
void ObjectTracker::matchObjects(CvPoint *newCenters, int size) {
    if (currObjs_.empty()) {
        for (int i=0; i<size; i++) {
            createNewObject(newCenters[i]);
        }
        return;
    }

    if (size == 0) {
        removeObjects();
    }

    int parameter = imgSize_.width + imgSize_.height;
    int rows = currObjs_.size();
    int cols = size;
    objsM_ = new double*[rows];

    for (int i=0; i<rows; i++) {
        objsM_[i] = new double[cols];
    }
    CvPoint *predictedPnts = new CvPoint[rows];
    for (int i=0; i<rows; i++) {
        predictedPnts[i] = currObjs_[i].predictNextPosition();
    }

    for (int i=0; i<rows; i++) {
        for (int j=0; j<cols; j++) {
            CvPoint distance = subVectors(predictedPnts[i], newCenters[j]);
            objsM_[i][j] = getMagnitude(distance) / parameter;
        }
    }

    vector<int> list;
    // Check columns
    for (int j=0; j<cols; j++) {
        list.clear();
        for (int i=0; i<rows; i++) {
            if (objsM_[i][j] < matchThreshold_) {
                list.push_back(i);
            }
        }
        switch (list.size()) {
        case 0: // New object
            createNewObject(newCenters[j]);
            break;
        case 1:
            break;
        default:
            break;
        }
    }

    // Check rows
    vector<int> removedObjectsv;
    removedObjectsv.clear();
    for (int i=0; i<rows; i++) {
        list.clear();
        for (int j=0; j<cols; j++) {
            if (objsM_[i][j] < matchThreshold_) {
                list.push_back(j);
            }
        }

        switch(list.size()) {
        case 0: // No more match
            removedObjectsv.push_back(i);
            break;
        case 1:
            currObjs_[i].correctPosition(newCenters[list[0]]);
            break;
        default:
            break;
        }
    }

    removeObjects(&removedObjectsv);


    //printMatrix(objsM_, rows, cols);
    for (int i=0; i<rows; i++) {
        delete[] objsM_[i];
    }
    delete[] objsM_;
}