core

package
v0.1.71 Latest Latest
Warning

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

Go to latest
Published: Feb 18, 2024 License: MIT Imports: 29 Imported by: 0

Documentation

Overview

Proto-based function interface for the simulator

Functions for creating common types of auras.

Index

Constants

View Source
const (
	ItemIDAtieshMage            = 22589
	ItemIDAtieshWarlock         = 22630
	ItemIDBraidedEterniumChain  = 24114
	ItemIDChainOfTheTwilightOwl = 24121
	ItemIDEyeOfTheNight         = 24116
	ItemIDJadePendantOfBlasting = 20966
	ItemIDTheLightningCapacitor = 28785
)

IDs for items used in core

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

	ProcMaskMeleeOrProc = ProcMaskMelee | ProcMaskProc
	ProcMaskSpellOrProc = ProcMaskSpellDamage | ProcMaskProc
)
View Source
const (
	CooldownPriorityLow       = -1000
	CooldownPriorityDefault   = 0
	CooldownPriorityDrums     = 2000
	CooldownPriorityBloodlust = 1000
)
View Source
const ArmorPenPerPercentArmor = 13.99
View Source
const AverageMagicPartialResistMultiplier = 0.94
View Source
const BaseFocusPerTick = 5.0
View Source
const BleedEffectCategory = "BleedDamage"

Bleed Damage Multiplier category

View Source
const BlockRatingPerBlockChance = 16.394995
View Source
const BloodlustAuraTag = "Bloodlust"
View Source
const BloodlustCD = time.Minute * 10
View Source
const BloodlustDuration = time.Second * 40
View Source
const CharacterLevel = 80
View Source
const CritRatingPerCritChance = 45.905987
View Source
const DTPSReferenceStat = stats.Armor
View Source
const DefaultAttackPowerPerDPS = 14.0
View Source
const DefenseRatingPerDefense = 4.918498
View Source
const DefenseRatingToChanceReduction = (1.0 / DefenseRatingPerDefense) * MissDodgeParryBlockCritChancePerDefense / 100
View Source
const Diminish_Cd_Druid = 116.890707 / 100
View Source
const Diminish_Cd_Nondruid = 88.129021 / 100
View Source
const Diminish_Cm = 16.000 / 100
View Source
const Diminish_Cp = 47.003525 / 100
View Source
const Diminish_kCd_Druid = (Diminish_k_Druid * Diminish_Cd_Druid)
View Source
const Diminish_kCd_Nondruid = (Diminish_k_Nondruid * Diminish_Cd_Nondruid)
View Source
const Diminish_kCm_Druid = (Diminish_k_Druid * Diminish_Cm)
View Source
const Diminish_kCm_Nondruid = (Diminish_k_Nondruid * Diminish_Cm)
View Source
const Diminish_kCp = (Diminish_k_Nondruid * Diminish_Cp)
View Source
const Diminish_k_Druid = 0.972

Could be in constants.go, but they won't be used anywhere else C values are divided by 100 so that we are working with 1% = 0.01

View Source
const Diminish_k_Nondruid = 0.956
View Source
const DivineGuardianCD = time.Minute * 2
View Source
const DivineGuardianDuration = time.Second * 6
View Source
const DodgeRatingPerDodgeChance = 45.250187
View Source
const EnemyAutoAttackAPCoefficient = 1.0 / (14.0 * 177.0)

Updated based on formulas supplied by InDebt on WoWSims Discord

View Source
const EnergyPerTick = 1.0
View Source
const EnergyTickDuration = time.Millisecond * 100

Time between energy ticks.

View Source
const ExpertisePerQuarterPercentReduction = 8.197496
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 HandOfSacrificeCD = time.Minute * 5 // use Divine Shield CD here
View Source
const HandOfSacrificeDuration = time.Millisecond * 10500 // subtract Divine Shield GCD
View Source
const HasteRatingPerHastePercent = 32.789989
View Source
const HuntersMarkAuraTag = "HuntersMark"
View Source
const Inactive = -1
View Source
const InnervateCD = time.Minute * 3
View Source
const InnervateDuration = time.Second * 10
View Source
const LongDuration = 300
View Source
const ManaTideTotemCD = time.Minute * 5
View Source
const ManaTideTotemDuration = time.Second * 12
View Source
const MaxFocus = 100.0

Time between focus ticks.

View Source
const MaxRage = 100.0
View Source
const MeleeHitRatingPerHitChance = 32.789989
View Source
const MissDodgeParryBlockCritChancePerDefense = 0.04
View Source
const NeverExpires = time.Duration(math.MaxInt64)
View Source
const PainSuppressionCD = time.Minute * 3
View Source
const PainSuppressionDuration = time.Second * 8
View Source
const ParryRatingPerParryChance = 45.250187
View Source
const PowerInfusionCD = time.Minute * 2
View Source
const PowerInfusionDuration = time.Second * 15
View Source
const RageFactor = 453.3
View Source
const ReplenishmentAuraDuration = time.Second * 15
View Source
const ResilienceRatingPerCritDamageReductionPercent = ResilienceRatingPerCritReductionChance / 2.2
View Source
const ResilienceRatingPerCritReductionChance = 94.271225
View Source
const SatedAuraLabel = "Sated"
View Source
const ShatteringThrowCD = time.Minute * 5
View Source
const ShortDuration = 60
View Source
const SpellCritEffectCategory = "spellcritdebuff"
View Source
const SpellHitRatingPerHitChance = 26.231993
View Source
const ThreatPerManaGained = 0.5
View Source
const ThreatPerRageGained = 5
View Source
const TricksOfTheTradeCD = time.Second * 3600 // CD is 30s from the time buff ends (so 40s with glyph) but that's in order to be able to set the number of TotT you'll have during the fight
View Source
const UnholyFrenzyCD = time.Minute * 3
View Source
const UnholyFrenzyDuration = 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{44322, 44323, 44324}
View Source
var AverageDefaultSimTestOptions = &proto.SimOptions{
	Iterations: 2000,
	IsTest:     true,
	Debug:      false,
	RandomSeed: 101,
}
View Source
var BaseStats = map[BaseStatsKey]stats.Stats{}
View Source
var BloodlustActionID = ActionID{SpellID: 2825}
View Source
var ChanceOfDeathAuraLabel = "Chance of Death"
View Source
var ClassBaseStats = map[proto.Class]stats.Stats{
	proto.Class_ClassUnknown: {},
	proto.Class_ClassWarrior: {
		stats.Health:      8121,
		stats.Agility:     113,
		stats.Strength:    174,
		stats.Intellect:   36,
		stats.Spirit:      59,
		stats.Stamina:     159,
		stats.AttackPower: float64(CharacterLevel)*3.0 - 20,
	},
	proto.Class_ClassPaladin: {
		stats.Health:      6934,
		stats.Agility:     90,
		stats.Strength:    151,
		stats.Intellect:   98,
		stats.Spirit:      105,
		stats.Stamina:     143,
		stats.AttackPower: float64(CharacterLevel)*3.0 - 20,
	},
	proto.Class_ClassHunter: {
		stats.Health:            7324,
		stats.Agility:           181,
		stats.Strength:          74,
		stats.Intellect:         90,
		stats.Spirit:            97,
		stats.Stamina:           128,
		stats.AttackPower:       float64(CharacterLevel)*2.0 - 20,
		stats.RangedAttackPower: float64(CharacterLevel)*2.0 - 10,
	},
	proto.Class_ClassRogue: {
		stats.Health:      7604,
		stats.Agility:     189,
		stats.Strength:    113,
		stats.Intellect:   43,
		stats.Spirit:      67,
		stats.Stamina:     105,
		stats.AttackPower: float64(CharacterLevel)*2.0 - 20,
	},
	proto.Class_ClassPriest: {
		stats.Health:    6960,
		stats.Agility:   51,
		stats.Strength:  43,
		stats.Intellect: 174,
		stats.Spirit:    181,
		stats.Stamina:   67,
	},
	proto.Class_ClassDeathknight: {
		stats.Health:      8121,
		stats.Agility:     112,
		stats.Strength:    175,
		stats.Intellect:   35,
		stats.Spirit:      59,
		stats.Stamina:     160,
		stats.AttackPower: float64(CharacterLevel)*3.0 - 20,
	},
	proto.Class_ClassShaman: {
		stats.Health:      6960,
		stats.Agility:     74,
		stats.Strength:    120,
		stats.Intellect:   128,
		stats.Spirit:      143,
		stats.Stamina:     136,
		stats.AttackPower: float64(CharacterLevel)*2.0 - 20,
	},
	proto.Class_ClassMage: {
		stats.Health:    6963,
		stats.Agility:   43,
		stats.Strength:  36,
		stats.Intellect: 181,
		stats.Spirit:    174,
		stats.Stamina:   59,
	},
	proto.Class_ClassWarlock: {
		stats.Health:      7164,
		stats.Agility:     67,
		stats.Strength:    59,
		stats.Intellect:   159,
		stats.Spirit:      166,
		stats.Stamina:     89,
		stats.AttackPower: -10,
	},
	proto.Class_ClassDruid: {
		stats.Health:      7417,
		stats.Agility:     82,
		stats.Strength:    89,
		stats.Intellect:   143,
		stats.Spirit:      159,
		stats.Stamina:     98,
		stats.AttackPower: -20,
	},
}
View Source
var CobaltFragBombActionID = ActionID{ItemID: 40771}
View Source
var ConjuredAuraTag = "Conjured"
View Source
var DefaultSimTestOptions = &proto.SimOptions{
	Iterations: 20,
	IsTest:     true,
	Debug:      false,
	RandomSeed: 101,
}
View Source
var DefaultTargetProto = &proto.Target{
	Level: CharacterLevel + 3,
	Stats: stats.Stats{
		stats.Armor:       10643,
		stats.AttackPower: 320,
		stats.BlockValue:  54,
	}.ToFloatArray(),
	MobType: proto.MobType_MobTypeDemon,

	SwingSpeed:    2,
	MinBaseDamage: 4192.05,
	ParryHaste:    true,
	DamageSpread:  0.3333,
}
View Source
var DivineGuardianAuraTag = "DivineGuardian"
View Source
var EnchantsByEffectID = map[int32]Enchant{}
View Source
var ExplosiveDecoyActionID = ActionID{ItemID: 40536}
View Source
var ExtraClassBaseStats = map[proto.Class]stats.Stats{
	proto.Class_ClassUnknown: {},
	proto.Class_ClassWarrior: {
		stats.Mana:      0.0000,
		stats.SpellCrit: 0.0000 * CritRatingPerCritChance,
		stats.MeleeCrit: 3.1891 * CritRatingPerCritChance,
	},
	proto.Class_ClassPaladin: {
		stats.Mana:      4394.0000,
		stats.SpellCrit: 3.3355 * CritRatingPerCritChance,
		stats.MeleeCrit: 3.2685 * CritRatingPerCritChance,
	},
	proto.Class_ClassHunter: {
		stats.Mana:      5046.0000,
		stats.SpellCrit: 3.6020 * CritRatingPerCritChance,
		stats.MeleeCrit: -1.5320 * CritRatingPerCritChance,
	},
	proto.Class_ClassRogue: {
		stats.Mana:      0.0000,
		stats.SpellCrit: 0.0000 * CritRatingPerCritChance,
		stats.MeleeCrit: -0.2950 * CritRatingPerCritChance,
	},
	proto.Class_ClassPriest: {
		stats.Mana:      3863.0000,
		stats.SpellCrit: 1.2375 * CritRatingPerCritChance,
		stats.MeleeCrit: 3.1765 * CritRatingPerCritChance,
	},
	proto.Class_ClassDeathknight: {
		stats.Mana:      1000.0000,
		stats.SpellCrit: 0.0000 * CritRatingPerCritChance,
		stats.MeleeCrit: 3.1891 * CritRatingPerCritChance,
	},
	proto.Class_ClassShaman: {
		stats.Mana:      4396.0000,
		stats.SpellCrit: 2.2010 * CritRatingPerCritChance,
		stats.MeleeCrit: 2.9220 * CritRatingPerCritChance,
	},
	proto.Class_ClassMage: {
		stats.Mana:      3268.0000,
		stats.SpellCrit: 0.9075 * CritRatingPerCritChance,
		stats.MeleeCrit: 3.4540 * CritRatingPerCritChance,
	},
	proto.Class_ClassWarlock: {
		stats.Mana:      3856.0000,
		stats.SpellCrit: 1.7000 * CritRatingPerCritChance,
		stats.MeleeCrit: 2.6220 * CritRatingPerCritChance,
	},
	proto.Class_ClassDruid: {
		stats.Mana:      3496.0000,
		stats.SpellCrit: 1.8515 * CritRatingPerCritChance,
		stats.MeleeCrit: 7.4755 * CritRatingPerCritChance,
	},
}
View Source
var FaerieFireAuraTag = "Faerie Fire"
View Source
var FullDebuffs = &proto.Debuffs{
	BloodFrenzy:        true,
	CurseOfElements:    true,
	CurseOfWeakness:    proto.TristateEffect_TristateEffectImproved,
	EarthAndMoon:       true,
	EbonPlaguebringer:  true,
	ExposeArmor:        true,
	FaerieFire:         proto.TristateEffect_TristateEffectImproved,
	GiftOfArthas:       true,
	HeartOfTheCrusader: true,
	ImprovedScorch:     true,
	InsectSwarm:        true,
	JudgementOfLight:   true,
	JudgementOfWisdom:  true,
	Mangle:             true,
	Misery:             true,
	ScorpidSting:       true,
	ShadowEmbrace:      true,
	ShadowMastery:      true,
	SunderArmor:        true,
	ThunderClap:        proto.TristateEffect_TristateEffectImproved,
	TotemOfWrath:       true,
	Vindication:        true,
}
View Source
var FullIndividualBuffs = &proto.IndividualBuffs{
	BlessingOfKings:     true,
	BlessingOfMight:     proto.TristateEffect_TristateEffectImproved,
	BlessingOfSanctuary: true,
	BlessingOfWisdom:    proto.TristateEffect_TristateEffectImproved,
	JudgementsOfTheWise: true,
	VampiricTouch:       true,
}
View Source
var FullPartyBuffs = &proto.PartyBuffs{

	ManaTideTotems: 1,
}
View Source
var FullRaidBuffs = &proto.RaidBuffs{
	AbominationsMight:     true,
	ArcaneBrilliance:      true,
	ArcaneEmpowerment:     true,
	BattleShout:           proto.TristateEffect_TristateEffectImproved,
	Bloodlust:             true,
	DemonicPactSp:         500,
	DevotionAura:          proto.TristateEffect_TristateEffectImproved,
	DivineSpirit:          true,
	ElementalOath:         true,
	FerociousInspiration:  true,
	GiftOfTheWild:         proto.TristateEffect_TristateEffectImproved,
	IcyTalons:             true,
	LeaderOfThePack:       proto.TristateEffect_TristateEffectImproved,
	ManaSpringTotem:       proto.TristateEffect_TristateEffectRegular,
	MoonkinAura:           proto.TristateEffect_TristateEffectImproved,
	PowerWordFortitude:    proto.TristateEffect_TristateEffectImproved,
	SanctifiedRetribution: true,
	ShadowProtection:      true,
	StrengthOfEarthTotem:  proto.TristateEffect_TristateEffectImproved,
	SwiftRetribution:      true,
	Thorns:                proto.TristateEffect_TristateEffectImproved,
	TotemOfWrath:          true,
	TrueshotAura:          true,
	UnleashedRage:         true,
	WindfuryTotem:         proto.TristateEffect_TristateEffectImproved,
	WrathOfAirTotem:       true,
}
View Source
var GemsByID = map[int32]Gem{}
View Source
var GuardianSpiritAuraTag = "GuardianSpirit"
View Source
var HandOfSacrificeAuraTag = "HandOfSacrifice"
View Source
var InnervateAuraTag = "Innervate"
View Source
var ItemsByID = map[int32]Item{}
View Source
var JudgementOfLightAuraLabel = "Judgement of Light"
View Source
var JudgementOfWisdomAuraLabel = "Judgement of Wisdom"
View Source
var ManaTideTotemActionID = ActionID{SpellID: 16190}
View Source
var ManaTideTotemAuraTag = "ManaTideTotem"
View Source
var (
	OutcomePartialOffset = bits.TrailingZeros(uint(OutcomePartial1))
)
View Source
var PainSuppressionAuraTag = "PainSuppression"
View Source
var PotionAuraTag = "Potion"
View Source
var PowerInfusionActionID = ActionID{SpellID: 10060}
View Source
var PowerInfusionAuraTag = "PowerInfusion"
View Source
var PresetEncounters []*proto.PresetEncounter
View Source
var SaroniteBombActionID = ActionID{ItemID: 41119}
View Source
var ShatteringThrowAuraTag = "ShatteringThrow"
View Source
var ShatteringThrowDuration = time.Second * 10
View Source
var StatWeightsDefaultSimTestOptions = &proto.SimOptions{
	Iterations: 300,
	IsTest:     true,
	Debug:      false,
	RandomSeed: 101,
}
View Source
var ThermalSapperActionID = ActionID{ItemID: 42641}
View Source
var TricksOfTheTradeAuraTag = "TricksOfTheTrade"
View Source
var UnholyFrenzyAuraTag = "UnholyFrenzy"
View Source
var WITH_DB = false

Functions

func APLRotationFromJsonString added in v0.1.17

func APLRotationFromJsonString(jsonString string) *proto.APLRotation

func AddBaseStatsCombo added in v0.1.45

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

func AddPresetEncounter

func AddPresetEncounter(name string, targetPaths []string)

func AddPresetTarget

func AddPresetTarget(newPreset *PresetTarget)

func AddWeaponEffect

func AddWeaponEffect(id int32, weaponEffect ApplyWeaponEffect)

func ApplyFixedUptimeAura

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

func ApplyInspiration

func ApplyInspiration(character *Character, uptime float64)

func ApplyPetConsumeEffects

func ApplyPetConsumeEffects(pet *Character, ownerConsumes *proto.Consumes)

func ApplyProcTriggerCallback added in v0.1.7

func ApplyProcTriggerCallback(unit *Unit, aura *Aura, config ProcTrigger)

func BlessingOfSanctuaryAura

func BlessingOfSanctuaryAura(character *Character)

func BothTimersReady

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

func BothTimersReadyAt

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

func BulkSim added in v0.1.23

func BulkSim(ctx context.Context, request *proto.BulkSimRequest, progress chan *proto.ProgressMetrics) *proto.BulkSimResult

func CharacterStatsTest

func CharacterStatsTest(label string, t *testing.T, raid *proto.Raid, expectedStats stats.Stats)

func ColorIntersects added in v0.1.5

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

func ComputeStats

*

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

func DurationFromSeconds

func DurationFromSeconds(numSeconds float64) time.Duration

func EquipmentSpecFromJsonString added in v0.1.5

func EquipmentSpecFromJsonString(jsonString string) *proto.EquipmentSpec

func FillTalentsProto added in v0.1.10

func FillTalentsProto(data protoreflect.Message, talentsStr string, treeSizes [3]int)

Uses proto reflection to set fields in a talents proto (e.g. MageTalents, WarriorTalents) based on a talentsStr. treeSizes should contain the number of talents in each tree, usually around 30. This is needed because talent strings truncate 0's at the end of each tree, so we can't infer the start index of the tree from the string.

func FilterMap added in v0.1.5

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 added in v0.1.5

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 added in v0.1.37

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

Flattens a 2D slice into a 1D slice.

func FocusMagicAura added in v0.1.10

func FocusMagicAura(caster *Unit, target *Unit) (*Aura, *Aura)

func GetPrimaryTalentTreeIndex added in v0.1.1

func GetPrimaryTalentTreeIndex(talentStr string) uint8

Returns the talent tree (0, 1, or 2) of the tree with the most points.

talentStr is expected to be a wowhead-formatted talent string, e.g. "12123131-123123123-123123213"

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 added in v0.1.3

func HasEnchantEffect(id int32) bool

func HasItemEffect

func HasItemEffect(id int32) bool

func HasItemEffectForTest

func HasItemEffectForTest(id int32) bool

func HasWeaponEffect

func HasWeaponEffect(id int32) bool

func InnervateManaThreshold

func InnervateManaThreshold(character *Character) float64

func ItemTypeToSlot added in v0.1.5

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 added in v0.1.5

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 added in v0.1.5

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 MaxTimeToReady

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

func NewDefaultTarget

