Exemplo n.º 1
0
bool InputConverter::LoadBinds(std::string filename) {

	std::fstream stream(filename);
	if (!stream.is_open()) {
		return false;
	}
	while (!stream.eof()) {
		std::string line;
		std::getline(stream, line, '\n');
		if (line.length() == 0) {
			continue;
		}
		std::stringstream ss(line);
		std::string type;
		std::string key;
		std::string value;
		ss >> type;
		ss >> key;
		ss >> value;
		for (auto it = m_actions.begin(); it != m_actions.end(); it++) {
			if (ActionToString(it->first) == type) {
				it->second = key + " " + value;
			}
		}
	}
	return true;
}
Exemplo n.º 2
0
BSCMenuItem::BSCMenuItem(uint32 action, BMessage *message)
	:
	BMenuItem(ActionToString(action), message),
	fAction(action),
	fMenuIcon(NULL)
{
	
}
Exemplo n.º 3
0
void InputConverter::SaveBinds(std::string filename) {
	std::fstream stream(filename);
	auto it = m_actions.begin();
	while (it != m_actions.end()) {
		stream << ActionToString(it->first) << " " << it->second << "\n";
		it++;
	}
}
Exemplo n.º 4
0
void EditCoursesMenu::OnRowValueChanged( Row row )
{
	LOG->Trace( "EditCoursesMenu::OnRowValueChanged(%i)", row );

	const bool bCanGoLeft = CanGoLeft(), bCanGoRight = CanGoRight();
	m_sprArrows[0].SetDiffuse( bCanGoLeft?RageColor(1,1,1,1):RageColor(0.2f,0.2f,0.2f,1) );
	m_sprArrows[1].SetDiffuse( bCanGoRight?RageColor(1,1,1,1):RageColor(0.2f,0.2f,0.2f,1) );
	m_sprArrows[0].EnableAnimation( bCanGoLeft );
	m_sprArrows[1].EnableAnimation( bCanGoRight );

	Course* pCourse = GetSelectedCourse();
	CourseEntry* pEntry = GetSelectedEntry();

	switch( row )
	{
	case ROW_COURSE:
		CHECKPOINT;
		m_textValue[ROW_COURSE].SetText( pCourse->GetFullDisplayTitle() );
		m_CourseBanner.LoadFromCourse( pCourse );
		m_CourseBanner.ScaleToClipped( COURSE_BANNER_WIDTH, COURSE_BANNER_HEIGHT );
		m_iSelection[ROW_ENTRY] = 0;
		pEntry = GetSelectedEntry();
		if( pEntry == NULL )
		{
			CourseEntry ce;
			const vector<Song*> &apSongs = SONGMAN->GetAllSongs();
			ASSERT( !apSongs.empty() );
			ce.pSong = apSongs[0];
			pCourse->m_entries.push_back( ce );
			pEntry = GetSelectedEntry();
		}
		// fall through
	case ROW_COURSE_OPTIONS:
		CHECKPOINT;
		m_textValue[ROW_COURSE_OPTIONS].SetText( 
			ssprintf(
				"(START)  %s, %s, ",
				pCourse->m_bRepeat ? "repeat" : "no repeat",
				pCourse->m_bRandomize ? "randomize" : "no randomize" ) + 
			ssprintf(
				(pCourse->m_iLives==-1) ? "use bar life" : "%d lives",
				pCourse->m_iLives ) );
		// fall through
	case ROW_ACTION:
		CHECKPOINT;
		m_textValue[ROW_ACTION].SetText( "(START) " + ActionToString(GetSelectedAction()) );
		// fall through
	case ROW_ENTRY:
		CHECKPOINT;
		m_textValue[ROW_ENTRY].SetText( ssprintf("%d of %d",m_iSelection[ROW_ENTRY]+1, (int)GetSelectedCourse()->m_entries.size()) );
		m_iSelection[ROW_ENTRY_TYPE] = pEntry->type;
		// fall through
	case ROW_ENTRY_TYPE:
		CHECKPOINT;
		m_textValue[ROW_ENTRY_TYPE].SetText( pEntry ? CourseEntryTypeToString(pEntry->type) : CString("(none)") );
		// fall through
	case ROW_ENTRY_OPTIONS:
		CHECKPOINT;
		{
			CStringArray as;
			const bool *bShow = g_bRowEnabledForType[GetSelectedEntry()->type];

			if( bShow[song] )
				as.push_back( pEntry->pSong ? pEntry->pSong->GetFullTranslitTitle() : CString("(missing song)") );
			if( bShow[group] )
				as.push_back( pEntry->group_name.empty() ? CString("(no group)") : pEntry->group_name );
			if( bShow[difficulty] )
				if( pEntry->difficulty != DIFFICULTY_INVALID )
					as.push_back( DifficultyToString(pEntry->difficulty) );
			if( bShow[low_meter] )
				if( pEntry->low_meter > 0 )
					as.push_back( ssprintf("low meter %d", pEntry->low_meter) );
			if( bShow[high_meter] )
				if( pEntry->high_meter > 0 )
					as.push_back( ssprintf("high meter %d", pEntry->high_meter) );
			if( bShow[best_worst_value] )
				if( pEntry->players_index != -1 )
					as.push_back( ssprintf("rank %d", pEntry->players_index+1) );

			m_textValue[ROW_ENTRY_OPTIONS].SetText( "(START) " + join(", ",as) );
		}
		// fall through
	case ROW_ENTRY_PLAYER_OPTIONS:
		CHECKPOINT;
		{
			CString s = "(START) ";
		
			PlayerOptions po;
			po.FromString( pEntry->modifiers );
			if( po.GetString().empty() )
				s += "(none)";
			else
				s += po.GetString();
		
			m_textValue[ROW_ENTRY_PLAYER_OPTIONS].SetText( s );
		}
		// fall through
	case ROW_ENTRY_SONG_OPTIONS:
		CHECKPOINT;
		{
			CString s = "(START) ";

			SongOptions so;
			so.FromString( pEntry->modifiers );
			if( so.GetString().empty() )
				s += "(none)";
			else
				s += so.GetString();

			m_textValue[ROW_ENTRY_SONG_OPTIONS].SetText( s );
		}
		break;
	default:
		ASSERT(0);	// invalid row
	}
}
Exemplo n.º 5
0
// 查询信号.
// 根据查询条件执行动作.
// 格式:
// condAction = il + pos + sig + action.
//            = ih + pos + sig + action.
//            ih 230-20MA-p5
//            ih 230-20 MA - p5
//            op pos   sig - p5
u8 ParseCmd_I(char * pCmdStr, CMD_ST *pstCmd)
{
    static s8 s_ascSigBuf[40];
    static s8 s_ascPosBuf[40];
    static s8 s_ascActionBuf[40];

    u8 ucSigLevel = 0xFF;
    char * pEnd;
    char * pStart;
    char scBackup;
    CONDITION_POS_ST stPos;
    CONDITION_SIG_ST stSig;
    ACTION_ST   stAction;

    if(pCmdStr == NULL)
    { return 0;
    }

    fprintf(stderr,"\t%s:\t开始解析\n",pCmdStr);

    if (*pCmdStr != 'I' && *pCmdStr != 'i')
    {
        assert(0);
        return 0;
    }

    pCmdStr++;

    if (*pCmdStr == 'h' || *pCmdStr == 'H')
    {
        ucSigLevel = 1;
    }
    else if (*pCmdStr == 'l' || *pCmdStr == 'L')
    {
        ucSigLevel = 0;
    }  
    else
    {
        return 0; // command not recognized.
    }

    errno = 0;
    pCmdStr++;

    // 确认是否是位置,定位信号名.
    if (*pCmdStr == POS_PREFIX) // 使用的是指定位置的方式
    {
        pStart = pCmdStr + 1;
    }
    else
    {
        pStart = pCmdStr;
    }

    // 查找有效信号名称.
    if ((pEnd = strchr(pStart,'H')) == NULL
            &&(pEnd = strchr(pStart,'M')) == NULL) 
    {
        ERRINFO("未指定有效的信号名");
        return 0;
    }

    // 位置信号.
    scBackup = *pEnd;
    *pEnd = '\0';
    strcpy((char*)s_ascPosBuf,pCmdStr);
    *pEnd = scBackup;
    if (HfnGetPos((char*)s_ascPosBuf,&stPos) == false)
    {
        ERRINFO("未指定有效的信号名");
        return 0;
    }
    // 确认信号. 信号和动作之间的分隔符是'-'
    pStart = pEnd;
    if ((pEnd = strchr(pStart,'-')) == NULL)
    {
        ERRINFO("未指定有效动作");
        return 0;
    }

    scBackup = *pEnd;
    *pEnd = '\0';
    strcpy((char*)s_ascSigBuf,pStart);
    *pEnd = scBackup;

    if (HfnGetSig(pStart,&stSig) == false)
    {
        ERRINFO("未指定有效的信号名");
        return 0;
    }

    pStart = pEnd + 1; // 跳过分隔符.
    strcpy((char*)s_ascActionBuf,pStart);

    if (HfnGetAction((char*)s_ascActionBuf,&stAction) == false)
    {
        ERRINFO("动作字符串无法解析:%s",pStart);
        return 0;
    }

    // ih/il.
    ActionToString(&stAction,(char*)s_ascActionBuf);
    fprintf(stderr,"\t查询信号:%s ,位置:%d,若信号值为%d,执行动作: %s\n",
            s_ascSigBuf,stPos.m_slPos,ucSigLevel,s_ascActionBuf);

    // 为了兼容性考虑.需要将相关的单命令解析函数抽离出来,并适当组合.以适当匹配各情况
    // 比如这里可能是设置IO.也可能是停止.也可能是设置新的运行目标.

    pstCmd->m_ucLen++;

    fprintf(stderr,"\t解析完成,命令ID = %u\n",(unsigned)pstCmd->m_ucLen);

    return 1;
}
Exemplo n.º 6
0
void EditMenu::OnRowValueChanged( Row row )
{
	m_sprArrows[0].SetDiffuse( CanGoLeft()?RageColor(1,1,1,1):RageColor(0.2f,0.2f,0.2f,1) );
	m_sprArrows[1].SetDiffuse( CanGoRight()?RageColor(1,1,1,1):RageColor(0.2f,0.2f,0.2f,1) );
	m_sprArrows[0].EnableAnimation( CanGoLeft() );
	m_sprArrows[1].EnableAnimation( CanGoRight() );

	switch( row )
	{
	case ROW_GROUP:
		m_textValue[ROW_GROUP].SetText( SONGMAN->ShortenGroupName(GetSelectedGroup()) );
		m_GroupBanner.LoadFromGroup( GetSelectedGroup() );
		m_GroupBanner.ScaleToClipped( GROUP_BANNER_WIDTH, GROUP_BANNER_HEIGHT );
		m_pSongs.clear();
		SONGMAN->GetSongs( m_pSongs, GetSelectedGroup() );
		m_iSelection[ROW_SONG] = 0;
		// fall through
	case ROW_SONG:
		m_textValue[ROW_SONG].SetText( "" );
		m_SongBanner.LoadFromSong( GetSelectedSong() );
		m_SongBanner.ScaleToClipped( SONG_BANNER_WIDTH, SONG_BANNER_HEIGHT );
		m_SongTextBanner.LoadFromSong( GetSelectedSong() );
		// fall through
	case ROW_STEPS_TYPE:
		m_textValue[ROW_STEPS_TYPE].SetText( GAMEMAN->StepsTypeToString(GetSelectedStepsType()) );
		// fall through
	case ROW_DIFFICULTY:
		m_textValue[ROW_DIFFICULTY].SetText( DifficultyToString(GetSelectedDifficulty()) );
		m_Meter.SetFromSteps( GetSelectedNotes() );
		// fall through
	case ROW_SOURCE_STEPS_TYPE:
		m_textLabel[ROW_SOURCE_STEPS_TYPE].SetDiffuse( GetSelectedNotes()?RageColor(1,1,1,0):RageColor(1,1,1,1) );
		m_textValue[ROW_SOURCE_STEPS_TYPE].SetDiffuse( GetSelectedNotes()?RageColor(1,1,1,0):RageColor(1,1,1,1) );
		m_textValue[ROW_SOURCE_STEPS_TYPE].SetText( GAMEMAN->StepsTypeToString(GetSelectedSourceStepsType()) );
		// fall through
	case ROW_SOURCE_DIFFICULTY:
		m_textLabel[ROW_SOURCE_DIFFICULTY].SetDiffuse( GetSelectedNotes()?RageColor(1,1,1,0):RageColor(1,1,1,1) );
		m_textValue[ROW_SOURCE_DIFFICULTY].SetDiffuse( GetSelectedNotes()?RageColor(1,1,1,0):RageColor(1,1,1,1) );
		m_textValue[ROW_SOURCE_DIFFICULTY].SetText( DifficultyToString(GetSelectedSourceDifficulty()) );
		m_SourceMeter.SetFromSteps( GetSelectedSourceNotes() );
		m_SourceMeter.SetZoomY( GetSelectedNotes()?0.f:1.f );

		m_Actions.clear();
		if( GetSelectedNotes() )
		{
			m_Actions.push_back( ACTION_EDIT );
			m_Actions.push_back( ACTION_DELETE );
		}
		else if( GetSelectedSourceNotes() )
		{
			m_Actions.push_back( ACTION_COPY );
			m_Actions.push_back( ACTION_AUTOGEN );
			m_Actions.push_back( ACTION_BLANK );
		}
		else
		{
			m_Actions.push_back( ACTION_BLANK );
		}
		m_iSelection[ROW_ACTION] = 0;
		// fall through
	case ROW_ACTION:
		m_textValue[ROW_ACTION].SetText( ActionToString(GetSelectedAction()) );
		break;
	default:
		ASSERT(0);	// invalid row
	}
}
Exemplo n.º 7
0
std::string InputConverter::GetAction(int value) {
	std::string ret = ActionToString(static_cast<Action>(value));
	return ret;
}