void Console::SetVisible(bool enable) { Input* input = GetSubsystem<Input>(); background_->SetVisible(enable); closeButton_->SetVisible(enable); if (enable) { // Check if we have receivers for E_CONSOLECOMMAND every time here in case the handler is being added later dynamically bool hasInterpreter = PopulateInterpreter(); commandLine_->SetVisible(hasInterpreter); if (hasInterpreter && focusOnShow_) GetSubsystem<UI>()->SetFocusElement(lineEdit_); // Ensure the background has no empty space when shown without the lineedit background_->SetHeight(background_->GetMinHeight()); // Show OS mouse savedMouseVisibility_ = input->IsMouseVisible(); input->SetMouseVisible(true); } else { rowContainer_->SetFocus(false); interpreters_->SetFocus(false); lineEdit_->SetFocus(false); // Restore OS mouse visibility input->SetMouseVisible(savedMouseVisibility_); } }
void DebugCameraController::Update(float timeStep) { // Do not move if the UI has a focused element if (GetUI()->GetFocusElement()) return; // Do not move if interacting with UI controls if (GetSystemUI()->IsAnyItemActive()) return; Input* input = GetInput(); // Movement speed as world units per second float moveSpeed_ = speed_; if (input->GetKeyDown(KEY_SHIFT)) { moveSpeed_ *= 2; if (input->GetKeyPress(KEY_KP_PLUS)) speed_ += 1.f; else if (input->GetKeyPress(KEY_KP_MINUS)) speed_ -= 1.f; } if (input->GetMouseButtonDown(MOUSEB_RIGHT)) { IntVector2 delta = input->GetMouseMove(); if (input->IsMouseVisible() && delta != IntVector2::ZERO) input->SetMouseVisible(false); auto yaw = GetNode()->GetRotation().EulerAngles().x_; if ((yaw > -90.f && yaw < 90.f) || (yaw <= -90.f && delta.y_ > 0) || (yaw >= 90.f && delta.y_ < 0)) GetNode()->RotateAround(Vector3::ZERO, Quaternion(mouseSensitivity_ * delta.y_, Vector3::RIGHT), TS_LOCAL); GetNode()->RotateAround(GetNode()->GetPosition(), Quaternion(mouseSensitivity_ * delta.x_, Vector3::UP), TS_WORLD); } else if (!input->IsMouseVisible()) input->SetMouseVisible(true); // Read WASD keys and move the camera scene node to the corresponding direction if they are pressed if (input->GetKeyDown(KEY_W)) GetNode()->Translate(Vector3::FORWARD * moveSpeed_ * timeStep); if (input->GetKeyDown(KEY_S)) GetNode()->Translate(Vector3::BACK * moveSpeed_ * timeStep); if (input->GetKeyDown(KEY_A)) GetNode()->Translate(Vector3::LEFT * moveSpeed_ * timeStep); if (input->GetKeyDown(KEY_D)) GetNode()->Translate(Vector3::RIGHT * moveSpeed_ * timeStep); }
void Labyrinth::MoveCamera(float timeStep) { // Do not move if the UI has a focused element (the console) if (GetSubsystem<UI>()->GetFocusElement()) return; Input* input = GetSubsystem<Input>(); input->SetMouseVisible(false); // Movement speed as world units per second const float MOVE_SPEED = 20.0f; // Mouse sensitivity as degrees per pixel const float MOUSE_SENSITIVITY = 0.1f; // Use this frame's mouse motion to adjust camera node yaw and pitch. Clamp the pitch between -90 and 90 degrees IntVector2 mouseMove = input->GetMouseMove(); yaw_ += MOUSE_SENSITIVITY * mouseMove.x_; pitch_ += MOUSE_SENSITIVITY * mouseMove.y_; pitch_ = Clamp(pitch_, -90.0f, 90.0f); // Construct new orientation for the camera scene node from yaw and pitch. Roll is fixed to zero cameraNode_->SetRotation(Quaternion(pitch_, yaw_, 0.0f)); // Read WASD keys and move the camera scene node to the corresponding direction if they are pressed if (input->GetKeyDown(KEY_UP)) cameraNode_->Translate(Vector3::FORWARD * MOVE_SPEED * timeStep); if (input->GetKeyDown(KEY_DOWN)) cameraNode_->Translate(Vector3::BACK * MOVE_SPEED * timeStep); if (input->GetKeyDown(KEY_LEFT)) cameraNode_->Translate(Vector3::LEFT * MOVE_SPEED * timeStep); if (input->GetKeyDown(KEY_RIGHT)) cameraNode_->Translate(Vector3::RIGHT * MOVE_SPEED * timeStep); }
void DebugCameraController2D::Update(float timeStep) { // Do not move if the UI has a focused element if (GetUI()->GetFocusElement()) return; // Do not move if interacting with UI controls if (GetSystemUI()->IsAnyItemActive()) return; Input* input = GetInput(); // Movement speed as world units per second float moveSpeed_ = speed_; if (input->GetKeyDown(KEY_SHIFT)) { moveSpeed_ *= 2; if (input->GetKeyPress(KEY_KP_PLUS)) speed_ += 1.f; else if (input->GetKeyPress(KEY_KP_MINUS)) speed_ -= 1.f; } if (input->GetMouseButtonDown(MOUSEB_RIGHT)) { IntVector2 delta = input->GetMouseMove(); if (input->IsMouseVisible() && delta != IntVector2::ZERO) input->SetMouseVisible(false); GetNode()->Translate2D(Vector2{(float)delta.x_ * -1.f, (float)delta.y_} * moveSpeed_ * timeStep); } else if (!input->IsMouseVisible()) input->SetMouseVisible(true); // Read WASD keys and move the camera scene node to the corresponding direction if they are pressed if (input->GetKeyDown(KEY_W)) GetNode()->Translate(Vector3::UP * moveSpeed_ * timeStep); if (input->GetKeyDown(KEY_S)) GetNode()->Translate(Vector3::DOWN * moveSpeed_ * timeStep); if (input->GetKeyDown(KEY_A)) GetNode()->Translate(Vector3::LEFT * moveSpeed_ * timeStep); if (input->GetKeyDown(KEY_D)) GetNode()->Translate(Vector3::RIGHT * moveSpeed_ * timeStep); }
void IDE::Start() { // cache subsystems cache_ = GetSubsystem<ResourceCache>(); ui_ = GetSubsystem<UI>(); graphics_ = GetSubsystem<Graphics>(); context_->RegisterSubsystem(new ProjectManager(context_)); prjMng_ = GetSubsystem<ProjectManager>(); prjMng_->SetProjectRootFolder(settings_->projectsRootDir_); // Get default style XMLFile* xmlFile = cache_->GetResource<XMLFile>("UI/DefaultStyle.xml"); XMLFile* styleFile = cache_->GetResource<XMLFile>("UI/IDEStyle.xml"); XMLFile* iconstyle = cache_->GetResource<XMLFile>("UI/IDEIcons.xml"); ui_->GetRoot()->SetDefaultStyle(styleFile); // Create console console_ = engine_->CreateConsole(); console_->SetDefaultStyle(xmlFile); console_->SetAutoVisibleOnError(true); // Create debug HUD. debugHud_ = engine_->CreateDebugHud(); debugHud_->SetDefaultStyle(xmlFile); // Subscribe key down event SubscribeToEvent(E_KEYDOWN, HANDLER(IDE, HandleKeyDown)); SubscribeToEvent(E_MENUBAR_ACTION, HANDLER(IDE, HandleMenuBarAction)); SubscribeToEvent(E_OPENPROJECT, HANDLER(IDE, HandleOpenProject)); // Create Cursor Cursor* cursor_ = new Cursor(context_); cursor_->SetStyleAuto(xmlFile); ui_->SetCursor(cursor_); if (GetPlatform() == "Android" || GetPlatform() == "iOS") ui_->GetCursor()->SetVisible(false); Input* input = GetSubsystem<Input>(); // Use OS mouse without grabbing it input->SetMouseVisible(true); // create main ui rootUI_ = ui_->GetRoot()->CreateChild<UIElement>("IDERoot"); rootUI_->SetSize(ui_->GetRoot()->GetSize()); rootUI_->SetTraversalMode(TM_DEPTH_FIRST); // This is needed for root-like element to prevent artifacts rootUI_->SetDefaultStyle(styleFile); editor_ = new Editor(context_); editor_->Create(NULL, NULL); ShowWelcomeScreen(); }
SampleSelector::SampleSelector(Context* context) : Object(context) { UIView* view = FeatureExamples::GetUIView(); UILayout* rootLayout = new UILayout(context_); rootLayout->SetAxis(UI_AXIS_Y); rootLayout->SetRect(view->GetRect()); view->AddChild(rootLayout); const char* examples[] = { "Hello World", "Hello GUI", "Render to Texture", "2D Sprite", "2D Physics", "2D Constraints", "2D Rope", "2D Spriter Animation", "3D Static Scene", "3D Animating Scene", "3D Light Animation", "3D Billboards", "3D Particles", "3D Physics", "3D Skeletal Animation", "3D Decals", "3D Character", "3D Dynamic Geometry", "3D Ragdolls", "3D Vehicle Demo", "3D Crowd Navigation", "3D Water", "3D Multiple Viewports" }; for (size_t i = 0; i < sizeof(examples) / sizeof(examples[0]); i++) { UIButton* button = new UIButton(context_); button->SetLayoutMinWidth(128); button->SetText(examples[i]); button->SetId(examples[i]); button->SubscribeToEvent(button, E_WIDGETEVENT, ATOMIC_HANDLER(SampleSelector, HandleWidgetEvent)); rootLayout->AddChild(button); } Input* input = GetSubsystem<Input>(); input->SetMouseVisible(true); input->SetMouseMode(MM_FREE); // Subscribe key up event SubscribeToEvent(E_KEYUP, ATOMIC_HANDLER(SampleSelector, HandleKeyUp)); context->RegisterSubsystem(this); }
void Sample::Start() { context_->RegisterSubsystem(new NanoGUI(context_)); NanoGUI* nanogui = GetSubsystem<NanoGUI>(); if (nanogui) { nanogui->Initialize(); } cache_ = GetSubsystem<ResourceCache>(); ui_ = GetSubsystem<UI>(); graphics_ = GetSubsystem<Graphics>(); ////////////////////////////////////////////////////////////////////////// // Get default styles XMLFile* styleFile = cache_->GetResource<XMLFile>("UI/DefaultStyle.xml"); ui_->GetRoot()->SetDefaultStyle(styleFile); // create main ui rootUI_ = ui_->GetRoot()->CreateChild<UIElement>("IDERoot"); rootUI_->SetSize(ui_->GetRoot()->GetSize()); rootUI_->SetTraversalMode(TM_DEPTH_FIRST); // This is needed for root-like element to prevent artifacts rootUI_->SetDefaultStyle(styleFile); ////////////////////////////////////////////////////////////////////////// /// Create console console_ = engine_->CreateConsole(); console_->SetDefaultStyle(styleFile); ////////////////////////////////////////////////////////////////////////// /// Create debug HUD. debugHud_ = engine_->CreateDebugHud(); debugHud_->SetDefaultStyle(styleFile); ////////////////////////////////////////////////////////////////////////// /// Subscribe key down event SubscribeToEvent(E_KEYDOWN, HANDLER(Sample, HandleKeyDown)); // edit clear color, set background color Renderer* renderer = GetSubsystem<Renderer>(); Zone* zone = renderer->GetDefaultZone(); zone->SetFogColor(Color(0.3f, 0.3f, 0.4f)); // Set background color for the scene ////////////////////////////////////////////////////////////////////////// /// Create Cursor // Cursor* cursor_ = new Cursor(context_); // cursor_->SetStyleAuto(styleFile); // ui_->SetCursor(cursor_); // if (GetPlatform() == "Android" || GetPlatform() == "iOS") // ui_->GetCursor()->SetVisible(false); /// Show Platform Cursor Input* input = GetSubsystem<Input>(); input->SetMouseVisible(true); }
void GameApplication::CreateUI() { Input* input = GetSubsystem<Input>(); input->SetMouseVisible(true); ResourceCache* cache = GetSubsystem<ResourceCache>(); UI* ui = GetSubsystem<UI>(); // Create a Cursor UI element because we want to be able to hide and show it at will. When hidden, the mouse cursor will // control the camera, and when visible, it will point the raycast target XMLFile* style = cache->GetResource<XMLFile>("UI/DefaultStyle.xml"); SharedPtr<Cursor> cursor(new Cursor(context_)); cursor->SetStyleAuto(style); ui->SetCursor(cursor); // Set starting position of the cursor at the rendering window center Graphics* graphics = GetSubsystem<Graphics>(); cursor->SetPosition(graphics->GetWidth() / 2, graphics->GetHeight() / 2); // Construct new Text object, set string to display and font to use scoreText = ui->GetRoot()->CreateChild<Text>(); scoreText->SetFont(cache->GetResource<Font>("Fonts/Anonymous Pro.ttf"), 15); // The text has multiple rows. Center them in relation to each other scoreText->SetTextAlignment(HA_CENTER); scoreText->SetColor(Color::BLUE); scoreText->SetTextEffect(TextEffect::TE_SHADOW); // Position the text relative to the screen center scoreText->SetHorizontalAlignment(HA_CENTER); scoreText->SetVerticalAlignment(VA_CENTER); scoreText->SetPosition(0, ui->GetRoot()->GetHeight() / 4 + 80); //开始按钮 //UIButton* btnStart = new UIButton(context_); //btnStart->SetPosition(100,100); //btnStart->SetSize(120,50); //ui->GetRoot()->AddChild(btnStart); Button* btnStart = CreateButton(80,100,120,50,"Start");// ui->GetRoot()->CreateChild<Button>(); btnStart->SetName("btnStart"); btnStart->SetMinHeight(24); btnStart->SetStyleAuto(); btnStart->SetPosition(100,100); btnStart->SetSize(120,50); Text* buttonText = btnStart->CreateChild<Text>(); buttonText->SetAlignment(HA_CENTER, VA_CENTER); buttonText->SetColor(Color::BLUE); Font* font = cache->GetResource<Font>("Fonts/Anonymous Pro.ttf"); buttonText->SetFont(font, 12); buttonText->SetText("Start"); SubscribeToEvent(btnStart,E_PRESSED,HANDLER(GameApplication,OnButtonStartClick)); UpdateScore(); }
void AEEditorCommon::Start() { Input* input = GetSubsystem<Input>(); input->SetMouseVisible(true); // Register IPC system context_->RegisterSubsystem(new IPC(context_)); // Instantiate and register the Javascript subsystem Javascript* javascript = new Javascript(context_); context_->RegisterSubsystem(javascript); vm_ = javascript->InstantiateVM("MainVM"); vm_->InitJSContext(); }
void InGameEditor::SetVisible(bool enable) { if (enable != rootUI_->IsVisible()) { Input* input = GetSubsystem<Input>(); rootUI_->SetVisible(enable); if (enable) { // Show OS mouse input->SetMouseVisible(true, true); using namespace StartInGameEditor; VariantMap& newEventData = GetEventDataMap(); SendEvent(E_START_INGAMEEDITOR_, newEventData); /// Subscribe input events SubscribeToEvent(E_KEYDOWN, URHO3D_HANDLER(InGameEditor, HandleKeyDown)); SubscribeToEvent(E_KEYUP, URHO3D_HANDLER(InGameEditor, HandleKeyUp)); // Subscribe HandleUpdate() function for processing update events SubscribeToEvent(E_UPDATE, URHO3D_HANDLER(InGameEditor, HandleUpdate)); SetMainEditor(PluginScene3DEditor::GetTypeStatic()); } else { // Restore OS mouse visibility input->ResetMouseVisible(); ui_->SetFocusElement(NULL); using namespace QuitInGameEditor; VariantMap& newEventData = GetEventDataMap(); SendEvent(E_QUIT_INGAMEEDITOR_, newEventData); /// Subscribe input events UnsubscribeFromEvent(E_KEYDOWN); UnsubscribeFromEvent(E_KEYUP); UnsubscribeFromEvent(E_UPDATE); if (mainEditorPlugin_) { // mainEditorPlugin_->Leave(); } } } }
void Sample::Start() { cache_ = GetSubsystem<ResourceCache>(); ui_ = GetSubsystem<UI>(); graphics_ = GetSubsystem<Graphics>(); ////////////////////////////////////////////////////////////////////////// // Get default styles XMLFile* styleFile = cache_->GetResource<XMLFile>("UI/DefaultStyle.xml"); ui_->GetRoot()->SetDefaultStyle(styleFile); // create main ui rootUI_ = ui_->GetRoot()->CreateChild<UIElement>("IDERoot"); rootUI_->SetSize(ui_->GetRoot()->GetSize()); rootUI_->SetTraversalMode(TM_DEPTH_FIRST); // This is needed for root-like element to prevent artifacts rootUI_->SetDefaultStyle(styleFile); ////////////////////////////////////////////////////////////////////////// /// Create console console_ = engine_->CreateConsole(); console_->SetDefaultStyle(styleFile); ////////////////////////////////////////////////////////////////////////// /// Create debug HUD. debugHud_ = engine_->CreateDebugHud(); debugHud_->SetDefaultStyle(styleFile); ////////////////////////////////////////////////////////////////////////// /// Subscribe key down event SubscribeToEvent(E_KEYDOWN, HANDLER(Sample, HandleKeyDown)); // edit clear color, set background color Renderer* renderer = GetSubsystem<Renderer>(); Zone* zone = renderer->GetDefaultZone(); zone->SetFogColor(Color(0.3f, 0.3f, 0.4f)); // Set background color for the scene ////////////////////////////////////////////////////////////////////////// /// Create Cursor // Cursor* cursor_ = new Cursor(context_); // cursor_->SetStyleAuto(styleFile); // ui_->SetCursor(cursor_); // if (GetPlatform() == "Android" || GetPlatform() == "iOS") // ui_->GetCursor()->SetVisible(false); /// Show Platform Cursor Input* input = GetSubsystem<Input>(); input->SetMouseVisible(true); ////////////////////////////////////////////////////////////////////////// /// create an svg image rootUI_->AddChild(CreateSVGSprite("GameData/svg/23.svg")); Sprite* drawing = CreateSVGSprite("GameData/svg/drawing.svg"); if (drawing) { // Set logo sprite hot spot drawing->SetHotSpot(0, drawing->GetHeight()); drawing->SetAlignment(HA_LEFT, VA_BOTTOM); rootUI_->AddChild(drawing); } Sprite* nano = CreateSVGSprite("GameData/svg/nano.svg"); if (nano) { // Set logo sprite hot spot nano->SetHotSpot(0, -nano->GetHeight()); nano->SetAlignment(HA_LEFT, VA_TOP); rootUI_->AddChild(nano); } }
void Sample::Start() { cache_ = GetSubsystem<ResourceCache>(); ui_ = GetSubsystem<UI>(); graphics_ = GetSubsystem<Graphics>(); ////////////////////////////////////////////////////////////////////////// // Get default styles XMLFile* styleFile = cache_->GetResource<XMLFile>("UI/IDEStyle.xml"); XMLFile* iconstyleFile = cache_->GetResource<XMLFile>("UI/EditorIcons.xml"); ui_->GetRoot()->SetDefaultStyle(styleFile); // create scene main ui rootUI_ = ui_->GetRoot()->CreateChild<UIElement>("UI"); rootUI_->SetSize(ui_->GetRoot()->GetSize()); rootUI_->SetTraversalMode(TM_DEPTH_FIRST); // This is needed for root-like element to prevent artifacts rootUI_->SetDefaultStyle(styleFile); // All user - created UI elements have lowest priority so they do not cover editor's windows rootUI_->SetPriority(-1000); ////////////////////////////////////////////////////////////////////////// /// Create HierarchyWindow uihierarchyWindow_ = rootUI_->CreateChild<HierarchyWindow>("UIHierarchyWindow"); uihierarchyWindow_->SetSize(200, 200); uihierarchyWindow_->SetDefaultStyle(styleFile); uihierarchyWindow_->SetStyleAuto(); uihierarchyWindow_->SetMovable(true); uihierarchyWindow_->SetIconStyle(iconstyleFile); uihierarchyWindow_->SetTitle("UI Hierarchy"); uihierarchyWindow_->SetAlignment(HA_RIGHT, VA_TOP); /// \todo // dont know why the auto style does not work ... uihierarchyWindow_->SetTexture(cache_->GetResource<Texture2D>("Textures/UI.png")); uihierarchyWindow_->SetImageRect(IntRect(48, 0, 64, 16)); uihierarchyWindow_->SetBorder(IntRect(4, 4, 4, 4)); uihierarchyWindow_->SetResizeBorder(IntRect(8, 8, 8, 8)); sceneHierarchyWindow_ = rootUI_->CreateChild<HierarchyWindow>("SceneHierarchyWindow"); sceneHierarchyWindow_->SetSize(200, 200); sceneHierarchyWindow_->SetDefaultStyle(styleFile); sceneHierarchyWindow_->SetStyleAuto(); sceneHierarchyWindow_->SetMovable(true); sceneHierarchyWindow_->SetIconStyle(iconstyleFile); sceneHierarchyWindow_->SetTitle("Scene Hierarchy"); sceneHierarchyWindow_->SetAlignment(HA_LEFT, VA_TOP); /// \todo // dont know why the auto style does not work ... sceneHierarchyWindow_->SetTexture(cache_->GetResource<Texture2D>("Textures/UI.png")); sceneHierarchyWindow_->SetImageRect(IntRect(48, 0, 64, 16)); sceneHierarchyWindow_->SetBorder(IntRect(4, 4, 4, 4)); sceneHierarchyWindow_->SetResizeBorder(IntRect(8, 8, 8, 8)); ////////////////////////////////////////////////////////////////////////// /// Create console console_ = engine_->CreateConsole(); console_->SetDefaultStyle(styleFile); ////////////////////////////////////////////////////////////////////////// /// Create debug HUD. debugHud_ = engine_->CreateDebugHud(); debugHud_->SetDefaultStyle(styleFile); ////////////////////////////////////////////////////////////////////////// /// Subscribe key down event SubscribeToEvent(E_KEYDOWN, HANDLER(Sample, HandleKeyDown)); // edit clear color, set background color Renderer* renderer = GetSubsystem<Renderer>(); Zone* zone = renderer->GetDefaultZone(); zone->SetFogColor(Color(0.3f, 0.3f, 0.4f)); // Set background color for the scene ////////////////////////////////////////////////////////////////////////// /// Create Cursor // Cursor* cursor_ = new Cursor(context_); // cursor_->SetStyleAuto(styleFile); // ui_->SetCursor(cursor_); // if (GetPlatform() == "Android" || GetPlatform() == "iOS") // ui_->GetCursor()->SetVisible(false); /// Show Platform Cursor Input* input = GetSubsystem<Input>(); input->SetMouseVisible(true); // Create the scene content CreateScene(); // Create the UI content CreateInstructions(); // Setup the viewport for displaying the scene SetupViewport(); // Hook up to the frame update and render post-update events SubscribeToEvents(); uihierarchyWindow_->SetUIElement(rootUI_); }