func NewDefaultTarget() *proto.Target

func NewEnchantEffect added in v0.1.3

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 NewSimpleStatDefensiveTrinketEffect

func NewSimpleStatDefensiveTrinketEffect(itemID int32, bonus stats.Stats, duration time.Duration, cooldown time.Duration)

func NewSimpleStatItemActiveEffect

func NewSimpleStatItemActiveEffect(itemID int32, bonus stats.Stats, duration time.Duration, cooldown time.Duration, sharedCDFunc func(*Character) Cooldown, otherEffects ApplyEffect)

func NewSimpleStatItemEffect

func NewSimpleStatItemEffect(itemID int32, bonus stats.Stats, duration time.Duration, cooldown time.Duration)

No shared CD

func NewSimpleStatOffensiveTrinketEffect

func NewSimpleStatOffensiveTrinketEffect(itemID int32, bonus stats.Stats, duration time.Duration, cooldown time.Duration)

func NewSimpleStatOffensiveTrinketEffectWithOtherEffects added in v0.1.7

func NewSimpleStatOffensiveTrinketEffectWithOtherEffects(itemID int32, bonus stats.Stats, duration time.Duration, cooldown time.Duration, otherEffects ApplyEffect)

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 RegisterAgentFactory

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

func RegisterTemporaryStatsOnUseCD

func RegisterTemporaryStatsOnUseCD(character *Character, auraLabel string, tempStats stats.Stats, duration time.Duration, config SpellConfig)

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 RunBulkSim added in v0.1.23

func RunBulkSim(request *proto.BulkSimRequest) *proto.BulkSimResult

func RunBulkSimAsync added in v0.1.23

func RunBulkSimAsync(ctx context.Context, request *proto.BulkSimRequest, progress chan *proto.ProgressMetrics)

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)

func RunSim

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

func RunTestSuite

func RunTestSuite(t *testing.T, suiteName string, generator TestGenerator)

func ScheduledMajorArmorAura added in v0.1.8

func ScheduledMajorArmorAura(aura *Aura, options PeriodicActionOptions, raid *proto.Raid)

func SinglePlayerRaidProto

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

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)

func StatWeightsTest

func StatWeightsTest(label string, t *testing.T, _swr *proto.StatWeightsRequest, expectedStatWeights stats.Stats)

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 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 added in v0.1.17

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

func (*APLAction) Execute added in v0.1.17

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

func (*APLAction) Finalize added in v0.1.43

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

func (*APLAction) GetAllAPLValues added in v0.1.43

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

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

func (*APLAction) GetAllActions added in v0.1.37

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

Returns this Action, along with all inner Actions.

func (*APLAction) GetAllSpells added in v0.1.45

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

func (*APLAction) IsReady added in v0.1.37

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

func (*APLAction) String added in v0.1.40

func (action *APLAction) String() string

type APLActionActivateAura added in v0.1.42

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

func (*APLActionActivateAura) Execute added in v0.1.42

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

func (APLActionActivateAura) Finalize added in v0.1.42

func (impl APLActionActivateAura) Finalize(*APLRotation)

func (APLActionActivateAura) GetAPLValues added in v0.1.43

func (impl APLActionActivateAura) GetAPLValues() []APLValue

func (APLActionActivateAura) GetInnerActions added in v0.1.42

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

func (APLActionActivateAura) GetNextAction added in v0.1.45

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

func (*APLActionActivateAura) IsReady added in v0.1.42

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

func (APLActionActivateAura) Reset added in v0.1.42

func (impl APLActionActivateAura) Reset(*Simulation)

func (*APLActionActivateAura) String added in v0.1.42

func (action *APLActionActivateAura) String() string

type APLActionAutocastOtherCooldowns added in v0.1.37

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

func (*APLActionAutocastOtherCooldowns) Execute added in v0.1.37

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

func (APLActionAutocastOtherCooldowns) Finalize added in v0.1.37

func (impl APLActionAutocastOtherCooldowns) Finalize(*APLRotation)

func (APLActionAutocastOtherCooldowns) GetAPLValues added in v0.1.43

func (impl APLActionAutocastOtherCooldowns) GetAPLValues() []APLValue

func (APLActionAutocastOtherCooldowns) GetInnerActions added in v0.1.37

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

func (APLActionAutocastOtherCooldowns) GetNextAction added in v0.1.45

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

func (*APLActionAutocastOtherCooldowns) IsReady added in v0.1.37

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

func (*APLActionAutocastOtherCooldowns) Reset added in v0.1.37

func (*APLActionAutocastOtherCooldowns) String added in v0.1.40

func (action *APLActionAutocastOtherCooldowns) String() string

type APLActionCancelAura added in v0.1.40

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

func (*APLActionCancelAura) Execute added in v0.1.40

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

func (APLActionCancelAura) Finalize added in v0.1.40

func (impl APLActionCancelAura) Finalize(*APLRotation)

func (APLActionCancelAura) GetAPLValues added in v0.1.43

func (impl APLActionCancelAura) GetAPLValues() []APLValue

func (APLActionCancelAura) GetInnerActions added in v0.1.40

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

func (APLActionCancelAura) GetNextAction added in v0.1.45

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

func (*APLActionCancelAura) IsReady added in v0.1.40

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

func (APLActionCancelAura) Reset added in v0.1.40

func (impl APLActionCancelAura) Reset(*Simulation)

func (*APLActionCancelAura) String added in v0.1.40

func (action *APLActionCancelAura) String() string

type APLActionCastSpell added in v0.1.17

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

func (*APLActionCastSpell) Execute added in v0.1.17

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

func (APLActionCastSpell) Finalize added in v0.1.37

func (impl APLActionCastSpell) Finalize(*APLRotation)

func (APLActionCastSpell) GetAPLValues added in v0.1.43

func (impl APLActionCastSpell) GetAPLValues() []APLValue

func (APLActionCastSpell) GetInnerActions added in v0.1.37

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

func (APLActionCastSpell) GetNextAction added in v0.1.45

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

func (*APLActionCastSpell) IsReady added in v0.1.37

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

func (APLActionCastSpell) Reset added in v0.1.37

func (impl APLActionCastSpell) Reset(*Simulation)

func (*APLActionCastSpell) String added in v0.1.40

func (action *APLActionCastSpell) String() string

type APLActionChangeTarget added in v0.1.40

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

func (*APLActionChangeTarget) Execute added in v0.1.40

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

func (APLActionChangeTarget) Finalize added in v0.1.40

func (impl APLActionChangeTarget) Finalize(*APLRotation)

func (APLActionChangeTarget) GetAPLValues added in v0.1.43

func (impl APLActionChangeTarget) GetAPLValues() []APLValue

func (APLActionChangeTarget) GetInnerActions added in v0.1.40

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

func (APLActionChangeTarget) GetNextAction added in v0.1.45

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

func (*APLActionChangeTarget) IsReady added in v0.1.40

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

func (APLActionChangeTarget) Reset added in v0.1.40

func (impl APLActionChangeTarget) Reset(*Simulation)

func (*APLActionChangeTarget) String added in v0.1.40

func (action *APLActionChangeTarget) String() string

type APLActionChannelSpell added in v0.1.49

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

func (*APLActionChannelSpell) Execute added in v0.1.49

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

func (APLActionChannelSpell) Finalize added in v0.1.49

func (impl APLActionChannelSpell) Finalize(*APLRotation)

func (*APLActionChannelSpell) GetAPLValues added in v0.1.49

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

func (APLActionChannelSpell) GetInnerActions added in v0.1.49

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

func (APLActionChannelSpell) GetNextAction added in v0.1.49

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

func (*APLActionChannelSpell) IsReady added in v0.1.49

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

func (APLActionChannelSpell) Reset added in v0.1.49

func (impl APLActionChannelSpell) Reset(*Simulation)

func (*APLActionChannelSpell) String added in v0.1.49

func (action *APLActionChannelSpell) String() string

type APLActionCustomRotation added in v0.1.63

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

func (*APLActionCustomRotation) Execute added in v0.1.63

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

func (APLActionCustomRotation) Finalize added in v0.1.63

func (impl APLActionCustomRotation) Finalize(*APLRotation)

func (APLActionCustomRotation) GetAPLValues added in v0.1.63

func (impl APLActionCustomRotation) GetAPLValues() []APLValue

func (APLActionCustomRotation) GetInnerActions added in v0.1.63

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

func (APLActionCustomRotation) GetNextAction added in v0.1.63

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

func (*APLActionCustomRotation) IsReady added in v0.1.63

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

func (*APLActionCustomRotation) Reset added in v0.1.63

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

func (*APLActionCustomRotation) String added in v0.1.63

func (action *APLActionCustomRotation) String() string

type APLActionImpl added in v0.1.17

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)

	// 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

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

type APLActionItemSwap added in v0.1.61

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

func (*APLActionItemSwap) Execute added in v0.1.61

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

func (APLActionItemSwap) Finalize added in v0.1.61

func (impl APLActionItemSwap) Finalize(*APLRotation)

func (APLActionItemSwap) GetAPLValues added in v0.1.61

func (impl APLActionItemSwap) GetAPLValues() []APLValue

func (APLActionItemSwap) GetInnerActions added in v0.1.61

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

func (APLActionItemSwap) GetNextAction added in v0.1.61

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

func (*APLActionItemSwap) IsReady added in v0.1.61

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

func (APLActionItemSwap) Reset added in v0.1.61

func (impl APLActionItemSwap) Reset(*Simulation)

func (*APLActionItemSwap) String added in v0.1.61

func (action *APLActionItemSwap) String() string

type APLActionMultidot added in v0.1.37

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

func (*APLActionMultidot) Execute added in v0.1.37

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

func (APLActionMultidot) Finalize added in v0.1.37

func (impl APLActionMultidot) Finalize(*APLRotation)

func (*APLActionMultidot) GetAPLValues added in v0.1.43

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

func (APLActionMultidot) GetInnerActions added in v0.1.37

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

func (APLActionMultidot) GetNextAction added in v0.1.45

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

func (*APLActionMultidot) IsReady added in v0.1.37

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

func (*APLActionMultidot) Reset added in v0.1.37

func (action *APLActionMultidot) Reset(*Simulation)

func (*APLActionMultidot) String added in v0.1.40

func (action *APLActionMultidot) String() string

type APLActionMultishield added in v0.1.42

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

func (*APLActionMultishield) Execute added in v0.1.42

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

func (APLActionMultishield) Finalize added in v0.1.42

func (impl APLActionMultishield) Finalize(*APLRotation)

func (*APLActionMultishield) GetAPLValues added in v0.1.43

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

func (APLActionMultishield) GetInnerActions added in v0.1.42

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

func (APLActionMultishield) GetNextAction added in v0.1.45

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

func (*APLActionMultishield) IsReady added in v0.1.42

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

func (*APLActionMultishield) Reset added in v0.1.42

func (action *APLActionMultishield) Reset(*Simulation)

func (*APLActionMultishield) String added in v0.1.42

func (action *APLActionMultishield) String() string

type APLActionResetSequence added in v0.1.37

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

func (*APLActionResetSequence) Execute added in v0.1.37

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

func (*APLActionResetSequence) Finalize added in v0.1.37

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

func (APLActionResetSequence) GetAPLValues added in v0.1.43

func (impl APLActionResetSequence) GetAPLValues() []APLValue

func (APLActionResetSequence) GetInnerActions added in v0.1.37

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

func (APLActionResetSequence) GetNextAction added in v0.1.45

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

func (*APLActionResetSequence) IsReady added in v0.1.37

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

func (APLActionResetSequence) Reset added in v0.1.37

func (impl APLActionResetSequence) Reset(*Simulation)

func (*APLActionResetSequence) String added in v0.1.40

func (action *APLActionResetSequence) String() string

type APLActionSchedule added in v0.1.48

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

func (*APLActionSchedule) Execute added in v0.1.48

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

func (APLActionSchedule) Finalize added in v0.1.48

func (impl APLActionSchedule) Finalize(*APLRotation)

func (APLActionSchedule) GetAPLValues added in v0.1.48

func (impl APLActionSchedule) GetAPLValues() []APLValue

func (*APLActionSchedule) GetInnerActions added in v0.1.48

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

func (APLActionSchedule) GetNextAction added in v0.1.48

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

func (*APLActionSchedule) IsReady added in v0.1.48

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

func (*APLActionSchedule) Reset added in v0.1.48

func (action *APLActionSchedule) Reset(*Simulation)

func (*APLActionSchedule) String added in v0.1.48

func (action *APLActionSchedule) String() string

type APLActionSequence added in v0.1.37

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

func (*APLActionSequence) Execute added in v0.1.37

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

func (*APLActionSequence) Finalize added in v0.1.37

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

func (APLActionSequence) GetAPLValues added in v0.1.43

func (impl APLActionSequence) GetAPLValues() []APLValue

func (*APLActionSequence) GetInnerActions added in v0.1.37

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

func (APLActionSequence) GetNextAction added in v0.1.45

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

func (*APLActionSequence) IsReady added in v0.1.37

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

func (*APLActionSequence) Reset added in v0.1.37

func (action *APLActionSequence) Reset(*Simulation)

func (*APLActionSequence) String added in v0.1.40

func (action *APLActionSequence) String() string

type APLActionStrictSequence added in v0.1.37

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

func (*APLActionStrictSequence) Execute added in v0.1.37

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

func (*APLActionStrictSequence) Finalize added in v0.1.37

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

func (APLActionStrictSequence) GetAPLValues added in v0.1.43

func (impl APLActionStrictSequence) GetAPLValues() []APLValue

func (*APLActionStrictSequence) GetInnerActions added in v0.1.37

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

func (*APLActionStrictSequence) GetNextAction added in v0.1.45

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

func (*APLActionStrictSequence) IsReady added in v0.1.37

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

func (*APLActionStrictSequence) Reset added in v0.1.37

func (action *APLActionStrictSequence) Reset(*Simulation)

func (*APLActionStrictSequence) String added in v0.1.40

func (action *APLActionStrictSequence) String() string

type APLActionTriggerICD added in v0.1.40

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

func (*APLActionTriggerICD) Execute added in v0.1.40

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

func (APLActionTriggerICD) Finalize added in v0.1.40

func (impl APLActionTriggerICD) Finalize(*APLRotation)

func (APLActionTriggerICD) GetAPLValues added in v0.1.43

func (impl APLActionTriggerICD) GetAPLValues() []APLValue

func (APLActionTriggerICD) GetInnerActions added in v0.1.40

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

func (APLActionTriggerICD) GetNextAction added in v0.1.45

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

func (*APLActionTriggerICD) IsReady added in v0.1.40

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

func (APLActionTriggerICD) Reset added in v0.1.40

func (impl APLActionTriggerICD) Reset(*Simulation)

func (*APLActionTriggerICD) String added in v0.1.40

func (action *APLActionTriggerICD) String() string

type APLActionWait added in v0.1.17

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

func (*APLActionWait) Execute added in v0.1.17

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

func (APLActionWait) Finalize added in v0.1.37

func (impl APLActionWait) Finalize(*APLRotation)

func (*APLActionWait) GetAPLValues added in v0.1.43

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

func (APLActionWait) GetInnerActions added in v0.1.37

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

func (*APLActionWait) GetNextAction added in v0.1.45

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

func (*APLActionWait) IsReady added in v0.1.37

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

func (APLActionWait) Reset added in v0.1.37

func (impl APLActionWait) Reset(*Simulation)

func (*APLActionWait) String added in v0.1.40

func (action *APLActionWait) String() string

type APLActionWaitUntil added in v0.1.45

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

func (*APLActionWaitUntil) Execute added in v0.1.45

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

func (APLActionWaitUntil) Finalize added in v0.1.45

func (impl APLActionWaitUntil) Finalize(*APLRotation)

func (*APLActionWaitUntil) GetAPLValues added in v0.1.45

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

func (APLActionWaitUntil) GetInnerActions added in v0.1.45

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

func (*APLActionWaitUntil) GetNextAction added in v0.1.45

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

func (*APLActionWaitUntil) IsReady added in v0.1.45

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

func (APLActionWaitUntil) Reset added in v0.1.45

func (impl APLActionWaitUntil) Reset(*Simulation)

func (*APLActionWaitUntil) String added in v0.1.45

func (action *APLActionWaitUntil) String() string

type APLRotation added in v0.1.17

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

func (*APLRotation) DoNextAction added in v0.1.17

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 added in v0.1.44

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

func (*APLRotation) GetAPLDot added in v0.1.44

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

func (*APLRotation) GetAPLICDAura added in v0.1.44

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

func (*APLRotation) GetAPLMultidotSpell added in v0.1.44

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

func (*APLRotation) GetAPLMultishieldSpell added in v0.1.44

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

func (*APLRotation) GetAPLSpell added in v0.1.44

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

func (*APLRotation) GetSourceUnit added in v0.1.44

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

func (*APLRotation) GetTargetAPLSpell added in v0.1.57

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

func (*APLRotation) GetTargetUnit added in v0.1.44

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

func (*APLRotation) ValidationWarning added in v0.1.44

func (rot *APLRotation) ValidationWarning(message string, vals ...interface{})

type APLValue added in v0.1.17

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 APLValueAnd added in v0.1.17

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

func (*APLValueAnd) GetBool added in v0.1.17

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

func (*APLValueAnd) GetInnerValues added in v0.1.43

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

func (*APLValueAnd) String added in v0.1.40

func (value *APLValueAnd) String() string

func (*APLValueAnd) Type added in v0.1.17

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

type APLValueAuraICDIsReadyWithReactionTime added in v0.1.45

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

func (*APLValueAuraICDIsReadyWithReactionTime) GetBool added in v0.1.45

func (*APLValueAuraICDIsReadyWithReactionTime) String added in v0.1.45

func (*APLValueAuraICDIsReadyWithReactionTime) Type added in v0.1.45

type APLValueAuraInternalCooldown added in v0.1.38

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

func (*APLValueAuraInternalCooldown) GetDuration added in v0.1.38

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

func (*APLValueAuraInternalCooldown) String added in v0.1.40

func (value *APLValueAuraInternalCooldown) String() string

func (*APLValueAuraInternalCooldown) Type added in v0.1.38

type APLValueAuraIsActive added in v0.1.37

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

func (*APLValueAuraIsActive) GetBool added in v0.1.37

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

func (*APLValueAuraIsActive) String added in v0.1.40

func (value *APLValueAuraIsActive) String() string

func (*APLValueAuraIsActive) Type added in v0.1.37

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

type APLValueAuraIsActiveWithReactionTime added in v0.1.44

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

func (*APLValueAuraIsActiveWithReactionTime) GetBool added in v0.1.44

func (*APLValueAuraIsActiveWithReactionTime) String added in v0.1.44

func (*APLValueAuraIsActiveWithReactionTime) Type added in v0.1.44

type APLValueAuraNumStacks added in v0.1.37

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

func (*APLValueAuraNumStacks) GetInt added in v0.1.37

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

func (*APLValueAuraNumStacks) String added in v0.1.40

func (value *APLValueAuraNumStacks) String() string

func (*APLValueAuraNumStacks) Type added in v0.1.37

type APLValueAuraRemainingTime added in v0.1.37

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

func (*APLValueAuraRemainingTime) GetDuration added in v0.1.37

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

func (*APLValueAuraRemainingTime) String added in v0.1.40

func (value *APLValueAuraRemainingTime) String() string

func (*APLValueAuraRemainingTime) Type added in v0.1.37

type APLValueAuraShouldRefresh added in v0.1.41

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

func (*APLValueAuraShouldRefresh) GetBool added in v0.1.41

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

func (*APLValueAuraShouldRefresh) GetInnerValues added in v0.1.43

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

func (*APLValueAuraShouldRefresh) String added in v0.1.41

func (value *APLValueAuraShouldRefresh) String() string

func (*APLValueAuraShouldRefresh) Type added in v0.1.41

type APLValueAutoTimeToNext added in v0.1.40

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

func (*APLValueAutoTimeToNext) GetDuration added in v0.1.40

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

func (*APLValueAutoTimeToNext) String added in v0.1.40

func (value *APLValueAutoTimeToNext) String() string

func (*APLValueAutoTimeToNext) Type added in v0.1.40

type APLValueBossSpellIsCasting added in v0.1.57

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

func (*APLValueBossSpellIsCasting) GetBool added in v0.1.57

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

func (*APLValueBossSpellIsCasting) String added in v0.1.57

func (value *APLValueBossSpellIsCasting) String() string

