Beispiel #1
0
void CStateParser::ParseStateDef(CTokenizer &tok,CStateManager &StateManager)
{
	while( !tok.CheckToken("[",false) && !tok.AtEndOfFile() )
	{
		//parse state type
		if( tok.CheckToken("type") )
		{
			if( !tok.CheckToken("=") )
			Error("expected =",tok);
         
			//to get a single char   
			char c=tok.GetToken()[0];
			//make sure we use uperchars
			if(c >= 97)
			c-=32;
            
                  
			switch(c)
			{
			case 'S':
				StateManager.SetStateDefType(stand); 
			break;
            
			case 'C':
				StateManager.SetStateDefType(crouch);     
			break;
                        
			case 'A':
				StateManager.SetStateDefType(air); 
			break;
            
			case 'L':
				StateManager.SetStateDefType(liedown);     
			break;
            
			case 'U':
				StateManager.SetStateDefType(untouch);    
			break;
            
			default:
				Error("Unknown statetype",tok);
			break;
                      
                  
			}

		} else if( tok.CheckToken("movetype") )
		{
			if( !tok.CheckToken("=") )
			Error("expected '=' in line ",tok);
            
			//to get a single char   
			char c=tok.GetToken()[0];
			//make sure we use uperchars
			if(c >= 97)
			c-=32;
           
			switch(c)
			{
			case 'A':
				StateManager.SetStateMoveType(attack);
			break;

			case 'I':
				StateManager.SetStateMoveType(idle);
			break;

			case 'H':
				StateManager.SetStateMoveType(hit);
			break;

			case 'U':
				StateManager.SetStateMoveType(untouch);
			break;
            
			default:
				Error("Unknown movetype",tok);
			break;
            
                  
                  
			}      
           
              
         
		} else if( tok.CheckToken("physics") )
		{
			if( !tok.CheckToken("=") )
			Error("expected =",tok);
         
			//to get a single char   
			char c=tok.GetToken()[0];
			//make sure we use uperchars
			if(c >= 97)
			c-=32;
            
                  
			switch(c)
			{
			case 'S':
				StateManager.SetStatePhysicType(stand); 
			break;
            
			case 'C':
				StateManager.SetStatePhysicType(crouch);     
			break;
                        
			case 'A':
				StateManager.SetStatePhysicType(air); 
			break;
            
			case 'N':
				StateManager.SetStatePhysicType(none);     
			break;
            
			case 'U':
				StateManager.SetStatePhysicType(untouch);    
			break;
            
				default:
				Error("Unknown physic type",tok);
			break;
                      
                  
			}
            
            
            
		} else if( tok.CheckToken("anim") )
		{
		if( !tok.CheckToken("=") )
			Error("expected =",tok);
         
			if(!tok.CheckTokenIsNumber())
			Error("Expected a number for anim",tok);
           
			StateManager.SetStateAnim(tok.GetInt());  
      
            
		} else if( tok.CheckToken("velset") )
		{
		if( !tok.CheckToken("=") )
			Error("expected =",tok);
            
		float x=tok.GetFloat();
       
		if( !tok.CheckToken(",") )
			Error("expected ,",tok);
          
		float y=tok.GetFloat();
       
		StateManager.SetVelSet(x,y);     

		} else if( tok.CheckToken("ctrl") )
		{
			if( !tok.CheckToken("=") )
			Error("expected =",tok);
                                 
			if(!tok.CheckTokenIsNumber())
			Error("Expected a number for ctrl",tok);
            
			StateManager.SetStateCtrl(tok.GetInt());    
            
		} else if( tok.CheckToken("poweradd") )
		{
		if( !tok.CheckToken("=") )
			Error("expected =",tok);
            
		if(!tok.CheckTokenIsNumber())
			Error("Expected a number for poweradd",tok);      
            
		StateManager.SetStatePowerAdd(tok.GetInt());  
            
		} else if( tok.CheckToken("juggle") )
		{
		if( !tok.CheckToken("=") )
			Error("expected =",tok);
            
		if(!tok.CheckTokenIsNumber())
			Error("Expected a number for juggle",tok);
           
		StateManager.SetStateJuggle(tok.GetInt());              
            
		} else if( tok.CheckToken("facep2") )
		{
		if( !tok.CheckToken("=") )
			Error("expected =",tok);
            
		if( !tok.CheckTokenIsNumber() )
			Error("Expected a number for facep2",tok);
            
		StateManager.SetStateFaceP2(tok.GetInt());   
            
		} else if( tok.CheckToken("hitdefpersist") )
		{
		if( !tok.CheckToken("=") )
			Error("expected =",tok);
            
		if( !tok.CheckTokenIsNumber() )
			Error("Expected a number for hitdefpersist",tok); 
            
		StateManager.SetStateHitDefPresit(tok.GetInt());   
            
		} else if( tok.CheckToken("movehitpersist") )
		{
		if( !tok.CheckToken("=") )
			Error("expected =",tok);
            
		if( !tok.CheckTokenIsNumber() )
			Error("Expected a number for movehitpersist",tok);
            
		StateManager.SetMoveHitPresit(tok.GetInt());  
            
		} else if( tok.CheckToken("hitcountpersist") )
		{ 
		if( !tok.CheckToken("=") )
			Error("expected =",tok);
            
		if( !tok.CheckTokenIsNumber() )
			Error("Expected a number for hitcountpersist",tok);
            
		StateManager.SetStateHitCounterPresit(tok.GetInt());  
            
            
		} else if( tok.CheckToken("sprpriority") )
		{
			if( !tok.CheckToken("=") )
			Error("expected =",tok); 
            
			if( !tok.CheckTokenIsNumber() )
			Error("Expected a number for sprpriority",tok);
            
			StateManager.SetSprPriority(tok.GetInt()); 
            
		}else //faile in statedef
		{
         
			throw(CError("Unknown token at line %s",tok.GetToken()));
			break;
		}
     

	}
    
}
Beispiel #2
0
void CStateParser::ParseVarSet( CTokenizer &tok, CStateManager &StateManager )
{
	VARSET *temp=(VARSET*) m_pAlloc->Alloc(sizeof(VARSET));
	//TODO:Check for Required parameters and print error msg
	while( !tok.CheckToken("[", false) && !tok.AtEndOfFile() )
	{
		StateManager.NewInst();
		if( tok.CheckToken("sysvar") )
		{
			if( !tok.CheckToken("(") )
				Error("expected (",tok);  

			int value = tok.GetInt();

			StateManager.AddInstruction(OP_PUSH, value, "#");

			if( !tok.CheckToken(")") )
				Error("expected )",tok);

			if( !tok.CheckToken("=") )
				Error("expected =",tok);

			EvaluateExpression(tok,StateManager);
			temp->common.sysvar = StateManager.GetParamIns();
		}else if( tok.CheckToken("sysfvar") )
		{
			if( !tok.CheckToken("(") )
				Error("expected (",tok);  

			int value = tok.GetInt();

			StateManager.AddInstruction(OP_PUSH, value, "#");

			if( !tok.CheckToken(")") )
				Error("expected )",tok);

			if( !tok.CheckToken("=") )
				Error("expected =",tok);

			EvaluateExpression(tok,StateManager);
			temp->common.sysfvar = StateManager.GetParamIns();     
		}else if ( tok.CheckToken("var") )
		{
			if( !tok.CheckToken("(") )
				Error("expected (",tok);  

			int value = tok.GetInt();

			StateManager.AddInstruction(OP_PUSH, value, "#");

			if( !tok.CheckToken(")") )
				Error("expected )",tok);

			if( !tok.CheckToken("=") )
				Error("expected =",tok);

			EvaluateExpression(tok,StateManager);
			temp->common.var = StateManager.GetParamIns();     

		}else if ( tok.CheckToken("fvar") )
		{
			if( !tok.CheckToken("(") )
				Error("expected (",tok);  

			int value = tok.GetInt();

			StateManager.AddInstruction(OP_PUSH, value, "#");

			if( !tok.CheckToken(")") )
				Error("expected )",tok);

			if( !tok.CheckToken("=") )
				Error("expected =",tok);

			EvaluateExpression(tok,StateManager);
			temp->common.fvar = StateManager.GetParamIns();     

		}             
	}
	StateManager.SetController(temp);
	StateManager.NewInst(); 
}
Beispiel #3
0
void CStateParser::ParseStateFile(const char* strFileName,CStateManager &StateManager,CAllocater *a)
{
     //Set pointer to allocater
     m_pAlloc=a;
     
     CTokenizer tok;
     bool foundState=false;
     
     if( !tok.OpenFile(strFileName) )
        throw(CError("CStateParser::ParseState: File %s not found",strFileName));
        
     tok.SetIsCaseSensitive(false);
     tok.SetReturnNegativeSeperatelyFromNumber(false);
        

     while( !tok.AtEndOfFile() )
     {
          foundState=false;
          
          if( tok.CheckToken("[") )
          {
            
             if( tok.CheckToken("statedef") )
             {
                 foundState=true;
                 if(!tok.CheckTokenIsNumber())
                     Error("Expected a number in statedef block",tok);
                     
                 StateManager.AddStateDef(tok.GetInt());
                
                 //Skip useless stuff
                 while( !tok.AtEndOfLine() )
                         tok.GetToken();
                
                //parse the state def
                ParseStateDef(tok,StateManager);        
                         
                         
             }
             if( tok.CheckToken("state") )
             {
               foundState=true;  
               
               if(!tok.CheckTokenIsNumber())
                     Error("Expected a number in state block",tok);
                 
			   int stateno = tok.GetInt();

			   tok.CheckToken(",");

// 			   if(!tok.CheckTokenIsQuotedString()
// 				   && !tok.CheckTokenIsNumber())
// 				   Error("Expected a number in state block",tok);

			   std::string str = tok.GetToken();
               StateManager.AddState(stateno, str.c_str());
                                  
			   while(!tok.AtEndOfLine())
				   tok.GetToken();  
                         
				PareseState(tok,StateManager);
                   
             }
    
          
          }
          
          //skip useless stuff
          if(!foundState)
             tok.GetToken(); 
            
     }
     
     tok.CloseFile();
}
Beispiel #4
0
bool CCmdManager::LoadCMDFile( const char* file )
{
    int defaultCommandTime = 15;
    int defaultBufferTime = 1;
    
    m_CommandCount = 0;

    CTokenizer tok;
    //changed this to throw a exception
    if( !tok.OpenFile( file ) )
    {
        throw(CError("CCmdManager::LoadCMDFile : Can't open %s",file));
        return false;
    }
        
    // get count first to set up memory        
    while( !tok.AtEndOfFile() )
    {
        bool foundSomething = false;
        if( tok.CheckToken( "command.time" ) )
        {
            foundSomething = true;
            if( !tok.CheckToken( "=" ) )
            {
            }
            if( tok.CheckTokenIsNumber() )
            {
                defaultCommandTime = tok.GetInt();
            }            
        }
        
        if( tok.CheckToken( "command.buffer.time" ) )
        {
            foundSomething = true;
            if( !tok.CheckToken( "=" ) )
            {
            }
            if( tok.CheckTokenIsNumber() )
            {
                defaultBufferTime = tok.GetInt();
            }
        }
        
        if( tok.CheckToken( "[" ) )
        {
            foundSomething = true;
            if( tok.CheckToken( "Command" ) )
            {
                if( tok.CheckToken( "]" ) )
                {
                    m_CommandCount++;
                }       
            }
        }        
        if( !foundSomething )
        {
            tok.GetToken(); // skip it
        }
    }
        
    tok.CloseFile();
 
    if( !tok.OpenFile( file ) )
        return false;
 
    m_Commands = new PLCOMMAND[ m_CommandCount ];
    PLCOMMAND* command = m_Commands;
    
    while( !tok.AtEndOfFile() )
    {
        bool foundCommand = false;
        if( tok.CheckToken( "[" ) )
        {
            if( tok.CheckToken( "Command" ) )
            {
                if( !tok.CheckToken( "]" ) )
                {
                }
                
                foundCommand = true;
                command->nCommandTime = defaultCommandTime;
                command->nBufferTime = defaultBufferTime;
                command->strCommand[0] = 0;
                command->nHowManyCommand = 0;
                
                while( command->nHowManyCommand < MAXCOMMAND && !tok.CheckToken( "[", false ) && !tok.AtEndOfFile() )
                {
                    if( tok.CheckToken( "name" ) )
                    {
                        if( !tok.CheckToken( "=" ) )
                        {
                        }
                        
                        strcpy( command->strCommand, tok.GetToken() );                    
                    }
                    else if( tok.CheckToken( "command" ) )
                    {
                        if( !tok.CheckToken( "=" ) )
                        {
                        } 
                        
                        while( !tok.AtEndOfLine() )
                        {
                            const char* token = tok.GetToken();
                           
                            if( !strcmp( token, "~" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyModifier += PLC_KEYMOD_ON_RELEASE;
                                if( tok.CheckTokenIsNumber() )
                                {
                                    command->nCommand[ command->nHowManyCommand ].gameTicksForHold = tok.GetInt();
                                }
                                else
                                {
                                    command->nCommand[ command->nHowManyCommand ].gameTicksForHold = 1;
                                }
                            }
                            else if( !strcmp( token, "+" ) )
                            {
                            }
                            else if( !strcmp( token, "/" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyModifier += PLC_KEYMOD_MUST_BE_HELD;
                            }
                            else if( !strcmp( token, "$" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyModifier += PLC_KEYMOD_DETECT_AS_4WAY;
                            }
                            else if( !strcmp( token, ">" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyModifier += PLC_KEYMOD_BAN_OTHER_INPUT;
                            }
                            else if( !strcmp( token, "," ) )
                            {
                                command->nHowManyCommand++;
                            }                            
                            else if( !strcmp( token, "D" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_DOWN );
                            }
                            else if( !strcmp( token, "U" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_UP );
                            }
                            else if( !strcmp( token, "B" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_LEFT );
                            }
                            else if( !strcmp( token, "F" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_RIGHT );
                            }
                            else if( !strcmp( token, "DB" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_DOWN ) + PLC_KEYCODE( KEY_LEFT );
                            }
                            else if( !strcmp( token, "DF" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_DOWN ) + PLC_KEYCODE( KEY_RIGHT );
                            }
                            else if( !strcmp( token, "UF" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_UP ) + PLC_KEYCODE( KEY_LEFT );
                            }
                            else if( !strcmp( token, "UB" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_UP ) + PLC_KEYCODE( KEY_LEFT );
                            }
                            else if( !strcmp( token, "a" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_BUTTON_A );
                            }
                            else if( !strcmp( token, "b" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_BUTTON_B );
                            }
                            else if( !strcmp( token, "c" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_BUTTON_C );
                            }
                            else if( !strcmp( token, "x" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_BUTTON_X );
                            }
                            else if( !strcmp( token, "y" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_BUTTON_Y );
                            }
                            else if( !strcmp( token, "z" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_BUTTON_Z );
                            }
                            else if( !strcmp( token, "s" ) )
                            {
                                command->nCommand[ command->nHowManyCommand ].keyCode += PLC_KEYCODE( KEY_BUTTON_START );
                            }
                        }
                        command->nHowManyCommand++;
                    }
                    else if( tok.CheckToken( "time" ) )
                    {
                        if( !tok.CheckToken( "=" ) )
                        {
                        } 
                        
                        if( !tok.CheckTokenIsNumber() )
                        {
                        }
                        
                        command->nCommandTime = tok.GetInt();
                    }
                    else if( tok.CheckToken( "buffer.time" ) )
                    {
                        if( !tok.CheckToken( "=" ) )
                        {
                        } 
                        
                        if( !tok.CheckTokenIsNumber() )
                        {
                        }
                        
                        command->nBufferTime = tok.GetInt();
                    }
                }
                                
                command++;                
            }
        } 
        if( !foundCommand )
            tok.GetToken(); // skip it
    }
 
    tok.CloseFile();
    return true;
}