Beispiel #1
0
MessageHandler::Result ScriptMessageHandler::doHandle(Message &message, QString *reason)
{
	Q_UNUSED(reason);
	if (message.isIncoming())
		return MessageHandler::Accept;
	QLatin1Literal command("/script");
	QString text = message.text();
	if (text.size() < command.size() + 2
	        || !text.startsWith(QLatin1String(command.data()))
	        || !text.at(command.size()).isSpace()) {
		static QRegExp regexp("\\[\\[(.*)\\]\\]", Qt::CaseInsensitive);
		Q_ASSERT(regexp.isValid());
	    int pos = 0;
		bool first = true;
	    while ((pos = regexp.indexIn(text, pos)) != -1) {
			if (first) {
				first = false;
				openContext(message.chatUnit());
			}
			QString result = m_engine->evaluate(regexp.cap(1)).toString();
			debug() << regexp.cap(1) << result;
			text.replace(pos, regexp.matchedLength(), result);
	        pos += result.length();
	    }
		if (!first) {
			closeContext();
			message.setText(text);
		}
		return MessageHandler::Accept;
	}
	openContext(message.chatUnit());
	m_engine->evaluate(message.text().mid(command.size() + 1));
	closeContext();
	return MessageHandler::Reject;
}
Beispiel #2
0
void MediaEngine::DoState(PointerWrap &p) {
    p.Do(m_videoStream);
    p.Do(m_audioStream);

    p.DoArray(m_mpegheader, sizeof(m_mpegheader));

    p.Do(m_ringbuffersize);

    u32 hasloadStream = m_pdata != NULL;
    p.Do(hasloadStream);
    if (hasloadStream && p.mode == p.MODE_READ)
        loadStream(m_mpegheader, 2048, m_ringbuffersize);
    u32 hasopencontext = m_pFormatCtx != NULL;
    p.Do(hasopencontext);
    if (hasopencontext && p.mode == p.MODE_READ)
        openContext();
    if (m_pdata)
        m_pdata->DoState(p);
    if (m_demux)
        m_demux->DoState(p);

    p.Do(m_videopts);
    p.Do(m_audiopts);

    p.Do(m_isVideoEnd);
    p.Do(m_noAudioData);
    p.DoMarker("MediaEngine");
}
Beispiel #3
0
void MediaEngine::DoState(PointerWrap &p){
	auto s = p.Section("MediaEngine", 1);
	if (!s)
		return;

	p.Do(m_videoStream);
	p.Do(m_audioStream);

	p.DoArray(m_mpegheader, sizeof(m_mpegheader));

	p.Do(m_ringbuffersize);

	u32 hasloadStream = m_pdata != NULL;
	p.Do(hasloadStream);
	if (hasloadStream && p.mode == p.MODE_READ)
		loadStream(m_mpegheader, 2048, m_ringbuffersize);
#ifdef USE_FFMPEG
	u32 hasopencontext = m_pFormatCtx != NULL;
#else
	u32 hasopencontext = false;
#endif
	p.Do(hasopencontext);
	if (hasopencontext && p.mode == p.MODE_READ)
		openContext();
	if (m_pdata)
		m_pdata->DoState(p);
	if (m_demux)
		m_demux->DoState(p);

	p.Do(m_videopts);
	p.Do(m_audiopts);

	p.Do(m_isVideoEnd);
	p.Do(m_noAudioData);
}
Beispiel #4
0
bool MediaEngine::loadFile(const char* filename)
{
	PSPFileInfo info = pspFileSystem.GetFileInfo(filename);
	s64 infosize = info.size;
	u8* buf = new u8[infosize];
	if (!buf)
		return false;
	u32 h = pspFileSystem.OpenFile(filename, (FileAccess) FILEACCESS_READ);
	pspFileSystem.ReadFile(h, buf, infosize);
	pspFileSystem.CloseFile(h);

	closeMedia();
	// force to clear the useless FBO
	gpu->Resized();

	m_videopts = 0;
	m_audiopts = 0;
	m_bufSize = 0x2000;
	m_decodePos = 0;
	m_readSize = infosize;
	m_streamSize = infosize;
	m_pdata = buf;
	
	if (m_readSize > 0x2000)
		openContext();

	return true;
}
Beispiel #5
0
int MediaEngine::addStreamData(u8* buffer, int addSize) {
	int size = std::min(addSize, m_streamSize - m_readSize);
	if (size > 0 && m_pdata) {
		memcpy(m_pdata + m_readSize, buffer, size);
		m_readSize += size;
		if (!m_pFormatCtx && m_readSize > 0x2000)
			openContext();
		if (m_demux) {
			m_demux->setReadSize(m_readSize);
			m_demux->demux();
		}
	}
	return size;
}
Beispiel #6
0
void MediaEngine::DoState(PointerWrap &p){
	auto s = p.Section("MediaEngine", 1, 3);
	if (!s)
		return;

	p.Do(m_videoStream);
	p.Do(m_audioStream);

	p.DoArray(m_mpegheader, sizeof(m_mpegheader));

	p.Do(m_ringbuffersize);

	u32 hasloadStream = m_pdata != NULL;
	p.Do(hasloadStream);
	if (hasloadStream && p.mode == p.MODE_READ)
		reloadStream();
#ifdef USE_FFMPEG
	u32 hasopencontext = m_pFormatCtx != NULL;
#else
	u32 hasopencontext = false;
#endif
	p.Do(hasopencontext);
	if (hasopencontext && p.mode == p.MODE_READ)
		openContext();
	if (m_pdata)
		m_pdata->DoState(p);
	if (m_demux)
		m_demux->DoState(p);

	p.Do(m_videopts);
	p.Do(m_audiopts);

	if (s >= 2) {
		p.Do(m_firstTimeStamp);
		p.Do(m_lastTimeStamp);
	}

	p.Do(m_isVideoEnd);
	bool noAudioDataRemoved;
	p.Do(noAudioDataRemoved);
	if (s >= 3) {
		p.Do(m_audioType);
	} else {
		m_audioType = PSP_CODEC_AT3PLUS;
	}
}
Beispiel #7
0
int MediaEngine::addStreamData(u8* buffer, int addSize) {
    int size = addSize;
    if (size > 0 && m_pdata) {
        if (!m_pdata->push(buffer, size))
            size  = 0;
        if (m_demux) {
            m_demux->addStreamData(buffer, addSize);
            m_demux->demux(m_audioStream);
        }
#ifdef USE_FFMPEG
        if (!m_pFormatCtx) {
            m_pdata->get_front(m_mpegheader, sizeof(m_mpegheader));
            int mpegoffset = bswap32(*(int*)(m_mpegheader + 8));
            m_pdata->pop_front(0, mpegoffset);
            openContext();
        }
#endif // USE_FFMPEG
    }
    return size;
}
Beispiel #8
0
void XmlOutputStream::openContext( RefPtr< XmlObject > obj ) {
  // write the header and body of the input object first.  That way the context
  // isn't modified if this operation fails.
  obj->printHeader( mOutput, mContextStack.size() );
  obj->printTextContent( mOutput, mContextStack.size() );

  // now push the object onto the context stack.
  mContextStack.push( obj );

  if( obj->hasChildren() ) {
    // write the complete body of all but the final child to the stream
    XmlObject::ChildIterator finalChild = obj->endChildren();
    --finalChild;
    std::for_each( obj->beginChildren(), finalChild, 
      WriteFormattedXml( mOutput, mContextStack.size() ) );

    // open a context for my final child
    openContext( *finalChild );
  }
}
Beispiel #9
0
bool MediaEngine::loadStream(u8* buffer, int readSize, int StreamSize)
{
	closeMedia();
	// force to clear the useless FBO
	gpu->Resized();

	m_videopts = 0;
	m_audiopts = 0;
	m_bufSize = 0x2000;
	m_decodePos = 0;
	m_readSize = readSize;
	m_streamSize = StreamSize;
	m_pdata = new u8[StreamSize];
	if (!m_pdata)
		return false;
	memcpy(m_pdata, buffer, m_readSize);
	
	if (readSize > 0x2000)
		openContext();
	return true;
}
Beispiel #10
0
int MediaEngine::addStreamData(const u8 *buffer, int addSize) {
	int size = addSize;
	if (size > 0 && m_pdata) {
		if (!m_pdata->push(buffer, size)) 
			size  = 0;
		if (m_demux) {
			m_demux->addStreamData(buffer, addSize);
		}
#ifdef USE_FFMPEG
		if (!m_pFormatCtx && m_pdata->getQueueSize() >= 2048) {
			m_pdata->get_front(m_mpegheader, sizeof(m_mpegheader));
			int mpegoffset = (int)(*(s32_be*)(m_mpegheader + 8));
			m_pdata->pop_front(0, mpegoffset);
			openContext();
		}
#endif // USE_FFMPEG

		// We added data, so... not the end anymore?
		m_isVideoEnd = false;
	}
	return size;
}
Beispiel #11
0
void main()
{
	assert(line_line(line(vec2(0, 0), vec2(5, 5)), line(vec2(0, 5), vec2(5, 0))).result == true);
	assert(line_line(line(vec2(2.5, 0), vec2(2.5, 5)), line(vec2(0, 2.5), vec2(2.5, 5))).result == true);


	assert(line_rect(line(vec2(0,1),vec2(5,1)),rect(vec2(5,1),vec2(2,2))).result == true);


	assert(line_rect(line(vec2(1, 0), vec2(1, 5)), rect(vec2(1, 5), vec2(2, 2))).result == true);

	srand(time(NULL));
	auto w = openContext(1280, 800); //size of window
	auto m = mat4::ortho(-25, 1280, -25, 800, 0, 100); //size of drawing area 
	//drawing area is shrunk or stretchd to the size of the window



	Graph *g = Graph::genGrid(32,32,1280,800, 5);

	Solver dfs(g->getNumNodes(), g->getadjacencyMatrix(), g->getPos());
	Entity e(200, g->getPos()[0]);

	Entity lala(100, vec2(400, 400));

	float dt, current, total = 0;
	glfwSetTime(0);
	int lastGoal = 0;
	int newGoal = 0;
	bool newPath = true;

	std::vector<rect> obstacles; //used to keep track of the obstacles in the graph
	obstacles.push_back(rect(vec2( 165, 325), vec2(  50, 300))); //left side
	obstacles.push_back(rect(vec2(1115, 325), vec2(  50, 300))); //right top
	obstacles.push_back(rect(vec2( 640, 200), vec2(1000,  50))); //bottom
	obstacles.push_back(rect(vec2( 640, 800), vec2( 300, 300))); //top box
	obstacles.push_back(rect(vec2( 640,   0), vec2( 300, 150))); //bottom box
	
	for each(auto o in obstacles)
	g->addObstacle(o.min(), o.max());


	//opens the game loop
	while (updateContext(w)) //calls the draw functions
	{
		current = glfwGetTime();
		dt = current - total;
		total = current;
		if (dt > .16) dt = .16;


		if (newPath)
		{
			bool trying = true;
			lastGoal = newGoal;
			while (trying)
			{
				newGoal = rand() % g->getNumNodes();
				//newGoal = 800;
				for (int i = 0; i < g->getNumNodes(); i++)
					if (g->getadjacencyMatrix()[newGoal][i] > 0)
						trying = false;
			}
			e.m_path = Solver::solve(g->getNumNodes(), g->getadjacencyMatrix(), g->getPos(), lastGoal, newGoal);
			e.m_path = dfs.smoothPath(e.m_path, obstacles);

			lala.m_path = Solver::solve(g->getNumNodes(), g->getadjacencyMatrix(), g->getPos(), lastGoal, newGoal);
			lala.m_path = dfs.smoothPath(e.m_path, obstacles);
			newPath = false;
		}
		
		e.update(dt);
		lala.update(dt);

		e.draw(m, 7, vec4(1,1,1,1));
		lala.draw(m, 7, vec4(0,1,1,0));
		
		for (int j = 0; j < obstacles.size(); j++)
		{

			draw_rect(m, rect(obstacles[j]), vec4(0, 0, 1, 0));
		}

		for (int i = 1; i < e.m_path.size(); i++) //draw path
		{
			draw_line(m, line(e.m_path[i - 1], e.m_path[i]), vec4(0, 1, 0, 0));
		}

		if (e.m_targetIndex == e.m_path.size())
		{
			e.m_targetIndex = 0;
			newPath = true;
		}



	}
	//delete g;
	//closes the game loop
	closeContext(w);
}
Beispiel #12
0
ErrorContext::ErrorContext(char *filename) {
	openContext(filename);
}