func (*APLValueBossSpellIsCasting) Type added in v0.1.57

type APLValueBossSpellTimeToReady added in v0.1.57

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

func (*APLValueBossSpellTimeToReady) GetDuration added in v0.1.57

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

func (*APLValueBossSpellTimeToReady) String added in v0.1.57

func (value *APLValueBossSpellTimeToReady) String() string

func (*APLValueBossSpellTimeToReady) Type added in v0.1.57

type APLValueChannelClipDelay added in v0.1.49

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

func (*APLValueChannelClipDelay) GetDuration added in v0.1.49

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

func (*APLValueChannelClipDelay) String added in v0.1.49

func (value *APLValueChannelClipDelay) String() string

func (*APLValueChannelClipDelay) Type added in v0.1.49

type APLValueCoerced added in v0.1.17

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

func (*APLValueCoerced) GetBool added in v0.1.17

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

func (APLValueCoerced) GetDuration added in v0.1.17

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

func (APLValueCoerced) GetFloat added in v0.1.17

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

func (*APLValueCoerced) GetInnerValues added in v0.1.43

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

func (APLValueCoerced) GetInt added in v0.1.17

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

func (APLValueCoerced) GetString added in v0.1.17

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

func (*APLValueCoerced) String added in v0.1.40

func (value *APLValueCoerced) String() string

func (*APLValueCoerced) Type added in v0.1.17

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

type APLValueCompare added in v0.1.17

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

func (*APLValueCompare) GetBool added in v0.1.17

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

func (*APLValueCompare) GetInnerValues added in v0.1.43

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

func (*APLValueCompare) String added in v0.1.40

func (value *APLValueCompare) String() string

func (*APLValueCompare) Type added in v0.1.17

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

type APLValueConst added in v0.1.17

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

func (*APLValueConst) GetBool added in v0.1.17

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

func (*APLValueConst) GetDuration added in v0.1.17

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

func (*APLValueConst) GetFloat added in v0.1.17

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

func (*APLValueConst) GetInt added in v0.1.17

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

func (*APLValueConst) GetString added in v0.1.17

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

func (*APLValueConst) String added in v0.1.40

func (value *APLValueConst) String() string

func (*APLValueConst) Type added in v0.1.17

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

type APLValueCurrentComboPoints added in v0.1.37

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

func (*APLValueCurrentComboPoints) GetInt added in v0.1.37

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

func (*APLValueCurrentComboPoints) String added in v0.1.40

func (value *APLValueCurrentComboPoints) String() string

func (*APLValueCurrentComboPoints) Type added in v0.1.37

type APLValueCurrentEnergy added in v0.1.37

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

func (*APLValueCurrentEnergy) GetFloat added in v0.1.37

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

func (*APLValueCurrentEnergy) String added in v0.1.40

func (value *APLValueCurrentEnergy) String() string

func (*APLValueCurrentEnergy) Type added in v0.1.37

type APLValueCurrentHealth added in v0.1.38

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

func (*APLValueCurrentHealth) GetFloat added in v0.1.38

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

func (*APLValueCurrentHealth) String added in v0.1.40

func (value *APLValueCurrentHealth) String() string

func (*APLValueCurrentHealth) Type added in v0.1.38

type APLValueCurrentHealthPercent added in v0.1.38

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

func (*APLValueCurrentHealthPercent) GetFloat added in v0.1.38

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

func (*APLValueCurrentHealthPercent) String added in v0.1.40

func (value *APLValueCurrentHealthPercent) String() string

func (*APLValueCurrentHealthPercent) Type added in v0.1.38

type APLValueCurrentMana added in v0.1.37

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

func (*APLValueCurrentMana) GetFloat added in v0.1.37

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

func (*APLValueCurrentMana) String added in v0.1.40

func (value *APLValueCurrentMana) String() string

func (*APLValueCurrentMana) Type added in v0.1.37

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

type APLValueCurrentManaPercent added in v0.1.37

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

func (*APLValueCurrentManaPercent) GetFloat added in v0.1.37

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

func (*APLValueCurrentManaPercent) String added in v0.1.40

func (value *APLValueCurrentManaPercent) String() string

func (*APLValueCurrentManaPercent) Type added in v0.1.37

type APLValueCurrentNonDeathRuneCount added in v0.1.38

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

func (*APLValueCurrentNonDeathRuneCount) GetInt added in v0.1.38

func (*APLValueCurrentNonDeathRuneCount) String added in v0.1.40

func (value *APLValueCurrentNonDeathRuneCount) String() string

func (*APLValueCurrentNonDeathRuneCount) Type added in v0.1.38

type APLValueCurrentRage added in v0.1.37

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

func (*APLValueCurrentRage) GetFloat added in v0.1.37

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

func (*APLValueCurrentRage) String added in v0.1.40

func (value *APLValueCurrentRage) String() string

func (*APLValueCurrentRage) Type added in v0.1.37

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

type APLValueCurrentRuneActive added in v0.1.38

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

func (*APLValueCurrentRuneActive) GetBool added in v0.1.38

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

func (*APLValueCurrentRuneActive) String added in v0.1.40

func (value *APLValueCurrentRuneActive) String() string

func (*APLValueCurrentRuneActive) Type added in v0.1.38

type APLValueCurrentRuneCount added in v0.1.38

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

func (*APLValueCurrentRuneCount) GetInt added in v0.1.38

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

func (*APLValueCurrentRuneCount) String added in v0.1.40

func (value *APLValueCurrentRuneCount) String() string

func (*APLValueCurrentRuneCount) Type added in v0.1.38

type APLValueCurrentRuneDeath added in v0.1.38

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

func (*APLValueCurrentRuneDeath) GetBool added in v0.1.38

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

func (*APLValueCurrentRuneDeath) String added in v0.1.40

func (value *APLValueCurrentRuneDeath) String() string

func (*APLValueCurrentRuneDeath) Type added in v0.1.38

type APLValueCurrentRunicPower added in v0.1.38

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

func (*APLValueCurrentRunicPower) GetInt added in v0.1.38

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

func (*APLValueCurrentRunicPower) String added in v0.1.40

func (value *APLValueCurrentRunicPower) String() string

func (*APLValueCurrentRunicPower) Type added in v0.1.38

type APLValueCurrentTime added in v0.1.37

type APLValueCurrentTime struct {
	DefaultAPLValueImpl
}

func (*APLValueCurrentTime) GetDuration added in v0.1.37

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

func (*APLValueCurrentTime) String added in v0.1.40

func (value *APLValueCurrentTime) String() string

func (*APLValueCurrentTime) Type added in v0.1.37

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

type APLValueCurrentTimePercent added in v0.1.37

type APLValueCurrentTimePercent struct {
	DefaultAPLValueImpl
}

func (*APLValueCurrentTimePercent) GetFloat added in v0.1.37

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

func (*APLValueCurrentTimePercent) String added in v0.1.40

func (value *APLValueCurrentTimePercent) String() string

func (*APLValueCurrentTimePercent) Type added in v0.1.37

type APLValueDotIsActive added in v0.1.17

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

func (*APLValueDotIsActive) GetBool added in v0.1.17

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

func (*APLValueDotIsActive) String added in v0.1.40

func (value *APLValueDotIsActive) String() string

func (*APLValueDotIsActive) Type added in v0.1.17

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

type APLValueDotRemainingTime added in v0.1.37

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

func (*APLValueDotRemainingTime) GetDuration added in v0.1.37

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

func (*APLValueDotRemainingTime) String added in v0.1.40

func (value *APLValueDotRemainingTime) String() string

func (*APLValueDotRemainingTime) Type added in v0.1.37

type APLValueFrontOfTarget added in v0.1.55

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

func (*APLValueFrontOfTarget) GetBool added in v0.1.55

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

func (*APLValueFrontOfTarget) String added in v0.1.55

func (value *APLValueFrontOfTarget) String() string

func (*APLValueFrontOfTarget) Type added in v0.1.55

type APLValueGCDIsReady added in v0.1.37

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

func (*APLValueGCDIsReady) GetBool added in v0.1.37

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

func (*APLValueGCDIsReady) String added in v0.1.40

func (value *APLValueGCDIsReady) String() string

func (*APLValueGCDIsReady) Type added in v0.1.37

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

type APLValueGCDTimeToReady added in v0.1.37

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

func (*APLValueGCDTimeToReady) GetDuration added in v0.1.37

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

func (*APLValueGCDTimeToReady) String added in v0.1.40

func (value *APLValueGCDTimeToReady) String() string

func (*APLValueGCDTimeToReady) Type added in v0.1.37

type APLValueIsExecutePhase added in v0.1.40

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

func (*APLValueIsExecutePhase) GetBool added in v0.1.40

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

func (*APLValueIsExecutePhase) String added in v0.1.40

func (value *APLValueIsExecutePhase) String() string

func (*APLValueIsExecutePhase) Type added in v0.1.40

type APLValueMath added in v0.1.38

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

func (*APLValueMath) GetDuration added in v0.1.38

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

func (*APLValueMath) GetFloat added in v0.1.38

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

func (*APLValueMath) GetInnerValues added in v0.1.43

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

func (*APLValueMath) GetInt added in v0.1.38

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

func (*APLValueMath) String added in v0.1.40

func (value *APLValueMath) String() string

func (*APLValueMath) Type added in v0.1.38

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

type APLValueMax added in v0.1.43

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

func (*APLValueMax) GetDuration added in v0.1.43

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

func (*APLValueMax) GetFloat added in v0.1.43

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

func (*APLValueMax) GetInnerValues added in v0.1.43

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

func (*APLValueMax) GetInt added in v0.1.43

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

func (*APLValueMax) String added in v0.1.43

func (value *APLValueMax) String() string

func (*APLValueMax) Type added in v0.1.43

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

type APLValueMin added in v0.1.43

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

func (*APLValueMin) GetDuration added in v0.1.43

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

func (*APLValueMin) GetFloat added in v0.1.43

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

func (*APLValueMin) GetInnerValues added in v0.1.43

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

func (*APLValueMin) GetInt added in v0.1.43

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

func (*APLValueMin) String added in v0.1.43

func (value *APLValueMin) String() string

func (*APLValueMin) Type added in v0.1.43

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

type APLValueNextRuneCooldown added in v0.1.38

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

func (*APLValueNextRuneCooldown) GetDuration added in v0.1.38

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

func (*APLValueNextRuneCooldown) String added in v0.1.40

func (value *APLValueNextRuneCooldown) String() string

func (*APLValueNextRuneCooldown) Type added in v0.1.38

type APLValueNot added in v0.1.17

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

func (*APLValueNot) GetBool added in v0.1.17

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

func (*APLValueNot) GetInnerValues added in v0.1.43

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

func (*APLValueNot) String added in v0.1.40

func (value *APLValueNot) String() string

func (*APLValueNot) Type added in v0.1.17

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

type APLValueNumberTargets added in v0.1.38

type APLValueNumberTargets struct {
	DefaultAPLValueImpl
}

func (*APLValueNumberTargets) GetInt added in v0.1.38

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

func (*APLValueNumberTargets) String added in v0.1.40

func (value *APLValueNumberTargets) String() string

func (*APLValueNumberTargets) Type added in v0.1.38

type APLValueOr added in v0.1.17

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

func (*APLValueOr) GetBool added in v0.1.17

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

func (*APLValueOr) GetInnerValues added in v0.1.43

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

func (*APLValueOr) String added in v0.1.40

func (value *APLValueOr) String() string

func (*APLValueOr) Type added in v0.1.17

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

type APLValueRemainingTime added in v0.1.37

type APLValueRemainingTime struct {
	DefaultAPLValueImpl
}

func (*APLValueRemainingTime) GetDuration added in v0.1.37

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

func (*APLValueRemainingTime) String added in v0.1.40

func (value *APLValueRemainingTime) String() string

func (*APLValueRemainingTime) Type added in v0.1.37

type APLValueRemainingTimePercent added in v0.1.37

type APLValueRemainingTimePercent struct {
	DefaultAPLValueImpl
}

func (*APLValueRemainingTimePercent) GetFloat added in v0.1.37

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

func (*APLValueRemainingTimePercent) String added in v0.1.40

func (value *APLValueRemainingTimePercent) String() string

func (*APLValueRemainingTimePercent) Type added in v0.1.37

type APLValueRuneCooldown added in v0.1.38

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

func (*APLValueRuneCooldown) GetDuration added in v0.1.38

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

func (*APLValueRuneCooldown) String added in v0.1.40

func (value *APLValueRuneCooldown) String() string

func (*APLValueRuneCooldown) Type added in v0.1.38

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

type APLValueRuneGrace added in v0.1.48

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

func (*APLValueRuneGrace) GetDuration added in v0.1.48

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

func (*APLValueRuneGrace) String added in v0.1.48

func (value *APLValueRuneGrace) String() string

func (*APLValueRuneGrace) Type added in v0.1.48

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

type APLValueRuneSlotCooldown added in v0.1.48

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

func (*APLValueRuneSlotCooldown) GetDuration added in v0.1.48

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

func (*APLValueRuneSlotCooldown) String added in v0.1.48

func (value *APLValueRuneSlotCooldown) String() string

func (*APLValueRuneSlotCooldown) Type added in v0.1.48

type APLValueRuneSlotGrace added in v0.1.48

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

func (*APLValueRuneSlotGrace) GetDuration added in v0.1.48

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

func (*APLValueRuneSlotGrace) String added in v0.1.48

func (value *APLValueRuneSlotGrace) String() string

func (*APLValueRuneSlotGrace) Type added in v0.1.48

type APLValueSequenceIsComplete added in v0.1.43

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

func (*APLValueSequenceIsComplete) Finalize added in v0.1.43

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

func (*APLValueSequenceIsComplete) GetBool added in v0.1.43

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

func (*APLValueSequenceIsComplete) String added in v0.1.43

func (value *APLValueSequenceIsComplete) String() string

func (*APLValueSequenceIsComplete) Type added in v0.1.43

type APLValueSequenceIsReady added in v0.1.43

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

func (*APLValueSequenceIsReady) Finalize added in v0.1.43

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

func (*APLValueSequenceIsReady) GetBool added in v0.1.43

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

func (*APLValueSequenceIsReady) String added in v0.1.43

func (value *APLValueSequenceIsReady) String() string

func (*APLValueSequenceIsReady) Type added in v0.1.43

type APLValueSequenceTimeToReady added in v0.1.43

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

func (*APLValueSequenceTimeToReady) Finalize added in v0.1.43

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

func (*APLValueSequenceTimeToReady) GetDuration added in v0.1.43

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

func (*APLValueSequenceTimeToReady) String added in v0.1.43

func (value *APLValueSequenceTimeToReady) String() string

func (*APLValueSequenceTimeToReady) Type added in v0.1.43

type APLValueSpellCPM added in v0.1.41

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

func (*APLValueSpellCPM) GetFloat added in v0.1.41

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

func (*APLValueSpellCPM) String added in v0.1.41

func (value *APLValueSpellCPM) String() string

func (*APLValueSpellCPM) Type added in v0.1.41

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

type APLValueSpellCanCast added in v0.1.37

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

func (*APLValueSpellCanCast) GetBool added in v0.1.37

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

func (*APLValueSpellCanCast) String added in v0.1.40

func (value *APLValueSpellCanCast) String() string

func (*APLValueSpellCanCast) Type added in v0.1.37

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

type APLValueSpellCastTime added in v0.1.38

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

func (*APLValueSpellCastTime) GetDuration added in v0.1.38

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

func (*APLValueSpellCastTime) String added in v0.1.40

func (value *APLValueSpellCastTime) String() string

func (*APLValueSpellCastTime) Type added in v0.1.38

type APLValueSpellChanneledTicks added in v0.1.49

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

func (*APLValueSpellChanneledTicks) GetInt added in v0.1.49

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

func (*APLValueSpellChanneledTicks) String added in v0.1.49

func (value *APLValueSpellChanneledTicks) String() string

func (*APLValueSpellChanneledTicks) Type added in v0.1.49

type APLValueSpellCurrentCost added in v0.1.55

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

func (*APLValueSpellCurrentCost) GetFloat added in v0.1.55

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

func (*APLValueSpellCurrentCost) String added in v0.1.55

func (value *APLValueSpellCurrentCost) String() string

func (*APLValueSpellCurrentCost) Type added in v0.1.55

type APLValueSpellIsChanneling added in v0.1.49

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

func (*APLValueSpellIsChanneling) GetBool added in v0.1.49

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

func (*APLValueSpellIsChanneling) String added in v0.1.49

func (value *APLValueSpellIsChanneling) String() string

func (*APLValueSpellIsChanneling) Type added in v0.1.49

type APLValueSpellIsReady added in v0.1.37

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

func (*APLValueSpellIsReady) GetBool added in v0.1.37

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

func (*APLValueSpellIsReady) String added in v0.1.40

func (value *APLValueSpellIsReady) String() string

func (*APLValueSpellIsReady) Type added in v0.1.37

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

type APLValueSpellTimeToReady added in v0.1.37

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

func (*APLValueSpellTimeToReady) GetDuration added in v0.1.37

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

func (*APLValueSpellTimeToReady) String added in v0.1.40

func (value *APLValueSpellTimeToReady) String() string

func (*APLValueSpellTimeToReady) Type added in v0.1.37

type APLValueSpellTravelTime added in v0.1.38

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

func (*APLValueSpellTravelTime) GetDuration added in v0.1.38

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

func (*APLValueSpellTravelTime) String added in v0.1.40

func (value *APLValueSpellTravelTime) String() string

func (*APLValueSpellTravelTime) Type added in v0.1.38

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.

	// 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 (
	ActionPriorityLow ActionPriority = -1
	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

	ActionPriorityPrePull ActionPriority = 10
)

type ActiveSetBonus

type ActiveSetBonus 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 ApplyEffect
}

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)

	// 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)

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.

func MakeTemporaryStatsOnUseCDRegistration

func MakeTemporaryStatsOnUseCDRegistration(auraLabel string, tempStats stats.Stats, duration time.Duration, config SpellConfig, cdFunc func(*Character) Cooldown, sharedCDFunc func(*Character) Cooldown) ApplyEffect

Helper function to make an ApplyEffect for a temporary stats on-use cooldown.

type ApplySpellResults added in v0.1.1

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

type ApplyWeaponEffect

type ApplyWeaponEffect func(Agent, proto.ItemSlot)

Function for applying permanent effects to an agent's weapon

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()
	NatureDamageTakenMultiplier  float64
	HauntSEDamageTakenMultiplier float64
	HealingDealtMultiplier       float64
}

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

func (*AttackTable) GetArmorDamageModifier

func (at *AttackTable) GetArmorDamageModifier(spell *Spell) float64

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

	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.
	OnStatsChange   OnStatsChange  // Invoked when the stats of this aura owner changes.

	OnCastComplete        OnCastComplete   // Invoked when a spell cast completes casting, before results are calculated.
	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.

	// If non-default, stat bonuses fron 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

func AcidSpitAura(target *Unit) *Aura

func BattleShoutAura added in v0.1.42

func BattleShoutAura(unit *Unit, commandingPresencePts int32, boomingVoicePts int32, minorGlyph bool) *Aura

func BlessingOfMightAura added in v0.1.42

func BlessingOfMightAura(unit *Unit, impBomPts int32) *Aura

func BloodFrenzyAura

func BloodFrenzyAura(target *Unit, points int32) *Aura

func BloodPactAura added in v0.1.42

func BloodPactAura(unit *Unit, impImpPts int32) *Aura

func BloodlustAura

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

func CommandingShoutAura added in v0.1.42

func CommandingShoutAura(unit *Unit, commandingPresencePts int32, boomingVoicePts int32, minorGlyph bool) *Aura

func CrystalYieldAura added in v0.1.36

func CrystalYieldAura(target *Unit) *Aura

func CurseOfElementsAura

func CurseOfElementsAura(target *Unit) *Aura

func CurseOfWeaknessAura

func CurseOfWeaknessAura(target *Unit, points int32) *Aura

func DemonicPactAura

func DemonicPactAura(character *Character) *Aura

func DemoralizingRoarAura

func DemoralizingRoarAura(target *Unit, points int32) *Aura

func DemoralizingScreechAura added in v0.1.8

func DemoralizingScreechAura(target *Unit) *Aura

func DemoralizingShoutAura

func DemoralizingShoutAura(target *Unit, boomingVoicePts int32, impDemoShoutPts int32) *Aura

func DivineGuardianAura added in v0.1.8

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

func EarthAndMoonAura

