bool Behaviour::SendMessageV(const char *message , iCelPropertyClass *pc , celData &ret , iCelParameterBlock *params , va_list args) { if(strncmp(message , "pccommandinput_" , 15) == 0) { csRef pcmechobj = CEL_QUERY_PROPCLASS_ENT(entity , iPcMechanicsObject); if(!pcmechobj) return false; // it isn't clear to me what affect applying the force // in object mode vs world mode does - object mode just acts weirdly // and world mode doesn't respect my objects modifed axis if(!strcmp(message+15 , "forward1")) pcmechobj->AddForceDuration(csVector3(0,0,-25),true,csVector3(0,0,0),0.2); else if(!strcmp(message+15 , "forward_")) pcmechobj->AddForceDuration(csVector3(0,0,-2.5),true,csVector3(0,0,0),0.2); else if(!strcmp(message+15 , "backward1")) pcmechobj->AddForceDuration(csVector3(0,0,25),true,csVector3(0,0,0),0.2); else if(!strcmp(message+15 , "backward_")) pcmechobj->AddForceDuration(csVector3(0,0,2.5),true,csVector3(0,0,0),0.2); else if(!strcmp(message+15 , "strafeleft1")) pcmechobj->AddForceDuration(csVector3(25,0,0),true,csVector3(0,0,0),0.2); else if(!strcmp(message+15 , "strafeleft_")) pcmechobj->AddForceDuration(csVector3(2.5,0,0),true,csVector3(0,0,0),0.2); else if(!strcmp(message+15 , "straferight1")) pcmechobj->AddForceDuration(csVector3(-25,0,0),true,csVector3(0,0,0),0.2); else if(!strcmp(message+15 , "straferight_")) pcmechobj->AddForceDuration(csVector3(-2.5,0,0),true,csVector3(0,0,0),0.2); else if(!strcmp(message+15 , "rotateleft1")) pcmechobj->SetAngularVelocity(csVector3(0,-1,0)); else if(!strcmp(message+15 , "rotateleft0")) pcmechobj->SetAngularVelocity(csVector3(0,0,0)); else if(!strcmp(message+15 , "rotateright1")) pcmechobj->SetAngularVelocity(csVector3(0,1,0)); else if(!strcmp(message+15 , "rotateright0")) pcmechobj->SetAngularVelocity(csVector3(0,0,0)); return true; } return false; }