1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

Fixed animation speed doubling at certain times. Fixed Spotify null reference

This commit is contained in:
SpoinkyNL 2016-06-08 11:08:30 +02:00
parent 1722195529
commit 04497a10e5
7 changed files with 52 additions and 25 deletions

View File

@ -8,6 +8,7 @@ namespace Artemis.InjectionModules
public override void Load()
{
Bind<MainManager>().ToSelf().InSingletonScope();
Bind<LoopManager>().ToSelf().InSingletonScope();
Bind<DeviceManager>().ToSelf().InSingletonScope();
Bind<EffectManager>().ToSelf().InSingletonScope();
Bind<ProfileManager>().ToSelf().InSingletonScope();

View File

@ -1,10 +1,11 @@
using System;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Timers;
using Artemis.Events;
using Caliburn.Micro;
using Ninject.Extensions.Logging;
using Brush = System.Windows.Media.Brush;
namespace Artemis.Managers
{
@ -13,11 +14,12 @@ namespace Artemis.Managers
/// </summary>
public class LoopManager : IDisposable
{
private readonly DeviceManager _deviceManager;
private readonly EffectManager _effectManager;
private readonly IEventAggregator _events;
private readonly DeviceManager _deviceManager;
private readonly ILogger _logger;
private readonly Timer _loopTimer;
private int _fpsCount;
public LoopManager(ILogger logger, IEventAggregator events, EffectManager effectManager,
DeviceManager deviceManager)
@ -27,9 +29,18 @@ namespace Artemis.Managers
_effectManager = effectManager;
_deviceManager = deviceManager;
// Setup timers
_loopTimer = new Timer(40);
_loopTimer.Elapsed += Render;
_loopTimer.Start();
var fpsTimer = new Timer(1000);
fpsTimer.Elapsed += delegate
{
Debug.WriteLine(_fpsCount);
_fpsCount = 0;
};
fpsTimer.Start();
}
/// <summary>
@ -121,8 +132,8 @@ namespace Artemis.Managers
// Get ActiveEffect's bitmap
Bitmap bitmap = null;
System.Windows.Media.Brush mouseBrush = null;
System.Windows.Media.Brush headsetBrush = null;
Brush mouseBrush = null;
Brush headsetBrush = null;
var mice = _deviceManager.MiceProviders.Where(m => m.CanUse).ToList();
var headsets = _deviceManager.HeadsetProviders.Where(m => m.CanUse).ToList();
@ -144,7 +155,10 @@ namespace Artemis.Managers
// If no bitmap was generated this frame is done
if (bitmap == null)
{
_fpsCount++;
return;
}
// Fill the bitmap's background with black to avoid trailing colors on some keyboards
var fixedBmp = new Bitmap(bitmap.Width, bitmap.Height);
@ -158,6 +172,8 @@ namespace Artemis.Managers
// Update the keyboard
_deviceManager.ActiveKeyboard?.DrawBitmap(bitmap);
_fpsCount++;
}
}
}

View File