func EarthAndMoonAura(target *Unit, points int32) *Aura

func EbonPlaguebringerOrCryptFeverAura added in v0.1.8

func EbonPlaguebringerOrCryptFeverAura(caster *Character, target *Unit, epidemicPoints, cryptFeverPoints, ebonPlaguebringerPoints int32) *Aura

func ExposeArmorAura

func ExposeArmorAura(target *Unit, hasGlyph bool) *Aura

func FaerieFireAura

func FaerieFireAura(target *Unit, points int32) *Aura

func FlametongueTotemAura

func FlametongueTotemAura(character *Character) *Aura

func FrostFeverAura

func FrostFeverAura(target *Unit, impIcyTouch int32, epidemic int32) *Aura

func GiftOfArthasAura

func GiftOfArthasAura(target *Unit) *Aura

func GuardianSpiritAura added in v0.1.46

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

func HandOfSacrificeAura added in v0.1.46

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

func HeartOfTheCrusaderDebuff added in v0.1.20

func HeartOfTheCrusaderDebuff(target *Unit, points int32) *Aura

func HuntersMarkAura

func HuntersMarkAura(target *Unit, points int32, glyphed bool) *Aura

func ImprovedScorchAura

func ImprovedScorchAura(target *Unit) *Aura

func InfectedWoundsAura

func InfectedWoundsAura(target *Unit, points int32) *Aura

func InnervateAura

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

func InsectSwarmAura

func InsectSwarmAura(target *Unit) *Aura

func InspirationAura

func InspirationAura(unit *Unit, points int32) *Aura

func JudgementOfLightAura

func JudgementOfLightAura(target *Unit) *Aura

func JudgementOfWisdomAura

func JudgementOfWisdomAura(target *Unit) *Aura

func JudgementsOfTheJustAura

func JudgementsOfTheJustAura(target *Unit, points int32) *Aura

Note: Paladin code might apply this as part of their judgement auras instead of using another separate aura.

func MakePermanent

func MakePermanent(aura *Aura) *Aura

Returns the same Aura for chaining.

func MakeProcTriggerAura added in v0.1.7

func MakeProcTriggerAura(unit *Unit, config ProcTrigger) *Aura

func MakeStackingAura added in v0.1.12

func MakeStackingAura(character *Character, config StackingStatAura) *Aura

func ManaTideTotemAura

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

func MangleAura

func MangleAura(target *Unit) *Aura

func MarkOfBloodAura

func MarkOfBloodAura(target *Unit) *Aura

func MasterPoisonerDebuff

func MasterPoisonerDebuff(target *Unit, points int32) *Aura

func MiseryAura

func MiseryAura(target *Unit, points int32) *Aura

func PainSuppressionAura added in v0.1.8

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

func PowerInfusionAura

func PowerInfusionAura(character *Unit, actionTag int32) *Aura

func RetributionAura

func RetributionAura(character *Character, sanctifiedRetribution bool) *Aura

func RuneOfRazoriceVulnerabilityAura

func RuneOfRazoriceVulnerabilityAura(target *Unit) *Aura

func SavageCombatAura

func SavageCombatAura(target *Unit, points int32) *Aura

func ScorpidStingAura

func ScorpidStingAura(target *Unit) *Aura

func ShadowMasteryAura

func ShadowMasteryAura(target *Unit) *Aura

func ShatteringThrowAura

func ShatteringThrowAura(target *Unit) *Aura

func SporeCloudAura

func SporeCloudAura(target *Unit) *Aura

func StampedeAura

func StampedeAura(target *Unit) *Aura

func StingAura

func StingAura(target *Unit) *Aura

func SunderArmorAura

func SunderArmorAura(target *Unit) *Aura

func ThornsAura

func ThornsAura(character *Character, points int32) *Aura

func ThunderClapAura

func ThunderClapAura(target *Unit, points int32) *Aura

func TotemOfWrathAura

func TotemOfWrathAura(character *Character) *Aura

func TotemOfWrathDebuff

func TotemOfWrathDebuff(target *Unit) *Aura

func TraumaAura

func TraumaAura(target *Unit, points int) *Aura

func TricksOfTheTradeAura

func TricksOfTheTradeAura(character *Unit, actionTag int32, glyphed bool) *Aura

func UnholyFrenzyAura

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

func VindicationAura

func VindicationAura(target *Unit, points int32) *Aura

func WintersChillAura

func WintersChillAura(target *Unit, startingStacks int32) *Aura

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) ApplyOnExpire added in v0.1.8

func (aura *Aura) ApplyOnExpire(newOnExpire OnExpire)

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

func (*Aura) ApplyOnGain added in v0.1.8

func (aura *Aura) ApplyOnGain(newOnGain OnGain)

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

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) GetStacks

func (aura *Aura) GetStacks() int32

func (*Aura) IsActive

func (aura *Aura) IsActive() bool

func (*Aura) NewExclusiveEffect added in v0.1.8

func (aura *Aura) NewExclusiveEffect(categoryName string, singleAura bool, config ExclusiveEffect) *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) SetStacks

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

func (*Aura) ShouldRefreshExclusiveEffects added in v0.1.8

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 added in v0.1.10

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

The amount of time this aura has been active.

func (*Aura) UpdateExpires

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

type AuraArray added in v0.1.15

type AuraArray []*Aura

func (AuraArray) Get added in v0.1.15

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

type AuraCallback added in v0.1.7

type AuraCallback uint16
const (
	CallbackEmpty AuraCallback = 0

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

func (AuraCallback) Matches added in v0.1.7

func (c AuraCallback) Matches(other AuraCallback) bool

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 added in v0.1.40

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

func NewAuraReference added in v0.1.40

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

func NewIcdAuraReference added in v0.1.40

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

func (*AuraReference) Get added in v0.1.40

func (ar *AuraReference) Get() *Aura

func (*AuraReference) String added in v0.1.40

func (ar *AuraReference) String() string

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
}

Options for initializing auto attacks.

type AutoAttacks

type AutoAttacks struct {
	AutoSwingMelee  bool
	AutoSwingRanged 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) DelayMeleeBy added in v0.1.3

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

Delays all swing timers for the specified amount. Only used by Slam.

func (*AutoAttacks) DelayRangedUntil

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

func (*AutoAttacks) EnableAutoSwing

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

Re-enables the auto swing action for the iteration

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) NewPPMManager

func (aa *AutoAttacks) NewPPMManager(ppm float64, procMask ProcMask) PPMManager

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 added in v0.1.5

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) 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 added in v0.1.54

func (aa *AutoAttacks) SetMH(weapon Weapon)

func (*AutoAttacks) SetOH added in v0.1.54

func (aa *AutoAttacks) SetOH(weapon Weapon)

func (*AutoAttacks) SetOffhandSwingAt added in v0.1.54

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

func (*AutoAttacks) SetRanged added in v0.1.54

func (aa *AutoAttacks) SetRanged(weapon Weapon)

func (*AutoAttacks) SetReplaceMHSwing added in v0.1.55

func (aa *AutoAttacks) SetReplaceMHSwing(replaceSwing ReplaceMHSwing)

func (*AutoAttacks) StopMeleeUntil added in v0.1.3

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

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) UpdateSwingTimers added in v0.1.46

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

type BaseStatsKey

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

type BuffsCombo

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

type CanCastCondition added in v0.1.12

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 amount of time between the call to spell.Cast() and when the spell
	// effects are invoked.
	CastTime time.Duration
}

func (*Cast) EffectiveTime added in v0.1.8

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
	//Item Swap Handler
	ItemSwap ItemSwap

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

	PrimaryTalentTree uint8

	// 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, metrics *ResourceMetrics)

func (*Character) AddEnergy

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

func (*Character) AddFocus added in v0.1.16

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 added in v0.1.50

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

func (*Character) Advance added in v0.1.50

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

func (*Character) AllRunesSpent added in v0.1.50

func (rp *Character) AllRunesSpent() bool

func (*Character) AnyRuneReadyAt added in v0.1.50

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

func (*Character) AnySpentRuneReadyAt added in v0.1.50

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) ApplyDynamicEquipScaling added in v0.1.35

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

func (*Character) ApplyEquipScaling added in v0.1.35

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

func (*Character) BloodDeathRuneBothReadyAt added in v0.1.50

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

func (*Character) BloodRuneReadyAt added in v0.1.50

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

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

func (*Character) BloodTapConversion added in v0.1.50

func (rp *Character) BloodTapConversion(sim *Simulation)

func (*Character) CancelBloodTap added in v0.1.50

func (rp *Character) CancelBloodTap(sim *Simulation)

func (*Character) ComboPoints

func (eb *Character) ComboPoints() int32

func (*Character) ConvertFromDeath added in v0.1.50

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

ConvertFromDeath reverts the rune to its original type.

func (*Character) ConvertToDeath added in v0.1.50

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) CurrentBloodOrDeathRunes added in v0.1.50

func (rp *Character) CurrentBloodOrDeathRunes() int8

func (*Character) CurrentBloodRuneGrace added in v0.1.50

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

func (*Character) CurrentBloodRunes added in v0.1.50

func (rp *Character) CurrentBloodRunes() int8

func (*Character) CurrentDeathRunes added in v0.1.50

func (rp *Character) CurrentDeathRunes() int8

func (*Character) CurrentEnergy

func (eb *Character) CurrentEnergy() float64

func (*Character) CurrentFocus added in v0.1.16

func (fb *Character) CurrentFocus() float64

func (*Character) CurrentFrostOrDeathRunes added in v0.1.50

func (rp *Character) CurrentFrostOrDeathRunes() int8

func (*Character) CurrentFrostRuneGrace added in v0.1.50

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

func (*Character) CurrentFrostRunes added in v0.1.50

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) CurrentRuneGrace added in v0.1.50

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

func (*Character) CurrentRunicPower added in v0.1.50

func (rp *Character) CurrentRunicPower() float64

func (*Character) CurrentUnholyOrDeathRunes added in v0.1.50

func (rp *Character) CurrentUnholyOrDeathRunes() int8

func (*Character) CurrentUnholyRuneGrace added in v0.1.50

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

func (*Character) CurrentUnholyRunes added in v0.1.50

func (rp *Character) CurrentUnholyRunes() int8

func (*Character) DeathRuneRegenAt added in v0.1.50

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 added in v0.1.50

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 added in v0.1.50

func (rp *Character) DeathRunesInFU() int8

func (*Character) DebugString added in v0.1.50

func (rp *Character) DebugString() string

func (*Character) DefaultHealingCritMultiplier

func (character *Character) DefaultHealingCritMultiplier() float64

func (*Character) DefaultMeleeCritMultiplier

func (character *Character) DefaultMeleeCritMultiplier() float64

func (*Character) DefaultSpellCritMultiplier

func (character *Character) DefaultSpellCritMultiplier() float64

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) EndOOMEvent added in v0.1.65

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

func (*Character) EquipStats added in v0.1.35

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

func (*Character) FillPlayerStats added in v0.1.17

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

func (*Character) Finalize

func (character *Character) Finalize()

func (*Character) FrostRuneGraceRemaining added in v0.1.50

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

func (*Character) FrostRuneReadyAt added in v0.1.50

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) GetActiveSetBonuses

func (character *Character) GetActiveSetBonuses() []ActiveSetBonus

Returns a list describing all active set bonuses.

func (*Character) GetAura

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

func (*Character) GetAuraByID added in v0.1.37

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

func (*Character) GetAuras added in v0.1.42

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) GetIcdAuraByID added in v0.1.38

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 added in v0.1.10

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

func (*Character) GetMajorCooldowns

func (mcdm *Character) GetMajorCooldowns() []*MajorCooldown

Returns all MCDs.

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) GetPresimOptions

func (character *Character) GetPresimOptions(playerConfig *proto.Player) *PresimOptions

func (*Character) GetProcMaskForEnchant added in v0.1.45

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

func (*Character) GetProcMaskForItem added in v0.1.45

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

func (*Character) GetProcMaskForTypes added in v0.1.45

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

func (*Character) GetPseudoStatsProto added in v0.1.8

func (character *Character) GetPseudoStatsProto() []float64

func (*Character) GetRangedWeapon

func (character *Character) GetRangedWeapon() *Item

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

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) 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) HasSetBonus

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

func (*Character) HasTrinketEquipped

func (character *Character) HasTrinketEquipped(itemID int32) bool

func (*Character) HealingCritMultiplier

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

func (*Character) IsBloodTappedRune added in v0.1.50

func (rp *Character) IsBloodTappedRune(slot int8) bool

func (*Character) IsOOM added in v0.1.65

func (mb *Character) IsOOM() bool

func (*Character) LeftBloodRuneReady added in v0.1.50

func (rp *Character) LeftBloodRuneReady() bool

func (*Character) MaxHealth

func (hb *Character) MaxHealth() float64

func (*Character) MeleeCritMultiplier

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

func (*Character) NewTemporaryStatsAura

func (character *Character) NewTemporaryStatsAura(auraLabel string, actionID ActionID, tempStats stats.Stats, duration time.Duration) *Aura

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)) *Aura

Alternative that allows modifying the Aura config.

func (*Character) NextBloodRuneReadyAt added in v0.1.50

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

func (*Character) NextEnergyTickAt

func (eb *Character) NextEnergyTickAt() time.Duration

func (*Character) NextFrostRuneReadyAt added in v0.1.50

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

func (*Character) NextUnholyRuneReadyAt added in v0.1.50

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

func (*Character) NormalFrostRuneReadyAt added in v0.1.50

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

NormalFrostRuneReadyAt returns the earliest time a non-death frost rune is ready.

func (*Character) NormalSpentBloodRuneReadyAt added in v0.1.50

func (rp *Character) NormalSpentBloodRuneReadyAt(_ *Simulation) time.Duration

NormalSpentBloodRuneReadyAt returns the earliest time a spent non-death blood rune is ready.

func (*Character) NormalUnholyRuneReadyAt added in v0.1.50

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

func (*Character) NumActiveAurasWithTag

func (at *Character) NumActiveAurasWithTag(tag string) int32

func (*Character) OnCastComplete

func (at *Character) OnCastComplete(sim *Simulation, spell *Spell)

Invokes the OnCastComplete event for all tracked Auras.

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 added in v0.1.50

func (rp *Character) OptimalRuneCost(cost RuneCost) RuneCost

func (*Character) Predictor added in v0.1.50

func (rp *Character) Predictor() *Predictor

func (*Character) RegenAllRunes added in v0.1.50

func (rp *Character) RegenAllRunes(sim *Simulation)

func (*Character) RegisterOnItemSwap added in v0.1.10

func (character *Character) RegisterOnItemSwap(callback OnSwapItem)

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) RemoveDynamicEquipScaling added in v0.1.35

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

func (*Character) RemoveEquipScaling added in v0.1.35

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

func (*Character) RemoveHealth

func (hb *Character) RemoveHealth(sim *Simulation, amount float64)

func (*Character) ResetEnergyTick

func (eb *Character) ResetEnergyTick(sim *Simulation)

Gives an immediate partial energy tick and restarts the tick timer.

func (*Character) RuneGraceAt added in v0.1.50

func (rp *Character) RuneGraceAt(slot int8, at time.Duration) time.Duration

func (*Character) RuneIsActive added in v0.1.50

func (rp *Character) RuneIsActive(slot int8) bool

func (*Character) RuneIsDeath added in v0.1.50

func (rp *Character) RuneIsDeath(slot int8) bool

func (*Character) RuneReadyAt added in v0.1.50

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

func (*Character) SetRuneCd added in v0.1.50

func (rp *Character) SetRuneCd(runeCd time.Duration)

func (*Character) SpellCritMultiplier

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

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 added in v0.1.16

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

func (*Character) SpendRage

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

func (*Character) SpendRuneReadyAt added in v0.1.50

func (rp *Character) SpendRuneReadyAt(slot int8, spendAt time.Duration) time.Duration

func (*Character) StartOOMEvent added in v0.1.65

func (mb *Character) StartOOMEvent(sim *Simulation, requiredMana float64)

func (*Character) UnholyRuneGraceRemaining added in v0.1.50

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

func (*Character) UnholyRuneReadyAt added in v0.1.50

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) 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 added in v0.1.8

type CharacterBuildPhase uint8
const (
	CharacterBuildPhaseNone CharacterBuildPhase = 0
	CharacterBuildPhaseBase CharacterBuildPhase = 1 << iota
	CharacterBuildPhaseGear
	CharacterBuildPhaseTalents
	CharacterBuildPhaseBuffs
	CharacterBuildPhaseConsumes
)

func (CharacterBuildPhase) Matches added in v0.1.8

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
	GearSet     GearSetCombo
	SpecOptions SpecOptionsCombo
	Glyphs      *proto.Glyphs
	Talents     string
	Rotation    RotationCombo

	Consumes *proto.Consumes

	IsHealer        bool
	IsTank          bool
	InFrontOfTarget bool

	OtherRaces       []proto.Race
	OtherGearSets    []GearSetCombo
	OtherSpecOptions []SpecOptionsCombo
	OtherRotations   []RotationCombo

	ItemFilter ItemFilter

	StatsToWeigh    []proto.Stat
	EPReferenceStat proto.Stat

	Cooldowns *proto.Cooldowns
}

type CombinedTestGenerator

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

func (*CombinedTestGenerator) GetTest

func (*CombinedTestGenerator) NumTests

func (generator *CombinedTestGenerator) NumTests() int

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) 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 DefaultAPLValueImpl added in v0.1.44

type DefaultAPLValueImpl struct {
}

Provides empty implementations for the GetX() value interface functions.

func (DefaultAPLValueImpl) Finalize added in v0.1.44

func (impl DefaultAPLValueImpl) Finalize(*APLRotation)

func (DefaultAPLValueImpl) GetBool added in v0.1.44

func (impl DefaultAPLValueImpl) GetBool(sim *Simulation) bool

func (DefaultAPLValueImpl) GetDuration added in v0.1.44

func (impl DefaultAPLValueImpl) GetDuration(sim *Simulation) time.Duration

func (DefaultAPLValueImpl) GetFloat added in v0.1.44

func (impl DefaultAPLValueImpl) GetFloat(sim *Simulation) float64

func (DefaultAPLValueImpl) GetInnerValues added in v0.1.44

func (impl DefaultAPLValueImpl) GetInnerValues() []APLValue

func (DefaultAPLValueImpl) GetInt added in v0.1.44

func (impl DefaultAPLValueImpl) GetInt(sim *Simulation) int32

func (DefaultAPLValueImpl) GetString added in v0.1.44

func (impl DefaultAPLValueImpl) GetString(sim *Simulation) string

type DelayedActionOptions

type DelayedActionOptions struct {
	// When the action should be performed.
	DoAt time.Duration

	Priority ActionPriority

	OnAction func(*Simulation)
	CleanUp  func(*Simulation)
}

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

	// Embed Aura, so we can use IsActive/Refresh/etc directly.
	*Aura

	NumberOfTicks int32         // number of ticks over the whole duration
	TickLength    time.Duration // time between each tick

	// If true, tick length will be shortened based on casting speed.
	AffectedByCastSpeed bool

	OnSnapshot OnSnapshot
	OnTick     OnTick

	SnapshotBaseDamage         float64
	SnapshotCritChance         float64
	SnapshotAttackerMultiplier float64

	// Number of ticks since last call to Apply().
	TickCount int32
	// contains filtered or unexported fields
}

func (*Dot) Apply

func (dot *Dot) Apply(sim *Simulation)

func (*Dot) ApplyOrRefresh added in v0.1.3

func (dot *Dot) ApplyOrRefresh(sim *Simulation)

Like Apply(), but does not reset the tick timer.

func (*Dot) ApplyOrReset added in v0.1.5

func (dot *Dot) ApplyOrReset(sim *Simulation)

ApplyOrReset is used for rolling dots that reset the tick timer on reapplication. This is more efficient than Apply(), and works around tickAction.CleanUp() wrongly generating an extra ticks if (re-)application and tick happen at the same time.

func (*Dot) CalcAndDealPeriodicSnapshotDamage added in v0.1.1

func (dot *Dot) CalcAndDealPeriodicSnapshotDamage(sim *Simulation, target *Unit, outcomeApplier OutcomeApplier) *SpellResult

func (*Dot) CalcAndDealPeriodicSnapshotHealing added in v0.1.1

func (dot *Dot) CalcAndDealPeriodicSnapshotHealing(sim *Simulation, target *Unit, outcomeApplier OutcomeApplier) *SpellResult

