Filtration/Filtration.ObjectModel/Item.cs

131 lines
4.0 KiB
C#
Raw Permalink Normal View History

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Windows.Media;
using Filtration.ObjectModel.Enums;
using Filtration.ObjectModel.Extensions;
namespace Filtration.ObjectModel
{
public interface IItem
{
string Description { get; set; }
string ItemClass { get; set; }
string BaseType { get; set; }
int DropLevel { get; set; }
int ItemLevel { get; set; }
int Height { get; set; }
int Width { get; set; }
int Quality { get; set; }
ItemRarity ItemRarity { get; set; }
int SocketCount { get; }
int LinkedSockets { get; }
2015-12-20 10:17:26 -05:00
IEnumerable<SocketGroup> LinkedSocketGroups { get; }
2015-12-28 12:30:34 -05:00
List<SocketGroup> SocketGroups { get; set; }
Color DefaultTextColor { get; }
}
[Table("Item")]
public class Item : IItem
{
private List<SocketGroup> _socketGroups;
public long Id { get; set; }
[Required]
[StringLength(100)]
public string Description { get; set; }
[Required]
[StringLength(100)]
2015-12-28 12:30:34 -05:00
public string BaseType { get; set; }
[Required]
[StringLength(100)]
public string ItemClass { get; set; }
2015-12-28 12:30:34 -05:00
public int DropLevel { get; set; }
2015-12-28 12:30:34 -05:00
public int ItemLevel { get; set; }
2015-12-28 12:30:34 -05:00
public int Height { get; set; }
2015-12-28 12:30:34 -05:00
public int Width { get; set; }
2015-12-28 12:30:34 -05:00
public int Quality { get; set; }
2015-12-28 12:30:34 -05:00
public ItemRarity ItemRarity { get; set; }
[StringLength(20)]
public string Sockets { get; set; }
public long ItemSetId { get; set; }
public virtual ItemSet ItemSet { get; set; }
public int SocketCount { get; private set; }
2015-12-28 12:30:34 -05:00
public int LinkedSockets { get; private set; }
2015-12-20 10:17:26 -05:00
public IEnumerable<SocketGroup> LinkedSocketGroups
{
get { return SocketGroups.Where(s => s.Linked); }
}
[NotMapped]
public List<SocketGroup> SocketGroups
{
get { return _socketGroups; }
set
{
var socketCount = value.Sum(s => s.Count);
if (socketCount < 0 || socketCount > 6)
{
throw new InvalidOperationException("An item must have between 0 and 6 sockets");
}
var evenSocketCount = socketCount % 2 == 0;
var maxSocketGroups = Math.Max(1, evenSocketCount ? socketCount / 2 : socketCount - 1);
var maxLinkedSocketGroups = Math.Max(1, evenSocketCount ? maxSocketGroups : maxSocketGroups - 1);
if (value.Count > maxSocketGroups)
{
throw new InvalidOperationException("Invalid number of socket groups for the socket count of this item");
}
if (value.Count(s => s.Linked) > maxLinkedSocketGroups)
{
throw new InvalidOperationException("Invalid number of linked socket groups for the socket count of this item");
}
_socketGroups = value;
SocketCount = socketCount;
var linkedSocketGroups = value.Where(s => s.Linked).ToList();
LinkedSockets = linkedSocketGroups.Any() ? linkedSocketGroups.Max(s => s.Count) : 0;
}
}
public Color DefaultTextColor
{
get
{
if (ItemClass.Contains("Gems"))
{
return PathOfExileNamedColors.Colors[PathOfExileNamedColor.GemItem];
}
if (ItemClass.Contains("Quest"))
{
return PathOfExileNamedColors.Colors[PathOfExileNamedColor.QuestItem];
}
return ItemRarity != ItemRarity.NotSet ? ItemRarity.DefaultRarityTextColor() : PathOfExileNamedColors.Colors[PathOfExileNamedColor.WhiteItem];
}
}
}
}