Skip to content

Commit

Permalink
Merge branch 'master' into stable-mod-id
Browse files Browse the repository at this point in the history
  • Loading branch information
EliphasNUIT committed Nov 23, 2024
2 parents 20e8bf4 + d1fa9fb commit 512e234
Show file tree
Hide file tree
Showing 45 changed files with 457 additions and 578 deletions.
20 changes: 18 additions & 2 deletions GW2EIBuilders/Resources/JS/CR-JS/decorations.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ class DoughnutDecorationMetadata extends FormDecorationMetadata {
class LineDecorationMetadata extends FormDecorationMetadata {
constructor(params) {
super(params);
this.thickness = params.thickness;
this.worldSizeThickness = params.worldSizeThickness;
if (this.worldSizeThickness) {
this.thickness *= InchToPixel;
}
}
}

Expand Down Expand Up @@ -693,6 +698,14 @@ class LineMechanicDrawable extends FormMechanicDrawable {
this.endMaster = null;
}

get thickness() {
return this.metadata.thickness;
}

get worldSizeThickness() {
return this.metadata.worldSizeThickness;
}

getTargetPosition() {
var time = animator.reactiveDataStatus.time;
if (this.start > time || this.end < time) {
Expand Down Expand Up @@ -749,8 +762,11 @@ class LineMechanicDrawable extends FormMechanicDrawable {
ctx.lineTo(percent * (target.x - pos.x), percent * (target.y - pos.y));
ctx.closePath();
}

ctx.lineWidth = (2 / animator.scale).toString();
let thickness = this.thickness;
if (!this.worldSizeThickness) {
thickness /= animator.scale;
}
ctx.lineWidth = (thickness).toString();
ctx.strokeStyle = this.color;
ctx.stroke();
ctx.restore();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ internal void ComputeBuffGraphs(ParsedEvtcLog log)
_buffDistribution = new(log);
_buffPresence = new(log);
_buffSimulators = new(trackedBuffs.Count * 2);

var buffStackItemPool = new BuffStackItemPool();
foreach (Buff buff in trackedBuffs)
{
long buffID = buff.ID;
Expand All @@ -369,11 +369,11 @@ internal void ComputeBuffGraphs(ParsedEvtcLog log)
if (log.CombatData.UseBuffInstanceSimulator && AgentItem.Type == AgentItem.AgentType.NonSquadPlayer)
{
buffEvents.RemoveAll(x => !x.IsBuffSimulatorCompliant(false));
simulator = buff.CreateSimulator(log, true);
simulator = buff.CreateSimulator(log, buffStackItemPool, true);
}
else
{
simulator = buff.CreateSimulator(log, false);
simulator = buff.CreateSimulator(log, buffStackItemPool, false);
}
simulator.Simulate(buffEvents, log.FightData.FightStart, log.FightData.FightEnd);
}
Expand All @@ -382,7 +382,7 @@ internal void ComputeBuffGraphs(ParsedEvtcLog log)
// get rid of logs invalid for HasStackIDs false
log.UpdateProgressWithCancellationCheck("Parsing: Failed id based simulation on " + Character + " for " + buff.Name + " because " + e.Message);
buffEvents.RemoveAll(x => !x.IsBuffSimulatorCompliant(false));
simulator = buff.CreateSimulator(log, true);
simulator = buff.CreateSimulator(log, buffStackItemPool, true);
simulator.Simulate(buffEvents, log.FightData.FightStart, log.FightData.FightEnd);
}
_buffSimulators[buffID] = simulator;
Expand Down
10 changes: 5 additions & 5 deletions GW2EIEvtcParser/EIData/Buffs/Buff.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ internal void VerifyBuffInfoEvent(BuffInfoEvent buffInfoEvent, ParserController
}
}

internal AbstractBuffSimulator CreateSimulator(ParsedEvtcLog log, bool forceNoId)
internal AbstractBuffSimulator CreateSimulator(ParsedEvtcLog log, BuffStackItemPool pool, bool forceNoId)
{
BuffInfoEvent? buffInfoEvent = log.CombatData.GetBuffInfoEvent(ID);
int capacity = Capacity;
Expand All @@ -146,16 +146,16 @@ internal AbstractBuffSimulator CreateSimulator(ParsedEvtcLog log, bool forceNoId

return Type switch
{
BuffType.Intensity => new BuffSimulatorIntensity(log, this, capacity),
BuffType.Duration => new BuffSimulatorDuration(log, this, capacity),
BuffType.Intensity => new BuffSimulatorIntensity(log, this, pool, capacity),
BuffType.Duration => new BuffSimulatorDuration(log, this, pool, capacity),
_ => throw new InvalidDataException("Buffs can not be stackless"),
};
}

return Type switch
{
BuffType.Intensity => new BuffSimulatorIDIntensity(log, this, capacity),
BuffType.Duration => new BuffSimulatorIDDuration(log, this, capacity),
BuffType.Intensity => new BuffSimulatorIDIntensity(log, this, pool, capacity),
BuffType.Duration => new BuffSimulatorIDDuration(log, this, pool, capacity),
_ => throw new InvalidDataException("Buffs can not be stackless"),
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace GW2EIEvtcParser.EIData.BuffSimulators;

internal abstract class AbstractBuffSimulator(ParsedEvtcLog log, Buff buff)
internal abstract class AbstractBuffSimulator(ParsedEvtcLog log, Buff buff, BuffStackItemPool pool)
{
// Fields
public readonly List<BuffSimulationItem> GenerationSimulation = []; //TODO(Rennorb) @perf
Expand All @@ -14,6 +14,8 @@ internal abstract class AbstractBuffSimulator(ParsedEvtcLog log, Buff buff)

protected readonly ParsedEvtcLog Log = log;

protected readonly BuffStackItemPool Pool = pool;


// Abstract Methods
/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

internal abstract class AbstractSimulationItem
{
public abstract void SetBuffDistributionItem(BuffDistribution distribs, long start, long end, long boonid);
public abstract long SetBuffDistributionItem(BuffDistribution distribs, long start, long end, long boonid);
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ public Segment ToSegment(SingleActor actor)
return new Segment(Start, End, GetActiveStacks(actor));
}

public Segment ToDurationSegment()
/*public Segment ToDurationSegment()
{
return new Segment(Start, End, GetActualDuration());
}
}*/

public abstract void OverrideEnd(long end);
public abstract IEnumerable<long> GetActualDurationPerStack();
public abstract long GetActualDuration();
//public abstract IEnumerable<long> GetActualDurationPerStack();
//public abstract long GetActualDuration();

public abstract IEnumerable<AgentItem> GetSources();
public abstract IEnumerable<AgentItem> GetActiveSources();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,15 @@ namespace GW2EIEvtcParser.EIData.BuffSimulators;
internal class BuffSimulationItemBase : BuffSimulationItem
{
internal readonly AgentItem _src;
internal readonly AgentItem _seedSrc;
internal readonly long _totalDuration;
internal readonly bool _isExtension;
//internal readonly long _totalDuration;

protected internal BuffSimulationItemBase(BuffStackItem buffStackItem) : base(buffStackItem.Start, buffStackItem.Start + buffStackItem.Duration)
{
//NOTE(Rennorb): We need to copy these because for some ungodly reason buffsStackItems can change after this initializer runs.
// this only influences buff uptime values, so it can be difficult to spot.
// There is a regression test for this in Tests/Regression.cs:BuffUptime.
_src = buffStackItem.Src;
_seedSrc = buffStackItem.SeedSrc;
_totalDuration = buffStackItem.TotalDuration;
_isExtension = buffStackItem.IsExtension;
//_totalDuration = buffStackItem.TotalDuration;
}

public override void OverrideEnd(long end)
Expand Down Expand Up @@ -45,15 +41,15 @@ public override int GetStacks(SingleActor actor)
return GetActiveSources().Any(x => x == actor.AgentItem) ? 1 : 0;
}

public override IEnumerable<long> GetActualDurationPerStack()
/*public override IEnumerable<long> GetActualDurationPerStack()
{
return [ GetActualDuration() ];
}
public override long GetActualDuration()
{
return _totalDuration;
}
}*/

public override IEnumerable<AgentItem> GetSources()
{
Expand All @@ -65,66 +61,24 @@ public override IEnumerable<AgentItem> GetActiveSources()
return GetSources();
}

public override void SetBuffDistributionItem(BuffDistribution distribs, long start, long end, long buffID)
public override long SetBuffDistributionItem(BuffDistribution distribs, long start, long end, long buffID)
{
long cDur = GetClampedDuration(start, end);
if (cDur == 0)
{
return;
}

Dictionary<AgentItem, BuffDistributionItem> distribution = distribs.GetDistrib(buffID);
if (distribution.TryGetValue(_src, out var toModify))
{
toModify.IncrementValue(cDur);
}
else
if (cDur > 0)
{
distribution.Add(_src, new BuffDistributionItem(
cDur,
0, 0, 0, 0, 0));
}

if (_isExtension)
{
if (distribution.TryGetValue(_src, out toModify))
Dictionary<AgentItem, BuffDistributionItem> distribution = distribs.GetDistrib(buffID);
if (distribution.TryGetValue(_src, out var toModify))
{
toModify.IncrementExtension(cDur);
toModify.IncrementValue(cDur);
}
else
{
distribution.Add(_src, new BuffDistributionItem(
0,
0, 0, 0, cDur, 0));
}
}

if (_src != _seedSrc)
{
if (distribution.TryGetValue(_seedSrc, out toModify))
{
toModify.IncrementExtended(cDur);
}
else
{
distribution.Add(_seedSrc, new BuffDistributionItem(
0,
0, 0, 0, 0, cDur));
cDur,
0, 0, 0, 0, 0));
}
}

if (_src == ParserHelper._unknownAgent)
{
if (distribution.TryGetValue(_seedSrc, out toModify))
{
toModify.IncrementUnknownExtension(cDur);
}
else
{
distribution.Add(_seedSrc, new BuffDistributionItem(
0,
0, 0, cDur, 0, 0));
}
}
return cDur;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using GW2EIEvtcParser.ParsedData;

namespace GW2EIEvtcParser.EIData.BuffSimulators;

internal class BuffSimulationItemBaseWithExtension : BuffSimulationItemBase
{

protected internal BuffSimulationItemBaseWithExtension(BuffStackItem buffStackItem) : base(buffStackItem)
{
}
public override long SetBuffDistributionItem(BuffDistribution distribs, long start, long end, long buffID)
{
long cDur = base.SetBuffDistributionItem(distribs, start, end, buffID);
if (cDur > 0)
{
Dictionary<AgentItem, BuffDistributionItem> distribution = distribs.GetDistrib(buffID);
if (distribution.TryGetValue(_src, out var toModify))
{
toModify.IncrementExtension(cDur);
}
else
{
distribution.Add(_src, new BuffDistributionItem(
0,
0, 0, 0, cDur, 0));
}
}
return cDur;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using GW2EIEvtcParser.ParsedData;

namespace GW2EIEvtcParser.EIData.BuffSimulators;

internal class BuffSimulationItemBaseWithExtensionWithSeed : BuffSimulationItemBaseWithSeed
{

protected internal BuffSimulationItemBaseWithExtensionWithSeed(BuffStackItem buffStackItem) : base(buffStackItem)
{
}
public override long SetBuffDistributionItem(BuffDistribution distribs, long start, long end, long buffID)
{
long cDur = base.SetBuffDistributionItem(distribs, start, end, buffID);
if (cDur > 0)
{
Dictionary<AgentItem, BuffDistributionItem> distribution = distribs.GetDistrib(buffID);
if (distribution.TryGetValue(_src, out var toModify))
{
toModify.IncrementExtension(cDur);
}
else
{
distribution.Add(_src, new BuffDistributionItem(
0,
0, 0, 0, cDur, 0));
}
}
return cDur;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using GW2EIEvtcParser.ParsedData;

namespace GW2EIEvtcParser.EIData.BuffSimulators;

internal class BuffSimulationItemBaseWithSeed : BuffSimulationItemBase
{
internal readonly AgentItem _seedSrc;

protected internal BuffSimulationItemBaseWithSeed(BuffStackItem buffStackItem) : base(buffStackItem)
{
_seedSrc = buffStackItem.SeedSrc;
}
public override long SetBuffDistributionItem(BuffDistribution distribs, long start, long end, long buffID)
{
long cDur = base.SetBuffDistributionItem(distribs, start, end, buffID);
if (cDur > 0)
{
Dictionary<AgentItem, BuffDistributionItem> distribution = distribs.GetDistrib(buffID);
if (distribution.TryGetValue(_seedSrc, out var toModify))
{
toModify.IncrementExtended(cDur);
}
else
{
distribution.Add(_seedSrc, new BuffDistributionItem(
0,
0, 0, 0, 0, cDur));
}
if (_src == ParserHelper._unknownAgent)
{
if (distribution.TryGetValue(_seedSrc, out toModify))
{
toModify.IncrementUnknownExtension(cDur);
}
else
{
distribution.Add(_seedSrc, new BuffDistributionItem(
0,
0, 0, cDur, 0, 0));
}
}
}
return cDur;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ public override IEnumerable<AgentItem> GetActiveSources()
return GetSources().Take(1);
}

public override long GetActualDuration()
/*public override long GetActualDuration()
{
return GetActualDurationPerStack().Sum();
}
}*/

public override void SetBuffDistributionItem(BuffDistribution distribs, long start, long end, long boonid)
public override long SetBuffDistributionItem(BuffDistribution distribs, long start, long end, long boonid)
{
Stacks.First().SetBuffDistributionItem(distribs, start, end, boonid);
return Stacks.First().SetBuffDistributionItem(distribs, start, end, boonid);
}
}
Loading

0 comments on commit 512e234

Please sign in to comment.