func (*Dot) CalcSnapshotDamage added in v0.1.1

func (dot *Dot) CalcSnapshotDamage(sim *Simulation, target *Unit, outcomeApplier OutcomeApplier) *SpellResult

func (*Dot) CalcSnapshotHealing added in v0.1.1

func (dot *Dot) CalcSnapshotHealing(sim *Simulation, target *Unit, outcomeApplier OutcomeApplier) *SpellResult

func (*Dot) Cancel

func (dot *Dot) Cancel(sim *Simulation)

func (*Dot) ManualTick added in v0.1.22

func (dot *Dot) ManualTick(sim *Simulation)

ManualTick forces the dot forward one tick Will cancel the dot if it is out of ticks.

func (*Dot) MaxTicksRemaining added in v0.1.49

func (dot *Dot) MaxTicksRemaining() int32

func (*Dot) NextTickAt added in v0.1.49

func (dot *Dot) NextTickAt() time.Duration

func (*Dot) NumTicksRemaining added in v0.1.10

func (dot *Dot) NumTicksRemaining(sim *Simulation) int

func (*Dot) OutcomeExpectedMagicSnapshotCrit added in v0.1.10

func (dot *Dot) OutcomeExpectedMagicSnapshotCrit(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Dot) OutcomeMagicHitAndSnapshotCrit added in v0.1.1

func (dot *Dot) OutcomeMagicHitAndSnapshotCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Dot) OutcomeRangedHitAndCritSnapshot added in v0.1.1

func (dot *Dot) OutcomeRangedHitAndCritSnapshot(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Dot) OutcomeSnapshotCrit added in v0.1.1

func (dot *Dot) OutcomeSnapshotCrit(sim *Simulation, result *SpellResult, _ *AttackTable)

func (*Dot) OutcomeTick added in v0.1.1

func (dot *Dot) OutcomeTick(_ *Simulation, result *SpellResult, _ *AttackTable)

A tick always hits, but we don't count them as hits in the metrics.

func (*Dot) OutcomeTickCounted added in v0.1.20

func (dot *Dot) OutcomeTickCounted(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Dot) OutcomeTickPhysicalCrit added in v0.1.1

func (dot *Dot) OutcomeTickPhysicalCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Dot) RecomputeAuraDuration

func (dot *Dot) RecomputeAuraDuration()

Call this after manually changing NumberOfTicks or TickLength.

func (*Dot) RescheduleNextTick added in v0.1.55

func (dot *Dot) RescheduleNextTick(sim *Simulation)

func (*Dot) Rollover

func (dot *Dot) Rollover(sim *Simulation)

Rollover is used to reset the duration of a dot from an external spell (not casting the dot itself) This keeps the snapshot crit and %dmg modifiers. However, sp and haste are recalculated.

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) 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 added in v0.1.5

func (dot *Dot) TickPeriod() time.Duration

TickPeriod is how fast the snapshot dot ticks.

func (*Dot) TimeUntilNextTick added in v0.1.10

func (dot *Dot) TimeUntilNextTick(sim *Simulation) time.Duration

type DotArray added in v0.1.12

type DotArray []*Dot

func (DotArray) Get added in v0.1.12

func (dots DotArray) Get(target *Unit) *Dot

type DotConfig added in v0.1.12

type DotConfig struct {
	IsAOE    bool // Set to true for AOE dots (Blizzard, Hurricane, Consecrate, etc)
	SelfOnly bool // Set to true to only create the self-hot.

	// Optional, will default to the corresponding spell.
	Spell *Spell

	Aura Aura

	NumberOfTicks int32         // number of ticks over the whole duration
	TickLength    time.Duration // time between each tick

	// If true, tick length will be shortened based on casting speed.
	AffectedByCastSpeed bool

	OnSnapshot OnSnapshot
	OnTick     OnTick
}

type DynamicDamageTakenModifier

type DynamicDamageTakenModifier func(sim *Simulation, spell *Spell, result *SpellResult)

type Enchant added in v0.1.5

type Enchant struct {
	EffectID int32 // Used by UI to apply effect to tooltip
	Stats    stats.Stats
}

func EnchantFromProto added in v0.1.5

func EnchantFromProto(pData *proto.SimEnchant) Enchant

type Encounter

type Encounter struct {
	Duration          time.Duration
	DurationVariation time.Duration
	Targets           []*Target
	TargetUnits       []*Unit

	ExecuteProportion_20 float64
	ExecuteProportion_25 float64
	ExecuteProportion_35 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 EnergyCost added in v0.1.10

type EnergyCost struct {
	Refund            float64
	RefundMetrics     *ResourceMetrics
	ResourceMetrics   *ResourceMetrics
	ComboPointMetrics *ResourceMetrics
}

func (*EnergyCost) CostFailureReason added in v0.1.51

func (ec *EnergyCost) CostFailureReason(_ *Simulation, spell *Spell) string

func (*EnergyCost) IssueRefund added in v0.1.10

func (ec *EnergyCost) IssueRefund(sim *Simulation, spell *Spell)

func (*EnergyCost) MeetsRequirement added in v0.1.10

func (ec *EnergyCost) MeetsRequirement(_ *Simulation, spell *Spell) bool

func (*EnergyCost) SpendCost added in v0.1.10

func (ec *EnergyCost) SpendCost(sim *Simulation, spell *Spell)

type EnergyCostOptions added in v0.1.10

type EnergyCostOptions struct {
	Cost float64

	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
	// contains filtered or unexported fields
}

func NewEnvironment

func NewEnvironment(raidProto *proto.Raid, encounterProto *proto.Encounter, runFakePrepull bool) (*Environment, *proto.RaidStats, *proto.EncounterStats)

func (*Environment) GetAgentFromUnit added in v0.1.63

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) GetNumTargets

func (env *Environment) GetNumTargets() int32

func (*Environment) GetTarget

func (env *Environment) GetTarget(index int32) *Target

func (*Environment) GetTargetUnit

func (env *Environment) GetTargetUnit(index int32) *Unit

func (*Environment) GetUnit added in v0.1.39

func (env *Environment) GetUnit(ref *proto.UnitReference, contextUnit *Unit) *Unit

func (*Environment) IsFinalized

func (env *Environment) IsFinalized() bool

func (*Environment) NextTarget

func (env *Environment) NextTarget(target *Unit) *Target

func (*Environment) NextTargetUnit

func (env *Environment) NextTargetUnit(target *Unit) *Unit

func (*Environment) PrepullStartTime added in v0.1.46

func (env *Environment) PrepullStartTime() time.Duration

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 added in v0.1.41

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.

type EnvironmentState

type EnvironmentState int
const (
	Created EnvironmentState = iota
	Constructed
	Initialized
	Finalized
)

type Equipment added in v0.1.5

type Equipment [proto.ItemSlot_ItemSlotRanged + 1]Item

func NewEquipmentSet added in v0.1.5

func NewEquipmentSet(equipSpec EquipmentSpec) Equipment

func ProtoToEquipment added in v0.1.5

func ProtoToEquipment(es *proto.EquipmentSpec) Equipment

func (*Equipment) EquipItem added in v0.1.5

func (equipment *Equipment) EquipItem(item Item)

func (*Equipment) Finger1 added in v0.1.45

func (equipment *Equipment) Finger1() *Item

func (*Equipment) Finger2 added in v0.1.45

func (equipment *Equipment) Finger2() *Item

func (*Equipment) Hands added in v0.1.45

func (equipment *Equipment) Hands() *Item

func (*Equipment) Head added in v0.1.45

func (equipment *Equipment) Head() *Item

func (*Equipment) MainHand added in v0.1.45

func (equipment *Equipment) MainHand() *Item

func (*Equipment) Neck added in v0.1.45

func (equipment *Equipment) Neck() *Item

func (*Equipment) OffHand added in v0.1.45

func (equipment *Equipment) OffHand() *Item

func (*Equipment) Ranged added in v0.1.45

func (equipment *Equipment) Ranged() *Item

func (*Equipment) Stats added in v0.1.5

func (equipment *Equipment) Stats() stats.Stats

func (*Equipment) ToEquipmentSpecProto added in v0.1.5

func (equipment *Equipment) ToEquipmentSpecProto() *proto.EquipmentSpec

func (*Equipment) Trinket1 added in v0.1.45

func (equipment *Equipment) Trinket1() *Item

func (*Equipment) Trinket2 added in v0.1.45

func (equipment *Equipment) Trinket2() *Item

type EquipmentSpec added in v0.1.5

type EquipmentSpec [proto.ItemSlot_ItemSlotRanged + 1]ItemSpec

Structs used for looking up items/gems/enchants

func ProtoToEquipmentSpec added in v0.1.5

func ProtoToEquipmentSpec(es *proto.EquipmentSpec) EquipmentSpec

type ExclusiveCategory added in v0.1.8

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 added in v0.1.8

func (ec *ExclusiveCategory) AnyActive() bool

func (*ExclusiveCategory) GetActiveAura added in v0.1.8

func (ec *ExclusiveCategory) GetActiveAura() *Aura

func (*ExclusiveCategory) GetActiveEffect added in v0.1.8

func (ec *ExclusiveCategory) GetActiveEffect() *ExclusiveEffect

func (*ExclusiveCategory) GetHighestPrioActiveEffect added in v0.1.8

func (ec *ExclusiveCategory) GetHighestPrioActiveEffect() *ExclusiveEffect

func (*ExclusiveCategory) SetActive added in v0.1.8

func (ec *ExclusiveCategory) SetActive(sim *Simulation, newActiveEffect *ExclusiveEffect)

type ExclusiveCategoryArray added in v0.1.15

type ExclusiveCategoryArray []*ExclusiveCategory

func (ExclusiveCategoryArray) Get added in v0.1.15

func (categories ExclusiveCategoryArray) Get(target *Unit) *ExclusiveCategory

type ExclusiveEffect added in v0.1.8

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 AtkSpeedReductionEffect added in v0.1.8

func AtkSpeedReductionEffect(aura *Aura, speedMultiplier float64) *ExclusiveEffect

func RegisterPercentDamageModifierEffect added in v0.1.24

func RegisterPercentDamageModifierEffect(aura *Aura, percentDamageModifier float64) *ExclusiveEffect

func (*ExclusiveEffect) Activate added in v0.1.8

func (ee *ExclusiveEffect) Activate(sim *Simulation) bool

Returns whether the effect is active.

func (*ExclusiveEffect) Deactivate added in v0.1.8

func (ee *ExclusiveEffect) Deactivate(sim *Simulation)

func (*ExclusiveEffect) IsActive added in v0.1.8

func (ee *ExclusiveEffect) IsActive() bool

func (*ExclusiveEffect) SetPriority added in v0.1.8

func (ee *ExclusiveEffect) SetPriority(sim *Simulation, newPrio float64)

type ExclusiveEffectManager added in v0.1.8

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

func (*ExclusiveEffectManager) GetExclusiveEffectCategory added in v0.1.8

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 added in v0.1.1

type ExpectedDamageCalculator func(sim *Simulation, target *Unit, spell *Spell, useSnapshot bool) *SpellResult

type FocusCost added in v0.1.16

type FocusCost struct {
	Refund          float64
	RefundMetrics   *ResourceMetrics
	ResourceMetrics *ResourceMetrics
}

func (*FocusCost) CostFailureReason added in v0.1.51

func (fc *FocusCost) CostFailureReason(_ *Simulation, spell *Spell) string

func (*FocusCost) IssueRefund added in v0.1.16

func (fc *FocusCost) IssueRefund(sim *Simulation, spell *Spell)

func (*FocusCost) MeetsRequirement added in v0.1.16

func (fc *FocusCost) MeetsRequirement(_ *Simulation, spell *Spell) bool

func (*FocusCost) SpendCost added in v0.1.16

func (fc *FocusCost) SpendCost(sim *Simulation, spell *Spell)

type FocusCostOptions added in v0.1.16

type FocusCostOptions struct {
	Cost float64

	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 added in v0.1.53

func GetGearSet(dir string, file string) GearSetCombo

type Gem added in v0.1.5

type Gem struct {
	ID    int32
	Name  string
	Stats stats.Stats
	Color proto.GemColor
}

func GemFromProto added in v0.1.5

func GemFromProto(pData *proto.SimGem) Gem

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
}

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

	OutcomePartial1
	OutcomePartial2
	OutcomePartial4
	OutcomePartial8
)

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) PartialResistString

func (ho HitOutcome) PartialResistString() string

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)

func (*IndividualTestSuite) TestStatWeights

func (testSuite *IndividualTestSuite) TestStatWeights(testName string, swr *proto.StatWeightsRequest)

type Item added in v0.1.5

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.

	GemSockets  []proto.GemColor
	SocketBonus stats.Stats

	// Modified for each instance of the item.
	Gems    []Gem
	Enchant Enchant

	//Internal use
	TempEnchant int32
}

func ItemFromProto added in v0.1.5

func ItemFromProto(pData *proto.SimItem) Item

func NewItem added in v0.1.5

func NewItem(itemSpec ItemSpec) Item

func (*Item) ToItemSpecProto added in v0.1.5

func (item *Item) ToItemSpecProto() *proto.ItemSpec

type ItemComboChecker added in v0.1.23

type ItemComboChecker map[int64]struct{}

func (*ItemComboChecker) HasCombo added in v0.1.23

func (ic *ItemComboChecker) HasCombo(itema int32, itemb int32) bool

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
}

Returns all items that meet the given conditions.

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 {
	Name            string
	AlternativeName string

	// 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]ApplyEffect
}

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 added in v0.1.5

type ItemSpec struct {
	ID      int32
	Enchant int32
	Gems    []int32
}

type ItemStringSpec added in v0.1.5

type ItemStringSpec struct {
	Name    string
	Enchant string
	Gems    []string
}

Like ItemSpec, but uses names for reference instead of ID.

type ItemSwap added in v0.1.10

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

func (*ItemSwap) CalcStatChanges added in v0.1.23

func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats

func (*ItemSwap) GetItem added in v0.1.10

func (swap *ItemSwap) GetItem(slot proto.ItemSlot) *Item

func (*ItemSwap) IsEnabled added in v0.1.10

func (swap *ItemSwap) IsEnabled() bool

func (*ItemSwap) IsSwapped added in v0.1.31

func (swap *ItemSwap) IsSwapped() bool

func (*ItemSwap) RegisterOnSwapItemForEffectWithPPMManager added in v0.1.10

func (swap *ItemSwap) RegisterOnSwapItemForEffectWithPPMManager(effectID int32, ppm float64, ppmm *PPMManager, aura *Aura)

Helper for handling Effects that use PPMManager to toggle the aura on/off

func (*ItemSwap) RegisterOnSwapItemForEnchantEffect added in v0.1.59

func (swap *ItemSwap) RegisterOnSwapItemForEnchantEffect(effectID int32, aura *Aura)

Helper for handling Effects that use the effectID to toggle the aura on and off

func (*ItemSwap) RegisterOnSwapItemForItemEffect added in v0.1.59

func (swap *ItemSwap) RegisterOnSwapItemForItemEffect(itemID int32, aura *Aura)

Helper for handling Effects that use the itemID to toggle the aura on and off

func (*ItemSwap) SwapItems added in v0.1.10

func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot)

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

	// Some fields are populated automatically.
	ItemFilter ItemFilter
	// contains filtered or unexported fields
}

func (*ItemsTestGenerator) GetTest

func (*ItemsTestGenerator) NumTests

func (generator *ItemsTestGenerator) NumTests() int

type MajorCooldown

type MajorCooldown struct {
	// Spell that is cast when this MCD is activated.
	Spell *Spell

	// 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

	// 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 added in v0.1.3

func (mcd *MajorCooldown) Disable()

func (*MajorCooldown) Enable added in v0.1.3

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 added in v0.1.10

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 added in v0.1.10

type ManaCost struct {
	ResourceMetrics *ResourceMetrics
}

func (*ManaCost) CostFailureReason added in v0.1.51

func (mc *ManaCost) CostFailureReason(sim *Simulation, spell *Spell) string

func (*ManaCost) IssueRefund added in v0.1.10

func (mc *ManaCost) IssueRefund(_ *Simulation, _ *Spell)

func (*ManaCost) MeetsRequirement added in v0.1.10

func (mc *ManaCost) MeetsRequirement(sim *Simulation, spell *Spell) bool

func (*ManaCost) SpendCost added in v0.1.10

func (mc *ManaCost) SpendCost(sim *Simulation, spell *Spell)

type ManaCostOptions added in v0.1.10

type ManaCostOptions struct {
	BaseCost   float64
	FlatCost   float64 // Alternative to BaseCost for giving a flat value.
	Multiplier float64 // It's OK to leave this at 0, will default to 1.
}

type MeleeDamageCalculator

type MeleeDamageCalculator func(attackPower float64, bonusWeaponDamage float64) float64

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 OnDoneIteration

type OnDoneIteration func(aura *Aura, sim *Simulation)

type OnExpire

type OnExpire func(aura *Aura, sim *Simulation)

type OnFocusGain added in v0.1.16

type OnFocusGain func(sim *Simulation)

OnFocusGain is called any time focus is increased.

type OnGain

type OnGain func(aura *Aura, sim *Simulation)

type OnInit

type OnInit func(aura *Aura, sim *Simulation)

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 added in v0.1.50

type OnRuneChange func(sim *Simulation, changeType RuneChangeType)

type OnRunicPowerGain

type OnRunicPowerGain func(sim *Simulation)

type OnSnapshot added in v0.1.1

type OnSnapshot func(sim *Simulation, target *Unit, dot *Dot, isRollover bool)

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 OnStacksChange

type OnStacksChange func(aura *Aura, sim *Simulation, oldStacks int32, newStacks int32)

type OnStatsChange

type OnStatsChange func(aura *Aura, sim *Simulation, oldStats stats.Stats, newStats stats.Stats)

type OnSwapItem added in v0.1.10

type OnSwapItem func(*Simulation)

type OnTick added in v0.1.1

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 PPMManager

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

func (*PPMManager) Chance added in v0.1.10

func (ppmm *PPMManager) Chance(procMask ProcMask) float64

func (*PPMManager) Proc

func (ppmm *PPMManager) Proc(sim *Simulation, procMask ProcMask, label string) bool

Returns whether the effect procced.

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(sim *Simulation, options DelayedActionOptions) *PendingAction

func NewPeriodicAction

func NewPeriodicAction(sim *Simulation, options PeriodicActionOptions) *PendingAction

func StartDelayedAction

func StartDelayedAction(sim *Simulation, options DelayedActionOptions) *PendingAction

Convenience for immediately creating and starting a delayed action.

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)

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(name string, owner *Character, baseStats stats.Stats, statInheritance PetStatInheritance, enabledOnStart bool, isGuardian bool) Pet

func (*Pet) AddComboPoints

func (eb *Pet) AddComboPoints(sim *Simulation, pointsToAdd int32, metrics *ResourceMetrics)

func (*Pet) AddEnergy

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

func (*Pet) AddFocus added in v0.1.16

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) 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 added in v0.1.50

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

func (*Pet) Advance added in v0.1.50

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

func (*Pet) AllRunesSpent added in v0.1.50

func (rp *Pet) AllRunesSpent() bool

func (*Pet) AnyRuneReadyAt added in v0.1.50

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

func (*Pet) AnySpentRuneReadyAt added in v0.1.50

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 added in v0.1.50

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

func (*Pet) BloodRuneReadyAt added in v0.1.50

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

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

func (*Pet) BloodTapConversion added in v0.1.50

func (rp *Pet) BloodTapConversion(sim *Simulation)

func (*Pet) CancelBloodTap added in v0.1.50

func (rp *Pet) CancelBloodTap(sim *Simulation)

func (*Pet) ComboPoints

func (eb *Pet) ComboPoints() int32

func (*Pet) ConvertFromDeath added in v0.1.50

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

ConvertFromDeath reverts the rune to its original type.

func (*Pet) ConvertToDeath added in v0.1.50

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 added in v0.1.50

func (rp *Pet) CurrentBloodOrDeathRunes() int8

func (*Pet) CurrentBloodRuneGrace added in v0.1.50

func (rp *Pet) CurrentBloodRuneGrace(sim *Simulation) time.Duration

func (*Pet) CurrentBloodRunes added in v0.1.50

func (rp *Pet) CurrentBloodRunes() int8

func (*Pet) CurrentDeathRunes added in v0.1.50

func (rp *Pet) CurrentDeathRunes() int8

func (*Pet) CurrentEnergy

