Skip to content

Commit

Permalink
Add overlay
Browse files Browse the repository at this point in the history
  • Loading branch information
JoeBiellik committed Nov 1, 2018
1 parent 9c341ae commit 0ecdd31
Show file tree
Hide file tree
Showing 6 changed files with 146 additions and 37 deletions.
15 changes: 15 additions & 0 deletions Start.Client/Overlays/StartOverlay.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using NFive.SDK.Client.Interface;
using System;

namespace NFive.Start.Client.Overlays
{
public class StartOverlay : Overlay
{
public event EventHandler<OverlayEventArgs> Play;

public StartOverlay(OverlayManager manager) : base("StartOverlay.html", manager)
{
this.Attach("play", (_, callback) => this.Play?.Invoke(this, new OverlayEventArgs(this)));
}
}
}
40 changes: 40 additions & 0 deletions Start.Client/Overlays/StartOverlay.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=PT+Sans:700">
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

<style type="text/css">
html, body {
width: 100vw;
height: 100vh;
margin: 0;
overflow: hidden;
font-size: 10vh;
font-family: 'PT Sans', sans-serif;
user-select: none;
outline: none;
background-color: transparent;
}
</style>

<script>
$(() => {
nfive.show();

$('button').on('click', () => {
nfive.send('play');
});
});
</script>
</head>

<body class="d-flex">
<main class="justify-content-center align-self-center mx-auto">
<button type="button" class="btn btn-xl btn-light shadow-none" autofocus>Play</button>
</main>
</body>
</html>
20 changes: 13 additions & 7 deletions Start.Client/Start.Client.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
Expand Down Expand Up @@ -38,7 +38,7 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="CitizenFX.Core, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\CitizenFX.Client.1.3.0.1124361\lib\net452\CitizenFX.Core.dll</HintPath>
<HintPath>..\packages\CitizenFX.Client.1.3.0.1125840\lib\net452\CitizenFX.Core.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="JetBrains.Annotations, Version=2018.2.1.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL">
Expand All @@ -49,22 +49,28 @@
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="NFive.SDK.Client.net, Version=0.1.0.7, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\NFive.SDK.Client.0.1.0.7\lib\net452\NFive.SDK.Client.net.dll</HintPath>
<Reference Include="NFive.SDK.Client.net, Version=0.1.0.11, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\NFive.SDK.Client.0.1.0.11\lib\net452\NFive.SDK.Client.net.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="NFive.SDK.Core.net, Version=0.1.0.11, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\NFive.SDK.Core.0.1.0.11\lib\net452\NFive.SDK.Core.net.dll</HintPath>
<Reference Include="NFive.SDK.Core.net, Version=0.1.0.14, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\NFive.SDK.Core.0.1.0.14\lib\net452\NFive.SDK.Core.net.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Overlays\StartOverlay.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="StartService.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Overlays\StartOverlay.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
</Project>
98 changes: 72 additions & 26 deletions Start.Client/StartService.cs
Original file line number Diff line number Diff line change
@@ -1,46 +1,92 @@
using System.Threading.Tasks;
using CitizenFX.Core;
using CitizenFX.Core.Native;
using CitizenFX.Core.UI;
using JetBrains.Annotations;
using NFive.SDK.Client.Events;
using NFive.SDK.Client.Extensions;
using NFive.SDK.Client.Interface;
using NFive.SDK.Client.Rpc;
using NFive.SDK.Client.Services;
using NFive.SDK.Core.Diagnostics;
using NFive.SDK.Core.Models.Player;
using NFive.Start.Client.Overlays;
using System.Threading.Tasks;

