core

package
v0.0.182 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 6, 2026 License: MIT Imports: 27 Imported by: 0

Documentation

Overview

Proto-based function interface for the simulator

Functions for creating common types of auras.

Implements the core functionality for the RPPM system RPPM values are either dynamically loaded from the spell data Or dan be provided manually if the values are not correct in the spell data

Implements a generic resource bar that can be used to implement secondary resources TODO: Check whether pre-pull OOC resource loss needs to be supported for DemonicFury

Index

Constants

View Source
const (
	ProcMaskMeleeMH = ProcMaskMeleeMHAuto | ProcMaskMeleeMHSpecial
	ProcMaskMeleeOH = ProcMaskMeleeOHAuto | ProcMaskMeleeOHSpecial
	// Equivalent to in-game mask of 4.
	ProcMaskMeleeWhiteHit = ProcMaskMeleeMHAuto | ProcMaskMeleeOHAuto
	// Equivalent to in-game mask of 68.
	ProcMaskWhiteHit = ProcMaskMeleeMHAuto | ProcMaskMeleeOHAuto | ProcMaskRangedAuto
	// Equivalent to in-game mask of 16.
	ProcMaskMeleeSpecial = ProcMaskMeleeMHSpecial | ProcMaskMeleeOHSpecial
	// Equivalent to in-game mask of 272.
	ProcMaskMeleeOrRangedSpecial = ProcMaskMeleeSpecial | ProcMaskRangedSpecial
	// Equivalent to in-game mask of 20.
	ProcMaskMelee = ProcMaskMeleeWhiteHit | ProcMaskMeleeSpecial
	// Equivalent to in-game mask of 320.
	ProcMaskRanged = ProcMaskRangedAuto | ProcMaskRangedSpecial
	// Equivalent to in-game mask of 340.
	ProcMaskMeleeOrRanged = ProcMaskMelee | ProcMaskRanged

	ProcMaskDirect = ProcMaskMelee | ProcMaskRanged | ProcMaskSpellDamage

	ProcMaskSpecial = ProcMaskMeleeOrRangedSpecial | ProcMaskSpellDamage

	ProcMaskMeleeOrMeleeProc   = ProcMaskMelee | ProcMaskMeleeProc
	ProcMaskRangedOrRangedProc = ProcMaskRanged | ProcMaskRangedProc
	ProcMaskSpellOrSpellProc   = ProcMaskSpellDamage | ProcMaskSpellProc

	ProcMaskProc = ProcMaskSpellProc | ProcMaskRangedProc | ProcMaskMeleeProc
)
View Source
const (
	CooldownPriorityLow       = -1000
	CooldownPriorityDefault   = 0
	CooldownPriorityDrums     = 2000
	CooldownPriorityBloodlust = 1000
)
View Source
const (
	MovementStart = iota
	MovementUpdate
	MovementEnd
)
View Source
const AgilityToDodgePercent = 1 / 95115.8596

Used by Monks and Druids

View Source
const AgilityToDodgeRating = AgilityToDodgePercent * 100 * DodgeRatingPerDodgePercent
View Source
const BaseRageHitFactor = 1.75
View Source
const BloodlustAuraTag = "Bloodlust"
View Source
const BloodlustCD = time.Minute * 10
View Source
const BloodlustDuration = time.Second * 40
View Source
const BossGCD = time.Millisecond * 1620
View Source
const CharacterLevel = 90
View Source
const CombatTableCoverageCap = 1.024 // 102.4% chance to avoid an attack
View Source
const CritRatingPerCritPercent = 600.000000
View Source
const DTPSReferenceStat = stats.Armor
View Source
const DefaultAttackPowerPerDPS = 14.0
View Source
const DevotionAuraCD = time.Minute * 3
View Source
const DevotionAuraDuration = time.Second * 6
View Source
const DodgeRatingPerDodgePercent = 885.000000
View Source
const EnemyAutoAttackAPCoefficient = 1.0 / (14.0 * 177.0)

Updated based on formulas supplied by InDebt on WoWSims Discord

View Source
const ExpertisePerQuarterPercentReduction = 85.0
View Source
const GCDDefault = time.Millisecond * 1500
View Source
const GCDMin = time.Second * 1
View Source
const GuardianSpiritCD = time.Minute * 3
View Source
const GuardianSpiritDuration = time.Second * 10
View Source
const HasteRatingPerHastePercent = 425.000000
View Source
const Inactive = -1
View Source
const LongDuration = 300
View Source
const ManaTideTotemCD = time.Minute * 5
View Source
const ManaTideTotemDuration = time.Second * 12
View Source
const MasteryRaidBuffStrength = 3000
View Source
const MasteryRatingPerMasteryPoint = 600.000000
View Source
const MaxChallengeModeIlvl = 463
View Source
const MaxIlvl = 600
View Source
const MaxMeleeRange = 5.0 // in yards
View Source
const MaxSpellQueueWindow = time.Millisecond * 400
View Source
const MinIlvl = 100
View Source
const MinUpgradeIlvl = 458
View Source
const NeverExpires = time.Duration(math.MaxInt64)
View Source
const NumItemSlots = proto.ItemSlot_ItemSlotOffHand + 1
View Source
const PainSuppressionCD = time.Minute * 3
View Source
const PainSuppressionDuration = time.Second * 8
View Source
const ParryRatingPerParryPercent = 885.000000
View Source
const PetUpdateInterval = time.Millisecond * 5250
View Source
const PhysicalHitRatingPerHitPercent = 340.000000
View Source
const RallyingCryCD = time.Minute * 3
View Source
const RallyingCryDuration = time.Second * 10
View Source
const RppmLastCheckCap = time.Second * 10
View Source
const RppmLastProcCap = time.Second * 1000
View Source
const RppmLastProcResetValue = time.Second * 120
View Source
const SatedAuraLabel = "Sated"
View Source
const ShatteringThrowCD = time.Minute * 5
View Source
const ShortDuration = 60
View Source
const SkullBannerAuraTag = "SkullBanner"
View Source
const SkullBannerCD = time.Minute * 3
View Source
const SkullBannerDuration = time.Second * 10
View Source
const SpellBatchWindow = time.Millisecond * 10
View Source
const SpellDamageEffectAuraTag = "SpellDamageAuraTag"
View Source
const SpellHitRatingPerHitPercent = 340.000000
View Source
const StormLashAuraTag = "StormLash"
View Source
const StormLashCD = time.Minute * 5
View Source
const StormLashDuration = time.Second * 10
View Source
const StrengthToParryPercent = 1 / 95115.8596

Used by Protection Warriors, Protection Paladins and Blood Death Knights

View Source
const StrengthToParryRating = StrengthToParryPercent * 100 * ParryRatingPerParryPercent
View Source
const ThreatPerManaGained = 0.5
View Source
const ThreatPerRageGained = 5
View Source
const UnholyFrenzyCD = time.Minute * 3
View Source
const UnholyFrenzyDuration = time.Second * 30
View Source
const VengeanceScaling = 0.018 // Might be reverted to 0.015 in a later patch
View Source
const VigilanceAuraTag = "Vigilance"
View Source
const VigilanceCD = time.Minute * 2
View Source
const VigilanceDuration = time.Second * 12
View Source
const VigilanceSpellID int32 = 114030
View Source
const WeakenedBlowsDuration = time.Second * 30

Variables

View Source
var AddEffectsToTest = true

This value can be set before adding item effects, to control whether they are included in tests.

View Source
var AlchStoneItemIDs = []int32{136197, 80508, 96252, 96253, 96254, 44322, 44323, 44324}
View Source
var AverageDefaultSimTestOptions = &proto.SimOptions{
	Iterations: 2000,
	IsTest:     true,
	Debug:      false,
	RandomSeed: 101,
}
View Source
var AvoidanceDRByClass = map[proto.Class]DiminishingReturnsConstants{
	proto.Class_ClassWarrior:     {0.956, 237.186, 90.6425, 150.376},
	proto.Class_ClassPaladin:     {0.886, 237.186, 66.5675, 150.376},
	proto.Class_ClassHunter:      {0.988, 0, 145.560, 0},
	proto.Class_ClassRogue:       {0.988, 145.560, 145.560, 0},
	proto.Class_ClassPriest:      {0.983, 0, 150.376, 0},
	proto.Class_ClassDeathKnight: {0.956, 237.186, 90.6425, 0},
	proto.Class_ClassShaman:      {0.988, 145.560, 145.560, 0},
	proto.Class_ClassMonk:        {1.422, 90.6425, 501.253, 0},
	proto.Class_ClassMage:        {0.983, 0, 150.376, 0},
	proto.Class_ClassWarlock:     {0.983, 0, 150.376, 0},
	proto.Class_ClassDruid:       {1.222, 0, 150.376, 0},
}

https://github.com/raethkcj/MistsDiminishingReturns

View Source
var BaseStats = map[BaseStatsKey]stats.Stats{}
View Source
var BigDaddyActionID = ActionID{SpellID: 89637}
View Source
var BloodlustActionID = ActionID{SpellID: 2825}
View Source
var ChanceOfDeathAuraLabel = "Chance of Death"
View Source
var ClassBaseScaling = map[proto.Class]float64{
	proto.Class_ClassUnknown:     1710.000000,
	proto.Class_ClassWarrior:     1246.298600,
	proto.Class_ClassPaladin:     1141.926000,
	proto.Class_ClassHunter:      1246.298600,
	proto.Class_ClassRogue:       1246.298600,
	proto.Class_ClassPriest:      1049.328400,
	proto.Class_ClassDeathKnight: 1246.298600,
	proto.Class_ClassShaman:      1114.501700,
	proto.Class_ClassMage:        1040.778600,
	proto.Class_ClassWarlock:     1068.202900,
	proto.Class_ClassMonk:        1094.739700,
	proto.Class_ClassDruid:       1094.739700,
}
View Source
var ClassBaseStats = map[proto.Class]stats.Stats{
	proto.Class_ClassUnknown: {},
	proto.Class_ClassWarrior: {
		stats.Health:      146663,
		stats.Agility:     133,
		stats.Strength:    206,
		stats.Intellect:   39,
		stats.Spirit:      67,
		stats.Stamina:     188,
		stats.AttackPower: float64(CharacterLevel)*3.0 - 20,
	},
	proto.Class_ClassPaladin: {
		stats.Health:      146663,
		stats.Agility:     105,
		stats.Strength:    178,
		stats.Intellect:   114,
		stats.Spirit:      123,
		stats.Stamina:     169,
		stats.AttackPower: float64(CharacterLevel)*3.0 - 20,
	},
	proto.Class_ClassHunter: {
		stats.Health:            146663,
		stats.Agility:           216,
		stats.Strength:          86,
		stats.Intellect:         105,
		stats.Spirit:            113,
		stats.Stamina:           151,
		stats.AttackPower:       float64(CharacterLevel)*2.0 - 20,
		stats.RangedAttackPower: float64(CharacterLevel)*2.0 - 20,
	},
	proto.Class_ClassRogue: {
		stats.Health:      146663,
		stats.Agility:     225,
		stats.Strength:    132,
		stats.Intellect:   48,
		stats.Spirit:      77,
		stats.Stamina:     123,
		stats.AttackPower: float64(CharacterLevel)*2.0 - 20,
	},
	proto.Class_ClassPriest: {
		stats.Health:    146663,
		stats.Agility:   58,
		stats.Strength:  48,
		stats.Intellect: 207,
		stats.Spirit:    216,
		stats.Stamina:   77,
	},
	proto.Class_ClassDeathKnight: {
		stats.Health:      146663,
		stats.Agility:     131,
		stats.Strength:    209,
		stats.Intellect:   38,
		stats.Spirit:      69,
		stats.Stamina:     190,
		stats.AttackPower: float64(CharacterLevel)*3.0 - 20,
	},
	proto.Class_ClassShaman: {
		stats.Health:      146663,
		stats.Agility:     86,
		stats.Strength:    142,
		stats.Intellect:   151,
		stats.Spirit:      169,
		stats.Stamina:     161,
		stats.AttackPower: float64(CharacterLevel) * 2.0,
	},
	proto.Class_ClassMage: {
		stats.Health:    146663,
		stats.Agility:   48,
		stats.Strength:  39,
		stats.Intellect: 215,
		stats.Spirit:    207,
		stats.Stamina:   67,
	},
	proto.Class_ClassWarlock: {
		stats.Health:      146663,
		stats.Agility:     77,
		stats.Strength:    67,
		stats.Intellect:   188,
		stats.Spirit:      198,
		stats.Stamina:     104,
		stats.AttackPower: -10,
	},
	proto.Class_ClassDruid: {
		stats.Health:      146663,
		stats.Agility:     95,
		stats.Strength:    104,
		stats.Intellect:   169,
		stats.Spirit:      188,
		stats.Stamina:     114,
		stats.AttackPower: float64(CharacterLevel)*3.0 - 10,
	},
	proto.Class_ClassMonk: {
		stats.Health:      146663,
		stats.Agility:     113,
		stats.Strength:    94,
		stats.Intellect:   169,
		stats.Spirit:      190,
		stats.Stamina:     113,
		stats.AttackPower: float64(CharacterLevel)*2.0 - 30,
	},
}
View Source
var ConjuredAuraTag = "Conjured"
View Source
var ConsumablesByID = map[int32]Consumable{}
View Source
var CritPerAgiMaxLevel = map[proto.Class]float64{
	proto.Class_ClassUnknown:     0.0,
	proto.Class_ClassWarrior:     0.00010000,
	proto.Class_ClassPaladin:     0.00010000,
	proto.Class_ClassHunter:      0.00079395,
	proto.Class_ClassRogue:       0.00079395,
	proto.Class_ClassPriest:      0.00125496,
	proto.Class_ClassDeathKnight: 0.00010000,
	proto.Class_ClassShaman:      0.00079395,
	proto.Class_ClassMage:        0.00128057,
	proto.Class_ClassWarlock:     0.00130618,
	proto.Class_ClassMonk:        0.00079395,
	proto.Class_ClassDruid:       0.00079395,
}
View Source
var CritPerIntMaxLevel = map[proto.Class]float64{
	proto.Class_ClassUnknown:     0.0,
	proto.Class_ClassWarrior:     0.00010000,
	proto.Class_ClassPaladin:     0.00039469,
	proto.Class_ClassHunter:      0.00010000,
	proto.Class_ClassRogue:       0.00010000,
	proto.Class_ClassPriest:      0.00039469,
	proto.Class_ClassDeathKnight: 0.00010000,
	proto.Class_ClassShaman:      0.00039469,
	proto.Class_ClassMage:        0.00039469,
	proto.Class_ClassWarlock:     0.00039469,
	proto.Class_ClassMonk:        0.00039469,
	proto.Class_ClassDruid:       0.00039469,
}
View Source
var DefaultSimTestOptions = &proto.SimOptions{
	Iterations: 20,
	IsTest:     true,
	Debug:      false,
	RandomSeed: 101,
}
View Source
var DefaultTargetProto = FreshDefaultTargetConfig()
View Source
var DevotionAuraActionID = ActionID{SpellID: 31821}
View Source
var DevotionAuraTag = "DevotionAura"
View Source
var EnchantsByEffectID = map[int32]Enchant{}
View Source
var FullDebuffs = &proto.Debuffs{
	WeakenedBlows:         true,
	PhysicalVulnerability: true,
	WeakenedArmor:         true,
	MortalWounds:          true,
	FireBreath:            true,
	LightningBreath:       true,
	MasterPoisoner:        true,
	CurseOfElements:       true,
	NecroticStrike:        true,
	LavaBreath:            true,
	SporeCloud:            true,
	Slow:                  true,
	MindNumbingPoison:     true,
	CurseOfEnfeeblement:   true,
}
View Source
var FullIndividualBuffs = &proto.IndividualBuffs{}
View Source
var FullPartyBuffs = &proto.PartyBuffs{}
View Source
var FullRaidBuffs = &proto.RaidBuffs{

	TrueshotAura: true,

	UnholyAura: true,

	ArcaneBrilliance: true,

	MindQuickening: true,

	LeaderOfThePack: true,

	BlessingOfMight: true,

	BlessingOfKings: true,

	PowerWordFortitude: true,

	Bloodlust: true,

	ManaTideTotemCount: 1,

	SkullBannerCount: 1,

	StormlashTotemCount: 1,
}
View Source
var GemsByID = map[int32]Gem{}
View Source
var GuardianSpiritAuraTag = "GuardianSpirit"
View Source
var HighpoweredBoltGunActionID = ActionID{ItemID: 40771}
View Source
var ItemEffectRandPropPointsByIlvl = map[int32]ItemEffectRandPropPoints{}
View Source
var ItemsByID = map[int32]Item{}
View Source
var ManaTideTotemActionID = ActionID{SpellID: 16190}
View Source
var ManaTideTotemAuraTag = "ManaTideTotem"
View Source
var PainSuppressionAuraTag = "PainSuppression"
View Source
var PotionAuraTag = "Potion"
View Source
var PresetEncounters []*proto.PresetEncounter
View Source
var RaceOffsets = map[proto.Race]stats.Stats{
	proto.Race_RaceUnknown: stats.Stats{},
	proto.Race_RaceHuman:   stats.Stats{},
	proto.Race_RaceOrc: {
		stats.Agility:   -3,
		stats.Strength:  3,
		stats.Intellect: -3,
		stats.Spirit:    2,
		stats.Stamina:   1,
	},
	proto.Race_RaceDwarf: {
		stats.Agility:   -4,
		stats.Strength:  5,
		stats.Intellect: -1,
		stats.Spirit:    -1,
		stats.Stamina:   1,
	},
	proto.Race_RaceNightElf: {
		stats.Agility:   4,
		stats.Strength:  -4,
		stats.Intellect: 0,
		stats.Spirit:    0,
		stats.Stamina:   0,
	},
	proto.Race_RaceUndead: {
		stats.Agility:   -2,
		stats.Strength:  -1,
		stats.Intellect: -2,
		stats.Spirit:    5,
		stats.Stamina:   0,
	},
	proto.Race_RaceTauren: {
		stats.Agility:   -4,
		stats.Strength:  5,
		stats.Intellect: -4,
		stats.Spirit:    2,
		stats.Stamina:   1,
	},
	proto.Race_RaceGnome: {
		stats.Agility:   2,
		stats.Strength:  -5,
		stats.Intellect: 3,
		stats.Spirit:    0,
		stats.Stamina:   0,
	},
	proto.Race_RaceTroll: {
		stats.Agility:   2,
		stats.Strength:  1,
		stats.Intellect: -4,
		stats.Spirit:    1,
		stats.Stamina:   0,
	},
	proto.Race_RaceBloodElf: {
		stats.Agility:   2,
		stats.Strength:  -3,
		stats.Intellect: 3,
		stats.Spirit:    -2,
		stats.Stamina:   0,
	},
	proto.Race_RaceDraenei: {
		stats.Agility:   -3,
		stats.Strength:  1,
		stats.Intellect: 0,
		stats.Spirit:    2,
		stats.Stamina:   0,
	},
	proto.Race_RaceGoblin: {
		stats.Agility:   2,
		stats.Strength:  -3,
		stats.Intellect: 3,
		stats.Spirit:    -2,
		stats.Stamina:   0,
	},
	proto.Race_RaceWorgen: {
		stats.Agility:   2,
		stats.Strength:  3,
		stats.Intellect: -4,
		stats.Spirit:    -1,
		stats.Stamina:   0,
	},
	proto.Race_RaceAlliancePandaren: {
		stats.Agility:   -2,
		stats.Strength:  0,
		stats.Intellect: -1,
		stats.Spirit:    2,
		stats.Stamina:   1,
	},
	proto.Race_RaceHordePandaren: {
		stats.Agility:   -2,
		stats.Strength:  0,
		stats.Intellect: -1,
		stats.Spirit:    2,
		stats.Stamina:   1,
	},
}
View Source
var RallyingCryActionID = ActionID{SpellID: 97462}
View Source
var RallyingCryAuraTag = "RallyingCry"
View Source
var RandomSuffixesByID = map[int32]RandomSuffix{}
View Source
var ReforgeStatsByID = map[int32]ReforgeStat{}
View Source
var ShatteringThrowAuraTag = "ShatteringThrow"
View Source
var ShatteringThrowDuration = time.Second * 10
View Source
var SkullBannerActionID = ActionID{SpellID: 114206}
View Source
var SpellEffectsById = map[int32]*proto.SpellEffect{}
View Source
var StatWeightsDefaultSimTestOptions = &proto.SimOptions{
	Iterations: 300,
	IsTest:     true,
	Debug:      false,
	RandomSeed: 101,
}
View Source
var StormLashSpellExceptions = map[int32]float64{
	1120:   2.0,
	403:    2.0,
	51505:  2.0,
	103103: 1.0,
	15407:  1.0,
	129197: 1.0,
	120360: 1.0,
	1752:   0.5,
	50286:  0.0,
}
View Source
var TricksOfTheTradeAuraTag = "TricksOfTheTrade"
View Source
var UnholyFrenzyAuraTag = "UnholyFrenzy"
View Source
var WITH_DB = false

Functions

func APLRotationFromJsonString

func APLRotationFromJsonString(jsonString string) *proto.APLRotation

func AddBaseStatsCombo

func AddBaseStatsCombo(r proto.Race, c proto.Class)

func AddPresetEncounter

func AddPresetEncounter(name string, targetPaths []string)

func AddPresetTarget

func AddPresetTarget(newPreset *PresetTarget)

func AllWeaponSlots

func AllWeaponSlots() []proto.ItemSlot

func ApplyFixedUptimeAura

func ApplyFixedUptimeAura(aura *Aura, uptime float64, tickLength time.Duration, startTime time.Duration)

func ApplyMetaGemCriticalDamageEffect

func ApplyMetaGemCriticalDamageEffect(agent Agent, _ proto.ItemLevelState)

Applies 3% Crit Damage effect https://www.wowhead.com/mop-classic/spell=44797/3-increased-critical-effect

func ApplyVarianceMinMax

func ApplyVarianceMinMax(avgEffect float64, variance float64) (float64, float64)

func ArmorSpecializationSlots

func ArmorSpecializationSlots() []proto.ItemSlot

func BothTimersReady

func BothTimersReady(t1 *Timer, t2 *Timer, sim *Simulation) bool

func BothTimersReadyAt

func BothTimersReadyAt(t1 *Timer, t2 *Timer) time.Duration

func CalcScalingSpellAverageEffect

func CalcScalingSpellAverageEffect(class proto.Class, spellEffectCoefficient float64) float64

spellEffectCoefficient is the value in the "Coefficient" column of the SpellEffect DB2 table

func CalcScalingSpellEffectVarianceMinMax

func CalcScalingSpellEffectVarianceMinMax(class proto.Class, spellEffectCoefficient float64, spellEffectVariance float64) (float64, float64)

spellEffectCoefficient is the value in the "Coefficient" column of the SpellEffect DB2 table spellEffectVariance is the value in the "Variance" column of the SpellEffect DB2 table

func CheckSliceOverlap

func CheckSliceOverlap[T comparable](s1 []T, s2 []T) bool

Returns true if two slices share any common elements, and false otherwise.

func Clamp

func Clamp(val float64, min float64, max float64) float64

func ColorIntersects

func ColorIntersects(g proto.GemColor, o proto.GemColor) bool

func CombineConcurrentSimResults

func CombineConcurrentSimResults(results []*proto.RaidSimResult, isDebug bool) *proto.RaidSimResult

func CompareConcurrentSimResultsTest

func CompareConcurrentSimResultsTest(t *testing.T, testName string, singleThreadRes *proto.RaidSimResult, multiThreadRes *proto.RaidSimResult, absoluteFloatTolerance float64, relativeFloatTolerance float64)

func ComputeStats

*

  • Returns character stats taking into account gear / buffs / consumes / etc

func DebugCompareLogs

func DebugCompareLogs(rsr *proto.RaidSimRequest, showCount int) (bool, string)

func DefaultItemSetSlots

func DefaultItemSetSlots() []proto.ItemSlot

func DisableDamageDoneByCaster

func DisableDamageDoneByCaster(index int, attackTable *AttackTable)

func DisableThreatDoneByCaster

func DisableThreatDoneByCaster(index int, attackTable *AttackTable)

func DurationFromSeconds

func DurationFromSeconds(numSeconds float64) time.Duration

func Each added in v0.0.19

func Each[T any](src []T, f func(T))

Iterate over a slice and calls f

func EnableDamageDoneByCaster

func EnableDamageDoneByCaster(index int, maxIndex int, attackTable *AttackTable, handler DynamicDamageDoneByCaster)

func EnableThreatDoneByCaster

func EnableThreatDoneByCaster(index int, maxIndex int, attackTable *AttackTable, handler DynamicThreatDoneByCaster)

func EquipmentSpecFromJsonString

func EquipmentSpecFromJsonString(jsonString string) *proto.EquipmentSpec

func FillTalentsProto

func FillTalentsProto(data protoreflect.Message, talentsStr string)

Uses proto reflection to set fields in a talents proto (e.g. MageTalents, WarriorTalents) based on a talentsStr.

func FilterMap

func FilterMap[K comparable, V any](src map[K]V, f func(K, V) bool) map[K]V

Returns a new map containing only the key/value pairs for which f returns true.

func FilterSlice

func FilterSlice[T any](src []T, f func(T) bool) []T

Returns a new slice containing only the elements for which f returns true.

func Flatten

func Flatten[T any](src [][]T) []T

Flattens a 2D slice into a 1D slice.

func FreshDefaultTargetConfig added in v0.0.10

func FreshDefaultTargetConfig() *proto.Target

func GetClassSpellScalingCoefficient

func GetClassSpellScalingCoefficient(class proto.Class) float64

Gets the spell scaling coefficient associated with a given class Retrieved from https://wago.tools/api/casc/1391660?download&branch=wow_classic_beta

func GetCurrentProtoVersion

func GetCurrentProtoVersion() int32

func GetItemEffectRandomPropPointsForItem

func GetItemEffectRandomPropPointsForItem(itemID int32, state proto.ItemLevelState) float64

func GetItemEffectScaling

func GetItemEffectScaling(itemID int32, coeff float64, state proto.ItemLevelState) float64

Used to get non-rounded stat values for item effects such as the amplify trinkets

func GetItemEffectScalingStatValue added in v0.0.179

func GetItemEffectScalingStatValue(itemID int32, coeff float64, state proto.ItemLevelState) float64

Used to get stat values for item effects which are rounded

func GetTristateValueFloat

func GetTristateValueFloat(effect proto.TristateEffect, regularValue float64, impValue float64) float64

func GetTristateValueInt32

func GetTristateValueInt32(effect proto.TristateEffect, regularValue int32, impValue int32) int32

func HasEnchantEffect

func HasEnchantEffect(id int32) bool

func HasItemEffect

func HasItemEffect(id int32) bool

func HasItemEffectForTest

func HasItemEffectForTest(id int32) bool

func IsRunningInWasm

func IsRunningInWasm() bool

func ItemEffectRandPropPointsToProto

func ItemEffectRandPropPointsToProto(ieRpp ItemEffectRandPropPoints) *proto.ItemEffectRandPropPoints

ItemEffectRandPropPointsToProto converts a Go ItemEffectRandPropPoints to a protobuf ItemEffectRandPropPoints

func ItemEquipmentBaseStats added in v0.0.4

func ItemEquipmentBaseStats(item Item) stats.Stats

Returns the base stats on the equipment. That is all stats without Gems / Enchants

func ItemEquipmentGemAndEnchantStats added in v0.0.4

func ItemEquipmentGemAndEnchantStats(item Item) stats.Stats

func ItemSwapFromJsonString

func ItemSwapFromJsonString(jsonString string) *proto.ItemSwap

func ItemTypeToSlot

func ItemTypeToSlot(it proto.ItemType) proto.ItemSlot

func MakeSingleTargetEncounter

func MakeSingleTargetEncounter(variation float64) *proto.Encounter

func MakeTristateValue

func MakeTristateValue(hasRegular bool, hasImproved bool) proto.TristateEffect

func MapMap

func MapMap[KI comparable, VI any, KO comparable, VO any](src map[KI]VI, f func(KI, VI) (KO, VO)) map[KO]VO

Returns a new map by applying f to each key/value pair in src.

func MapSlice

func MapSlice[I any, O any](src []I, f func(I) O) []O

Returns a new slice by applying f to each element in src.

func MasteryRatingToMasteryPoints

func MasteryRatingToMasteryPoints(masteryRating float64) float64

func MaxTimeToReady

func MaxTimeToReady(t1 *Timer, t2 *Timer, sim *Simulation) time.Duration

func NewDefaultTarget

func NewDefaultTarget() *proto.Target

func NewEnchantEffect

func NewEnchantEffect(id int32, enchantEffect ApplyEffect)

func NewItemEffect

func NewItemEffect(id int32, itemEffect ApplyEffect)

Registers an ApplyEffect function which will be called before the Sim starts, for any Agent that is wearing the item.

func PlayerProtoToSpec

func PlayerProtoToSpec(player *proto.Player) proto.Spec

func RaidBenchmark

func RaidBenchmark(b *testing.B, rsr *proto.RaidSimRequest)

func RaidPlayersWithClass

func RaidPlayersWithClass(raid *proto.Raid, class proto.Class) []*proto.Player

func RaidSimTest

func RaidSimTest(label string, t *testing.T, rsr *proto.RaidSimRequest, expectedDps float64)

func ReforgeStatToProto

func ReforgeStatToProto(stat ReforgeStat) *proto.ReforgeStat

ReforgeStatToProto converts a Go ReforgeStat to a protobuf ReforgeStat

func RegisterAgentFactory

func RegisterAgentFactory(emptyOptions interface{}, spec proto.Spec, factory AgentFactory, specSetter SpecSetter)

func RppmModFromProto

func RppmModFromProto(config *proto.RppmMod) (rppmMod, error)

func RunRaidSim

func RunRaidSim(request *proto.RaidSimRequest) *proto.RaidSimResult

*

  • Runs multiple iterations of the sim with a full raid.

func RunRaidSimAsync

func RunRaidSimAsync(request *proto.RaidSimRequest, progress chan *proto.ProgressMetrics, requestId string)

func RunRaidSimConcurrent

func RunRaidSimConcurrent(request *proto.RaidSimRequest) *proto.RaidSimResult

Threading does not work in WASM!

func RunRaidSimConcurrentAsync

func RunRaidSimConcurrentAsync(request *proto.RaidSimRequest, progress chan *proto.ProgressMetrics, requestId string)

Threading does not work in WASM!

func RunSim

func RunSim(rsr *proto.RaidSimRequest, progress chan *proto.ProgressMetrics, signals simsignals.Signals) *proto.RaidSimResult

func RunTestSuite

func RunTestSuite(t *testing.T, suiteName string, generators []TestGenerator)

func SetRunningInWasm

func SetRunningInWasm()

func SetToSortedSlice

func SetToSortedSlice[K cmp.Ordered](src map[K]bool) []K

Allows Go maps to be used like the "Set" type commonly found in other languages

func SinglePlayerRaidProto

func SinglePlayerRaidProto(player *proto.Player, partyBuffs *proto.PartyBuffs, raidBuffs *proto.RaidBuffs, debuffs *proto.Debuffs) *proto.Raid

func SplitSimRequestForConcurrency

func SplitSimRequestForConcurrency(request *proto.RaidSimRequest, splitCount int32) *proto.RaidSimRequestSplitResult

Will split into min(splitCount, iterations) requests.

func StatWeightCompute

func StatWeightCompute(request *proto.StatWeightsCalcRequest) *proto.StatWeightsResult

func StatWeightRequests

func StatWeightRequests(request *proto.StatWeightsRequest) *proto.StatWeightRequestsData

Get data for all requests needed for stat weights.

func StatWeights

func StatWeights(request *proto.StatWeightsRequest) *proto.StatWeightsResult

*

  • Returns stat weights and EP values, with standard deviations, for all stats.

func StatWeightsAsync

func StatWeightsAsync(request *proto.StatWeightsRequest, progress chan *proto.ProgressMetrics, requestId string)

func StringFromActionIDs

func StringFromActionIDs(actionIDs []ActionID) string

func StringFromStatTypes

func StringFromStatTypes(statTypes []stats.Stat) string

func Ternary

func Ternary[T any](condition bool, val1 T, val2 T) T

func TernaryDuration

func TernaryDuration(condition bool, val1 time.Duration, val2 time.Duration) time.Duration

func TernaryFloat64

func TernaryFloat64(condition bool, val1 float64, val2 float64) float64

func TernaryInt

func TernaryInt(condition bool, val1 int, val2 int) int

func TernaryInt32

func TernaryInt32(condition bool, val1 int32, val2 int32) int32

func TernaryInt64

func TernaryInt64(condition bool, val1 int64, val2 int64) int64

func TrinketSlots

func TrinketSlots() []proto.ItemSlot

func UnitLevelFloat64

func UnitLevelFloat64(unitLevel int32, maxLevelPlus0Val float64, maxLevelPlus1Val float64, maxLevelPlus2Val float64, maxLevelPlus3Val float64) float64

func WithSpec

func WithSpec(player *proto.Player, spec interface{}) *proto.Player

Applies the spec options to the given player. This is only necessary because the generated proto code does not export oneof interface types. Player is returned so this function can be used in-line with player creation.

func WithinToleranceFloat64

func WithinToleranceFloat64(expectedValue float64, actualValue float64, tolerance float64) bool

Types

type AIFactory

type AIFactory func() TargetAI

type APLAction

type APLAction struct {
	// contains filtered or unexported fields
}

func (*APLAction) Execute

func (action *APLAction) Execute(sim *Simulation)

func (*APLAction) Finalize

func (action *APLAction) Finalize(rot *APLRotation)

func (*APLAction) GetAllAPLValues

func (action *APLAction) GetAllAPLValues() []APLValue

Returns all APLValues used by this action and all of its inner Actions.

func (*APLAction) GetAllActions

func (action *APLAction) GetAllActions() []*APLAction

Returns this Action, along with all inner Actions.

func (*APLAction) GetAllSpells

func (action *APLAction) GetAllSpells() []*Spell

func (*APLAction) IsReady

func (action *APLAction) IsReady(sim *Simulation) bool

func (*APLAction) String

func (action *APLAction) String() string

type APLActionActivateAllStatBuffProcAuras

type APLActionActivateAllStatBuffProcAuras struct {
	// contains filtered or unexported fields
}

func (*APLActionActivateAllStatBuffProcAuras) Execute

func (action *APLActionActivateAllStatBuffProcAuras) Execute(sim *Simulation)

func (APLActionActivateAllStatBuffProcAuras) Finalize

func (impl APLActionActivateAllStatBuffProcAuras) Finalize(*APLRotation)

func (APLActionActivateAllStatBuffProcAuras) GetAPLValues

func (impl APLActionActivateAllStatBuffProcAuras) GetAPLValues() []APLValue

func (APLActionActivateAllStatBuffProcAuras) GetInnerActions

func (impl APLActionActivateAllStatBuffProcAuras) GetInnerActions() []*APLAction

func (APLActionActivateAllStatBuffProcAuras) GetNextAction

func (impl APLActionActivateAllStatBuffProcAuras) GetNextAction(*Simulation) *APLAction

func (*APLActionActivateAllStatBuffProcAuras) IsReady

func (APLActionActivateAllStatBuffProcAuras) PostFinalize

func (impl APLActionActivateAllStatBuffProcAuras) PostFinalize(*APLRotation)

func (APLActionActivateAllStatBuffProcAuras) ReResolveVariableRefs added in v0.0.79

func (impl APLActionActivateAllStatBuffProcAuras) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionActivateAllStatBuffProcAuras) Reset

func (impl APLActionActivateAllStatBuffProcAuras) Reset(*Simulation)

func (*APLActionActivateAllStatBuffProcAuras) String

type APLActionActivateAura

type APLActionActivateAura struct {
	// contains filtered or unexported fields
}

func (*APLActionActivateAura) Execute

func (action *APLActionActivateAura) Execute(sim *Simulation)

func (APLActionActivateAura) Finalize

func (impl APLActionActivateAura) Finalize(*APLRotation)

func (APLActionActivateAura) GetAPLValues

func (impl APLActionActivateAura) GetAPLValues() []APLValue

func (APLActionActivateAura) GetInnerActions

func (impl APLActionActivateAura) GetInnerActions() []*APLAction

func (APLActionActivateAura) GetNextAction

func (impl APLActionActivateAura) GetNextAction(*Simulation) *APLAction

func (*APLActionActivateAura) IsReady

func (action *APLActionActivateAura) IsReady(sim *Simulation) bool

func (APLActionActivateAura) PostFinalize

func (impl APLActionActivateAura) PostFinalize(*APLRotation)

func (APLActionActivateAura) ReResolveVariableRefs added in v0.0.79

func (impl APLActionActivateAura) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionActivateAura) Reset

func (impl APLActionActivateAura) Reset(*Simulation)

func (*APLActionActivateAura) String

func (action *APLActionActivateAura) String() string

type APLActionActivateAuraWithStacks

type APLActionActivateAuraWithStacks struct {
	// contains filtered or unexported fields
}

func (*APLActionActivateAuraWithStacks) Execute

func (action *APLActionActivateAuraWithStacks) Execute(sim *Simulation)

func (APLActionActivateAuraWithStacks) Finalize

func (impl APLActionActivateAuraWithStacks) Finalize(*APLRotation)

func (APLActionActivateAuraWithStacks) GetAPLValues

func (impl APLActionActivateAuraWithStacks) GetAPLValues() []APLValue

func (APLActionActivateAuraWithStacks) GetInnerActions

func (impl APLActionActivateAuraWithStacks) GetInnerActions() []*APLAction

func (APLActionActivateAuraWithStacks) GetNextAction

func (impl APLActionActivateAuraWithStacks) GetNextAction(*Simulation) *APLAction

func (*APLActionActivateAuraWithStacks) IsReady

func (action *APLActionActivateAuraWithStacks) IsReady(sim *Simulation) bool

func (APLActionActivateAuraWithStacks) PostFinalize

func (impl APLActionActivateAuraWithStacks) PostFinalize(*APLRotation)

func (APLActionActivateAuraWithStacks) ReResolveVariableRefs added in v0.0.79

func (impl APLActionActivateAuraWithStacks) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionActivateAuraWithStacks) Reset

func (impl APLActionActivateAuraWithStacks) Reset(*Simulation)

func (*APLActionActivateAuraWithStacks) String

func (action *APLActionActivateAuraWithStacks) String() string

type APLActionAutocastOtherCooldowns

type APLActionAutocastOtherCooldowns struct {
	// contains filtered or unexported fields
}

func (*APLActionAutocastOtherCooldowns) Execute

func (action *APLActionAutocastOtherCooldowns) Execute(sim *Simulation)

func (APLActionAutocastOtherCooldowns) Finalize

func (impl APLActionAutocastOtherCooldowns) Finalize(*APLRotation)

func (APLActionAutocastOtherCooldowns) GetAPLValues

func (impl APLActionAutocastOtherCooldowns) GetAPLValues() []APLValue

func (APLActionAutocastOtherCooldowns) GetInnerActions

func (impl APLActionAutocastOtherCooldowns) GetInnerActions() []*APLAction

func (APLActionAutocastOtherCooldowns) GetNextAction

func (impl APLActionAutocastOtherCooldowns) GetNextAction(*Simulation) *APLAction

func (*APLActionAutocastOtherCooldowns) IsReady

func (action *APLActionAutocastOtherCooldowns) IsReady(sim *Simulation) bool

func (*APLActionAutocastOtherCooldowns) PostFinalize

func (action *APLActionAutocastOtherCooldowns) PostFinalize(rot *APLRotation)

func (APLActionAutocastOtherCooldowns) ReResolveVariableRefs added in v0.0.79

func (impl APLActionAutocastOtherCooldowns) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (*APLActionAutocastOtherCooldowns) Reset

func (*APLActionAutocastOtherCooldowns) String

func (action *APLActionAutocastOtherCooldowns) String() string

type APLActionCancelAura

type APLActionCancelAura struct {
	// contains filtered or unexported fields
}

func (*APLActionCancelAura) Execute

func (action *APLActionCancelAura) Execute(sim *Simulation)

func (APLActionCancelAura) Finalize

func (impl APLActionCancelAura) Finalize(*APLRotation)

func (APLActionCancelAura) GetAPLValues

func (impl APLActionCancelAura) GetAPLValues() []APLValue

func (APLActionCancelAura) GetInnerActions

func (impl APLActionCancelAura) GetInnerActions() []*APLAction

func (APLActionCancelAura) GetNextAction

func (impl APLActionCancelAura) GetNextAction(*Simulation) *APLAction

func (*APLActionCancelAura) IsReady

func (action *APLActionCancelAura) IsReady(sim *Simulation) bool

func (APLActionCancelAura) PostFinalize

func (impl APLActionCancelAura) PostFinalize(*APLRotation)

func (APLActionCancelAura) ReResolveVariableRefs added in v0.0.79

func (impl APLActionCancelAura) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionCancelAura) Reset

func (impl APLActionCancelAura) Reset(*Simulation)

func (*APLActionCancelAura) String

func (action *APLActionCancelAura) String() string

type APLActionCancelSpellCast added in v0.0.173

type APLActionCancelSpellCast struct {
	// contains filtered or unexported fields
}

func (*APLActionCancelSpellCast) Execute added in v0.0.173

func (action *APLActionCancelSpellCast) Execute(sim *Simulation)

func (APLActionCancelSpellCast) Finalize added in v0.0.173

func (impl APLActionCancelSpellCast) Finalize(*APLRotation)

func (APLActionCancelSpellCast) GetAPLValues added in v0.0.173

func (impl APLActionCancelSpellCast) GetAPLValues() []APLValue

func (APLActionCancelSpellCast) GetInnerActions added in v0.0.173

func (impl APLActionCancelSpellCast) GetInnerActions() []*APLAction

func (APLActionCancelSpellCast) GetNextAction added in v0.0.173

func (impl APLActionCancelSpellCast) GetNextAction(*Simulation) *APLAction

func (*APLActionCancelSpellCast) IsReady added in v0.0.173

func (action *APLActionCancelSpellCast) IsReady(sim *Simulation) bool

func (APLActionCancelSpellCast) PostFinalize added in v0.0.173

func (impl APLActionCancelSpellCast) PostFinalize(*APLRotation)

func (APLActionCancelSpellCast) ReResolveVariableRefs added in v0.0.173

func (impl APLActionCancelSpellCast) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionCancelSpellCast) Reset added in v0.0.173

func (impl APLActionCancelSpellCast) Reset(*Simulation)

func (*APLActionCancelSpellCast) String added in v0.0.173

func (action *APLActionCancelSpellCast) String() string

type APLActionCastAllStatBuffCooldowns

type APLActionCastAllStatBuffCooldowns struct {
	// contains filtered or unexported fields
}

func (*APLActionCastAllStatBuffCooldowns) Execute

func (action *APLActionCastAllStatBuffCooldowns) Execute(sim *Simulation)

func (APLActionCastAllStatBuffCooldowns) Finalize

func (impl APLActionCastAllStatBuffCooldowns) Finalize(*APLRotation)

func (APLActionCastAllStatBuffCooldowns) GetAPLValues

func (impl APLActionCastAllStatBuffCooldowns) GetAPLValues() []APLValue

func (APLActionCastAllStatBuffCooldowns) GetInnerActions

func (impl APLActionCastAllStatBuffCooldowns) GetInnerActions() []*APLAction

func (APLActionCastAllStatBuffCooldowns) GetNextAction

func (impl APLActionCastAllStatBuffCooldowns) GetNextAction(*Simulation) *APLAction

func (*APLActionCastAllStatBuffCooldowns) IsReady

func (action *APLActionCastAllStatBuffCooldowns) IsReady(sim *Simulation) bool

func (*APLActionCastAllStatBuffCooldowns) PostFinalize

func (action *APLActionCastAllStatBuffCooldowns) PostFinalize(rot *APLRotation)

func (APLActionCastAllStatBuffCooldowns) ReResolveVariableRefs added in v0.0.79

func (impl APLActionCastAllStatBuffCooldowns) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionCastAllStatBuffCooldowns) Reset

func (impl APLActionCastAllStatBuffCooldowns) Reset(*Simulation)

func (*APLActionCastAllStatBuffCooldowns) String

func (action *APLActionCastAllStatBuffCooldowns) String() string

type APLActionCastFriendlySpell

type APLActionCastFriendlySpell struct {
	// contains filtered or unexported fields
}

func (*APLActionCastFriendlySpell) Execute

func (action *APLActionCastFriendlySpell) Execute(sim *Simulation)

func (APLActionCastFriendlySpell) Finalize

func (impl APLActionCastFriendlySpell) Finalize(*APLRotation)

func (APLActionCastFriendlySpell) GetAPLValues

func (impl APLActionCastFriendlySpell) GetAPLValues() []APLValue

func (APLActionCastFriendlySpell) GetInnerActions

func (impl APLActionCastFriendlySpell) GetInnerActions() []*APLAction

func (APLActionCastFriendlySpell) GetNextAction

func (impl APLActionCastFriendlySpell) GetNextAction(*Simulation) *APLAction

func (*APLActionCastFriendlySpell) IsReady

func (action *APLActionCastFriendlySpell) IsReady(sim *Simulation) bool

func (APLActionCastFriendlySpell) PostFinalize

func (impl APLActionCastFriendlySpell) PostFinalize(*APLRotation)

func (APLActionCastFriendlySpell) ReResolveVariableRefs added in v0.0.79

func (impl APLActionCastFriendlySpell) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionCastFriendlySpell) Reset

func (impl APLActionCastFriendlySpell) Reset(*Simulation)

func (*APLActionCastFriendlySpell) String

func (action *APLActionCastFriendlySpell) String() string

type APLActionCastSpell

type APLActionCastSpell struct {
	// contains filtered or unexported fields
}

func (*APLActionCastSpell) Execute

func (action *APLActionCastSpell) Execute(sim *Simulation)

func (APLActionCastSpell) Finalize

func (impl APLActionCastSpell) Finalize(*APLRotation)

func (APLActionCastSpell) GetAPLValues

func (impl APLActionCastSpell) GetAPLValues() []APLValue

func (APLActionCastSpell) GetInnerActions

func (impl APLActionCastSpell) GetInnerActions() []*APLAction

func (APLActionCastSpell) GetNextAction

func (impl APLActionCastSpell) GetNextAction(*Simulation) *APLAction

func (*APLActionCastSpell) IsReady

func (action *APLActionCastSpell) IsReady(sim *Simulation) bool

func (APLActionCastSpell) PostFinalize

func (impl APLActionCastSpell) PostFinalize(*APLRotation)

func (APLActionCastSpell) ReResolveVariableRefs added in v0.0.79

func (impl APLActionCastSpell) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionCastSpell) Reset

func (impl APLActionCastSpell) Reset(*Simulation)

func (*APLActionCastSpell) String

func (action *APLActionCastSpell) String() string

type APLActionChangeTarget

type APLActionChangeTarget struct {
	// contains filtered or unexported fields
}

func (*APLActionChangeTarget) Execute

func (action *APLActionChangeTarget) Execute(sim *Simulation)

func (APLActionChangeTarget) Finalize

func (impl APLActionChangeTarget) Finalize(*APLRotation)

func (APLActionChangeTarget) GetAPLValues

func (impl APLActionChangeTarget) GetAPLValues() []APLValue

func (APLActionChangeTarget) GetInnerActions

func (impl APLActionChangeTarget) GetInnerActions() []*APLAction

func (APLActionChangeTarget) GetNextAction

func (impl APLActionChangeTarget) GetNextAction(*Simulation) *APLAction

func (*APLActionChangeTarget) IsReady

func (action *APLActionChangeTarget) IsReady(sim *Simulation) bool

func (APLActionChangeTarget) PostFinalize

func (impl APLActionChangeTarget) PostFinalize(*APLRotation)

func (APLActionChangeTarget) ReResolveVariableRefs added in v0.0.79

func (impl APLActionChangeTarget) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (*APLActionChangeTarget) Reset

func (action *APLActionChangeTarget) Reset(sim *Simulation)

func (*APLActionChangeTarget) String

func (action *APLActionChangeTarget) String() string

type APLActionChannelSpell

type APLActionChannelSpell struct {
	// contains filtered or unexported fields
}

func (*APLActionChannelSpell) Execute

func (action *APLActionChannelSpell) Execute(sim *Simulation)

func (APLActionChannelSpell) Finalize

func (impl APLActionChannelSpell) Finalize(*APLRotation)

func (*APLActionChannelSpell) GetAPLValues

func (action *APLActionChannelSpell) GetAPLValues() []APLValue

func (APLActionChannelSpell) GetInnerActions

func (impl APLActionChannelSpell) GetInnerActions() []*APLAction

func (APLActionChannelSpell) GetNextAction

func (impl APLActionChannelSpell) GetNextAction(*Simulation) *APLAction

func (*APLActionChannelSpell) IsReady

func (action *APLActionChannelSpell) IsReady(sim *Simulation) bool

func (APLActionChannelSpell) PostFinalize

func (impl APLActionChannelSpell) PostFinalize(*APLRotation)

func (APLActionChannelSpell) ReResolveVariableRefs added in v0.0.79

func (impl APLActionChannelSpell) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionChannelSpell) Reset

func (impl APLActionChannelSpell) Reset(*Simulation)

func (*APLActionChannelSpell) String

func (action *APLActionChannelSpell) String() string

type APLActionCustomRotation

type APLActionCustomRotation struct {
	// contains filtered or unexported fields
}

func (*APLActionCustomRotation) Execute

func (action *APLActionCustomRotation) Execute(sim *Simulation)

func (APLActionCustomRotation) Finalize

func (impl APLActionCustomRotation) Finalize(*APLRotation)

func (APLActionCustomRotation) GetAPLValues

func (impl APLActionCustomRotation) GetAPLValues() []APLValue

func (APLActionCustomRotation) GetInnerActions

func (impl APLActionCustomRotation) GetInnerActions() []*APLAction

func (APLActionCustomRotation) GetNextAction

func (impl APLActionCustomRotation) GetNextAction(*Simulation) *APLAction

func (*APLActionCustomRotation) IsReady

func (action *APLActionCustomRotation) IsReady(sim *Simulation) bool

func (APLActionCustomRotation) PostFinalize

func (impl APLActionCustomRotation) PostFinalize(*APLRotation)

func (APLActionCustomRotation) ReResolveVariableRefs added in v0.0.79

func (impl APLActionCustomRotation) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (*APLActionCustomRotation) Reset

func (action *APLActionCustomRotation) Reset(sim *Simulation)

func (*APLActionCustomRotation) String

func (action *APLActionCustomRotation) String() string

type APLActionGroupReference added in v0.0.79

type APLActionGroupReference struct {
	// contains filtered or unexported fields
}

func (*APLActionGroupReference) Execute added in v0.0.79

func (action *APLActionGroupReference) Execute(sim *Simulation)

func (*APLActionGroupReference) Finalize added in v0.0.79

func (action *APLActionGroupReference) Finalize(rot *APLRotation)

func (*APLActionGroupReference) GetAPLValues added in v0.0.79

func (action *APLActionGroupReference) GetAPLValues() []APLValue

func (*APLActionGroupReference) GetInnerActions added in v0.0.79

func (action *APLActionGroupReference) GetInnerActions() []*APLAction

func (APLActionGroupReference) GetNextAction added in v0.0.79

func (impl APLActionGroupReference) GetNextAction(*Simulation) *APLAction

func (*APLActionGroupReference) IsReady added in v0.0.79

func (action *APLActionGroupReference) IsReady(sim *Simulation) bool

func (APLActionGroupReference) PostFinalize added in v0.0.79

func (impl APLActionGroupReference) PostFinalize(*APLRotation)

func (APLActionGroupReference) ReResolveVariableRefs added in v0.0.79

func (impl APLActionGroupReference) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (*APLActionGroupReference) Reset added in v0.0.79

func (action *APLActionGroupReference) Reset(sim *Simulation)

func (*APLActionGroupReference) String added in v0.0.79

func (action *APLActionGroupReference) String() string

type APLActionImpl

type APLActionImpl interface {
	// Returns all inner APL Actions.
	GetInnerActions() []*APLAction

	// Returns all APLValues used by this Action (but not by inner Actions).
	GetAPLValues() []APLValue

	// Performs optional post-processing.
	Finalize(*APLRotation)
	PostFinalize(*APLRotation)

	// Invoked before each sim iteration.
	Reset(*Simulation)

	// Whether this action is available to be used right now.
	IsReady(*Simulation) bool

	// Performs the action.
	Execute(*Simulation)

	// Called only while this action is controlling the rotation.
	GetNextAction(sim *Simulation) *APLAction

	// Re-resolve variable references with updated group variables.
	ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

	// Pretty-print string for debugging.
	String() string
}

type APLActionItemSwap

type APLActionItemSwap struct {
	// contains filtered or unexported fields
}

func (*APLActionItemSwap) Execute

func (action *APLActionItemSwap) Execute(sim *Simulation)

func (APLActionItemSwap) Finalize

func (impl APLActionItemSwap) Finalize(*APLRotation)

func (APLActionItemSwap) GetAPLValues

func (impl APLActionItemSwap) GetAPLValues() []APLValue

func (APLActionItemSwap) GetInnerActions

func (impl APLActionItemSwap) GetInnerActions() []*APLAction

func (APLActionItemSwap) GetNextAction

func (impl APLActionItemSwap) GetNextAction(*Simulation) *APLAction

func (*APLActionItemSwap) IsReady

func (action *APLActionItemSwap) IsReady(sim *Simulation) bool

func (APLActionItemSwap) PostFinalize

func (impl APLActionItemSwap) PostFinalize(*APLRotation)

func (APLActionItemSwap) ReResolveVariableRefs added in v0.0.79

func (impl APLActionItemSwap) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionItemSwap) Reset

func (impl APLActionItemSwap) Reset(*Simulation)

func (*APLActionItemSwap) String

func (action *APLActionItemSwap) String() string

type APLActionMove

type APLActionMove struct {
	// contains filtered or unexported fields
}

func (*APLActionMove) Execute

func (action *APLActionMove) Execute(sim *Simulation)

func (APLActionMove) Finalize

func (impl APLActionMove) Finalize(*APLRotation)

func (APLActionMove) GetAPLValues

func (impl APLActionMove) GetAPLValues() []APLValue

func (APLActionMove) GetInnerActions

func (impl APLActionMove) GetInnerActions() []*APLAction

func (APLActionMove) GetNextAction

func (impl APLActionMove) GetNextAction(*Simulation) *APLAction

func (*APLActionMove) IsReady

func (action *APLActionMove) IsReady(sim *Simulation) bool

func (APLActionMove) PostFinalize

func (impl APLActionMove) PostFinalize(*APLRotation)

func (APLActionMove) ReResolveVariableRefs added in v0.0.79

func (impl APLActionMove) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionMove) Reset

func (impl APLActionMove) Reset(*Simulation)

func (*APLActionMove) String

func (action *APLActionMove) String() string

type APLActionMoveDuration

type APLActionMoveDuration struct {
	// contains filtered or unexported fields
}

func (*APLActionMoveDuration) Execute

func (action *APLActionMoveDuration) Execute(sim *Simulation)

func (APLActionMoveDuration) Finalize

func (impl APLActionMoveDuration) Finalize(*APLRotation)

func (APLActionMoveDuration) GetAPLValues

func (impl APLActionMoveDuration) GetAPLValues() []APLValue

func (APLActionMoveDuration) GetInnerActions

func (impl APLActionMoveDuration) GetInnerActions() []*APLAction

func (APLActionMoveDuration) GetNextAction

func (impl APLActionMoveDuration) GetNextAction(*Simulation) *APLAction

func (*APLActionMoveDuration) IsReady

func (action *APLActionMoveDuration) IsReady(sim *Simulation) bool

func (APLActionMoveDuration) PostFinalize

func (impl APLActionMoveDuration) PostFinalize(*APLRotation)

func (APLActionMoveDuration) ReResolveVariableRefs added in v0.0.79

func (impl APLActionMoveDuration) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionMoveDuration) Reset

func (impl APLActionMoveDuration) Reset(*Simulation)

func (*APLActionMoveDuration) String

func (action *APLActionMoveDuration) String() string

type APLActionMultidot

type APLActionMultidot struct {
	// contains filtered or unexported fields
}

func (*APLActionMultidot) Execute

func (action *APLActionMultidot) Execute(sim *Simulation)

func (APLActionMultidot) Finalize

func (impl APLActionMultidot) Finalize(*APLRotation)

func (*APLActionMultidot) GetAPLValues

func (action *APLActionMultidot) GetAPLValues() []APLValue

func (APLActionMultidot) GetInnerActions

func (impl APLActionMultidot) GetInnerActions() []*APLAction

func (APLActionMultidot) GetNextAction

func (impl APLActionMultidot) GetNextAction(*Simulation) *APLAction

func (*APLActionMultidot) IsReady

func (action *APLActionMultidot) IsReady(sim *Simulation) bool

func (APLActionMultidot) PostFinalize

func (impl APLActionMultidot) PostFinalize(*APLRotation)

func (APLActionMultidot) ReResolveVariableRefs added in v0.0.79

func (impl APLActionMultidot) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (*APLActionMultidot) Reset

func (action *APLActionMultidot) Reset(*Simulation)

func (*APLActionMultidot) String

func (action *APLActionMultidot) String() string

type APLActionMultishield

type APLActionMultishield struct {
	// contains filtered or unexported fields
}

func (*APLActionMultishield) Execute

func (action *APLActionMultishield) Execute(sim *Simulation)

func (APLActionMultishield) Finalize

func (impl APLActionMultishield) Finalize(*APLRotation)

func (*APLActionMultishield) GetAPLValues

func (action *APLActionMultishield) GetAPLValues() []APLValue

func (APLActionMultishield) GetInnerActions

func (impl APLActionMultishield) GetInnerActions() []*APLAction

func (APLActionMultishield) GetNextAction

func (impl APLActionMultishield) GetNextAction(*Simulation) *APLAction

func (*APLActionMultishield) IsReady

func (action *APLActionMultishield) IsReady(sim *Simulation) bool

func (APLActionMultishield) PostFinalize

func (impl APLActionMultishield) PostFinalize(*APLRotation)

func (APLActionMultishield) ReResolveVariableRefs added in v0.0.79

func (impl APLActionMultishield) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (*APLActionMultishield) Reset

func (action *APLActionMultishield) Reset(*Simulation)

func (*APLActionMultishield) String

func (action *APLActionMultishield) String() string

type APLActionResetSequence

type APLActionResetSequence struct {
	// contains filtered or unexported fields
}

func (*APLActionResetSequence) Execute

func (action *APLActionResetSequence) Execute(sim *Simulation)

func (*APLActionResetSequence) Finalize

func (action *APLActionResetSequence) Finalize(rot *APLRotation)

func (APLActionResetSequence) GetAPLValues

func (impl APLActionResetSequence) GetAPLValues() []APLValue

func (APLActionResetSequence) GetInnerActions

func (impl APLActionResetSequence) GetInnerActions() []*APLAction

func (APLActionResetSequence) GetNextAction

func (impl APLActionResetSequence) GetNextAction(*Simulation) *APLAction

func (*APLActionResetSequence) IsReady

func (action *APLActionResetSequence) IsReady(sim *Simulation) bool

func (APLActionResetSequence) PostFinalize

func (impl APLActionResetSequence) PostFinalize(*APLRotation)

func (APLActionResetSequence) ReResolveVariableRefs added in v0.0.79

func (impl APLActionResetSequence) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionResetSequence) Reset

func (impl APLActionResetSequence) Reset(*Simulation)

func (*APLActionResetSequence) String

func (action *APLActionResetSequence) String() string

type APLActionSchedule

type APLActionSchedule struct {
	// contains filtered or unexported fields
}

func (*APLActionSchedule) Execute

func (action *APLActionSchedule) Execute(sim *Simulation)

func (APLActionSchedule) Finalize

func (impl APLActionSchedule) Finalize(*APLRotation)

func (APLActionSchedule) GetAPLValues

func (impl APLActionSchedule) GetAPLValues() []APLValue

func (*APLActionSchedule) GetInnerActions

func (action *APLActionSchedule) GetInnerActions() []*APLAction

func (APLActionSchedule) GetNextAction

func (impl APLActionSchedule) GetNextAction(*Simulation) *APLAction

func (*APLActionSchedule) IsReady

func (action *APLActionSchedule) IsReady(sim *Simulation) bool

func (APLActionSchedule) PostFinalize

func (impl APLActionSchedule) PostFinalize(*APLRotation)

func (APLActionSchedule) ReResolveVariableRefs added in v0.0.79

func (impl APLActionSchedule) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (*APLActionSchedule) Reset

func (action *APLActionSchedule) Reset(*Simulation)

func (*APLActionSchedule) String

func (action *APLActionSchedule) String() string

type APLActionSequence

type APLActionSequence struct {
	// contains filtered or unexported fields
}

func (*APLActionSequence) Execute

func (action *APLActionSequence) Execute(sim *Simulation)

func (*APLActionSequence) Finalize

func (action *APLActionSequence) Finalize(rot *APLRotation)

func (APLActionSequence) GetAPLValues

func (impl APLActionSequence) GetAPLValues() []APLValue

func (*APLActionSequence) GetInnerActions

func (action *APLActionSequence) GetInnerActions() []*APLAction

func (APLActionSequence) GetNextAction

func (impl APLActionSequence) GetNextAction(*Simulation) *APLAction

func (*APLActionSequence) IsReady

func (action *APLActionSequence) IsReady(sim *Simulation) bool

func (*APLActionSequence) PostFinalize

func (action *APLActionSequence) PostFinalize(rot *APLRotation)

func (APLActionSequence) ReResolveVariableRefs added in v0.0.79

func (impl APLActionSequence) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (*APLActionSequence) Reset

func (action *APLActionSequence) Reset(*Simulation)

func (*APLActionSequence) String

func (action *APLActionSequence) String() string

type APLActionStrictMultidot

type APLActionStrictMultidot struct {
	// contains filtered or unexported fields
}

func (*APLActionStrictMultidot) Execute

func (action *APLActionStrictMultidot) Execute(sim *Simulation)

func (APLActionStrictMultidot) Finalize

func (impl APLActionStrictMultidot) Finalize(*APLRotation)

func (*APLActionStrictMultidot) GetAPLValues

func (action *APLActionStrictMultidot) GetAPLValues() []APLValue

func (APLActionStrictMultidot) GetInnerActions

func (impl APLActionStrictMultidot) GetInnerActions() []*APLAction

func (APLActionStrictMultidot) GetNextAction

func (impl APLActionStrictMultidot) GetNextAction(*Simulation) *APLAction

func (*APLActionStrictMultidot) IsReady

func (action *APLActionStrictMultidot) IsReady(sim *Simulation) bool

func (APLActionStrictMultidot) PostFinalize

func (impl APLActionStrictMultidot) PostFinalize(*APLRotation)

func (APLActionStrictMultidot) ReResolveVariableRefs added in v0.0.79

func (impl APLActionStrictMultidot) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (*APLActionStrictMultidot) Reset

func (action *APLActionStrictMultidot) Reset(*Simulation)

func (*APLActionStrictMultidot) String

func (action *APLActionStrictMultidot) String() string

type APLActionStrictSequence

type APLActionStrictSequence struct {
	// contains filtered or unexported fields
}

func (*APLActionStrictSequence) Execute

func (action *APLActionStrictSequence) Execute(sim *Simulation)

func (*APLActionStrictSequence) Finalize

func (action *APLActionStrictSequence) Finalize(rot *APLRotation)

func (APLActionStrictSequence) GetAPLValues

func (impl APLActionStrictSequence) GetAPLValues() []APLValue

func (*APLActionStrictSequence) GetInnerActions

func (action *APLActionStrictSequence) GetInnerActions() []*APLAction

func (*APLActionStrictSequence) GetNextAction

func (action *APLActionStrictSequence) GetNextAction(sim *Simulation) *APLAction

func (*APLActionStrictSequence) IsReady

func (action *APLActionStrictSequence) IsReady(sim *Simulation) bool

func (*APLActionStrictSequence) PostFinalize

func (action *APLActionStrictSequence) PostFinalize(rot *APLRotation)

func (APLActionStrictSequence) ReResolveVariableRefs added in v0.0.79

func (impl APLActionStrictSequence) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (*APLActionStrictSequence) Reset

func (action *APLActionStrictSequence) Reset(*Simulation)

func (*APLActionStrictSequence) String

func (action *APLActionStrictSequence) String() string

type APLActionTriggerICD

type APLActionTriggerICD struct {
	// contains filtered or unexported fields
}

func (*APLActionTriggerICD) Execute

func (action *APLActionTriggerICD) Execute(sim *Simulation)

func (APLActionTriggerICD) Finalize

func (impl APLActionTriggerICD) Finalize(*APLRotation)

func (APLActionTriggerICD) GetAPLValues

func (impl APLActionTriggerICD) GetAPLValues() []APLValue

func (APLActionTriggerICD) GetInnerActions

func (impl APLActionTriggerICD) GetInnerActions() []*APLAction

func (APLActionTriggerICD) GetNextAction

func (impl APLActionTriggerICD) GetNextAction(*Simulation) *APLAction

func (*APLActionTriggerICD) IsReady

func (action *APLActionTriggerICD) IsReady(sim *Simulation) bool

func (APLActionTriggerICD) PostFinalize

func (impl APLActionTriggerICD) PostFinalize(*APLRotation)

func (APLActionTriggerICD) ReResolveVariableRefs added in v0.0.79

func (impl APLActionTriggerICD) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionTriggerICD) Reset

func (impl APLActionTriggerICD) Reset(*Simulation)

func (*APLActionTriggerICD) String

func (action *APLActionTriggerICD) String() string

type APLActionWait

type APLActionWait struct {
	// contains filtered or unexported fields
}

func (*APLActionWait) Execute

func (action *APLActionWait) Execute(sim *Simulation)

func (APLActionWait) Finalize

func (impl APLActionWait) Finalize(*APLRotation)

func (*APLActionWait) GetAPLValues

func (action *APLActionWait) GetAPLValues() []APLValue

func (APLActionWait) GetInnerActions

func (impl APLActionWait) GetInnerActions() []*APLAction

func (*APLActionWait) GetNextAction

func (action *APLActionWait) GetNextAction(sim *Simulation) *APLAction

func (*APLActionWait) IsReady

func (action *APLActionWait) IsReady(sim *Simulation) bool

func (APLActionWait) PostFinalize

func (impl APLActionWait) PostFinalize(*APLRotation)

func (APLActionWait) ReResolveVariableRefs added in v0.0.79

func (impl APLActionWait) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionWait) Reset

func (impl APLActionWait) Reset(*Simulation)

func (*APLActionWait) String

func (action *APLActionWait) String() string

type APLActionWaitUntil

type APLActionWaitUntil struct {
	// contains filtered or unexported fields
}

func (*APLActionWaitUntil) Execute

func (action *APLActionWaitUntil) Execute(sim *Simulation)

func (APLActionWaitUntil) Finalize

func (impl APLActionWaitUntil) Finalize(*APLRotation)

func (*APLActionWaitUntil) GetAPLValues

func (action *APLActionWaitUntil) GetAPLValues() []APLValue

func (APLActionWaitUntil) GetInnerActions

func (impl APLActionWaitUntil) GetInnerActions() []*APLAction

func (*APLActionWaitUntil) GetNextAction

func (action *APLActionWaitUntil) GetNextAction(sim *Simulation) *APLAction

func (*APLActionWaitUntil) IsReady

func (action *APLActionWaitUntil) IsReady(sim *Simulation) bool

func (APLActionWaitUntil) PostFinalize

func (impl APLActionWaitUntil) PostFinalize(*APLRotation)

func (APLActionWaitUntil) ReResolveVariableRefs added in v0.0.79

func (impl APLActionWaitUntil) ReResolveVariableRefs(*APLRotation, map[string]*proto.APLValue)

func (APLActionWaitUntil) Reset

func (impl APLActionWaitUntil) Reset(*Simulation)

func (*APLActionWaitUntil) String

func (action *APLActionWaitUntil) String() string

type APLGroup added in v0.0.79

type APLGroup struct {
	// contains filtered or unexported fields
}

type APLRotation

type APLRotation struct {
	// contains filtered or unexported fields
}

func (*APLRotation) DoNextAction

func (apl *APLRotation) DoNextAction(sim *Simulation)

We intentionally try to mimic the behavior of simc APL to avoid confusion and leverage the community's existing familiarity. https://github.com/simulationcraft/simc/wiki/ActionLists

func (*APLRotation) GetAPLAura

func (rot *APLRotation) GetAPLAura(sourceUnit UnitReference, auraId *proto.ActionID) AuraReference

func (*APLRotation) GetAPLDot

func (rot *APLRotation) GetAPLDot(targetUnit UnitReference, spellId *proto.ActionID) *Dot

func (*APLRotation) GetAPLICDAura

func (rot *APLRotation) GetAPLICDAura(sourceUnit UnitReference, auraId *proto.ActionID) AuraReference

func (*APLRotation) GetAPLItemProcAuras

func (rot *APLRotation) GetAPLItemProcAuras(statTypesToMatch []stats.Stat, minIcd time.Duration, warnIfNoneFound bool, uuid *proto.UUID) []*StatBuffAura

func (*APLRotation) GetAPLMultidotSpell

func (rot *APLRotation) GetAPLMultidotSpell(spellId *proto.ActionID) *Spell

func (*APLRotation) GetAPLMultishieldSpell

func (rot *APLRotation) GetAPLMultishieldSpell(spellId *proto.ActionID) *Spell

func (*APLRotation) GetAPLSpell

func (rot *APLRotation) GetAPLSpell(spellId *proto.ActionID) *Spell

func (*APLRotation) GetSourceUnit

func (rot *APLRotation) GetSourceUnit(ref *proto.UnitReference) UnitReference

func (*APLRotation) GetTargetAPLSpell

func (rot *APLRotation) GetTargetAPLSpell(spellId *proto.ActionID, targetUnit UnitReference) *Spell

func (*APLRotation) GetTargetUnit

func (rot *APLRotation) GetTargetUnit(ref *proto.UnitReference) UnitReference

func (*APLRotation) NewDotReference added in v0.0.43

func (rot *APLRotation) NewDotReference(targetUnitRef UnitReference, auraId *proto.ActionID) *DotReference

func (*APLRotation) NewValueSpellInFlight added in v0.0.102

func (rot *APLRotation) NewValueSpellInFlight(config *proto.APLValueSpellInFlight, uuid *proto.UUID) APLValue

func (*APLRotation) ValidationMessage

func (rot *APLRotation) ValidationMessage(log_level proto.LogLevel, message string, vals ...interface{})

func (*APLRotation) ValidationMessageByUUID

func (rot *APLRotation) ValidationMessageByUUID(uuid *proto.UUID, log_level proto.LogLevel, message string, vals ...interface{})

type APLValue

type APLValue interface {
	// Returns all inner APLValues.
	GetInnerValues() []APLValue

	// The type of value that will be returned.
	Type() proto.APLValueType

	// Gets the value, assuming it is a particular type. Usually only one of
	// these should be implemented in each class.
	GetBool(*Simulation) bool
	GetInt(*Simulation) int32
	GetFloat(*Simulation) float64
	GetDuration(*Simulation) time.Duration
	GetString(*Simulation) string

	// Performs optional post-processing.
	Finalize(*APLRotation)

	// Pretty-print string for debugging.
	String() string
}

type APLValueActiveItemSwapSet added in v0.0.81

type APLValueActiveItemSwapSet struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueActiveItemSwapSet) GetBool added in v0.0.81

func (value *APLValueActiveItemSwapSet) GetBool(sim *Simulation) bool

func (*APLValueActiveItemSwapSet) String added in v0.0.81

func (value *APLValueActiveItemSwapSet) String() string

func (*APLValueActiveItemSwapSet) Type added in v0.0.81

type APLValueAllItemStatProcsActive

type APLValueAllItemStatProcsActive struct {
	*APLValueItemStatProcCheck
}

func (*APLValueAllItemStatProcsActive) GetBool

func (value *APLValueAllItemStatProcsActive) GetBool(sim *Simulation) bool

func (*APLValueAllItemStatProcsActive) Type

type APLValueAnd

type APLValueAnd struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAnd) GetBool

func (value *APLValueAnd) GetBool(sim *Simulation) bool

func (*APLValueAnd) GetInnerValues

func (value *APLValueAnd) GetInnerValues() []APLValue

func (*APLValueAnd) String

func (value *APLValueAnd) String() string

func (*APLValueAnd) Type

func (value *APLValueAnd) Type() proto.APLValueType

type APLValueAnyItemStatProcsActive

type APLValueAnyItemStatProcsActive struct {
	*APLValueItemStatProcCheck
}

func (*APLValueAnyItemStatProcsActive) GetBool

func (value *APLValueAnyItemStatProcsActive) GetBool(sim *Simulation) bool

func (*APLValueAnyItemStatProcsActive) Type

type APLValueAnyItemStatProcsAvailable added in v0.0.137

type APLValueAnyItemStatProcsAvailable struct {
	*APLValueItemStatProcCheck
}

func (*APLValueAnyItemStatProcsAvailable) GetBool added in v0.0.137

func (value *APLValueAnyItemStatProcsAvailable) GetBool(sim *Simulation) bool

unsure if this works correctly based on a weird bug i observed... this was seemingly returning true if no matching auras were found need to debug further

func (*APLValueAnyItemStatProcsAvailable) Type added in v0.0.137

type APLValueAnyStatBuffCooldownsActive added in v0.0.33

type APLValueAnyStatBuffCooldownsActive struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAnyStatBuffCooldownsActive) Finalize added in v0.0.33

func (value *APLValueAnyStatBuffCooldownsActive) Finalize(rot *APLRotation)

func (*APLValueAnyStatBuffCooldownsActive) GetBool added in v0.0.33

func (*APLValueAnyStatBuffCooldownsActive) String added in v0.0.33

func (*APLValueAnyStatBuffCooldownsActive) Type added in v0.0.33

type APLValueAnyStatBuffCooldownsMinDuration added in v0.0.137

type APLValueAnyStatBuffCooldownsMinDuration struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAnyStatBuffCooldownsMinDuration) Finalize added in v0.0.137

func (*APLValueAnyStatBuffCooldownsMinDuration) GetDuration added in v0.0.137

func (*APLValueAnyStatBuffCooldownsMinDuration) String added in v0.0.137

func (*APLValueAnyStatBuffCooldownsMinDuration) Type added in v0.0.137

type APLValueAuraICDIsReady added in v0.0.62

type APLValueAuraICDIsReady struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAuraICDIsReady) GetBool added in v0.0.62

func (value *APLValueAuraICDIsReady) GetBool(sim *Simulation) bool

func (*APLValueAuraICDIsReady) String added in v0.0.62

func (value *APLValueAuraICDIsReady) String() string

func (*APLValueAuraICDIsReady) Type added in v0.0.62

type APLValueAuraInternalCooldown

type APLValueAuraInternalCooldown struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAuraInternalCooldown) GetDuration

func (value *APLValueAuraInternalCooldown) GetDuration(sim *Simulation) time.Duration

func (*APLValueAuraInternalCooldown) String

func (value *APLValueAuraInternalCooldown) String() string

func (*APLValueAuraInternalCooldown) Type

type APLValueAuraIsActive

type APLValueAuraIsActive struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAuraIsActive) GetBool

func (value *APLValueAuraIsActive) GetBool(sim *Simulation) bool

func (*APLValueAuraIsActive) String

func (value *APLValueAuraIsActive) String() string

func (*APLValueAuraIsActive) Type

func (value *APLValueAuraIsActive) Type() proto.APLValueType

type APLValueAuraIsInactive added in v0.0.62

type APLValueAuraIsInactive struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAuraIsInactive) GetBool added in v0.0.62

func (value *APLValueAuraIsInactive) GetBool(sim *Simulation) bool

func (*APLValueAuraIsInactive) String added in v0.0.62

func (value *APLValueAuraIsInactive) String() string

func (*APLValueAuraIsInactive) Type added in v0.0.62

type APLValueAuraIsKnown

type APLValueAuraIsKnown struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAuraIsKnown) GetBool

func (value *APLValueAuraIsKnown) GetBool(sim *Simulation) bool

func (*APLValueAuraIsKnown) String

func (value *APLValueAuraIsKnown) String() string

func (*APLValueAuraIsKnown) Type

func (value *APLValueAuraIsKnown) Type() proto.APLValueType

type APLValueAuraNumStacks

type APLValueAuraNumStacks struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAuraNumStacks) GetInt

func (value *APLValueAuraNumStacks) GetInt(sim *Simulation) int32

func (*APLValueAuraNumStacks) String

func (value *APLValueAuraNumStacks) String() string

func (*APLValueAuraNumStacks) Type

type APLValueAuraRemainingTime

type APLValueAuraRemainingTime struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAuraRemainingTime) GetDuration

func (value *APLValueAuraRemainingTime) GetDuration(sim *Simulation) time.Duration

func (*APLValueAuraRemainingTime) String

func (value *APLValueAuraRemainingTime) String() string

func (*APLValueAuraRemainingTime) Type

type APLValueAuraShouldRefresh

type APLValueAuraShouldRefresh struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAuraShouldRefresh) GetBool

func (value *APLValueAuraShouldRefresh) GetBool(sim *Simulation) bool

func (*APLValueAuraShouldRefresh) GetInnerValues

func (value *APLValueAuraShouldRefresh) GetInnerValues() []APLValue

func (*APLValueAuraShouldRefresh) String

func (value *APLValueAuraShouldRefresh) String() string

func (*APLValueAuraShouldRefresh) Type

type APLValueAutoTimeToNext

type APLValueAutoTimeToNext struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueAutoTimeToNext) GetDuration

func (value *APLValueAutoTimeToNext) GetDuration(sim *Simulation) time.Duration

func (*APLValueAutoTimeToNext) String

func (value *APLValueAutoTimeToNext) String() string

func (*APLValueAutoTimeToNext) Type

type APLValueBossCurrentTarget added in v0.0.137

type APLValueBossCurrentTarget struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueBossCurrentTarget) GetBool added in v0.0.137

func (value *APLValueBossCurrentTarget) GetBool(sim *Simulation) bool

func (*APLValueBossCurrentTarget) String added in v0.0.137

func (value *APLValueBossCurrentTarget) String() string

func (*APLValueBossCurrentTarget) Type added in v0.0.137

type APLValueBossSpellIsCasting

type APLValueBossSpellIsCasting struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueBossSpellIsCasting) GetBool

func (value *APLValueBossSpellIsCasting) GetBool(sim *Simulation) bool

func (*APLValueBossSpellIsCasting) String

func (value *APLValueBossSpellIsCasting) String() string

func (*APLValueBossSpellIsCasting) Type

type APLValueBossSpellTimeToReady

type APLValueBossSpellTimeToReady struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueBossSpellTimeToReady) GetDuration

func (value *APLValueBossSpellTimeToReady) GetDuration(sim *Simulation) time.Duration

func (*APLValueBossSpellTimeToReady) String

func (value *APLValueBossSpellTimeToReady) String() string

func (*APLValueBossSpellTimeToReady) Type

type APLValueChannelClipDelay

type APLValueChannelClipDelay struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueChannelClipDelay) GetDuration

func (value *APLValueChannelClipDelay) GetDuration(sim *Simulation) time.Duration

func (*APLValueChannelClipDelay) String

func (value *APLValueChannelClipDelay) String() string

func (*APLValueChannelClipDelay) Type

type APLValueCoerced

type APLValueCoerced struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCoerced) GetBool

func (value *APLValueCoerced) GetBool(sim *Simulation) bool

func (APLValueCoerced) GetDuration

func (value APLValueCoerced) GetDuration(sim *Simulation) time.Duration

func (APLValueCoerced) GetFloat

func (value APLValueCoerced) GetFloat(sim *Simulation) float64

func (*APLValueCoerced) GetInnerValues

func (value *APLValueCoerced) GetInnerValues() []APLValue

func (APLValueCoerced) GetInt

func (value APLValueCoerced) GetInt(sim *Simulation) int32

func (APLValueCoerced) GetString

func (value APLValueCoerced) GetString(sim *Simulation) string

func (*APLValueCoerced) String

func (value *APLValueCoerced) String() string

func (*APLValueCoerced) Type

func (value *APLValueCoerced) Type() proto.APLValueType

type APLValueCompare

type APLValueCompare struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCompare) GetBool

func (value *APLValueCompare) GetBool(sim *Simulation) bool

func (*APLValueCompare) GetInnerValues

func (value *APLValueCompare) GetInnerValues() []APLValue

func (*APLValueCompare) String

func (value *APLValueCompare) String() string

func (*APLValueCompare) Type

func (value *APLValueCompare) Type() proto.APLValueType

type APLValueConst

type APLValueConst struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueConst) GetBool

func (value *APLValueConst) GetBool(_ *Simulation) bool

func (*APLValueConst) GetDuration

func (value *APLValueConst) GetDuration(_ *Simulation) time.Duration

func (*APLValueConst) GetFloat

func (value *APLValueConst) GetFloat(_ *Simulation) float64

func (*APLValueConst) GetInt

func (value *APLValueConst) GetInt(_ *Simulation) int32

func (*APLValueConst) GetString

func (value *APLValueConst) GetString(_ *Simulation) string

func (*APLValueConst) String

func (value *APLValueConst) String() string

func (*APLValueConst) Type

func (value *APLValueConst) Type() proto.APLValueType

type APLValueCurrentComboPoints

type APLValueCurrentComboPoints struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentComboPoints) GetInt

func (value *APLValueCurrentComboPoints) GetInt(sim *Simulation) int32

func (*APLValueCurrentComboPoints) String

func (value *APLValueCurrentComboPoints) String() string

func (*APLValueCurrentComboPoints) Type

type APLValueCurrentEnergy

type APLValueCurrentEnergy struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentEnergy) GetFloat

func (value *APLValueCurrentEnergy) GetFloat(sim *Simulation) float64

func (*APLValueCurrentEnergy) String

func (value *APLValueCurrentEnergy) String() string

func (*APLValueCurrentEnergy) Type

type APLValueCurrentFocus

type APLValueCurrentFocus struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentFocus) GetFloat

func (value *APLValueCurrentFocus) GetFloat(sim *Simulation) float64

func (*APLValueCurrentFocus) String

func (value *APLValueCurrentFocus) String() string

func (*APLValueCurrentFocus) Type

func (value *APLValueCurrentFocus) Type() proto.APLValueType

type APLValueCurrentGenericResource

type APLValueCurrentGenericResource struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentGenericResource) GetFloat added in v0.0.148

func (value *APLValueCurrentGenericResource) GetFloat(sim *Simulation) float64

func (*APLValueCurrentGenericResource) String

func (value *APLValueCurrentGenericResource) String() string

func (*APLValueCurrentGenericResource) Type

type APLValueCurrentHealth

type APLValueCurrentHealth struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentHealth) GetFloat

func (value *APLValueCurrentHealth) GetFloat(sim *Simulation) float64

func (*APLValueCurrentHealth) String

func (value *APLValueCurrentHealth) String() string

func (*APLValueCurrentHealth) Type

type APLValueCurrentHealthPercent

type APLValueCurrentHealthPercent struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentHealthPercent) GetFloat

func (value *APLValueCurrentHealthPercent) GetFloat(sim *Simulation) float64

func (*APLValueCurrentHealthPercent) String

func (value *APLValueCurrentHealthPercent) String() string

func (*APLValueCurrentHealthPercent) Type

type APLValueCurrentMana

type APLValueCurrentMana struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentMana) GetFloat

func (value *APLValueCurrentMana) GetFloat(sim *Simulation) float64

func (*APLValueCurrentMana) String

func (value *APLValueCurrentMana) String() string

func (*APLValueCurrentMana) Type

func (value *APLValueCurrentMana) Type() proto.APLValueType

type APLValueCurrentManaPercent

type APLValueCurrentManaPercent struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentManaPercent) GetFloat

func (value *APLValueCurrentManaPercent) GetFloat(sim *Simulation) float64

func (*APLValueCurrentManaPercent) String

func (value *APLValueCurrentManaPercent) String() string

func (*APLValueCurrentManaPercent) Type

type APLValueCurrentNonDeathRuneCount

type APLValueCurrentNonDeathRuneCount struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentNonDeathRuneCount) GetInt

func (*APLValueCurrentNonDeathRuneCount) String

func (value *APLValueCurrentNonDeathRuneCount) String() string

func (*APLValueCurrentNonDeathRuneCount) Type

type APLValueCurrentRage

type APLValueCurrentRage struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentRage) GetFloat

func (value *APLValueCurrentRage) GetFloat(sim *Simulation) float64

func (*APLValueCurrentRage) String

func (value *APLValueCurrentRage) String() string

func (*APLValueCurrentRage) Type

func (value *APLValueCurrentRage) Type() proto.APLValueType

type APLValueCurrentRuneActive

type APLValueCurrentRuneActive struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentRuneActive) GetBool

func (value *APLValueCurrentRuneActive) GetBool(_ *Simulation) bool

func (*APLValueCurrentRuneActive) String

func (value *APLValueCurrentRuneActive) String() string

func (*APLValueCurrentRuneActive) Type

type APLValueCurrentRuneCount

type APLValueCurrentRuneCount struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentRuneCount) GetInt

func (value *APLValueCurrentRuneCount) GetInt(_ *Simulation) int32

func (*APLValueCurrentRuneCount) String

func (value *APLValueCurrentRuneCount) String() string

func (*APLValueCurrentRuneCount) Type

type APLValueCurrentRuneDeath

type APLValueCurrentRuneDeath struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentRuneDeath) GetBool

func (value *APLValueCurrentRuneDeath) GetBool(_ *Simulation) bool

func (*APLValueCurrentRuneDeath) String

func (value *APLValueCurrentRuneDeath) String() string

func (*APLValueCurrentRuneDeath) Type

type APLValueCurrentRunicPower

type APLValueCurrentRunicPower struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueCurrentRunicPower) GetInt

func (value *APLValueCurrentRunicPower) GetInt(sim *Simulation) int32

func (*APLValueCurrentRunicPower) String

func (value *APLValueCurrentRunicPower) String() string

func (*APLValueCurrentRunicPower) Type

type APLValueCurrentTime

type APLValueCurrentTime struct {
	DefaultAPLValueImpl
}

func (*APLValueCurrentTime) GetDuration

func (value *APLValueCurrentTime) GetDuration(sim *Simulation) time.Duration

func (*APLValueCurrentTime) String

func (value *APLValueCurrentTime) String() string

func (*APLValueCurrentTime) Type

func (value *APLValueCurrentTime) Type() proto.APLValueType

type APLValueCurrentTimePercent

type APLValueCurrentTimePercent struct {
	DefaultAPLValueImpl
}

func (*APLValueCurrentTimePercent) GetFloat

func (value *APLValueCurrentTimePercent) GetFloat(sim *Simulation) float64

func (*APLValueCurrentTimePercent) String

func (value *APLValueCurrentTimePercent) String() string

func (*APLValueCurrentTimePercent) Type

type APLValueDotBaseDuration added in v0.0.83

type APLValueDotBaseDuration struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueDotBaseDuration) GetDuration added in v0.0.83

func (value *APLValueDotBaseDuration) GetDuration(_ *Simulation) time.Duration

func (*APLValueDotBaseDuration) String added in v0.0.83

func (value *APLValueDotBaseDuration) String() string

func (*APLValueDotBaseDuration) Type added in v0.0.83

type APLValueDotCritPercentIncrease added in v0.0.74

type APLValueDotCritPercentIncrease struct {
	*APLValueDotIncreaseCheck
}

func (*APLValueDotCritPercentIncrease) Finalize added in v0.0.93

func (value *APLValueDotCritPercentIncrease) Finalize(rot *APLRotation)

func (*APLValueDotCritPercentIncrease) GetFloat added in v0.0.74

func (value *APLValueDotCritPercentIncrease) GetFloat(sim *Simulation) float64

type APLValueDotIncreaseCheck added in v0.0.74

type APLValueDotIncreaseCheck struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueDotIncreaseCheck) String added in v0.0.74

func (value *APLValueDotIncreaseCheck) String() string

func (*APLValueDotIncreaseCheck) Type added in v0.0.74

type APLValueDotIsActive

type APLValueDotIsActive struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueDotIsActive) GetBool

func (value *APLValueDotIsActive) GetBool(sim *Simulation) bool

func (*APLValueDotIsActive) String

func (value *APLValueDotIsActive) String() string

func (*APLValueDotIsActive) Type

func (value *APLValueDotIsActive) Type() proto.APLValueType

type APLValueDotIsActiveOnAllTargets added in v0.0.12

type APLValueDotIsActiveOnAllTargets struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueDotIsActiveOnAllTargets) GetBool added in v0.0.12

func (value *APLValueDotIsActiveOnAllTargets) GetBool(sim *Simulation) bool

func (*APLValueDotIsActiveOnAllTargets) String added in v0.0.12

func (value *APLValueDotIsActiveOnAllTargets) String() string

func (*APLValueDotIsActiveOnAllTargets) Type added in v0.0.12

type APLValueDotLowestRemainingTime added in v0.0.12

type APLValueDotLowestRemainingTime struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueDotLowestRemainingTime) GetDuration added in v0.0.12

func (value *APLValueDotLowestRemainingTime) GetDuration(sim *Simulation) time.Duration

func (*APLValueDotLowestRemainingTime) String added in v0.0.12

func (value *APLValueDotLowestRemainingTime) String() string

func (*APLValueDotLowestRemainingTime) Type added in v0.0.12

type APLValueDotPercentIncrease

type APLValueDotPercentIncrease struct {
	*APLValueDotIncreaseCheck
}

func (*APLValueDotPercentIncrease) Finalize added in v0.0.93

func (value *APLValueDotPercentIncrease) Finalize(rot *APLRotation)

func (*APLValueDotPercentIncrease) GetFloat

func (value *APLValueDotPercentIncrease) GetFloat(sim *Simulation) float64

type APLValueDotRemainingTime

type APLValueDotRemainingTime struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueDotRemainingTime) GetDuration

func (value *APLValueDotRemainingTime) GetDuration(sim *Simulation) time.Duration

func (*APLValueDotRemainingTime) String

func (value *APLValueDotRemainingTime) String() string

func (*APLValueDotRemainingTime) Type

type APLValueDotTickFrequency

type APLValueDotTickFrequency struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueDotTickFrequency) GetDuration

func (value *APLValueDotTickFrequency) GetDuration(sim *Simulation) time.Duration

func (*APLValueDotTickFrequency) String

func (value *APLValueDotTickFrequency) String() string

func (*APLValueDotTickFrequency) Type

type APLValueDotTickRatePercentIncrease added in v0.0.74

type APLValueDotTickRatePercentIncrease struct {
	*APLValueDotIncreaseCheck
}

func (*APLValueDotTickRatePercentIncrease) Finalize added in v0.0.93

func (value *APLValueDotTickRatePercentIncrease) Finalize(rot *APLRotation)

func (*APLValueDotTickRatePercentIncrease) GetFloat added in v0.0.74

type APLValueDotTimeToNextTick added in v0.0.96

type APLValueDotTimeToNextTick struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueDotTimeToNextTick) GetDuration added in v0.0.96

func (value *APLValueDotTimeToNextTick) GetDuration(sim *Simulation) time.Duration

func (*APLValueDotTimeToNextTick) String added in v0.0.96

func (value *APLValueDotTimeToNextTick) String() string

func (*APLValueDotTimeToNextTick) Type added in v0.0.96

type APLValueEnergyRegenPerSecond

type APLValueEnergyRegenPerSecond struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueEnergyRegenPerSecond) GetFloat

func (value *APLValueEnergyRegenPerSecond) GetFloat(sim *Simulation) float64

func (*APLValueEnergyRegenPerSecond) String

func (value *APLValueEnergyRegenPerSecond) String() string

func (*APLValueEnergyRegenPerSecond) Type

type APLValueEnergyTimeToTarget

type APLValueEnergyTimeToTarget struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueEnergyTimeToTarget) GetDuration

func (value *APLValueEnergyTimeToTarget) GetDuration(sim *Simulation) time.Duration

func (*APLValueEnergyTimeToTarget) String

func (value *APLValueEnergyTimeToTarget) String() string

func (*APLValueEnergyTimeToTarget) Type

type APLValueFocusRegenPerSecond

type APLValueFocusRegenPerSecond struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueFocusRegenPerSecond) GetFloat

func (value *APLValueFocusRegenPerSecond) GetFloat(sim *Simulation) float64

func (*APLValueFocusRegenPerSecond) String

func (value *APLValueFocusRegenPerSecond) String() string

func (*APLValueFocusRegenPerSecond) Type

type APLValueFocusTimeToTarget

type APLValueFocusTimeToTarget struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueFocusTimeToTarget) GetDuration

func (value *APLValueFocusTimeToTarget) GetDuration(sim *Simulation) time.Duration

func (*APLValueFocusTimeToTarget) String

func (value *APLValueFocusTimeToTarget) String() string

func (*APLValueFocusTimeToTarget) Type

type APLValueFrontOfTarget

type APLValueFrontOfTarget struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueFrontOfTarget) GetBool

func (value *APLValueFrontOfTarget) GetBool(sim *Simulation) bool

func (*APLValueFrontOfTarget) String

func (value *APLValueFrontOfTarget) String() string

func (*APLValueFrontOfTarget) Type

type APLValueFullRuneCooldown added in v0.0.113

type APLValueFullRuneCooldown struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueFullRuneCooldown) GetDuration added in v0.0.113

func (value *APLValueFullRuneCooldown) GetDuration(sim *Simulation) time.Duration

func (*APLValueFullRuneCooldown) String added in v0.0.113

func (value *APLValueFullRuneCooldown) String() string

func (*APLValueFullRuneCooldown) Type added in v0.0.113

type APLValueGCDIsReady

type APLValueGCDIsReady struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueGCDIsReady) GetBool

func (value *APLValueGCDIsReady) GetBool(sim *Simulation) bool

func (*APLValueGCDIsReady) String

func (value *APLValueGCDIsReady) String() string

func (*APLValueGCDIsReady) Type

func (value *APLValueGCDIsReady) Type() proto.APLValueType

type APLValueGCDTimeToReady

type APLValueGCDTimeToReady struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueGCDTimeToReady) GetDuration

func (value *APLValueGCDTimeToReady) GetDuration(sim *Simulation) time.Duration

func (*APLValueGCDTimeToReady) String

func (value *APLValueGCDTimeToReady) String() string

func (*APLValueGCDTimeToReady) Type

type APLValueInputDelay

type APLValueInputDelay struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueInputDelay) GetDuration

func (value *APLValueInputDelay) GetDuration(sim *Simulation) time.Duration

func (*APLValueInputDelay) String

func (value *APLValueInputDelay) String() string

func (*APLValueInputDelay) Type

func (value *APLValueInputDelay) Type() proto.APLValueType

type APLValueIsExecutePhase

type APLValueIsExecutePhase struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueIsExecutePhase) GetBool

func (value *APLValueIsExecutePhase) GetBool(sim *Simulation) bool

func (*APLValueIsExecutePhase) String

func (value *APLValueIsExecutePhase) String() string

func (*APLValueIsExecutePhase) Type

type APLValueItemProcsMaxRemainingICD

type APLValueItemProcsMaxRemainingICD struct {
	*APLValueItemStatProcCheck
}

func (*APLValueItemProcsMaxRemainingICD) GetDuration

func (value *APLValueItemProcsMaxRemainingICD) GetDuration(sim *Simulation) time.Duration

func (*APLValueItemProcsMaxRemainingICD) Type

type APLValueItemProcsMinRemainingTime

type APLValueItemProcsMinRemainingTime struct {
	*APLValueItemStatProcCheck
}

func (*APLValueItemProcsMinRemainingTime) GetDuration

func (value *APLValueItemProcsMinRemainingTime) GetDuration(sim *Simulation) time.Duration

func (*APLValueItemProcsMinRemainingTime) Type

type APLValueItemStatProcCheck

type APLValueItemStatProcCheck struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

Parent struct for all APL values that perform checks on the set of buff auras associated with equipped proc items.

func (*APLValueItemStatProcCheck) Finalize

func (value *APLValueItemStatProcCheck) Finalize(rot *APLRotation)

func (*APLValueItemStatProcCheck) String

func (value *APLValueItemStatProcCheck) String() string

type APLValueMath

type APLValueMath struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueMath) GetDuration

func (value *APLValueMath) GetDuration(sim *Simulation) time.Duration

func (*APLValueMath) GetFloat

func (value *APLValueMath) GetFloat(sim *Simulation) float64

func (*APLValueMath) GetInnerValues

func (value *APLValueMath) GetInnerValues() []APLValue

func (*APLValueMath) GetInt

func (value *APLValueMath) GetInt(sim *Simulation) int32

func (*APLValueMath) String

func (value *APLValueMath) String() string

func (*APLValueMath) Type

func (value *APLValueMath) Type() proto.APLValueType

MUL: int * duration => duration, float * duration => duration, int * float => float DIV: duration / int => duration, duration / float => duration, duration / duration => float ADD & SUB: are always the same type as the LHS, so we can just return that type.

type APLValueMax

type APLValueMax struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueMax) GetDuration

func (value *APLValueMax) GetDuration(sim *Simulation) time.Duration

func (*APLValueMax) GetFloat

func (value *APLValueMax) GetFloat(sim *Simulation) float64

func (*APLValueMax) GetInnerValues

func (value *APLValueMax) GetInnerValues() []APLValue

func (*APLValueMax) GetInt

func (value *APLValueMax) GetInt(sim *Simulation) int32

func (*APLValueMax) String

func (value *APLValueMax) String() string

func (*APLValueMax) Type

func (value *APLValueMax) Type() proto.APLValueType

type APLValueMaxComboPoints

type APLValueMaxComboPoints struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueMaxComboPoints) GetInt

func (value *APLValueMaxComboPoints) GetInt(sim *Simulation) int32

func (*APLValueMaxComboPoints) String

func (value *APLValueMaxComboPoints) String() string

func (*APLValueMaxComboPoints) Type

type APLValueMaxEnergy

type APLValueMaxEnergy struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueMaxEnergy) GetFloat

func (value *APLValueMaxEnergy) GetFloat(sim *Simulation) float64

func (*APLValueMaxEnergy) String

func (value *APLValueMaxEnergy) String() string

func (*APLValueMaxEnergy) Type

func (value *APLValueMaxEnergy) Type() proto.APLValueType

type APLValueMaxFocus

type APLValueMaxFocus struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueMaxFocus) GetFloat

func (value *APLValueMaxFocus) GetFloat(sim *Simulation) float64

func (*APLValueMaxFocus) String

func (value *APLValueMaxFocus) String() string

func (*APLValueMaxFocus) Type

func (value *APLValueMaxFocus) Type() proto.APLValueType

type APLValueMaxHealth

type APLValueMaxHealth struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueMaxHealth) GetFloat

func (value *APLValueMaxHealth) GetFloat(sim *Simulation) float64

func (*APLValueMaxHealth) String

func (value *APLValueMaxHealth) String() string

func (*APLValueMaxHealth) Type

func (value *APLValueMaxHealth) Type() proto.APLValueType

type APLValueMaxRage

type APLValueMaxRage struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueMaxRage) GetFloat

func (value *APLValueMaxRage) GetFloat(sim *Simulation) float64

func (*APLValueMaxRage) String

func (value *APLValueMaxRage) String() string

func (*APLValueMaxRage) Type

func (value *APLValueMaxRage) Type() proto.APLValueType

type APLValueMaxRunicPower

type APLValueMaxRunicPower struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueMaxRunicPower) GetInt

func (value *APLValueMaxRunicPower) GetInt(sim *Simulation) int32

func (*APLValueMaxRunicPower) String

func (value *APLValueMaxRunicPower) String() string

func (*APLValueMaxRunicPower) Type

type APLValueMin

type APLValueMin struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueMin) GetDuration

func (value *APLValueMin) GetDuration(sim *Simulation) time.Duration

func (*APLValueMin) GetFloat

func (value *APLValueMin) GetFloat(sim *Simulation) float64

func (*APLValueMin) GetInnerValues

func (value *APLValueMin) GetInnerValues() []APLValue

func (*APLValueMin) GetInt

func (value *APLValueMin) GetInt(sim *Simulation) int32

func (*APLValueMin) String

func (value *APLValueMin) String() string

func (*APLValueMin) Type

func (value *APLValueMin) Type() proto.APLValueType

type APLValueNextRuneCooldown

type APLValueNextRuneCooldown struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueNextRuneCooldown) GetDuration

func (value *APLValueNextRuneCooldown) GetDuration(sim *Simulation) time.Duration

func (*APLValueNextRuneCooldown) String

func (value *APLValueNextRuneCooldown) String() string

func (*APLValueNextRuneCooldown) Type

type APLValueNot

type APLValueNot struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueNot) GetBool

func (value *APLValueNot) GetBool(sim *Simulation) bool

func (*APLValueNot) GetInnerValues

func (value *APLValueNot) GetInnerValues() []APLValue

func (*APLValueNot) String

func (value *APLValueNot) String() string

func (*APLValueNot) Type

func (value *APLValueNot) Type() proto.APLValueType

type APLValueNumEquippedStatProcItems

type APLValueNumEquippedStatProcItems struct {
	*APLValueItemStatProcCheck
}

func (*APLValueNumEquippedStatProcItems) GetInt

func (*APLValueNumEquippedStatProcItems) Type

type APLValueNumStatBuffCooldowns

type APLValueNumStatBuffCooldowns struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueNumStatBuffCooldowns) Finalize

func (value *APLValueNumStatBuffCooldowns) Finalize(rot *APLRotation)

func (*APLValueNumStatBuffCooldowns) GetInt

func (value *APLValueNumStatBuffCooldowns) GetInt(_ *Simulation) int32

func (*APLValueNumStatBuffCooldowns) String

func (value *APLValueNumStatBuffCooldowns) String() string

func (*APLValueNumStatBuffCooldowns) Type

type APLValueNumberTargets

type APLValueNumberTargets struct {
	DefaultAPLValueImpl
}

func (*APLValueNumberTargets) GetFloat added in v0.0.137

func (value *APLValueNumberTargets) GetFloat(sim *Simulation) float64

func (*APLValueNumberTargets) GetInt

func (value *APLValueNumberTargets) GetInt(sim *Simulation) int32

func (*APLValueNumberTargets) String

func (value *APLValueNumberTargets) String() string

func (*APLValueNumberTargets) Type

type APLValueOr

type APLValueOr struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueOr) GetBool

func (value *APLValueOr) GetBool(sim *Simulation) bool

func (*APLValueOr) GetInnerValues

func (value *APLValueOr) GetInnerValues() []APLValue

func (*APLValueOr) String

func (value *APLValueOr) String() string

func (*APLValueOr) Type

func (value *APLValueOr) Type() proto.APLValueType

type APLValueRemainingCastTime added in v0.0.173

type APLValueRemainingCastTime struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueRemainingCastTime) GetDuration added in v0.0.173

func (value *APLValueRemainingCastTime) GetDuration(sim *Simulation) time.Duration

func (*APLValueRemainingCastTime) String added in v0.0.173

func (value *APLValueRemainingCastTime) String() string

func (*APLValueRemainingCastTime) Type added in v0.0.173

type APLValueRemainingTime

type APLValueRemainingTime struct {
	DefaultAPLValueImpl
}

func (*APLValueRemainingTime) GetDuration

func (value *APLValueRemainingTime) GetDuration(sim *Simulation) time.Duration

func (*APLValueRemainingTime) String

func (value *APLValueRemainingTime) String() string

func (*APLValueRemainingTime) Type

type APLValueRemainingTimePercent

type APLValueRemainingTimePercent struct {
	DefaultAPLValueImpl
}

func (*APLValueRemainingTimePercent) GetFloat

func (value *APLValueRemainingTimePercent) GetFloat(sim *Simulation) float64

func (*APLValueRemainingTimePercent) String

func (value *APLValueRemainingTimePercent) String() string

func (*APLValueRemainingTimePercent) Type

type APLValueRuneCooldown

type APLValueRuneCooldown struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueRuneCooldown) GetDuration

func (value *APLValueRuneCooldown) GetDuration(sim *Simulation) time.Duration

func (*APLValueRuneCooldown) String

func (value *APLValueRuneCooldown) String() string

func (*APLValueRuneCooldown) Type

func (value *APLValueRuneCooldown) Type() proto.APLValueType

type APLValueRuneSlotCooldown

type APLValueRuneSlotCooldown struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueRuneSlotCooldown) GetDuration

func (value *APLValueRuneSlotCooldown) GetDuration(sim *Simulation) time.Duration

func (*APLValueRuneSlotCooldown) String

func (value *APLValueRuneSlotCooldown) String() string

func (*APLValueRuneSlotCooldown) Type

type APLValueSequenceIsComplete

type APLValueSequenceIsComplete struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSequenceIsComplete) Finalize

func (value *APLValueSequenceIsComplete) Finalize(rot *APLRotation)

func (*APLValueSequenceIsComplete) GetBool

func (value *APLValueSequenceIsComplete) GetBool(sim *Simulation) bool

func (*APLValueSequenceIsComplete) String

func (value *APLValueSequenceIsComplete) String() string

func (*APLValueSequenceIsComplete) Type

type APLValueSequenceIsReady

type APLValueSequenceIsReady struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSequenceIsReady) Finalize

func (value *APLValueSequenceIsReady) Finalize(rot *APLRotation)

func (*APLValueSequenceIsReady) GetBool

func (value *APLValueSequenceIsReady) GetBool(sim *Simulation) bool

func (*APLValueSequenceIsReady) String

func (value *APLValueSequenceIsReady) String() string

func (*APLValueSequenceIsReady) Type

type APLValueSequenceTimeToReady

type APLValueSequenceTimeToReady struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSequenceTimeToReady) Finalize

func (value *APLValueSequenceTimeToReady) Finalize(rot *APLRotation)

func (*APLValueSequenceTimeToReady) GetDuration

func (value *APLValueSequenceTimeToReady) GetDuration(sim *Simulation) time.Duration

func (*APLValueSequenceTimeToReady) String

func (value *APLValueSequenceTimeToReady) String() string

func (*APLValueSequenceTimeToReady) Type

type APLValueSpellCPM

type APLValueSpellCPM struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellCPM) GetFloat

func (value *APLValueSpellCPM) GetFloat(sim *Simulation) float64

func (*APLValueSpellCPM) String

func (value *APLValueSpellCPM) String() string

func (*APLValueSpellCPM) Type

func (value *APLValueSpellCPM) Type() proto.APLValueType

type APLValueSpellCanCast

type APLValueSpellCanCast struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellCanCast) GetBool

func (value *APLValueSpellCanCast) GetBool(sim *Simulation) bool

func (*APLValueSpellCanCast) String

func (value *APLValueSpellCanCast) String() string

func (*APLValueSpellCanCast) Type

func (value *APLValueSpellCanCast) Type() proto.APLValueType

type APLValueSpellCastTime

type APLValueSpellCastTime struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellCastTime) GetDuration

func (value *APLValueSpellCastTime) GetDuration(_ *Simulation) time.Duration

func (*APLValueSpellCastTime) String

func (value *APLValueSpellCastTime) String() string

func (*APLValueSpellCastTime) Type

type APLValueSpellChanneledTicks

type APLValueSpellChanneledTicks struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellChanneledTicks) GetInt

func (value *APLValueSpellChanneledTicks) GetInt(_ *Simulation) int32

func (*APLValueSpellChanneledTicks) String

func (value *APLValueSpellChanneledTicks) String() string

func (*APLValueSpellChanneledTicks) Type

type APLValueSpellCurrentCost

type APLValueSpellCurrentCost struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellCurrentCost) GetFloat

func (value *APLValueSpellCurrentCost) GetFloat(_ *Simulation) float64

func (*APLValueSpellCurrentCost) String

func (value *APLValueSpellCurrentCost) String() string

func (*APLValueSpellCurrentCost) Type

type APLValueSpellFullCooldown added in v0.0.87

type APLValueSpellFullCooldown struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

Full Cooldown duration

func (*APLValueSpellFullCooldown) GetDuration added in v0.0.87

func (value *APLValueSpellFullCooldown) GetDuration(sim *Simulation) time.Duration

func (*APLValueSpellFullCooldown) String added in v0.0.87

func (value *APLValueSpellFullCooldown) String() string

func (*APLValueSpellFullCooldown) Type added in v0.0.87

type APLValueSpellGCDHastedDuration added in v0.0.85

type APLValueSpellGCDHastedDuration struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

GCD duration

func (*APLValueSpellGCDHastedDuration) GetDuration added in v0.0.85

func (value *APLValueSpellGCDHastedDuration) GetDuration(_ *Simulation) time.Duration

func (*APLValueSpellGCDHastedDuration) GetFloat added in v0.0.85

func (value *APLValueSpellGCDHastedDuration) GetFloat(sim *Simulation) float64

func (*APLValueSpellGCDHastedDuration) String added in v0.0.85

func (value *APLValueSpellGCDHastedDuration) String() string

func (*APLValueSpellGCDHastedDuration) Type added in v0.0.85

type APLValueSpellInFlight added in v0.0.102

type APLValueSpellInFlight struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

Spell In Flight

func (*APLValueSpellInFlight) GetBool added in v0.0.102

func (value *APLValueSpellInFlight) GetBool(sim *Simulation) bool

func (*APLValueSpellInFlight) String added in v0.0.102

func (value *APLValueSpellInFlight) String() string

func (*APLValueSpellInFlight) Type added in v0.0.102

type APLValueSpellIsCasting added in v0.0.173

type APLValueSpellIsCasting struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellIsCasting) GetBool added in v0.0.173

func (action *APLValueSpellIsCasting) GetBool(sim *Simulation) bool

func (*APLValueSpellIsCasting) String added in v0.0.173

func (action *APLValueSpellIsCasting) String() string

func (*APLValueSpellIsCasting) Type added in v0.0.173

func (action *APLValueSpellIsCasting) Type() proto.APLValueType

type APLValueSpellIsChanneling

type APLValueSpellIsChanneling struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellIsChanneling) GetBool

func (value *APLValueSpellIsChanneling) GetBool(_ *Simulation) bool

func (*APLValueSpellIsChanneling) String

func (value *APLValueSpellIsChanneling) String() string

func (*APLValueSpellIsChanneling) Type

type APLValueSpellIsKnown

type APLValueSpellIsKnown struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellIsKnown) GetBool

func (value *APLValueSpellIsKnown) GetBool(sim *Simulation) bool

func (*APLValueSpellIsKnown) String

func (value *APLValueSpellIsKnown) String() string

func (*APLValueSpellIsKnown) Type

func (value *APLValueSpellIsKnown) Type() proto.APLValueType

type APLValueSpellIsReady

type APLValueSpellIsReady struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellIsReady) GetBool

func (value *APLValueSpellIsReady) GetBool(sim *Simulation) bool

func (*APLValueSpellIsReady) String

func (value *APLValueSpellIsReady) String() string

func (*APLValueSpellIsReady) Type

func (value *APLValueSpellIsReady) Type() proto.APLValueType

type APLValueSpellNumCharges

type APLValueSpellNumCharges struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

Spell Charges

func (*APLValueSpellNumCharges) GetInt

func (value *APLValueSpellNumCharges) GetInt(_ *Simulation) int32

func (*APLValueSpellNumCharges) String

func (value *APLValueSpellNumCharges) String() string

func (*APLValueSpellNumCharges) Type

type APLValueSpellTimeToCharge

type APLValueSpellTimeToCharge struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellTimeToCharge) GetDuration

func (value *APLValueSpellTimeToCharge) GetDuration(sim *Simulation) time.Duration

func (*APLValueSpellTimeToCharge) GetFloat

func (value *APLValueSpellTimeToCharge) GetFloat(sim *Simulation) float64

func (*APLValueSpellTimeToCharge) String

func (value *APLValueSpellTimeToCharge) String() string

func (*APLValueSpellTimeToCharge) Type

type APLValueSpellTimeToReady

type APLValueSpellTimeToReady struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellTimeToReady) GetDuration

func (value *APLValueSpellTimeToReady) GetDuration(sim *Simulation) time.Duration

func (*APLValueSpellTimeToReady) GetFloat

func (value *APLValueSpellTimeToReady) GetFloat(sim *Simulation) float64

func (*APLValueSpellTimeToReady) String

func (value *APLValueSpellTimeToReady) String() string

func (*APLValueSpellTimeToReady) Type

type APLValueSpellTravelTime

type APLValueSpellTravelTime struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueSpellTravelTime) GetDuration

func (value *APLValueSpellTravelTime) GetDuration(_ *Simulation) time.Duration

func (*APLValueSpellTravelTime) String

func (value *APLValueSpellTravelTime) String() string

func (*APLValueSpellTravelTime) Type

type APLValueUnitDistance added in v0.0.12

type APLValueUnitDistance struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueUnitDistance) GetFloat added in v0.0.12

func (value *APLValueUnitDistance) GetFloat(sim *Simulation) float64

func (*APLValueUnitDistance) String added in v0.0.12

func (value *APLValueUnitDistance) String() string

func (*APLValueUnitDistance) Type added in v0.0.12

func (value *APLValueUnitDistance) Type() proto.APLValueType

type APLValueUnitIsMoving

type APLValueUnitIsMoving struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueUnitIsMoving) GetBool

func (value *APLValueUnitIsMoving) GetBool(sim *Simulation) bool

func (*APLValueUnitIsMoving) String

func (value *APLValueUnitIsMoving) String() string

func (*APLValueUnitIsMoving) Type

func (value *APLValueUnitIsMoving) Type() proto.APLValueType

type APLValueVariable added in v0.0.79

type APLValueVariable struct {
	// contains filtered or unexported fields
}

type APLValueVariablePlaceholder added in v0.0.79

type APLValueVariablePlaceholder struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

Variable Placeholder value for group APLs

func (*APLValueVariablePlaceholder) GetBool added in v0.0.79

func (v *APLValueVariablePlaceholder) GetBool(sim *Simulation) bool

func (*APLValueVariablePlaceholder) GetDuration added in v0.0.79

func (v *APLValueVariablePlaceholder) GetDuration(sim *Simulation) time.Duration

func (*APLValueVariablePlaceholder) GetFloat added in v0.0.79

func (*APLValueVariablePlaceholder) GetInnerValues added in v0.0.79

func (v *APLValueVariablePlaceholder) GetInnerValues() []APLValue

func (*APLValueVariablePlaceholder) GetInt added in v0.0.79

func (*APLValueVariablePlaceholder) GetString added in v0.0.79

func (v *APLValueVariablePlaceholder) GetString(sim *Simulation) string

func (*APLValueVariablePlaceholder) String added in v0.0.79

func (v *APLValueVariablePlaceholder) String() string

func (*APLValueVariablePlaceholder) Type added in v0.0.79

type APLValueVariableRef added in v0.0.79

type APLValueVariableRef struct {
	DefaultAPLValueImpl
	// contains filtered or unexported fields
}

func (*APLValueVariableRef) GetBool added in v0.0.79

func (v *APLValueVariableRef) GetBool(sim *Simulation) bool

func (*APLValueVariableRef) GetDuration added in v0.0.79

func (v *APLValueVariableRef) GetDuration(sim *Simulation) time.Duration

func (*APLValueVariableRef) GetFloat added in v0.0.79

func (v *APLValueVariableRef) GetFloat(sim *Simulation) float64

func (*APLValueVariableRef) GetInnerValues added in v0.0.79

func (v *APLValueVariableRef) GetInnerValues() []APLValue

func (*APLValueVariableRef) GetInt added in v0.0.79

func (v *APLValueVariableRef) GetInt(sim *Simulation) int32

func (*APLValueVariableRef) GetString added in v0.0.79

func (v *APLValueVariableRef) GetString(sim *Simulation) string

func (*APLValueVariableRef) String added in v0.0.79

func (v *APLValueVariableRef) String() string

func (*APLValueVariableRef) Type added in v0.0.79

type AbsorptionAuraConfig

type AbsorptionAuraConfig struct {
	Aura                     Aura
	DamageMultiplier         float64
	MaxAbsorbPerHit          float64
	ShieldStrengthCalculator ShieldStrengthCalculator
	OnDamageAbsorbed         OnDamageAbsorbedCallback
	ShouldApplyToResult      ShieldShouldApplyCondition
}

type ActionID

type ActionID struct {
	// Only one of these should be set.
	SpellID int32
	ItemID  int32
	OtherID proto.OtherAction

	Tag int32
}

func ProtoToActionID

func ProtoToActionID(protoID *proto.ActionID) ActionID

func (ActionID) IsEmptyAction

func (actionID ActionID) IsEmptyAction() bool

func (ActionID) IsItemAction

func (actionID ActionID) IsItemAction(itemID int32) bool

func (ActionID) IsOtherAction

func (actionID ActionID) IsOtherAction(otherID proto.OtherAction) bool

func (ActionID) IsSpellAction

func (actionID ActionID) IsSpellAction(spellID int32) bool

func (ActionID) SameAction

func (actionID ActionID) SameAction(other ActionID) bool

func (ActionID) SameActionIgnoreTag

func (actionID ActionID) SameActionIgnoreTag(other ActionID) bool

func (ActionID) String

func (actionID ActionID) String() string

func (ActionID) ToProto

func (actionID ActionID) ToProto() *proto.ActionID

func (ActionID) WithTag

func (actionID ActionID) WithTag(tag int32) ActionID

Returns a new ActionID with the corresponding Tag value.

type ActionMetrics

type ActionMetrics struct {
	IsMelee     bool // True if melee action, false if spell action.
	IsPassive   bool // True if action is applied/cast as a result of another action
	SpellSchool SpellSchool

	// Metrics for this action, for each possible target.
	Targets []TargetedActionMetrics
}

func (*ActionMetrics) ToProto

func (actionMetrics *ActionMetrics) ToProto(actionID ActionID) *proto.ActionMetrics

type ActionPriority

type ActionPriority int32
const (
	ActionPriorityPrePull ActionPriority = -20

	ActionPriorityGCD ActionPriority = 0

	// Higher than GCD because regen can cause GCD actions (if we were waiting
	// for mana).
	ActionPriorityRegen ActionPriority = 1

	// Autos can cause regen (JoW, rage, energy procs, etc) so they should be
	// higher prio so that we never go backwards in the priority order.
	ActionPriorityAuto ActionPriority = 2

	// DOTs need to be higher than anything else so that dots can properly expire before we take other actions.
	ActionPriorityDOT ActionPriority = 3

	ActionPriorityHigh ActionPriority = 10
)

type Agent

type Agent interface {
	// The Character controlled by this Agent.
	GetCharacter() *Character

	// Called once after all Players/Pets/Targets have finished the construction phase.
	// Use this to register spells and any initialization steps that require
	// other raid members or auras.
	Initialize()

	// Updates the input Buffs to include raid-wide buffs provided by this Agent.
	AddRaidBuffs(raidBuffs *proto.RaidBuffs)
	// Updates the input Buffs to include party-wide buffs provided by this Agent.
	AddPartyBuffs(partyBuffs *proto.PartyBuffs)

	// All talent stats / auras should be added within this callback. This makes sure
	// talents are applied at the right time so we can calculate groups of stats.
	ApplyTalents()

	// Returns this Agent to its initial state. Called before each Sim iteration
	// and once after the final iteration.
	Reset(sim *Simulation)

	// Called at the start of each encounter, after the pre-pull.
	// Used for resetting resources, deactivating auras etc.
	OnEncounterStart(sim *Simulation)

	// Custom factories for APL values and actions, for cases where the value/action
	// involves class or spec-specific behavior.
	//
	// Should return nil when the config doesn't match any custom behaviors.
	NewAPLValue(rot *APLRotation, config *proto.APLValue) APLValue
	NewAPLAction(rot *APLRotation, config *proto.APLAction) APLActionImpl

	// Implements custom rotation behavior. Usually for pets and targets but can be used
	// for players too.
	ExecuteCustomRotation(sim *Simulation)
}

Agent can be thought of as the 'Player', i.e. the thing controlling the Character. This is the interface implemented by each class/spec.

func NewAgent

func NewAgent(party *Party, partyIndex int, player *proto.Player) Agent

Constructs a new Agent.

type AgentFactory

type AgentFactory func(*Character, *proto.Player) Agent

type ApplyEffect

type ApplyEffect func(Agent, proto.ItemLevelState)

Function for applying permanent effects to an Agent.

Passing Character instead of Agent would work for almost all cases, but there are occasionally class-specific item effects.

type ApplySetBonus

type ApplySetBonus func(agent Agent, setBonusAura *Aura)

type ApplySpellResults

type ApplySpellResults func(sim *Simulation, target *Unit, spell *Spell)

type AttackTable

type AttackTable struct {
	Attacker *Unit
	Defender *Unit

	BaseMissChance      float64
	BaseSpellMissChance float64
	BaseBlockChance     float64
	BaseDodgeChance     float64
	BaseParryChance     float64
	BaseGlanceChance    float64

	GlanceMultiplier     float64
	MeleeCritSuppression float64
	SpellCritSuppression float64

	DamageDealtMultiplier       float64 // attacker buff, applied in applyAttackerModifiers()
	DamageTakenMultiplier       float64 // defender debuff, applied in applyTargetModifiers()
	HealingDealtMultiplier      float64
	IgnoreArmor                 bool    // Ignore defender's armor for specifically this attacker's attacks
	ArmorIgnoreFactor           float64 // Percentage of armor to ignore for this attacker's attacks
	BonusSpellCritPercent       float64 // Analagous to Defender.PseudoStats.BonusSpellCritPercentTaken, but only for this attacker specifically
	RangedDamageTakenMultiplier float64
	// This is for "Apply Aura: Mod Damage Done By Caster" effects.
	// If set, the damage taken multiplier is multiplied by the callbacks result.
	DamageDoneByCasterMultiplier DynamicDamageDoneByCaster

	// When you need more then 1 active, default to using the above one
	// Used with EnableDamageDoneByCaster/DisableDamageDoneByCaster
	DamageDoneByCasterExtraMultiplier []DynamicDamageDoneByCaster

	ThreatDoneByCasterExtraMultiplier []DynamicThreatDoneByCaster
}

Holds cached values for outcome/damage calculations, for a specific attacker+defender pair. These are updated dynamically when attacker or defender stats change.

func NewAttackTable

func NewAttackTable(attacker *Unit, defender *Unit) *AttackTable

type Aura

type Aura struct {
	// String label for this Aura. Guaranteed to be unique among the Auras for a single Unit.
	Label string

	// For easily grouping auras.
	Tag string

	ActionID        ActionID // If set, metrics will be tracked for this aura.
	ActionIDForProc ActionID // If set, indicates that this aura is a trigger aura for the specified proc.

	Icd *Cooldown           // The internal cooldown if any
	Dpm *DynamicProcManager // Dynamic Proc manager for proc trigger auras if any

	Duration time.Duration // Duration of aura, upon being applied.

	// The unit this aura is attached to.
	Unit *Unit

	MaxStacks int32

	ExclusiveEffects []*ExclusiveEffect

	// Lifecycle callbacks.
	OnInit          OnInit
	OnReset         OnReset
	OnDoneIteration OnDoneIteration
	OnGain          OnGain
	OnExpire        OnExpire
	OnStacksChange  OnStacksChange // Invoked when the number of stacks of this aura changes.

	OnApplyEffects        OnApplyEffects   // Invoked when a spell cast is completing, before apply effects are called
	OnCastComplete        OnCastComplete   // Invoked when a spell cast completes casting, after apply effects.
	OnSpellHitDealt       OnSpellHit       // Invoked when a spell hits and this unit is the caster.
	OnSpellHitTaken       OnSpellHit       // Invoked when a spell hits and this unit is the target.
	OnPeriodicDamageDealt OnPeriodicDamage // Invoked when a dot tick occurs and this unit is the caster.
	OnPeriodicDamageTaken OnPeriodicDamage // Invoked when a dot tick occurs and this unit is the target.
	OnHealDealt           OnSpellHit       // Invoked when a heal hits and this unit is the caster.
	OnHealTaken           OnSpellHit       // Invoked when a heal hits and this unit is the target.
	OnPeriodicHealDealt   OnPeriodicDamage // Invoked when a hot tick occurs and this unit is the caster.
	OnPeriodicHealTaken   OnPeriodicDamage // Invoked when a hot tick occurs and this unit is the target.
	OnEncounterStart      OnEncounterStart // Invoked at the start of each encounter, after the pre-pull.

	// If non-default, stat bonuses from the OnGain callback of this aura will be
	// included in Character Stats in the UI.
	BuildPhase CharacterBuildPhase
	// contains filtered or unexported fields
}

Aura lifecycle:

myAura := unit.RegisterAura(myAuraConfig) myAura.Activate(sim) myAura.SetStacks(sim, 3) myAura.Refresh(sim) myAura.Deactivate(sim)

func AcidSpitAura added in v0.0.150

func AcidSpitAura(target *Unit) *Aura

func ArcaneBrilliance

func ArcaneBrilliance(u *Unit) *Aura

func BattleShoutAura

func BattleShoutAura(unit *Unit, asExternal bool) *Aura

func BlessingOfKingsAura

func BlessingOfKingsAura(unit *Unit) *Aura

func BlessingOfMightAura

func BlessingOfMightAura(u *Unit) *Aura

func BlockPrepull added in v0.0.13

func BlockPrepull(aura *Aura) *Aura

func BloodlustAura

func BloodlustAura(character *Character, actionTag int32) *Aura

func BurningWrathAura

func BurningWrathAura(u *Unit) *Aura

func CacklingHowlAura

func CacklingHowlAura(u *Unit) *Aura

func CommandingShoutAura

func CommandingShoutAura(unit *Unit, asExternal bool) *Aura

func CurseOfElementsAura

func CurseOfElementsAura(target *Unit) *Aura

func CurseOfEnfeeblement

func CurseOfEnfeeblement(target *Unit) *Aura

func DarkIntentAura

func DarkIntentAura(u *Unit) *Aura

func DemoralizingRoar added in v0.0.150

func DemoralizingRoar(target *Unit) *Aura

func DemoralizingScreech added in v0.0.150

func DemoralizingScreech(target *Unit) *Aura

func DevotionAuraAura

func DevotionAuraAura(unit *Unit, actionTag int32, isHoly bool) *Aura

func ElementalOath

func ElementalOath(u *Unit) *Aura

func EmbraceOfTheShaleSpiderAura

func EmbraceOfTheShaleSpiderAura(u *Unit) *Aura

func FireBreathDebuff

func FireBreathDebuff(target *Unit) *Aura

Spell‐damage‐taken sources

func FuriousHowl

func FuriousHowl(unit *Unit) *Aura

func GoreAura added in v0.0.150

func GoreAura(target *Unit) *Aura

func GraceOfAirAura

func GraceOfAirAura(u *Unit) *Aura

func GuardianSpiritAura

func GuardianSpiritAura(character *Character, actionTag int32) *Aura

func HornOfWinterAura

func HornOfWinterAura(unit *Unit, asExternal bool) *Aura

func LavaBreathAura

func LavaBreathAura(target *Unit) *Aura

func LeaderOfThePack

func LeaderOfThePack(unit *Unit) *Aura

func LegacyOfTheEmperorAura

func LegacyOfTheEmperorAura(unit *Unit) *Aura

func LegacyOfTheWhiteTiger

func LegacyOfTheWhiteTiger(unit *Unit) *Aura

func LightningBreathDebuff

func LightningBreathDebuff(target *Unit) *Aura

func MakePermanent

func MakePermanent(aura *Aura) *Aura

Returns the same Aura for chaining.

func ManaTideTotemAura

func ManaTideTotemAura(character *Character, actionTag int32) *Aura

func MarkOfTheWildAura

func MarkOfTheWildAura(unit *Unit) *Aura

func MasterPoisonerDebuff

func MasterPoisonerDebuff(target *Unit) *Aura

func MindNumbingPoisonAura

func MindNumbingPoisonAura(target *Unit) *Aura

func MindQuickeningAura

func MindQuickeningAura(u *Unit) *Aura

func MoonkinAura

func MoonkinAura(unit *Unit) *Aura

func MortalWoundsAura

func MortalWoundsAura(target *Unit) *Aura

func NecroticStrikeAura

func NecroticStrikeAura(target *Unit) *Aura

Casting‐speed‐reduction sources

func PainSuppressionAura

func PainSuppressionAura(character *Character, actionTag int32) *Aura

func PhysVulnerabilityAura

func PhysVulnerabilityAura(target *Unit) *Aura

+4% Physical damage taken

func QirajiFortitudeAura

func QirajiFortitudeAura(u *Unit) *Aura

func RavageAura added in v0.0.150

func RavageAura(target *Unit) *Aura

func RoarOfCourageAura

func RoarOfCourageAura(u *Unit) *Aura

func SerpentsSwiftnessAura

func SerpentsSwiftnessAura(u *Unit) *Aura

func ShatteringThrowAura

func ShatteringThrowAura(target *Unit, actionTag int32) *Aura

func SkullBannerAura

func SkullBannerAura(character *Character, actionTag int32) *Aura

func SlowAura

func SlowAura(target *Unit) *Aura

func SpiritBeastBlessingAura

func SpiritBeastBlessingAura(u *Unit) *Aura

func SporeCloud

func SporeCloud(target *Unit) *Aura

func StampedeAura added in v0.0.150

func StampedeAura(target *Unit) *Aura

func StillWaterAura

func StillWaterAura(u *Unit) *Aura

func SwiftbladesCunningAura

func SwiftbladesCunningAura(u *Unit) *Aura

func TerrifyingRoar

func TerrifyingRoar(unit *Unit) *Aura

func TricksOfTheTradeAura

func TricksOfTheTradeAura(character *Unit, actionTag int32, damageMult float64) *Aura

func TrueShotAura

func TrueShotAura(unit *Unit) *Aura

func UnholyAura

func UnholyAura(u *Unit) *Aura

func UnholyFrenzyAura

func UnholyFrenzyAura(character *Unit, actionTag int32, has2pT14 func() bool) *Aura

func UnleashedRageAura

func UnleashedRageAura(u *Unit) *Aura

func VigilanceAura added in v0.0.11

func VigilanceAura(character *Character, actionTag int32) *Aura

func WeakenedArmorAura

func WeakenedArmorAura(target *Unit) *Aura

–4% Armor stacks 3

func WeakenedBlowsAura

func WeakenedBlowsAura(target *Unit) *Aura

–10% Physical damage dealt

func (*Aura) Activate

func (aura *Aura) Activate(sim *Simulation)

Adds a new aura to the simulation. If an aura with the same ID already exists it will be replaced with the new one.

func (*Aura) AddStack

func (aura *Aura) AddStack(sim *Simulation)

func (*Aura) AddStacks

func (aura *Aura) AddStacks(sim *Simulation, stacks int32)

func (*Aura) ApplyOnEncounterStart added in v0.0.13

func (aura *Aura) ApplyOnEncounterStart(newOnEncounterStart OnEncounterStart) *Aura

func (*Aura) ApplyOnExpire

func (aura *Aura) ApplyOnExpire(newOnExpire OnExpire) *Aura

Adds a handler to be called OnExpire, in addition to any current handlers.

func (*Aura) ApplyOnGain

func (aura *Aura) ApplyOnGain(newOnGain OnGain) *Aura

Adds a handler to be called OnGain, in addition to any current handlers.

func (*Aura) ApplyOnInit

func (aura *Aura) ApplyOnInit(newOnInit OnInit) *Aura

Adds a handler to be called OnInit, in addition to any current handlers. We then return the Aura for chaining

func (*Aura) ApplyOnReset

func (aura *Aura) ApplyOnReset(newOnReset OnReset) *Aura

Adds a handler to be called OnReset, in addition to any current handlers.

func (*Aura) ApplyOnStacksChange

func (aura *Aura) ApplyOnStacksChange(newOnStacksChange OnStacksChange) *Aura

Adds a handler to be called OnStacksChange, in addition to any current handlers. We then return the Aura for chaining

func (*Aura) AttachAdditivePseudoStatBuff

func (parentAura *Aura) AttachAdditivePseudoStatBuff(fieldPointer *float64, bonus float64) *Aura

Attaches an additive PseudoStat buff to a parent Aura Returns parent aura for chaining

func (*Aura) AttachDDBC

func (parentAura *Aura) AttachDDBC(index int, maxIndex int, attackTables *[]*AttackTable, handler DynamicDamageDoneByCaster) *Aura

Attaches a Damage Done By Caster buff to a parent Aura Returns parent aura for chaining

func (*Aura) AttachDependentAura

func (aura *Aura) AttachDependentAura(sibling *Aura) *Aura

func (*Aura) AttachMultiplicativePseudoStatBuff

func (parentAura *Aura) AttachMultiplicativePseudoStatBuff(fieldPointer *float64, multiplier float64) *Aura

Attaches a multiplicative PseudoStat buff to a parent Aura Returns parent aura for chaining

func (*Aura) AttachMultiplyAttackSpeed added in v0.0.19

func (parentAura *Aura) AttachMultiplyAttackSpeed(multiplier float64) *Aura

func (*Aura) AttachMultiplyCastSpeed

func (parentAura *Aura) AttachMultiplyCastSpeed(multiplier float64) *Aura

func (*Aura) AttachMultiplyMeleeSpeed

func (parentAura *Aura) AttachMultiplyMeleeSpeed(multiplier float64) *Aura

func (*Aura) AttachProcTrigger

func (parentAura *Aura) AttachProcTrigger(config ProcTrigger) *Aura

Attaches a ProcTrigger to a parent Aura Preffered use-case. For non standard use-cases see: MakeDependentProcTriggerAura Returns parent aura for chaining

func (*Aura) AttachProcTriggerCallback added in v0.0.125

func (procAura *Aura) AttachProcTriggerCallback(unit *Unit, config ProcTrigger)

func (*Aura) AttachSpellMod

func (parentAura *Aura) AttachSpellMod(spellModConfig SpellModConfig) *Aura

Attaches a SpellMod to a parent Aura Returns parent aura for chaining

func (*Aura) AttachStatBuff

func (parentAura *Aura) AttachStatBuff(stat stats.Stat, value float64) *Aura

Adds a Stat to a parent Aura Returns parent aura for chaining

func (*Aura) AttachStatDependency

func (parentAura *Aura) AttachStatDependency(statDep *stats.StatDependency) *Aura

Attaches a StatDependency to a parent Aura Returns parent aura for chaining

func (*Aura) AttachStatsBuff

func (parentAura *Aura) AttachStatsBuff(stats stats.Stats) *Aura

Adds Stats to a parent Aura Returns parent aura for chaining

func (*Aura) Deactivate

func (aura *Aura) Deactivate(sim *Simulation)

Remove an aura by its ID

func (*Aura) ExpiresAt

func (aura *Aura) ExpiresAt() time.Duration

func (*Aura) ExposeToAPL

func (setBonusTracker *Aura) ExposeToAPL(spellID int32) *Aura

Adds a spellID to the set bonus so it can be exposed to the APL

func (*Aura) GetStacks

func (aura *Aura) GetStacks() int32

func (*Aura) IsActive

func (aura *Aura) IsActive() bool

func (*Aura) MakeDependentProcTriggerAura

func (parentAura *Aura) MakeDependentProcTriggerAura(unit *Unit, config ProcTrigger) *Aura

Creates a new ProcTriggerAura that is dependent on a parent Aura being active This should only be used if the dependent Aura is: 1. On the a different Unit than parent Aura is registered to (usually the Character) 2. You need to register multiple dependent Aura's for the same Unit

func (*Aura) NewActiveMovementSpeedEffect added in v0.0.82

func (aura *Aura) NewActiveMovementSpeedEffect(multiplier float64) *ExclusiveEffect

func (*Aura) NewExclusiveEffect

func (aura *Aura) NewExclusiveEffect(categoryName string, singleAura bool, config ExclusiveEffect) *ExclusiveEffect

func (*Aura) NewPassiveMovementSpeedEffect added in v0.0.82

func (aura *Aura) NewPassiveMovementSpeedEffect(multiplier float64) *ExclusiveEffect

func (*Aura) Refresh

func (aura *Aura) Refresh(sim *Simulation)

func (*Aura) RemainingDuration

func (aura *Aura) RemainingDuration(sim *Simulation) time.Duration

func (*Aura) RemoveStack

func (aura *Aura) RemoveStack(sim *Simulation)

func (*Aura) RemoveStacks

func (aura *Aura) RemoveStacks(sim *Simulation, stacks int32)

func (*Aura) RestoreState

func (aura *Aura) RestoreState(state AuraState, sim *Simulation)

func (*Aura) SaveState

func (aura *Aura) SaveState(sim *Simulation) AuraState

func (*Aura) SetStacks

func (aura *Aura) SetStacks(sim *Simulation, newStacks int32)

func (*Aura) ShouldRefreshExclusiveEffects

func (aura *Aura) ShouldRefreshExclusiveEffects(sim *Simulation, refreshWindow time.Duration) bool

Returns if an aura should be refreshed, i.e. the aura is inactive/about to expire AND there are no other active effects of equal or greater strength.

func (*Aura) StartedAt

func (aura *Aura) StartedAt() time.Duration

func (*Aura) TimeActive

func (aura *Aura) TimeActive(sim *Simulation) time.Duration

The amount of time this aura has been active.

func (*Aura) TimeInactive

func (aura *Aura) TimeInactive(sim *Simulation) time.Duration

The amount of elapsed time since this aura was last active.

func (*Aura) UpdateExpires

func (aura *Aura) UpdateExpires(newExpires time.Duration)

type AuraArray

type AuraArray []*Aura

func RallyingCryAuraArray added in v0.0.33

func RallyingCryAuraArray(unit *Unit, actionTag int32) AuraArray

func (AuraArray) ActivateAll added in v0.0.10

func (auras AuraArray) ActivateAll(sim *Simulation)

Activates all auras in the array on all enabled targets in the environment.

func (AuraArray) ActivateAllPlayers added in v0.0.33

func (auras AuraArray) ActivateAllPlayers(sim *Simulation)

Activates all auras in the array on all enabled player units in the environment.

func (AuraArray) ApplyOnExpire added in v0.0.10

func (auras AuraArray) ApplyOnExpire(onExpire OnExpire)

func (AuraArray) DeactivateAll added in v0.0.67

func (auras AuraArray) DeactivateAll(sim *Simulation)

func (AuraArray) FindLabel

func (auras AuraArray) FindLabel() string

func (AuraArray) Get

func (auras AuraArray) Get(target *Unit) *Aura

func (AuraArray) IsEmpty

func (auras AuraArray) IsEmpty() bool

func (AuraArray) ToMap

func (auras AuraArray) ToMap() LabeledAuraArrays

type AuraCallback

type AuraCallback uint16
const (
	CallbackEmpty AuraCallback = 0

	CallbackOnSpellHitDealt AuraCallback = 1 << iota
	CallbackOnSpellHitTaken
	CallbackOnPeriodicDamageDealt
	CallbackOnHealDealt
	CallbackOnPeriodicHealDealt
	CallbackOnCastComplete
	CallbackOnApplyEffects

	CallbackLast
)

func (AuraCallback) Matches

func (c AuraCallback) Matches(other AuraCallback) bool

func (AuraCallback) String

func (i AuraCallback) String() string

type AuraFactory

type AuraFactory func(*Simulation) *Aura

type AuraMetrics

type AuraMetrics struct {
	ID ActionID

	// Metrics for the current iteration.
	Uptime time.Duration
	Procs  int32
	// contains filtered or unexported fields
}

func (*AuraMetrics) ToProto

func (auraMetrics *AuraMetrics) ToProto() *proto.AuraMetrics

type AuraReference

type AuraReference struct {
	// contains filtered or unexported fields
}

func NewAuraReference

func NewAuraReference(sourceUnit UnitReference, auraId *proto.ActionID) AuraReference

func NewIcdAuraReference

func NewIcdAuraReference(sourceUnit UnitReference, auraId *proto.ActionID) AuraReference

func (*AuraReference) Get

func (ar *AuraReference) Get() *Aura

func (*AuraReference) String

func (ar *AuraReference) String() string

type AuraState

type AuraState struct {
	RemainingDuration time.Duration
	Stacks            int32
}

type AutoAttackOptions

type AutoAttackOptions struct {
	MainHand        Weapon
	OffHand         Weapon
	Ranged          Weapon
	AutoSwingMelee  bool // If true, core engine will handle calling SwingMelee() for you.
	AutoSwingRanged bool // If true, core engine will handle calling SwingRanged() for you.
	ReplaceMHSwing  ReplaceMHSwing
	ProcMask        ProcMask // If set will replace the ProcMask for any weapon spells configured.
}

Options for initializing auto attacks.

type AutoAttacks

type AutoAttacks struct {
	AutoSwingMelee    bool
	AutoSwingRanged   bool
	RandomMeleeOffset bool

	IsDualWielding bool
	// contains filtered or unexported fields
}

func (*AutoAttacks) CancelAutoSwing

func (aa *AutoAttacks) CancelAutoSwing(sim *Simulation)

Stops the auto swing action for the rest of the iteration. Used for pets after being disabled.

func (*AutoAttacks) CancelMeleeSwing

func (aa *AutoAttacks) CancelMeleeSwing(sim *Simulation)

func (*AutoAttacks) CancelRangedSwing

func (aa *AutoAttacks) CancelRangedSwing(sim *Simulation)

func (*AutoAttacks) DelayMeleeBy

func (aa *AutoAttacks) DelayMeleeBy(sim *Simulation, delay time.Duration)

Delays all swing timers for the specified amount.

func (*AutoAttacks) DelayRangedUntil

func (aa *AutoAttacks) DelayRangedUntil(sim *Simulation, readyAt time.Duration)

func (*AutoAttacks) DesyncOffHand

func (aa *AutoAttacks) DesyncOffHand(sim *Simulation, readyAt time.Duration)

Desyncss the offhand swing

func (*AutoAttacks) EnableAutoSwing

func (aa *AutoAttacks) EnableAutoSwing(sim *Simulation)

Re-enables the auto swing action for the iteration

func (*AutoAttacks) EnableMeleeSwing

func (aa *AutoAttacks) EnableMeleeSwing(sim *Simulation)

func (*AutoAttacks) EnableRangedSwing

func (aa *AutoAttacks) EnableRangedSwing(sim *Simulation, bypassPrepullCheck bool)

func (*AutoAttacks) MH

func (aa *AutoAttacks) MH() *Weapon

func (*AutoAttacks) MHAuto

func (aa *AutoAttacks) MHAuto() *Spell

func (*AutoAttacks) MHConfig

func (aa *AutoAttacks) MHConfig() *SpellConfig

func (*AutoAttacks) MainhandSwingSpeed

func (aa *AutoAttacks) MainhandSwingSpeed() time.Duration

The amount of time between two MH swings.

func (*AutoAttacks) MaybeReplaceMHSwing

func (aa *AutoAttacks) MaybeReplaceMHSwing(sim *Simulation, mhSwingSpell *Spell) *Spell

Optionally replaces the given swing spell with an Agent-specified MH Swing replacer. This is for effects like Heroic Strike or Raptor Strike.

func (*AutoAttacks) NextAttackAt

func (aa *AutoAttacks) NextAttackAt() time.Duration

Returns the time at which the next attack will occur.

func (*AutoAttacks) OH

func (aa *AutoAttacks) OH() *Weapon

func (*AutoAttacks) OHAuto

func (aa *AutoAttacks) OHAuto() *Spell

func (*AutoAttacks) OHConfig

func (aa *AutoAttacks) OHConfig() *SpellConfig

func (*AutoAttacks) OffhandSwingAt

func (aa *AutoAttacks) OffhandSwingAt() time.Duration

func (*AutoAttacks) OffhandSwingSpeed

func (aa *AutoAttacks) OffhandSwingSpeed() time.Duration

The amount of time between two OH swings.

func (*AutoAttacks) PPMProc

func (aa *AutoAttacks) PPMProc(sim *Simulation, ppm float64, procMask ProcMask, label string, spell *Spell) bool

Returns whether a PPM-based effect procced. Using NewPPMManager() is preferred; this function should only be used when the attacker is not known at initialization time.

func (*AutoAttacks) PauseMeleeBy

func (aa *AutoAttacks) PauseMeleeBy(sim *Simulation, pauseTime time.Duration)

PauseMeleeBy will prevent any swing from completing for the specified time. This replicates a /stopattack and /startattack with a brief "pause" in the middle. It's possible that no swing time is lost if the pauseTime is less than the remaining swing time. Used by Rogue Gouge

func (*AutoAttacks) RandomizeMeleeTiming

func (aa *AutoAttacks) RandomizeMeleeTiming(sim *Simulation)

Used to prevent artificial Haste breakpoints arising from APL evaluations after autos occurring at locally optimal timings.

func (*AutoAttacks) Ranged

func (aa *AutoAttacks) Ranged() *Weapon

func (*AutoAttacks) RangedAuto

func (aa *AutoAttacks) RangedAuto() *Spell

func (*AutoAttacks) RangedConfig

func (aa *AutoAttacks) RangedConfig() *SpellConfig

func (*AutoAttacks) SetMH

func (aa *AutoAttacks) SetMH(weapon Weapon)

func (*AutoAttacks) SetMHSpell

func (aa *AutoAttacks) SetMHSpell(spell *Spell)

func (*AutoAttacks) SetOH

func (aa *AutoAttacks) SetOH(weapon Weapon)

func (*AutoAttacks) SetOHSpell

func (aa *AutoAttacks) SetOHSpell(spell *Spell)

func (*AutoAttacks) SetOffhandSwingAt

func (aa *AutoAttacks) SetOffhandSwingAt(offhandSwingAt time.Duration)

func (*AutoAttacks) SetRanged

func (aa *AutoAttacks) SetRanged(weapon Weapon)

func (*AutoAttacks) SetReplaceMHSwing

func (aa *AutoAttacks) SetReplaceMHSwing(replaceSwing ReplaceMHSwing)

func (*AutoAttacks) SetReplaceOHSwing

func (aa *AutoAttacks) SetReplaceOHSwing(replaceSwing ReplaceMHSwing)

func (*AutoAttacks) StopMeleeUntil

func (aa *AutoAttacks) StopMeleeUntil(sim *Simulation, readyAt time.Duration)

StopMeleeUntil should be used whenever a non-melee spell is cast. It stops melee, then restarts it at end of cast, but with a reset swing timer (as if swings had just landed).

func (*AutoAttacks) StopRangedUntil

func (aa *AutoAttacks) StopRangedUntil(sim *Simulation, readyAt time.Duration)

func (*AutoAttacks) UpdateSwingTimers

func (aa *AutoAttacks) UpdateSwingTimers(sim *Simulation)

type BaseDamageCalculator added in v0.0.10

type BaseDamageCalculator func(*Simulation, *Spell) float64

type BaseStatsKey

type BaseStatsKey struct {
	Race  proto.Race
	Class proto.Class
}

type BuffConfig

type BuffConfig struct {
	Label    string
	ActionID ActionID
	Stats    []StatConfig
}

type BuffsCombo

type BuffsCombo struct {
	Label       string
	Raid        *proto.RaidBuffs
	Party       *proto.PartyBuffs
	Debuffs     *proto.Debuffs
	Player      *proto.IndividualBuffs
	Consumables *proto.ConsumesSpec
}

type CanCastCondition

type CanCastCondition func(sim *Simulation, target *Unit) bool

type Cast

type Cast struct {
	// Amount of resource that will be consumed by this cast.
	Cost float64

	// The length of time the GCD will be on CD as a result of this cast.
	GCD time.Duration

	// The minimum length of time for the GCD. Can be left out to use the default of 1s
	GCDMin time.Duration

	// The amount of time between the call to spell.Cast() and when the spell
	// effects are invoked.
	CastTime time.Duration

	// A dummy value to give 0gcd casts a non empty struct
	NonEmpty bool
}

func (*Cast) EffectiveTime

func (cast *Cast) EffectiveTime() time.Duration

type CastConfig

type CastConfig struct {
	// Default cast values with all static effects applied.
	DefaultCast Cast

	// Dynamic modifications for each cast.
	ModifyCast func(*Simulation, *Spell, *Cast)

	// Ignores haste when calculating the GCD and cast time for this cast.
	// Automatically set if GCD and cast times are all 0, e.g. for empty casts.
	IgnoreHaste bool

	CD       Cooldown
	SharedCD Cooldown

	CastTime func(spell *Spell) time.Duration
}

Input for constructing the CastSpell function for a spell.

type CastFunc

type CastFunc func(*Simulation, *Unit)

type CastSuccessFunc

type CastSuccessFunc func(*Simulation, *Unit) bool

type Character

type Character struct {
	Unit

	Name  string // Different from Label, needed for returned results.
	Race  proto.Race
	Class proto.Class
	Spec  proto.Spec

	// Current gear.
	Equipment

	// Stat buff auras associated with any proc effects in the Character's equippable items
	ItemProcBuffs []*StatBuffAura

	//Item Swap Handler
	ItemSwap ItemSwap

	// Consumables this Character will be using.
	Consumables *proto.ConsumesSpec

	// Used for effects like "Increased Armor Value from Items"
	*EquipScalingManager

	// Up reference to this Character's Party.
	Party *Party

	// This character's index within its party [0-4].
	PartyIndex int

	Pets []*Pet // cached in AddPet, for advance()
	// contains filtered or unexported fields
}

Character is a data structure to hold all the shared values that all class logic shares. All players have stats, equipment, auras, etc

func NewCharacter

func NewCharacter(party *Party, partyIndex int, player *proto.Player) Character

func (*Character) AddComboPoints

func (eb *Character) AddComboPoints(sim *Simulation, pointsToAdd int32, target *Unit, metrics *ResourceMetrics)

func (*Character) AddDynamicEquipStats

func (character *Character) AddDynamicEquipStats(sim *Simulation, equipStats stats.Stats)

func (*Character) AddEnergy

func (eb *Character) AddEnergy(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Character) AddFocus

func (fb *Character) AddFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Character) AddMajorCooldown

func (mcdm *Character) AddMajorCooldown(mcd MajorCooldown)

Registers a major cooldown to the Character, which will be automatically used when available.

func (*Character) AddPartyBuffs

func (character *Character) AddPartyBuffs(partyBuffs *proto.PartyBuffs)

func (*Character) AddPet

func (character *Character) AddPet(pet PetAgent)

func (*Character) AddRage

func (rb *Character) AddRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Character) AddRaidBuffs

func (character *Character) AddRaidBuffs(_ *proto.RaidBuffs)

func (*Character) AddRunicPower

func (rp *Character) AddRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Character) AddStatProcBuff

func (character *Character) AddStatProcBuff(effectID int32, procAura *StatBuffAura, isEnchant bool, eligibleSlots []proto.ItemSlot)

func (*Character) AddUnscaledRunicPower

func (rp *Character) AddUnscaledRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Character) Advance

func (rp *Character) Advance(sim *Simulation, newTime time.Duration)

func (*Character) AllRunesSpent

func (rp *Character) AllRunesSpent() bool

func (*Character) AnyDepletedRunes

func (rp *Character) AnyDepletedRunes() bool

func (*Character) AnyRuneReadyAt

func (rp *Character) AnyRuneReadyAt(sim *Simulation) time.Duration

func (*Character) AnySpentRuneReadyAt

func (rp *Character) AnySpentRuneReadyAt() time.Duration

AnySpentRuneReadyAt returns the next time that a rune will regenerate. It will be NeverExpires if there is no rune pending regeneration.

func (*Character) ApplyArmorSpecializationEffect

func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Stat, armorType proto.ArmorType, spellID int32) *Aura

func (*Character) ApplyDynamicEquipScaling

func (character *Character) ApplyDynamicEquipScaling(sim *Simulation, stat stats.Stat, multiplier float64)

func (*Character) ApplyEquipScaling

func (character *Character) ApplyEquipScaling(stat stats.Stat, multiplier float64)

func (*Character) BloodDeathRuneBothReadyAt

func (rp *Character) BloodDeathRuneBothReadyAt() time.Duration

func (*Character) BloodRuneReadyAt

func (rp *Character) BloodRuneReadyAt(sim *Simulation) time.Duration

BloodRuneReadyAt returns the earliest time a (possibly death-converted) blood rune is ready.

func (*Character) CalcAndRollDamageRange

func (char *Character) CalcAndRollDamageRange(sim *Simulation, coefficient float64, variance float64) float64

func (*Character) CalcScalingSpellDmg

func (char *Character) CalcScalingSpellDmg(spellEffectCoefficient float64) float64

spellEffectCoefficient is the value in the "Coefficient" column of the SpellEffect DB2 table

func (*Character) CalculateMasteryPoints

func (character *Character) CalculateMasteryPoints() float64

func (*Character) ComboPoints

func (eb *Character) ComboPoints() int32

func (*Character) ConvertAndRegenBloodTapRune added in v0.0.1

func (rp *Character) ConvertAndRegenBloodTapRune(sim *Simulation, spell *Spell, runeMetrics []*ResourceMetrics) bool

Blood tap prioritizes runes based on spec Blood prefers to regen B runes first, then the F/U rune with the highest CD if no blood runes are available. Frost prefers to regen U runes first, then the B/F rune with the highest CD if no other runes are available. Unholy prefers to regen a B/F rune with the highest CD first, then an U rune if no other runes are available.

func (*Character) ConvertAndRegenPlagueLeechRunes added in v0.0.1

func (rp *Character) ConvertAndRegenPlagueLeechRunes(sim *Simulation, spell *Spell, runeMetrics []*ResourceMetrics)

Plague leech prioritizes runes based on spec Unholy prefers to regen a pair of B/F runes first, then U if no other runes are available. Blood and Frost prefers to regen a pair of F/U runes first, then B if no other runes are available.

func (*Character) ConvertFromDeath

func (rp *Character) ConvertFromDeath(sim *Simulation, slot int8)

ConvertFromDeath reverts the rune to its original type.

func (*Character) ConvertToDeath

func (rp *Character) ConvertToDeath(sim *Simulation, slot int8, revertAt time.Duration)

ConvertToDeath converts the given slot to death and sets up the reversion conditions

func (*Character) CouldHaveSetBonus

func (character *Character) CouldHaveSetBonus(set *ItemSet, numItems int32) bool

func (*Character) CritMultiplier

func (character *Character) CritMultiplier(primaryModifiers float64, secondaryModifiers float64) float64

func (*Character) CurrentBloodOrDeathRunes

func (rp *Character) CurrentBloodOrDeathRunes() int8

func (*Character) CurrentBloodRunes

func (rp *Character) CurrentBloodRunes() int8

func (*Character) CurrentDeathRunes

func (rp *Character) CurrentDeathRunes() int8

func (*Character) CurrentEnergy

func (eb *Character) CurrentEnergy() float64

func (*Character) CurrentEnergyRegenMultiplier

func (eb *Character) CurrentEnergyRegenMultiplier() float64

func (*Character) CurrentFocus

func (fb *Character) CurrentFocus() float64

func (*Character) CurrentFrostOrDeathRunes

func (rp *Character) CurrentFrostOrDeathRunes() int8

func (*Character) CurrentFrostRunes

func (rp *Character) CurrentFrostRunes() int8

func (*Character) CurrentHealth

func (hb *Character) CurrentHealth() float64

func (*Character) CurrentHealthPercent

func (hb *Character) CurrentHealthPercent() float64

func (*Character) CurrentRage

func (rb *Character) CurrentRage() float64

func (*Character) CurrentRunicPower

func (rp *Character) CurrentRunicPower() float64

func (*Character) CurrentUnholyOrDeathRunes

func (rp *Character) CurrentUnholyOrDeathRunes() int8

func (*Character) CurrentUnholyRunes

func (rp *Character) CurrentUnholyRunes() int8

func (*Character) DeathRuneRegenAt

func (rp *Character) DeathRuneRegenAt(slot int32) time.Duration

DeathRuneRegenAt returns the time the given death rune will regen at. If the rune is not death or not spent it returns NeverExpires.

func (*Character) DeathRuneRevertAt

func (rp *Character) DeathRuneRevertAt() time.Duration

DeathRuneRevertAt returns the next time that a death rune will revert. If there is no death rune that needs to revert it returns NeverExpires.

func (*Character) DeathRunesInFU

func (rp *Character) DeathRunesInFU() int8

func (*Character) DebugString

func (rp *Character) DebugString() string

func (*Character) DefaultCritMultiplier

func (character *Character) DefaultCritMultiplier() float64

func (*Character) Died

func (character *Character) Died(sim *Simulation)

func (*Character) EnableManaBar

func (character *Character) EnableManaBar()

EnableManaBar will setup caster stat dependencies (int->mana and int->spellcrit) as well as enable the mana gain action to regenerate mana. It will then enable mana gain metrics for reporting.

func (*Character) EnableManaBarWithModifier

func (character *Character) EnableManaBarWithModifier(modifier float64)

func (*Character) EnableRunicPowerBar

func (character *Character) EnableRunicPowerBar(runeCD time.Duration, onRuneChange OnRuneChange, onRunicPowerGain OnRunicPowerGain)

func (*Character) EndOOMEvent

func (mb *Character) EndOOMEvent(sim *Simulation)

func (*Character) EnergyRegenPerSecond

func (eb *Character) EnergyRegenPerSecond() float64

func (*Character) EquipStats

func (character *Character) EquipStats() stats.Stats

func (*Character) FillPlayerStats

func (character *Character) FillPlayerStats(playerStats *proto.PlayerStats)

func (*Character) Finalize

func (character *Character) Finalize()

func (*Character) FocusRegenPerSecond

func (fb *Character) FocusRegenPerSecond() float64

func (*Character) FocusRegenPerTick

func (fb *Character) FocusRegenPerTick() float64

func (*Character) FrostRuneReadyAt

func (rp *Character) FrostRuneReadyAt(sim *Simulation) time.Duration

func (*Character) GainHealth

func (hb *Character) GainHealth(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Character) GetActiveAuraWithTag

func (at *Character) GetActiveAuraWithTag(tag string) *Aura

func (*Character) GetActiveSetBonusNames

func (character *Character) GetActiveSetBonusNames() []string

Returns the names of all active set bonuses.

func (*Character) GetAura

func (at *Character) GetAura(label string) *Aura

func (*Character) GetAuraByID

func (at *Character) GetAuraByID(actionID ActionID) *Aura

func (*Character) GetAuras

func (at *Character) GetAuras() []*Aura

func (*Character) GetAurasWithTag

func (at *Character) GetAurasWithTag(tag string) []*Aura

func (*Character) GetBaseStats

func (character *Character) GetBaseStats() stats.Stats

func (*Character) GetConjuredCD

func (character *Character) GetConjuredCD() *Timer

func (*Character) GetDefensiveTrinketCD

func (character *Character) GetDefensiveTrinketCD() *Timer

func (*Character) GetDynamicProcMaskForTypes added in v0.0.99

func (character *Character) GetDynamicProcMaskForTypes(weaponTypes ...proto.WeaponType) *ProcMask

func (*Character) GetDynamicProcMaskForTypesAndHand added in v0.0.99

func (character *Character) GetDynamicProcMaskForTypesAndHand(twohand bool, weaponTypes ...proto.WeaponType) *ProcMask

func (*Character) GetDynamicProcMaskForWeaponEffect

func (character *Character) GetDynamicProcMaskForWeaponEffect(itemID int32) *ProcMask

func (*Character) GetDynamicProcMaskForWeaponEnchant

func (character *Character) GetDynamicProcMaskForWeaponEnchant(effectID int32) *ProcMask

func (*Character) GetIcdAuraByID

func (at *Character) GetIcdAuraByID(actionID ActionID) *Aura

func (*Character) GetInitialMajorCooldown

func (mcdm *Character) GetInitialMajorCooldown(actionID ActionID) MajorCooldown

func (*Character) GetMHWeapon

func (character *Character) GetMHWeapon() *Item

Returns the MH weapon if one is equipped, and null otherwise.

func (*Character) GetMajorCooldown

func (mcdm *Character) GetMajorCooldown(actionID ActionID) *MajorCooldown

func (*Character) GetMajorCooldownIDs

func (mcdm *Character) GetMajorCooldownIDs() []*proto.ActionID

func (*Character) GetMajorCooldownIgnoreTag

func (mcdm *Character) GetMajorCooldownIgnoreTag(actionID ActionID) *MajorCooldown

func (*Character) GetMajorCooldowns

func (mcdm *Character) GetMajorCooldowns() []*MajorCooldown

Returns all MCDs.

func (*Character) GetMatchingItemProcAuras

func (character *Character) GetMatchingItemProcAuras(statTypesToMatch []stats.Stat, minIcd time.Duration) []*StatBuffAura

func (*Character) GetMatchingStatBuffCooldownAuras added in v0.0.33

func (mcdm *Character) GetMatchingStatBuffCooldownAuras(statTypesToMatch []stats.Stat) []*StatBuffAura

func (*Character) GetMatchingStatBuffSpells

func (mcdm *Character) GetMatchingStatBuffSpells(statTypesToMatch []stats.Stat) []*Spell

func (*Character) GetMetricsProto

func (character *Character) GetMetricsProto() *proto.UnitMetrics

func (*Character) GetOHWeapon

func (character *Character) GetOHWeapon() *Item

Returns the OH weapon if one is equipped, and null otherwise. Note that shields / Held-in-off-hand items are NOT counted as weapons in this function.

func (*Character) GetOffensiveTrinketCD

func (character *Character) GetOffensiveTrinketCD() *Timer

func (*Character) GetOrInitSpellCategoryTimer

func (u *Character) GetOrInitSpellCategoryTimer(spellCategoryID int32) *Timer

Helper for timers keyed by spellCategoryID so that we can keep shared cooldowns for on use effects locked to these

func (*Character) GetParryRatingWithoutStrength added in v0.0.3

func (character *Character) GetParryRatingWithoutStrength() float64

func (*Character) GetPotionCD

func (character *Character) GetPotionCD() *Timer

func (*Character) GetPresimOptions

func (character *Character) GetPresimOptions(playerConfig *proto.Player) *PresimOptions

func (*Character) GetProcMaskForTypes

func (character *Character) GetProcMaskForTypes(weaponTypes ...proto.WeaponType) ProcMask

func (*Character) GetProcMaskForTypesAndHand

func (character *Character) GetProcMaskForTypesAndHand(twohand bool, weaponTypes ...proto.WeaponType) ProcMask

func (*Character) GetProcMaskForWeaponSlot

func (character *Character) GetProcMaskForWeaponSlot(slot proto.ItemSlot) ProcMask

func (*Character) GetPseudoStatsProto

func (character *Character) GetPseudoStatsProto() []float64

func (*Character) GetRuneRegenMultiplier

func (rp *Character) GetRuneRegenMultiplier() float64

func (*Character) HasActiveAura

func (at *Character) HasActiveAura(label string) bool

func (*Character) HasActiveAuraWithTag

func (at *Character) HasActiveAuraWithTag(tag string) bool

func (*Character) HasActiveAuraWithTagExcludingAura

func (at *Character) HasActiveAuraWithTagExcludingAura(tag string, excludeAura *Aura) bool

func (*Character) HasAlchStone

func (character *Character) HasAlchStone() bool

func (*Character) HasAura

func (at *Character) HasAura(label string) bool

func (*Character) HasAuraWithTag

func (at *Character) HasAuraWithTag(tag string) bool

func (*Character) HasGlyph

func (character *Character) HasGlyph(glyphID int32) bool

func (*Character) HasMHWeapon

func (character *Character) HasMHWeapon() bool

func (*Character) HasMetaGemEquipped

func (character *Character) HasMetaGemEquipped(gemID int32) bool

func (*Character) HasOH added in v0.0.21

func (character *Character) HasOH() bool

func (*Character) HasOHWeapon

func (character *Character) HasOHWeapon() bool

func (*Character) HasProfession

func (character *Character) HasProfession(prof proto.Profession) bool

func (*Character) HasRangedWeapon

func (character *Character) HasRangedWeapon() bool

func (*Character) HasRingEquipped

func (character *Character) HasRingEquipped(itemID int32) bool

func (*Character) HasTrinketEquipped

func (character *Character) HasTrinketEquipped(itemID int32) bool

func (*Character) IsOOM

func (mb *Character) IsOOM() bool

func (*Character) IsReset

func (eb *Character) IsReset(sim *Simulation) bool

func (*Character) LeftBloodRuneReady

func (rp *Character) LeftBloodRuneReady() bool

func (*Character) MaxComboPoints

func (eb *Character) MaxComboPoints() int32

func (*Character) MaxHealth

func (hb *Character) MaxHealth() float64

func (*Character) MaximumEnergy

func (eb *Character) MaximumEnergy() float64

func (*Character) MaximumFocus

func (fb *Character) MaximumFocus() float64

func (*Character) MaximumRage

func (rb *Character) MaximumRage() float64

func (*Character) MaximumRunicPower

func (rp *Character) MaximumRunicPower() float64

func (*Character) MeetsArmorSpecializationRequirement

func (character *Character) MeetsArmorSpecializationRequirement(armorType proto.ArmorType) bool

func (*Character) MultiplyAutoAttackRageGen

func (rb *Character) MultiplyAutoAttackRageGen(multiplier float64)

Call this within the OnGain and OnExpire callbacks for Battle Stance, Raging Whirlwind, etc.

func (*Character) MultiplyEnergyRegenSpeed

func (eb *Character) MultiplyEnergyRegenSpeed(sim *Simulation, multiplier float64)

func (*Character) MultiplyFocusRegenSpeed

func (fb *Character) MultiplyFocusRegenSpeed(sim *Simulation, multiplier float64)

func (*Character) MultiplyRageGen added in v0.0.105

func (rb *Character) MultiplyRageGen(multiplier float64)

func (*Character) MultiplyRuneRegenSpeed

func (rp *Character) MultiplyRuneRegenSpeed(sim *Simulation, multiplier float64)

func (*Character) MultiplyRunicRegen

func (rp *Character) MultiplyRunicRegen(multiply float64)

func (*Character) NewBloodRuneMetrics added in v0.0.1

func (rp *Character) NewBloodRuneMetrics(action ActionID) *ResourceMetrics

func (*Character) NewDeathRuneMetrics added in v0.0.1

func (rp *Character) NewDeathRuneMetrics(action ActionID) *ResourceMetrics

func (*Character) NewDynamicLegacyProcForEnchant

func (character *Character) NewDynamicLegacyProcForEnchant(effectID int32, ppm float64, fixedProcChance float64) *DynamicProcManager

Dynamic Proc Manager for dynamic ProcMasks on weapon enchants

func (*Character) NewDynamicLegacyProcForTempEnchant added in v0.0.66

func (character *Character) NewDynamicLegacyProcForTempEnchant(effectID int32, ppm float64, fixedProcChanceFn func(ProcMask) float64) *DynamicProcManager

Dynamic Proc Manager for dynamic ProcMasks on weapon temp enchants

func (*Character) NewDynamicLegacyProcForWeapon

func (character *Character) NewDynamicLegacyProcForWeapon(itemID int32, ppm float64, fixedProcChance float64) *DynamicProcManager

Dynamic Proc Manager for dynamic ProcMasks on weapon effects

func (*Character) NewEquipScalingManager

func (character *Character) NewEquipScalingManager() *EquipScalingManager

func (*Character) NewFixedProcChanceManager

func (character *Character) NewFixedProcChanceManager(fixedProcChance float64, procMask ProcMask) *DynamicProcManager

Dynamic Proc Manager for static ProcMasks and no item swap callback

func (*Character) NewFrostRuneMetrics added in v0.0.1

func (rp *Character) NewFrostRuneMetrics(action ActionID) *ResourceMetrics

func (*Character) NewLegacyPPMManager

func (character *Character) NewLegacyPPMManager(ppm float64, procMask ProcMask) *DynamicProcManager

PPMManager for static ProcMasks

func (*Character) NewRPPMProcManager

func (character *Character) NewRPPMProcManager(effectID int32, isEnchant bool, isGem bool, procMask ProcMask, rppmConfig RPPMConfig) *DynamicProcManager

Creates a new RPPM proc manager for the given effectID. Will manage all equiped items that use the given effect ID and overwrite the given configuration's ilvl accordingly.

Example

char.NewRPPMProcManager(
		1234,
		false,
		false,
		ProcMaskDirect,
		RPPMConfig{PPM: 2}.
			WithClassMod(-0.5, 255).
			WithHasteMod(),
	)

func (*Character) NewRunicPowerMetrics added in v0.0.1

func (rp *Character) NewRunicPowerMetrics(action ActionID) *ResourceMetrics

func (*Character) NewSetBonusRPPMProcManager

func (character *Character) NewSetBonusRPPMProcManager(spellID int32, setBonusAura *Aura, procMask ProcMask, rppmConfig RPPMConfig) *DynamicProcManager

func (*Character) NewStaticLegacyPPMManager

func (character *Character) NewStaticLegacyPPMManager(ppm float64, procMask ProcMask) *DynamicProcManager

PPMManager for static ProcMasks and no item swap callback

func (*Character) NewTemporaryStatBuffWithStacks

func (character *Character) NewTemporaryStatBuffWithStacks(config TemporaryStatBuffWithStacksConfig) (*StatBuffAura, *Aura)

func (*Character) NewTemporaryStatsAura

func (character *Character) NewTemporaryStatsAura(auraLabel string, actionID ActionID, tempStats stats.Stats, duration time.Duration) *StatBuffAura

Helper for the common case of making an aura that adds stats.

func (*Character) NewTemporaryStatsAuraWrapped

func (character *Character) NewTemporaryStatsAuraWrapped(auraLabel string, actionID ActionID, buffs stats.Stats, duration time.Duration, modConfig func(*Aura)) *StatBuffAura

Alternative that allows modifying the Aura config.

func (*Character) NewUnholyRuneMetrics added in v0.0.1

func (rp *Character) NewUnholyRuneMetrics(action ActionID) *ResourceMetrics

func (*Character) NextBloodRuneReadyAt

func (rp *Character) NextBloodRuneReadyAt(sim *Simulation) time.Duration

func (*Character) NextEnergyTickAt

func (eb *Character) NextEnergyTickAt() time.Duration

func (*Character) NextFocusTickAt

func (fb *Character) NextFocusTickAt() time.Duration

func (*Character) NextFrostRuneReadyAt

func (rp *Character) NextFrostRuneReadyAt(sim *Simulation) time.Duration

func (*Character) NextUnholyRuneReadyAt

func (rp *Character) NextUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Character) NormalFrostRuneReadyAt

func (rp *Character) NormalFrostRuneReadyAt(sim *Simulation) time.Duration

NormalFrostRuneReadyAt returns the earliest time a non-death frost rune is ready.

func (*Character) NormalSpentBloodRuneReadyAt

func (rp *Character) NormalSpentBloodRuneReadyAt(_ *Simulation) time.Duration

NormalSpentBloodRuneReadyAt returns the earliest time a spent non-death blood rune is ready.

func (*Character) NormalUnholyRuneReadyAt

func (rp *Character) NormalUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Character) NumActiveAurasWithTag

func (at *Character) NumActiveAurasWithTag(tag string) int32

func (*Character) OnApplyEffects

func (at *Character) OnApplyEffects(sim *Simulation, target *Unit, spell *Spell)

Invokes the OnApplyEffects event for all tracked Auras.

func (*Character) OnCastComplete

func (at *Character) OnCastComplete(sim *Simulation, spell *Spell)

Invokes the OnCastComplete event for all tracked Auras.

func (*Character) OnEncounterStart added in v0.0.13

func (at *Character) OnEncounterStart(sim *Simulation)

func (*Character) OnHealDealt

func (at *Character) OnHealDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnHeal event for all tracked Auras.

func (*Character) OnHealTaken

func (at *Character) OnHealTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Character) OnPeriodicDamageDealt

func (at *Character) OnPeriodicDamageDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnPeriodicDamage

As a debuff when target is being hit by dot.
As a buff when caster's dots are ticking.

func (*Character) OnPeriodicDamageTaken

func (at *Character) OnPeriodicDamageTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Character) OnPeriodicHealDealt

func (at *Character) OnPeriodicHealDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnPeriodicHeal

As a debuff when target is being hit by dot.
As a buff when caster's dots are ticking.

func (*Character) OnPeriodicHealTaken

func (at *Character) OnPeriodicHealTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Character) OnSpellHitDealt

func (at *Character) OnSpellHitDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnSpellHit event for all tracked Auras.

func (*Character) OnSpellHitTaken

func (at *Character) OnSpellHitTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Character) OptimalRuneCost

func (rp *Character) OptimalRuneCost(cost RuneCost) RuneCost

func (*Character) RegenAllFrostAndUnholyRunesAsDeath

func (rp *Character) RegenAllFrostAndUnholyRunesAsDeath(sim *Simulation, deathRuneMetrics *ResourceMetrics)

func (*Character) RegenAllRunes

func (rp *Character) RegenAllRunes(sim *Simulation, metrics []*ResourceMetrics)

func (*Character) RegenRunicEmpowermentRune added in v0.0.1

func (rp *Character) RegenRunicEmpowermentRune(sim *Simulation, runeMetrics []*ResourceMetrics)

Runic Empowerment regens a randoom fully depleted rune

func (*Character) RegisterArmorSpecializationTracker

func (character *Character) RegisterArmorSpecializationTracker(armorType proto.ArmorType, spellID int32) *Aura

func (*Character) RegisterItemSwapCallback

func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, callback OnItemSwap)

func (*Character) RegisterPvPGloveMod

func (character *Character) RegisterPvPGloveMod(itemIDs []int32, config SpellModConfig)

Adds a Spellmod to PVP GLoves

func (*Character) RegisterResetEffect

func (at *Character) RegisterResetEffect(resetEffect ResetEffect)

Registers a callback to this Character which will be invoked on every Sim reset.

func (*Character) RegisterVengeance

func (character *Character) RegisterVengeance(spellID int32, requiredAura *Aura) *Aura

func (*Character) RemoveDynamicEquipScaling

func (character *Character) RemoveDynamicEquipScaling(sim *Simulation, stat stats.Stat, multiplier float64)

func (*Character) RemoveEquipScaling

func (character *Character) RemoveEquipScaling(stat stats.Stat, multiplier float64)

func (*Character) RemoveHealth

func (hb *Character) RemoveHealth(sim *Simulation, amount float64)

func (*Character) ResetComboPoints added in v0.0.13

func (eb *Character) ResetComboPoints(sim *Simulation, comboPointsToKeep int32)

func (*Character) ResetEnergyTick

func (eb *Character) ResetEnergyTick(sim *Simulation)

Gives an immediate partial energy tick and restarts the tick timer.

func (*Character) ResetFocusTick

func (fb *Character) ResetFocusTick(sim *Simulation)

Gives an immediate partial Focus tick and restarts the tick timer.

func (*Character) ResetRageBar added in v0.0.13

func (rb *Character) ResetRageBar(sim *Simulation, rageToKeep float64)

func (*Character) ResetRunicPowerBar added in v0.0.13

func (rp *Character) ResetRunicPowerBar(sim *Simulation, runicPowerToKeep float64)

func (*Character) RuneIsActive

func (rp *Character) RuneIsActive(slot int8) bool

func (*Character) RuneIsDeath

func (rp *Character) RuneIsDeath(slot int8) bool

func (*Character) RuneReadyAt

func (rp *Character) RuneReadyAt(sim *Simulation, slot int8) time.Duration

func (*Character) SetMaxComboPoints

func (eb *Character) SetMaxComboPoints(maxComboPoints int32)

func (*Character) SetPermanentDeathRunes

func (rp *Character) SetPermanentDeathRunes(permanentDeaths []int8)

func (*Character) SetRuneCd

func (rp *Character) SetRuneCd(runeCd time.Duration)

func (*Character) SpendComboPoints

func (eb *Character) SpendComboPoints(sim *Simulation, metrics *ResourceMetrics)

func (*Character) SpendEnergy

func (eb *Character) SpendEnergy(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Character) SpendFocus

func (fb *Character) SpendFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Character) SpendPartialComboPoints

func (eb *Character) SpendPartialComboPoints(sim *Simulation, pointsToSpend int32, metrics *ResourceMetrics)

func (*Character) SpendRage

func (rb *Character) SpendRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Character) SpendRuneReadyAt

func (rp *Character) SpendRuneReadyAt(slot int8, spendAt time.Duration) time.Duration

func (*Character) SpendRunicPower

func (rp *Character) SpendRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Character) StartOOMEvent

func (mb *Character) StartOOMEvent(sim *Simulation, requiredMana float64)

func (*Character) TimeToTargetEnergy

func (eb *Character) TimeToTargetEnergy(targetEnergy float64) time.Duration

func (*Character) TimeToTargetFocus

func (fb *Character) TimeToTargetFocus(targetFocus float64) time.Duration

func (*Character) UnholyRuneReadyAt

func (rp *Character) UnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Character) UpdateMajorCooldowns

func (mcdm *Character) UpdateMajorCooldowns()

This function should be called if the CD for a major cooldown changes outside of the TryActivate() call.

func (*Character) UpdateMaxEnergy

func (eb *Character) UpdateMaxEnergy(sim *Simulation, bonusEnergy float64, metrics *ResourceMetrics)

Used for dynamic updates to maximum Energy, such as from the Druid Primal Madness talent

func (*Character) UpdateMaxHealth

func (hb *Character) UpdateMaxHealth(sim *Simulation, bonusHealth float64, metrics *ResourceMetrics)

Used for dynamic updates to maximum health from "Last Stand" effects

func (*Character) WeaponFromMainHand

func (character *Character) WeaponFromMainHand(critMultiplier float64) Weapon

Returns weapon stats using the main hand equipped weapon.

func (*Character) WeaponFromOffHand

func (character *Character) WeaponFromOffHand(critMultiplier float64) Weapon

Returns weapon stats using the off-hand equipped weapon.

func (*Character) WeaponFromRanged

func (character *Character) WeaponFromRanged(critMultiplier float64) Weapon

Returns weapon stats using the ranged equipped weapon.

type CharacterBuildPhase

type CharacterBuildPhase uint8
const (
	CharacterBuildPhaseNone CharacterBuildPhase = 0
	CharacterBuildPhaseBase CharacterBuildPhase = 1 << iota
	CharacterBuildPhaseGear
	CharacterBuildPhaseTalents
	CharacterBuildPhaseBuffs
	CharacterBuildPhaseConsumes
)

func (CharacterBuildPhase) Matches

func (cbp CharacterBuildPhase) Matches(other CharacterBuildPhase) bool

type CharacterIterationMetrics

type CharacterIterationMetrics struct {
	Died    bool // Whether this unit died in the current iteration.
	WentOOM bool // Whether the agent has hit OOM at least once in this iteration.

	ManaSpent  float64
	ManaGained float64

	OOMTime time.Duration // time spent not casting and waiting for regen.

	FirstOOMTimestamp time.Duration // Timestamp at which unit first went OOM.
}

Metrics for the current iteration, for 1 agent. Keep this as a separate struct, so it's easy to clear.

type CharacterSuiteConfig

type CharacterSuiteConfig struct {
	Class proto.Class

	Race               proto.Race
	Profession1        proto.Profession
	Profession2        proto.Profession
	GearSet            GearSetCombo
	SpecOptions        SpecOptionsCombo
	Talents            string
	Glyphs             *proto.Glyphs
	Rotation           RotationCombo
	Encounter          EncounterCombo
	ItemSwapSet        ItemSwapSetCombo
	StartingDistance   float64
	ReactionTimeMs     int32
	ChannelClipDelayMs int32

	Consumables     *proto.ConsumesSpec
	IndividualBuffs *proto.IndividualBuffs
	PartyBuffs      *proto.PartyBuffs
	RaidBuffs       *proto.RaidBuffs
	Debuffs         *proto.Debuffs
	Cooldowns       *proto.Cooldowns

	TargetDummies int32
	Tanks         []*proto.UnitReference
	HealingModel  *proto.HealingModel

	IsHealer        bool
	IsTank          bool
	InFrontOfTarget bool

	OtherRaces             []proto.Race
	OtherGearSets          []GearSetCombo
	OtherTalentSets        []TalentsCombo
	OtherSpecOptions       []SpecOptionsCombo
	OtherRotations         []RotationCombo
	OtherItemSwapSets      []ItemSwapSetCombo
	OtherStartingDistances []float64

	ItemFilter ItemFilter

	StatsToWeigh       []proto.Stat
	PseudoStatsToWeigh []proto.PseudoStat
	EPReferenceStat    proto.Stat
}

func GetTestBuildFromJSON added in v0.0.19

func GetTestBuildFromJSON(class proto.Class, dir string, file string, itemFilter ItemFilter, epReferenceStat *proto.Stat, statsToWeigh *[]proto.Stat) CharacterSuiteConfig

type CombinedTestGenerator

type CombinedTestGenerator struct {
	// contains filtered or unexported fields
}

func (*CombinedTestGenerator) GetTest

func (*CombinedTestGenerator) NumTests

func (generator *CombinedTestGenerator) NumTests() int

type Consumable

type Consumable struct {
	Id                       int32
	Type                     proto.ConsumableType
	Stats                    stats.Stats
	BuffsMainStat            bool
	Name                     string
	BuffDuration             time.Duration
	CooldownDuration         time.Duration
	CategoryCooldownDuration time.Duration
	EffectIds                []int32
}

func ConsumableFromProto

func ConsumableFromProto(consumable *proto.Consumable) Consumable

type Cooldown

type Cooldown struct {
	*Timer

	// Default amount of time after activation before this CD can be used again.
	// Note that some CDs won't use this, e.g. the GCD.
	Duration time.Duration
}

func (*Cooldown) Reduce

func (cd *Cooldown) Reduce(t time.Duration)

func (*Cooldown) Use

func (cd *Cooldown) Use(sim *Simulation)

Puts this CD on cooldown, using the default duration.

type CooldownActivation

type CooldownActivation func(*Simulation, *Character)

Function for activating a cooldown. Returns whether the activation was successful.

type CooldownActivationCondition

type CooldownActivationCondition func(*Simulation, *Character) bool

Condition for whether a cooldown can/should be activated. Returning false prevents the cooldown from being activated.

type CooldownType

type CooldownType byte
const (
	CooldownTypeUnknown CooldownType = 0
	CooldownTypeMana    CooldownType = 1 << iota
	CooldownTypeDPS
	CooldownTypeExplosive
	CooldownTypeSurvival
)

func (CooldownType) Matches

func (ct CooldownType) Matches(other CooldownType) bool

type CustomStatBuffProcCondition

type CustomStatBuffProcCondition func(sim *Simulation, aura *Aura) bool

type DamageAbsorptionAura

type DamageAbsorptionAura struct {
	*Aura

	ShieldStrength   float64
	OnDamageAbsorbed []OnDamageAbsorbedCallback
	// contains filtered or unexported fields
}

func (*DamageAbsorptionAura) Activate

func (aura *DamageAbsorptionAura) Activate(sim *Simulation)

func (*DamageAbsorptionAura) AttachOnDamageAbsorbed

func (aura *DamageAbsorptionAura) AttachOnDamageAbsorbed(callback OnDamageAbsorbedCallback) *DamageAbsorptionAura

type DamageAbsorptionAuraArray

type DamageAbsorptionAuraArray []*DamageAbsorptionAura

func (DamageAbsorptionAuraArray) FindLabel

func (auras DamageAbsorptionAuraArray) FindLabel() string

func (DamageAbsorptionAuraArray) Get

func (DamageAbsorptionAuraArray) IsEmpty

func (auras DamageAbsorptionAuraArray) IsEmpty() bool

type DefaultAPLValueImpl

type DefaultAPLValueImpl struct {
	Uuid *proto.UUID
}

Provides empty implementations for the GetX() value interface functions.

func (DefaultAPLValueImpl) Finalize

func (impl DefaultAPLValueImpl) Finalize(*APLRotation)

func (DefaultAPLValueImpl) GetBool

func (impl DefaultAPLValueImpl) GetBool(sim *Simulation) bool

func (DefaultAPLValueImpl) GetDuration

func (impl DefaultAPLValueImpl) GetDuration(sim *Simulation) time.Duration

func (DefaultAPLValueImpl) GetFloat

func (impl DefaultAPLValueImpl) GetFloat(sim *Simulation) float64

func (DefaultAPLValueImpl) GetInnerValues

func (impl DefaultAPLValueImpl) GetInnerValues() []APLValue

func (DefaultAPLValueImpl) GetInt

func (impl DefaultAPLValueImpl) GetInt(sim *Simulation) int32

func (DefaultAPLValueImpl) GetString

func (impl DefaultAPLValueImpl) GetString(sim *Simulation) string

type DefaultSecondaryResourceBarImpl

type DefaultSecondaryResourceBarImpl struct {
	// contains filtered or unexported fields
}

Default implementation of SecondaryResourceBar Use RegisterSecondaryResourceBar to intantiate the resource bar

func (*DefaultSecondaryResourceBarImpl) CanSpend

func (bar *DefaultSecondaryResourceBarImpl) CanSpend(limit float64) bool

CanSpend implements SecondaryResourceBar.

func (*DefaultSecondaryResourceBarImpl) Gain

func (bar *DefaultSecondaryResourceBarImpl) Gain(sim *Simulation, amount float64, action ActionID)

Gain implements SecondaryResourceBar.

func (*DefaultSecondaryResourceBarImpl) GetMetric

func (*DefaultSecondaryResourceBarImpl) Max

func (*DefaultSecondaryResourceBarImpl) RegisterOnGain

func (bar *DefaultSecondaryResourceBarImpl) RegisterOnGain(callback OnGainCallback)

func (*DefaultSecondaryResourceBarImpl) RegisterOnSpend

func (bar *DefaultSecondaryResourceBarImpl) RegisterOnSpend(callback OnSpendCallback)

func (*DefaultSecondaryResourceBarImpl) Reset

Reset implements SecondaryResourceBar.

func (*DefaultSecondaryResourceBarImpl) ResetBarTo added in v0.0.13

func (bar *DefaultSecondaryResourceBarImpl) ResetBarTo(sim *Simulation, resourcesToKeep float64)

func (*DefaultSecondaryResourceBarImpl) Spend

func (bar *DefaultSecondaryResourceBarImpl) Spend(sim *Simulation, amount float64, action ActionID)

Spend implements SecondaryResourceBar.

func (*DefaultSecondaryResourceBarImpl) SpendUpTo

func (bar *DefaultSecondaryResourceBarImpl) SpendUpTo(sim *Simulation, limit float64, action ActionID) float64

SpendUpTo implements SecondaryResourceBar.

func (*DefaultSecondaryResourceBarImpl) Value

Value implements SecondaryResourceBar.

type DelayedActionOptions

type DelayedActionOptions struct {
	// When the action should be performed.
	DoAt time.Duration

	Priority ActionPriority

	OnAction func(*Simulation)
	CleanUp  func(*Simulation)
}

type DiminishingReturnsConstants

type DiminishingReturnsConstants struct {
	// contains filtered or unexported fields
}

type DistributionMetrics

type DistributionMetrics struct {
	// Values for the current iteration. These are cleared after each iteration.
	Total float64
	// contains filtered or unexported fields
}

func NewDistributionMetrics

func NewDistributionMetrics() DistributionMetrics

func (*DistributionMetrics) ToProto

func (distMetrics *DistributionMetrics) ToProto() *proto.DistributionMetrics

type Dot

type Dot struct {
	Spell *Spell

	*Aura // Embed Aura, so we can use IsActive/Refresh/etc directly.

	BaseTickLength time.Duration // time between each tick

	SnapshotBaseDamage         float64
	SnapshotCritChance         float64
	SnapshotAttackerMultiplier float64

	BaseTickCount int32 // base tick count without haste applied

	BaseDurationMultiplier float64 // Some effects extend the BaseDuration - i.E. 50% - the DoTs will be subject to normal DoT fitting for base duration extend

	BonusCoefficient float64 // EffectBonusCoefficient in SpellEffect client DB table, "SP mod" on Wowhead (not necessarily shown there even if > 0)

	PeriodicDamageMultiplier float64 // Multiplier for periodic damage on top of the spell's damage multiplier
	// contains filtered or unexported fields
}

func (*Dot) AddTick

func (dot *Dot) AddTick()

Adds a tick to the current active dot and extends it's duration

func (*Dot) Apply

func (dot *Dot) Apply(sim *Simulation)

Snapshots and activates the Dot If the Dot is already active it's duration will be refreshed and the last tick from the previous application will be transfered to the new one

func (*Dot) ApplyRollover

func (dot *Dot) ApplyRollover(sim *Simulation)

Rolls over and activates the Dot If the Dot is already active it's duration will be refreshed and the last tick from the previous application will be transfered to the new one

func (*Dot) BaseDuration

func (dot *Dot) BaseDuration() time.Duration

func (*Dot) CalcAndDealPeriodicSnapshotDamage

func (dot *Dot) CalcAndDealPeriodicSnapshotDamage(sim *Simulation, target *Unit, outcomeApplier OutcomeApplier) *SpellResult

func (*Dot) CalcAndDealPeriodicSnapshotHealing

func (dot *Dot) CalcAndDealPeriodicSnapshotHealing(sim *Simulation, target *Unit, outcomeApplier OutcomeApplier) *SpellResult

func (*Dot) CalcSnapshotDamage

func (dot *Dot) CalcSnapshotDamage(sim *Simulation, target *Unit, outcomeApplier OutcomeApplier) *SpellResult

func (*Dot) CalcSnapshotHealing

func (dot *Dot) CalcSnapshotHealing(sim *Simulation, target *Unit, outcomeApplier OutcomeApplier) *SpellResult

func (*Dot) CalcTickPeriod

func (dot *Dot) CalcTickPeriod() time.Duration

Calculates the current tick period the dot would have based on the affects currently present

func (*Dot) CasterPeriodicHealingMultiplier

func (dot *Dot) CasterPeriodicHealingMultiplier() float64

func (*Dot) ChannelCanBeInterrupted added in v0.0.17

func (dot *Dot) ChannelCanBeInterrupted(sim *Simulation) bool

func (*Dot) CopyDotAndApply

func (dot *Dot) CopyDotAndApply(sim *Simulation, originaldot *Dot)

Copy's the original DoT's period and duration to the current DoT. This is only currently used for Mage's Impact DoT spreading and Enhancement's ImprovedLava Lash.

func (*Dot) DurationExtend added in v0.0.107

func (dot *Dot) DurationExtend(sim *Simulation, extendBy time.Duration)

This is the incredibly cursed way of extending DoT durations (for Moonfire / Sunfire / SWP (T15 2P) / VT (T15 2P)) Don't use unless you know what you're doing It extends the duration, immediately recalculates the next tick and then fits as many ticks into the rest of the aura duration as it can. This will cause aura duration and dot ticks to desync ingame, so the aura will fall off prematurely to what is shown.

Sometimes the game also decides to tick one last time anyway, even though the time since the last tick is absurdly low, though this isn't implemented until someone figures out the conditions.

func (*Dot) DurationExtendSnapshot

func (dot *Dot) DurationExtendSnapshot(sim *Simulation, extendBy time.Duration)

func (*Dot) ExpectedTickCount

func (dot *Dot) ExpectedTickCount() int32

func (*Dot) HastedTickCount

func (dot *Dot) HastedTickCount() int32

Returns the total amount of ticks with the snapshotted haste

func (*Dot) NextTickAt

func (dot *Dot) NextTickAt() time.Duration

func (*Dot) OutcomeExpectedSnapshotCrit added in v0.0.6

func (dot *Dot) OutcomeExpectedSnapshotCrit(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Dot) OutcomeMagicHitAndSnapshotCrit

func (dot *Dot) OutcomeMagicHitAndSnapshotCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Dot) OutcomeRangedHitAndCritSnapshot

func (dot *Dot) OutcomeRangedHitAndCritSnapshot(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Dot) OutcomeRangedHitAndCritSnapshotNoHitCounter

func (dot *Dot) OutcomeRangedHitAndCritSnapshotNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Dot) OutcomeSnapshotCrit

func (dot *Dot) OutcomeSnapshotCrit(sim *Simulation, result *SpellResult, _ *AttackTable)

func (*Dot) OutcomeTick

func (dot *Dot) OutcomeTick(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Dot) OutcomeTickHealingCrit

func (dot *Dot) OutcomeTickHealingCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Dot) OutcomeTickMagicCrit

func (dot *Dot) OutcomeTickMagicCrit(sim *Simulation, result *SpellResult, _ *AttackTable)

func (*Dot) OutcomeTickMagicCritNoHitCounter added in v0.0.141

func (dot *Dot) OutcomeTickMagicCritNoHitCounter(sim *Simulation, result *SpellResult, _ *AttackTable)

func (*Dot) OutcomeTickMagicHitAndCrit

func (dot *Dot) OutcomeTickMagicHitAndCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Dot) OutcomeTickPhysicalCrit

func (dot *Dot) OutcomeTickPhysicalCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Dot) OutcomeTickPhysicalHitAndCrit

func (dot *Dot) OutcomeTickPhysicalHitAndCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Dot) OutstandingDmg

func (dot *Dot) OutstandingDmg() float64

func (*Dot) RemainingTicks

func (dot *Dot) RemainingTicks() int32

func (*Dot) RestoreState

func (dot *Dot) RestoreState(state DotState, sim *Simulation)

func (*Dot) SaveState

func (dot *Dot) SaveState(sim *Simulation) DotState

func (*Dot) Snapshot

func (dot *Dot) Snapshot(target *Unit, baseDamage float64)

func (*Dot) SnapshotHeal

func (dot *Dot) SnapshotHeal(target *Unit, baseHealing float64)

func (*Dot) SnapshotPhysical

func (dot *Dot) SnapshotPhysical(target *Unit, baseDamage float64)

func (*Dot) TakeSnapshot

func (dot *Dot) TakeSnapshot(sim *Simulation, doRollover bool)

Takes a new snapshot of this Dot's effects.

In most cases this will be called automatically, and should only be called to force a new snapshot to be taken.

doRollover will apply previously snapshotted crit/%dmg instead of recalculating.

func (*Dot) TickCount

func (dot *Dot) TickCount() int32

func (*Dot) TickOnce

func (dot *Dot) TickOnce(sim *Simulation)

Forces an instant tick. Does not reset the tick timer or aura duration, the tick is simply an extra tick.

func (*Dot) TickPeriod

func (dot *Dot) TickPeriod() time.Duration

TickPeriod is how fast the snapshotted dot ticks.

func (*Dot) TimeUntilNextTick

func (dot *Dot) TimeUntilNextTick(sim *Simulation) time.Duration

type DotArray

type DotArray []*Dot

func (DotArray) Get

func (dots DotArray) Get(target *Unit) *Dot

type DotConfig

type DotConfig struct {
	// Optional, will default to the corresponding spell.
	Spell *Spell

	OnSnapshot OnSnapshot
	OnTick     OnTick

	Aura Aura

	TickLength    time.Duration // time between each tick
	NumberOfTicks int32         // number of ticks over the whole duration

	IsAOE                bool // Set to true for AOE dots (Blizzard, Hurricane, Consecrate, etc)
	SelfOnly             bool // Set to true to only create the self-hot.
	AffectedByCastSpeed  bool // tick length are shortened based on casting speed
	AffectedByRealHaste  bool // tick length are shortened based on real haste (melee/ranged but not spell)
	HasteReducesDuration bool // does not gain additional ticks after a certain haste threshold

	BonusCoefficient float64 // EffectBonusCoefficient in SpellEffect client DB table, "SP mod" on Wowhead (not necessarily shown there even if > 0)

	PeriodicDamageMultiplier float64 // Multiplier for periodic damage on top of the spell's damage multiplier
}

type DotReference added in v0.0.43

type DotReference struct {
	// contains filtered or unexported fields
}

func (*DotReference) Get added in v0.0.43

func (ar *DotReference) Get() *Dot

func (*DotReference) String added in v0.0.43

func (ar *DotReference) String() string

type DotState

type DotState struct {
	AuraState

	SnapshotBaseDamage         float64
	SnapshotAttackerMultiplier float64
	SnapshotCritChance         float64
	TicksRemaining             int32
	ExtraTicks                 int32
	TickPeriod                 time.Duration
	NextTickIn                 time.Duration
}

type DynamicDamageDoneByCaster

type DynamicDamageDoneByCaster func(sim *Simulation, spell *Spell, attackTable *AttackTable) float64

type DynamicDamageTakenModifier

type DynamicDamageTakenModifier func(sim *Simulation, spell *Spell, result *SpellResult, isPeriodic bool)

type DynamicHealingTakenModifier

type DynamicHealingTakenModifier func(sim *Simulation, spell *Spell, result *SpellResult)

type DynamicProc

type DynamicProc interface {
	Reset()
	Chance(sim *Simulation) float64
	Proc(sim *Simulation, label string) bool
}

func NewRPPMProc

func NewRPPMProc(character *Character, config RPPMConfig) DynamicProc

Create a new RPPM Proc with the given ppm (usually from the ProcsPerMinute record)

type DynamicProcManager

type DynamicProcManager struct {
	// contains filtered or unexported fields
}

func (*DynamicProcManager) Chance

func (dpm *DynamicProcManager) Chance(procMask ProcMask, sim *Simulation) float64

func (*DynamicProcManager) Proc

func (dpm *DynamicProcManager) Proc(sim *Simulation, procMask ProcMask, label string) bool

Returns whether the effect procced.

func (*DynamicProcManager) Reset

func (dpm *DynamicProcManager) Reset()

type DynamicThreatDoneByCaster

type DynamicThreatDoneByCaster DynamicDamageDoneByCaster

type Enchant

type Enchant struct {
	EffectID      int32 // Used by UI to apply effect to tooltip
	Stats         stats.Stats
	EnchantEffect *proto.ItemEffect
	Name          string         // Only needed for unit tests
	Type          proto.ItemType // Only needed for unit tests
}

func EnchantFromProto

func EnchantFromProto(pData *proto.SimEnchant) Enchant

func GetEnchantByEffectID

func GetEnchantByEffectID(effectID int32) *Enchant

type Encounter

type Encounter struct {
	Duration          time.Duration
	DurationVariation time.Duration
	AllTargets        []*Target
	ActiveTargets     []*Target
	AllTargetUnits    []*Unit
	ActiveTargetUnits []*Unit

	ExecuteProportion_20 float64
	ExecuteProportion_25 float64
	ExecuteProportion_35 float64
	ExecuteProportion_45 float64
	ExecuteProportion_90 float64

	EndFightAtHealth float64
	// DamageTaken is used to track health fights instead of duration fights.
	//  Once primary target has taken its health worth of damage, fight ends.
	DamageTaken float64
	// In health fight: set to true until we get something to base on
	DurationIsEstimate bool
	// contains filtered or unexported fields
}

func NewEncounter

func NewEncounter(options *proto.Encounter) Encounter

func (*Encounter) AOECapMultiplier

func (encounter *Encounter) AOECapMultiplier() float64

func (*Encounter) GetMetricsProto

func (encounter *Encounter) GetMetricsProto() *proto.EncounterMetrics

type EncounterCombo

type EncounterCombo struct {
	Label     string
	Encounter *proto.Encounter
}

func MakeDefaultEncounterCombos

func MakeDefaultEncounterCombos() []EncounterCombo

type EnergyBarOptions

type EnergyBarOptions struct {
	MaxComboPoints        int32
	MaxEnergy             float64
	UnitClass             proto.Class
	HasNoRegen            bool
	HasHasteRatingScaling bool
}

type EnergyCost

type EnergyCost struct {
	Refund            float64
	RefundMetrics     *ResourceMetrics
	ResourceMetrics   *ResourceMetrics
	ComboPointMetrics *ResourceMetrics
}

func (*EnergyCost) CostFailureReason

func (ec *EnergyCost) CostFailureReason(_ *Simulation, spell *Spell) string

func (*EnergyCost) IssueRefund

func (ec *EnergyCost) IssueRefund(sim *Simulation, spell *Spell)

func (*EnergyCost) MeetsRequirement

func (ec *EnergyCost) MeetsRequirement(_ *Simulation, spell *Spell) bool

func (*EnergyCost) SpendCost

func (ec *EnergyCost) SpendCost(sim *Simulation, spell *Spell)

type EnergyCostOptions

type EnergyCostOptions struct {
	Cost int32

	Refund        float64
	RefundMetrics *ResourceMetrics // Optional, will default to unit.EnergyRefundMetrics if not supplied.
}

type Environment

type Environment struct {
	State EnvironmentState

	// Whether stats are currently being measured. Used to disable some validation
	// checks which are otherwise helpful.
	MeasuringStats bool

	Raid      *Raid
	Encounter Encounter
	AllUnits  []*Unit

	BaseDuration      time.Duration // base duration
	DurationVariation time.Duration // variation per duration

	// Whether the current environment is simulating a Challenge Mode fight
	IsChallengeMode bool
	// contains filtered or unexported fields
}

func NewEnvironment

func NewEnvironment(raidProto *proto.Raid, encounterProto *proto.Encounter, runFakePrepull bool) (*Environment, *proto.RaidStats, *proto.EncounterStats)

func (*Environment) ActiveTargetCount added in v0.0.10

func (env *Environment) ActiveTargetCount() int32

func (*Environment) GetActiveTargetUnits added in v0.0.10

func (env *Environment) GetActiveTargetUnits() []*Unit

func (*Environment) GetAgentFromUnit

func (env *Environment) GetAgentFromUnit(unit *Unit) Agent

func (*Environment) GetMaxDuration

func (env *Environment) GetMaxDuration() time.Duration

The maximum possible duration for any iteration.

func (*Environment) GetTargetByIndex added in v0.0.10

func (env *Environment) GetTargetByIndex(index int32) *Target

func (*Environment) GetTargetUnitByIndex added in v0.0.10

func (env *Environment) GetTargetUnitByIndex(index int32) *Unit

func (*Environment) GetUnit

func (env *Environment) GetUnit(ref *proto.UnitReference, contextUnit *Unit) *Unit

func (*Environment) IsFinalized

func (env *Environment) IsFinalized() bool

func (*Environment) NextActiveTarget added in v0.0.10

func (env *Environment) NextActiveTarget(target *Unit) *Target

func (*Environment) NextActiveTargetUnit added in v0.0.10

func (env *Environment) NextActiveTargetUnit(target *Unit) *Unit

func (*Environment) PrepullStartTime

func (env *Environment) PrepullStartTime(sim *Simulation) time.Duration

func (*Environment) PreviousActiveTarget added in v0.0.43

func (env *Environment) PreviousActiveTarget(target *Unit) *Target

func (*Environment) PreviousActiveTargetUnit added in v0.0.43

func (env *Environment) PreviousActiveTargetUnit(target *Unit) *Unit

func (*Environment) RegisterPostFinalizeEffect

func (env *Environment) RegisterPostFinalizeEffect(postFinalizeEffect PostFinalizeEffect)

Registers a callback to this Character which will be invoked AFTER all Units are finalized.

func (*Environment) RegisterPreFinalizeEffect

func (env *Environment) RegisterPreFinalizeEffect(preFinalizeEffect PostFinalizeEffect)

Registers a callback to this Character which will be invoked BEFORE all Units are finalized, but after they are all initialized and have other effects applied.

func (*Environment) TotalTargetCount added in v0.0.10

func (env *Environment) TotalTargetCount() int32

func (*Environment) TriggerDelayedPetInheritance added in v0.0.6

func (env *Environment) TriggerDelayedPetInheritance(sim *Simulation, dynamicPets []*Pet, inheritanceFunc func(*Simulation, *Pet))

type EnvironmentState

type EnvironmentState int
const (
	Created EnvironmentState = iota
	Constructed
	Initialized
	Finalized
)

type EquipScalingManager

type EquipScalingManager struct {
	// contains filtered or unexported fields
}

type Equipment

type Equipment [NumItemSlots]Item

func NewEquipmentSet

func NewEquipmentSet(equipSpec EquipmentSpec) Equipment

func ProtoToEquipment

func ProtoToEquipment(es *proto.EquipmentSpec) Equipment

func (*Equipment) Back

func (equipment *Equipment) Back() *Item

func (*Equipment) Chest

func (equipment *Equipment) Chest() *Item

func (*Equipment) EquipEnchant

func (equipment *Equipment) EquipEnchant(enchant Enchant)

func (*Equipment) EquipItem

func (equipment *Equipment) EquipItem(item Item)

func (*Equipment) Feet

func (equipment *Equipment) Feet() *Item

func (*Equipment) Finger1

func (equipment *Equipment) Finger1() *Item

func (*Equipment) Finger2

func (equipment *Equipment) Finger2() *Item

func (*Equipment) GetItemBySlot

func (equipment *Equipment) GetItemBySlot(slot proto.ItemSlot) *Item

func (*Equipment) Hands

func (equipment *Equipment) Hands() *Item

func (*Equipment) Head

func (equipment *Equipment) Head() *Item

func (*Equipment) Legs

func (equipment *Equipment) Legs() *Item

func (*Equipment) MainHand

func (equipment *Equipment) MainHand() *Item

func (*Equipment) Neck

func (equipment *Equipment) Neck() *Item

func (*Equipment) OffHand

func (equipment *Equipment) OffHand() *Item

func (*Equipment) Ranged

func (equipment *Equipment) Ranged() *Item

func (*Equipment) Shoulder

func (equipment *Equipment) Shoulder() *Item

func (*Equipment) Stats

func (equipment *Equipment) Stats(spec proto.Spec) stats.Stats

func (*Equipment) ToEquipmentSpecProto

func (equipment *Equipment) ToEquipmentSpecProto() *proto.EquipmentSpec

func (*Equipment) Trinket1

func (equipment *Equipment) Trinket1() *Item

func (*Equipment) Trinket2

func (equipment *Equipment) Trinket2() *Item

func (*Equipment) Waist

func (equipment *Equipment) Waist() *Item

func (*Equipment) Wrist

func (equipment *Equipment) Wrist() *Item

type EquipmentSpec

type EquipmentSpec [NumItemSlots]ItemSpec

Structs used for looking up items/gems/enchants

func ProtoToEquipmentSpec

func ProtoToEquipmentSpec(es *proto.EquipmentSpec) EquipmentSpec

type ExclusiveCategory

type ExclusiveCategory struct {
	Name       string
	SingleAura bool // If true, only 1 aura in this category may be active at a time.
	// contains filtered or unexported fields
}

func (*ExclusiveCategory) AnyActive

func (ec *ExclusiveCategory) AnyActive() bool

func (*ExclusiveCategory) GetActiveAura

func (ec *ExclusiveCategory) GetActiveAura() *Aura

func (*ExclusiveCategory) GetActiveEffect

func (ec *ExclusiveCategory) GetActiveEffect() *ExclusiveEffect

func (*ExclusiveCategory) GetHighestPrioActiveEffect

func (ec *ExclusiveCategory) GetHighestPrioActiveEffect() *ExclusiveEffect

func (*ExclusiveCategory) SetActive

func (ec *ExclusiveCategory) SetActive(sim *Simulation, newActiveEffect *ExclusiveEffect)

type ExclusiveCategoryArray

type ExclusiveCategoryArray []*ExclusiveCategory

func (ExclusiveCategoryArray) Get

func (categories ExclusiveCategoryArray) Get(target *Unit) *ExclusiveCategory

type ExclusiveEffect

type ExclusiveEffect struct {
	Aura     *Aura
	Priority float64

	OnGain   func(*ExclusiveEffect, *Simulation)
	OnExpire func(*ExclusiveEffect, *Simulation)

	Category *ExclusiveCategory
	// contains filtered or unexported fields
}

An Exclusive effect is one which may not be active at the same time as other effects in the same category. For example, the armor reduction effects from Sunder Armor and Expose Armor are exclusive with each other.

Within each ExclusiveCategory, the ExclusiveEffect with the highest Priority AND isEnabled == true is the one whose effect is applied.

func PhysDamageReductionEffect

func PhysDamageReductionEffect(aura *Aura, dmgReduction float64) *ExclusiveEffect

func PhysDamageTakenEffect

func PhysDamageTakenEffect(aura *Aura, multiplier float64) *ExclusiveEffect

func RegisterPercentDamageModifierEffect

func RegisterPercentDamageModifierEffect(aura *Aura, percentDamageModifier float64) *ExclusiveEffect

func (*ExclusiveEffect) Activate

func (ee *ExclusiveEffect) Activate(sim *Simulation) bool

Returns whether the effect is active.

func (*ExclusiveEffect) Deactivate

func (ee *ExclusiveEffect) Deactivate(sim *Simulation)

func (*ExclusiveEffect) IsActive

func (ee *ExclusiveEffect) IsActive() bool

func (*ExclusiveEffect) SetPriority

func (ee *ExclusiveEffect) SetPriority(sim *Simulation, newPrio float64)

type ExclusiveEffectManager

type ExclusiveEffectManager struct {
	// contains filtered or unexported fields
}

func (*ExclusiveEffectManager) GetExclusiveEffectCategory

func (eem *ExclusiveEffectManager) GetExclusiveEffectCategory(categoryName string) *ExclusiveCategory

Returns a category with the given name. Creates a new category if one doesn't already exist.

type ExpectedDamageCalculator

type ExpectedDamageCalculator func(sim *Simulation, target *Unit, spell *Spell, useSnapshot bool) *SpellResult

type FocusCost

type FocusCost struct {
	Refund          float64
	RefundMetrics   *ResourceMetrics
	ResourceMetrics *ResourceMetrics
}

func (*FocusCost) CostFailureReason

func (ec *FocusCost) CostFailureReason(_ *Simulation, spell *Spell) string

func (*FocusCost) IssueRefund

func (ec *FocusCost) IssueRefund(sim *Simulation, spell *Spell)

func (*FocusCost) MeetsRequirement

func (ec *FocusCost) MeetsRequirement(_ *Simulation, spell *Spell) bool

func (*FocusCost) SpendCost

func (ec *FocusCost) SpendCost(sim *Simulation, spell *Spell)

type FocusCostOptions

type FocusCostOptions struct {
	Cost int32

	Refund        float64
	RefundMetrics *ResourceMetrics // Optional, will default to unit.FocusRefundMetrics if not supplied.
}

type GearSetCombo

type GearSetCombo struct {
	Label   string
	GearSet *proto.EquipmentSpec
}

func GetGearSet

func GetGearSet(dir string, file string) GearSetCombo

type Gem

type Gem struct {
	ID                      int32
	Name                    string
	Stats                   stats.Stats
	Color                   proto.GemColor
	DisabledInChallengeMode bool
}

func GemFromProto

func GemFromProto(pData *proto.SimGem) Gem

type GetAttackPowerValue

type GetAttackPowerValue func(spell *Spell) float64

type GetSpellPowerValue

type GetSpellPowerValue func(spell *Spell) float64

type GoRand

type GoRand struct {
	rand.Source64
}

func NewGoRand

func NewGoRand(seed uint64) *GoRand

wraps go's default source; will panic if it's not a Source64

func (GoRand) Next

func (g GoRand) Next() uint64

func (GoRand) NextFloat64

func (g GoRand) NextFloat64() float64

type Hand

type Hand bool
const MainHand Hand = true
const OffHand Hand = false

type Hardcast

type Hardcast struct {
	Expires    time.Duration
	ActionID   ActionID
	OnComplete func(*Simulation, *Unit)
	Target     *Unit
	CanMove    bool
}

type HitOutcome

type HitOutcome uint16

Possible outcomes of any hit/damage roll.

const (
	OutcomeEmpty HitOutcome = 0

	// These bits are set by the hit roll
	OutcomeMiss HitOutcome = 1 << iota
	OutcomeHit
	OutcomeDodge
	OutcomeGlance
	OutcomeParry
	OutcomeBlock

	// These bits are set by the crit and damage rolls.
	OutcomeCrit
	OutcomeCrush
)

Single-bit outcomes.

func (HitOutcome) Matches

func (ho HitOutcome) Matches(other HitOutcome) bool

Returns whether there is any overlap between the given masks.

func (HitOutcome) String

func (ho HitOutcome) String() string

type IndividualTestSuite

type IndividualTestSuite struct {
	Name string
	// contains filtered or unexported fields
}

func NewIndividualTestSuite

func NewIndividualTestSuite(suiteName string) *IndividualTestSuite

func (*IndividualTestSuite) Done

func (testSuite *IndividualTestSuite) Done(t *testing.T)

func (*IndividualTestSuite) TestCasts

func (testSuite *IndividualTestSuite) TestCasts(testName string, rsr *proto.RaidSimRequest)

func (*IndividualTestSuite) TestCharacterStats

func (testSuite *IndividualTestSuite) TestCharacterStats(testName string, csr *proto.ComputeStatsRequest)

func (*IndividualTestSuite) TestDPS

func (testSuite *IndividualTestSuite) TestDPS(testName string, rsr *proto.RaidSimRequest) *proto.RaidSimResult

func (*IndividualTestSuite) TestStatWeights

func (testSuite *IndividualTestSuite) TestStatWeights(testName string, swr *proto.StatWeightsRequest)

type Item

type Item struct {
	ID        int32
	Type      proto.ItemType
	ArmorType proto.ArmorType
	// Weapon Stats
	WeaponType       proto.WeaponType
	HandType         proto.HandType
	RangedWeaponType proto.RangedWeaponType
	WeaponDamageMin  float64
	WeaponDamageMax  float64
	SwingSpeed       float64

	Name    string
	Stats   stats.Stats // Stats applied to wearer
	Quality proto.ItemQuality
	SetName string // Empty string if not part of a set.
	SetID   int32  // 0 if not part of a set.

	GemSockets  []proto.GemColor
	SocketBonus stats.Stats

	// Modified for each instance of the item.
	RandomSuffix RandomSuffix
	Gems         []Gem
	Enchant      Enchant
	Tinker       Enchant
	Reforging    *ReforgeStat

	//Internal use
	TempEnchant    int32
	ScalingOptions map[int32]*proto.ScalingItemProperties
	RandPropPoints int32
	UpgradeStep    proto.ItemLevelState
	ItemEffect     *proto.ItemEffect
	ChallengeMode  bool
}

func GetItemByID

func GetItemByID(id int32) *Item

func ItemFromProto

func ItemFromProto(pData *proto.SimItem) Item

func NewItem

func NewItem(itemSpec ItemSpec) Item

func (*Item) GetEffectiveScalingOptions

func (item *Item) GetEffectiveScalingOptions() *proto.ScalingItemProperties

Returns the current scaling options for the item based on challenge mode and upgrade level

func (*Item) GetItemEffectRandomPropPoints

func (item *Item) GetItemEffectRandomPropPoints(state proto.ItemLevelState) float64

func (*Item) GetScalingState

func (item *Item) GetScalingState() proto.ItemLevelState

func (*Item) ToItemSpecProto

func (item *Item) ToItemSpecProto() *proto.ItemSpec

type ItemEffectRandPropPoints

type ItemEffectRandPropPoints struct {
	Ilvl           int32
	RandPropPoints int32
}

func ItemEffectRandPropPointsFromProto

func ItemEffectRandPropPointsFromProto(ieRpp *proto.ItemEffectRandPropPoints) ItemEffectRandPropPoints

ItemEffectRandPropPointsFromProto converts a protobuf ItemEffectRandPropPoints to a Go ItemEffectRandPropPoints

type ItemFilter

type ItemFilter struct {
	// If set to ClassUnknown, any class is fine.
	Class proto.Class

	ArmorType proto.ArmorType

	// Empty lists allows any value. Otherwise, item must match a value from the list.
	WeaponTypes       []proto.WeaponType
	HandTypes         []proto.HandType
	RangedWeaponTypes []proto.RangedWeaponType

	// Item IDs to ignore.
	IDBlacklist []int32

	// Effect IDs to ignore.
	EnchantBlacklist []int32
}

Returns all items that meet the given conditions.

func (*ItemFilter) FindAllEnchants

func (filter *ItemFilter) FindAllEnchants() []Enchant

func (*ItemFilter) FindAllItems

func (filter *ItemFilter) FindAllItems() []Item

func (*ItemFilter) FindAllMetaGems

func (filter *ItemFilter) FindAllMetaGems() []Gem

func (*ItemFilter) FindAllSets

func (filter *ItemFilter) FindAllSets() []*ItemSet

func (*ItemFilter) Matches

func (filter *ItemFilter) Matches(item Item, equipChecksOnly bool) bool

Returns whether the given item matches the conditions of this filter.

If equipChecksOnly is true, will only check conditions related to whether the item is equippable.

type ItemSet

type ItemSet struct {
	ID                      int32
	Name                    string
	AlternativeName         string
	DisabledInChallengeMode bool
	// Maps set piece requirement to an ApplyEffect function that will be called
	// before the Sim starts.
	//
	// The function should apply any benefits provided by the set bonus.
	Bonuses map[int32]ApplySetBonus

	// Optional field to override the DefaultItemSetSlots
	// For Example: The set contains of 2 weapons
	Slots []proto.ItemSlot
}

func NewItemSet

func NewItemSet(set ItemSet) *ItemSet

Registers a new ItemSet with item IDs populated.

func (ItemSet) Items

func (set ItemSet) Items() []Item

type ItemSpec

type ItemSpec struct {
	ID            int32
	RandomSuffix  int32
	Enchant       int32
	Tinker        int32
	Gems          []int32
	Reforging     int32
	UpgradeStep   proto.ItemLevelState
	ChallengeMode bool
}

type ItemStringSpec

type ItemStringSpec struct {
	Name    string
	Enchant string
	Tinker  string
	Gems    []string
}

Like ItemSpec, but uses names for reference instead of ID.

type ItemSwap

type ItemSwap struct {
	// contains filtered or unexported fields
}

func (*ItemSwap) AddTempEnchant added in v0.0.66

func (swap *ItemSwap) AddTempEnchant(enchantID int32, slot proto.ItemSlot, swapped bool)

Used by shaman imbues because itemswap is setup before Imbue spells registers

func (*ItemSwap) CouldHaveItemEquippedInSlot

func (swap *ItemSwap) CouldHaveItemEquippedInSlot(itemID int32, slot proto.ItemSlot) bool

func (*ItemSwap) EligibleSlotsForEffect

func (swap *ItemSwap) EligibleSlotsForEffect(effectID int32) []proto.ItemSlot

func (*ItemSwap) EligibleSlotsForGem added in v0.0.72

func (swap *ItemSwap) EligibleSlotsForGem(effectID int32) []proto.ItemSlot

func (*ItemSwap) EligibleSlotsForItem

func (swap *ItemSwap) EligibleSlotsForItem(itemID int32) []proto.ItemSlot

func (*ItemSwap) GetEquippedItemBySlot

func (swap *ItemSwap) GetEquippedItemBySlot(slot proto.ItemSlot) *Item

func (*ItemSwap) GetUnequippedItemBySlot

func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item

func (*ItemSwap) IsEnabled

func (swap *ItemSwap) IsEnabled() bool

func (*ItemSwap) IsSwapped

func (swap *ItemSwap) IsSwapped() bool

func (*ItemSwap) IsValidSwap

func (swap *ItemSwap) IsValidSwap(swapSet proto.APLActionItemSwap_SwapSet) bool

func (*ItemSwap) ProcessTinker

func (swap *ItemSwap) ProcessTinker(spell *Spell, slots []proto.ItemSlot)

Helper for handling Enchant On Use effects to set a 30s cd on the related spell.

func (*ItemSwap) RegisterActive

func (swap *ItemSwap) RegisterActive(itemID int32)

Helper for handling Item On Use effects to set a 30s cd on the related spell.

func (*ItemSwap) RegisterEnchantProc

func (swap *ItemSwap) RegisterEnchantProc(effectID int32, aura *Aura)

Helper for handling Enchant Effects that use the effectID to toggle the aura on and off

func (*ItemSwap) RegisterEnchantProcWithSlots

func (swap *ItemSwap) RegisterEnchantProcWithSlots(effectID int32, aura *Aura, slots []proto.ItemSlot)

func (*ItemSwap) RegisterProc

func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura)

Helper for handling Item Effects that use the itemID to toggle the aura on and off This will also get the eligible slots for the item

func (*ItemSwap) RegisterProcWithSlots

func (swap *ItemSwap) RegisterProcWithSlots(itemID int32, aura *Aura, slots []proto.ItemSlot)

Helper for handling Item Effects that use the itemID to toggle the aura on and off

func (*ItemSwap) RegisterWeaponEnchantBuff added in v0.0.88

func (swap *ItemSwap) RegisterWeaponEnchantBuff(buffAura *Aura, enchantID int32)

Helper for handling weapon enchant buffs that fall off when the weapon is swapped out.

func (*ItemSwap) SwapItems

func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap_SwapSet, isReset bool)

type ItemSwapProcConfig

type ItemSwapProcConfig struct {
	ItemID    int32
	EnchantId int32
	Aura      *Aura
	Slots     []proto.ItemSlot
}

type ItemSwapSetCombo

type ItemSwapSetCombo struct {
	Label    string
	ItemSwap *proto.ItemSwap
}

func GetItemSwapGearSet

func GetItemSwapGearSet(dir string, file string) ItemSwapSetCombo

type ItemSwapStats

type ItemSwapStats struct {
	// contains filtered or unexported fields
}

type ItemsTestGenerator

type ItemsTestGenerator struct {
	// Fields describing the base API request.
	Player     *proto.Player
	PartyBuffs *proto.PartyBuffs
	RaidBuffs  *proto.RaidBuffs
	Debuffs    *proto.Debuffs
	Encounter  *proto.Encounter
	SimOptions *proto.SimOptions
	IsHealer   bool
	IsTank     bool

	// Some fields are populated automatically.
	ItemFilter ItemFilter
	// contains filtered or unexported fields
}

func (*ItemsTestGenerator) GetTest

func (*ItemsTestGenerator) NumTests

func (generator *ItemsTestGenerator) NumTests() int

type LabeledAuraArrays

type LabeledAuraArrays map[string]AuraArray

func (LabeledAuraArrays) AnyActive

func (auraArrays LabeledAuraArrays) AnyActive(target *Unit) bool

func (LabeledAuraArrays) Append

func (auraArrays LabeledAuraArrays) Append(auras AuraArray) LabeledAuraArrays

type MajorCooldown

type MajorCooldown struct {
	// Spell that is cast when this MCD is activated.
	Spell *Spell

	// Associated buff aura that is activated when the above spell is cast.
	BuffAura *StatBuffAura

	// Cooldowns with higher priority get used first. This is important when some
	// cooldowns have a non-zero cast time. For example, Drums should be used
	// before Bloodlust.
	Priority int32

	// Internal category, used for filtering. For example, mages want to disable
	// all DPS cooldowns during their regen rotation.
	Type CooldownType

	// If False, the MCD will not be queued up before the GCD has fully expired.
	// This is desirable for auto-chaining multiple MCDs just before a GCD ability.
	AllowSpellQueueing bool

	// Whether the cooldown meets all optional conditions for activation. These
	// conditions will be ignored when the user specifies their own activation time.
	// This is for things like mana thresholds, which are optimizations for better
	// automatic timing.
	ShouldActivate CooldownActivationCondition
	// contains filtered or unexported fields
}

func (*MajorCooldown) Disable

func (mcd *MajorCooldown) Disable()

func (*MajorCooldown) Enable

func (mcd *MajorCooldown) Enable()

func (*MajorCooldown) GetTimings

func (mcd *MajorCooldown) GetTimings() []time.Duration

func (*MajorCooldown) IsEnabled

func (mcd *MajorCooldown) IsEnabled() bool

func (*MajorCooldown) IsReady

func (mcd *MajorCooldown) IsReady(sim *Simulation) bool

func (*MajorCooldown) ReadyAt

func (mcd *MajorCooldown) ReadyAt() time.Duration

func (*MajorCooldown) TimeToNextCast

func (mcd *MajorCooldown) TimeToNextCast(sim *Simulation) time.Duration

Roughly how long until the next cast will happen, accounting for both spell CD and user-specified timings.

func (*MajorCooldown) TimeToReady

func (mcd *MajorCooldown) TimeToReady(sim *Simulation) time.Duration

func (*MajorCooldown) TryActivate

func (mcd *MajorCooldown) TryActivate(sim *Simulation, character *Character) bool

Public version of TryActivate for manual activation by Agent code. Note that this version will work even if the MCD is disabled.

type ManaCost

type ManaCost struct {
	ResourceMetrics *ResourceMetrics
}

func (*ManaCost) CostFailureReason

func (mc *ManaCost) CostFailureReason(sim *Simulation, spell *Spell) string

func (*ManaCost) IssueRefund

func (mc *ManaCost) IssueRefund(_ *Simulation, _ *Spell)

func (*ManaCost) MeetsRequirement

func (mc *ManaCost) MeetsRequirement(sim *Simulation, spell *Spell) bool

func (*ManaCost) SpendCost

func (mc *ManaCost) SpendCost(sim *Simulation, spell *Spell)

type ManaCostOptions

type ManaCostOptions struct {
	BaseCostPercent float64 // The cost of the spell as a percentage (0-100) of the unit's base mana.
	FlatCost        int32   // Alternative to BaseCostPercent for giving a flat value.
	PercentModifier float64 // Will default to 1. PercentModifier stored as a float i.e. 40% reduction is (0.6 multiplier) to the base cost
}

type MeleeDamageCalculator

type MeleeDamageCalculator func(attackPower float64, bonusWeaponDamage float64) float64

type MovementAction

type MovementAction struct {
	PendingAction
	// contains filtered or unexported fields
}

func (*MovementAction) GetCurrentPosition

func (action *MovementAction) GetCurrentPosition(sim *Simulation) float64

type MovementCallback

type MovementCallback func(sim *Simulation, position float64, kind MovementUpdateType)

type MovementUpdateType

type MovementUpdateType byte

type OnApplyEffects

type OnApplyEffects func(aura *Aura, sim *Simulation, target *Unit, spell *Spell)

type OnCastComplete

type OnCastComplete func(aura *Aura, sim *Simulation, spell *Spell)

Callback for when a cast is finished, i.e. when the in-game castbar reaches full.

type OnDamageAbsorbedCallback

type OnDamageAbsorbedCallback func(sim *Simulation, aura *DamageAbsorptionAura, result *SpellResult, absorbedDamage float64)

type OnDoneIteration

type OnDoneIteration func(aura *Aura, sim *Simulation)

type OnEncounterStart added in v0.0.13

type OnEncounterStart func(aura *Aura, sim *Simulation)

type OnExpire

type OnExpire func(aura *Aura, sim *Simulation)

type OnFocusGain

type OnFocusGain func(*Simulation, float64)

type OnGain

type OnGain func(aura *Aura, sim *Simulation)

type OnGainCallback

type OnGainCallback func(sim *Simulation, gain float64, realGain float64, actionID ActionID)

type OnInit

type OnInit func(aura *Aura, sim *Simulation)

type OnItemSwap

type OnItemSwap func(*Simulation, proto.ItemSlot)

type OnMasteryStatChanged

type OnMasteryStatChanged func(sim *Simulation, oldMasteryRating float64, newMasteryRating float64)

type OnPeriodicDamage

type OnPeriodicDamage func(aura *Aura, sim *Simulation, spell *Spell, result *SpellResult)

OnPeriodicDamage is called when dots tick, after damage is calculated. Use it for proc effects or anything that comes from the final result of a tick.

type OnPetDisable

type OnPetDisable func(sim *Simulation)

type OnPetEnable

type OnPetEnable func(sim *Simulation)

type OnReset

type OnReset func(aura *Aura, sim *Simulation)

type OnRuneChange

type OnRuneChange func(sim *Simulation, changeType RuneChangeType, runeRegen []int8)

type OnRunicPowerGain

type OnRunicPowerGain func(sim *Simulation)

type OnSnapshot

type OnSnapshot func(sim *Simulation, target *Unit, dot *Dot, isRollover bool)

type OnSpeedChanged

type OnSpeedChanged func(oldSpeed float64, newSpeed float64)

type OnSpellHit

type OnSpellHit func(aura *Aura, sim *Simulation, spell *Spell, result *SpellResult)

Callback for after a spell hits the target and after damage is calculated. Use it for proc effects or anything that comes from the final result of the spell.

type OnSpendCallback

type OnSpendCallback func(sim *Simulation, amount float64, actionID ActionID)

type OnStacksChange

type OnStacksChange func(aura *Aura, sim *Simulation, oldStacks int32, newStacks int32)

type OnTemporaryStatsChange

type OnTemporaryStatsChange func(sim *Simulation, buffAura *Aura, statsChangeWithoutDeps stats.Stats)

type OnTick

type OnTick func(sim *Simulation, target *Unit, dot *Dot)

type OutcomeApplier

type OutcomeApplier func(sim *Simulation, result *SpellResult, attackTable *AttackTable)

This function should do 3 things:

  1. Set the Outcome of the hit effect.
  2. Update spell outcome metrics.
  3. Modify the damage if necessary.

type Party

type Party struct {
	Raid  *Raid
	Index int

	Players []Agent
	Pets    []PetAgent // Cached list of all the pets in the party.

	PlayersAndPets []Agent // Cached list of players + pets, concatenated.
	// contains filtered or unexported fields
}

func NewParty

func NewParty(raid *Raid, index int, partyConfig *proto.Party) *Party

func (*Party) AddStat

func (party *Party) AddStat(stat stats.Stat, amount float64)

func (*Party) AddStats

func (party *Party) AddStats(newStats stats.Stats)

func (*Party) GetMetrics

func (party *Party) GetMetrics() *proto.PartyMetrics

func (*Party) GetPartyBuffs

func (party *Party) GetPartyBuffs(basePartyBuffs *proto.PartyBuffs) *proto.PartyBuffs

func (*Party) IsFull

func (party *Party) IsFull() bool

func (*Party) Size

func (party *Party) Size() int

type PendingAction

type PendingAction struct {
	NextActionAt time.Duration
	Priority     ActionPriority

	// Action to perform (required).
	OnAction func(sim *Simulation)
	// Cleanup when the action is cancelled (optional).
	CleanUp func(sim *Simulation)
	// contains filtered or unexported fields
}

func NewDelayedAction

func NewDelayedAction(options DelayedActionOptions) *PendingAction

Use this only when your code requires persistent access to the returned *PendingAction pointer. For "fire and forget" delayed actions, use sim.GetConsumedPendingActionFromPool() instead, so that the PendingAction struct will be re-used rather than re-allocated on each call.

func NewPeriodicAction

func NewPeriodicAction(sim *Simulation, options PeriodicActionOptions) *PendingAction

func StartPeriodicAction

func StartPeriodicAction(sim *Simulation, options PeriodicActionOptions) *PendingAction

Convenience for immediately creating and starting a periodic action.

func (*PendingAction) Cancel

func (pa *PendingAction) Cancel(sim *Simulation)

func (*PendingAction) IsConsumed

func (pa *PendingAction) IsConsumed() bool

type PeriodicActionOptions

type PeriodicActionOptions struct {
	// How often the action should be performed.
	Period time.Duration

	// Number of times to perform the action before stopping.
	// 0 indicates a permanent periodic action.
	NumTicks int

	// Whether the first tick should happen immediately. If false, first tick will
	// wait for Period.
	TickImmediately bool

	Priority ActionPriority

	OnAction func(*Simulation)
	CleanUp  func(*Simulation)
}

type Pet

type Pet struct {
	Character

	Owner *Character

	OnPetEnable  OnPetEnable
	OnPetDisable OnPetDisable
	// contains filtered or unexported fields
}

Pet is an extension of Character, for any entity created by a player that can take actions on its own.

func NewPet

func NewPet(config PetConfig) Pet

func (*Pet) AddComboPoints

func (eb *Pet) AddComboPoints(sim *Simulation, pointsToAdd int32, target *Unit, metrics *ResourceMetrics)

func (*Pet) AddEnergy

func (eb *Pet) AddEnergy(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) AddFocus

func (fb *Pet) AddFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) AddMajorCooldown

func (mcdm *Pet) AddMajorCooldown(mcd MajorCooldown)

Registers a major cooldown to the Character, which will be automatically used when available.

func (*Pet) AddOwnerStats added in v0.0.6

func (pet *Pet) AddOwnerStats(sim *Simulation, addedStats stats.Stats)

Updates the stats for this pet in response to a stat change on the owner. addedStats is the amount of stats added to the owner (will be negative if the owner lost stats).

func (*Pet) AddPartyBuffs

func (pet *Pet) AddPartyBuffs(_ *proto.PartyBuffs)

func (*Pet) AddRage

func (rb *Pet) AddRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) AddRaidBuffs

func (pet *Pet) AddRaidBuffs(_ *proto.RaidBuffs)

func (*Pet) AddRunicPower

func (rp *Pet) AddRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) AddUnscaledRunicPower

func (rp *Pet) AddUnscaledRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) Advance

func (rp *Pet) Advance(sim *Simulation, newTime time.Duration)

func (*Pet) AllRunesSpent

func (rp *Pet) AllRunesSpent() bool

func (*Pet) AnyDepletedRunes

func (rp *Pet) AnyDepletedRunes() bool

func (*Pet) AnyRuneReadyAt

func (rp *Pet) AnyRuneReadyAt(sim *Simulation) time.Duration

func (*Pet) AnySpentRuneReadyAt

func (rp *Pet) AnySpentRuneReadyAt() time.Duration

AnySpentRuneReadyAt returns the next time that a rune will regenerate. It will be NeverExpires if there is no rune pending regeneration.

func (*Pet) ApplyTalents

func (pet *Pet) ApplyTalents()

func (*Pet) BloodDeathRuneBothReadyAt

func (rp *Pet) BloodDeathRuneBothReadyAt() time.Duration

func (*Pet) BloodRuneReadyAt

func (rp *Pet) BloodRuneReadyAt(sim *Simulation) time.Duration

BloodRuneReadyAt returns the earliest time a (possibly death-converted) blood rune is ready.

func (*Pet) ChangeStatInheritance

func (pet *Pet) ChangeStatInheritance(nonHitExpStatInheritance PetStatInheritance)

func (*Pet) ComboPoints

func (eb *Pet) ComboPoints() int32

func (*Pet) ConvertAndRegenBloodTapRune added in v0.0.1

func (rp *Pet) ConvertAndRegenBloodTapRune(sim *Simulation, spell *Spell, runeMetrics []*ResourceMetrics) bool

Blood tap prioritizes runes based on spec Blood prefers to regen B runes first, then the F/U rune with the highest CD if no blood runes are available. Frost prefers to regen U runes first, then the B/F rune with the highest CD if no other runes are available. Unholy prefers to regen a B/F rune with the highest CD first, then an U rune if no other runes are available.

func (*Pet) ConvertAndRegenPlagueLeechRunes added in v0.0.1

func (rp *Pet) ConvertAndRegenPlagueLeechRunes(sim *Simulation, spell *Spell, runeMetrics []*ResourceMetrics)

Plague leech prioritizes runes based on spec Unholy prefers to regen a pair of B/F runes first, then U if no other runes are available. Blood and Frost prefers to regen a pair of F/U runes first, then B if no other runes are available.

func (*Pet) ConvertFromDeath

func (rp *Pet) ConvertFromDeath(sim *Simulation, slot int8)

ConvertFromDeath reverts the rune to its original type.

func (*Pet) ConvertToDeath

func (rp *Pet) ConvertToDeath(sim *Simulation, slot int8, revertAt time.Duration)

ConvertToDeath converts the given slot to death and sets up the reversion conditions

func (*Pet) CurrentBloodOrDeathRunes

func (rp *Pet) CurrentBloodOrDeathRunes() int8

func (*Pet) CurrentBloodRunes

func (rp *Pet) CurrentBloodRunes() int8

func (*Pet) CurrentDeathRunes

func (rp *Pet) CurrentDeathRunes() int8

func (*Pet) CurrentEnergy

func (eb *Pet) CurrentEnergy() float64

func (*Pet) CurrentEnergyRegenMultiplier

func (eb *Pet) CurrentEnergyRegenMultiplier() float64

func (*Pet) CurrentFocus

func (fb *Pet) CurrentFocus() float64

func (*Pet) CurrentFrostOrDeathRunes

func (rp *Pet) CurrentFrostOrDeathRunes() int8

func (*Pet) CurrentFrostRunes

func (rp *Pet) CurrentFrostRunes() int8

func (*Pet) CurrentHealth

func (hb *Pet) CurrentHealth() float64

func (*Pet) CurrentHealthPercent

func (hb *Pet) CurrentHealthPercent() float64

func (*Pet) CurrentRage

func (rb *Pet) CurrentRage() float64

func (*Pet) CurrentRunicPower

func (rp *Pet) CurrentRunicPower() float64

func (*Pet) CurrentUnholyOrDeathRunes

func (rp *Pet) CurrentUnholyOrDeathRunes() int8

func (*Pet) CurrentUnholyRunes

func (rp *Pet) CurrentUnholyRunes() int8

func (*Pet) DeathRuneRegenAt

func (rp *Pet) DeathRuneRegenAt(slot int32) time.Duration

DeathRuneRegenAt returns the time the given death rune will regen at. If the rune is not death or not spent it returns NeverExpires.

func (*Pet) DeathRuneRevertAt

func (rp *Pet) DeathRuneRevertAt() time.Duration

DeathRuneRevertAt returns the next time that a death rune will revert. If there is no death rune that needs to revert it returns NeverExpires.

func (*Pet) DeathRunesInFU

func (rp *Pet) DeathRunesInFU() int8

func (*Pet) DebugString

func (rp *Pet) DebugString() string

func (*Pet) Disable

func (pet *Pet) Disable(sim *Simulation)

func (*Pet) DisableOnStart

func (pet *Pet) DisableOnStart()

func (*Pet) Enable

func (pet *Pet) Enable(sim *Simulation, petAgent PetAgent)

petAgent should be the PetAgent which embeds this Pet.

func (*Pet) EnableWithStartAttackDelay

func (pet *Pet) EnableWithStartAttackDelay(sim *Simulation, petAgent PetAgent, startAttackDelay time.Duration)

func (*Pet) EnableWithTimeout

func (pet *Pet) EnableWithTimeout(sim *Simulation, petAgent PetAgent, petDuration time.Duration)

Helper for enabling a pet that will expire after a certain duration.

func (*Pet) EndOOMEvent

func (mb *Pet) EndOOMEvent(sim *Simulation)

func (*Pet) EnergyRegenPerSecond

func (eb *Pet) EnergyRegenPerSecond() float64

func (*Pet) FocusRegenPerSecond

func (fb *Pet) FocusRegenPerSecond() float64

func (*Pet) FocusRegenPerTick

func (fb *Pet) FocusRegenPerTick() float64

func (*Pet) FrostRuneReadyAt

func (rp *Pet) FrostRuneReadyAt(sim *Simulation) time.Duration

func (*Pet) GainHealth

func (hb *Pet) GainHealth(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) GetActiveAuraWithTag

func (at *Pet) GetActiveAuraWithTag(tag string) *Aura

func (*Pet) GetAura

func (at *Pet) GetAura(label string) *Aura

func (*Pet) GetAuraByID

func (at *Pet) GetAuraByID(actionID ActionID) *Aura

func (*Pet) GetAuras

func (at *Pet) GetAuras() []*Aura

func (*Pet) GetAurasWithTag

func (at *Pet) GetAurasWithTag(tag string) []*Aura

func (*Pet) GetCharacter

func (pet *Pet) GetCharacter() *Character

Default implementations for some Agent functions which most Pets don't need.

func (*Pet) GetIcdAuraByID

func (at *Pet) GetIcdAuraByID(actionID ActionID) *Aura

func (*Pet) GetInheritedStats

func (pet *Pet) GetInheritedStats() stats.Stats

func (*Pet) GetInitialMajorCooldown

func (mcdm *Pet) GetInitialMajorCooldown(actionID ActionID) MajorCooldown

func (*Pet) GetMajorCooldown

func (mcdm *Pet) GetMajorCooldown(actionID ActionID) *MajorCooldown

func (*Pet) GetMajorCooldownIDs

func (mcdm *Pet) GetMajorCooldownIDs() []*proto.ActionID

func (*Pet) GetMajorCooldownIgnoreTag

func (mcdm *Pet) GetMajorCooldownIgnoreTag(actionID ActionID) *MajorCooldown

func (*Pet) GetMajorCooldowns

func (mcdm *Pet) GetMajorCooldowns() []*MajorCooldown

Returns all MCDs.

func (*Pet) GetMatchingStatBuffCooldownAuras added in v0.0.33

func (mcdm *Pet) GetMatchingStatBuffCooldownAuras(statTypesToMatch []stats.Stat) []*StatBuffAura

func (*Pet) GetMatchingStatBuffSpells

func (mcdm *Pet) GetMatchingStatBuffSpells(statTypesToMatch []stats.Stat) []*Spell

func (*Pet) GetRuneRegenMultiplier

func (rp *Pet) GetRuneRegenMultiplier() float64

func (*Pet) HasActiveAura

func (at *Pet) HasActiveAura(label string) bool

func (*Pet) HasActiveAuraWithTag

func (at *Pet) HasActiveAuraWithTag(tag string) bool

func (*Pet) HasActiveAuraWithTagExcludingAura

func (at *Pet) HasActiveAuraWithTagExcludingAura(tag string, excludeAura *Aura) bool

func (*Pet) HasAura

func (at *Pet) HasAura(label string) bool

func (*Pet) HasAuraWithTag

func (at *Pet) HasAuraWithTag(tag string) bool

func (*Pet) Initialize

func (pet *Pet) Initialize()

func (*Pet) IsGuardian

func (pet *Pet) IsGuardian() bool

func (*Pet) IsOOM

func (mb *Pet) IsOOM() bool

func (*Pet) IsReset

func (eb *Pet) IsReset(sim *Simulation) bool

func (*Pet) LeftBloodRuneReady

func (rp *Pet) LeftBloodRuneReady() bool

func (*Pet) MaxComboPoints

func (eb *Pet) MaxComboPoints() int32

func (*Pet) MaxHealth

func (hb *Pet) MaxHealth() float64

func (*Pet) MaximumEnergy

func (eb *Pet) MaximumEnergy() float64

func (*Pet) MaximumFocus

func (fb *Pet) MaximumFocus() float64

func (*Pet) MaximumRage

func (rb *Pet) MaximumRage() float64

func (*Pet) MaximumRunicPower

func (rp *Pet) MaximumRunicPower() float64

func (*Pet) MultiplyAutoAttackRageGen

func (rb *Pet) MultiplyAutoAttackRageGen(multiplier float64)

Call this within the OnGain and OnExpire callbacks for Battle Stance, Raging Whirlwind, etc.

func (*Pet) MultiplyEnergyRegenSpeed

func (eb *Pet) MultiplyEnergyRegenSpeed(sim *Simulation, multiplier float64)

func (*Pet) MultiplyFocusRegenSpeed

func (fb *Pet) MultiplyFocusRegenSpeed(sim *Simulation, multiplier float64)

func (*Pet) MultiplyRageGen added in v0.0.105

func (rb *Pet) MultiplyRageGen(multiplier float64)

func (*Pet) MultiplyRuneRegenSpeed

func (rp *Pet) MultiplyRuneRegenSpeed(sim *Simulation, multiplier float64)

func (*Pet) MultiplyRunicRegen

func (rp *Pet) MultiplyRunicRegen(multiply float64)

func (*Pet) NewBloodRuneMetrics added in v0.0.1

func (rp *Pet) NewBloodRuneMetrics(action ActionID) *ResourceMetrics

func (*Pet) NewDeathRuneMetrics added in v0.0.1

func (rp *Pet) NewDeathRuneMetrics(action ActionID) *ResourceMetrics

func (*Pet) NewFrostRuneMetrics added in v0.0.1

func (rp *Pet) NewFrostRuneMetrics(action ActionID) *ResourceMetrics

func (*Pet) NewRunicPowerMetrics added in v0.0.1

func (rp *Pet) NewRunicPowerMetrics(action ActionID) *ResourceMetrics

func (*Pet) NewUnholyRuneMetrics added in v0.0.1

func (rp *Pet) NewUnholyRuneMetrics(action ActionID) *ResourceMetrics

func (*Pet) NextBloodRuneReadyAt

func (rp *Pet) NextBloodRuneReadyAt(sim *Simulation) time.Duration

func (*Pet) NextEnergyTickAt

func (eb *Pet) NextEnergyTickAt() time.Duration

func (*Pet) NextFocusTickAt

func (fb *Pet) NextFocusTickAt() time.Duration

func (*Pet) NextFrostRuneReadyAt

func (rp *Pet) NextFrostRuneReadyAt(sim *Simulation) time.Duration

func (*Pet) NextUnholyRuneReadyAt

func (rp *Pet) NextUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Pet) NormalFrostRuneReadyAt

func (rp *Pet) NormalFrostRuneReadyAt(sim *Simulation) time.Duration

NormalFrostRuneReadyAt returns the earliest time a non-death frost rune is ready.

func (*Pet) NormalSpentBloodRuneReadyAt

func (rp *Pet) NormalSpentBloodRuneReadyAt(_ *Simulation) time.Duration

NormalSpentBloodRuneReadyAt returns the earliest time a spent non-death blood rune is ready.

func (*Pet) NormalUnholyRuneReadyAt

func (rp *Pet) NormalUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Pet) NumActiveAurasWithTag

func (at *Pet) NumActiveAurasWithTag(tag string) int32

func (*Pet) OnApplyEffects

func (at *Pet) OnApplyEffects(sim *Simulation, target *Unit, spell *Spell)

Invokes the OnApplyEffects event for all tracked Auras.

func (*Pet) OnCastComplete

func (at *Pet) OnCastComplete(sim *Simulation, spell *Spell)

Invokes the OnCastComplete event for all tracked Auras.

func (*Pet) OnEncounterStart added in v0.0.13

func (at *Pet) OnEncounterStart(sim *Simulation)

func (*Pet) OnGCDReady

func (pet *Pet) OnGCDReady(_ *Simulation)

func (*Pet) OnHealDealt

func (at *Pet) OnHealDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnHeal event for all tracked Auras.

func (*Pet) OnHealTaken

func (at *Pet) OnHealTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Pet) OnPeriodicDamageDealt

func (at *Pet) OnPeriodicDamageDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnPeriodicDamage

As a debuff when target is being hit by dot.
As a buff when caster's dots are ticking.

func (*Pet) OnPeriodicDamageTaken

func (at *Pet) OnPeriodicDamageTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Pet) OnPeriodicHealDealt

func (at *Pet) OnPeriodicHealDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnPeriodicHeal

As a debuff when target is being hit by dot.
As a buff when caster's dots are ticking.

func (*Pet) OnPeriodicHealTaken

func (at *Pet) OnPeriodicHealTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Pet) OnSpellHitDealt

func (at *Pet) OnSpellHitDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnSpellHit event for all tracked Auras.

func (*Pet) OnSpellHitTaken

func (at *Pet) OnSpellHitTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Pet) OptimalRuneCost

func (rp *Pet) OptimalRuneCost(cost RuneCost) RuneCost

func (*Pet) RegenAllFrostAndUnholyRunesAsDeath

func (rp *Pet) RegenAllFrostAndUnholyRunesAsDeath(sim *Simulation, deathRuneMetrics *ResourceMetrics)

func (*Pet) RegenAllRunes

func (rp *Pet) RegenAllRunes(sim *Simulation, metrics []*ResourceMetrics)

func (*Pet) RegenRunicEmpowermentRune added in v0.0.1

func (rp *Pet) RegenRunicEmpowermentRune(sim *Simulation, runeMetrics []*ResourceMetrics)

Runic Empowerment regens a randoom fully depleted rune

func (*Pet) RegisterResetEffect

func (at *Pet) RegisterResetEffect(resetEffect ResetEffect)

Registers a callback to this Character which will be invoked on every Sim reset.

func (*Pet) RemoveHealth

func (hb *Pet) RemoveHealth(sim *Simulation, amount float64)

func (*Pet) ResetComboPoints added in v0.0.13

func (eb *Pet) ResetComboPoints(sim *Simulation, comboPointsToKeep int32)

func (*Pet) ResetEnergyTick

func (eb *Pet) ResetEnergyTick(sim *Simulation)

Gives an immediate partial energy tick and restarts the tick timer.

func (*Pet) ResetFocusTick

func (fb *Pet) ResetFocusTick(sim *Simulation)

Gives an immediate partial Focus tick and restarts the tick timer.

func (*Pet) ResetRageBar added in v0.0.13

func (rb *Pet) ResetRageBar(sim *Simulation, rageToKeep float64)

func (*Pet) ResetRunicPowerBar added in v0.0.13

func (rp *Pet) ResetRunicPowerBar(sim *Simulation, runicPowerToKeep float64)

func (*Pet) RuneIsActive

func (rp *Pet) RuneIsActive(slot int8) bool

func (*Pet) RuneIsDeath

func (rp *Pet) RuneIsDeath(slot int8) bool

func (*Pet) RuneReadyAt

func (rp *Pet) RuneReadyAt(sim *Simulation, slot int8) time.Duration

func (*Pet) SetMaxComboPoints

func (eb *Pet) SetMaxComboPoints(maxComboPoints int32)

func (*Pet) SetPermanentDeathRunes

func (rp *Pet) SetPermanentDeathRunes(permanentDeaths []int8)

func (*Pet) SetRuneCd

func (rp *Pet) SetRuneCd(runeCd time.Duration)

func (*Pet) SetStartAttackDelay

func (pet *Pet) SetStartAttackDelay(startAttackDelay time.Duration)

func (*Pet) SetTimeoutAction added in v0.0.2

func (pet *Pet) SetTimeoutAction(sim *Simulation, duration time.Duration)

func (*Pet) SpendComboPoints

func (eb *Pet) SpendComboPoints(sim *Simulation, metrics *ResourceMetrics)

func (*Pet) SpendEnergy

func (eb *Pet) SpendEnergy(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) SpendFocus

func (fb *Pet) SpendFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) SpendPartialComboPoints

func (eb *Pet) SpendPartialComboPoints(sim *Simulation, pointsToSpend int32, metrics *ResourceMetrics)

func (*Pet) SpendRage

func (rb *Pet) SpendRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) SpendRuneReadyAt

func (rp *Pet) SpendRuneReadyAt(slot int8, spendAt time.Duration) time.Duration

func (*Pet) SpendRunicPower

func (rp *Pet) SpendRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) StartOOMEvent

func (mb *Pet) StartOOMEvent(sim *Simulation, requiredMana float64)

func (*Pet) TimeToTargetEnergy

func (eb *Pet) TimeToTargetEnergy(targetEnergy float64) time.Duration

func (*Pet) TimeToTargetFocus

func (fb *Pet) TimeToTargetFocus(targetFocus float64) time.Duration

func (*Pet) UnholyRuneReadyAt

func (rp *Pet) UnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Pet) UpdateMajorCooldowns

func (mcdm *Pet) UpdateMajorCooldowns()

This function should be called if the CD for a major cooldown changes outside of the TryActivate() call.

func (*Pet) UpdateMaxEnergy

func (eb *Pet) UpdateMaxEnergy(sim *Simulation, bonusEnergy float64, metrics *ResourceMetrics)

Used for dynamic updates to maximum Energy, such as from the Druid Primal Madness talent

func (*Pet) UpdateMaxHealth

func (hb *Pet) UpdateMaxHealth(sim *Simulation, bonusHealth float64, metrics *ResourceMetrics)

Used for dynamic updates to maximum health from "Last Stand" effects

type PetAgent

type PetAgent interface {
	Agent

	// The Pet controlled by this PetAgent.
	GetPet() *Pet
}

Extension of Agent interface, for Pets.

type PetConfig

type PetConfig struct {
	Name      string
	Owner     *Character
	BaseStats stats.Stats
	// Hit and Expertise are always inherited by combining the owners physical hit and expertise, then halving it
	// For casters this will automatically give spell hit cap at 7.5% physical hit and exp
	NonHitExpStatInheritance        PetStatInheritance
	EnabledOnStart                  bool
	IsGuardian                      bool
	HasDynamicMeleeSpeedInheritance bool
	HasDynamicCastSpeedInheritance  bool
	HasResourceRegenInheritance     bool
	StartsAtOwnerDistance           bool
}

type PetSpeedInheritance added in v0.0.4

type PetSpeedInheritance func(sim *Simulation, ownerSpeedMultiplier float64)

type PetStatInheritance

type PetStatInheritance func(ownerStats stats.Stats) stats.Stats

type PostFinalizeEffect

type PostFinalizeEffect func()

Callback for doing something after finalization.

type PowerBarType

type PowerBarType int
const (
	ManaBar PowerBarType = iota
	EnergyBar
	RageBar
	RunicPower
	FocusBar
)

type PrepullAction

type PrepullAction struct {
	DoAt APLValue

	Action func(*Simulation)
	// contains filtered or unexported fields
}

Callback for doing something on prepull.

type PresetTarget

type PresetTarget struct {
	// String in folder-structure format identifying a category for this unit, e.g. "Black Temple/Bosses".
	PathPrefix string

	Config *proto.Target

	AI AIFactory
}

func GetPresetTargetWithID

func GetPresetTargetWithID(id int32) *PresetTarget

func GetPresetTargetWithPath

func GetPresetTargetWithPath(path string) *PresetTarget

func (PresetTarget) Path

func (pt PresetTarget) Path() string

func (PresetTarget) ToProto

func (pt PresetTarget) ToProto() *proto.PresetTarget

type PresimOptions

type PresimOptions struct {
	// Called once before each presim round.
	//
	// Modify the player parameter to use whatever player options are desired
	// for the presim.
	SetPresimPlayerOptions func(player *proto.Player)

	// Called once after each presim round to provide the results.
	//
	// Should return true if this Agent is done running presims, and false otherwise.
	OnPresimResult func(presimResult *proto.UnitMetrics, iterations int32, duration time.Duration) bool
}

Controls the presim behavior for 1 Agent.

type Presimmer

type Presimmer interface {
	GetPresimOptions(*proto.Player) *PresimOptions
}

A presim is a full simulation run with multiple iterations, as a preparation step for testing out settings before starting the recorded iterations.

To use this, just implement this interface on your Agent.

If you don't know what this is, you probably don't need it.

type ProcExtraCondition

type ProcExtraCondition func(sim *Simulation, spell *Spell, result *SpellResult) bool

type ProcHandler

type ProcHandler func(sim *Simulation, spell *Spell, result *SpellResult)

type ProcMask

type ProcMask uint32
const (
	// Default value is invalid, to force authors to think about proc masks.
	ProcMaskUnknown ProcMask = 0

	ProcMaskEmpty ProcMask = 1 << iota
	ProcMaskMeleeMHAuto
	ProcMaskMeleeOHAuto
	ProcMaskMeleeMHSpecial
	ProcMaskMeleeOHSpecial
	ProcMaskRangedAuto
	ProcMaskRangedSpecial
	ProcMaskSpellDamage
	ProcMaskSpellHealing
	ProcMaskSpellProc       // Special mask for Spell procs that can trigger things (Can be used together with damage proc mask or alone)
	ProcMaskMeleeProc       // Special mask for Melee procs that can trigger things (Can be used together with damage proc mask or alone)
	ProcMaskRangedProc      // Special mask for Ranged procs that can trigger things (Can be used together with damage proc mask or alone)
	ProcMaskSpellDamageProc // Mask for procs triggering from spell damage procs like FT weapon and rogue poisons

	ProcMaskLast
)

Single-bit masks. These don't need to match Blizzard's values.

func (ProcMask) Matches

func (pm ProcMask) Matches(other ProcMask) bool

Returns whether there is any overlap between the given masks.

func (ProcMask) String

func (i ProcMask) String() string

type ProcTrigger

type ProcTrigger struct {
	Name               string
	ActionID           ActionID
	MetricsActionID    ActionID
	Duration           time.Duration
	Callback           AuraCallback
	ProcMask           ProcMask
	ProcMaskExclude    ProcMask
	SpellFlags         SpellFlag
	SpellFlagsExclude  SpellFlag
	Outcome            HitOutcome
	RequireDamageDealt bool
	ProcChance         float64
	DPM                *DynamicProcManager
	ICD                time.Duration
	Handler            ProcHandler
	TriggerImmediately bool // If false (default), the handler will be called one spell batch window later for improved realism.
	ClassSpellMask     int64
	ExtraCondition     ProcExtraCondition
}

type QueuedSpell

type QueuedSpell struct {

	// Stores the time at which QueueSpell() was called to ensure that only one spell can be queued up per timestep
	QueueInitiatedAt time.Duration
	// contains filtered or unexported fields
}

func (*QueuedSpell) Cancel

func (qs *QueuedSpell) Cancel(sim *Simulation)

Models the use of /cqs macros to change which spell should be cast at the last minute

func (*QueuedSpell) InitiateQueue

func (qs *QueuedSpell) InitiateQueue(sim *Simulation, spell *Spell, target *Unit, executeAt time.Duration)

type RPPMConfig

type RPPMConfig struct {
	PPM         float64
	Coefficient float64
	Ilvl        int32
	Mods        []rppmMod
}

func RppmConfigFromProcEffectProto

func RppmConfigFromProcEffectProto(effect *proto.ProcEffect) RPPMConfig

func (RPPMConfig) WithApproximateIlvlMod

func (config RPPMConfig) WithApproximateIlvlMod(coefficient float64, baseIlvl int32) RPPMConfig

Attach an approximate Ilvl scaling to the RPPM config The proc chance will be multiplied by 1.00936^(ilvlDiff)

func (RPPMConfig) WithClassMod

func (config RPPMConfig) WithClassMod(coefficient float64, classMask int) RPPMConfig

Attach a class specific modifier to the RPPM config 1 - Warrior, 2 - Paladin, 4 - Hunter, 8 - Rogue, 16 - Priest, 32 - DK 64 - Shaman, 128 - Mage, 256 - Warlock, 512 - Monk, 1024 - Druid It multiplies the actual proc chance by 1 + coefficient

func (RPPMConfig) WithCritMod

func (config RPPMConfig) WithCritMod() RPPMConfig

Attach a crit mod to the RPPM config

func (RPPMConfig) WithHasteMod

func (config RPPMConfig) WithHasteMod() RPPMConfig

Attach a haste mod to the RPPM config It uses the highest haste value that does not include effects like Slice and Dice It multiplies the actual proc chance by 1 + haste%

func (RPPMConfig) WithSpecMod

func (config RPPMConfig) WithSpecMod(coefficient float64, spec proto.Spec) RPPMConfig

Attaches a spec mod to the RPPM config It multiplies the actual proc chance by 1 + coefficient

type RPPMProc

type RPPMProc struct {
	// contains filtered or unexported fields
}

func (*RPPMProc) Chance

func (proc *RPPMProc) Chance(sim *Simulation) float64

func (*RPPMProc) Proc

func (proc *RPPMProc) Proc(sim *Simulation, label string) bool

func (*RPPMProc) Reset

func (proc *RPPMProc) Reset()

type RageBarOptions

type RageBarOptions struct {
	BaseRageMultiplier float64
	MaxRage            float64
}

type RageCost

type RageCost struct {
	Refund          float64
	RefundMetrics   *ResourceMetrics
	ResourceMetrics *ResourceMetrics
}

func (*RageCost) CostFailureReason

func (rc *RageCost) CostFailureReason(sim *Simulation, spell *Spell) string

func (*RageCost) IssueRefund

func (rc *RageCost) IssueRefund(sim *Simulation, spell *Spell)

func (*RageCost) MeetsRequirement

func (rc *RageCost) MeetsRequirement(_ *Simulation, spell *Spell) bool

func (*RageCost) SpendCost

func (rc *RageCost) SpendCost(sim *Simulation, spell *Spell)

type RageCostOptions

type RageCostOptions struct {
	Cost int32

	Refund        float64
	RefundMetrics *ResourceMetrics // Optional, will default to unit.RageRefundMetrics if not supplied.
}

type Raid

type Raid struct {
	Parties []*Party

	AllPlayerUnits   []*Unit // Cached list of all Players in the raid.
	AllUnits         []*Unit // Cached list of all Units (players and pets) in the raid.
	NumTargetDummies int     // Number of player units that are dummy targets for heals.
	// contains filtered or unexported fields
}

func NewRaid

func NewRaid(raidConfig *proto.Raid) *Raid

Makes a new raid.

func (*Raid) AddStats

func (raid *Raid) AddStats(s stats.Stats)

func (*Raid) GetActiveAllyUnits

func (raid *Raid) GetActiveAllyUnits() []*Unit

func (*Raid) GetActiveUnits

func (raid *Raid) GetActiveUnits() []*Unit

func (*Raid) GetFirstEmptyRaidIndex

func (raid *Raid) GetFirstEmptyRaidIndex() (*Party, int)

Returns (party, index within party)

func (*Raid) GetFirstNPlayersOrPets

func (raid *Raid) GetFirstNPlayersOrPets(n int32) []*Unit

func (*Raid) GetFirstTargetDummy

func (raid *Raid) GetFirstTargetDummy() *TargetDummy

func (*Raid) GetLowestHealthAllyUnit

func (raid *Raid) GetLowestHealthAllyUnit() *Unit

func (*Raid) GetMetrics

func (raid *Raid) GetMetrics() *proto.RaidMetrics

func (*Raid) GetPlayerFromUnit

func (raid *Raid) GetPlayerFromUnit(unit *Unit) Agent

func (*Raid) GetPlayerFromUnitIndex

func (raid *Raid) GetPlayerFromUnitIndex(unitIndex int32) Agent

func (*Raid) GetPlayersOfClass

func (raid *Raid) GetPlayersOfClass(class proto.Class) []Agent

func (*Raid) GetRaidBuffs

func (raid *Raid) GetRaidBuffs(baseRaidBuffs *proto.RaidBuffs) *proto.RaidBuffs

func (*Raid) GetTargetDummies

func (raid *Raid) GetTargetDummies() []*TargetDummy

func (*Raid) Size

func (raid *Raid) Size() int

type Rand

type Rand interface {
	Next() uint64
	NextFloat64() float64
	Seed(int64)

	GetSeed() int64

	rand.Source64
}

implementing Source or Source64 is possible, but adds too much overhead

type RandomSuffix

type RandomSuffix struct {
	ID    int32
	Name  string
	Stats stats.Stats
}

func RandomSuffixFromProto

func RandomSuffixFromProto(pData *proto.ItemRandomSuffix) RandomSuffix

type ReforgeStat

type ReforgeStat struct {
	ID         int32
	FromStat   proto.Stat
	ToStat     proto.Stat
	Multiplier float64
}

func ReforgeStatFromProto

func ReforgeStatFromProto(protoStat *proto.ReforgeStat) ReforgeStat

ReforgeStatFromProto converts a protobuf ReforgeStat to a Go ReforgeStat

type ReplaceMHSwing

type ReplaceMHSwing func(sim *Simulation, mhSwingSpell *Spell) *Spell

ReplaceMHSwing is called right before a main hand auto attack fires. It must never return nil, but either a replacement spell or the passed in regular mhSwingSpell. This allows for abilities that convert a white attack into a yellow attack.

type ResetEffect

type ResetEffect func(*Simulation)

Callback for doing something on reset.

type ResetTestResult

type ResetTestResult struct {
	BaseDps   float64
	BaseHps   float64
	BaseTps   float64
	BaseDtps  float64
	SplitDps  float64
	SplitHps  float64
	SplitTps  float64
	SplitDtps float64
}

type ResourceCostImpl

type ResourceCostImpl interface {
	// Whether the Unit associated with the spell meets the resource cost
	// requirements to cast the spell.
	MeetsRequirement(*Simulation, *Spell) bool

	// Returns a message for when the cast fails due to lack of resources.
	CostFailureReason(*Simulation, *Spell) string

	// Subtracts the resources used from a cast from the Unit.
	SpendCost(*Simulation, *Spell)

	// Space for handling refund mechanics. Not all spells provide refunds.
	IssueRefund(*Simulation, *Spell)
}

Handles computing the cost of spells and checking whether the Unit meets them.

type ResourceKey

type ResourceKey struct {
	ActionID ActionID
	Type     proto.ResourceType
}

type ResourceMetrics

type ResourceMetrics struct {
	ActionID ActionID
	Type     proto.ResourceType

	Events     int32
	Gain       float64
	ActualGain float64

	EventsFromPreviousIterations     int32
	ActualGainFromPreviousIterations float64
}

func (*ResourceMetrics) ActualGainForCurrentIteration

func (resourceMetrics *ResourceMetrics) ActualGainForCurrentIteration() float64

func (*ResourceMetrics) AddEvent

func (resourceMetrics *ResourceMetrics) AddEvent(gain float64, actualGain float64)

func (*ResourceMetrics) EventsForCurrentIteration

func (resourceMetrics *ResourceMetrics) EventsForCurrentIteration() int32

func (*ResourceMetrics) ToProto

func (resourceMetrics *ResourceMetrics) ToProto() *proto.ResourceMetrics

type RotationCastsTestGenerator

type RotationCastsTestGenerator struct {
	SpecOptions []SpecOptionsCombo
	PartyBuffs  *proto.PartyBuffs
	RaidBuffs   *proto.RaidBuffs
	Debuffs     *proto.Debuffs
	Player      *proto.Player
	Encounter   *proto.Encounter
	SimOptions  *proto.SimOptions
}

func (*RotationCastsTestGenerator) GetTest

func (*RotationCastsTestGenerator) NumTests

func (generator *RotationCastsTestGenerator) NumTests() int

type RotationCombo

type RotationCombo struct {
	Label    string
	Rotation *proto.APLRotation
}

func GetAplRotation

func GetAplRotation(dir string, file string) RotationCombo

type RuneChangeType

type RuneChangeType int32
const (
	None             RuneChangeType = 0
	SpendRune        RuneChangeType = 1
	GainRune         RuneChangeType = 2
	ConvertToDeath   RuneChangeType = 4
	ConvertFromDeath RuneChangeType = 8
)

func (RuneChangeType) Matches

func (r RuneChangeType) Matches(other RuneChangeType) bool

type RuneCost

type RuneCost int32

RuneCost's bit layout is: <16r.4d.4u.4f.4b>. Each part is just a count now (0..15 for runes).

func NewRuneCost

func NewRuneCost(rp int16, blood, frost, unholy, death int8) RuneCost

func (RuneCost) Blood

func (rc RuneCost) Blood() int8

func (RuneCost) Death

func (rc RuneCost) Death() int8

func (RuneCost) Frost

func (rc RuneCost) Frost() int8

func (RuneCost) HasRune

func (rc RuneCost) HasRune() bool

HasRune returns if this cost includes a rune portion.

func (RuneCost) RunicPower

func (rc RuneCost) RunicPower() int16

func (RuneCost) String

func (rc RuneCost) String() string

func (RuneCost) Unholy

func (rc RuneCost) Unholy() int8

type RuneCostImpl

type RuneCostImpl struct {
	BloodRuneCost  int8
	FrostRuneCost  int8
	UnholyRuneCost int8
	DeathRuneCost  int8
	RunicPowerCost float64
	RunicPowerGain float64
	Refundable     bool
	RefundCost     float64
	// contains filtered or unexported fields
}

func (*RuneCostImpl) CostFailureReason

func (rc *RuneCostImpl) CostFailureReason(_ *Simulation, _ *Spell) string

func (*RuneCostImpl) GetConfig

func (rc *RuneCostImpl) GetConfig() RuneCostOptions

func (*RuneCostImpl) IssueRefund

func (rc *RuneCostImpl) IssueRefund(_ *Simulation, _ *Spell)

func (*RuneCostImpl) MeetsRequirement

func (rc *RuneCostImpl) MeetsRequirement(_ *Simulation, spell *Spell) bool

func (*RuneCostImpl) SpendCost

func (rc *RuneCostImpl) SpendCost(sim *Simulation, spell *Spell)

type RuneCostOptions

type RuneCostOptions struct {
	BloodRuneCost  int8
	FrostRuneCost  int8
	UnholyRuneCost int8
	DeathRuneCost  int8
	RunicPowerCost float64
	RunicPowerGain float64
	Refundable     bool
	RefundCost     float64
}

type RuneMeta

type RuneMeta struct {
	// contains filtered or unexported fields
}

type SecondaryResourceBar

type SecondaryResourceBar interface {
	CanSpend(limit float64) bool                                       // Check whether the current resource is available or not
	Spend(sim *Simulation, amount float64, action ActionID)            // Spend the specified amount of resource
	SpendUpTo(sim *Simulation, limit float64, action ActionID) float64 // Spends as much resource as possible up to the speciefied limit; Returns the amount of resource spent
	Gain(sim *Simulation, amount float64, action ActionID)             // Gain the amount specified from the action
	Reset(sim *Simulation)                                             // Resets the current resource bar
	ResetBarTo(sim *Simulation, resourcesToKeep float64)               // Resets the current resource bar to the specified value
	Value() float64                                                    // Returns the current amount of resource
	RegisterOnGain(callback OnGainCallback)                            // Registers a callback that will be called. Gain = amount gained, realGain = actual amount gained due to caps
	RegisterOnSpend(callback OnSpendCallback)                          // Registers a callback that will be called when the resource was spend
}

type SecondaryResourceConfig

type SecondaryResourceConfig struct {
	Type    proto.SecondaryResourceType // The type of resource the bar tracks
	Max     float64                     // The maximum amount the bar tracks
	Default float64                     // The default value this bar should be initialized with
}

type SetBonus

type SetBonus struct {
	// Name of the set.
	Name string

	// Number of pieces required for this bonus.
	NumPieces int32

	// Function for applying the effects of this set bonus.
	BonusEffect ApplySetBonus

	// Optional field to override the DefaultItemSetSlots
	// For Example: The set contains of 2 weapons
	Slots []proto.ItemSlot
}

type SetBonusCollection

type SetBonusCollection []SetBonus

func (SetBonusCollection) ContainsBonus

func (collection SetBonusCollection) ContainsBonus(setName string, count int32) bool

type SettingsCombos

type SettingsCombos struct {
	Class             proto.Class
	Races             []proto.Race
	GearSets          []GearSetCombo
	TalentSets        []TalentsCombo
	SpecOptions       []SpecOptionsCombo
	Rotations         []RotationCombo
	Buffs             []BuffsCombo
	Encounters        []EncounterCombo
	ItemSwapSets      []ItemSwapSetCombo
	SimOptions        *proto.SimOptions
	IsHealer          bool
	IsTank            bool
	StartingDistances []float64
	Cooldowns         *proto.Cooldowns
}

func (*SettingsCombos) GetTest

func (*SettingsCombos) NumTests

func (combos *SettingsCombos) NumTests() int

type Shield

type Shield struct {
	Spell *Spell

	// Embed Aura so we can use IsActive/Refresh/etc directly.
	*Aura
}

Rerpresents an absorption effect, e.g. Power Word: Shield.

func (*Shield) Apply

func (shield *Shield) Apply(sim *Simulation, shieldAmount float64)

type ShieldArray

type ShieldArray []*Shield

func (ShieldArray) Get

func (shields ShieldArray) Get(target *Unit) *Shield

type ShieldConfig

type ShieldConfig struct {
	SelfOnly bool // Set to true to only create the self-shield.

	Spell *Spell

	Aura
}

type ShieldShouldApplyCondition

type ShieldShouldApplyCondition func(sim *Simulation, spell *Spell, result *SpellResult, isPeriodic bool) bool

type ShieldStrengthCalculator

type ShieldStrengthCalculator func(unit *Unit) float64

type Simulation

type Simulation struct {
	*Environment

	Options *proto.SimOptions

	CurrentTime time.Duration // duration that has elapsed in the sim since starting
	Duration    time.Duration // Duration of current iteration
	NeedsInput  bool          // Sim is in interactive mode and needs input

	ProgressReport func(*proto.ProgressMetrics)
	Signals        simsignals.Signals

	Log func(string, ...interface{})
	// contains filtered or unexported fields
}

func NewSim

func NewSim(rsr *proto.RaidSimRequest, signals simsignals.Signals) *Simulation

func (*Simulation) AddPendingAction

func (sim *Simulation) AddPendingAction(pa *PendingAction)

func (*Simulation) AddTask

func (sim *Simulation) AddTask(task Task)

func (*Simulation) Cleanup

func (sim *Simulation) Cleanup()

func (*Simulation) DisableTargetUnit added in v0.0.10

func (sim *Simulation) DisableTargetUnit(targetUnit *Unit, expireAuras bool)

func (*Simulation) EnableTargetUnit added in v0.0.10

func (sim *Simulation) EnableTargetUnit(targetUnit *Unit)

func (*Simulation) GetConsumedPendingActionFromPool added in v0.0.4

func (sim *Simulation) GetConsumedPendingActionFromPool() *PendingAction

Use this for any "fire and forget" delayed actions where your code does not require persistent access to the returned *PendingAction pointer. This helper avoids unnecessary re-allocations of the PendingAction struct for improved code performance, but offers no guarantees on the long-term state of the underlying struct, which will be re-used once consumed.

func (*Simulation) GetRemainingDuration

func (sim *Simulation) GetRemainingDuration() time.Duration

func (*Simulation) GetRemainingDurationPercent

func (sim *Simulation) GetRemainingDurationPercent() float64

Returns the percentage of time remaining in the current iteration, as a value from 0-1.

func (*Simulation) IsExecutePhase20

func (sim *Simulation) IsExecutePhase20() bool

func (*Simulation) IsExecutePhase25

func (sim *Simulation) IsExecutePhase25() bool

func (*Simulation) IsExecutePhase35

func (sim *Simulation) IsExecutePhase35() bool

func (*Simulation) IsExecutePhase45

func (sim *Simulation) IsExecutePhase45() bool

func (*Simulation) IsExecutePhase90

func (sim *Simulation) IsExecutePhase90() bool

func (*Simulation) PrePull

func (sim *Simulation) PrePull()

func (*Simulation) Proc

func (sim *Simulation) Proc(p float64, label string) bool

func (*Simulation) RandomExpFloat

func (sim *Simulation) RandomExpFloat(label string) float64

func (*Simulation) RandomFloat

func (sim *Simulation) RandomFloat(label string) float64

Returns a random float64 between 0.0 (inclusive) and 1.0 (exclusive).

In tests, although we can set the initial seed, test results are still very sensitive to the exact order of RandomFloat() calls. To mitigate this, when testing we use a separate rand object for each RandomFloat callsite, distinguished by the label string.

func (*Simulation) RegisterExecutePhaseCallback

func (sim *Simulation) RegisterExecutePhaseCallback(callback func(sim *Simulation, isExecute int32))

func (*Simulation) RemoveTask

func (sim *Simulation) RemoveTask(task Task)

func (*Simulation) RescheduleTask

func (sim *Simulation) RescheduleTask(taskTime time.Duration)

func (*Simulation) Reseed

func (sim *Simulation) Reseed(seed int64)

func (*Simulation) Reset

func (sim *Simulation) Reset()

func (*Simulation) Roll

func (sim *Simulation) Roll(min float64, max float64) float64

Shorthand for commonly-used RNG behavior. Returns a random number between min and max.

func (*Simulation) RollWithLabel

func (sim *Simulation) RollWithLabel(min float64, max float64, label string) float64

func (*Simulation) Step

func (sim *Simulation) Step() bool

type SingleCharacterStatsTestGenerator

type SingleCharacterStatsTestGenerator struct {
	Name    string
	Request *proto.ComputeStatsRequest
}

func (*SingleCharacterStatsTestGenerator) GetTest

func (*SingleCharacterStatsTestGenerator) NumTests

func (generator *SingleCharacterStatsTestGenerator) NumTests() int

type SingleDpsTestGenerator

type SingleDpsTestGenerator struct {
	Name    string
	Request *proto.RaidSimRequest
}

func (*SingleDpsTestGenerator) GetTest

func (*SingleDpsTestGenerator) NumTests

func (generator *SingleDpsTestGenerator) NumTests() int

type SingleStatWeightsTestGenerator

type SingleStatWeightsTestGenerator struct {
	Name    string
	Request *proto.StatWeightsRequest
}

func (*SingleStatWeightsTestGenerator) GetTest

func (*SingleStatWeightsTestGenerator) NumTests

func (generator *SingleStatWeightsTestGenerator) NumTests() int

type SpecOptionsCombo

type SpecOptionsCombo struct {
	Label       string
	SpecOptions interface{}
}

type SpecSetter

type SpecSetter func(*proto.Player, interface{})

type Spell

type Spell struct {
	// ID for this spell.
	ActionID

	// The unit who will perform this spell.
	Unit *Unit

	// Fire, Frost, Shadow, etc.
	SpellSchool SpellSchool
	SchoolIndex stats.SchoolIndex

	// Controls which effects can proc from this spell.
	ProcMask ProcMask

	// Flags
	Flags SpellFlag

	// The specific class spell id
	// should be a unique bit
	ClassSpellMask int64

	// Speed in yards/second. Spell missile speeds can be found in the game data.
	// Example: https://wow.tools/dbc/?dbc=spellmisc&build=3.4.0.44996
	MissileSpeed float64

	ResourceMetrics *ResourceMetrics

	Cost               *SpellCost // Cost for the spell.
	DefaultCast        Cast       // Default cast parameters with all static effects applied.
	CD                 Cooldown
	SharedCD           Cooldown
	IgnoreHaste        bool
	ExtraCastCondition CanCastCondition

	// Optional range constraints. If supplied, these are used to modify the ExtraCastCondition above to additionally check for DistanceFromTarget.
	MinRange   float64
	MaxRange   float64
	MaxCharges int // Maximum amount of charges the spell can have

	RechargeTime time.Duration

	SpellMetrics []SpellMetrics

	// Performs the actions of this spell.
	ApplyEffects ApplySpellResults

	// The current or most recent cast data.
	CurCast Cast

	BonusHitPercent          float64
	BonusCritPercent         float64
	BonusSpellPower          float64
	BonusExpertiseRating     float64
	CastTimeMultiplier       float64
	CdMultiplier             float64
	DamageMultiplier         float64
	DamageMultiplierAdditive float64
	CritMultiplier           float64
	CritMultiplierAdditive   float64 // Additive critical damage bonus

	BonusCoefficient float64 // EffectBonusCoefficient in SpellEffect client DB table, "SP mod" on Wowhead (not necessarily shown there even if > 0)

	// Multiplier for all threat generated by this effect.
	ThreatMultiplier float64

	// Adds a fixed amount of threat to this spell, before multipliers.
	FlatThreatBonus float64

	// Per-target auras that are related to this spell, usually buffs or debuffs applied by the spell.
	RelatedAuraArrays LabeledAuraArrays
	RelatedDotSpell   *Spell
	RelatedSelfBuff   *Aura
	// contains filtered or unexported fields
}

func (*Spell) AOEDot

func (spell *Spell) AOEDot() *Dot

func (*Spell) AOEHot

func (spell *Spell) AOEHot() *Dot

func (*Spell) AnyDotsActive added in v0.0.10

func (spell *Spell) AnyDotsActive(sim *Simulation) bool

func (*Spell) ApplyAOEThreat

func (spell *Spell) ApplyAOEThreat(threatAmount float64)

func (*Spell) ApplyAOEThreatIgnoreMultipliers

func (spell *Spell) ApplyAOEThreatIgnoreMultipliers(threatAmount float64)

func (*Spell) ApplyAllDots added in v0.0.10

func (spell *Spell) ApplyAllDots(sim *Simulation)

func (*Spell) ApplyPostOutcomeDamageModifiers

func (spell *Spell) ApplyPostOutcomeDamageModifiers(sim *Simulation, result *SpellResult, isPeriodic bool)

func (*Spell) ApplyPostOutcomeHealingModifiers

func (spell *Spell) ApplyPostOutcomeHealingModifiers(sim *Simulation, result *SpellResult)

func (*Spell) AttackerDamageMultiplier

func (spell *Spell) AttackerDamageMultiplier(attackTable *AttackTable, isDot bool) float64

Returns the combined attacker modifiers.

func (*Spell) BloodRuneMetrics

func (spell *Spell) BloodRuneMetrics() *ResourceMetrics

func (*Spell) BonusDamage

func (spell *Spell) BonusDamage() float64

func (*Spell) CalcAndDealAoeDamage added in v0.0.10

func (spell *Spell) CalcAndDealAoeDamage(sim *Simulation, baseDamage float64, outcomeApplier OutcomeApplier) SpellResultSlice

func (*Spell) CalcAndDealAoeDamageWithVariance added in v0.0.10

func (spell *Spell) CalcAndDealAoeDamageWithVariance(sim *Simulation, outcomeApplier OutcomeApplier, baseDamageCalculator BaseDamageCalculator) SpellResultSlice

func (*Spell) CalcAndDealCleaveDamage added in v0.0.10

func (spell *Spell) CalcAndDealCleaveDamage(sim *Simulation, firstTarget *Unit, maxTargets int32, baseDamage float64, outcomeApplier OutcomeApplier) SpellResultSlice

func (*Spell) CalcAndDealCleaveDamageWithVariance added in v0.0.10

func (spell *Spell) CalcAndDealCleaveDamageWithVariance(sim *Simulation, firstTarget *Unit, maxTargets int32, outcomeApplier OutcomeApplier, baseDamageCalculator BaseDamageCalculator) SpellResultSlice

func (*Spell) CalcAndDealDamage

func (spell *Spell) CalcAndDealDamage(sim *Simulation, target *Unit, baseDamage float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcAndDealHealing

func (spell *Spell) CalcAndDealHealing(sim *Simulation, target *Unit, baseHealing float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcAndDealOutcome

func (spell *Spell) CalcAndDealOutcome(sim *Simulation, target *Unit, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcAndDealPeriodicAoeDamage added in v0.0.10

func (spell *Spell) CalcAndDealPeriodicAoeDamage(sim *Simulation, baseDamage float64, outcomeApplier OutcomeApplier) SpellResultSlice

func (*Spell) CalcAndDealPeriodicDamage

func (spell *Spell) CalcAndDealPeriodicDamage(sim *Simulation, target *Unit, baseDamage float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcAndDealPeriodicHealing

func (spell *Spell) CalcAndDealPeriodicHealing(sim *Simulation, target *Unit, baseHealing float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcAoeDamage added in v0.0.10

func (spell *Spell) CalcAoeDamage(sim *Simulation, baseDamage float64, outcomeApplier OutcomeApplier) SpellResultSlice

Use CalcAoeDamage + DealBatchedAoeDamage instead of CalcAndDealAoeDamage in situations where you want to block procs on early targets from influencing the damage calculation on later targets.

func (*Spell) CalcAoeDamageWithVariance added in v0.0.10

func (spell *Spell) CalcAoeDamageWithVariance(sim *Simulation, outcomeApplier OutcomeApplier, baseDamageCalculator BaseDamageCalculator) SpellResultSlice

func (*Spell) CalcCleaveDamage added in v0.0.10

func (spell *Spell) CalcCleaveDamage(sim *Simulation, firstTarget *Unit, maxTargets int32, baseDamage float64, outcomeApplier OutcomeApplier) SpellResultSlice

func (*Spell) CalcCleaveDamageWithVariance added in v0.0.10

func (spell *Spell) CalcCleaveDamageWithVariance(sim *Simulation, firstTarget *Unit, maxTargets int32, outcomeApplier OutcomeApplier, baseDamageCalculator BaseDamageCalculator) SpellResultSlice

func (*Spell) CalcDamage

func (spell *Spell) CalcDamage(sim *Simulation, target *Unit, baseDamage float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcHealing

func (spell *Spell) CalcHealing(sim *Simulation, target *Unit, baseHealing float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcOutcome

func (spell *Spell) CalcOutcome(sim *Simulation, target *Unit, outcomeApplier OutcomeApplier) *SpellResult

For spells that do no damage but still have a hit/miss check.

func (*Spell) CalcPeriodicAoeDamage added in v0.0.10

func (spell *Spell) CalcPeriodicAoeDamage(sim *Simulation, baseDamage float64, outcomeApplier OutcomeApplier) SpellResultSlice

func (*Spell) CalcPeriodicDamage

func (spell *Spell) CalcPeriodicDamage(sim *Simulation, target *Unit, baseDamage float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcPeriodicHealing

func (spell *Spell) CalcPeriodicHealing(sim *Simulation, target *Unit, baseHealing float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CanCast

func (spell *Spell) CanCast(sim *Simulation, target *Unit) bool

Returns whether a call to Cast() would be successful, without actually doing a cast.

func (*Spell) CanCastDuringChannel added in v0.0.17

func (spell *Spell) CanCastDuringChannel(sim *Simulation) bool

func (*Spell) CanCastOrQueue

func (spell *Spell) CanCastOrQueue(sim *Simulation, target *Unit) bool

Helper function for APL checks to prevent infinite loops

func (*Spell) CanCompleteCast added in v0.0.88

func (spell *Spell) CanCompleteCast(sim *Simulation, target *Unit, logCastFailure bool) bool

Returns whether the spell being cast can be completed. Example: Metamorphosis drains 4 Demonic Fury every second. This means at the end of the cast you could end up not meeting the casting requirements.

func (*Spell) CanQueue

func (spell *Spell) CanQueue(sim *Simulation, target *Unit) bool

Returns whether the spell could be queued by the player at the current time using the game's spell queueing functionality. Assumes the maximum spell queue window of 400ms that the game allows.

func (*Spell) Cast

func (spell *Spell) Cast(sim *Simulation, target *Unit) bool

func (*Spell) CastOnAllOtherTargets added in v0.0.10

func (spell *Spell) CastOnAllOtherTargets(sim *Simulation, mainTarget *Unit)

func (*Spell) CastOrQueue

func (spell *Spell) CastOrQueue(sim *Simulation, target *Unit)

func (*Spell) CastTime

func (spell *Spell) CastTime() time.Duration

Time until the cast is finished (ignoring GCD)

func (*Spell) CasterHealingMultiplier

func (spell *Spell) CasterHealingMultiplier() float64

func (*Spell) CloneResult added in v0.0.146

func (spell *Spell) CloneResult(result *SpellResult) *SpellResult

func (*Spell) ComboPointMetrics

func (spell *Spell) ComboPointMetrics() *ResourceMetrics

func (*Spell) ConsumeCharge

func (spell *Spell) ConsumeCharge(sim *Simulation)

func (*Spell) CritDamageMultiplier

func (spell *Spell) CritDamageMultiplier() float64

func (*Spell) CurCPM

func (spell *Spell) CurCPM(sim *Simulation) float64

Current casts per minute

func (*Spell) CurDamagePerCast

func (spell *Spell) CurDamagePerCast() float64

Metrics for the current iteration

func (*Spell) CurDot

func (spell *Spell) CurDot() *Dot

func (*Spell) CurHot

func (spell *Spell) CurHot() *Dot

func (*Spell) DealBatchedAoeDamage added in v0.0.10

func (spell *Spell) DealBatchedAoeDamage(sim *Simulation)

func (*Spell) DealBatchedPeriodicDamage added in v0.0.10

func (spell *Spell) DealBatchedPeriodicDamage(sim *Simulation)

func (*Spell) DealDamage

func (spell *Spell) DealDamage(sim *Simulation, result *SpellResult)

func (*Spell) DealHealing

func (spell *Spell) DealHealing(sim *Simulation, result *SpellResult)

func (*Spell) DealOutcome

func (spell *Spell) DealOutcome(sim *Simulation, result *SpellResult)

func (*Spell) DealPeriodicDamage

func (spell *Spell) DealPeriodicDamage(sim *Simulation, result *SpellResult)

func (*Spell) DealPeriodicHealing

func (spell *Spell) DealPeriodicHealing(sim *Simulation, result *SpellResult)

func (*Spell) DeathRuneMetrics

func (spell *Spell) DeathRuneMetrics() *ResourceMetrics

func (*Spell) DisposeResult

func (spell *Spell) DisposeResult(result *SpellResult)

func (*Spell) DodgeSuppression

func (spell *Spell) DodgeSuppression() float64

func (*Spell) Dot

func (spell *Spell) Dot(target *Unit) *Dot

func (*Spell) EffectiveCastTime

func (spell *Spell) EffectiveCastTime() time.Duration

Time until either the cast is finished or GCD is ready again, whichever is longer

func (*Spell) EnergyMetrics

func (spell *Spell) EnergyMetrics() *ResourceMetrics

func (*Spell) ExpectedInitialDamage

func (spell *Spell) ExpectedInitialDamage(sim *Simulation, target *Unit) float64

func (*Spell) ExpectedTickDamage

func (spell *Spell) ExpectedTickDamage(sim *Simulation, target *Unit) float64

func (*Spell) ExpectedTickDamageFromCurrentSnapshot

func (spell *Spell) ExpectedTickDamageFromCurrentSnapshot(sim *Simulation, target *Unit) float64

func (*Spell) FrostRuneMetrics

func (spell *Spell) FrostRuneMetrics() *ResourceMetrics

func (*Spell) GetMetricSplitCount

func (spell *Spell) GetMetricSplitCount() int

func (*Spell) GetNumCharges

func (spell *Spell) GetNumCharges() int

func (*Spell) GetPhysicalMissChance

func (spell *Spell) GetPhysicalMissChance(attackTable *AttackTable) float64

func (*Spell) HealingCritChance

func (spell *Spell) HealingCritChance() float64

func (*Spell) HealingCritCheck

func (spell *Spell) HealingCritCheck(sim *Simulation) bool

func (*Spell) HealingPower

func (spell *Spell) HealingPower(target *Unit) float64

func (*Spell) HealthMetrics

func (spell *Spell) HealthMetrics(target *Unit) *ResourceMetrics

func (*Spell) Hot

func (spell *Spell) Hot(target *Unit) *Dot

func (*Spell) IsMH

func (spell *Spell) IsMH() bool

Returns whether this hit effect is associated with the main-hand weapon.

func (*Spell) IsMelee

func (spell *Spell) IsMelee() bool

Returns whether this hit effect is associated with either melee weapon.

func (*Spell) IsOH

func (spell *Spell) IsOH() bool

Returns whether this hit effect is associated with the off-hand weapon.

func (*Spell) IsRanged

func (spell *Spell) IsRanged() bool

Returns whether this hit effect is associated with a ranged weapon.

func (*Spell) IsReady

func (spell *Spell) IsReady(sim *Simulation) bool

func (*Spell) IssueRefund

func (spell *Spell) IssueRefund(sim *Simulation)

func (*Spell) MagicCritCheck

func (spell *Spell) MagicCritCheck(sim *Simulation, target *Unit) bool

func (*Spell) MagicHitCheck

func (spell *Spell) MagicHitCheck(sim *Simulation, attackTable *AttackTable) bool

func (*Spell) Matches

func (spell *Spell) Matches(mask int64) bool

Returns true if the given mask matches the spell mask

func (*Spell) MeleeAttackPower

func (spell *Spell) MeleeAttackPower() float64

func (*Spell) NewResult

func (spell *Spell) NewResult(target *Unit) *SpellResult

func (*Spell) NextChargeIn

func (spell *Spell) NextChargeIn(sim *Simulation) time.Duration

Calculates the time until the next charge is available. Will return 0 if no recharge is in progress

func (*Spell) OutcomeAlwaysHit

func (spell *Spell) OutcomeAlwaysHit(sim *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeAlwaysHitNoHitCounter

func (spell *Spell) OutcomeAlwaysHitNoHitCounter(_ *Simulation, result *SpellResult, _ *AttackTable)

Hit without Hits++ counter

func (*Spell) OutcomeAlwaysMiss

func (spell *Spell) OutcomeAlwaysMiss(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeEnemyMeleeWhite

func (spell *Spell) OutcomeEnemyMeleeWhite(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeEnemyMeleeWhiteNoHitCounter

func (spell *Spell) OutcomeEnemyMeleeWhiteNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeExpectedMagicAlwaysHit

func (spell *Spell) OutcomeExpectedMagicAlwaysHit(_ *Simulation, _ *SpellResult, _ *AttackTable)

func (*Spell) OutcomeExpectedMagicCrit

func (spell *Spell) OutcomeExpectedMagicCrit(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeExpectedMagicHit

func (spell *Spell) OutcomeExpectedMagicHit(_ *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeExpectedMagicHitAndCrit

func (spell *Spell) OutcomeExpectedMagicHitAndCrit(_ *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeExpectedMeleeWeaponSpecialHitAndCrit

func (spell *Spell) OutcomeExpectedMeleeWeaponSpecialHitAndCrit(_ *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeExpectedMeleeWhite

func (spell *Spell) OutcomeExpectedMeleeWhite(_ *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeExpectedPhysicalCrit added in v0.0.6

func (spell *Spell) OutcomeExpectedPhysicalCrit(_ *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeExpectedTick

func (spell *Spell) OutcomeExpectedTick(_ *Simulation, _ *SpellResult, _ *AttackTable)

func (*Spell) OutcomeHealing

func (spell *Spell) OutcomeHealing(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeHealingCrit

func (spell *Spell) OutcomeHealingCrit(sim *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeHealingCritNoHitCounter

func (spell *Spell) OutcomeHealingCritNoHitCounter(sim *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeHealingNoHitCounter

func (spell *Spell) OutcomeHealingNoHitCounter(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeMagicCrit

func (spell *Spell) OutcomeMagicCrit(sim *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeMagicCritNoHitCounter

func (spell *Spell) OutcomeMagicCritNoHitCounter(sim *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeMagicHit

func (spell *Spell) OutcomeMagicHit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMagicHitAndCrit

func (spell *Spell) OutcomeMagicHitAndCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMagicHitAndCritNoHitCounter

func (spell *Spell) OutcomeMagicHitAndCritNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMagicHitNoHitCounter

func (spell *Spell) OutcomeMagicHitNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialBlockAndCrit

func (spell *Spell) OutcomeMeleeSpecialBlockAndCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialBlockAndCritNoHitCounter

func (spell *Spell) OutcomeMeleeSpecialBlockAndCritNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialCritOnly

func (spell *Spell) OutcomeMeleeSpecialCritOnly(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialCritOnlyNoHitCounter

func (spell *Spell) OutcomeMeleeSpecialCritOnlyNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialHit

func (spell *Spell) OutcomeMeleeSpecialHit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialHitAndCrit

func (spell *Spell) OutcomeMeleeSpecialHitAndCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialHitAndCritNoHitCounter

func (spell *Spell) OutcomeMeleeSpecialHitAndCritNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialHitNoHitCounter

func (spell *Spell) OutcomeMeleeSpecialHitNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialNoBlockDodgeParry

func (spell *Spell) OutcomeMeleeSpecialNoBlockDodgeParry(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialNoBlockDodgeParryNoCrit

func (spell *Spell) OutcomeMeleeSpecialNoBlockDodgeParryNoCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialNoBlockDodgeParryNoCritNoHitCounter

func (spell *Spell) OutcomeMeleeSpecialNoBlockDodgeParryNoCritNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialNoBlockDodgeParryNoHitCounter

func (spell *Spell) OutcomeMeleeSpecialNoBlockDodgeParryNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeWeaponSpecialHitAndCrit

func (spell *Spell) OutcomeMeleeWeaponSpecialHitAndCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeWeaponSpecialHitAndCritNoHitCounter

func (spell *Spell) OutcomeMeleeWeaponSpecialHitAndCritNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeWeaponSpecialNoCrit

func (spell *Spell) OutcomeMeleeWeaponSpecialNoCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeWeaponSpecialNoCritNoHitCounter

func (spell *Spell) OutcomeMeleeWeaponSpecialNoCritNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeWeaponSpecialNoParry

func (spell *Spell) OutcomeMeleeWeaponSpecialNoParry(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeWeaponSpecialNoParryNoHitCounter

func (spell *Spell) OutcomeMeleeWeaponSpecialNoParryNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeWhite

func (spell *Spell) OutcomeMeleeWhite(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeWhiteNoGlance

func (spell *Spell) OutcomeMeleeWhiteNoGlance(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeWhiteNoHitCounter

func (spell *Spell) OutcomeMeleeWhiteNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeRangedCritOnly

func (spell *Spell) OutcomeRangedCritOnly(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeRangedCritOnlyNoHitCounter

func (spell *Spell) OutcomeRangedCritOnlyNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeRangedHit

func (spell *Spell) OutcomeRangedHit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeRangedHitAndCrit

func (spell *Spell) OutcomeRangedHitAndCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeRangedHitAndCritNoBlock

func (spell *Spell) OutcomeRangedHitAndCritNoBlock(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeRangedHitAndCritNoBlockNoHitCounter

func (spell *Spell) OutcomeRangedHitAndCritNoBlockNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeRangedHitAndCritNoHitCounter

func (spell *Spell) OutcomeRangedHitAndCritNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeRangedHitNoHitCounter

func (spell *Spell) OutcomeRangedHitNoHitCounter(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeTickMagicHit

func (spell *Spell) OutcomeTickMagicHit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeTickMagicHitAndCrit

func (spell *Spell) OutcomeTickMagicHitAndCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) ParrySuppression

func (spell *Spell) ParrySuppression(attackTable *AttackTable) float64

MoP reworked Parry. Rather than being innately ~2x Dodge chance, expertise now applies to Dodge first (down to 0), and then Parry. The base chance for Dodge/Parry are both 7.5%, assuming a +3 target. The 7.5% Dodge chance must be fully suppressed before Parry will go down. This makes the effect of each point of Expertise linear when attacking from the front

func (*Spell) PhysicalCritChance

func (spell *Spell) PhysicalCritChance(attackTable *AttackTable) float64

func (*Spell) PhysicalCritCheck

func (spell *Spell) PhysicalCritCheck(sim *Simulation, attackTable *AttackTable) bool

func (*Spell) PhysicalHitChance

func (spell *Spell) PhysicalHitChance(attackTable *AttackTable) float64

func (*Spell) PhysicalHitCheck

func (spell *Spell) PhysicalHitCheck(sim *Simulation, attackTable *AttackTable) bool

func (*Spell) Proc

func (spell *Spell) Proc(sim *Simulation, target *Unit)

Procs a spell, circumventing all checks, cooldowns, gcd's and so on Simply logging the cast and applying the effect Can be used for spells that proc off other spells and are the same spell id

func (*Spell) RageMetrics

func (spell *Spell) RageMetrics() *ResourceMetrics

func (*Spell) RangedAttackPower

func (spell *Spell) RangedAttackPower() float64

func (*Spell) ReadyAt

func (spell *Spell) ReadyAt() time.Duration

func (*Spell) RefreshCharge

func (spell *Spell) RefreshCharge(sim *Simulation)

Refreshes a charge of the spell Can be called if the spell has max charges

func (*Spell) RegisterTravelTimeCallback added in v0.0.102

func (spell *Spell) RegisterTravelTimeCallback(sim *Simulation, travelTime time.Duration, callback func(*Simulation))

RegisterTravelTimeCallback is used when there is a need for custom timing on NextActionAt otherwise use WaitTravelTime

func (*Spell) RuneCostImpl

func (spell *Spell) RuneCostImpl() *RuneCostImpl

func (*Spell) RunicPowerMetrics

func (spell *Spell) RunicPowerMetrics() *ResourceMetrics

func (*Spell) SelfHot

func (spell *Spell) SelfHot() *Dot

func (*Spell) SelfShield

func (spell *Spell) SelfShield() *Shield

func (*Spell) SetMetricsSplit

func (spell *Spell) SetMetricsSplit(splitIdx int32)

func (*Spell) Shield

func (spell *Spell) Shield(target *Unit) *Shield

func (*Spell) ShouldRefreshExclusiveEffects

func (spell *Spell) ShouldRefreshExclusiveEffects(sim *Simulation, target *Unit, refreshWindow time.Duration) bool

func (*Spell) SkipCastAndApplyEffects

func (spell *Spell) SkipCastAndApplyEffects(sim *Simulation, target *Unit)

Skips the actual cast and applies spell effects immediately.

func (*Spell) SpellChanceToMiss

func (spell *Spell) SpellChanceToMiss(attackTable *AttackTable) float64

func (*Spell) SpellCritChance

func (spell *Spell) SpellCritChance(target *Unit) float64

func (*Spell) SpellHitChance

func (spell *Spell) SpellHitChance(target *Unit) float64

func (*Spell) SpellPower

func (spell *Spell) SpellPower() float64

func (*Spell) SpendCostAndConvertFrostOrUnholyRune

func (spell *Spell) SpendCostAndConvertFrostOrUnholyRune(sim *Simulation, landed bool)

func (*Spell) SpendRefundableCost

func (spell *Spell) SpendRefundableCost(sim *Simulation, result *SpellResult)

func (*Spell) SpendRefundableCostAndConvertBloodOrFrostRune

func (spell *Spell) SpendRefundableCostAndConvertBloodOrFrostRune(sim *Simulation, landed bool)

func (*Spell) SpendRefundableCostAndConvertBloodRune

func (spell *Spell) SpendRefundableCostAndConvertBloodRune(sim *Simulation, landed bool)

func (*Spell) SpendRefundableCostAndConvertFrostOrUnholyRune

func (spell *Spell) SpendRefundableCostAndConvertFrostOrUnholyRune(sim *Simulation, landed bool)

func (*Spell) SpendRefundableCostAndConvertFrostRune

func (spell *Spell) SpendRefundableCostAndConvertFrostRune(sim *Simulation, landed bool)

func (*Spell) TargetDamageMultiplier

func (spell *Spell) TargetDamageMultiplier(sim *Simulation, attackTable *AttackTable, isPeriodic bool) float64

func (*Spell) ThreatFromDamage

func (spell *Spell) ThreatFromDamage(sim *Simulation, outcome HitOutcome, damage float64, attackTable *AttackTable) float64

func (*Spell) TickAllDotsOnce added in v0.0.10

func (spell *Spell) TickAllDotsOnce(sim *Simulation)

func (*Spell) TimeToReady

func (spell *Spell) TimeToReady(sim *Simulation) time.Duration

func (*Spell) TravelTime

func (spell *Spell) TravelTime() time.Duration

func (*Spell) UnholyRuneMetrics

func (spell *Spell) UnholyRuneMetrics() *ResourceMetrics

func (*Spell) WaitTravelTime

func (spell *Spell) WaitTravelTime(sim *Simulation, callback func(*Simulation))

WaitTravelTime calls RegisterTravelTimeCallback

type SpellConfig

type SpellConfig struct {
	// See definition of Spell (below) for comments on these.
	ActionID
	SpellSchool    SpellSchool
	ProcMask       ProcMask
	Flags          SpellFlag
	MissileSpeed   float64
	BaseCost       float64
	MetricSplits   int
	ClassSpellMask int64

	ManaCost   ManaCostOptions
	EnergyCost EnergyCostOptions
	RageCost   RageCostOptions
	RuneCost   RuneCostOptions
	FocusCost  FocusCostOptions

	Cast               CastConfig
	ExtraCastCondition CanCastCondition

	// Optional range constraints. If supplied, these are used to modify the ExtraCastCondition above to additionally check for DistanceFromTarget.
	MinRange     float64
	MaxRange     float64
	Charges      int // The maximum amount of charges this spell can have
	RechargeTime time.Duration

	BonusHitPercent      float64
	BonusCritPercent     float64
	BonusSpellPower      float64
	BonusExpertiseRating float64

	DamageMultiplier         float64
	DamageMultiplierAdditive float64
	CritMultiplier           float64
	CritMultiplierAdditive   float64 // Additive extra crit damage %

	BonusCoefficient float64 // EffectBonusCoefficient in SpellEffect client DB table, "SP mod" on Wowhead (not necessarily shown there even if > 0)

	ThreatMultiplier float64

	FlatThreatBonus float64

	// Performs the actions of this spell.
	ApplyEffects ApplySpellResults

	// Optional field. Calculates expected average damage.
	ExpectedInitialDamage ExpectedDamageCalculator
	ExpectedTickDamage    ExpectedDamageCalculator

	Dot    DotConfig
	Hot    DotConfig
	Shield ShieldConfig

	RelatedAuraArrays LabeledAuraArrays
	RelatedDotSpell   *Spell
	RelatedSelfBuff   *Aura
}

type SpellCost

type SpellCost struct {
	BaseCost        int32   // The base power cost before all modifiers.
	FlatModifier    int32   // Flat value added to base cost before pct mods
	PercentModifier float64 // Multiplier for cost, as of MoP a float

	ResourceCostImpl
	// contains filtered or unexported fields
}

func (*SpellCost) ApplyCostModifiers

func (sc *SpellCost) ApplyCostModifiers(cost int32) float64

func (*SpellCost) GetCurrentCost

func (sc *SpellCost) GetCurrentCost() float64

Get power cost after all modifiers.

type SpellFlag

type SpellFlag uint64

Other flags

const (
	SpellFlagNone                    SpellFlag = 0
	SpellFlagIgnoreArmor             SpellFlag = 1 << iota // skip armor
	SpellFlagIgnoreTargetModifiers                         // skip target damage modifiers
	SpellFlagIgnoreAttackerModifiers                       // skip attacker damage modifiers
	SpellFlagApplyArmorReduction                           // Forces damage reduction from armor to apply, even if it otherwise wouldn't.
	SpellFlagCannotBeDodged                                // Ignores dodge in physical hit rolls
	SpellFlagBinary                                        // Does not do partial resists and could need a different hit roll.
	SpellFlagBypassAbsorbs                                 // Prevents any active DamageAbsorptionAuras from applying their damage reduction effects.
	SpellFlagChanneled                                     // Spell is channeled
	SpellFlagCastWhileChanneling                           // Spell can be cast while channeling. If SpellFlagChanneled and SpellFlagCastWhileChanneling are both set, it means that other spells with the SpellFlagCastWhileChanneling flag can be cast without interrupting the channeled spell.
	SpellFlagDisease                                       // Spell is categorized as disease
	SpellFlagHelpful                                       // For healing spells / buffs.
	SpellFlagMeleeMetrics                                  // Marks a spell as a melee ability for metrics.
	SpellFlagNoOnCastComplete                              // Disables the OnCastComplete callback.
	SpellFlagNoMetrics                                     // Disables metrics for a spell.
	SpellFlagNoLogs                                        // Disables logs for a spell.
	SpellFlagAPL                                           // Indicates this spell can be used from an APL rotation.
	SpellFlagMCD                                           // Indicates this spell is a MajorCooldown.
	SpellFlagReactive                                      // Allows a spell flagged as an MCD to be cast off-GCD. Used for instant cast defensive CDs.
	SpellFlagNoOnDamageDealt                               // Disables OnSpellHitDealt and OnPeriodicDamageDealt aura callbacks for this spell.
	SpellFlagPrepullOnly                                   // Indicates this spell should only be used during prepull. Not enforced, just a signal for the APL UI.
	SpellFlagEncounterOnly                                 // Indicates this spell should only be used during the encounter (not prepull). Not enforced, just a signal for the APL UI.
	SpellFlagPotion                                        // Indicates this spell is a potion spell.
	SpellFlagPrepullPotion                                 // Indicates this spell is the prepull potion.
	SpellFlagCombatPotion                                  // Indicates this spell is the combat potion.
	SpellFlagNoSpellMods                                   // Indicates that no spell mods should be applied to this spell
	SpellFlagCanCastWhileMoving                            // Allows the cast to be casted while moving
	SpellFlagPassiveSpell                                  // Indicates this spell is applied/cast as a result of another spell
	SpellFlagSupressDoTApply                               // If present this spell will not apply dots (Used for DTR dot supression)
	SpellFlagSwapped                                       // Indicates that this spell is not useable because it is from a currently swapped item
	SpellFlagAoE                                           // Indicates that this spell is an AoE spell. Spells flagged with this will use the AoE Cap multiplier when calculating damage.
	SpellFlagRanged                                        // Indicates that this spell is a ranged spell. Spells flagged with this will have increased damage when Hunters Mark is active.
	SpellFlagReadinessTrinket                              // Indicates that this spell part of Readiness. Used by Siege of Orgrimmar CDR trinkets.

	// Used to let agents categorize their spells.
	SpellFlagAgentReserved1
	SpellFlagAgentReserved2
	SpellFlagAgentReserved3
	SpellFlagAgentReserved4

	SpellFlagIgnoreModifiers = SpellFlagIgnoreAttackerModifiers | SpellFlagIgnoreTargetModifiers
)

func (SpellFlag) Matches

func (se SpellFlag) Matches(other SpellFlag) bool

Returns whether there is any overlap between the given masks.

type SpellMetrics

type SpellMetrics struct {
	Casts        int32
	Misses       int32
	Hits         int32
	Crits        int32
	Ticks        int32
	CritTicks    int32
	Crushes      int32
	Dodges       int32
	Parries      int32
	Blocks       int32
	CritBlocks   int32
	Glances      int32
	GlanceBlocks int32

	TotalDamage            float64 // Damage done by all casts of this spell.
	TotalCritDamage        float64 // Damage done by all critical casts of this spell.
	TotalTickDamage        float64 // Damage done by all dots of this spell.
	TotalCritTickDamage    float64 // Damage done by all critical dots of this spell.
	TotalGlanceDamage      float64 // Damage done by all glance casts of this spell.
	TotalGlanceBlockDamage float64 // Damage done by all glance block casts of this spell.
	TotalBlockDamage       float64 // Damage done by all block casts of this spell.
	TotalCritBlockDamage   float64 // Damage done by all critical block casts of this spell.
	TotalThreat            float64 // Threat generated by all casts of this spell.
	TotalHealing           float64 // Healing done by all casts of this spell.
	TotalCritHealing       float64 // Healing done by all critical casts of this spell.
	TotalShielding         float64 // Shielding done by all casts of this spell.
	TotalCastTime          time.Duration
}

Metric totals for a spell against a specific target, for the current iteration.

type SpellMod

type SpellMod struct {
	ClassMask    int64
	Kind         SpellModType
	School       SpellSchool
	ProcMask     ProcMask
	SpellFlag    SpellFlag
	ResourceType proto.ResourceType

	Apply          SpellModApply
	Remove         SpellModRemove
	IsActive       bool
	AffectedSpells []*Spell
	OnReset        SpellModOnReset
	// contains filtered or unexported fields
}

func (*SpellMod) Activate

func (mod *SpellMod) Activate()

func (*SpellMod) Deactivate

func (mod *SpellMod) Deactivate()

func (*SpellMod) GetFloatValue

func (mod *SpellMod) GetFloatValue() float64

func (*SpellMod) GetIntValue

func (mod *SpellMod) GetIntValue() int32

func (*SpellMod) GetTimeValue

func (mod *SpellMod) GetTimeValue() time.Duration

func (*SpellMod) UpdateFloatValue

func (mod *SpellMod) UpdateFloatValue(value float64)

func (*SpellMod) UpdateIntValue

func (mod *SpellMod) UpdateIntValue(value int32)

func (*SpellMod) UpdateTimeValue

func (mod *SpellMod) UpdateTimeValue(value time.Duration)

type SpellModApply

type SpellModApply func(mod *SpellMod, spell *Spell)

type SpellModConfig

type SpellModConfig struct {
	ClassMask         int64
	Kind              SpellModType
	School            SpellSchool
	ProcMask          ProcMask
	SpellFlag         SpellFlag
	ResourceType      proto.ResourceType
	IntValue          int32
	TimeValue         time.Duration
	FloatValue        float64
	KeyValue          string
	ApplyCustom       SpellModApply
	RemoveCustom      SpellModRemove
	ResetCustom       SpellModOnReset
	ShouldApplyToPets bool
}

type SpellModFunctions

type SpellModFunctions struct {
	Apply   SpellModApply
	Remove  SpellModRemove
	OnReset SpellModOnReset
}

type SpellModOnReset

type SpellModOnReset func(mod *SpellMod)

type SpellModRemove

type SpellModRemove func(mod *SpellMod, spell *Spell)

type SpellModType

type SpellModType uint32

Mod implmentations

const (
	// Will multiply the spell.DamageDoneMultiplier. +5% = 0.05
	// Uses FloatValue
	SpellMod_DamageDone_Pct SpellModType = 1 << iota

	// Will add the value spell.DamageDoneAddMultiplier
	// Uses FloatValue
	SpellMod_DamageDone_Flat

	// Will reduce spell.Cost.PercentModifier by % amount. -5% = -0.05
	// For 0 Mana cost use -2
	// Uses FloatValue
	SpellMod_PowerCost_Pct

	// Increases or decreases spell.Cost.FlatModifier by flat amount. -5 Mana = -5
	// Uses IntValue
	SpellMod_PowerCost_Flat

	// Increases or decreases RuneCost.RunicPowerCost by flat amount
	// Uses FloatValue
	SpellMod_RunicPowerCost_Flat

	// Will add time.Duration to spell.CD.Duration
	// Uses TimeValue
	SpellMod_Cooldown_Flat

	// Will multiply the spell CD multiplier. -5% = 0.95
	// Uses FloatValue
	SpellMod_Cooldown_Multiplier

	// Will increase the AdditiveCritMultiplier. +100% = 1.0
	// Uses FloatValue
	SpellMod_CritMultiplier_Flat

	// Will add / substract % amount from the cast time multiplier.
	// Ueses: FloatValue
	SpellMod_CastTime_Pct

	// Will add / substract time from the cast time.
	// Ueses: TimeValue
	SpellMod_CastTime_Flat

	// Add/subtract bonus crit %
	// Uses: FloatValue
	SpellMod_BonusCrit_Percent

	// Add/subtract bonus hit %
	// Uses: FloatValue
	SpellMod_BonusHit_Percent

	// Add/subtract to the dots max ticks
	// Uses: IntValue
	SpellMod_DotNumberOfTicks_Flat

	// Add/subtract to the casts gcd
	// Uses: TimeValue
	SpellMod_GlobalCooldown_Flat

	// Add/substrct to the base tick frequency
	// Uses: TimeValue
	SpellMod_DotTickLength_Flat

	// Add/subtract bonus coefficient
	// Uses: FloatValue
	SpellMod_BonusCoeffecient_Flat

	// Enables casting while moving
	SpellMod_AllowCastWhileMoving

	// Enables casting while channeling
	SpellMod_AllowCastWhileChanneling

	// Add/subtract bonus spell power
	// Uses: FloatValue
	SpellMod_BonusSpellPower_Flat

	// Add/subtract bonus expertise rating
	// Uses: FloatValue
	SpellMod_BonusExpertise_Rating

	// Add/subtract duration for associated debuff
	// Uses: KeyValue, TimeValue
	SpellMod_DebuffDuration_Flat

	// Add/subtract duration for associated self-buff
	// Uses: TimeValue
	SpellMod_BuffDuration_Flat

	// User-defined implementation
	// Uses: ApplyCustom | RemoveCustom
	SpellMod_Custom

	// Used to modify the amount of charges a spell has
	// Uses: IntValue
	SpellMod_ModCharges_Flat

	// Will multiply the dot.PeriodicDamageMultiplier. +5% = 0.05
	// Uses FloatValue
	SpellMod_DotDamageDone_Pct

	// Will increase the dot.BaseDurationMultiplier. +5% = 0.05
	// Uses FloatValue
	SpellMod_DotBaseDuration_Pct
)

type SpellRegisteredHandler

type SpellRegisteredHandler func(spell *Spell)

type SpellResult

type SpellResult struct {
	// Target of the spell.
	Target *Unit

	// Results
	Outcome HitOutcome
	Damage  float64 // Damage done by this cast.
	Threat  float64 // The amount of threat generated by this cast.

	ArmorMultiplier   float64 // Armor multiplier
	PostArmorDamage   float64 // Damage done by this cast after Armor is applied
	PostOutcomeDamage float64 // Damage done by this cast after Outcome is applied
	// contains filtered or unexported fields
}

func (*SpellResult) DamageString

func (result *SpellResult) DamageString() string

func (*SpellResult) DidBlock

func (result *SpellResult) DidBlock() bool

func (*SpellResult) DidCrit

func (result *SpellResult) DidCrit() bool

func (*SpellResult) DidGlance

func (result *SpellResult) DidGlance() bool

func (*SpellResult) HealingString

func (result *SpellResult) HealingString() string

func (*SpellResult) Landed

func (result *SpellResult) Landed() bool

type SpellResultCache added in v0.0.10

type SpellResultCache map[*Unit]*SpellResult

func (SpellResultCache) Get added in v0.0.10

func (resultCache SpellResultCache) Get(target *Unit) *SpellResult

type SpellResultIteration added in v0.0.10

type SpellResultIteration func(*Simulation, *Unit, float64, OutcomeApplier) *SpellResult

type SpellResultSlice added in v0.0.10

type SpellResultSlice []*SpellResult

func (SpellResultSlice) AnyLanded added in v0.0.10

func (results SpellResultSlice) AnyLanded() bool

func (SpellResultSlice) NumLandedHits added in v0.0.10

func (results SpellResultSlice) NumLandedHits() int32

type SpellSchool

type SpellSchool byte
const (
	SpellSchoolNone     SpellSchool = 0
	SpellSchoolPhysical SpellSchool = 1 << iota
	SpellSchoolArcane
	SpellSchoolFire
	SpellSchoolFrost
	SpellSchoolHoly
	SpellSchoolNature
	SpellSchoolShadow
	SpellSchoolChaos       SpellSchool = SpellSchoolArcane | SpellSchoolFire | SpellSchoolFrost | SpellSchoolHoly | SpellSchoolNature | SpellSchoolShadow
	SpellSchoolShadowFlame SpellSchool = SpellSchoolFire | SpellSchoolShadow
	SpellSchoolShadowFrost SpellSchool = SpellSchoolFrost | SpellSchoolShadow
	SpellSchoolPlague      SpellSchool = SpellSchoolNature | SpellSchoolShadow
	SpellSchoolFirestorm   SpellSchool = SpellSchoolFire | SpellSchoolNature
	SpellSchoolFrostfire   SpellSchool = SpellSchoolFire | SpellSchoolFrost
	SpellSchoolElemental   SpellSchool = SpellSchoolFire | SpellSchoolNature | SpellSchoolFrost
)

func SpellSchoolFromProto

func SpellSchoolFromProto(p proto.SpellSchool) SpellSchool

func (SpellSchool) Matches

func (ss SpellSchool) Matches(other SpellSchool) bool

Returns whether there is any overlap between the given masks.

type SplitMix64

type SplitMix64 struct {
	// contains filtered or unexported fields
}

adapted from https://prng.di.unimi.it/splitmix64.c

func NewSplitMix

func NewSplitMix(seed uint64) *SplitMix64

func (*SplitMix64) GetSeed

func (sm *SplitMix64) GetSeed() int64

func (*SplitMix64) Int63

func (sm *SplitMix64) Int63() int64

func (*SplitMix64) Next

func (sm *SplitMix64) Next() uint64

func (*SplitMix64) NextFloat64

func (sm *SplitMix64) NextFloat64() float64

func (*SplitMix64) Seed

func (sm *SplitMix64) Seed(s int64)

func (*SplitMix64) Uint64

func (sm *SplitMix64) Uint64() uint64

type StackingStatAura

type StackingStatAura struct {
	Aura          Aura
	BonusPerStack stats.Stats
}

type StatBuffAura

type StatBuffAura struct {
	*Aura

	// All Stat types that are buffed (before dependencies) when this Aura
	// is activated.
	BuffedStatTypes []stats.Stat

	// Any special conditions (beyond standard ICD checks etc.) that must be
	// satisfied before this Aura can be activated.
	CustomProcCondition CustomStatBuffProcCondition

	// Whether the aura is currently swapped (in another item set) out or not.
	IsSwapped bool
}

Analog to an Aura "sub-class" that additionally links the Aura to one or more Stats. Used within APL snapshotting wrappers.

func MakeStackingAura

func MakeStackingAura(character *Character, config StackingStatAura) *StatBuffAura

func RegisterTemporaryStatsOnUseCD

func RegisterTemporaryStatsOnUseCD(character *Character, auraLabel string, tempStats stats.Stats, duration time.Duration, config SpellConfig) *StatBuffAura

Add a major cooldown to the given agent, which provides a temporary boost to a single stat. This is use for effects like Icon of the Silver Crescent and Bloodlust Brooch.

func (*StatBuffAura) BuffsMatchingStat

func (aura *StatBuffAura) BuffsMatchingStat(statTypesToMatch []stats.Stat) bool

func (*StatBuffAura) CanProc

func (aura *StatBuffAura) CanProc(sim *Simulation) bool

func (*StatBuffAura) InferCDType

func (aura *StatBuffAura) InferCDType() CooldownType

type StatConfig

type StatConfig struct {
	Stat             stats.Stat
	Amount           float64
	IsMultiplicative bool
}

type StatWeightValues

type StatWeightValues struct {
	Weights       UnitStats
	WeightsStdev  UnitStats
	EpValues      UnitStats
	EpValuesStdev UnitStats
}

func NewStatWeightValues

func NewStatWeightValues() StatWeightValues

func (*StatWeightValues) ToProto

func (swv *StatWeightValues) ToProto() *proto.StatWeightValues

type StatWeightsResult

type StatWeightsResult struct {
	Dps    StatWeightValues
	Hps    StatWeightValues
	Tps    StatWeightValues
	Dtps   StatWeightValues
	Tmi    StatWeightValues
	PDeath StatWeightValues
}

func NewStatWeightsResult

func NewStatWeightsResult() *StatWeightsResult

func (*StatWeightsResult) ToProto

func (swr *StatWeightsResult) ToProto() *proto.StatWeightsResult

type SubGenerator

type SubGenerator struct {
	// contains filtered or unexported fields
}

type TalentsCombo

type TalentsCombo struct {
	Label   string
	Talents string
	Glyphs  *proto.Glyphs
}

func GenerateTalentVariations added in v0.0.4

func GenerateTalentVariations(baseTalents string, baseGlyphs *proto.Glyphs) []TalentsCombo

func GenerateTalentVariationsForRows added in v0.0.4

func GenerateTalentVariationsForRows(baseTalents string, baseGlyphs *proto.Glyphs, rowsToVary []int) []TalentsCombo

type Target

type Target struct {
	Unit

	AI TargetAI
}

Target is an enemy/boss that can be the target of player attacks/spells.

func NewTarget

func NewTarget(options *proto.Target, targetIndex int32) *Target

func (*Target) AddComboPoints

func (eb *Target) AddComboPoints(sim *Simulation, pointsToAdd int32, target *Unit, metrics *ResourceMetrics)

func (*Target) AddEnergy

func (eb *Target) AddEnergy(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) AddFocus

func (fb *Target) AddFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) AddPartyBuffs

func (target *Target) AddPartyBuffs(_ *proto.PartyBuffs)

func (*Target) AddRage

func (rb *Target) AddRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) AddRaidBuffs

func (target *Target) AddRaidBuffs(_ *proto.RaidBuffs)

Empty Agent interface functions.

func (*Target) AddRunicPower

func (rp *Target) AddRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) AddUnscaledRunicPower

func (rp *Target) AddUnscaledRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) Advance

func (rp *Target) Advance(sim *Simulation, newTime time.Duration)

func (*Target) AllRunesSpent

func (rp *Target) AllRunesSpent() bool

func (*Target) AnyDepletedRunes

func (rp *Target) AnyDepletedRunes() bool

func (*Target) AnyRuneReadyAt

func (rp *Target) AnyRuneReadyAt(sim *Simulation) time.Duration

func (*Target) AnySpentRuneReadyAt

func (rp *Target) AnySpentRuneReadyAt() time.Duration

AnySpentRuneReadyAt returns the next time that a rune will regenerate. It will be NeverExpires if there is no rune pending regeneration.

func (*Target) ApplyTalents

func (target *Target) ApplyTalents()

func (*Target) BloodDeathRuneBothReadyAt

func (rp *Target) BloodDeathRuneBothReadyAt() time.Duration

func (*Target) BloodRuneReadyAt

func (rp *Target) BloodRuneReadyAt(sim *Simulation) time.Duration

BloodRuneReadyAt returns the earliest time a (possibly death-converted) blood rune is ready.

func (*Target) ComboPoints

func (eb *Target) ComboPoints() int32

func (*Target) ConvertAndRegenBloodTapRune added in v0.0.1

func (rp *Target) ConvertAndRegenBloodTapRune(sim *Simulation, spell *Spell, runeMetrics []*ResourceMetrics) bool

Blood tap prioritizes runes based on spec Blood prefers to regen B runes first, then the F/U rune with the highest CD if no blood runes are available. Frost prefers to regen U runes first, then the B/F rune with the highest CD if no other runes are available. Unholy prefers to regen a B/F rune with the highest CD first, then an U rune if no other runes are available.

func (*Target) ConvertAndRegenPlagueLeechRunes added in v0.0.1

func (rp *Target) ConvertAndRegenPlagueLeechRunes(sim *Simulation, spell *Spell, runeMetrics []*ResourceMetrics)

Plague leech prioritizes runes based on spec Unholy prefers to regen a pair of B/F runes first, then U if no other runes are available. Blood and Frost prefers to regen a pair of F/U runes first, then B if no other runes are available.

func (*Target) ConvertFromDeath

func (rp *Target) ConvertFromDeath(sim *Simulation, slot int8)

ConvertFromDeath reverts the rune to its original type.

func (*Target) ConvertToDeath

func (rp *Target) ConvertToDeath(sim *Simulation, slot int8, revertAt time.Duration)

ConvertToDeath converts the given slot to death and sets up the reversion conditions

func (*Target) CurrentBloodOrDeathRunes

func (rp *Target) CurrentBloodOrDeathRunes() int8

func (*Target) CurrentBloodRunes

func (rp *Target) CurrentBloodRunes() int8

func (*Target) CurrentDeathRunes

func (rp *Target) CurrentDeathRunes() int8

func (*Target) CurrentEnergy

func (eb *Target) CurrentEnergy() float64

func (*Target) CurrentEnergyRegenMultiplier

func (eb *Target) CurrentEnergyRegenMultiplier() float64

func (*Target) CurrentFocus

func (fb *Target) CurrentFocus() float64

func (*Target) CurrentFrostOrDeathRunes

func (rp *Target) CurrentFrostOrDeathRunes() int8

func (*Target) CurrentFrostRunes

func (rp *Target) CurrentFrostRunes() int8

func (*Target) CurrentHealth

func (hb *Target) CurrentHealth() float64

func (*Target) CurrentHealthPercent

func (hb *Target) CurrentHealthPercent() float64

func (*Target) CurrentRage

func (rb *Target) CurrentRage() float64

func (*Target) CurrentRunicPower

func (rp *Target) CurrentRunicPower() float64

func (*Target) CurrentUnholyOrDeathRunes

func (rp *Target) CurrentUnholyOrDeathRunes() int8

func (*Target) CurrentUnholyRunes

func (rp *Target) CurrentUnholyRunes() int8

func (*Target) DeathRuneRegenAt

func (rp *Target) DeathRuneRegenAt(slot int32) time.Duration

DeathRuneRegenAt returns the time the given death rune will regen at. If the rune is not death or not spent it returns NeverExpires.

func (*Target) DeathRuneRevertAt

func (rp *Target) DeathRuneRevertAt() time.Duration

DeathRuneRevertAt returns the next time that a death rune will revert. If there is no death rune that needs to revert it returns NeverExpires.

func (*Target) DeathRunesInFU

func (rp *Target) DeathRunesInFU() int8

func (*Target) DebugString

func (rp *Target) DebugString() string

func (*Target) Disable added in v0.0.10

func (target *Target) Disable(sim *Simulation, expireAuras bool)

func (*Target) Enable added in v0.0.10

func (target *Target) Enable(sim *Simulation)

func (*Target) EndOOMEvent

func (mb *Target) EndOOMEvent(sim *Simulation)

func (*Target) EnergyRegenPerSecond

func (eb *Target) EnergyRegenPerSecond() float64

func (*Target) ExecuteCustomRotation

func (target *Target) ExecuteCustomRotation(sim *Simulation)

func (*Target) FocusRegenPerSecond

func (fb *Target) FocusRegenPerSecond() float64

func (*Target) FocusRegenPerTick

func (fb *Target) FocusRegenPerTick() float64

func (*Target) FrostRuneReadyAt

func (rp *Target) FrostRuneReadyAt(sim *Simulation) time.Duration

func (*Target) GainHealth

func (hb *Target) GainHealth(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) GetActiveAuraWithTag

func (at *Target) GetActiveAuraWithTag(tag string) *Aura

func (*Target) GetAura

func (at *Target) GetAura(label string) *Aura

func (*Target) GetAuraByID

func (at *Target) GetAuraByID(actionID ActionID) *Aura

func (*Target) GetAuras

func (at *Target) GetAuras() []*Aura

func (*Target) GetAurasWithTag

func (at *Target) GetAurasWithTag(tag string) []*Aura

func (*Target) GetCharacter

func (target *Target) GetCharacter() *Character

func (*Target) GetIcdAuraByID

func (at *Target) GetIcdAuraByID(actionID ActionID) *Aura

func (*Target) GetMetricsProto

func (target *Target) GetMetricsProto() *proto.UnitMetrics

func (*Target) GetRuneRegenMultiplier

func (rp *Target) GetRuneRegenMultiplier() float64

func (*Target) HasActiveAura

func (at *Target) HasActiveAura(label string) bool

func (*Target) HasActiveAuraWithTag

func (at *Target) HasActiveAuraWithTag(tag string) bool

func (*Target) HasActiveAuraWithTagExcludingAura

func (at *Target) HasActiveAuraWithTagExcludingAura(tag string, excludeAura *Aura) bool

func (*Target) HasAura

func (at *Target) HasAura(label string) bool

func (*Target) HasAuraWithTag

func (at *Target) HasAuraWithTag(tag string) bool

func (*Target) Initialize

func (target *Target) Initialize()

func (*Target) IsOOM

func (mb *Target) IsOOM() bool

func (*Target) IsReset

func (eb *Target) IsReset(sim *Simulation) bool

func (*Target) LeftBloodRuneReady

func (rp *Target) LeftBloodRuneReady() bool

func (*Target) MaxComboPoints

func (eb *Target) MaxComboPoints() int32

func (*Target) MaxHealth

func (hb *Target) MaxHealth() float64

func (*Target) MaximumEnergy

func (eb *Target) MaximumEnergy() float64

func (*Target) MaximumFocus

func (fb *Target) MaximumFocus() float64

func (*Target) MaximumRage

func (rb *Target) MaximumRage() float64

func (*Target) MaximumRunicPower

func (rp *Target) MaximumRunicPower() float64

func (*Target) MultiplyAutoAttackRageGen

func (rb *Target) MultiplyAutoAttackRageGen(multiplier float64)

Call this within the OnGain and OnExpire callbacks for Battle Stance, Raging Whirlwind, etc.

func (*Target) MultiplyEnergyRegenSpeed

func (eb *Target) MultiplyEnergyRegenSpeed(sim *Simulation, multiplier float64)

func (*Target) MultiplyFocusRegenSpeed

func (fb *Target) MultiplyFocusRegenSpeed(sim *Simulation, multiplier float64)

func (*Target) MultiplyRageGen added in v0.0.105

func (rb *Target) MultiplyRageGen(multiplier float64)

func (*Target) MultiplyRuneRegenSpeed

func (rp *Target) MultiplyRuneRegenSpeed(sim *Simulation, multiplier float64)

func (*Target) MultiplyRunicRegen

func (rp *Target) MultiplyRunicRegen(multiply float64)

func (*Target) NewBloodRuneMetrics added in v0.0.1

func (rp *Target) NewBloodRuneMetrics(action ActionID) *ResourceMetrics

func (*Target) NewDeathRuneMetrics added in v0.0.1

func (rp *Target) NewDeathRuneMetrics(action ActionID) *ResourceMetrics

func (*Target) NewFrostRuneMetrics added in v0.0.1

func (rp *Target) NewFrostRuneMetrics(action ActionID) *ResourceMetrics

func (*Target) NewRunicPowerMetrics added in v0.0.1

func (rp *Target) NewRunicPowerMetrics(action ActionID) *ResourceMetrics

func (*Target) NewUnholyRuneMetrics added in v0.0.1

func (rp *Target) NewUnholyRuneMetrics(action ActionID) *ResourceMetrics

func (*Target) NextActiveTarget added in v0.0.10

func (target *Target) NextActiveTarget() *Target

func (*Target) NextBloodRuneReadyAt

func (rp *Target) NextBloodRuneReadyAt(sim *Simulation) time.Duration

func (*Target) NextEnergyTickAt

func (eb *Target) NextEnergyTickAt() time.Duration

func (*Target) NextFocusTickAt

func (fb *Target) NextFocusTickAt() time.Duration

func (*Target) NextFrostRuneReadyAt

func (rp *Target) NextFrostRuneReadyAt(sim *Simulation) time.Duration

func (*Target) NextUnholyRuneReadyAt

func (rp *Target) NextUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Target) NormalFrostRuneReadyAt

func (rp *Target) NormalFrostRuneReadyAt(sim *Simulation) time.Duration

NormalFrostRuneReadyAt returns the earliest time a non-death frost rune is ready.

func (*Target) NormalSpentBloodRuneReadyAt

func (rp *Target) NormalSpentBloodRuneReadyAt(_ *Simulation) time.Duration

NormalSpentBloodRuneReadyAt returns the earliest time a spent non-death blood rune is ready.

func (*Target) NormalUnholyRuneReadyAt

func (rp *Target) NormalUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Target) NumActiveAurasWithTag

func (at *Target) NumActiveAurasWithTag(tag string) int32

func (*Target) OnApplyEffects

func (at *Target) OnApplyEffects(sim *Simulation, target *Unit, spell *Spell)

Invokes the OnApplyEffects event for all tracked Auras.

func (*Target) OnCastComplete

func (at *Target) OnCastComplete(sim *Simulation, spell *Spell)

Invokes the OnCastComplete event for all tracked Auras.

func (*Target) OnEncounterStart added in v0.0.13

func (target *Target) OnEncounterStart(_ *Simulation)

func (*Target) OnHealDealt

func (at *Target) OnHealDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnHeal event for all tracked Auras.

func (*Target) OnHealTaken

func (at *Target) OnHealTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Target) OnPeriodicDamageDealt

func (at *Target) OnPeriodicDamageDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnPeriodicDamage

As a debuff when target is being hit by dot.
As a buff when caster's dots are ticking.

func (*Target) OnPeriodicDamageTaken

func (at *Target) OnPeriodicDamageTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Target) OnPeriodicHealDealt

func (at *Target) OnPeriodicHealDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnPeriodicHeal

As a debuff when target is being hit by dot.
As a buff when caster's dots are ticking.

func (*Target) OnPeriodicHealTaken

func (at *Target) OnPeriodicHealTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Target) OnSpellHitDealt

func (at *Target) OnSpellHitDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnSpellHit event for all tracked Auras.

func (*Target) OnSpellHitTaken

func (at *Target) OnSpellHitTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Target) OptimalRuneCost

func (rp *Target) OptimalRuneCost(cost RuneCost) RuneCost

func (*Target) PreviousActiveTarget added in v0.0.43

func (target *Target) PreviousActiveTarget() *Target

func (*Target) RegenAllFrostAndUnholyRunesAsDeath

func (rp *Target) RegenAllFrostAndUnholyRunesAsDeath(sim *Simulation, deathRuneMetrics *ResourceMetrics)

func (*Target) RegenAllRunes

func (rp *Target) RegenAllRunes(sim *Simulation, metrics []*ResourceMetrics)

func (*Target) RegenRunicEmpowermentRune added in v0.0.1

func (rp *Target) RegenRunicEmpowermentRune(sim *Simulation, runeMetrics []*ResourceMetrics)

Runic Empowerment regens a randoom fully depleted rune

func (*Target) RegisterResetEffect

func (at *Target) RegisterResetEffect(resetEffect ResetEffect)

Registers a callback to this Character which will be invoked on every Sim reset.

func (*Target) RemoveHealth

func (hb *Target) RemoveHealth(sim *Simulation, amount float64)

func (*Target) Reset

func (target *Target) Reset(sim *Simulation)

func (*Target) ResetComboPoints added in v0.0.13

func (eb *Target) ResetComboPoints(sim *Simulation, comboPointsToKeep int32)

func (*Target) ResetEnergyTick

func (eb *Target) ResetEnergyTick(sim *Simulation)

Gives an immediate partial energy tick and restarts the tick timer.

func (*Target) ResetFocusTick

func (fb *Target) ResetFocusTick(sim *Simulation)

Gives an immediate partial Focus tick and restarts the tick timer.

func (*Target) ResetRageBar added in v0.0.13

func (rb *Target) ResetRageBar(sim *Simulation, rageToKeep float64)

func (*Target) ResetRunicPowerBar added in v0.0.13

func (rp *Target) ResetRunicPowerBar(sim *Simulation, runicPowerToKeep float64)

func (*Target) RuneIsActive

func (rp *Target) RuneIsActive(slot int8) bool

func (*Target) RuneIsDeath

func (rp *Target) RuneIsDeath(slot int8) bool

func (*Target) RuneReadyAt

func (rp *Target) RuneReadyAt(sim *Simulation, slot int8) time.Duration

func (*Target) SetMaxComboPoints

func (eb *Target) SetMaxComboPoints(maxComboPoints int32)

func (*Target) SetPermanentDeathRunes

func (rp *Target) SetPermanentDeathRunes(permanentDeaths []int8)

func (*Target) SetRuneCd

func (rp *Target) SetRuneCd(runeCd time.Duration)

func (*Target) SpendComboPoints

func (eb *Target) SpendComboPoints(sim *Simulation, metrics *ResourceMetrics)

func (*Target) SpendEnergy

func (eb *Target) SpendEnergy(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) SpendFocus

func (fb *Target) SpendFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) SpendPartialComboPoints

func (eb *Target) SpendPartialComboPoints(sim *Simulation, pointsToSpend int32, metrics *ResourceMetrics)

func (*Target) SpendRage

func (rb *Target) SpendRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) SpendRuneReadyAt

func (rp *Target) SpendRuneReadyAt(slot int8, spendAt time.Duration) time.Duration

func (*Target) SpendRunicPower

func (rp *Target) SpendRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) StartOOMEvent

func (mb *Target) StartOOMEvent(sim *Simulation, requiredMana float64)

func (*Target) TimeToTargetEnergy

func (eb *Target) TimeToTargetEnergy(targetEnergy float64) time.Duration

func (*Target) TimeToTargetFocus

func (fb *Target) TimeToTargetFocus(targetFocus float64) time.Duration

func (*Target) UnholyRuneReadyAt

func (rp *Target) UnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Target) UpdateMaxEnergy

func (eb *Target) UpdateMaxEnergy(sim *Simulation, bonusEnergy float64, metrics *ResourceMetrics)

Used for dynamic updates to maximum Energy, such as from the Druid Primal Madness talent

func (*Target) UpdateMaxHealth

func (hb *Target) UpdateMaxHealth(sim *Simulation, bonusHealth float64, metrics *ResourceMetrics)

Used for dynamic updates to maximum health from "Last Stand" effects

type TargetAI

type TargetAI interface {
	Initialize(*Target, *proto.Target)
	Reset(*Simulation)
	ExecuteCustomRotation(*Simulation)
}

type TargetDummy

type TargetDummy struct {
	Character
}

func NewTargetDummy

func NewTargetDummy(dummyIndex int, party *Party, partyIndex int) *TargetDummy

func (*TargetDummy) AddComboPoints

func (eb *TargetDummy) AddComboPoints(sim *Simulation, pointsToAdd int32, target *Unit, metrics *ResourceMetrics)

func (*TargetDummy) AddEnergy

func (eb *TargetDummy) AddEnergy(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) AddFocus

func (fb *TargetDummy) AddFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) AddMajorCooldown

func (mcdm *TargetDummy) AddMajorCooldown(mcd MajorCooldown)

Registers a major cooldown to the Character, which will be automatically used when available.

func (*TargetDummy) AddPartyBuffs

func (td *TargetDummy) AddPartyBuffs(partyBuffs *proto.PartyBuffs)

func (*TargetDummy) AddRage

func (rb *TargetDummy) AddRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) AddRaidBuffs

func (td *TargetDummy) AddRaidBuffs(raidBuffs *proto.RaidBuffs)

func (*TargetDummy) AddRunicPower

func (rp *TargetDummy) AddRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) AddUnscaledRunicPower

func (rp *TargetDummy) AddUnscaledRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) Advance

func (rp *TargetDummy) Advance(sim *Simulation, newTime time.Duration)

func (*TargetDummy) AllRunesSpent

func (rp *TargetDummy) AllRunesSpent() bool

func (*TargetDummy) AnyDepletedRunes

func (rp *TargetDummy) AnyDepletedRunes() bool

func (*TargetDummy) AnyRuneReadyAt

func (rp *TargetDummy) AnyRuneReadyAt(sim *Simulation) time.Duration

func (*TargetDummy) AnySpentRuneReadyAt

func (rp *TargetDummy) AnySpentRuneReadyAt() time.Duration

AnySpentRuneReadyAt returns the next time that a rune will regenerate. It will be NeverExpires if there is no rune pending regeneration.

func (*TargetDummy) ApplyTalents

func (td *TargetDummy) ApplyTalents()

func (*TargetDummy) BloodDeathRuneBothReadyAt

func (rp *TargetDummy) BloodDeathRuneBothReadyAt() time.Duration

func (*TargetDummy) BloodRuneReadyAt

func (rp *TargetDummy) BloodRuneReadyAt(sim *Simulation) time.Duration

BloodRuneReadyAt returns the earliest time a (possibly death-converted) blood rune is ready.

func (*TargetDummy) ComboPoints

func (eb *TargetDummy) ComboPoints() int32

func (*TargetDummy) ConvertAndRegenBloodTapRune added in v0.0.1

func (rp *TargetDummy) ConvertAndRegenBloodTapRune(sim *Simulation, spell *Spell, runeMetrics []*ResourceMetrics) bool

Blood tap prioritizes runes based on spec Blood prefers to regen B runes first, then the F/U rune with the highest CD if no blood runes are available. Frost prefers to regen U runes first, then the B/F rune with the highest CD if no other runes are available. Unholy prefers to regen a B/F rune with the highest CD first, then an U rune if no other runes are available.

func (*TargetDummy) ConvertAndRegenPlagueLeechRunes added in v0.0.1

func (rp *TargetDummy) ConvertAndRegenPlagueLeechRunes(sim *Simulation, spell *Spell, runeMetrics []*ResourceMetrics)

Plague leech prioritizes runes based on spec Unholy prefers to regen a pair of B/F runes first, then U if no other runes are available. Blood and Frost prefers to regen a pair of F/U runes first, then B if no other runes are available.

func (*TargetDummy) ConvertFromDeath

func (rp *TargetDummy) ConvertFromDeath(sim *Simulation, slot int8)

ConvertFromDeath reverts the rune to its original type.

func (*TargetDummy) ConvertToDeath

func (rp *TargetDummy) ConvertToDeath(sim *Simulation, slot int8, revertAt time.Duration)

ConvertToDeath converts the given slot to death and sets up the reversion conditions

func (*TargetDummy) CurrentBloodOrDeathRunes

func (rp *TargetDummy) CurrentBloodOrDeathRunes() int8

func (*TargetDummy) CurrentBloodRunes

func (rp *TargetDummy) CurrentBloodRunes() int8

func (*TargetDummy) CurrentDeathRunes

func (rp *TargetDummy) CurrentDeathRunes() int8

func (*TargetDummy) CurrentEnergy

func (eb *TargetDummy) CurrentEnergy() float64

func (*TargetDummy) CurrentEnergyRegenMultiplier

func (eb *TargetDummy) CurrentEnergyRegenMultiplier() float64

func (*TargetDummy) CurrentFocus

func (fb *TargetDummy) CurrentFocus() float64

func (*TargetDummy) CurrentFrostOrDeathRunes

func (rp *TargetDummy) CurrentFrostOrDeathRunes() int8

func (*TargetDummy) CurrentFrostRunes

func (rp *TargetDummy) CurrentFrostRunes() int8

func (*TargetDummy) CurrentHealth

func (hb *TargetDummy) CurrentHealth() float64

func (*TargetDummy) CurrentHealthPercent

func (hb *TargetDummy) CurrentHealthPercent() float64

func (*TargetDummy) CurrentRage

func (rb *TargetDummy) CurrentRage() float64

func (*TargetDummy) CurrentRunicPower

func (rp *TargetDummy) CurrentRunicPower() float64

func (*TargetDummy) CurrentUnholyOrDeathRunes

func (rp *TargetDummy) CurrentUnholyOrDeathRunes() int8

func (*TargetDummy) CurrentUnholyRunes

func (rp *TargetDummy) CurrentUnholyRunes() int8

func (*TargetDummy) DeathRuneRegenAt

func (rp *TargetDummy) DeathRuneRegenAt(slot int32) time.Duration

DeathRuneRegenAt returns the time the given death rune will regen at. If the rune is not death or not spent it returns NeverExpires.

func (*TargetDummy) DeathRuneRevertAt

func (rp *TargetDummy) DeathRuneRevertAt() time.Duration

DeathRuneRevertAt returns the next time that a death rune will revert. If there is no death rune that needs to revert it returns NeverExpires.

func (*TargetDummy) DeathRunesInFU

func (rp *TargetDummy) DeathRunesInFU() int8

func (*TargetDummy) DebugString

func (rp *TargetDummy) DebugString() string

func (*TargetDummy) EndOOMEvent

func (mb *TargetDummy) EndOOMEvent(sim *Simulation)

func (*TargetDummy) EnergyRegenPerSecond

func (eb *TargetDummy) EnergyRegenPerSecond() float64

func (*TargetDummy) ExecuteCustomRotation

func (td *TargetDummy) ExecuteCustomRotation(sim *Simulation)

func (*TargetDummy) FocusRegenPerSecond

func (fb *TargetDummy) FocusRegenPerSecond() float64

func (*TargetDummy) FocusRegenPerTick

func (fb *TargetDummy) FocusRegenPerTick() float64

func (*TargetDummy) FrostRuneReadyAt

func (rp *TargetDummy) FrostRuneReadyAt(sim *Simulation) time.Duration

func (*TargetDummy) GainHealth

func (hb *TargetDummy) GainHealth(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) GetActiveAuraWithTag

func (at *TargetDummy) GetActiveAuraWithTag(tag string) *Aura

func (*TargetDummy) GetAura

func (at *TargetDummy) GetAura(label string) *Aura

func (*TargetDummy) GetAuraByID

func (at *TargetDummy) GetAuraByID(actionID ActionID) *Aura

func (*TargetDummy) GetAuras

func (at *TargetDummy) GetAuras() []*Aura

func (*TargetDummy) GetAurasWithTag

func (at *TargetDummy) GetAurasWithTag(tag string) []*Aura

func (*TargetDummy) GetCharacter

func (td *TargetDummy) GetCharacter() *Character

func (*TargetDummy) GetIcdAuraByID

func (at *TargetDummy) GetIcdAuraByID(actionID ActionID) *Aura

func (*TargetDummy) GetInitialMajorCooldown

func (mcdm *TargetDummy) GetInitialMajorCooldown(actionID ActionID) MajorCooldown

func (*TargetDummy) GetMajorCooldown

func (mcdm *TargetDummy) GetMajorCooldown(actionID ActionID) *MajorCooldown

func (*TargetDummy) GetMajorCooldownIDs

func (mcdm *TargetDummy) GetMajorCooldownIDs() []*proto.ActionID

func (*TargetDummy) GetMajorCooldownIgnoreTag

func (mcdm *TargetDummy) GetMajorCooldownIgnoreTag(actionID ActionID) *MajorCooldown

func (*TargetDummy) GetMajorCooldowns

func (mcdm *TargetDummy) GetMajorCooldowns() []*MajorCooldown

Returns all MCDs.

func (*TargetDummy) GetMatchingStatBuffCooldownAuras added in v0.0.33

func (mcdm *TargetDummy) GetMatchingStatBuffCooldownAuras(statTypesToMatch []stats.Stat) []*StatBuffAura

func (*TargetDummy) GetMatchingStatBuffSpells

func (mcdm *TargetDummy) GetMatchingStatBuffSpells(statTypesToMatch []stats.Stat) []*Spell

func (*TargetDummy) GetRuneRegenMultiplier

func (rp *TargetDummy) GetRuneRegenMultiplier() float64

func (*TargetDummy) HasActiveAura

func (at *TargetDummy) HasActiveAura(label string) bool

func (*TargetDummy) HasActiveAuraWithTag

func (at *TargetDummy) HasActiveAuraWithTag(tag string) bool

func (*TargetDummy) HasActiveAuraWithTagExcludingAura

func (at *TargetDummy) HasActiveAuraWithTagExcludingAura(tag string, excludeAura *Aura) bool

func (*TargetDummy) HasAura

func (at *TargetDummy) HasAura(label string) bool

func (*TargetDummy) HasAuraWithTag

func (at *TargetDummy) HasAuraWithTag(tag string) bool

func (*TargetDummy) Initialize

func (td *TargetDummy) Initialize()

func (*TargetDummy) IsOOM

func (mb *TargetDummy) IsOOM() bool

func (*TargetDummy) IsReset

func (eb *TargetDummy) IsReset(sim *Simulation) bool

func (*TargetDummy) LeftBloodRuneReady

func (rp *TargetDummy) LeftBloodRuneReady() bool

func (*TargetDummy) MaxComboPoints

func (eb *TargetDummy) MaxComboPoints() int32

func (*TargetDummy) MaxHealth

func (hb *TargetDummy) MaxHealth() float64

func (*TargetDummy) MaximumEnergy

func (eb *TargetDummy) MaximumEnergy() float64

func (*TargetDummy) MaximumFocus

func (fb *TargetDummy) MaximumFocus() float64

func (*TargetDummy) MaximumRage

func (rb *TargetDummy) MaximumRage() float64

func (*TargetDummy) MaximumRunicPower

func (rp *TargetDummy) MaximumRunicPower() float64

func (*TargetDummy) MultiplyAutoAttackRageGen

func (rb *TargetDummy) MultiplyAutoAttackRageGen(multiplier float64)

Call this within the OnGain and OnExpire callbacks for Battle Stance, Raging Whirlwind, etc.

func (*TargetDummy) MultiplyEnergyRegenSpeed

func (eb *TargetDummy) MultiplyEnergyRegenSpeed(sim *Simulation, multiplier float64)

func (*TargetDummy) MultiplyFocusRegenSpeed

func (fb *TargetDummy) MultiplyFocusRegenSpeed(sim *Simulation, multiplier float64)

func (*TargetDummy) MultiplyRageGen added in v0.0.105

func (rb *TargetDummy) MultiplyRageGen(multiplier float64)

func (*TargetDummy) MultiplyRuneRegenSpeed

func (rp *TargetDummy) MultiplyRuneRegenSpeed(sim *Simulation, multiplier float64)

func (*TargetDummy) MultiplyRunicRegen

func (rp *TargetDummy) MultiplyRunicRegen(multiply float64)

func (*TargetDummy) NewBloodRuneMetrics added in v0.0.1

func (rp *TargetDummy) NewBloodRuneMetrics(action ActionID) *ResourceMetrics

func (*TargetDummy) NewDeathRuneMetrics added in v0.0.1

func (rp *TargetDummy) NewDeathRuneMetrics(action ActionID) *ResourceMetrics

func (*TargetDummy) NewFrostRuneMetrics added in v0.0.1

func (rp *TargetDummy) NewFrostRuneMetrics(action ActionID) *ResourceMetrics

func (*TargetDummy) NewRunicPowerMetrics added in v0.0.1

func (rp *TargetDummy) NewRunicPowerMetrics(action ActionID) *ResourceMetrics

func (*TargetDummy) NewUnholyRuneMetrics added in v0.0.1

func (rp *TargetDummy) NewUnholyRuneMetrics(action ActionID) *ResourceMetrics

func (*TargetDummy) NextBloodRuneReadyAt

func (rp *TargetDummy) NextBloodRuneReadyAt(sim *Simulation) time.Duration

func (*TargetDummy) NextEnergyTickAt

func (eb *TargetDummy) NextEnergyTickAt() time.Duration

func (*TargetDummy) NextFocusTickAt

func (fb *TargetDummy) NextFocusTickAt() time.Duration

func (*TargetDummy) NextFrostRuneReadyAt

func (rp *TargetDummy) NextFrostRuneReadyAt(sim *Simulation) time.Duration

func (*TargetDummy) NextUnholyRuneReadyAt

func (rp *TargetDummy) NextUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*TargetDummy) NormalFrostRuneReadyAt

func (rp *TargetDummy) NormalFrostRuneReadyAt(sim *Simulation) time.Duration

NormalFrostRuneReadyAt returns the earliest time a non-death frost rune is ready.

func (*TargetDummy) NormalSpentBloodRuneReadyAt

func (rp *TargetDummy) NormalSpentBloodRuneReadyAt(_ *Simulation) time.Duration

NormalSpentBloodRuneReadyAt returns the earliest time a spent non-death blood rune is ready.

func (*TargetDummy) NormalUnholyRuneReadyAt

func (rp *TargetDummy) NormalUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*TargetDummy) NumActiveAurasWithTag

func (at *TargetDummy) NumActiveAurasWithTag(tag string) int32

func (*TargetDummy) OnApplyEffects

func (at *TargetDummy) OnApplyEffects(sim *Simulation, target *Unit, spell *Spell)

Invokes the OnApplyEffects event for all tracked Auras.

func (*TargetDummy) OnCastComplete

func (at *TargetDummy) OnCastComplete(sim *Simulation, spell *Spell)

Invokes the OnCastComplete event for all tracked Auras.

func (*TargetDummy) OnEncounterStart added in v0.0.13

func (td *TargetDummy) OnEncounterStart(sim *Simulation)

func (*TargetDummy) OnHealDealt

func (at *TargetDummy) OnHealDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnHeal event for all tracked Auras.

func (*TargetDummy) OnHealTaken

func (at *TargetDummy) OnHealTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*TargetDummy) OnPeriodicDamageDealt

func (at *TargetDummy) OnPeriodicDamageDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnPeriodicDamage

As a debuff when target is being hit by dot.
As a buff when caster's dots are ticking.

func (*TargetDummy) OnPeriodicDamageTaken

func (at *TargetDummy) OnPeriodicDamageTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*TargetDummy) OnPeriodicHealDealt

func (at *TargetDummy) OnPeriodicHealDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnPeriodicHeal

As a debuff when target is being hit by dot.
As a buff when caster's dots are ticking.

func (*TargetDummy) OnPeriodicHealTaken

func (at *TargetDummy) OnPeriodicHealTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*TargetDummy) OnSpellHitDealt

func (at *TargetDummy) OnSpellHitDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnSpellHit event for all tracked Auras.

func (*TargetDummy) OnSpellHitTaken

func (at *TargetDummy) OnSpellHitTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*TargetDummy) OptimalRuneCost

func (rp *TargetDummy) OptimalRuneCost(cost RuneCost) RuneCost

func (*TargetDummy) RegenAllFrostAndUnholyRunesAsDeath

func (rp *TargetDummy) RegenAllFrostAndUnholyRunesAsDeath(sim *Simulation, deathRuneMetrics *ResourceMetrics)

func (*TargetDummy) RegenAllRunes

func (rp *TargetDummy) RegenAllRunes(sim *Simulation, metrics []*ResourceMetrics)

func (*TargetDummy) RegenRunicEmpowermentRune added in v0.0.1

func (rp *TargetDummy) RegenRunicEmpowermentRune(sim *Simulation, runeMetrics []*ResourceMetrics)

Runic Empowerment regens a randoom fully depleted rune

func (*TargetDummy) RegisterResetEffect

func (at *TargetDummy) RegisterResetEffect(resetEffect ResetEffect)

Registers a callback to this Character which will be invoked on every Sim reset.

func (*TargetDummy) RemoveHealth

func (hb *TargetDummy) RemoveHealth(sim *Simulation, amount float64)

func (*TargetDummy) Reset

func (td *TargetDummy) Reset(sim *Simulation)

func (*TargetDummy) ResetComboPoints added in v0.0.13

func (eb *TargetDummy) ResetComboPoints(sim *Simulation, comboPointsToKeep int32)

func (*TargetDummy) ResetEnergyTick

func (eb *TargetDummy) ResetEnergyTick(sim *Simulation)

Gives an immediate partial energy tick and restarts the tick timer.

func (*TargetDummy) ResetFocusTick

func (fb *TargetDummy) ResetFocusTick(sim *Simulation)

Gives an immediate partial Focus tick and restarts the tick timer.

func (*TargetDummy) ResetRageBar added in v0.0.13

func (rb *TargetDummy) ResetRageBar(sim *Simulation, rageToKeep float64)

func (*TargetDummy) ResetRunicPowerBar added in v0.0.13

func (rp *TargetDummy) ResetRunicPowerBar(sim *Simulation, runicPowerToKeep float64)

func (*TargetDummy) RuneIsActive

func (rp *TargetDummy) RuneIsActive(slot int8) bool

func (*TargetDummy) RuneIsDeath

func (rp *TargetDummy) RuneIsDeath(slot int8) bool

func (*TargetDummy) RuneReadyAt

func (rp *TargetDummy) RuneReadyAt(sim *Simulation, slot int8) time.Duration

func (*TargetDummy) SetMaxComboPoints

func (eb *TargetDummy) SetMaxComboPoints(maxComboPoints int32)

func (*TargetDummy) SetPermanentDeathRunes

func (rp *TargetDummy) SetPermanentDeathRunes(permanentDeaths []int8)

func (*TargetDummy) SetRuneCd

func (rp *TargetDummy) SetRuneCd(runeCd time.Duration)

func (*TargetDummy) SpendComboPoints

func (eb *TargetDummy) SpendComboPoints(sim *Simulation, metrics *ResourceMetrics)

func (*TargetDummy) SpendEnergy

func (eb *TargetDummy) SpendEnergy(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) SpendFocus

func (fb *TargetDummy) SpendFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) SpendPartialComboPoints

func (eb *TargetDummy) SpendPartialComboPoints(sim *Simulation, pointsToSpend int32, metrics *ResourceMetrics)

func (*TargetDummy) SpendRage

func (rb *TargetDummy) SpendRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) SpendRuneReadyAt

func (rp *TargetDummy) SpendRuneReadyAt(slot int8, spendAt time.Duration) time.Duration

func (*TargetDummy) SpendRunicPower

func (rp *TargetDummy) SpendRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) StartOOMEvent

func (mb *TargetDummy) StartOOMEvent(sim *Simulation, requiredMana float64)

func (*TargetDummy) TimeToTargetEnergy

func (eb *TargetDummy) TimeToTargetEnergy(targetEnergy float64) time.Duration

func (*TargetDummy) TimeToTargetFocus

func (fb *TargetDummy) TimeToTargetFocus(targetFocus float64) time.Duration

func (*TargetDummy) UnholyRuneReadyAt

func (rp *TargetDummy) UnholyRuneReadyAt(sim *Simulation) time.Duration

func (*TargetDummy) UpdateMajorCooldowns

func (mcdm *TargetDummy) UpdateMajorCooldowns()

This function should be called if the CD for a major cooldown changes outside of the TryActivate() call.

func (*TargetDummy) UpdateMaxEnergy

func (eb *TargetDummy) UpdateMaxEnergy(sim *Simulation, bonusEnergy float64, metrics *ResourceMetrics)

Used for dynamic updates to maximum Energy, such as from the Druid Primal Madness talent

func (*TargetDummy) UpdateMaxHealth

func (hb *TargetDummy) UpdateMaxHealth(sim *Simulation, bonusHealth float64, metrics *ResourceMetrics)

Used for dynamic updates to maximum health from "Last Stand" effects

type TargetedActionMetrics

type TargetedActionMetrics struct {
	UnitIndex int32

	Casts        int32
	Hits         int32
	Crits        int32
	Ticks        int32
	CritTicks    int32
	Misses       int32
	Dodges       int32
	Parries      int32
	Blocks       int32
	CritBlocks   int32
	Glances      int32
	GlanceBlocks int32

	Damage            float64
	CritDamage        float64
	TickDamage        float64
	CritTickDamage    float64
	GlanceDamage      float64
	GlanceBlockDamage float64
	BlockDamage       float64
	CritBlockDamage   float64
	Threat            float64
	Healing           float64
	CritHealing       float64
	Shielding         float64
	CastTime          time.Duration
}

func (*TargetedActionMetrics) ToProto

type Task

type Task interface {
	RunTask(sim *Simulation) time.Duration
}

type TemporaryStatBuffWithStacksConfig

type TemporaryStatBuffWithStacksConfig struct {
	StackingAuraLabel    string
	StackingAuraActionID ActionID
	AuraLabel            string
	ActionID             ActionID
	BonusPerStack        stats.Stats
	MaxStacks            int32
	TimePerStack         time.Duration
	Duration             time.Duration
	TickImmediately      bool
	DecrementStacks      bool // Set to true if the aura should start at MaxStacks and decrement by 1 each tick
}

type TestGenerator

type TestGenerator interface {
	// The total number of tests that this generator can generate.
	NumTests() int

	// The name and API request for the test with the given index.
	GetTest(testIdx int) (string, *proto.ComputeStatsRequest, *proto.StatWeightsRequest, *proto.RaidSimRequest)
}

func FullCharacterTestSuiteGenerator

func FullCharacterTestSuiteGenerator(configs []CharacterSuiteConfig) []TestGenerator

FullCharacterTestSuiteGenerator generates a full test suite for a character. Also accepts JSON build config, Example: core.GetTestBuildFromJSON(proto.Class_ClassWarrior, "../../../ui/warrior/arms/builds", "default", ItemFilter, proto.Stat_StatStrength, nil)

type Timer

type Timer time.Duration

Stored value is the time at which the cooldown will be available again.

func (*Timer) IsReady

func (timer *Timer) IsReady(sim *Simulation) bool

func (*Timer) ReadyAt

func (timer *Timer) ReadyAt() time.Duration

func (*Timer) Reset

func (timer *Timer) Reset()

func (*Timer) Set

func (timer *Timer) Set(t time.Duration)

func (*Timer) TimeToReady

func (timer *Timer) TimeToReady(sim *Simulation) time.Duration

type Unit

type Unit struct {
	Type UnitType

	// Index of this unit with its group.
	//  For Players, this is the 0-indexed raid index (0-24).
	//  For Enemies, this is its enemy index.
	//  For Pets, this is the same as the owner's index.
	Index int32

	// Unique index of this unit among all units in the environment.
	// This is used as the index for attack tables.
	UnitIndex int32

	// Unique label for logging.
	Label string

	Level int32 // Level of Unit, e.g. Bosses are 83.

	MobType proto.MobType

	// Amount of time it takes for the human agent to react to in-game events.
	// Used by certain APL values and actions.
	ReactionTime time.Duration

	// Amount of time following a post-GCD channel tick, to when the next action can be performed.
	ChannelClipDelay time.Duration

	// How far this unit is from its target(s). Measured in yards, this is used
	// for calculating spell travel time for certain spells.
	StartDistanceFromTarget float64
	DistanceFromTarget      float64
	Moving                  bool

	// Environment in which this Unit exists. This will be nil until after the
	// construction phase.
	Env *Environment

	// Provides stat dependency management behavior.
	stats.StatDependencyManager

	PseudoStats stats.PseudoStats

	// All spells that can be cast by this unit.
	Spellbook []*Spell

	// Pets owned by this Unit.
	PetAgents []PetAgent

	DynamicStatsPets      []*Pet
	DynamicMeleeSpeedPets []*Pet
	DynamicCastSpeedPets  []*Pet
	RegenInheritancePets  []*Pet

	// AutoAttacks is the manager for auto attack swings.
	// Must be enabled to use, with "EnableAutoAttacks()".
	AutoAttacks AutoAttacks

	Rotation *APLRotation

	// Statistics describing the results of the sim.
	Metrics UnitMetrics

	AttackTables                 []*AttackTable
	DynamicDamageTakenModifiers  []DynamicDamageTakenModifier
	DynamicHealingTakenModifiers []DynamicHealingTakenModifier
	Blockhandler                 func(sim *Simulation, spell *Spell, result *SpellResult)

	GCD *Timer

	// Separate from GCD timer to support spell queueing and off-GCD actions
	RotationTimer *Timer

	// Used for applying the effect of a hardcast spell when casting finishes.
	//  For channeled spells, only Expires is set.
	// No more than one cast may be active at any given time.
	Hardcast Hardcast

	CastSpeed float64

	CurrentTarget *Unit

	SecondaryTarget *Unit // Only used for NPCs in tank swap AIs currently.

	// The currently-channeled DOT spell, otherwise nil.
	ChanneledDot *Dot

	// Data about the most recently queued spell, otherwise nil.
	QueuedSpell *QueuedSpell

	// Used for reacting to mastery stat changes
	OnMasteryStatChanged []OnMasteryStatChanged

	// Used for reacting to cast speed changes
	OnCastSpeedChanged []OnSpeedChanged

	// Used for reacting to melee attack speed changes
	OnMeleeAttackSpeedChanged []OnSpeedChanged

	// Used for reacting to ranged attack speed changes
	OnRangedAttackSpeedChanged []OnSpeedChanged

	// Used for reacting to melee and ranged haste changes
	OnMeleeAndRangedHasteChanged []OnSpeedChanged

	// Used for reacting to transient stat changes (e.g. for caching snapshotting calculations)
	OnTemporaryStatsChanges []OnTemporaryStatsChange

	GetSpellPowerValue GetSpellPowerValue

	GetAttackPowerValue GetAttackPowerValue

	SpellsInFlight map[*Spell]int32
	// contains filtered or unexported fields
}

Unit is an abstraction of a Character/Boss/Pet/etc, containing functionality shared by all of them.

func (*Unit) AddBonusRangedCritPercent

func (unit *Unit) AddBonusRangedCritPercent(percentage float64)

func (*Unit) AddBonusRangedHitPercent

func (unit *Unit) AddBonusRangedHitPercent(percentage float64)

func (*Unit) AddComboPoints

func (eb *Unit) AddComboPoints(sim *Simulation, pointsToAdd int32, target *Unit, metrics *ResourceMetrics)

func (*Unit) AddDynamicDamageTakenModifier

func (unit *Unit) AddDynamicDamageTakenModifier(ddtm DynamicDamageTakenModifier)

func (*Unit) AddDynamicHealingTakenModifier

func (unit *Unit) AddDynamicHealingTakenModifier(dhtm DynamicHealingTakenModifier)

func (*Unit) AddDynamicMod

func (unit *Unit) AddDynamicMod(config SpellModConfig) *SpellMod

func (*Unit) AddEnergy

func (eb *Unit) AddEnergy(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) AddFocus

func (fb *Unit) AddFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) AddMana

func (unit *Unit) AddMana(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) AddOnCastSpeedChanged

func (unit *Unit) AddOnCastSpeedChanged(ocsc OnSpeedChanged)

func (*Unit) AddOnMasteryStatChanged

func (unit *Unit) AddOnMasteryStatChanged(omsc OnMasteryStatChanged)

func (*Unit) AddOnMeleeAndRangedHasteChanged

func (unit *Unit) AddOnMeleeAndRangedHasteChanged(ocsc OnSpeedChanged)

func (*Unit) AddOnMeleeAttackSpeedChanged

func (unit *Unit) AddOnMeleeAttackSpeedChanged(ocsc OnSpeedChanged)

func (*Unit) AddOnRangedAttackSpeedChanged

func (unit *Unit) AddOnRangedAttackSpeedChanged(ocsc OnSpeedChanged)

func (*Unit) AddOnTemporaryStatsChange

func (unit *Unit) AddOnTemporaryStatsChange(otsc OnTemporaryStatsChange)

func (*Unit) AddRage

func (rb *Unit) AddRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) AddRunicPower

func (rp *Unit) AddRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) AddStat

func (unit *Unit) AddStat(stat stats.Stat, amount float64)

func (*Unit) AddStatDynamic

func (unit *Unit) AddStatDynamic(sim *Simulation, stat stats.Stat, amount float64)

func (*Unit) AddStaticMod

func (unit *Unit) AddStaticMod(config SpellModConfig)

func (*Unit) AddStats

func (unit *Unit) AddStats(stat stats.Stats)

func (*Unit) AddStatsDynamic

func (unit *Unit) AddStatsDynamic(sim *Simulation, bonus stats.Stats)

func (*Unit) AddUnscaledRunicPower

func (rp *Unit) AddUnscaledRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) Advance

func (rp *Unit) Advance(sim *Simulation, newTime time.Duration)

func (*Unit) AllRunesSpent

func (rp *Unit) AllRunesSpent() bool

func (*Unit) AnyDepletedRunes

func (rp *Unit) AnyDepletedRunes() bool

func (*Unit) AnyRuneReadyAt

func (rp *Unit) AnyRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) AnySpentRuneReadyAt

func (rp *Unit) AnySpentRuneReadyAt() time.Duration

AnySpentRuneReadyAt returns the next time that a rune will regenerate. It will be NeverExpires if there is no rune pending regeneration.

func (*Unit) ApplyCastSpeed

func (unit *Unit) ApplyCastSpeed(dur time.Duration) time.Duration

func (*Unit) ApplyCastSpeedForSpell

func (unit *Unit) ApplyCastSpeedForSpell(dur time.Duration, spell *Spell) time.Duration

func (*Unit) ApplyRangedSpeed added in v0.0.6

func (unit *Unit) ApplyRangedSpeed(dur time.Duration) time.Duration

ApplyRangedSpeed applies ranged haste to a duration, for ranged abilities that should be affected by ranged haste

func (*Unit) ApplyRealHaste added in v0.0.7

func (unit *Unit) ApplyRealHaste(dur time.Duration) time.Duration

func (*Unit) Armor

func (unit *Unit) Armor() float64

func (*Unit) BlockDamageReduction

func (unit *Unit) BlockDamageReduction() float64

func (*Unit) BloodDeathRuneBothReadyAt

func (rp *Unit) BloodDeathRuneBothReadyAt() time.Duration

func (*Unit) BloodRuneReadyAt

func (rp *Unit) BloodRuneReadyAt(sim *Simulation) time.Duration

BloodRuneReadyAt returns the earliest time a (possibly death-converted) blood rune is ready.

func (*Unit) CanQueueSpell

func (unit *Unit) CanQueueSpell(sim *Simulation) bool

Enforce only one queued spell per timestep

func (*Unit) CancelGCDTimer

func (unit *Unit) CancelGCDTimer(sim *Simulation)

Call this to stop the GCD loop for a unit. This is mostly used for pets that get summoned / expire.

func (*Unit) CancelHardcast

func (unit *Unit) CancelHardcast(sim *Simulation)

func (*Unit) CancelQueuedSpell

func (unit *Unit) CancelQueuedSpell(sim *Simulation)

func (*Unit) ComboPoints

func (eb *Unit) ComboPoints() int32

func (*Unit) ConvertAndRegenBloodTapRune added in v0.0.1

func (rp *Unit) ConvertAndRegenBloodTapRune(sim *Simulation, spell *Spell, runeMetrics []*ResourceMetrics) bool

Blood tap prioritizes runes based on spec Blood prefers to regen B runes first, then the F/U rune with the highest CD if no blood runes are available. Frost prefers to regen U runes first, then the B/F rune with the highest CD if no other runes are available. Unholy prefers to regen a B/F rune with the highest CD first, then an U rune if no other runes are available.

func (*Unit) ConvertAndRegenPlagueLeechRunes added in v0.0.1

func (rp *Unit) ConvertAndRegenPlagueLeechRunes(sim *Simulation, spell *Spell, runeMetrics []*ResourceMetrics)

Plague leech prioritizes runes based on spec Unholy prefers to regen a pair of B/F runes first, then U if no other runes are available. Blood and Frost prefers to regen a pair of F/U runes first, then B if no other runes are available.

func (*Unit) ConvertFromDeath

func (rp *Unit) ConvertFromDeath(sim *Simulation, slot int8)

ConvertFromDeath reverts the rune to its original type.

func (*Unit) ConvertToDeath

func (rp *Unit) ConvertToDeath(sim *Simulation, slot int8, revertAt time.Duration)

ConvertToDeath converts the given slot to death and sets up the reversion conditions

func (*Unit) CurrentBloodOrDeathRunes

func (rp *Unit) CurrentBloodOrDeathRunes() int8

func (*Unit) CurrentBloodRunes

func (rp *Unit) CurrentBloodRunes() int8

func (*Unit) CurrentDeathRunes

func (rp *Unit) CurrentDeathRunes() int8

func (*Unit) CurrentEnergy

func (eb *Unit) CurrentEnergy() float64

func (*Unit) CurrentEnergyRegenMultiplier

func (eb *Unit) CurrentEnergyRegenMultiplier() float64

func (*Unit) CurrentFocus

func (fb *Unit) CurrentFocus() float64

func (*Unit) CurrentFrostOrDeathRunes

func (rp *Unit) CurrentFrostOrDeathRunes() int8

func (*Unit) CurrentFrostRunes

func (rp *Unit) CurrentFrostRunes() int8

func (*Unit) CurrentHealth

func (hb *Unit) CurrentHealth() float64

func (*Unit) CurrentHealthPercent

func (hb *Unit) CurrentHealthPercent() float64

func (*Unit) CurrentMana

func (unit *Unit) CurrentMana() float64

func (*Unit) CurrentManaPercent

func (unit *Unit) CurrentManaPercent() float64

func (*Unit) CurrentRage

func (rb *Unit) CurrentRage() float64

func (*Unit) CurrentRunicPower

func (rp *Unit) CurrentRunicPower() float64

func (*Unit) CurrentUnholyOrDeathRunes

func (rp *Unit) CurrentUnholyOrDeathRunes() int8

func (*Unit) CurrentUnholyRunes

func (rp *Unit) CurrentUnholyRunes() int8

func (*Unit) DeathRuneRegenAt

func (rp *Unit) DeathRuneRegenAt(slot int32) time.Duration

DeathRuneRegenAt returns the time the given death rune will regen at. If the rune is not death or not spent it returns NeverExpires.

func (*Unit) DeathRuneRevertAt

func (rp *Unit) DeathRuneRevertAt() time.Duration

DeathRuneRevertAt returns the next time that a death rune will revert. If there is no death rune that needs to revert it returns NeverExpires.

func (*Unit) DeathRunesInFU

func (rp *Unit) DeathRunesInFU() int8

func (*Unit) DebugString

func (rp *Unit) DebugString() string

func (*Unit) DisableBuildPhaseStatDep

func (unit *Unit) DisableBuildPhaseStatDep(sim *Simulation, dep *stats.StatDependency)

func (*Unit) DisableDynamicStatDep

func (unit *Unit) DisableDynamicStatDep(sim *Simulation, dep *stats.StatDependency)

func (*Unit) EnableAutoAttacks

func (unit *Unit) EnableAutoAttacks(agent Agent, options AutoAttackOptions)

func (*Unit) EnableBuildPhaseStatDep

func (unit *Unit) EnableBuildPhaseStatDep(sim *Simulation, dep *stats.StatDependency)

func (*Unit) EnableDynamicStatDep

func (unit *Unit) EnableDynamicStatDep(sim *Simulation, dep *stats.StatDependency)

func (*Unit) EnableEnergyBar

func (unit *Unit) EnableEnergyBar(options EnergyBarOptions)

func (*Unit) EnableFocusBar

func (unit *Unit) EnableFocusBar(maxFocus float64, baseFocusPerSecond float64, isPlayer bool, onFocusGain OnFocusGain, hasHasteRatingScaling bool)

func (*Unit) EnableHealthBar

func (unit *Unit) EnableHealthBar()

func (*Unit) EnableRageBar

func (unit *Unit) EnableRageBar(options RageBarOptions)

func (*Unit) EndOOMEvent

func (mb *Unit) EndOOMEvent(sim *Simulation)

func (*Unit) EnergyRegenPerSecond

func (eb *Unit) EnergyRegenPerSecond() float64

func (*Unit) ExecuteCustomRotation

func (unit *Unit) ExecuteCustomRotation(sim *Simulation)

func (*Unit) ExecuteResourceGain

func (unit *Unit) ExecuteResourceGain(sim *Simulation, resource proto.ResourceType, amount float64, metrics *ResourceMetrics)

func (*Unit) ExtendGCDUntil

func (unit *Unit) ExtendGCDUntil(sim *Simulation, readyTime time.Duration)

func (*Unit) FinalizeMovement

func (unit *Unit) FinalizeMovement(sim *Simulation)

func (*Unit) FocusRegenPerSecond

func (fb *Unit) FocusRegenPerSecond() float64

func (*Unit) FocusRegenPerTick

func (fb *Unit) FocusRegenPerTick() float64

func (*Unit) FrostRuneReadyAt

func (rp *Unit) FrostRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) GainHealth

func (hb *Unit) GainHealth(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) GetActiveAuraWithTag

func (at *Unit) GetActiveAuraWithTag(tag string) *Aura

func (*Unit) GetAllOpponents added in v0.0.10

func (unit *Unit) GetAllOpponents() []*Unit

func (*Unit) GetAura

func (at *Unit) GetAura(label string) *Aura

func (*Unit) GetAuraByID

func (at *Unit) GetAuraByID(actionID ActionID) *Aura

func (*Unit) GetAuras

func (at *Unit) GetAuras() []*Aura

func (*Unit) GetAurasWithTag

func (at *Unit) GetAurasWithTag(tag string) []*Aura

func (*Unit) GetCurrentPowerBar

func (unit *Unit) GetCurrentPowerBar() PowerBarType

func (*Unit) GetDiminishedBlockChance

func (unit *Unit) GetDiminishedBlockChance() float64

func (*Unit) GetDiminishedDodgeChance

func (unit *Unit) GetDiminishedDodgeChance() float64

func (*Unit) GetDiminishedParryChance

func (unit *Unit) GetDiminishedParryChance() float64

func (*Unit) GetEnemyExclusiveCategories

func (caster *Unit) GetEnemyExclusiveCategories(category string) ExclusiveCategoryArray

func (*Unit) GetHighestStatType

func (unit *Unit) GetHighestStatType(statTypeOptions []stats.Stat) stats.Stat

Given an array of Stat types, return the Stat whose value is largest for this Unit.

func (*Unit) GetIcdAuraByID

func (at *Unit) GetIcdAuraByID(actionID ActionID) *Aura

func (*Unit) GetInitialStat

func (unit *Unit) GetInitialStat(stat stats.Stat) float64

func (*Unit) GetMasteryPoints

func (unit *Unit) GetMasteryPoints() float64

func (*Unit) GetMetadata

func (unit *Unit) GetMetadata() *proto.UnitMetadata

func (*Unit) GetMetricsProto

func (at *Unit) GetMetricsProto() []*proto.AuraMetrics

func (*Unit) GetMovementSpeed

func (unit *Unit) GetMovementSpeed() float64

Returns the units current movement speed in yards / second

func (*Unit) GetOrInitTimer

func (unit *Unit) GetOrInitTimer(timer **Timer) *Timer

Helper for shared timers that are not always needed, so it is only allocated if necessary.

func (*Unit) GetOrRegisterAura

func (unit *Unit) GetOrRegisterAura(aura Aura) *Aura

func (*Unit) GetOrRegisterSpell

func (unit *Unit) GetOrRegisterSpell(config SpellConfig) *Spell

Retrieves an existing spell with the same ID as the config uses, or registers it if there is none.

func (*Unit) GetRuneRegenMultiplier

func (rp *Unit) GetRuneRegenMultiplier() float64

func (*Unit) GetSecondaryResourceBar

func (unit *Unit) GetSecondaryResourceBar() SecondaryResourceBar

func (*Unit) GetSpell

func (unit *Unit) GetSpell(actionID ActionID) *Spell

Returns the first registered spell with the given ID, or nil if there are none.

func (*Unit) GetSpellsMatchingSchool

func (unit *Unit) GetSpellsMatchingSchool(school SpellSchool) []*Spell

func (*Unit) GetStat

func (unit *Unit) GetStat(stat stats.Stat) float64

func (*Unit) GetStats

func (unit *Unit) GetStats() stats.Stats

func (*Unit) GetStatsWithoutDeps added in v0.0.104

func (unit *Unit) GetStatsWithoutDeps() stats.Stats

func (*Unit) GetTotalAvoidanceChance

func (unit *Unit) GetTotalAvoidanceChance(atkTable *AttackTable) float64

func (*Unit) GetTotalBlockChanceAsDefender

func (unit *Unit) GetTotalBlockChanceAsDefender(atkTable *AttackTable) float64

func (*Unit) GetTotalChanceToBeMissedAsDefender

func (unit *Unit) GetTotalChanceToBeMissedAsDefender(atkTable *AttackTable) float64

func (*Unit) GetTotalDodgeChanceAsDefender

func (unit *Unit) GetTotalDodgeChanceAsDefender(atkTable *AttackTable) float64

func (*Unit) GetTotalParryChanceAsDefender

func (unit *Unit) GetTotalParryChanceAsDefender(atkTable *AttackTable) float64

func (*Unit) GetUnit

func (unit *Unit) GetUnit(ref *proto.UnitReference) *Unit

func (*Unit) HasActiveAura

func (at *Unit) HasActiveAura(label string) bool

func (*Unit) HasActiveAuraWithTag

func (at *Unit) HasActiveAuraWithTag(tag string) bool

func (*Unit) HasActiveAuraWithTagExcludingAura

func (at *Unit) HasActiveAuraWithTagExcludingAura(tag string, excludeAura *Aura) bool

func (*Unit) HasAura

func (at *Unit) HasAura(label string) bool

func (*Unit) HasAuraWithTag

func (at *Unit) HasAuraWithTag(tag string) bool

func (*Unit) HasEnergyBar

func (unit *Unit) HasEnergyBar() bool

func (*Unit) HasFocusBar

func (unit *Unit) HasFocusBar() bool

func (*Unit) HasHealthBar

func (unit *Unit) HasHealthBar() bool

func (*Unit) HasManaBar

func (unit *Unit) HasManaBar() bool

func (*Unit) HasRageBar

func (unit *Unit) HasRageBar() bool

func (*Unit) HasRunicPowerBar

func (unit *Unit) HasRunicPowerBar() bool

func (*Unit) HasTemporaryBonusForStat

func (unit *Unit) HasTemporaryBonusForStat(stat stats.Stat) bool

Returns whether the indicates stat is currently modified by a temporary bonus.

func (*Unit) HasTemporaryMeleeSwingSpeedIncrease

func (unit *Unit) HasTemporaryMeleeSwingSpeedIncrease() bool

Returns if melee swings have any temporary increases active.

func (*Unit) HasTemporaryRangedSwingSpeedIncrease

func (unit *Unit) HasTemporaryRangedSwingSpeedIncrease() bool

Returns if ranged swings have any temporary increases active.

func (*Unit) HasTemporarySpellCastSpeedIncrease

func (unit *Unit) HasTemporarySpellCastSpeedIncrease() bool

Returns if spell casting has any temporary increases active.

func (*Unit) HasteEffectsManaRegen

func (unit *Unit) HasteEffectsManaRegen()

func (*Unit) HasteEffectsRegen

func (unit *Unit) HasteEffectsRegen()

func (*Unit) InitialCastSpeed

func (unit *Unit) InitialCastSpeed() float64

func (*Unit) IsActive

func (unit *Unit) IsActive() bool

func (*Unit) IsCastingDuringChannel added in v0.0.17

func (unit *Unit) IsCastingDuringChannel() bool

func (*Unit) IsChanneling added in v0.0.17

func (unit *Unit) IsChanneling() bool

func (*Unit) IsEnabled

func (unit *Unit) IsEnabled() bool

Units can be disabled for several reasons:

  1. Downtime for temporary pets (e.g. Water Elemental)
  2. Enemy units in various phases (not yet implemented)
  3. Dead units (not yet implemented)

func (*Unit) IsOOM

func (mb *Unit) IsOOM() bool

func (*Unit) IsOpponent

func (unit *Unit) IsOpponent(other *Unit) bool

func (*Unit) IsReset

func (eb *Unit) IsReset(sim *Simulation) bool

func (*Unit) LeftBloodRuneReady

func (rp *Unit) LeftBloodRuneReady() bool

func (*Unit) Log

func (unit *Unit) Log(sim *Simulation, message string, vals ...interface{})

func (*Unit) LogLabel

func (unit *Unit) LogLabel() string

func (*Unit) MHNormalizedWeaponDamage

func (unit *Unit) MHNormalizedWeaponDamage(sim *Simulation, attackPower float64) float64

func (*Unit) MHWeaponDamage

func (unit *Unit) MHWeaponDamage(sim *Simulation, attackPower float64) float64

func (*Unit) MP5ManaRegenPerSecond

func (unit *Unit) MP5ManaRegenPerSecond() float64

Returns the rate of mana regen per second from mp5.

func (*Unit) MakeProcTriggerAura added in v0.0.125

func (unit *Unit) MakeProcTriggerAura(config ProcTrigger) *Aura

func (*Unit) ManaRegenPerSecondWhileCombat

func (unit *Unit) ManaRegenPerSecondWhileCombat() float64

Returns the rate of mana regen per second, assuming this unit is considered to be casting.

func (*Unit) ManaRegenPerSecondWhileNotCombat

func (unit *Unit) ManaRegenPerSecondWhileNotCombat() float64

Returns the rate of mana regen per second, assuming this unit is considered to be not casting.

func (*Unit) ManaTick

func (unit *Unit) ManaTick(sim *Simulation)

Applies 1 'tick' of mana regen, which worth 2s of regeneration based on mp5/int/spirit/etc.

func (*Unit) MaxComboPoints

func (eb *Unit) MaxComboPoints() int32

func (*Unit) MaxHealth

func (hb *Unit) MaxHealth() float64

func (*Unit) MaxMana

func (unit *Unit) MaxMana() float64

Gets the Maxiumum mana including bonus and temporary affects that would increase your mana pool.

func (*Unit) MaximumEnergy

func (eb *Unit) MaximumEnergy() float64

func (*Unit) MaximumFocus

func (fb *Unit) MaximumFocus() float64

func (*Unit) MaximumRage

func (rb *Unit) MaximumRage() float64

func (*Unit) MaximumRunicPower

func (rp *Unit) MaximumRunicPower() float64

func (*Unit) MoveDuration

func (unit *Unit) MoveDuration(duration time.Duration, sim *Simulation)

func (*Unit) MoveTo

func (unit *Unit) MoveTo(moveRange float64, sim *Simulation)

func (*Unit) MultiplyAttackSpeed

func (unit *Unit) MultiplyAttackSpeed(sim *Simulation, amount float64)

Helper for when true haste effects are multiplied for i.E. Bloodlust Seems to also always impact the regen rate

func (*Unit) MultiplyAutoAttackRageGen

func (rb *Unit) MultiplyAutoAttackRageGen(multiplier float64)

Call this within the OnGain and OnExpire callbacks for Battle Stance, Raging Whirlwind, etc.

func (*Unit) MultiplyCastSpeed

func (unit *Unit) MultiplyCastSpeed(sim *Simulation, amount float64)

func (*Unit) MultiplyEnergyRegenSpeed

func (eb *Unit) MultiplyEnergyRegenSpeed(sim *Simulation, multiplier float64)

func (*Unit) MultiplyFocusRegenSpeed

func (fb *Unit) MultiplyFocusRegenSpeed(sim *Simulation, multiplier float64)

func (*Unit) MultiplyManaRegenSpeed

func (unit *Unit) MultiplyManaRegenSpeed(sim *Simulation, multiplier float64)

func (*Unit) MultiplyMeleeSpeed

func (unit *Unit) MultiplyMeleeSpeed(sim *Simulation, amount float64)

MultiplyMeleeSpeed will alter the attack speed multiplier and change swing speed of all autoattack swings in progress.

func (*Unit) MultiplyMovementSpeed

func (unit *Unit) MultiplyMovementSpeed(sim *Simulation, amount float64)

func (*Unit) MultiplyRageGen added in v0.0.105

func (rb *Unit) MultiplyRageGen(multiplier float64)

func (*Unit) MultiplyRangedHaste added in v0.0.3

func (unit *Unit) MultiplyRangedHaste(sim *Simulation, amount float64)

Used for "Ranged haste" effects that modify both attack speed and focus regen, like Rapid Fire and Focus Fire

func (*Unit) MultiplyRangedSpeed

func (unit *Unit) MultiplyRangedSpeed(sim *Simulation, amount float64)

Used for "Ranged attack speed" effects like Steady Focus and Serpent's Swiftness

func (*Unit) MultiplyResourceRegenSpeed

func (unit *Unit) MultiplyResourceRegenSpeed(sim *Simulation, amount float64)

Helper for multiplying resource generation speed

func (*Unit) MultiplyRuneRegenSpeed

func (rp *Unit) MultiplyRuneRegenSpeed(sim *Simulation, multiplier float64)

func (*Unit) MultiplyRunicRegen

func (rp *Unit) MultiplyRunicRegen(multiply float64)

func (*Unit) NewAPLAction

func (unit *Unit) NewAPLAction(rot *APLRotation, config *proto.APLAction) APLActionImpl

Default implementation of Agent.NewAPLAction so each spec doesn't need this boilerplate.

func (*Unit) NewAPLValue

func (unit *Unit) NewAPLValue(rot *APLRotation, config *proto.APLValue) APLValue

Default implementation of Agent.NewAPLValue so each spec doesn't need this boilerplate.

func (*Unit) NewAllyAuraArray

func (caster *Unit) NewAllyAuraArray(makeAura func(*Unit) *Aura) AuraArray

func (*Unit) NewAllyDamageAbsorptionAuraArray

func (caster *Unit) NewAllyDamageAbsorptionAuraArray(makeAura func(*Unit) *DamageAbsorptionAura) DamageAbsorptionAuraArray

func (*Unit) NewBloodRuneMetrics

func (rp *Unit) NewBloodRuneMetrics(action ActionID) *ResourceMetrics

func (*Unit) NewChiMetrics

func (unit *Unit) NewChiMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NewComboPointMetrics

func (unit *Unit) NewComboPointMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NewDamageAbsorptionAura

func (unit *Unit) NewDamageAbsorptionAura(config AbsorptionAuraConfig) *DamageAbsorptionAura

func (*Unit) NewDeathRuneMetrics

func (rp *Unit) NewDeathRuneMetrics(action ActionID) *ResourceMetrics

func (*Unit) NewDefaultSecondaryResourceBar

func (unit *Unit) NewDefaultSecondaryResourceBar(config SecondaryResourceConfig) *DefaultSecondaryResourceBarImpl

func (*Unit) NewEnemyAuraArray

func (caster *Unit) NewEnemyAuraArray(makeAura func(*Unit) *Aura) AuraArray

func (*Unit) NewEnemyExclusiveCategoryArray

func (caster *Unit) NewEnemyExclusiveCategoryArray(makeExclusiveCategory func(*Unit) *ExclusiveCategory) ExclusiveCategoryArray

func (*Unit) NewEnergyMetrics

func (unit *Unit) NewEnergyMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NewFocusMetrics

func (unit *Unit) NewFocusMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NewFrostRuneMetrics

func (rp *Unit) NewFrostRuneMetrics(action ActionID) *ResourceMetrics

func (*Unit) NewGenericMetric

func (unit *Unit) NewGenericMetric(actionID ActionID) *ResourceMetrics

func (*Unit) NewHealthMetrics

func (unit *Unit) NewHealthMetrics(actionID ActionID) *ResourceMetrics

Convenience helpers for NewResourceMetrics.

func (*Unit) NewManaMetrics

func (unit *Unit) NewManaMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NewPassiveMovementSpeedAura added in v0.0.82

func (unit *Unit) NewPassiveMovementSpeedAura(label string, actionID ActionID, multiplier float64) *Aura

func (*Unit) NewRageMetrics

func (unit *Unit) NewRageMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NewRunicPowerMetrics

func (rp *Unit) NewRunicPowerMetrics(action ActionID) *ResourceMetrics

func (*Unit) NewTimer

func (unit *Unit) NewTimer() *Timer

func (*Unit) NewUnholyRuneMetrics

func (rp *Unit) NewUnholyRuneMetrics(action ActionID) *ResourceMetrics

func (*Unit) NextBloodRuneReadyAt

func (rp *Unit) NextBloodRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) NextEnergyTickAt

func (eb *Unit) NextEnergyTickAt() time.Duration

func (*Unit) NextFocusTickAt

func (fb *Unit) NextFocusTickAt() time.Duration

func (*Unit) NextFrostRuneReadyAt

func (rp *Unit) NextFrostRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) NextGCDAt

func (unit *Unit) NextGCDAt() time.Duration

func (*Unit) NextRotationActionAt

func (unit *Unit) NextRotationActionAt() time.Duration

func (*Unit) NextUnholyRuneReadyAt

func (rp *Unit) NextUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) NormalFrostRuneReadyAt

func (rp *Unit) NormalFrostRuneReadyAt(sim *Simulation) time.Duration

NormalFrostRuneReadyAt returns the earliest time a non-death frost rune is ready.

func (*Unit) NormalSpentBloodRuneReadyAt

func (rp *Unit) NormalSpentBloodRuneReadyAt(_ *Simulation) time.Duration

NormalSpentBloodRuneReadyAt returns the earliest time a spent non-death blood rune is ready.

func (*Unit) NormalUnholyRuneReadyAt

func (rp *Unit) NormalUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) NumActiveAurasWithTag

func (at *Unit) NumActiveAurasWithTag(tag string) int32

func (*Unit) OHNormalizedWeaponDamage

func (unit *Unit) OHNormalizedWeaponDamage(sim *Simulation, attackPower float64) float64

func (*Unit) OHWeaponDamage

func (unit *Unit) OHWeaponDamage(sim *Simulation, attackPower float64) float64

func (*Unit) OnApplyEffects

func (at *Unit) OnApplyEffects(sim *Simulation, target *Unit, spell *Spell)

Invokes the OnApplyEffects event for all tracked Auras.

func (*Unit) OnCastComplete

func (at *Unit) OnCastComplete(sim *Simulation, spell *Spell)

Invokes the OnCastComplete event for all tracked Auras.

func (*Unit) OnEncounterStart added in v0.0.13

func (at *Unit) OnEncounterStart(sim *Simulation)

func (*Unit) OnHealDealt

func (at *Unit) OnHealDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnHeal event for all tracked Auras.

func (*Unit) OnHealTaken

func (at *Unit) OnHealTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Unit) OnMovement

func (unit *Unit) OnMovement(sim *Simulation, position float64, kind MovementUpdateType)

func (*Unit) OnPeriodicDamageDealt

func (at *Unit) OnPeriodicDamageDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnPeriodicDamage

As a debuff when target is being hit by dot.
As a buff when caster's dots are ticking.

func (*Unit) OnPeriodicDamageTaken

func (at *Unit) OnPeriodicDamageTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Unit) OnPeriodicHealDealt

func (at *Unit) OnPeriodicHealDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnPeriodicHeal

As a debuff when target is being hit by dot.
As a buff when caster's dots are ticking.

func (*Unit) OnPeriodicHealTaken

func (at *Unit) OnPeriodicHealTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Unit) OnSpellHitDealt

func (at *Unit) OnSpellHitDealt(sim *Simulation, spell *Spell, result *SpellResult)

Invokes the OnSpellHit event for all tracked Auras.

func (*Unit) OnSpellHitTaken

func (at *Unit) OnSpellHitTaken(sim *Simulation, spell *Spell, result *SpellResult)

func (*Unit) OnSpellRegistered

func (unit *Unit) OnSpellRegistered(handler SpellRegisteredHandler)

func (*Unit) OptimalRuneCost

func (rp *Unit) OptimalRuneCost(cost RuneCost) RuneCost

func (*Unit) QueueSpell

func (unit *Unit) QueueSpell(sim *Simulation, spell *Spell, target *Unit, queueAt time.Duration)

func (*Unit) RangedNormalizedWeaponDamage

func (unit *Unit) RangedNormalizedWeaponDamage(sim *Simulation, attackPower float64) float64

func (*Unit) RangedWeaponDamage

func (unit *Unit) RangedWeaponDamage(sim *Simulation, attackPower float64) float64

func (*Unit) ReactToEvent

func (unit *Unit) ReactToEvent(sim *Simulation, randomizeReactionTime bool)

Call this when reacting to events that occur before the next scheduled rotation action

func (*Unit) RegenAllFrostAndUnholyRunesAsDeath

func (rp *Unit) RegenAllFrostAndUnholyRunesAsDeath(sim *Simulation, deathRuneMetrics *ResourceMetrics)

func (*Unit) RegenAllRunes

func (rp *Unit) RegenAllRunes(sim *Simulation, metrics []*ResourceMetrics)

func (*Unit) RegenRunicEmpowermentRune added in v0.0.1

func (rp *Unit) RegenRunicEmpowermentRune(sim *Simulation, runeMetrics []*ResourceMetrics)

Runic Empowerment regens a randoom fully depleted rune

func (*Unit) RegisterAura

func (unit *Unit) RegisterAura(aura Aura) *Aura

func (*Unit) RegisterMovementCallback

func (unit *Unit) RegisterMovementCallback(callback MovementCallback)

func (*Unit) RegisterNewDefaultSecondaryResourceBar

func (unit *Unit) RegisterNewDefaultSecondaryResourceBar(config SecondaryResourceConfig) SecondaryResourceBar

func (*Unit) RegisterPrepullAction

func (unit *Unit) RegisterPrepullAction(doAt APLValue, action func(*Simulation))

Registers a callback to this Unit which will be invoked on the prepull at the specified negative time.

func (*Unit) RegisterResetEffect

func (at *Unit) RegisterResetEffect(resetEffect ResetEffect)

Registers a callback to this Character which will be invoked on every Sim reset.

func (*Unit) RegisterSecondaryResourceBar

func (unit *Unit) RegisterSecondaryResourceBar(config SecondaryResourceBar)

func (*Unit) RegisterSpell

func (unit *Unit) RegisterSpell(config SpellConfig) *Spell

Registers a new spell to the unit. Returns the newly created spell.

func (*Unit) RemoveHealth

func (hb *Unit) RemoveHealth(sim *Simulation, amount float64)

func (*Unit) ResetComboPoints added in v0.0.13

func (eb *Unit) ResetComboPoints(sim *Simulation, comboPointsToKeep int32)

func (*Unit) ResetEnergyTick

func (eb *Unit) ResetEnergyTick(sim *Simulation)

Gives an immediate partial energy tick and restarts the tick timer.

func (*Unit) ResetFocusTick

func (fb *Unit) ResetFocusTick(sim *Simulation)

Gives an immediate partial Focus tick and restarts the tick timer.

func (*Unit) ResetRageBar added in v0.0.13

func (rb *Unit) ResetRageBar(sim *Simulation, rageToKeep float64)

func (*Unit) ResetRunicPowerBar added in v0.0.13

func (rp *Unit) ResetRunicPowerBar(sim *Simulation, runicPowerToKeep float64)

func (*Unit) RuneIsActive

func (rp *Unit) RuneIsActive(slot int8) bool

func (*Unit) RuneIsDeath

func (rp *Unit) RuneIsDeath(slot int8) bool

func (*Unit) RuneReadyAt

func (rp *Unit) RuneReadyAt(sim *Simulation, slot int8) time.Duration

func (*Unit) SetCurrentPowerBar

func (unit *Unit) SetCurrentPowerBar(bar PowerBarType)

func (*Unit) SetGCDTimer

func (unit *Unit) SetGCDTimer(sim *Simulation, gcdReadyAt time.Duration)

func (*Unit) SetMaxComboPoints

func (eb *Unit) SetMaxComboPoints(maxComboPoints int32)

func (*Unit) SetPermanentDeathRunes

func (rp *Unit) SetPermanentDeathRunes(permanentDeaths []int8)

func (*Unit) SetRotationTimer

func (unit *Unit) SetRotationTimer(sim *Simulation, rotationReadyAt time.Duration)

func (*Unit) SetRuneCd

func (rp *Unit) SetRuneCd(runeCd time.Duration)

func (*Unit) SpellGCD

func (unit *Unit) SpellGCD() time.Duration

func (*Unit) SpellInFlight added in v0.0.104

func (unit *Unit) SpellInFlight(spell *Spell) bool

func (*Unit) SpellInFlightByID added in v0.0.104

func (unit *Unit) SpellInFlightByID(spellID int32) bool

func (*Unit) SpendComboPoints

func (eb *Unit) SpendComboPoints(sim *Simulation, metrics *ResourceMetrics)

func (*Unit) SpendEnergy

func (eb *Unit) SpendEnergy(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) SpendFocus

func (fb *Unit) SpendFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) SpendMana

func (unit *Unit) SpendMana(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) SpendPartialComboPoints

func (eb *Unit) SpendPartialComboPoints(sim *Simulation, pointsToSpend int32, metrics *ResourceMetrics)

func (*Unit) SpendRage

func (rb *Unit) SpendRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) SpendRuneReadyAt

func (rp *Unit) SpendRuneReadyAt(slot int8, spendAt time.Duration) time.Duration

func (*Unit) SpendRunicPower

func (rp *Unit) SpendRunicPower(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) SpiritManaRegenPerSecond

func (unit *Unit) SpiritManaRegenPerSecond() float64

Returns the rate of mana regen per second from spirit.

func (*Unit) StartOOMEvent

func (mb *Unit) StartOOMEvent(sim *Simulation, requiredMana float64)

func (*Unit) TimeToTargetEnergy

func (eb *Unit) TimeToTargetEnergy(targetEnergy float64) time.Duration

func (*Unit) TimeToTargetFocus

func (fb *Unit) TimeToTargetFocus(targetFocus float64) time.Duration

func (*Unit) TimeUntilManaRegen

func (unit *Unit) TimeUntilManaRegen(desiredMana float64) time.Duration

Returns the amount of time this Unit would need to wait in order to reach the desired amount of mana, via mana regen.

Assumes that desiredMana > currentMana. Calculation assumes the Unit will not take any actions during this period that would reset the 5-second rule.

func (*Unit) TotalMeleeHasteMultiplier

func (unit *Unit) TotalMeleeHasteMultiplier() float64

func (*Unit) TotalRangedHasteMultiplier

func (unit *Unit) TotalRangedHasteMultiplier() float64

func (*Unit) TotalRealHasteMultiplier

func (unit *Unit) TotalRealHasteMultiplier() float64

Returns the real haste multiplier only including equip haste and real haste modifiers like lust Same value for ranged and melee Real Haste mods: MELEE_SLOW MOD_MELEE_HASTE MOD_MELEE_RANGED_HASTE MOD_RANGED_HASTE

Not Real Haste mods: MOD_MELEE_HASTE_2 MOD_MELEE_HASTE_3 MOD_MELEE_RANGED_HASTE_2 MOD_MELEE_RANGED_HASTE_3 MOD_RANGED_HASTE_2 MOD_RANGED_HASTE_3 MOD_CASTING_SPEED_NOT_STACK

func (*Unit) TotalSpellHasteMultiplier

func (unit *Unit) TotalSpellHasteMultiplier() float64

func (*Unit) UnholyRuneReadyAt

func (rp *Unit) UnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) UpdateDynamicStatDep

func (unit *Unit) UpdateDynamicStatDep(sim *Simulation, dep *stats.StatDependency, newAmount float64)

func (*Unit) UpdateManaRegenRates

func (unit *Unit) UpdateManaRegenRates()

func (*Unit) UpdateMaxEnergy

func (eb *Unit) UpdateMaxEnergy(sim *Simulation, bonusEnergy float64, metrics *ResourceMetrics)

Used for dynamic updates to maximum Energy, such as from the Druid Primal Madness talent

func (*Unit) UpdateMaxHealth

func (hb *Unit) UpdateMaxHealth(sim *Simulation, bonusHealth float64, metrics *ResourceMetrics)

Used for dynamic updates to maximum health from "Last Stand" effects

func (*Unit) UpdatePosition

func (unit *Unit) UpdatePosition(sim *Simulation)

func (*Unit) WaitUntil

func (unit *Unit) WaitUntil(sim *Simulation, readyTime time.Duration)

type UnitMetrics

type UnitMetrics struct {
	CharacterIterationMetrics
	// contains filtered or unexported fields
}

func NewUnitMetrics

func NewUnitMetrics() UnitMetrics

func (*UnitMetrics) AddFinalPetMetrics

func (unitMetrics *UnitMetrics) AddFinalPetMetrics(petMetrics *UnitMetrics)

This should be called at the end of each iteration, to include metrics from Pets in those of their owner. Assumes that doneIteration() has already been called on the pet metrics.

func (*UnitMetrics) AddOOMTime

func (unitMetrics *UnitMetrics) AddOOMTime(sim *Simulation, dur time.Duration)

func (*UnitMetrics) IsTanking

func (unitMetrics *UnitMetrics) IsTanking() bool

func (*UnitMetrics) MarkOOM

func (unitMetrics *UnitMetrics) MarkOOM(sim *Simulation)

func (*UnitMetrics) NewResourceMetrics

func (unitMetrics *UnitMetrics) NewResourceMetrics(actionID ActionID, resourceType proto.ResourceType) *ResourceMetrics

func (*UnitMetrics) ToProto

func (unitMetrics *UnitMetrics) ToProto() *proto.UnitMetrics

type UnitReference

type UnitReference struct {
	Type proto.UnitReference_Type
	// contains filtered or unexported fields
}

Struct for handling unit references, to account for values that can change dynamically (e.g. CurrentTarget).

func NewUnitReference

func NewUnitReference(ref *proto.UnitReference, contextUnit *Unit) UnitReference

func (UnitReference) Get

func (ur UnitReference) Get() *Unit

func (*UnitReference) String

func (ur *UnitReference) String() string

type UnitStats

type UnitStats struct {
	Stats       stats.Stats
	PseudoStats []float64
}

func NewUnitStats

func NewUnitStats() UnitStats

func (*UnitStats) AddStat

func (s *UnitStats) AddStat(stat stats.UnitStat, value float64)

func (*UnitStats) ExportWeights

func (s *UnitStats) ExportWeights() *proto.UnitStats

Infer missing stat weight values for HitRating and CritRating if school-specific components were calculated, then call ToProto(). Kept as a separate method in case we want to use the UnitStats struct for other applications than just stat weights.

func (*UnitStats) Get

func (s *UnitStats) Get(stat stats.UnitStat) float64

func (*UnitStats) ToProto

func (s *UnitStats) ToProto() *proto.UnitStats

type UnitType

type UnitType int
const (
	PlayerUnit UnitType = iota
	EnemyUnit
	PetUnit
)

type Weapon

type Weapon struct {
	BaseDamageMin        float64
	BaseDamageMax        float64
	AttackPowerPerDPS    float64
	SwingSpeed           float64
	NormalizedSwingSpeed float64
	CritMultiplier       float64
	SpellSchool          SpellSchool
	MinRange             float64
	MaxRange             float64
}

Represents a generic weapon. Pets / unarmed / various other cases don't use actual weapon items so this is an abstraction of a Weapon.

func (*Weapon) AverageDamage

func (weapon *Weapon) AverageDamage() float64

func (*Weapon) BaseDamage

func (weapon *Weapon) BaseDamage(sim *Simulation) float64

func (*Weapon) CalculateAverageWeaponDamage

func (weapon *Weapon) CalculateAverageWeaponDamage(attackPower float64) float64

func (*Weapon) CalculateNormalizedWeaponDamage

func (weapon *Weapon) CalculateNormalizedWeaponDamage(sim *Simulation, attackPower float64) float64

func (*Weapon) CalculateWeaponDamage

func (weapon *Weapon) CalculateWeaponDamage(sim *Simulation, attackPower float64) float64

func (*Weapon) DPS

func (weapon *Weapon) DPS() float64

func (*Weapon) EnemyWeaponDamage

func (weapon *Weapon) EnemyWeaponDamage(sim *Simulation, attackPower float64, damageSpread float64) float64

func (*Weapon) GetSpellSchool

func (weapon *Weapon) GetSpellSchool() SpellSchool

type WeaponAttack

type WeaponAttack struct {
	Weapon
	// contains filtered or unexported fields
}

func (*WeaponAttack) IsInRange

func (wa *WeaponAttack) IsInRange() bool

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL