Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cat apl updates #3993

Merged
merged 4 commits into from
Nov 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion proto/apl.proto
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ message APLAction {
}
}

// NextIndex: 61
// NextIndex: 64
message APLValue {
oneof value {
// Operators
Expand Down Expand Up @@ -135,6 +135,7 @@ message APLValue {
APLValueSpellCPM spell_cpm = 42;
APLValueSpellIsChanneling spell_is_channeling = 56;
APLValueSpellChanneledTicks spell_channeled_ticks = 57;
APLValueSpellCurrentCost spell_current_cost = 62;

// Aura values
APLValueAuraIsActive aura_is_active = 22;
Expand All @@ -156,10 +157,12 @@ message APLValue {

// Properties
APLValueChannelClipDelay channel_clip_delay = 58;
APLValueFrontOfTarget front_of_target = 63;

// Class or Spec-specific values
APLValueTotemRemainingTime totem_remaining_time = 49;
APLValueCatExcessEnergy cat_excess_energy = 52;
APLValueCatNewSavageRoarDuration cat_new_savage_roar_duration = 61;
APLValueWarlockShouldRecastDrainSoul warlock_should_recast_drain_soul = 59;
APLValueWarlockShouldRefreshCorruption warlock_should_refresh_corruption = 60;
}
Expand Down Expand Up @@ -402,6 +405,9 @@ message APLValueSpellChannelTime {
}
message APLValueChannelClipDelay {
}
message APLValueFrontOfTarget {
}

message APLValueSpellTravelTime {
ActionID spell_id = 1;
}
Expand All @@ -414,6 +420,9 @@ message APLValueSpellIsChanneling {
message APLValueSpellChanneledTicks {
ActionID spell_id = 1;
}
message APLValueSpellCurrentCost {
ActionID spell_id = 1;
}

message APLValueAuraIsActive {
UnitReference source_unit = 2;
Expand Down Expand Up @@ -469,6 +478,8 @@ message APLValueTotemRemainingTime {
}
message APLValueCatExcessEnergy {
}
message APLValueCatNewSavageRoarDuration {
}
message APLValueWarlockShouldRecastDrainSoul {
}
message APLValueWarlockShouldRefreshCorruption {
Expand Down
20 changes: 20 additions & 0 deletions sim/core/apl_values_properties.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,23 @@ func (value *APLValueChannelClipDelay) GetDuration(sim *Simulation) time.Duratio
func (value *APLValueChannelClipDelay) String() string {
return "Channel Clip Delay()"
}

type APLValueFrontOfTarget struct {
DefaultAPLValueImpl
unit *Unit
}

func (rot *APLRotation) newValueFrontOfTarget(config *proto.APLValueFrontOfTarget) APLValue {
return &APLValueFrontOfTarget{
unit: rot.unit,
}
}
func (value *APLValueFrontOfTarget) Type() proto.APLValueType {
return proto.APLValueType_ValueTypeBool
}
func (value *APLValueFrontOfTarget) GetBool(sim *Simulation) bool {
return value.unit.PseudoStats.InFrontOfTarget
}
func (value *APLValueFrontOfTarget) String() string {
return "Front of Target()"
}
25 changes: 25 additions & 0 deletions sim/core/apl_values_spell.go
Original file line number Diff line number Diff line change
Expand Up @@ -227,3 +227,28 @@ func (value *APLValueSpellChanneledTicks) GetInt(_ *Simulation) int32 {
func (value *APLValueSpellChanneledTicks) String() string {
return fmt.Sprintf("ChanneledTicks(%s)", value.spell.ActionID)
}

type APLValueSpellCurrentCost struct {
DefaultAPLValueImpl
spell *Spell
}

func (rot *APLRotation) newValueSpellCurrentCost(config *proto.APLValueSpellCurrentCost) APLValue {
spell := rot.GetAPLSpell(config.SpellId)
if spell == nil {
return nil
}
return &APLValueSpellCurrentCost{
spell: spell,
}
}
func (value *APLValueSpellCurrentCost) Type() proto.APLValueType {
return proto.APLValueType_ValueTypeFloat
}
func (value *APLValueSpellCurrentCost) GetFloat(_ *Simulation) float64 {
spell := value.spell
return spell.ApplyCostModifiers(spell.DefaultCast.Cost)
}
func (value *APLValueSpellCurrentCost) String() string {
return fmt.Sprintf("CurrentCost(%s)", value.spell.ActionID)
}
23 changes: 23 additions & 0 deletions sim/druid/feral/apl_values.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ func (cat *FeralDruid) NewAPLValue(rot *core.APLRotation, config *proto.APLValue
switch config.Value.(type) {
case *proto.APLValue_CatExcessEnergy:
return cat.newValueCatExcessEnergy(rot, config.GetCatExcessEnergy())
case *proto.APLValue_CatNewSavageRoarDuration:
return cat.newValueCatNewSavageRoarDuration(rot, config.GetCatNewSavageRoarDuration())
default:
return nil
}
Expand Down Expand Up @@ -67,3 +69,24 @@ func (value *APLValueCatExcessEnergy) GetFloat(sim *core.Simulation) float64 {
func (value *APLValueCatExcessEnergy) String() string {
return "Cat Excess Energy()"
}

type APLValueCatNewSavageRoarDuration struct {
core.DefaultAPLValueImpl
cat *FeralDruid
}

func (cat *FeralDruid) newValueCatNewSavageRoarDuration(rot *core.APLRotation, config *proto.APLValueCatNewSavageRoarDuration) core.APLValue {
return &APLValueCatNewSavageRoarDuration{
cat: cat,
}
}
func (value *APLValueCatNewSavageRoarDuration) Type() proto.APLValueType {
return proto.APLValueType_ValueTypeDuration
}
func (value *APLValueCatNewSavageRoarDuration) GetDuration(sim *core.Simulation) time.Duration {
cat := value.cat
return cat.SavageRoarDurationTable[cat.ComboPoints()]
}
func (value *APLValueCatNewSavageRoarDuration) String() string {
return "New Savage Roar Duration()"
}
1 change: 0 additions & 1 deletion ui/core/components/character_stats.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,6 @@ export class CharacterStats extends Component {
return [
Spec.SpecDeathknight,
Spec.SpecEnhancementShaman,
Spec.SpecFeralDruid,
Spec.SpecRetributionPaladin,
Spec.SpecRogue,
Spec.SpecWarrior
Expand Down
30 changes: 29 additions & 1 deletion ui/core/components/individual_sim_ui/apl_values.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,9 @@ import {
APLValueSpellCPM,
APLValueSpellIsChanneling,
APLValueSpellChanneledTicks,
APLValueSpellCurrentCost,
APLValueChannelClipDelay,
APLValueFrontOfTarget,
APLValueAuraIsActive,
APLValueAuraIsActiveWithReactionTime,
APLValueAuraRemainingTime,
Expand All @@ -72,6 +74,7 @@ import {
APLValueCatExcessEnergy,
APLValueWarlockShouldRecastDrainSoul,
APLValueWarlockShouldRefreshCorruption,
APLValueCatNewSavageRoarDuration,
} from '../../proto/apl.js';

import { EventID } from '../../typed_event.js';
Expand Down Expand Up @@ -543,6 +546,13 @@ const valueKindFactories: {[f in NonNullable<APLValueKind>]: ValueKindConfig<APL
newValue: APLValueNumberTargets.create,
fields: [],
}),
'frontOfTarget': inputBuilder({
label: 'Front of Target',
submenu: ['Encounter'],
shortDescription: '<b>True</b> if facing from of target',
newValue: APLValueFrontOfTarget.create,
fields: [],
}),

// Resources
'currentHealth': inputBuilder({
Expand Down Expand Up @@ -725,6 +735,15 @@ const valueKindFactories: {[f in NonNullable<APLValueKind>]: ValueKindConfig<APL
}),

// Spells
'spellCurrentCost': inputBuilder({
label: 'Current Cost',
submenu: ['Spell'],
shortDescription: 'Returns current resource cost of spell',
newValue: APLValueSpellCurrentCost.create,
fields: [
AplHelpers.actionIdFieldConfig('spellId', 'castable_spells', ''),
],
}),
'spellCanCast': inputBuilder({
label: 'Can Cast',
submenu: ['Spell'],
Expand Down Expand Up @@ -976,6 +995,15 @@ const valueKindFactories: {[f in NonNullable<APLValueKind>]: ValueKindConfig<APL
fields: [
],
}),
'catNewSavageRoarDuration': inputBuilder({
label: 'New Savage Roar Duration',
submenu: ['Feral Druid'],
shortDescription: 'Returns duration of savage roar based on current combo points',
newValue: APLValueCatNewSavageRoarDuration.create,
includeIf: (player: Player<any>, isPrepull: boolean) => player.spec == Spec.SpecFeralDruid,
fields: [
],
}),
'warlockShouldRecastDrainSoul': inputBuilder({
label: 'Should Recast Drain Soul',
submenu: ['Warlock'],
Expand All @@ -989,7 +1017,7 @@ const valueKindFactories: {[f in NonNullable<APLValueKind>]: ValueKindConfig<APL
label: 'Should Refresh Corruption',
submenu: ['Warlock'],
shortDescription: 'Returns <b>True</b> if the current Corruption has expired, or should be refreshed to get a better snapshot.',
newValue: APLValueWarlockShouldRecastDrainSoul.create,
newValue: APLValueWarlockShouldRefreshCorruption.create,
includeIf: (player: Player<any>, isPrepull: boolean) => player.getClass() == Class.ClassWarlock,
fields: [
AplHelpers.unitFieldConfig('targetUnit', 'targets'),
Expand Down
2 changes: 1 addition & 1 deletion ui/scss/core/components/detailed_results/_timeline.scss
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ $combo-points-color: #ffa07a;
position: absolute;
bottom: 0;
left: 0;
width: 100%;
width: 10px;
background-color: yellow;
}
.rotation-timeline-cast {
Expand Down
Loading