1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-12 21:38:38 +00:00

Basic CS:GO support

This commit is contained in:
Robert Beekman 2016-01-09 21:54:27 +01:00
parent baa5b10d5c
commit dd52793ed7
6 changed files with 107 additions and 110 deletions

View File

@ -4,6 +4,7 @@
<configSections>
<sectionGroup name="userSettings"
type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Artemis.Settings.CounterStrike" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="Artemis.Settings.VolumeDisplay" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="Artemis.Settings.AudioVisualization"
type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
@ -26,6 +27,11 @@
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<userSettings>
<Artemis.Settings.CounterStrike>
<setting name="GameDirectory" serializeAs="String">
<value>C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive</value>
</setting>
</Artemis.Settings.CounterStrike>
<Artemis.Settings.VolumeDisplay>
<setting name="MainColor" serializeAs="String">
<value>#FFFF2900</value>

View File

@ -192,6 +192,11 @@
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>AudioVisualization.settings</DependentUpon>
</Compile>
<Compile Include="Settings\CounterStrike.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>CounterStrike.settings</DependentUpon>
</Compile>
<Compile Include="Settings\General.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
@ -217,7 +222,6 @@
<Compile Include="Utilities\ColorHelpers.cs" />
<Compile Include="Utilities\GameSense\GameDataReceivedEventArgs.cs" />
<Compile Include="Utilities\GameSense\GameSenseWebServer.cs" />
<Compile Include="Utilities\GameSense\JsonModels\CounterStrikeJson.cs" />
<Compile Include="Utilities\Memory\Memory.cs" />
<Compile Include="Utilities\Memory\MemoryHelpers.cs" />
<Compile Include="Utilities\Memory\Win32.cs" />
@ -291,6 +295,10 @@
</EmbeddedResource>
<None Include="packages.config" />
<AppDesigner Include="Properties\" />
<None Include="Settings\CounterStrike.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>CounterStrike.Designer.cs</LastGenOutput>
</None>
<None Include="Settings\VolumeDisplay.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>VolumeDisplay.Designer.cs</LastGenOutput>

View File

@ -5,9 +5,9 @@ using System.Drawing.Drawing2D;
using System.Linq;
using Artemis.Models;
using Artemis.Utilities.GameSense;
using Artemis.Utilities.GameSense.JsonModels;
using Artemis.Utilities.Keyboard;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Artemis.Modules.Games.CounterStrike
{
@ -23,13 +23,17 @@ namespace Artemis.Modules.Games.CounterStrike
ProcessName = "csgo";
Scale = 4;
AmmoRect = new KeyboardRectangle(Scale, 0, 0, 84, 24, new List<Color> {Color.Blue, Color.Red},
AmmoRect = new KeyboardRectangle(Scale, 0, 0, 16*Scale, 1*Scale, new List<Color> {Color.Blue, Color.Red},
LinearGradientMode.Horizontal);
TeamRect = new KeyboardRectangle(Scale, 0, 1*Scale, 21*Scale, 8*Scale, new List<Color> {Color.CornflowerBlue},
LinearGradientMode.Horizontal);
}
public KeyboardRectangle TeamRect { get; set; }
public int Scale { get; set; }
public CounterStrikeJson CsJson { get; set; }
public JObject CsJson { get; set; }
public KeyboardRectangle AmmoRect { get; set; }
public override void Dispose()
@ -44,19 +48,46 @@ namespace Artemis.Modules.Games.CounterStrike
public override void Update()
{
if (CsJson?.player.weapons == null)
if (CsJson == null)
return;
var activeWeapon = CsJson.player.weapons.FirstOrDefault(w => w.Value.state.Equals("active"));
UpdateAmmo();
UpdateTeam();
}
private void UpdateTeam()
{
var currentTeam = CsJson["player"]["team"];
if (currentTeam == null)
return;
TeamRect.Colors = currentTeam.Value<string>() == "T"
? new List<Color> {Color.FromArgb(255, 255, 129, 0)}
: new List<Color> {Color.FromArgb(255, 112, 209, 255)};
}
private void UpdateAmmo()
{
var activeWeapon =
CsJson["player"]["weapons"].Children()
.Select(c => c.First)
.FirstOrDefault(w => w["state"]?.Value<string>() == "active");
// Update the ammo display
var ammoPercentage = 0;
if (activeWeapon.Value?.ammo_clip_max > 0)
ammoPercentage =
(int) ((Math.Ceiling(100.00/activeWeapon.Value.ammo_clip_max))*activeWeapon.Value.ammo_clip);
if (activeWeapon?["ammo_clip_max"] == null || activeWeapon["ammo_clip"] == null)
return;
AmmoRect.Height = ammoPercentage;
if (ammoPercentage < 30)
var maxAmmo = activeWeapon["ammo_clip_max"].Value<int>();
var ammo = activeWeapon["ammo_clip"].Value<int>();
if (maxAmmo < 0)
return;
var ammoPercentage = (int) Math.Ceiling(100.00/maxAmmo)*ammo;
AmmoRect.Width = ((int) Math.Floor((16/100.00)*ammoPercentage))*Scale;
// Low ammo indicator
if (ammoPercentage < 37)
AmmoRect.StartBlink(1000);
else
AmmoRect.StopBlink();
@ -64,12 +95,13 @@ namespace Artemis.Modules.Games.CounterStrike
public override Bitmap GenerateBitmap()
{
var bitmap = new Bitmap(21, 6);
var bitmap = new Bitmap(21*Scale, 6*Scale);
using (var g = Graphics.FromImage(bitmap))
{
g.Clear(Color.Transparent);
AmmoRect.Draw(g);
TeamRect.Draw(g);
}
return bitmap;
}
@ -83,7 +115,7 @@ namespace Artemis.Modules.Games.CounterStrike
return;
// Parse the JSON
CsJson = JsonConvert.DeserializeObject<CounterStrikeJson>(jsonString);
CsJson = JsonConvert.DeserializeObject<JObject>(jsonString);
}
}
}