namespace NFive.Start.Client
{
[PublicAPI]
public class StartService : Service
{
public StartService(ILogger logger, ITickManager ticks, IEventManager events, IRpcHandler rpc, INuiManager nui, User user) : base(logger, ticks, events, rpc, nui, user)
public StartService(ILogger logger, ITickManager ticks, IEventManager events, IRpcHandler rpc, OverlayManager overlayManager, User user) : base(logger, ticks, events, rpc, overlayManager, user) { }

public override async Task Started()
{
// Hide HUD
Screen.Hud.IsVisible = false;

// Disable the loading screen from automatically being dismissed
API.SetManualShutdownLoadingScreenNui(true);

// Position character, required for switching
Game.Player.Character.Position = Vector3.Zero;

// Freeze
Game.Player.Freeze();

// Switch out the player if it isn't already in a switch state
if (!API.IsPlayerSwitchInProgress()) API.SwitchOutPlayer(API.PlayerPedId(), 0, 1);

// Remove most clouds
API.SetCloudHatOpacity(0.01f);

// Wait for switch
while (API.GetPlayerSwitchState() != 5) await this.Delay(10);

// Hide loading screen
API.ShutdownLoadingScreen();

// Fade out
Screen.Fading.FadeOut(0);
while (Screen.Fading.IsFadingOut) await this.Delay(10);

// Show overlay
var overlay = new StartOverlay(this.OverlayManager);
overlay.Play += OnPlay;

// Focus overlay
API.SetNuiFocus(true, true);

// Shut down the NUI loading screen
API.ShutdownLoadingScreenNui();

// Fade in
Screen.Fading.FadeIn(500);
while (Screen.Fading.IsFadingIn) await this.Delay(10);
}

private async void OnPlay(object sender, OverlayEventArgs e)
{
Task.Factory.StartNew(async () =>
{
// Position character
Game.Player.Character.Position = new Vector3(0f, 0f, 71f);
// Load character model
while (!await Game.Player.ChangeModel(new Model(PedHash.FreemodeMale01))) await BaseScript.Delay(100);
Game.Player.Character.Style.SetDefaultClothes();
// Fade out
Screen.Fading.FadeOut(1000);
while (Screen.Fading.IsFadingOut) await BaseScript.Delay(100);
// Hide loading screen
API.ShutdownLoadingScreen();
// Set menus
API.SetPauseMenuActive(true);
API.SetNoLoadingScreen(true);
// Fade in
Screen.Fading.FadeIn(1000);
while (Screen.Fading.IsFadingIn) await BaseScript.Delay(100);
});
// Destroy overlay
e.Overlay.Dispose();

// Un-focus overlay
API.SetNuiFocus(false, false);

// Position character
Game.Player.Character.Position = new Vector3(0f, 0f, 71f);

// Load character model
while (!await Game.Player.ChangeModel(new Model(PedHash.FreemodeMale01))) await this.Delay(10);
Game.Player.Character.Style.SetDefaultClothes();

// Unfreeze
Game.Player.Unfreeze();

// Show HUD
Screen.Hud.IsVisible = true;

// Switch in
API.SwitchInPlayer(API.PlayerPedId());
}
}
}
6 changes: 3 additions & 3 deletions Start.Client/packages.config
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="CitizenFX.Client" version="1.3.0.1124361" targetFramework="net452" />
<package id="CitizenFX.Client" version="1.3.0.1125840" targetFramework="net452" />
<package id="JetBrains.Annotations" version="2018.2.1" allowedVersions="[2018.2.1]" targetFramework="net452" />
<package id="Newtonsoft.Json" version="11.0.2" allowedVersions="[11.0.2]" targetFramework="net452" />
<package id="NFive.SDK.Client" version="0.1.0.7" targetFramework="net452" />
<package id="NFive.SDK.Core" version="0.1.0.11" allowedVersions="[0.1.0.11,0.2)" targetFramework="net452" />
<package id="NFive.SDK.Client" version="0.1.0.11" targetFramework="net452" />
<package id="NFive.SDK.Core" version="0.1.0.14" allowedVersions="[0.1.0.11,0.2)" targetFramework="net452" />
</packages>
4 changes: 3 additions & 1 deletion nfive.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
name: NFive/plugin-start
version: 1.0.0
version: 1.1.0
description: Simple plugin to start the game
author: NFive
license: LGPL
website: https://nfive.io/
client:
main:
- NFive.Start.Client
files:
- Overlays/StartOverlay.html

0 comments on commit 0ecdd31

Please sign in to comment.