void ScrollBarRenderComponent::OnAdd(Entity *pEnt) { EntityComponent::OnAdd(pEnt); //shared with the rest of the entity m_pPos2d = &GetParent()->GetVar("pos2d")->GetVector2(); m_pSize2d = &GetParent()->GetVar("size2d")->GetVector2(); m_pScale2d = &GetParent()->GetVarWithDefault("scale2d", Variant(1.0f, 1.0f))->GetVector2(); m_pAlpha = &GetParent()->GetVarWithDefault("alpha", Variant(0.3f))->GetFloat(); m_pColor = &GetParent()->GetVarWithDefault("color", Variant(MAKE_RGBA(224,188,130,255)))->GetUINT32(); m_pColorMod = &GetParent()->GetVarWithDefault("colorMod", Variant(MAKE_RGBA(255,255,255,255)))->GetUINT32(); m_pFileName = &GetVar("fileName")->GetString(); //local to us GetParent()->GetFunction("OnUpdate")->sig_function.connect(1, boost::bind(&ScrollBarRenderComponent::OnUpdate, this, _1)); GetParent()->GetFunction("OnRender")->sig_function.connect(1, boost::bind(&ScrollBarRenderComponent::OnRender, this, _1)); GetParent()->GetFunction("OnOverStart")->sig_function.connect(1, boost::bind(&ScrollBarRenderComponent::OnTargetOverStart, this, _1)); GetParent()->GetFunction("OnOverEnd")->sig_function.connect(1, boost::bind(&ScrollBarRenderComponent::OnTargetOverEnd, this, _1)); //if "fileName" is set, we'll know about it here GetVar("fileName")->GetSigOnChanged()->connect(boost::bind(&ScrollBarRenderComponent::OnFileNameChanged, this, _1)); GetVar("fileName")->Set("interface/scroll_bar_caps.rttex"); //default EntityComponent *pScrollComp = GetParent()->GetComponentByName("Scroll"); if (!pScrollComp) { //assume our stuff will get set from the outside m_pBoundsRect = &GetParent()->GetVar("boundsRect")->GetRect(); m_pProgress2d = &GetParent()->GetVar("progress2d")->GetVector2(); } else { m_bUsingScrollComponent = true; //I keep track of this becuse it looks like the bounds is calculated a little //differently with scroll components.. ?? m_pBoundsRect = &pScrollComp->GetVar("boundsRect")->GetRect(); m_pProgress2d = &pScrollComp->GetVar("progress2d")->GetVector2(); } }
void InterpolateComponent::OnVarNameChanged(Variant *pDataObject) { if (m_pComponentName->length()) { EntityComponent * pComp = GetParent()->GetComponentByName(*m_pComponentName); if (!pComp) { LogError("InterpolateComponent %s is unable to find component %s to set its var %s", GetName().c_str(), m_pComponentName->c_str(), pDataObject->GetString().c_str()); assert(!"Check out your log!"); return; } m_pVar = pComp->GetVar(pDataObject->GetString()); // If the target component gets deleted we mustn't access its variants anymore pComp->GetFunction("OnDelete")->sig_function.connect(1, boost::bind(&InterpolateComponent::NullifyVarPointer, this, _1)); } else { m_pVar = GetParent()->GetVar(pDataObject->GetString()); } }
void App::Update() { //game can think here. The baseApp::Update() will run Update() on all entities, if any are added. The only one //we use in this example is one that is watching for the Back (android) or Escape key to quit that we setup earlier. BaseApp::Update(); if (!m_bDidPostInit) { //stuff I want loaded during the first "Update" m_bDidPostInit = true; //for android, so the back key (or escape on windows) will quit out of the game Entity *pEnt = GetEntityRoot()->AddEntity(new Entity); EntityComponent *pComp = pEnt->AddComponent(new CustomInputComponent); //tell the component which key has to be hit for it to be activated pComp->GetVar("keycode")->Set(uint32(VIRTUAL_KEY_BACK)); //attach our function so it is called when the back key is hit pComp->GetFunction("OnActivated")->sig_function.connect(1, boost::bind(&App::OnExitApp, this, _1)); //nothing will happen unless we give it input focus pEnt->AddComponent(new FocusInputComponent); //ACCELTEST: To test the accelerometer uncomment below: (will print values to the debug output) //SetAccelerometerUpdateHz(25); //default is 0, disabled //GetBaseApp()->m_sig_accel.connect(1, boost::bind(&App::OnAccel, this, _1)); //TRACKBALL/ARCADETEST: Uncomment below to see log messages on trackball/key movement input pComp = pEnt->AddComponent(new ArcadeInputComponent); GetBaseApp()->m_sig_arcade_input.connect(1, boost::bind(&App::OnArcadeInput, this, _1)); //these arrow keys will be triggered by the keyboard, if applicable AddKeyBinding(pComp, "Left", VIRTUAL_KEY_DIR_LEFT, VIRTUAL_KEY_DIR_LEFT); AddKeyBinding(pComp, "Right", VIRTUAL_KEY_DIR_RIGHT, VIRTUAL_KEY_DIR_RIGHT); AddKeyBinding(pComp, "Up", VIRTUAL_KEY_DIR_UP, VIRTUAL_KEY_DIR_UP); AddKeyBinding(pComp, "Down", VIRTUAL_KEY_DIR_DOWN, VIRTUAL_KEY_DIR_DOWN); AddKeyBinding(pComp, "Shift", VIRTUAL_KEY_CONTROL, VIRTUAL_KEY_CONTROL); AddKeyBinding(pComp, "Fire", VIRTUAL_KEY_CONTROL, VIRTUAL_KEY_GAME_FIRE); //INPUT TEST - wire up input to some functions to manually handle. AppInput will use LogMsg to //send them to the log. (Each device has a way to view a debug log in real-time) GetBaseApp()->m_sig_input.connect(&AppInput); /* //file handling test, if TextScanner.h is included at the top.. TextScanner t; t.m_lines.push_back("Testing 123"); t.m_lines.push_back("F**k ya'll!"); t.m_lines.push_back("Whoopsopsop!"); LogMsg("Saving file..."); t.SaveFile("temp.txt"); TextScanner b; b.LoadFile("temp.txt"); b.DumpToLog(); */ } //game is thinking. if (g_game->game_state_ == 1) //we update the objects { g_game->update(); } }