View File

@ -0,0 +1,38 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Artemis.Settings {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
internal sealed partial class CounterStrike : global::System.Configuration.ApplicationSettingsBase {
private static CounterStrike defaultInstance = ((CounterStrike)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new CounterStrike())));
public static CounterStrike Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("C:\\Program Files (x86)\\Steam\\steamapps\\common\\Counter-Strike Global Offensive")]
public string GameDirectory {
get {
return ((string)(this["GameDirectory"]));
}
set {
this["GameDirectory"] = value;
}
}
}
}

View File

@ -0,0 +1,9 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Artemis.Settings" GeneratedClassName="CounterStrike">
<Profiles />
<Settings>
<Setting Name="GameDirectory" Type="System.String" Scope="User">
<Value Profile="(Default)">C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@ -1,96 +0,0 @@
using System.Collections.Generic;
namespace Artemis.Utilities.GameSense.JsonModels
{
public class CounterStrikeJson
{
public Provider provider { get; set; }
public Map map { get; set; }
public Round round { get; set; }
public Player player { get; set; }
public Auth auth { get; set; }
}
public class Provider
{
public string name { get; set; }
public int appid { get; set; }
public int version { get; set; }
public string steamid { get; set; }
public int timestamp { get; set; }
}
public class Map
{
public string name { get; set; }
public string phase { get; set; }
public int round { get; set; }
public Team_Ct team_ct { get; set; }
public Team_T team_t { get; set; }
}
public class Team_Ct
{
public int score { get; set; }
}
public class Team_T
{
public int score { get; set; }
}
public class Round
{
public string phase { get; set; }
}
public class Player
{
public string steamid { get; set; }
public string name { get; set; }
public string team { get; set; }
public string activity { get; set; }
public State state { get; set; }
public Dictionary<string, Weapon> weapons { get; set; }
public Match_Stats match_stats { get; set; }
}
public class State
{
public int health { get; set; }
public int armor { get; set; }
public bool helmet { get; set; }
public int flashed { get; set; }
public int smoked { get; set; }
public int burning { get; set; }
public int money { get; set; }
public int round_kills { get; set; }
public int round_killhs { get; set; }
}
public class Match_Stats
{
public int kills { get; set; }
public int assists { get; set; }
public int deaths { get; set; }
public int mvps { get; set; }
public int score { get; set; }
}
public class Weapon
{
public string name { get; set; }
public string paintkit { get; set; }
public string type { get; set; }
public string state { get; set; }
public int ammo_clip { get; set; }
public int ammo_clip_max { get; set; }
public int ammo_reserve { get; set; }
}
public class Auth
{
public string key1 { get; set; }
public string key2 { get; set; }
}
}