From 63b0b1d8e5e0a94e8338cdfe5839f057dbcd863d Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Fri, 12 Aug 2016 15:53:35 +0200 Subject: [PATCH] Unreal Tournament support Added UT module Added UT plugin to Git Added Contains, EndWith, StartsWith to string layer conditions --- Artemis/Artemis.sln | 30 +++ .../CounterStrike/CounterStrikeView.xaml | 4 +- .../Modules/Games/Dota2/Dota2View.xaml | 2 +- .../Games/Overwatch/OverwatchView.xaml | 2 +- .../Games/RocketLeague/RocketLeagueView.xaml | 2 +- .../UnrealTournamentDataModel.cs | 94 +++++++- .../UnrealTournamentView.xaml | 2 +- .../UnrealTournamentViewModel.cs | 8 +- .../Modules/Games/Witcher3/Witcher3View.xaml | 2 +- .../Layers/Animations/GrowAnimation.cs | 2 +- .../Layers/Models/LayerConditionModel.cs | 2 +- Artemis/Artemis/Utilities/GeneralHelpers.cs | 2 + .../Profiles/LayerConditionViewModel.cs | 13 + .../UnrealTournament2Artemis/Artemis.uplugin | 21 ++ .../Win64/UE4-Artemis-Win64-Shipping.dll | Bin 0 -> 164352 bytes .../Binaries/Win64/UE4-Win64-Shipping.modules | 8 + .../Source/Artemis.Build.cs | 23 ++ .../Source/Private/Artemis.cpp | 225 ++++++++++++++++++ .../Source/Private/Artemis.h | 41 ++++ .../UnrealTournament2Artemis.vcxproj | 165 +++++++++++++ .../UnrealTournament2Artemis.vcxproj.filters | 45 ++++ 21 files changed, 672 insertions(+), 21 deletions(-) create mode 100644 Artemis/UnrealTournament2Artemis/Artemis.uplugin create mode 100644 Artemis/UnrealTournament2Artemis/Binaries/Win64/UE4-Artemis-Win64-Shipping.dll create mode 100644 Artemis/UnrealTournament2Artemis/Binaries/Win64/UE4-Win64-Shipping.modules create mode 100644 Artemis/UnrealTournament2Artemis/Source/Artemis.Build.cs create mode 100644 Artemis/UnrealTournament2Artemis/Source/Private/Artemis.cpp create mode 100644 Artemis/UnrealTournament2Artemis/Source/Private/Artemis.h create mode 100644 Artemis/UnrealTournament2Artemis/UnrealTournament2Artemis.vcxproj create mode 100644 Artemis/UnrealTournament2Artemis/UnrealTournament2Artemis.vcxproj.filters diff --git a/Artemis/Artemis.sln b/Artemis/Artemis.sln index 6c8abbab3..0e9c57ea1 100644 --- a/Artemis/Artemis.sln +++ b/Artemis/Artemis.sln @@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Artemis", "Artemis\Artemis. EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Razer2Artemis", "Razer2Artemis\Razer2Artemis.vcxproj", "{39711909-C1D5-46CE-A9EA-2D561692EA47}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnrealTournament2Artemis", "UnrealTournament2Artemis\UnrealTournament2Artemis.vcxproj", "{3541864F-1662-4BD6-8328-2C87AE61D152}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution CD_ROM|Any CPU = CD_ROM|Any CPU @@ -84,6 +86,34 @@ Global {39711909-C1D5-46CE-A9EA-2D561692EA47}.SingleImage|x64.Build.0 = Release|x64 {39711909-C1D5-46CE-A9EA-2D561692EA47}.SingleImage|x86.ActiveCfg = Release|Win32 {39711909-C1D5-46CE-A9EA-2D561692EA47}.SingleImage|x86.Build.0 = Release|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.CD_ROM|Any CPU.ActiveCfg = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.CD_ROM|Any CPU.Build.0 = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.CD_ROM|x64.ActiveCfg = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.CD_ROM|x64.Build.0 = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.CD_ROM|x86.ActiveCfg = Release|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.CD_ROM|x86.Build.0 = Release|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.Debug|x64.ActiveCfg = Debug|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.Debug|x64.Build.0 = Debug|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.Debug|x86.ActiveCfg = Debug|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.Debug|x86.Build.0 = Debug|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.DVD-5|Any CPU.ActiveCfg = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.DVD-5|Any CPU.Build.0 = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.DVD-5|x64.ActiveCfg = Debug|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.DVD-5|x64.Build.0 = Debug|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.DVD-5|x86.ActiveCfg = Debug|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.DVD-5|x86.Build.0 = Debug|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.Release|Any CPU.ActiveCfg = Release|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.Release|x64.ActiveCfg = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.Release|x64.Build.0 = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.Release|x86.ActiveCfg = Release|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.Release|x86.Build.0 = Release|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.SingleImage|Any CPU.ActiveCfg = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.SingleImage|Any CPU.Build.0 = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.SingleImage|x64.ActiveCfg = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.SingleImage|x64.Build.0 = Release|x64 + {3541864F-1662-4BD6-8328-2C87AE61D152}.SingleImage|x86.ActiveCfg = Release|Win32 + {3541864F-1662-4BD6-8328-2C87AE61D152}.SingleImage|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeView.xaml b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeView.xaml index e591ac8f9..a1bdb0ccc 100644 --- a/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeView.xaml +++ b/Artemis/Artemis/Modules/Games/CounterStrike/CounterStrikeView.xaml @@ -23,8 +23,8 @@ diff --git a/Artemis/Artemis/Modules/Games/Dota2/Dota2View.xaml b/Artemis/Artemis/Modules/Games/Dota2/Dota2View.xaml index 6adaf23ee..336f2b1d7 100644 --- a/Artemis/Artemis/Modules/Games/Dota2/Dota2View.xaml +++ b/Artemis/Artemis/Modules/Games/Dota2/Dota2View.xaml @@ -24,7 +24,7 @@ diff --git a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchView.xaml b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchView.xaml index 1d5c7d9ad..6408374cd 100644 --- a/Artemis/Artemis/Modules/Games/Overwatch/OverwatchView.xaml +++ b/Artemis/Artemis/Modules/Games/Overwatch/OverwatchView.xaml @@ -23,7 +23,7 @@ diff --git a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueView.xaml b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueView.xaml index 657690ccd..d59f8c89b 100644 --- a/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueView.xaml +++ b/Artemis/Artemis/Modules/Games/RocketLeague/RocketLeagueView.xaml @@ -28,7 +28,7 @@ diff --git a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentDataModel.cs b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentDataModel.cs index 5e0ad4f86..7f67a2b9d 100644 --- a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentDataModel.cs +++ b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentDataModel.cs @@ -19,16 +19,100 @@ namespace Artemis.Modules.Games.UnrealTournament public class Player { - public string Name { get; set; } - public string Team { get; set; } public int Health { get; set; } public int Armor { get; set; } - public string Powerup { get; set; } + public PlayerState State { get; set; } + public Inventory Inventory { get; set; } + public Weapon Weapon { get; set; } + public MatchPlayer MatchStatus { get; set; } + } + + public class PlayerState + { + public string PlayerName { get; set; } + public string UniqueId { get; set; } + public int Score { get; set; } + public int TeamNum { get; set; } + public int RankCheck { get; set; } + public int DuelRank { get; set; } + public int No_of_Duel_Played { get; set; } + public int CTFRank { get; set; } + public int No_CTF_MatchesPlayed { get; set; } + public int TDMRank { get; set; } + public int No_TDM_MatchesPlayed { get; set; } + public int DMRank { get; set; } + public int No_DM_Matches_Played { get; set; } + public int ShowdownRank { get; set; } + public int No_Showdowns { get; set; } + } + + public class Inventory + { + public bool HasJumpBoots { get; set; } + public bool HasInvisibility { get; set; } + public bool HasBerserk { get; set; } + public bool HasUDamage { get; set; } + public bool HasThighPads { get; set; } + public bool HasShieldBelt { get; set; } + public bool HasChestArmor { get; set; } + public bool HasHelmet { get; set; } + } + + public class Weapon + { + public string Name { get; set; } + public int Ammo { get; set; } + public int MaxAmmo { get; set; } + public bool IsFiring { get; set; } + public int FireMode { get; set; } + public ZoomState ZoomState { get; set; } + } + + public enum ZoomState + { + Unzoomed = 0, + Zoomed = 3, + ZoomingIn = 2, + ZoomingOut = 1, } public class Environment { - public string Mode { get; set; } - public string MapName { get; set; } + public string GameMode { get; set; } + public bool MatchStarted { get; set; } + public int GoalScore { get; set; } + public string ServerName { get; set; } + public bool bWeaponStay { get; set; } + public bool bTeamGame { get; set; } + public bool bAllowTeamSwitches { get; set; } + public bool bStopGameClock { get; set; } + public bool bCasterControl { get; set; } + public bool bForcedBalance { get; set; } + public bool bPlayPlayerIntro { get; set; } + public int TimeLimit { get; set; } + public int SpawnProtectionTime { get; set; } + public int RemainingTime { get; set; } + public int ElapsedTime { get; set; } + public int RespawnWaitTime { get; set; } + public int ForceRespawnTime { get; set; } + } + + public class MatchPlayer + { + public string PlayerName { get; set; } + public string UniqueId { get; set; } + public int Score { get; set; } + public int TeamNum { get; set; } + public int RankCheck { get; set; } + public int DuelRank { get; set; } + public int No_of_Duel_Played { get; set; } + public int CTFRank { get; set; } + public int No_CTF_MatchesPlayed { get; set; } + public int TDMRank { get; set; } + public int No_TDM_MatchesPlayed { get; set; } + public int DMRank { get; set; } + public int No_DM_Matches_Played { get; set; } + public int ShowdownRank { get; set; } + public int No_Showdowns { get; set; } } } \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentView.xaml b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentView.xaml index dfa2cce41..8f25cab9b 100644 --- a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentView.xaml +++ b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentView.xaml @@ -28,7 +28,7 @@ diff --git a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs index d8aa94b79..97721c840 100644 --- a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs +++ b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs @@ -1,11 +1,7 @@ using Artemis.InjectionFactories; using Artemis.Managers; -using Artemis.Settings; -using Artemis.Utilities; -using Artemis.Utilities.Memory; using Artemis.ViewModels.Abstract; using Caliburn.Micro; -using Newtonsoft.Json; namespace Artemis.Modules.Games.UnrealTournament { @@ -16,7 +12,7 @@ namespace Artemis.Modules.Games.UnrealTournament public UnrealTournamentViewModel(MainManager main, IEventAggregator events, IProfileEditorVmFactory pFactory) : base(main, new UnrealTournamentModel(main, new UnrealTournamentSettings()), events, pFactory) { - DisplayName = "Rocket League"; + DisplayName = "Unreal Tournament"; MainManager.EffectManager.EffectModels.Add(GameModel); } @@ -33,7 +29,5 @@ namespace Artemis.Modules.Games.UnrealTournament } public UnrealTournamentModel UnrealTournamentModel { get; set; } - - } } \ No newline at end of file diff --git a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3View.xaml b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3View.xaml index 66d62178d..c8e7be806 100644 --- a/Artemis/Artemis/Modules/Games/Witcher3/Witcher3View.xaml +++ b/Artemis/Artemis/Modules/Games/Witcher3/Witcher3View.xaml @@ -23,7 +23,7 @@ diff --git a/Artemis/Artemis/Profiles/Layers/Animations/GrowAnimation.cs b/Artemis/Artemis/Profiles/Layers/Animations/GrowAnimation.cs index da70c3808..c3ca162b6 100644 --- a/Artemis/Artemis/Profiles/Layers/Animations/GrowAnimation.cs +++ b/Artemis/Artemis/Profiles/Layers/Animations/GrowAnimation.cs @@ -24,7 +24,7 @@ namespace Artemis.Profiles.Layers.Animations public void Draw(LayerPropertiesModel props, LayerPropertiesModel applied, DrawingContext c) { - if (applied.Brush == null) + if (applied?.Brush == null) return; const int scale = 4; diff --git a/Artemis/Artemis/Profiles/Layers/Models/LayerConditionModel.cs b/Artemis/Artemis/Profiles/Layers/Models/LayerConditionModel.cs index 3e93af114..0f04dfddf 100644 --- a/Artemis/Artemis/Profiles/Layers/Models/LayerConditionModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Models/LayerConditionModel.cs @@ -31,7 +31,7 @@ namespace Artemis.Profiles.Layers.Models // Put the subject in a list, allowing Dynamic Linq to be used. if (Type == "String") { - return _interpreter.Eval($"subject.{Field}.ToLower() {Operator} value", + return _interpreter.Eval($"subject.{Field}.ToLower(){Operator}(value)", new Parameter("subject", subject.GetType(), subject), new Parameter("value", Value.ToLower())); } diff --git a/Artemis/Artemis/Utilities/GeneralHelpers.cs b/Artemis/Artemis/Utilities/GeneralHelpers.cs index af9771b92..1ab9cbe54 100644 --- a/Artemis/Artemis/Utilities/GeneralHelpers.cs +++ b/Artemis/Artemis/Utilities/GeneralHelpers.cs @@ -57,6 +57,8 @@ namespace Artemis.Utilities { var propertyNames = path.Split('.'); var prop = o.GetType().GetProperty(propertyNames[0]); + if (prop == null) + return null; var value = prop.GetValue(o, null); if (propertyNames.Length == 1 || value == null) diff --git a/Artemis/Artemis/ViewModels/Profiles/LayerConditionViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/LayerConditionViewModel.cs index 81f1b05ec..411c2157d 100644 --- a/Artemis/Artemis/ViewModels/Profiles/LayerConditionViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/LayerConditionViewModel.cs @@ -25,6 +25,15 @@ namespace Artemis.ViewModels.Profiles new NamedOperator("Not equal to", "!=") }; + private readonly NamedOperator[] _stringOperators = + { + new NamedOperator("Equal to", "=="), + new NamedOperator("Not equal to", "!="), + new NamedOperator("Contains", ".Contains"), + new NamedOperator("Starts with", ".StartsWith"), + new NamedOperator("Ends with", ".EndsWith"), + }; + private readonly NamedOperator[] _operators = { new NamedOperator("Equal to", "=="), @@ -156,6 +165,10 @@ namespace Artemis.ViewModels.Profiles Enums.Add("False"); EnumValueIsVisible = true; break; + case "String": + Operators.AddRange(_stringOperators); + UserValueIsVisible = true; + break; default: Operators.AddRange(_operators); UserValueIsVisible = true; diff --git a/Artemis/UnrealTournament2Artemis/Artemis.uplugin b/Artemis/UnrealTournament2Artemis/Artemis.uplugin new file mode 100644 index 000000000..8ea2a6467 --- /dev/null +++ b/Artemis/UnrealTournament2Artemis/Artemis.uplugin @@ -0,0 +1,21 @@ +{ + "Version" : 1, + "FileVersion": 3, + "FriendlyName": "Artemis Plugin", + "VersionName": "1.0", + "CreatedBy": "Robert Beekman", + "CreatedByURL": "https://github.com/SpoinkyNL/Artemis", + "EngineVersion": "4.4.0", + "Description": "Communicates with Artemis to let the main program know what's happening ingame", + "Category": "UnrealTournament.Mod", + "EnabledByDefault": true, + "CanContainContent": false, + + "Modules": [ + { + "Name": "Artemis", + "Type": "Runtime", + "WhitelistPlatforms": [ "Win32", "Win64" ] + } + ] +} \ No newline at end of file diff --git a/Artemis/UnrealTournament2Artemis/Binaries/Win64/UE4-Artemis-Win64-Shipping.dll b/Artemis/UnrealTournament2Artemis/Binaries/Win64/UE4-Artemis-Win64-Shipping.dll new file mode 100644 index 0000000000000000000000000000000000000000..87c719160e184aba087b46be0244f9a83eaf6dea GIT binary patch literal 164352 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 literal 0 HcmV?d00001 diff --git a/Artemis/UnrealTournament2Artemis/Binaries/Win64/UE4-Win64-Shipping.modules b/Artemis/UnrealTournament2Artemis/Binaries/Win64/UE4-Win64-Shipping.modules new file mode 100644 index 000000000..a577932a1 --- /dev/null +++ b/Artemis/UnrealTournament2Artemis/Binaries/Win64/UE4-Win64-Shipping.modules @@ -0,0 +1,8 @@ +{ + "Changelist" : 2897679, + "BuildId" : "5a8ef5b7-c9bb-42bd-ab7c-fb8e33f704ec", + "Modules" : + { + "Artemis" : "UE4-Artemis-Win64-Shipping.dll" + } +} \ No newline at end of file diff --git a/Artemis/UnrealTournament2Artemis/Source/Artemis.Build.cs b/Artemis/UnrealTournament2Artemis/Source/Artemis.Build.cs new file mode 100644 index 000000000..54660fe05 --- /dev/null +++ b/Artemis/UnrealTournament2Artemis/Source/Artemis.Build.cs @@ -0,0 +1,23 @@ +using System.IO; + +namespace UnrealBuildTool.Rules +{ + public class Artemis : ModuleRules + { + public Artemis(TargetInfo Target) + { + PublicDependencyModuleNames.AddRange( + new string[] + { + "Core", + "CoreUObject", + "Engine", + "UnrealTournament", + "InputCore", + "SlateCore", + "Json" + } + ); + } + } +} \ No newline at end of file diff --git a/Artemis/UnrealTournament2Artemis/Source/Private/Artemis.cpp b/Artemis/UnrealTournament2Artemis/Source/Private/Artemis.cpp new file mode 100644 index 000000000..3680cf068 --- /dev/null +++ b/Artemis/UnrealTournament2Artemis/Source/Private/Artemis.cpp @@ -0,0 +1,225 @@ +// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved. + +#include "Artemis.h" + +#include "UnrealTournament.h" +#include "UTPlayerController.h" +#include "UTGameState.h" +#include "UTArmor.h" +#include "UTTimedPowerup.h" + +DEFINE_LOG_CATEGORY_STATIC(LogUTKBLightShow, Log, All); + +AArtemis::AArtemis(const FObjectInitializer& ObjectInitializer) + : Super(ObjectInitializer) +{ +} + +FArtemis::FArtemis() +{ + FrameTimeMinimum = 0.03f; + DeltaTimeAccumulator = 0; +} + +IMPLEMENT_MODULE(FArtemis, Artemis) + +void FArtemis::StartupModule() +{ + WritePipe(FString(TEXT("Unreal Tournament plugin loaded"))); +} + +void FArtemis::ShutdownModule() +{ + +} + +void FArtemis::Tick(float DeltaTime) +{ + if (GIsEditor) + { + return; + } + + // Avoid double ticking + if (LastFrameCounter > 0 && LastFrameCounter == GFrameCounter) + { + return; + } + + LastFrameCounter = GFrameCounter; + + // We may be going 120hz, don't spam the device + DeltaTimeAccumulator += DeltaTime; + if (DeltaTimeAccumulator < FrameTimeMinimum) + { + return; + } + DeltaTimeAccumulator = 0; + + // Setup JSON object + TSharedRef RootJson(new FJsonObject()); + TSharedRef PlayerJson(new FJsonObject()); + TSharedRef EnvironmentJson(new FJsonObject()); + RootJson->SetObjectField("Player", PlayerJson); + RootJson->SetObjectField("Environment", EnvironmentJson); + // Setup JSON writer to be used before returning + FString Buffer; + TSharedRef > Writer = TJsonWriterFactory<>::Create(&Buffer); + + AUTPlayerController* UTPC = nullptr; + AUTGameState* GS = nullptr; + const TIndirectArray& AllWorlds = GEngine->GetWorldContexts(); + for (const FWorldContext& Context : AllWorlds) + { + UWorld* World = Context.World(); + if (World && World->WorldType == EWorldType::Game) + { + UTPC = Cast(GEngine->GetFirstLocalPlayerController(World)); + if (UTPC) + { + UUTLocalPlayer* UTLP = Cast(UTPC->GetLocalPlayer()); + if (UTLP == nullptr || UTLP->IsMenuGame()) + { + UTPC = nullptr; + continue; + } + + GS = World->GetGameState(); + break; + } + } + } + + if (!UTPC || !GS) + { + RootJson->SetStringField("State", "MainMenu"); + FJsonSerializer::Serialize(RootJson, Writer); + WritePipe(Buffer); + return; + } + + // Update environment data + if (GS->GetGameModeClass()) + { + EnvironmentJson->SetStringField("GameMode", GS->GetGameModeClass()->GetName()); + } + EnvironmentJson->SetBoolField("MatchStarted", GS->HasMatchStarted()); + EnvironmentJson->SetNumberField("GoalScore", GS->GoalScore); + // Insert GameState JsonReport + GS->MakeJsonReport(EnvironmentJson); + // The JsonReport may contain all players, which is a bit too much + if (EnvironmentJson->HasField("Players")) + { + EnvironmentJson->RemoveField("Players"); + } + + // Update player data + // If character not found player must be spectating(?) + if (!UTPC->GetUTCharacter()) + { + RootJson->SetStringField("State", "Spectating"); + } + // If dead, don't try reading HP/Armor + else if (UTPC->GetUTCharacter()->IsDead()) + { + RootJson->SetStringField("State", "Dead"); + PlayerJson->SetNumberField("Health", 0); + PlayerJson->SetNumberField("Armor", 0); + } + // Player is found and alive + else + { + // Update HP and armor + RootJson->SetStringField("State", "Alive"); + PlayerJson->SetNumberField("Health", UTPC->GetUTCharacter()->Health); + PlayerJson->SetNumberField("Armor", UTPC->GetUTCharacter()->ArmorAmount); + + // Update player powerups data + TSharedRef InventoryJson(new FJsonObject()); + PlayerJson->SetObjectField("Inventory", InventoryJson); + InventoryJson->SetBoolField("HasJumpBoots", false); + InventoryJson->SetBoolField("HasInvisibility", false); + InventoryJson->SetBoolField("HasBerserk", false); + InventoryJson->SetBoolField("HasUDamage", false); + InventoryJson->SetBoolField("HasThighPads", false); + InventoryJson->SetBoolField("HasShieldBelt", false); + InventoryJson->SetBoolField("HasChestArmor", false); + InventoryJson->SetBoolField("HasHelmet", false); + + for (TInventoryIterator<> It(UTPC->GetUTCharacter()); It; ++It) + { + AUTInventory* InventoryItem = (*It); + // Using Contains here because pickups might have slighty different names in different contexts + if (InventoryItem->GetClass()->GetName().Contains("Armor_ThighPads")) + { + InventoryJson->SetBoolField("HasThighPads", true); + } + else if (InventoryItem->GetClass()->GetName().Contains("Armor_ShieldBelt")) + { + InventoryJson->SetBoolField("HasShieldBelt", true); + } + else if (InventoryItem->GetClass()->GetName().Contains("Armor_Chest")) + { + InventoryJson->SetBoolField("HasChestArmor", true); + } + else if (InventoryItem->GetClass()->GetName().Contains("Armor_Helmet")) + { + InventoryJson->SetBoolField("HasHelmet", true); + } + else if (InventoryItem->GetClass()->GetName().Contains("JumpBoots")) + { + InventoryJson->SetBoolField("HasJumpBoots", true); + } + else if (InventoryItem->GetClass()->GetName().Contains("Invis")) + { + InventoryJson->SetBoolField("HasInvisibility", true); + } + else if (InventoryItem->GetClass()->GetName().Contains("Berserk")) + { + InventoryJson->SetBoolField("HasBerserk", true); + } + else if (InventoryItem->GetClass()->GetName().Contains("UDamage")) + { + InventoryJson->SetBoolField("HasUDamage", true); + } + } + + // Update player weapon data + TSharedRef WeaponJson(new FJsonObject()); + PlayerJson->SetObjectField("Weapon", WeaponJson); + if (UTPC->GetUTCharacter()->GetWeapon()) + { + WeaponJson->SetStringField("Name", UTPC->GetUTCharacter()->GetWeapon()->GetClass()->GetName()); + WeaponJson->SetNumberField("Ammo", UTPC->GetUTCharacter()->GetWeapon()->Ammo); + WeaponJson->SetNumberField("MaxAmmo", UTPC->GetUTCharacter()->GetWeapon()->MaxAmmo); + WeaponJson->SetBoolField("IsFiring", UTPC->GetUTCharacter()->GetWeapon()->IsFiring()); + WeaponJson->SetNumberField("FireMode", UTPC->GetUTCharacter()->GetWeapon()->GetCurrentFireMode()); + WeaponJson->SetNumberField("ZoomState", UTPC->GetUTCharacter()->GetWeapon()->ZoomState); + } + else { + WeaponJson->SetStringField("Name", "None"); + } + } + // Insert PlayerState JsonReport + TSharedRef PlayerStateJson(new FJsonObject()); + PlayerJson->SetObjectField("State", PlayerStateJson); + if (UTPC->UTPlayerState) + { + UTPC->UTPlayerState->MakeJsonReport(PlayerStateJson); + } + + FJsonSerializer::Serialize(RootJson, Writer); + WritePipe(Buffer); +} + +void FArtemis::WritePipe(FString msg) +{ + pipe = CreateFile(TEXT("\\\\.\\pipe\\artemis"), GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, nullptr); + if (pipe == nullptr || pipe == INVALID_HANDLE_VALUE) + { + return; + } + + uint32 BytesWritten = 0; + WriteFile(pipe, TCHAR_TO_ANSI(*msg), msg.Len(), (::DWORD*)&BytesWritten, nullptr); +} \ No newline at end of file diff --git a/Artemis/UnrealTournament2Artemis/Source/Private/Artemis.h b/Artemis/UnrealTournament2Artemis/Source/Private/Artemis.h new file mode 100644 index 000000000..2ca2f51e9 --- /dev/null +++ b/Artemis/UnrealTournament2Artemis/Source/Private/Artemis.h @@ -0,0 +1,41 @@ +// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved. +#pragma once + +#include "Core.h" +#include "UnrealTournament.h" +#include "JsonSerializer.h" +#include "JsonObject.h" +#include "JsonReader.h" + +#include "Artemis.generated.h" + +UCLASS(Blueprintable, Meta = (ChildCanTick)) +class AArtemis : public AActor +{ + GENERATED_UCLASS_BODY() + +}; + +struct FArtemis : FTickableGameObject, IModuleInterface +{ + FArtemis(); + virtual void Tick(float DeltaTime) override; + virtual bool IsTickable() const override { return true; } + virtual bool IsTickableInEditor() const override { return true; } + virtual bool IsTickableWhenPaused() const override { return true; } + + virtual void StartupModule() override; + virtual void ShutdownModule() override; + + // Put a real stat id here + virtual TStatId GetStatId() const + { + return TStatId(); + } + + void WritePipe(FString msg); + HANDLE pipe; + float DeltaTimeAccumulator; + float FrameTimeMinimum; + uint64 LastFrameCounter; +}; \ No newline at end of file diff --git a/Artemis/UnrealTournament2Artemis/UnrealTournament2Artemis.vcxproj b/Artemis/UnrealTournament2Artemis/UnrealTournament2Artemis.vcxproj new file mode 100644 index 000000000..b4cd9703f --- /dev/null +++ b/Artemis/UnrealTournament2Artemis/UnrealTournament2Artemis.vcxproj @@ -0,0 +1,165 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {3541864F-1662-4BD6-8328-2C87AE61D152} + Win32Proj + UnrealTournament2Artemis + 8.1 + + + + DynamicLibrary + true + v140 + Unicode + + + DynamicLibrary + false + v140 + true + Unicode + + + DynamicLibrary + true + v140 + Unicode + + + DynamicLibrary + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;UNREALTOURNAMENT2ARTEMIS_EXPORTS;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + + + Level3 + Disabled + _DEBUG;_WINDOWS;_USRDLL;UNREALTOURNAMENT2ARTEMIS_EXPORTS;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;UNREALTOURNAMENT2ARTEMIS_EXPORTS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_WINDOWS;_USRDLL;UNREALTOURNAMENT2ARTEMIS_EXPORTS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Artemis/UnrealTournament2Artemis/UnrealTournament2Artemis.vcxproj.filters b/Artemis/UnrealTournament2Artemis/UnrealTournament2Artemis.vcxproj.filters new file mode 100644 index 000000000..256e298e2 --- /dev/null +++ b/Artemis/UnrealTournament2Artemis/UnrealTournament2Artemis.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + \ No newline at end of file