@ -1,7 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Timers;
using Artemis.Models;
using Artemis.Modules.Effects.ProfilePreview;
using Artemis.Settings;
using Artemis.ViewModels.Abstract;
@ -15,7 +14,6 @@ namespace Artemis.Managers
private readonly EffectManager _effectManager;
private readonly ILogger _logger;
private readonly LoopManager _loopManager;
private EffectModel _prePreviewEffect;
public ProfileManager(ILogger logger, EffectManager effectManager, DeviceManager deviceManager,
LoopManager loopManager)
@ -54,21 +52,18 @@ namespace Artemis.Managers
if (_effectManager.ActiveEffect != ProfilePreviewModel)
return;
_logger.Debug("Clear effect after profile preview");
_logger.Debug("Loading last effect after profile preview");
var lastEffect = _effectManager.GetLastEffect();
if (lastEffect != null)
_effectManager.ChangeEffect(lastEffect);
else
_effectManager.ClearEffect();
if (_prePreviewEffect == null || _prePreviewEffect is GameModel)
return;
_logger.Debug("Change back effect after profile preview");
_effectManager.ChangeEffect(_prePreviewEffect);
}
else
{
if (_effectManager.ActiveEffect != ProfilePreviewModel)
{
_logger.Debug("Activate profile preview");
_prePreviewEffect = _effectManager.ActiveEffect;
_effectManager.ChangeEffect(ProfilePreviewModel);
}

View File

@ -23,6 +23,10 @@ namespace Artemis.Models
DataModel = dataModel;
}
// Used by profile system
public IDataModel DataModel { get; set; }
public ProfileModel Profile { get; set; }
public abstract void Dispose();
// Called on creation
@ -31,12 +35,9 @@ namespace Artemis.Models
// Called every frame
public abstract void Update();
// Used by profile system
public IDataModel DataModel { get; set; }
public ProfileModel Profile { get; set; }
// Called after every update
public virtual void Render(out Bitmap keyboard, out Brush mouse, out Brush headset, bool renderMice, bool renderHeadsets)
public virtual void Render(out Bitmap keyboard, out Brush mouse, out Brush headset, bool renderMice,
bool renderHeadsets)
{
keyboard = null;
mouse = null;
@ -49,7 +50,8 @@ namespace Artemis.Models
var renderLayers = GetRenderLayers(renderMice, renderHeadsets);
// Render the keyboard layer-by-layer
keyboard = Profile.GenerateBitmap(renderLayers, DataModel, MainManager.DeviceManager.ActiveKeyboard.KeyboardRectangle(4), false, true);
keyboard = Profile.GenerateBitmap(renderLayers, DataModel,
MainManager.DeviceManager.ActiveKeyboard.KeyboardRectangle(4), false, true);
// Render the first enabled mouse (will default to null if renderMice was false)
mouse = Profile.GenerateBrush(renderLayers.LastOrDefault(l => l.LayerType == LayerType.Mouse), DataModel);
// Render the first enabled headset (will default to null if renderHeadsets was false)

View File

@ -1,4 +1,5 @@
using Artemis.Models.Interfaces;
using SpotifyAPI.Local.Models;
namespace Artemis.Modules.Effects.WindowsProfile
{
@ -27,6 +28,7 @@ namespace Artemis.Modules.Effects.WindowsProfile
}
public class Spotify
{
public bool Running { get; set; }
public string Artist { get; set; }
public string SongName { get; set; }
public int SongPercentCompleted { get; set; }

View File

@ -105,16 +105,25 @@ namespace Artemis.Modules.Effects.WindowsProfile
{
StatusResponse status = _spotify.GetStatus();
if (status == null)
{
dataModel.Spotify.Running = false;
return;
}
dataModel.Spotify.Artist = status.Track.ArtistResource.Name;
dataModel.Spotify.SongName = status.Track.TrackResource.Name;
dataModel.Spotify.SongPercentCompleted = (int) (status.PlayingPosition/status.Track.Length*100.0);
dataModel.Spotify.Running = true;
dataModel.Spotify.SpotifyVolume = (int)(status.Volume * 100);
dataModel.Spotify.Album = status.Track.AlbumResource.Name;
dataModel.Spotify.Repeat = status.Repeat;
dataModel.Spotify.Shuffle = status.Shuffle;
dataModel.Spotify.Playing = status.Playing;
// Only update track info if not null
if (status.Track == null)
return;
dataModel.Spotify.Artist = status.Track.ArtistResource?.Name;
dataModel.Spotify.SongName = status.Track.TrackResource?.Name;
dataModel.Spotify.SongPercentCompleted = (int)(status.PlayingPosition / status.Track.Length * 100.0);
dataModel.Spotify.Album = status.Track.AlbumResource?.Name;
}
}
}

View File

@ -2,6 +2,7 @@
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Timers;
using System.Xml.Serialization;
using Artemis.Models.Interfaces;
using Artemis.Models.Profiles;
@ -40,6 +41,7 @@ namespace Artemis.ViewModels.Profiles
.Select(c => new LayerConditionViewModel(this, c, DataModelProps)));
PropertyChanged += PropertiesViewModelHandler;
PreSelect();
}