func (eb *Pet) CurrentEnergy() float64

func (*Pet) CurrentFocus added in v0.1.16

func (fb *Pet) CurrentFocus() float64

func (*Pet) CurrentFrostOrDeathRunes added in v0.1.50

func (rp *Pet) CurrentFrostOrDeathRunes() int8

func (*Pet) CurrentFrostRuneGrace added in v0.1.50

func (rp *Pet) CurrentFrostRuneGrace(sim *Simulation) time.Duration

func (*Pet) CurrentFrostRunes added in v0.1.50

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) CurrentRuneGrace added in v0.1.50

func (rp *Pet) CurrentRuneGrace(sim *Simulation, slot int8) time.Duration

func (*Pet) CurrentRunicPower added in v0.1.50

func (rp *Pet) CurrentRunicPower() float64

func (*Pet) CurrentUnholyOrDeathRunes added in v0.1.50

func (rp *Pet) CurrentUnholyOrDeathRunes() int8

func (*Pet) CurrentUnholyRuneGrace added in v0.1.50

func (rp *Pet) CurrentUnholyRuneGrace(sim *Simulation) time.Duration

func (*Pet) CurrentUnholyRunes added in v0.1.50

func (rp *Pet) CurrentUnholyRunes() int8

func (*Pet) DeathRuneRegenAt added in v0.1.50

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 added in v0.1.50

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 added in v0.1.50

func (rp *Pet) DeathRunesInFU() int8

func (*Pet) DebugString added in v0.1.50

func (rp *Pet) DebugString() string

func (*Pet) Disable

func (pet *Pet) Disable(sim *Simulation)

func (*Pet) Enable

func (pet *Pet) Enable(sim *Simulation, petAgent PetAgent)

petAgent should be the PetAgent which embeds this Pet.

func (*Pet) EnableDynamicMeleeSpeed added in v0.1.48

func (pet *Pet) EnableDynamicMeleeSpeed(inheritance PetMeleeSpeedInheritance)

Enables and possibly updates how the pet inherits its owner's melee speed. DK use only.

func (*Pet) EnableDynamicStats added in v0.1.48

func (pet *Pet) EnableDynamicStats(inheritance PetStatInheritance)

Enables and possibly updates how the pet inherits its owner's stats. DK use only.

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 added in v0.1.65

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

func (*Pet) FrostRuneGraceRemaining added in v0.1.50

func (rp *Pet) FrostRuneGraceRemaining(sim *Simulation) time.Duration

func (*Pet) FrostRuneReadyAt added in v0.1.50

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 added in v0.1.37

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

func (*Pet) GetAuras added in v0.1.42

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 added in v0.1.38

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

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 added in v0.1.10

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

func (*Pet) GetMajorCooldowns

func (mcdm *Pet) GetMajorCooldowns() []*MajorCooldown

Returns all MCDs.

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) IsBloodTappedRune added in v0.1.50

func (rp *Pet) IsBloodTappedRune(slot int8) bool

func (*Pet) IsGuardian

func (pet *Pet) IsGuardian() bool

func (*Pet) IsOOM added in v0.1.65

func (mb *Pet) IsOOM() bool

func (*Pet) LeftBloodRuneReady added in v0.1.50

func (rp *Pet) LeftBloodRuneReady() bool

func (*Pet) MaxHealth

func (hb *Pet) MaxHealth() float64

func (*Pet) NextBloodRuneReadyAt added in v0.1.50

func (rp *Pet) NextBloodRuneReadyAt(sim *Simulation) time.Duration

func (*Pet) NextEnergyTickAt

func (eb *Pet) NextEnergyTickAt() time.Duration

func (*Pet) NextFrostRuneReadyAt added in v0.1.50

func (rp *Pet) NextFrostRuneReadyAt(sim *Simulation) time.Duration

func (*Pet) NextUnholyRuneReadyAt added in v0.1.50

func (rp *Pet) NextUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Pet) NormalFrostRuneReadyAt added in v0.1.50

func (rp *Pet) NormalFrostRuneReadyAt(sim *Simulation) time.Duration

NormalFrostRuneReadyAt returns the earliest time a non-death frost rune is ready.

func (*Pet) NormalSpentBloodRuneReadyAt added in v0.1.50

func (rp *Pet) NormalSpentBloodRuneReadyAt(_ *Simulation) time.Duration

NormalSpentBloodRuneReadyAt returns the earliest time a spent non-death blood rune is ready.

func (*Pet) NormalUnholyRuneReadyAt added in v0.1.50

func (rp *Pet) NormalUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Pet) NumActiveAurasWithTag

func (at *Pet) NumActiveAurasWithTag(tag string) int32

func (*Pet) OnCastComplete

func (at *Pet) OnCastComplete(sim *Simulation, spell *Spell)

Invokes the OnCastComplete event for all tracked Auras.

func (*Pet) OnGCDReady added in v0.1.63

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 added in v0.1.50

func (rp *Pet) OptimalRuneCost(cost RuneCost) RuneCost

func (*Pet) Predictor added in v0.1.50

func (rp *Pet) Predictor() *Predictor

func (*Pet) RegenAllRunes added in v0.1.50

func (rp *Pet) RegenAllRunes(sim *Simulation)

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) ResetEnergyTick

func (eb *Pet) ResetEnergyTick(sim *Simulation)

Gives an immediate partial energy tick and restarts the tick timer.

func (*Pet) RuneGraceAt added in v0.1.50

func (rp *Pet) RuneGraceAt(slot int8, at time.Duration) time.Duration

func (*Pet) RuneIsActive added in v0.1.50

func (rp *Pet) RuneIsActive(slot int8) bool

func (*Pet) RuneIsDeath added in v0.1.50

func (rp *Pet) RuneIsDeath(slot int8) bool

func (*Pet) RuneReadyAt added in v0.1.50

func (rp *Pet) RuneReadyAt(sim *Simulation, slot int8) time.Duration

func (*Pet) SetRuneCd added in v0.1.50

func (rp *Pet) SetRuneCd(runeCd 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 added in v0.1.16

func (fb *Pet) SpendFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) SpendRage

func (rb *Pet) SpendRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Pet) SpendRuneReadyAt added in v0.1.50

func (rp *Pet) SpendRuneReadyAt(slot int8, spendAt time.Duration) time.Duration

func (*Pet) StartOOMEvent added in v0.1.65

func (mb *Pet) StartOOMEvent(sim *Simulation, requiredMana float64)

func (*Pet) UnholyRuneGraceRemaining added in v0.1.50

func (rp *Pet) UnholyRuneGraceRemaining(sim *Simulation) time.Duration

func (*Pet) UnholyRuneReadyAt added in v0.1.50

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.

type PetAgent

type PetAgent interface {
	Agent

	// The Pet controlled by this PetAgent.
	GetPet() *Pet
}

Extension of Agent interface, for Pets.

type PetMeleeSpeedInheritance added in v0.1.48

type PetMeleeSpeedInheritance func(amount 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
)

type Predictor added in v0.1.50

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

func (*Predictor) BloodRuneReadyAt added in v0.1.50

func (p *Predictor) BloodRuneReadyAt(sim *Simulation) time.Duration

func (*Predictor) CurrentBloodRunes added in v0.1.50

func (p *Predictor) CurrentBloodRunes() int8

func (*Predictor) CurrentFrostRunes added in v0.1.50

func (p *Predictor) CurrentFrostRunes() int8

func (*Predictor) CurrentUnholyRunes added in v0.1.50

func (p *Predictor) CurrentUnholyRunes() int8

func (*Predictor) FrostRuneReadyAt added in v0.1.50

func (p *Predictor) FrostRuneReadyAt(sim *Simulation) time.Duration

func (*Predictor) SpendRuneCost added in v0.1.50

func (p *Predictor) SpendRuneCost(sim *Simulation, cost RuneCost)

func (*Predictor) UnholyRuneReadyAt added in v0.1.50

func (p *Predictor) UnholyRuneReadyAt(sim *Simulation) time.Duration

type PrepullAction added in v0.1.14

type PrepullAction struct {
	DoAt   time.Duration
	Action func(*Simulation)
}

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 ProcHandler added in v0.1.7

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
	// Special mask for procs that can trigger things
	ProcMaskProc
	// Mask for FT weapon and rogue poisons, seems to be spell procs from a weapon imbue
	ProcMaskWeaponProc
	// Mind Flay
	ProcMaskNotInSpellbook
	// Can proc Talisman of Volatile power, but nothing else?
	ProcMaskSuppressedProc
)

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.

type ProcTrigger added in v0.1.7

type ProcTrigger struct {
	Name            string
	ActionID        ActionID
	Duration        time.Duration
	Callback        AuraCallback
	ProcMask        ProcMask
	ProcMaskExclude ProcMask
	SpellFlags      SpellFlag
	Outcome         HitOutcome
	Harmful         bool
	ProcChance      float64
	PPM             float64
	ICD             time.Duration
	Handler         ProcHandler
}

type RageBarOptions

type RageBarOptions struct {
	StartingRage   float64
	RageMultiplier float64
	MHSwingSpeed   float64
	OHSwingSpeed   float64
}

type RageCost added in v0.1.10

type RageCost struct {
	Refund          float64
	RefundMetrics   *ResourceMetrics
	ResourceMetrics *ResourceMetrics
}

func (*RageCost) CostFailureReason added in v0.1.51

func (rc *RageCost) CostFailureReason(sim *Simulation, spell *Spell) string

func (*RageCost) IssueRefund added in v0.1.10

func (rc *RageCost) IssueRefund(sim *Simulation, spell *Spell)

func (*RageCost) MeetsRequirement added in v0.1.10

func (rc *RageCost) MeetsRequirement(_ *Simulation, spell *Spell) bool

func (*RageCost) SpendCost added in v0.1.10

func (rc *RageCost) SpendCost(sim *Simulation, spell *Spell)

type RageCostOptions added in v0.1.10

type RageCostOptions struct {
	Cost float64

	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.
	// 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) GetActiveUnits added in v0.1.16

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) 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) NewReplenishmentSource added in v0.1.6

func (raid *Raid) NewReplenishmentSource(actionID ActionID) ReplenishmentSource

Returns a new aura whose activation will give the Replenishment buff to 10 party/raid members.

func (*Raid) ProcReplenishment added in v0.1.6

func (raid *Raid) ProcReplenishment(sim *Simulation, src ReplenishmentSource)

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 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 ReplenishmentSource added in v0.1.6

type ReplenishmentSource int

type ResetEffect

type ResetEffect func(*Simulation)

Callback for doing something on reset.

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 added in v0.1.17

type RotationCombo struct {
	Label    string
	Rotation *proto.APLRotation
}

func GetAplRotation added in v0.1.51

func GetAplRotation(dir string, file string) RotationCombo

type RuneChangeType added in v0.1.50

type RuneChangeType int32
const (
	None             RuneChangeType = 0
	SpendRune        RuneChangeType = 1
	GainRune         RuneChangeType = 2
	ConvertToDeath   RuneChangeType = 4
	ConvertFromDeath RuneChangeType = 8
)

func (RuneChangeType) Matches added in v0.1.50

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 added in v0.1.12

type RuneCostImpl struct {
	BloodRuneCost  int8
	FrostRuneCost  int8
	UnholyRuneCost int8
	RunicPowerCost float64
	RunicPowerGain float64
	Refundable     bool
	// contains filtered or unexported fields
}

func (*RuneCostImpl) CostFailureReason added in v0.1.51

func (rc *RuneCostImpl) CostFailureReason(_ *Simulation, _ *Spell) string

func (*RuneCostImpl) IssueRefund added in v0.1.12

func (rc *RuneCostImpl) IssueRefund(_ *Simulation, _ *Spell)

func (*RuneCostImpl) MeetsRequirement added in v0.1.12

func (rc *RuneCostImpl) MeetsRequirement(_ *Simulation, spell *Spell) bool

func (*RuneCostImpl) SpendCost added in v0.1.12

func (rc *RuneCostImpl) SpendCost(sim *Simulation, spell *Spell)

type RuneCostOptions added in v0.1.12

type RuneCostOptions struct {
	BloodRuneCost  int8
	FrostRuneCost  int8
	UnholyRuneCost int8
	RunicPowerCost float64
	RunicPowerGain float64
	Refundable     bool
}

type RuneMeta

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

type SettingsCombos

type SettingsCombos struct {
	Class       proto.Class
	Races       []proto.Race
	GearSets    []GearSetCombo
	TalentSets  []TalentsCombo
	SpecOptions []SpecOptionsCombo
	Rotations   []RotationCombo
	Buffs       []BuffsCombo
	Encounters  []EncounterCombo
	SimOptions  *proto.SimOptions
	IsHealer    bool
	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 added in v0.1.42

type ShieldArray []*Shield

func (ShieldArray) Get added in v0.1.42

func (shields ShieldArray) Get(target *Unit) *Shield

type ShieldConfig added in v0.1.42

type ShieldConfig struct {
	SelfOnly bool // Set to true to only create the self-shield.

	Spell *Spell

	Aura
}

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)

	Log func(string, ...interface{})
	// contains filtered or unexported fields
}

func NewSim

func NewSim(rsr *proto.RaidSimRequest) *Simulation

func (*Simulation) AddPendingAction

func (sim *Simulation) AddPendingAction(pa *PendingAction)

func (*Simulation) AddTask added in v0.1.53

func (sim *Simulation) AddTask(task Task)

func (*Simulation) Cleanup added in v0.1.27

func (sim *Simulation) Cleanup()

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) PrePull added in v0.1.27

func (sim *Simulation) PrePull()

func (*Simulation) Proc added in v0.1.1

func (sim *Simulation) Proc(p float64, label string) bool

func (*Simulation) RandomExpFloat added in v0.1.18

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 added in v0.1.53

func (sim *Simulation) RemoveTask(task Task)

func (*Simulation) RescheduleTask added in v0.1.53

func (sim *Simulation) RescheduleTask(taskTime time.Duration)

func (*Simulation) Reseed added in v0.1.27

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 added in v0.1.13

func (sim *Simulation) RollWithLabel(min float64, max float64, label string) float64

func (*Simulation) Step added in v0.1.27

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

	// 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
	ExtraCastCondition CanCastCondition

	SpellMetrics []SpellMetrics

	// Performs the actions of this spell.
	ApplyEffects ApplySpellResults

	// The current or most recent cast data.
	CurCast Cast

	BonusHitRating           float64
	BonusCritRating          float64
	BonusSpellPower          float64
	BonusExpertiseRating     float64
	BonusArmorPenRating      float64
	CastTimeMultiplier       float64
	CostMultiplier           float64
	DamageMultiplier         float64
	DamageMultiplierAdditive float64
	CritMultiplier           float64

	// 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.
	RelatedAuras []AuraArray
	// contains filtered or unexported fields
}

func (*Spell) AOEDot added in v0.1.12

func (spell *Spell) AOEDot() *Dot

func (*Spell) AOEHot added in v0.1.12

func (spell *Spell) AOEHot() *Dot

func (*Spell) ApplyAOEThreat

func (spell *Spell) ApplyAOEThreat(threatAmount float64)

func (*Spell) ApplyAOEThreatIgnoreMultipliers

func (spell *Spell) ApplyAOEThreatIgnoreMultipliers(threatAmount float64)

func (*Spell) ApplyCostModifiers

func (spell *Spell) ApplyCostModifiers(cost float64) float64

func (*Spell) ApplyPostOutcomeDamageModifiers

func (spell *Spell) ApplyPostOutcomeDamageModifiers(sim *Simulation, result *SpellResult)

func (*Spell) AttackerDamageMultiplier added in v0.1.1

func (spell *Spell) AttackerDamageMultiplier(attackTable *AttackTable) float64

Returns the combined attacker modifiers.

func (*Spell) BloodRuneMetrics

func (spell *Spell) BloodRuneMetrics() *ResourceMetrics

func (*Spell) BonusWeaponDamage

func (spell *Spell) BonusWeaponDamage() float64

func (*Spell) CalcAndDealDamage added in v0.1.1

