/* * Copyright (c) 2014, Oculus VR, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * RakNet License.txt file in the licenses directory of this source tree. An additional grant * of patent rights can be found in the RakNet Patents.txt file in the same directory. * * * Modified work: Copyright (c) 2017, SLikeSoft UG (haftungsbeschränkt) * * This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style * license found in the license.txt file in the root directory of this source tree. */ #include "pch.h" #include "WinPhone8.h" #include "BasicTimer.h" using namespace Windows::ApplicationModel; using namespace Windows::ApplicationModel::Core; using namespace Windows::ApplicationModel::Activation; using namespace Windows::UI::Core; using namespace Windows::System; using namespace Windows::Foundation; using namespace Windows::Graphics::Display; using namespace concurrency; WinPhone8::WinPhone8() : m_windowClosed(false), m_windowVisible(true) { } void WinPhone8::Initialize(CoreApplicationView^ applicationView) { applicationView->Activated += ref new TypedEventHandler(this, &WinPhone8::OnActivated); CoreApplication::Suspending += ref new EventHandler(this, &WinPhone8::OnSuspending); CoreApplication::Resuming += ref new EventHandler(this, &WinPhone8::OnResuming); m_renderer = ref new CubeRenderer(); } void WinPhone8::SetWindow(CoreWindow^ window) { window->VisibilityChanged += ref new TypedEventHandler(this, &WinPhone8::OnVisibilityChanged); window->Closed += ref new TypedEventHandler(this, &WinPhone8::OnWindowClosed); window->PointerPressed += ref new TypedEventHandler(this, &WinPhone8::OnPointerPressed); window->PointerMoved += ref new TypedEventHandler(this, &WinPhone8::OnPointerMoved); window->PointerReleased += ref new TypedEventHandler(this, &WinPhone8::OnPointerReleased); m_renderer->Initialize(CoreWindow::GetForCurrentThread()); } void WinPhone8::Load(Platform::String^ entryPoint) { } void WinPhone8::Run() { BasicTimer^ timer = ref new BasicTimer(); while (!m_windowClosed) { if (m_windowVisible) { timer->Update(); CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent); m_renderer->Update(timer->Total, timer->Delta); m_renderer->Render(); m_renderer->Present(); // This call is synchronized to the display frame rate. } else { CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending); } } } void WinPhone8::Uninitialize() { } void WinPhone8::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args) { m_windowVisible = args->Visible; } void WinPhone8::OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args) { m_windowClosed = true; } #include "slikenet/peerinterface.h" using namespace SLNet; #define DEFAULT_SERVER_PORT 61111 #define DEFAULT_SERVER_ADDRESS "natpunch.jenkinssoftware.com" void WinPhone8::OnPointerPressed(CoreWindow^ sender, PointerEventArgs^ args) { // Insert your code here. RakPeerInterface *rakPeer = RakPeerInterface::GetInstance(); SocketDescriptor sd; StartupResult sr = rakPeer->Startup(1, &sd, 1); assert(sr==RAKNET_STARTED); ConnectionAttemptResult car = rakPeer->Connect(DEFAULT_SERVER_ADDRESS, DEFAULT_SERVER_PORT, 0, 0); assert(car==CONNECTION_ATTEMPT_STARTED); } void WinPhone8::OnPointerMoved(CoreWindow^ sender, PointerEventArgs^ args) { // Insert your code here. } void WinPhone8::OnPointerReleased(CoreWindow^ sender, PointerEventArgs^ args) { // Insert your code here. } void WinPhone8::OnActivated(CoreApplicationView^ applicationView, IActivatedEventArgs^ args) { CoreWindow::GetForCurrentThread()->Activate(); } void WinPhone8::OnSuspending(Platform::Object^ sender, SuspendingEventArgs^ args) { // Save app state asynchronously after requesting a deferral. Holding a deferral // indicates that the application is busy performing suspending operations. Be // aware that a deferral may not be held indefinitely. After about five seconds, // the app will be forced to exit. SuspendingDeferral^ deferral = args->SuspendingOperation->GetDeferral(); m_renderer->ReleaseResourcesForSuspending(); create_task([this, deferral]() { // Insert your code here. deferral->Complete(); }); } void WinPhone8::OnResuming(Platform::Object^ sender, Platform::Object^ args) { // Restore any data or state that was unloaded on suspend. By default, data // and state are persisted when resuming from suspend. Note that this event // does not occur if the app was previously terminated. m_renderer->CreateWindowSizeDependentResources(); } IFrameworkView^ Direct3DApplicationSource::CreateView() { return ref new WinPhone8(); } [Platform::MTAThread] int main(Platform::Array^) { auto direct3DApplicationSource = ref new Direct3DApplicationSource(); CoreApplication::Run(direct3DApplicationSource); return 0; }