|
|
@@ -0,0 +1,138 @@
|
|
|
+//
|
|
|
+// Copyright (c) 2008-2013 the Urho3D project.
|
|
|
+//
|
|
|
+// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
+// of this software and associated documentation files (the "Software"), to deal
|
|
|
+// in the Software without restriction, including without limitation the rights
|
|
|
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
+// copies of the Software, and to permit persons to whom the Software is
|
|
|
+// furnished to do so, subject to the following conditions:
|
|
|
+//
|
|
|
+// The above copyright notice and this permission notice shall be included in
|
|
|
+// all copies or substantial portions of the Software.
|
|
|
+//
|
|
|
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
+// THE SOFTWARE.
|
|
|
+//
|
|
|
+
|
|
|
+#include "Application.h"
|
|
|
+#include "Console.h"
|
|
|
+#include "DebugHud.h"
|
|
|
+#include "Engine.h"
|
|
|
+#include "InputEvents.h"
|
|
|
+#include "ResourceCache.h"
|
|
|
+#include "Texture2D.h"
|
|
|
+#include "UI.h"
|
|
|
+#include "XMLFile.h"
|
|
|
+
|
|
|
+Sample::Sample(Context* context) :
|
|
|
+ Application(context)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+int Sample::Setup()
|
|
|
+{
|
|
|
+ // Modify engine startup parameters
|
|
|
+ engineParameters_["WindowTitle"] = GetTypeName();
|
|
|
+ engineParameters_["LogName"] = GetTypeName() + ".log";
|
|
|
+ engineParameters_["FullScreen"] = false;
|
|
|
+
|
|
|
+ // Go on to engine initialization
|
|
|
+ return EXIT_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+int Sample::Start()
|
|
|
+{
|
|
|
+ // Create logo
|
|
|
+ CreateLogo();
|
|
|
+
|
|
|
+ // Create console and debug HUD
|
|
|
+ CreateConsoleAndDebugHud();
|
|
|
+
|
|
|
+ // Subscribe key down event
|
|
|
+ SubscribeToEvent(E_KEYDOWN, HANDLER(Sample, HandleKeyDown));
|
|
|
+
|
|
|
+ // Go on to main loop
|
|
|
+ return EXIT_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+void Sample::SetLogoVisible(bool enable)
|
|
|
+{
|
|
|
+ if (logoSprite_)
|
|
|
+ logoSprite_->SetVisible(enable);
|
|
|
+}
|
|
|
+
|
|
|
+void Sample::CreateLogo()
|
|
|
+{
|
|
|
+ // Get logo texture
|
|
|
+ ResourceCache* cache = GetSubsystem<ResourceCache>();
|
|
|
+ Texture2D* logoTexture = cache->GetResource<Texture2D>("Textures/LogoLarge.png");
|
|
|
+ if (!logoTexture)
|
|
|
+ return;
|
|
|
+
|
|
|
+ // Create logo sprite and add to the UI layout
|
|
|
+ UI* ui = GetSubsystem<UI>();
|
|
|
+ logoSprite_ = ui->GetRoot()->CreateChild<Sprite>();
|
|
|
+
|
|
|
+ // Set logo sprite texture
|
|
|
+ logoSprite_->SetTexture(logoTexture);
|
|
|
+
|
|
|
+ int textureWidth = logoTexture->GetWidth();
|
|
|
+ int textureHeight = logoTexture->GetHeight();
|
|
|
+
|
|
|
+ // Set logo sprite scale
|
|
|
+ logoSprite_->SetScale(256.0f / textureWidth);
|
|
|
+
|
|
|
+ // Set logo sprite size
|
|
|
+ logoSprite_->SetSize(textureWidth, textureHeight);
|
|
|
+
|
|
|
+ // Set logo sprite hot spot
|
|
|
+ logoSprite_->SetHotSpot(0, textureHeight);
|
|
|
+
|
|
|
+ // Set logo sprite alignment
|
|
|
+ logoSprite_->SetAlignment(HA_LEFT, VA_BOTTOM);
|
|
|
+}
|
|
|
+
|
|
|
+void Sample::CreateConsoleAndDebugHud()
|
|
|
+{
|
|
|
+ // Get default style
|
|
|
+ ResourceCache* cache = GetSubsystem<ResourceCache>();
|
|
|
+ XMLFile* xmlFile = cache->GetResource<XMLFile>("UI/DefaultStyle.xml");
|
|
|
+ if (!xmlFile)
|
|
|
+ return;
|
|
|
+
|
|
|
+ // Create console
|
|
|
+ Console* console = engine_->CreateConsole();
|
|
|
+ console->SetDefaultStyle(xmlFile);
|
|
|
+
|
|
|
+ // Create debug HUD.
|
|
|
+ DebugHud* debugHud = engine_->CreateDebugHud();
|
|
|
+ debugHud->SetDefaultStyle(xmlFile);
|
|
|
+}
|
|
|
+
|
|
|
+void Sample::HandleKeyDown(StringHash eventType, VariantMap& eventData)
|
|
|
+{
|
|
|
+ using namespace KeyDown;
|
|
|
+
|
|
|
+ int key = eventData[P_KEY].GetInt();
|
|
|
+ if (key == KEY_ESC)
|
|
|
+ {
|
|
|
+ if (!GetSubsystem<UI>()->GetFocusElement())
|
|
|
+ engine_->Exit();
|
|
|
+ else
|
|
|
+ GetSubsystem<Console>()->SetVisible(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Toggle console when F1 down.
|
|
|
+ if (key == KEY_F1)
|
|
|
+ GetSubsystem<Console>()->Toggle();
|
|
|
+
|
|
|
+ // Toggle debug HUD when F2 down.
|
|
|
+ if (key == KEY_F2)
|
|
|
+ GetSubsystem<DebugHud>()->ToggleAll();
|
|
|
+}
|