func (spell *Spell) CalcAndDealDamage(sim *Simulation, target *Unit, baseDamage float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcAndDealHealing added in v0.1.1

func (spell *Spell) CalcAndDealHealing(sim *Simulation, target *Unit, baseHealing float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcAndDealOutcome added in v0.1.1

func (spell *Spell) CalcAndDealOutcome(sim *Simulation, target *Unit, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcAndDealPeriodicDamage added in v0.1.1

func (spell *Spell) CalcAndDealPeriodicDamage(sim *Simulation, target *Unit, baseDamage float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CalcAndDealPeriodicHealing added in v0.1.1

func (spell *Spell) CalcAndDealPeriodicHealing(sim *Simulation, target *Unit, baseHealing float64, outcomeApplier OutcomeApplier) *SpellResult

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) CalcPeriodicDamage added in v0.1.1

func (spell *Spell) CalcPeriodicDamage(sim *Simulation, target *Unit, baseDamage float64, outcomeApplier OutcomeApplier) *SpellResult

func (*Spell) CanCast added in v0.1.12

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) Cast

func (spell *Spell) Cast(sim *Simulation, target *Unit) bool

func (*Spell) CastTime added in v0.1.22

func (spell *Spell) CastTime() time.Duration

Time until the cast is finished (ignoring GCD)

func (*Spell) CasterHealingMultiplier

func (spell *Spell) CasterHealingMultiplier() float64

func (*Spell) ComboPointMetrics

func (spell *Spell) ComboPointMetrics() *ResourceMetrics

func (*Spell) CurCPM added in v0.1.41

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 added in v0.1.12

func (spell *Spell) CurDot() *Dot

func (*Spell) CurHot added in v0.1.12

func (spell *Spell) CurHot() *Dot

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 added in v0.1.1

func (spell *Spell) DealPeriodicDamage(sim *Simulation, result *SpellResult)

func (*Spell) DealPeriodicHealing added in v0.1.1

func (spell *Spell) DealPeriodicHealing(sim *Simulation, result *SpellResult)

func (*Spell) DeathRuneMetrics

func (spell *Spell) DeathRuneMetrics() *ResourceMetrics

func (*Spell) DisposeResult added in v0.1.1

func (spell *Spell) DisposeResult(result *SpellResult)

func (*Spell) Dot added in v0.1.12

func (spell *Spell) Dot(target *Unit) *Dot

func (*Spell) EffectiveCastTime added in v0.1.22

func (spell *Spell) EffectiveCastTime() time.Duration

Time until either the cast is finished or GCD is ready again, whichever is longer

func (*Spell) EnergyMetrics added in v0.1.16

func (spell *Spell) EnergyMetrics() *ResourceMetrics

func (*Spell) ExpectedInitialDamage added in v0.1.51

func (spell *Spell) ExpectedInitialDamage(sim *Simulation, target *Unit) float64

func (*Spell) ExpectedTickDamage added in v0.1.51

func (spell *Spell) ExpectedTickDamage(sim *Simulation, target *Unit) float64

func (*Spell) ExpectedTickDamageFromCurrentSnapshot added in v0.1.51

func (spell *Spell) ExpectedTickDamageFromCurrentSnapshot(sim *Simulation, target *Unit) float64

func (*Spell) ExpertisePercentage

func (spell *Spell) ExpertisePercentage() float64

func (*Spell) FrostRuneMetrics

func (spell *Spell) FrostRuneMetrics() *ResourceMetrics

func (*Spell) HealingCritChance added in v0.1.1

func (spell *Spell) HealingCritChance() float64

func (*Spell) HealingCritCheck added in v0.1.1

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 added in v0.1.12

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) IsReady

func (spell *Spell) IsReady(sim *Simulation) bool

func (*Spell) IssueRefund added in v0.1.10

func (spell *Spell) IssueRefund(sim *Simulation)

func (*Spell) MagicCritCheck added in v0.1.1

func (spell *Spell) MagicCritCheck(sim *Simulation, target *Unit) bool

func (*Spell) MagicHitCheck

func (spell *Spell) MagicHitCheck(sim *Simulation, attackTable *AttackTable) bool

func (*Spell) MeleeAttackPower

func (spell *Spell) MeleeAttackPower() float64

func (*Spell) NewResult added in v0.1.1

func (spell *Spell) NewResult(target *Unit) *SpellResult

func (*Spell) OutcomeAlwaysHit

func (spell *Spell) OutcomeAlwaysHit(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeAlwaysMiss added in v0.1.1

func (spell *Spell) OutcomeAlwaysMiss(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeEnemyMeleeWhite added in v0.1.1

func (spell *Spell) OutcomeEnemyMeleeWhite(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeExpectedMagicAlwaysHit added in v0.1.1

func (spell *Spell) OutcomeExpectedMagicAlwaysHit(_ *Simulation, _ *SpellResult, _ *AttackTable)

func (*Spell) OutcomeExpectedMagicCrit added in v0.1.1

func (spell *Spell) OutcomeExpectedMagicCrit(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeExpectedMagicHit added in v0.1.1

func (spell *Spell) OutcomeExpectedMagicHit(_ *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeExpectedMagicHitAndCrit added in v0.1.1

func (spell *Spell) OutcomeExpectedMagicHitAndCrit(_ *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeExpectedTick added in v0.1.1

func (spell *Spell) OutcomeExpectedTick(_ *Simulation, _ *SpellResult, _ *AttackTable)

func (*Spell) OutcomeHealing added in v0.1.22

func (spell *Spell) OutcomeHealing(_ *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeHealingCrit

func (spell *Spell) OutcomeHealingCrit(sim *Simulation, result *SpellResult, _ *AttackTable)

func (*Spell) OutcomeMagicCrit

func (spell *Spell) OutcomeMagicCrit(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) OutcomeMeleeSpecialCritOnly

func (spell *Spell) OutcomeMeleeSpecialCritOnly(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialHit added in v0.1.1

func (spell *Spell) OutcomeMeleeSpecialHit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialHitAndCrit added in v0.1.1

func (spell *Spell) OutcomeMeleeSpecialHitAndCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialNoBlockDodgeParry added in v0.1.1

func (spell *Spell) OutcomeMeleeSpecialNoBlockDodgeParry(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeSpecialNoBlockDodgeParryNoCrit added in v0.1.1

func (spell *Spell) OutcomeMeleeSpecialNoBlockDodgeParryNoCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeWeaponSpecialHitAndCrit added in v0.1.1

func (spell *Spell) OutcomeMeleeWeaponSpecialHitAndCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

Like OutcomeMeleeSpecialHitAndCrit, but blocks prevent crits (all weapon damage based attacks).

func (*Spell) OutcomeMeleeWeaponSpecialNoCrit added in v0.1.1

func (spell *Spell) OutcomeMeleeWeaponSpecialNoCrit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeMeleeWhite

func (spell *Spell) OutcomeMeleeWhite(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeRangedCritOnly

func (spell *Spell) OutcomeRangedCritOnly(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 added in v0.1.42

func (spell *Spell) OutcomeRangedHitAndCritNoBlock(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) OutcomeTickMagicHit added in v0.1.1

func (spell *Spell) OutcomeTickMagicHit(sim *Simulation, result *SpellResult, attackTable *AttackTable)

func (*Spell) PhysicalCritChance added in v0.1.1

func (spell *Spell) PhysicalCritChance(attackTable *AttackTable) float64

func (*Spell) PhysicalCritCheck added in v0.1.1

func (spell *Spell) PhysicalCritCheck(sim *Simulation, attackTable *AttackTable) bool

func (*Spell) PhysicalHitChance

func (spell *Spell) PhysicalHitChance(attackTable *AttackTable) float64

func (*Spell) RangedAttackPower

func (spell *Spell) RangedAttackPower(target *Unit) float64

func (*Spell) ReadyAt

func (spell *Spell) ReadyAt() time.Duration

func (*Spell) ResistanceMultiplier

func (spell *Spell) ResistanceMultiplier(sim *Simulation, isPeriodic bool, attackTable *AttackTable) float64

Modifies damage based on Armor or Magic resistances, depending on the damage type.

func (*Spell) RunicPowerMetrics

func (spell *Spell) RunicPowerMetrics() *ResourceMetrics

func (*Spell) SelfHot added in v0.1.12

func (spell *Spell) SelfHot() *Dot

func (*Spell) SelfShield added in v0.1.42

func (spell *Spell) SelfShield() *Shield

func (*Spell) SetMetricsSplit added in v0.1.16

func (spell *Spell) SetMetricsSplit(splitIdx int32)

func (*Spell) Shield added in v0.1.42

func (spell *Spell) Shield(target *Unit) *Shield

func (*Spell) ShouldRefreshExclusiveEffects added in v0.1.41

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 added in v0.1.1

func (spell *Spell) SpellChanceToMiss(attackTable *AttackTable) float64

func (*Spell) SpellCritChance added in v0.1.1

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) SpendRefundableCost added in v0.1.12

func (spell *Spell) SpendRefundableCost(sim *Simulation, result *SpellResult)

func (*Spell) SpendRefundableCostAndConvertBloodRune added in v0.1.12

func (spell *Spell) SpendRefundableCostAndConvertBloodRune(sim *Simulation, result *SpellResult, convertChance float64)

func (*Spell) SpendRefundableCostAndConvertFrostOrUnholyRune added in v0.1.12

func (spell *Spell) SpendRefundableCostAndConvertFrostOrUnholyRune(sim *Simulation, result *SpellResult, convertChance float64)

func (*Spell) TargetDamageMultiplier added in v0.1.1

func (spell *Spell) TargetDamageMultiplier(attackTable *AttackTable, isPeriodic bool) float64

func (*Spell) ThreatFromDamage added in v0.1.1

func (spell *Spell) ThreatFromDamage(outcome HitOutcome, damage float64) float64

func (*Spell) TimeToReady

func (spell *Spell) TimeToReady(sim *Simulation) time.Duration

func (*Spell) TravelTime added in v0.1.51

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))

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

	ManaCost   ManaCostOptions
	EnergyCost EnergyCostOptions
	RageCost   RageCostOptions
	RuneCost   RuneCostOptions
	FocusCost  FocusCostOptions

	Cast               CastConfig
	ExtraCastCondition CanCastCondition

	BonusHitRating       float64
	BonusCritRating      float64
	BonusSpellPower      float64
	BonusExpertiseRating float64
	BonusArmorPenRating  float64

	DamageMultiplier         float64
	DamageMultiplierAdditive float64
	CritMultiplier           float64

	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

	RelatedAuras []AuraArray
}

type SpellCost added in v0.1.10

type SpellCost 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 SpellFlag

type SpellFlag uint32

Other flags

const (
	SpellFlagNone                     SpellFlag = 0
	SpellFlagIgnoreResists            SpellFlag = 1 << iota // skip spell resist/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
	SpellFlagIncludeTargetBonusDamage                       // Spell benefits from Gift of Arthas and Hemorrhage.
	SpellFlagBinary                                         // Does not do partial resists and could need a different hit roll.
	SpellFlagChanneled                                      // Spell is channeled
	SpellFlagDisease                                        // Spell is categorized as disease
	SpellFlagHauntSE                                        // Spell benefits from haunt/SE effects
	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.
	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.

	// 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
	Crushes int32
	Dodges  int32
	Glances int32
	Parries int32
	Blocks  int32

	TotalDamage    float64 // Damage done by all casts of this spell.
	TotalThreat    float64 // Threat generated by all casts of this spell.
	TotalHealing   float64 // Healing done by all 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 SpellRegisteredHandler

type SpellRegisteredHandler func(spell *Spell)

type SpellResult added in v0.1.1

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.

	ResistanceMultiplier float64 // Partial Resists / Armor multiplier
	PreOutcomeDamage     float64 // Damage done by this cast before Outcome is applied
	// contains filtered or unexported fields
}

func (*SpellResult) DamageString added in v0.1.1

func (result *SpellResult) DamageString() string

func (*SpellResult) DidCrit added in v0.1.1

func (result *SpellResult) DidCrit() bool

func (*SpellResult) HealingString added in v0.1.1

func (result *SpellResult) HealingString() string

func (*SpellResult) Landed added in v0.1.1

func (result *SpellResult) Landed() bool

type SpellSchool

type SpellSchool byte
const (
	SpellSchoolNone     SpellSchool = 0
	SpellSchoolPhysical SpellSchool = 1 << iota
	SpellSchoolArcane
	SpellSchoolFire
	SpellSchoolFrost
	SpellSchoolHoly
	SpellSchoolNature
	SpellSchoolShadow

	SpellSchoolMagic = SpellSchoolArcane | SpellSchoolFire | SpellSchoolFrost | SpellSchoolHoly | SpellSchoolNature | SpellSchoolShadow
)

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.

func (SpellSchool) ResistanceStat

func (ss SpellSchool) ResistanceStat() stats.Stat

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 added in v0.1.18

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 added in v0.1.18

func (sm *SplitMix64) Uint64() uint64

type StackingStatAura added in v0.1.12

type StackingStatAura struct {
	Aura          Aura
	BonusPerStack stats.Stats
}

type StatWeightValues

type StatWeightValues struct {
	Weights       UnitStats
	WeightsStdev  UnitStats
	EpValues      UnitStats
	EpValuesStdev UnitStats
}

func NewStatWeightValues added in v0.1.8

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 CalcStatWeight

func CalcStatWeight(swr *proto.StatWeightsRequest, referenceStat stats.Stat, progress chan *proto.ProgressMetrics) *StatWeightsResult

func NewStatWeightsResult added in v0.1.8

func NewStatWeightsResult() *StatWeightsResult

func (*StatWeightsResult) ToProto

func (swr *StatWeightsResult) ToProto() *proto.StatWeightsResult

type SubGenerator

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

type SubstitutionComboChecker added in v0.1.27

type SubstitutionComboChecker map[string]struct{}

func (*SubstitutionComboChecker) HasCombo added in v0.1.27

func (ic *SubstitutionComboChecker) HasCombo(replacements equipmentSubstitution) bool

type TalentsCombo added in v0.1.10

type TalentsCombo struct {
	Label   string
	Talents string
	Glyphs  *proto.Glyphs
}

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, metrics *ResourceMetrics)

func (*Target) AddEnergy

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

func (*Target) AddFocus added in v0.1.16

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 added in v0.1.50

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

func (*Target) Advance

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

func (*Target) AllRunesSpent added in v0.1.50

func (rp *Target) AllRunesSpent() bool

func (*Target) AnyRuneReadyAt added in v0.1.50

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

func (*Target) AnySpentRuneReadyAt added in v0.1.50

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 added in v0.1.50

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

func (*Target) BloodRuneReadyAt added in v0.1.50

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

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

func (*Target) BloodTapConversion added in v0.1.50

func (rp *Target) BloodTapConversion(sim *Simulation)

func (*Target) CancelBloodTap added in v0.1.50

func (rp *Target) CancelBloodTap(sim *Simulation)

func (*Target) ComboPoints

func (eb *Target) ComboPoints() int32

func (*Target) ConvertFromDeath added in v0.1.50

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

ConvertFromDeath reverts the rune to its original type.

func (*Target) ConvertToDeath added in v0.1.50

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 added in v0.1.50

func (rp *Target) CurrentBloodOrDeathRunes() int8

func (*Target) CurrentBloodRuneGrace added in v0.1.50

func (rp *Target) CurrentBloodRuneGrace(sim *Simulation) time.Duration

func (*Target) CurrentBloodRunes added in v0.1.50

func (rp *Target) CurrentBloodRunes() int8

func (*Target) CurrentDeathRunes added in v0.1.50

func (rp *Target) CurrentDeathRunes() int8

func (*Target) CurrentEnergy

func (eb *Target) CurrentEnergy() float64

func (*Target) CurrentFocus added in v0.1.16

func (fb *Target) CurrentFocus() float64

func (*Target) CurrentFrostOrDeathRunes added in v0.1.50

func (rp *Target) CurrentFrostOrDeathRunes() int8

func (*Target) CurrentFrostRuneGrace added in v0.1.50

func (rp *Target) CurrentFrostRuneGrace(sim *Simulation) time.Duration

func (*Target) CurrentFrostRunes added in v0.1.50

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) CurrentRuneGrace added in v0.1.50

func (rp *Target) CurrentRuneGrace(sim *Simulation, slot int8) time.Duration

func (*Target) CurrentRunicPower added in v0.1.50

func (rp *Target) CurrentRunicPower() float64

func (*Target) CurrentUnholyOrDeathRunes added in v0.1.50

func (rp *Target) CurrentUnholyOrDeathRunes() int8

func (*Target) CurrentUnholyRuneGrace added in v0.1.50

func (rp *Target) CurrentUnholyRuneGrace(sim *Simulation) time.Duration

func (*Target) CurrentUnholyRunes added in v0.1.50

func (rp *Target) CurrentUnholyRunes() int8

func (*Target) DeathRuneRegenAt added in v0.1.50

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 added in v0.1.50

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 added in v0.1.50

func (rp *Target) DeathRunesInFU() int8

func (*Target) DebugString added in v0.1.50

func (rp *Target) DebugString() string

func (*Target) EndOOMEvent added in v0.1.65

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

func (*Target) ExecuteCustomRotation added in v0.1.63

func (target *Target) ExecuteCustomRotation(sim *Simulation)

func (*Target) FrostRuneGraceRemaining added in v0.1.50

func (rp *Target) FrostRuneGraceRemaining(sim *Simulation) time.Duration

func (*Target) FrostRuneReadyAt added in v0.1.50

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 added in v0.1.37

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

func (*Target) GetAuras added in v0.1.42

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 added in v0.1.38

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

func (*Target) GetMetricsProto

func (target *Target) GetMetricsProto() *proto.UnitMetrics

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) IsBloodTappedRune added in v0.1.50

func (rp *Target) IsBloodTappedRune(slot int8) bool

func (*Target) IsOOM added in v0.1.65

func (mb *Target) IsOOM() bool

func (*Target) LeftBloodRuneReady added in v0.1.50

func (rp *Target) LeftBloodRuneReady() bool

func (*Target) MaxHealth

func (hb *Target) MaxHealth() float64

func (*Target) NextBloodRuneReadyAt added in v0.1.50

func (rp *Target) NextBloodRuneReadyAt(sim *Simulation) time.Duration

func (*Target) NextEnergyTickAt

func (eb *Target) NextEnergyTickAt() time.Duration

func (*Target) NextFrostRuneReadyAt added in v0.1.50

func (rp *Target) NextFrostRuneReadyAt(sim *Simulation) time.Duration

func (*Target) NextTarget

func (target *Target) NextTarget() *Target

func (*Target) NextUnholyRuneReadyAt added in v0.1.50

func (rp *Target) NextUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Target) NormalFrostRuneReadyAt added in v0.1.50

func (rp *Target) NormalFrostRuneReadyAt(sim *Simulation) time.Duration

NormalFrostRuneReadyAt returns the earliest time a non-death frost rune is ready.

func (*Target) NormalSpentBloodRuneReadyAt added in v0.1.50

func (rp *Target) NormalSpentBloodRuneReadyAt(_ *Simulation) time.Duration

NormalSpentBloodRuneReadyAt returns the earliest time a spent non-death blood rune is ready.

func (*Target) NormalUnholyRuneReadyAt added in v0.1.50

func (rp *Target) NormalUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Target) NumActiveAurasWithTag

func (at *Target) NumActiveAurasWithTag(tag string) int32

func (*Target) OnCastComplete

func (at *Target) OnCastComplete(sim *Simulation, spell *Spell)

Invokes the OnCastComplete event for all tracked Auras.

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 added in v0.1.50

func (rp *Target) OptimalRuneCost(cost RuneCost) RuneCost

func (*Target) Predictor added in v0.1.50

func (rp *Target) Predictor() *Predictor

func (*Target) RegenAllRunes added in v0.1.50

func (rp *Target) RegenAllRunes(sim *Simulation)

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) ResetEnergyTick

func (eb *Target) ResetEnergyTick(sim *Simulation)

Gives an immediate partial energy tick and restarts the tick timer.

func (*Target) RuneGraceAt added in v0.1.50

func (rp *Target) RuneGraceAt(slot int8, at time.Duration) time.Duration

func (*Target) RuneIsActive added in v0.1.50

func (rp *Target) RuneIsActive(slot int8) bool

func (*Target) RuneIsDeath added in v0.1.50

func (rp *Target) RuneIsDeath(slot int8) bool

func (*Target) RuneReadyAt added in v0.1.50

func (rp *Target) RuneReadyAt(sim *Simulation, slot int8) time.Duration

func (*Target) SetRuneCd added in v0.1.50

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 added in v0.1.16

func (fb *Target) SpendFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) SpendRage

func (rb *Target) SpendRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Target) SpendRuneReadyAt added in v0.1.50

func (rp *Target) SpendRuneReadyAt(slot int8, spendAt time.Duration) time.Duration

func (*Target) StartOOMEvent added in v0.1.65

func (mb *Target) StartOOMEvent(sim *Simulation, requiredMana float64)

func (*Target) UnholyRuneGraceRemaining added in v0.1.50

func (rp *Target) UnholyRuneGraceRemaining(sim *Simulation) time.Duration

func (*Target) UnholyRuneReadyAt added in v0.1.50

func (rp *Target) UnholyRuneReadyAt(sim *Simulation) time.Duration

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, metrics *ResourceMetrics)

func (*TargetDummy) AddEnergy

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

func (*TargetDummy) AddFocus added in v0.1.16

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 added in v0.1.50

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

func (*TargetDummy) Advance added in v0.1.50

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

func (*TargetDummy) AllRunesSpent added in v0.1.50

func (rp *TargetDummy) AllRunesSpent() bool

func (*TargetDummy) AnyRuneReadyAt added in v0.1.50

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

func (*TargetDummy) AnySpentRuneReadyAt added in v0.1.50

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 added in v0.1.50

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

func (*TargetDummy) BloodRuneReadyAt added in v0.1.50

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

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

func (*TargetDummy) BloodTapConversion added in v0.1.50

func (rp *TargetDummy) BloodTapConversion(sim *Simulation)

func (*TargetDummy) CancelBloodTap added in v0.1.50

func (rp *TargetDummy) CancelBloodTap(sim *Simulation)

func (*TargetDummy) ComboPoints

func (eb *TargetDummy) ComboPoints() int32

func (*TargetDummy) ConvertFromDeath added in v0.1.50

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

ConvertFromDeath reverts the rune to its original type.

func (*TargetDummy) ConvertToDeath added in v0.1.50

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 added in v0.1.50

func (rp *TargetDummy) CurrentBloodOrDeathRunes() int8

func (*TargetDummy) CurrentBloodRuneGrace added in v0.1.50

func (rp *TargetDummy) CurrentBloodRuneGrace(sim *Simulation) time.Duration

func (*TargetDummy) CurrentBloodRunes added in v0.1.50

func (rp *TargetDummy) CurrentBloodRunes() int8

func (*TargetDummy) CurrentDeathRunes added in v0.1.50

func (rp *TargetDummy) CurrentDeathRunes() int8

func (*TargetDummy) CurrentEnergy

func (eb *TargetDummy) CurrentEnergy() float64

func (*TargetDummy) CurrentFocus added in v0.1.16

func (fb *TargetDummy) CurrentFocus() float64

func (*TargetDummy) CurrentFrostOrDeathRunes added in v0.1.50

func (rp *TargetDummy) CurrentFrostOrDeathRunes() int8

func (*TargetDummy) CurrentFrostRuneGrace added in v0.1.50

func (rp *TargetDummy) CurrentFrostRuneGrace(sim *Simulation) time.Duration

func (*TargetDummy) CurrentFrostRunes added in v0.1.50

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) CurrentRuneGrace added in v0.1.50

func (rp *TargetDummy) CurrentRuneGrace(sim *Simulation, slot int8) time.Duration

func (*TargetDummy) CurrentRunicPower added in v0.1.50

func (rp *TargetDummy) CurrentRunicPower() float64

func (*TargetDummy) CurrentUnholyOrDeathRunes added in v0.1.50

func (rp *TargetDummy) CurrentUnholyOrDeathRunes() int8

func (*TargetDummy) CurrentUnholyRuneGrace added in v0.1.50

func (rp *TargetDummy) CurrentUnholyRuneGrace(sim *Simulation) time.Duration

func (*TargetDummy) CurrentUnholyRunes added in v0.1.50

func (rp *TargetDummy) CurrentUnholyRunes() int8

func (*TargetDummy) DeathRuneRegenAt added in v0.1.50

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 added in v0.1.50

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 added in v0.1.50

func (rp *TargetDummy) DeathRunesInFU() int8

func (*TargetDummy) DebugString added in v0.1.50

func (rp *TargetDummy) DebugString() string

func (*TargetDummy) EndOOMEvent added in v0.1.65

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

func (*TargetDummy) ExecuteCustomRotation added in v0.1.63

func (td *TargetDummy) ExecuteCustomRotation(sim *Simulation)

func (*TargetDummy) FrostRuneGraceRemaining added in v0.1.50

func (rp *TargetDummy) FrostRuneGraceRemaining(sim *Simulation) time.Duration

func (*TargetDummy) FrostRuneReadyAt added in v0.1.50

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 added in v0.1.37

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

func (*TargetDummy) GetAuras added in v0.1.42

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 added in v0.1.38

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 added in v0.1.10

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

func (*TargetDummy) GetMajorCooldowns

func (mcdm *TargetDummy) GetMajorCooldowns() []*MajorCooldown

Returns all MCDs.

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) IsBloodTappedRune added in v0.1.50

func (rp *TargetDummy) IsBloodTappedRune(slot int8) bool

func (*TargetDummy) IsOOM added in v0.1.65

func (mb *TargetDummy) IsOOM() bool

func (*TargetDummy) LeftBloodRuneReady added in v0.1.50

func (rp *TargetDummy) LeftBloodRuneReady() bool

func (*TargetDummy) MaxHealth

func (hb *TargetDummy) MaxHealth() float64

func (*TargetDummy) NextBloodRuneReadyAt added in v0.1.50

func (rp *TargetDummy) NextBloodRuneReadyAt(sim *Simulation) time.Duration

func (*TargetDummy) NextEnergyTickAt

func (eb *TargetDummy) NextEnergyTickAt() time.Duration

func (*TargetDummy) NextFrostRuneReadyAt added in v0.1.50

func (rp *TargetDummy) NextFrostRuneReadyAt(sim *Simulation) time.Duration

func (*TargetDummy) NextUnholyRuneReadyAt added in v0.1.50

func (rp *TargetDummy) NextUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*TargetDummy) NormalFrostRuneReadyAt added in v0.1.50

func (rp *TargetDummy) NormalFrostRuneReadyAt(sim *Simulation) time.Duration

NormalFrostRuneReadyAt returns the earliest time a non-death frost rune is ready.

func (*TargetDummy) NormalSpentBloodRuneReadyAt added in v0.1.50

func (rp *TargetDummy) NormalSpentBloodRuneReadyAt(_ *Simulation) time.Duration

NormalSpentBloodRuneReadyAt returns the earliest time a spent non-death blood rune is ready.

func (*TargetDummy) NormalUnholyRuneReadyAt added in v0.1.50

func (rp *TargetDummy) NormalUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*TargetDummy) NumActiveAurasWithTag

func (at *TargetDummy) NumActiveAurasWithTag(tag string) int32

func (*TargetDummy) OnCastComplete

func (at *TargetDummy) OnCastComplete(sim *Simulation, spell *Spell)

Invokes the OnCastComplete event for all tracked Auras.

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 added in v0.1.50

func (rp *TargetDummy) OptimalRuneCost(cost RuneCost) RuneCost

func (*TargetDummy) Predictor added in v0.1.50

func (rp *TargetDummy) Predictor() *Predictor

func (*TargetDummy) RegenAllRunes added in v0.1.50

func (rp *TargetDummy) RegenAllRunes(sim *Simulation)

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) ResetEnergyTick

func (eb *TargetDummy) ResetEnergyTick(sim *Simulation)

Gives an immediate partial energy tick and restarts the tick timer.

func (*TargetDummy) RuneGraceAt added in v0.1.50

func (rp *TargetDummy) RuneGraceAt(slot int8, at time.Duration) time.Duration

func (*TargetDummy) RuneIsActive added in v0.1.50

func (rp *TargetDummy) RuneIsActive(slot int8) bool

func (*TargetDummy) RuneIsDeath added in v0.1.50

func (rp *TargetDummy) RuneIsDeath(slot int8) bool

func (*TargetDummy) RuneReadyAt added in v0.1.50

func (rp *TargetDummy) RuneReadyAt(sim *Simulation, slot int8) time.Duration

func (*TargetDummy) SetRuneCd added in v0.1.50

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 added in v0.1.16

func (fb *TargetDummy) SpendFocus(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) SpendRage

func (rb *TargetDummy) SpendRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*TargetDummy) SpendRuneReadyAt added in v0.1.50

func (rp *TargetDummy) SpendRuneReadyAt(slot int8, spendAt time.Duration) time.Duration

func (*TargetDummy) StartOOMEvent added in v0.1.65

func (mb *TargetDummy) StartOOMEvent(sim *Simulation, requiredMana float64)

func (*TargetDummy) UnholyRuneGraceRemaining added in v0.1.50

func (rp *TargetDummy) UnholyRuneGraceRemaining(sim *Simulation) time.Duration

func (*TargetDummy) UnholyRuneReadyAt added in v0.1.50

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.

type TargetedActionMetrics

type TargetedActionMetrics struct {
	UnitIndex int32

	Casts   int32
	Hits    int32
	Crits   int32
	Misses  int32
	Dodges  int32
	Parries int32
	Blocks  int32
	Glances int32

	Damage    float64
	Threat    float64
	Healing   float64
	Shielding float64
	CastTime  time.Duration
}

func (*TargetedActionMetrics) ToProto

type Task added in v0.1.53

type Task interface {
	RunTask(sim *Simulation) time.Duration
}

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(config CharacterSuiteConfig) TestGenerator

type Threshold

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

type Thresholds

type Thresholds [4]Threshold

func (Thresholds) String

func (x Thresholds) String() string

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.
	DistanceFromTarget float64

	// How many casts on average a Valkyr will get off during its lifetime.
	NibelungAverageCasts float64

	// 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

	// 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

	GCD *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

	// The currently-channeled DOT spell, otherwise nil.
	ChanneledDot *Dot
	// contains filtered or unexported fields
}

Unit is an abstraction of a Character/Boss/Pet/etc, containing functionality shared by all of them.

func (*Unit) AddBonusRangedCritRating

func (unit *Unit) AddBonusRangedCritRating(amount float64)

func (*Unit) AddBonusRangedHitRating

func (unit *Unit) AddBonusRangedHitRating(amount float64)

func (*Unit) AddComboPoints

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

func (*Unit) AddDynamicDamageTakenModifier

func (unit *Unit) AddDynamicDamageTakenModifier(ddtm DynamicDamageTakenModifier)

func (*Unit) AddEnergy

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

func (*Unit) AddFocus added in v0.1.16

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) AddRage

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

func (*Unit) AddRunicPower added in v0.1.50

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) AddStats

func (unit *Unit) AddStats(stat stats.Stats)

func (*Unit) AddStatsDynamic

func (unit *Unit) AddStatsDynamic(sim *Simulation, bonus stats.Stats)

func (*Unit) Advance added in v0.1.50

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

func (*Unit) AllRunesSpent added in v0.1.50

func (rp *Unit) AllRunesSpent() bool

func (*Unit) AnyRuneReadyAt added in v0.1.50

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

func (*Unit) AnySpentRuneReadyAt added in v0.1.50

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) Armor

func (unit *Unit) Armor() float64

func (*Unit) ArmorPenetrationPercentage

func (unit *Unit) ArmorPenetrationPercentage(armorPenRating float64) float64

func (*Unit) BlockValue added in v0.1.3

func (unit *Unit) BlockValue() float64

func (*Unit) BloodDeathRuneBothReadyAt added in v0.1.50

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

func (*Unit) BloodRuneReadyAt added in v0.1.50

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

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

func (*Unit) BloodTapConversion added in v0.1.50

func (rp *Unit) BloodTapConversion(sim *Simulation)

func (*Unit) CancelBloodTap added in v0.1.50

func (rp *Unit) CancelBloodTap(sim *Simulation)

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) ComboPoints

func (eb *Unit) ComboPoints() int32

func (*Unit) ConvertFromDeath added in v0.1.50

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

ConvertFromDeath reverts the rune to its original type.

func (*Unit) ConvertToDeath added in v0.1.50

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 added in v0.1.50

func (rp *Unit) CurrentBloodOrDeathRunes() int8

func (*Unit) CurrentBloodRuneGrace added in v0.1.50

func (rp *Unit) CurrentBloodRuneGrace(sim *Simulation) time.Duration

func (*Unit) CurrentBloodRunes added in v0.1.50

func (rp *Unit) CurrentBloodRunes() int8

func (*Unit) CurrentDeathRunes added in v0.1.50

func (rp *Unit) CurrentDeathRunes() int8

func (*Unit) CurrentEnergy

func (eb *Unit) CurrentEnergy() float64

func (*Unit) CurrentFocus added in v0.1.16

func (fb *Unit) CurrentFocus() float64

func (*Unit) CurrentFrostOrDeathRunes added in v0.1.50

func (rp *Unit) CurrentFrostOrDeathRunes() int8

func (*Unit) CurrentFrostRuneGrace added in v0.1.50

func (rp *Unit) CurrentFrostRuneGrace(sim *Simulation) time.Duration

func (*Unit) CurrentFrostRunes added in v0.1.50

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) CurrentRuneGrace added in v0.1.50

func (rp *Unit) CurrentRuneGrace(sim *Simulation, slot int8) time.Duration

func (*Unit) CurrentRunicPower added in v0.1.50

func (rp *Unit) CurrentRunicPower() float64

func (*Unit) CurrentUnholyOrDeathRunes added in v0.1.50

func (rp *Unit) CurrentUnholyOrDeathRunes() int8

func (*Unit) CurrentUnholyRuneGrace added in v0.1.50

func (rp *Unit) CurrentUnholyRuneGrace(sim *Simulation) time.Duration

func (*Unit) CurrentUnholyRunes added in v0.1.50

func (rp *Unit) CurrentUnholyRunes() int8

func (*Unit) DeathRuneRegenAt added in v0.1.50

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 added in v0.1.50

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 added in v0.1.50

func (rp *Unit) DeathRunesInFU() int8

func (*Unit) DebugString added in v0.1.50

func (rp *Unit) DebugString() string

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) EnableDynamicStatDep

func (unit *Unit) EnableDynamicStatDep(sim *Simulation, dep *stats.StatDependency)

func (*Unit) EnableEnergyBar

func (unit *Unit) EnableEnergyBar(maxEnergy float64)

func (*Unit) EnableFocusBar added in v0.1.16

func (unit *Unit) EnableFocusBar(regenMultiplier float64, onFocusGain OnFocusGain)

func (*Unit) EnableHealthBar

func (unit *Unit) EnableHealthBar()

func (*Unit) EnableRageBar

func (unit *Unit) EnableRageBar(options RageBarOptions)

func (*Unit) EnableRunicPowerBar

func (unit *Unit) EnableRunicPowerBar(currentRunicPower float64, maxRunicPower float64, runeCD time.Duration,
	onRuneChange OnRuneChange, onRunicPowerGain OnRunicPowerGain)

func (*Unit) EndOOMEvent added in v0.1.65

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

func (*Unit) ExecuteCustomRotation added in v0.1.63

func (unit *Unit) ExecuteCustomRotation(sim *Simulation)

func (*Unit) FrostRuneGraceRemaining added in v0.1.50

func (rp *Unit) FrostRuneGraceRemaining(sim *Simulation) time.Duration

func (*Unit) FrostRuneReadyAt added in v0.1.50

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) GetAura

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

func (*Unit) GetAuraByID added in v0.1.37

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

func (*Unit) GetAuras added in v0.1.42

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) GetDiminishedDodgeChance

func (unit *Unit) GetDiminishedDodgeChance() float64

func (*Unit) GetDiminishedMissChance

func (unit *Unit) GetDiminishedMissChance() float64

func (*Unit) GetDiminishedParryChance

func (unit *Unit) GetDiminishedParryChance() float64

func (*Unit) GetEnemyExclusiveCategories added in v0.1.15

func (caster *Unit) GetEnemyExclusiveCategories(category string) ExclusiveCategoryArray

func (*Unit) GetIcdAuraByID added in v0.1.38

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

func (*Unit) GetInitialStat

func (unit *Unit) GetInitialStat(stat stats.Stat) float64

func (*Unit) GetMetadata added in v0.1.38

func (unit *Unit) GetMetadata() *proto.UnitMetadata

func (*Unit) GetMetricsProto

func (at *Unit) GetMetricsProto() []*proto.AuraMetrics

func (*Unit) GetOpponents

func (unit *Unit) GetOpponents() []*Unit

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) 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) GetUnit added in v0.1.39

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 added in v0.1.16

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) InitialCastSpeed

func (unit *Unit) InitialCastSpeed() float64

func (*Unit) IsActive added in v0.1.16

func (unit *Unit) IsActive() bool

func (*Unit) IsBloodTappedRune added in v0.1.50

func (rp *Unit) IsBloodTappedRune(slot int8) bool

func (*Unit) IsEnabled added in v0.1.14

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 added in v0.1.65

func (mb *Unit) IsOOM() bool

func (*Unit) IsOpponent

func (unit *Unit) IsOpponent(other *Unit) bool

func (*Unit) LeftBloodRuneReady added in v0.1.50

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 added in v0.1.1

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) ManaRegenPerSecondWhileCasting

func (unit *Unit) ManaRegenPerSecondWhileCasting() float64

Returns the rate of mana regen per second, assuming this unit is considered to be casting.

func (*Unit) ManaRegenPerSecondWhileNotCasting

func (unit *Unit) ManaRegenPerSecondWhileNotCasting() 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) 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) MultiplyAttackSpeed

func (unit *Unit) MultiplyAttackSpeed(sim *Simulation, amount float64)

Helper for when both MultiplyMeleeSpeed and MultiplyRangedSpeed are needed.

func (*Unit) MultiplyCastSpeed

func (unit *Unit) MultiplyCastSpeed(amount 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) MultiplyRangedSpeed

func (unit *Unit) MultiplyRangedSpeed(sim *Simulation, amount float64)

func (*Unit) NewAPLAction added in v0.1.44

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 added in v0.1.44

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 added in v0.1.15

func (caster *Unit) NewAllyAuraArray(makeAura func(*Unit) *Aura) AuraArray

func (*Unit) NewBloodRuneMetrics

func (unit *Unit) NewBloodRuneMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NewComboPointMetrics

func (unit *Unit) NewComboPointMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NewDeathRuneMetrics

func (unit *Unit) NewDeathRuneMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NewEnemyAuraArray added in v0.1.15

func (caster *Unit) NewEnemyAuraArray(makeAura func(*Unit) *Aura) AuraArray

func (*Unit) NewEnemyExclusiveCategoryArray added in v0.1.15

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 (unit *Unit) NewFrostRuneMetrics(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) NewRageMetrics

func (unit *Unit) NewRageMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NewRunicPowerMetrics

func (unit *Unit) NewRunicPowerMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NewTimer

func (unit *Unit) NewTimer() *Timer

func (*Unit) NewUnholyRuneMetrics

func (unit *Unit) NewUnholyRuneMetrics(actionID ActionID) *ResourceMetrics

func (*Unit) NextBloodRuneReadyAt added in v0.1.50

func (rp *Unit) NextBloodRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) NextEnergyTickAt

func (eb *Unit) NextEnergyTickAt() time.Duration

func (*Unit) NextFrostRuneReadyAt added in v0.1.50

func (rp *Unit) NextFrostRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) NextGCDAt

func (unit *Unit) NextGCDAt() time.Duration

func (*Unit) NextUnholyRuneReadyAt added in v0.1.50

func (rp *Unit) NextUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) NormalFrostRuneReadyAt added in v0.1.50

func (rp *Unit) NormalFrostRuneReadyAt(sim *Simulation) time.Duration

NormalFrostRuneReadyAt returns the earliest time a non-death frost rune is ready.

func (*Unit) NormalSpentBloodRuneReadyAt added in v0.1.50

func (rp *Unit) NormalSpentBloodRuneReadyAt(_ *Simulation) time.Duration

NormalSpentBloodRuneReadyAt returns the earliest time a spent non-death blood rune is ready.

func (*Unit) NormalUnholyRuneReadyAt added in v0.1.50

func (rp *Unit) NormalUnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) NumActiveAurasWithTag

func (at *Unit) NumActiveAurasWithTag(tag string) int32

func (*Unit) OHNormalizedWeaponDamage added in v0.1.1

func (unit *Unit) OHNormalizedWeaponDamage(sim *Simulation, attackPower float64) float64

func (*Unit) OHWeaponDamage

func (unit *Unit) OHWeaponDamage(sim *Simulation, attackPower float64) float64

func (*Unit) OnCastComplete

func (at *Unit) OnCastComplete(sim *Simulation, spell *Spell)

Invokes the OnCastComplete event for all tracked Auras.

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) 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 added in v0.1.50

func (rp *Unit) OptimalRuneCost(cost RuneCost) RuneCost

func (*Unit) Predictor added in v0.1.50

func (rp *Unit) Predictor() *Predictor

func (*Unit) RangedSwingSpeed

func (unit *Unit) RangedSwingSpeed() float64

func (*Unit) RangedWeaponDamage

func (unit *Unit) RangedWeaponDamage(sim *Simulation, attackPower float64) float64

func (*Unit) RegenAllRunes added in v0.1.50

func (rp *Unit) RegenAllRunes(sim *Simulation)

func (*Unit) RegisterAura

func (unit *Unit) RegisterAura(aura Aura) *Aura

func (*Unit) RegisterPrepullAction added in v0.1.14

func (unit *Unit) RegisterPrepullAction(doAt time.Duration, 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) 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) ResetEnergyTick

func (eb *Unit) ResetEnergyTick(sim *Simulation)

Gives an immediate partial energy tick and restarts the tick timer.

func (*Unit) RuneGraceAt added in v0.1.50

func (rp *Unit) RuneGraceAt(slot int8, at time.Duration) time.Duration

func (*Unit) RuneIsActive added in v0.1.50

func (rp *Unit) RuneIsActive(slot int8) bool

func (*Unit) RuneIsDeath added in v0.1.50

func (rp *Unit) RuneIsDeath(slot int8) bool

func (*Unit) RuneReadyAt added in v0.1.50

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) SetRuneCd added in v0.1.50

func (rp *Unit) SetRuneCd(runeCd time.Duration)

func (*Unit) SpellGCD

func (unit *Unit) SpellGCD() time.Duration

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 added in v0.1.16

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) SpendRage

func (rb *Unit) SpendRage(sim *Simulation, amount float64, metrics *ResourceMetrics)

func (*Unit) SpendRuneReadyAt added in v0.1.50

func (rp *Unit) SpendRuneReadyAt(slot int8, spendAt time.Duration) time.Duration

func (*Unit) SpiritManaRegenPerSecond

func (unit *Unit) SpiritManaRegenPerSecond() float64

Returns the rate of mana regen per second from spirit.

func (*Unit) StartOOMEvent added in v0.1.65

func (mb *Unit) StartOOMEvent(sim *Simulation, requiredMana float64)

func (*Unit) SwingSpeed

func (unit *Unit) SwingSpeed() float64

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) UnholyRuneGraceRemaining added in v0.1.50

func (rp *Unit) UnholyRuneGraceRemaining(sim *Simulation) time.Duration

func (*Unit) UnholyRuneReadyAt added in v0.1.50

func (rp *Unit) UnholyRuneReadyAt(sim *Simulation) time.Duration

func (*Unit) UpdateManaRegenRates

func (unit *Unit) UpdateManaRegenRates()

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) 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

func (*UnitMetrics) UpdateDpasp added in v0.1.8

func (unitMetrics *UnitMetrics) UpdateDpasp(dpspSeconds float64)

type UnitReference added in v0.1.40

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

Struct for handling unit references, to account for values that can change dynamically (e.g. CurrentTarget).

func NewUnitReference added in v0.1.40

func NewUnitReference(ref *proto.UnitReference, contextUnit *Unit) UnitReference

func (UnitReference) Get added in v0.1.40

func (ur UnitReference) Get() *Unit

func (*UnitReference) String added in v0.1.40

func (ur *UnitReference) String() string

type UnitStats added in v0.1.8

type UnitStats struct {
	Stats       stats.Stats
	PseudoStats []float64
}

func NewUnitStats added in v0.1.8

func NewUnitStats() UnitStats

func (*UnitStats) AddStat added in v0.1.8

func (s *UnitStats) AddStat(stat stats.UnitStat, value float64)

func (*UnitStats) Get added in v0.1.8

func (s *UnitStats) Get(stat stats.UnitStat) float64

func (*UnitStats) ToProto added in v0.1.8

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
}

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 added in v0.1.8

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 added in v0.1.55

type WeaponAttack struct {
	Weapon
	// contains filtered or unexported fields
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL