Skip to content

Commit ddf4b69

Browse files
committed
Fix #63 force redraw tooltips when stored material amount changes
1 parent 3cc4ddf commit ddf4b69

File tree

8 files changed

+50
-6
lines changed

8 files changed

+50
-6
lines changed

src/event/EventKeyEnum.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export const enum EventKey {
3030

3131
// GUI command events
3232
COMMAND_TOOLTIP_CHANGE = 'command-tooltip-change',
33+
COMMAND_TOOLTIP_FORCE_REDRAW = 'command-tooltip-force-redraw',
3334
COMMAND_TOOLTIP_HIDE = 'command-tooltip-hide',
3435
COMMAND_PLAY_SOUND = 'command-play-sound',
3536
COMMAND_CREATE_POWER_PATH = 'command-create-power-path',

src/event/EventTypeMap.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { AdvanceAfterRewardsEvent, BuildingsChangedEvent, DeselectAll, FollowerSetCanvasEvent, FollowerSetLookAtEvent, GuiBackButtonClicked, GuiBuildButtonClicked, GuiButtonBlinkEvent, GuiGetToolButtonClicked, GuiTrainRaiderButtonClicked, InitRadarMap, RaidersAmountChangedEvent, RaiderTrainingCompleteEvent, SelectionChanged, SelectionFrameChangeEvent, SetSpaceToContinueEvent, ShowGameResultEvent, ShowMissionAdvisorEvent, ShowMissionBriefingEvent, ShowOptionsEvent, UpdateRadarCamera, UpdateRadarEntityEvent, UpdateRadarSurface, UpdateRadarTerrain, VehicleUpgradeCompleteEvent } from './LocalEvents'
22
import { AirLevelChanged, CavernDiscovered, DynamiteExplosionEvent, GameResultEvent, JobCreateEvent, LevelSelectedEvent, MaterialAmountChanged, MonsterEmergeEvent, MonsterLaserHitEvent, NerpMessageEvent, NerpSuppressArrowEvent, OreFoundEvent, RequestedRaidersChanged, RequestedVehiclesChanged, RestartGameEvent, ShootLaserEvent, ToggleAlarmEvent, UpdatePriorities, UsedCrystalsChanged, WorldLocationEvent } from './WorldEvents'
3-
import { CameraControl, CancelBuilding, CancelSurfaceJobs, ChangeBuildingPowerState, ChangeCameraEvent, ChangePreferences, ChangeTooltip, CreateClearRubbleJob, CreateDrillJob, CreateDynamiteJob, CreatePowerPath, CreateReinforceJob, DropBirdScarer, HideTooltip, MakeRubble, PickTool, PlaceFence, PlaySoundEvent, RaiderBeamUp, RaiderDrop, RaiderEat, RaiderUpgrade, RepairBuilding, RepairLava, SelectBuildMode, TrainRaider, UpgradeBuilding, UpgradeVehicle, VehicleBeamUp, VehicleCallMan, VehicleDriverGetOut, VehicleLoad, VehicleUnload } from './GuiCommand'
3+
import { CameraControl, CancelBuilding, CancelSurfaceJobs, ChangeBuildingPowerState, ChangeCameraEvent, ChangePreferences, ChangeTooltip, CreateClearRubbleJob, CreateDrillJob, CreateDynamiteJob, CreatePowerPath, CreateReinforceJob, DropBirdScarer, ForceRedrawTooltip, HideTooltip, MakeRubble, PickTool, PlaceFence, PlaySoundEvent, RaiderBeamUp, RaiderDrop, RaiderEat, RaiderUpgrade, RepairBuilding, RepairLava, SelectBuildMode, TrainRaider, UpgradeBuilding, UpgradeVehicle, VehicleBeamUp, VehicleCallMan, VehicleDriverGetOut, VehicleLoad, VehicleUnload } from './GuiCommand'
44

55
export class BaseEvent {
66
constructor(readonly type: keyof EventTypeMap) {
@@ -41,6 +41,7 @@ export interface DefaultEventMap {
4141
'advance-after-rewards': AdvanceAfterRewardsEvent
4242

4343
'command-tooltip-change': ChangeTooltip
44+
'command-tooltip-force-redraw': ForceRedrawTooltip
4445
'command-tooltip-hide': HideTooltip
4546
'command-play-sound': PlaySoundEvent
4647
'command-create-power-path': CreatePowerPath

src/event/GuiCommand.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,20 @@ export class ChangeTooltip extends BaseEvent {
3030
}
3131
}
3232

33+
export class ForceRedrawTooltip extends BaseEvent {
34+
tooltipKey: string
35+
36+
constructor(
37+
public tooltipText: string,
38+
readonly getTooltipTextImg: () => Promise<SpriteImage> = () => {
39+
return TooltipSpriteBuilder.getTooltipSprite(this.tooltipText, 0)
40+
},
41+
) {
42+
super(EventKey.COMMAND_TOOLTIP_FORCE_REDRAW)
43+
this.tooltipKey = tooltipText
44+
}
45+
}
46+
3347
export class HideTooltip extends BaseEvent {
3448
constructor(readonly tooltipText?: string) {
3549
super(EventKey.COMMAND_TOOLTIP_HIDE)

src/game/component/TooltipComponent.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { AbstractGameComponent, GameEntity } from '../ECS'
22
import { SpriteImage } from '../../core/Sprite'
3-
import { ChangeTooltip } from '../../event/GuiCommand'
3+
import { ChangeTooltip, ForceRedrawTooltip } from '../../event/GuiCommand'
44
import { TOOLTIP_DELAY_SFX, TOOLTIP_DELAY_TEXT_SCENE } from '../../params'
55

66
export class TooltipComponent extends AbstractGameComponent {
@@ -13,4 +13,10 @@ export class TooltipComponent extends AbstractGameComponent {
1313
result.tooltipKey = this.tooltipText + this.entity // change key to make it unique per entity
1414
return result
1515
}
16+
17+
createForceRedrawEvent(): ForceRedrawTooltip {
18+
const result = new ForceRedrawTooltip(this.tooltipText, this.getTextImg)
19+
result.tooltipKey = this.tooltipText + this.entity // change key to make it unique per entity
20+
return result
21+
}
1622
}

src/game/model/building/BuildingSite.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,15 @@ export class BuildingSite {
108108
this.onSiteByType.getOrUpdate(item.entityType, () => []).push(item)
109109
this.worldMgr.entityMgr.removeEntity(item.entity)
110110
this.checkComplete()
111+
const event = this.worldMgr.ecs.getComponents(this.entity).get(TooltipComponent)?.createForceRedrawEvent()
112+
if (event) EventBroker.publish(event)
111113
}
112114

113115
removeItem(item: MaterialEntity) {
114116
this.unAssign(item)
115117
this.onSiteByType.getOrUpdate(item.entityType, () => []).remove(item)
118+
const event = this.worldMgr.ecs.getComponents(this.entity).get(TooltipComponent)?.createForceRedrawEvent()
119+
if (event) EventBroker.publish(event)
116120
}
117121

118122
checkComplete() {

src/gui/main/IconPanelButton.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Button } from '../base/Button'
2-
import { ChangeTooltip } from '../../event/GuiCommand'
2+
import { ChangeTooltip, HideTooltip } from '../../event/GuiCommand'
33
import { DEV_MODE, TOOLTIP_DELAY_SFX } from '../../params'
44
import { SpriteContext, SpriteImage } from '../../core/Sprite'
55
import { EntityType, getEntityTypeByName } from '../../game/model/EntityType'
@@ -88,7 +88,14 @@ export class IconPanelButton extends Button {
8888
const targetState = this.isDisabled()
8989
const stateChanged = this.disabled !== targetState
9090
this.disabled = targetState
91-
if (stateChanged && autoRedraw) this.notifyRedraw()
91+
if (stateChanged) {
92+
if (autoRedraw) this.notifyRedraw()
93+
if (this.disabled) {
94+
this.publishEvent(new HideTooltip(this.tooltip))
95+
} else {
96+
this.publishEvent(new HideTooltip(this.tooltipDisabled))
97+
}
98+
}
9299
return stateChanged
93100
}
94101

src/gui/main/select/SelectBuildingPanel.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { EventKey } from '../../../event/EventKeyEnum'
2-
import { BeamUpBuilding, ChangeBuildingPowerState, ChangeTooltip, RepairBuilding, UpgradeBuilding } from '../../../event/GuiCommand'
2+
import { BeamUpBuilding, ChangeBuildingPowerState, ChangeTooltip, ForceRedrawTooltip, RepairBuilding, UpgradeBuilding } from '../../../event/GuiCommand'
33
import { SelectionChanged } from '../../../event/LocalEvents'
44
import { Panel } from '../../base/Panel'
55
import { IconPanelToggleButton } from '../IconPanelToggleButton'
@@ -51,6 +51,13 @@ export class SelectBuildingPanel extends IconSubPanel {
5151
this.buildingCanUpgrade = event.buildingCanUpgrade
5252
this.buildingMissingOreForUpgrade = event.buildingMissingOreForUpgrade
5353
this.updateAllButtonStates()
54+
if (this.buildingMissingOreForUpgrade) {
55+
this.iconPanelButtons.forEach((b) => {
56+
b.publishEvent(new ForceRedrawTooltip(upgradeItem.tooltipDisabled, () => {
57+
return TooltipSpriteBuilder.getBuildingMissingOreForUpgradeTooltipSprite(this.buildingMissingOreForUpgrade)
58+
}))
59+
})
60+
}
5461
})
5562
this.registerEventListener(EventKey.MATERIAL_AMOUNT_CHANGED, () => {
5663
this.updateAllButtonStates()

src/screen/layer/TooltipLayer.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { EventKey } from '../../event/EventKeyEnum'
2-
import { ChangeTooltip, HideTooltip } from '../../event/GuiCommand'
2+
import { ChangeTooltip, ForceRedrawTooltip, HideTooltip } from '../../event/GuiCommand'
33
import { ScreenLayer } from './ScreenLayer'
44
import { CURSOR_MAX_HEIGHT, NATIVE_SCREEN_HEIGHT, NATIVE_SCREEN_WIDTH } from '../../params'
55
import { clearTimeoutSafe } from '../../core/Util'
@@ -37,6 +37,10 @@ export class TooltipLayer extends ScreenLayer {
3737
this.tooltipTimeoutSfx = setTimeout(() => SoundManager.playVoice(tooltipSfx), event.timeoutSfx)
3838
}
3939
})
40+
EventBroker.subscribe(EventKey.COMMAND_TOOLTIP_FORCE_REDRAW, async (event: ForceRedrawTooltip) => {
41+
if (this.cursorLeft || !this.active || event.tooltipKey !== this.lastTooltipKey) return
42+
this.changeTooltipImage(await event.getTooltipTextImg())
43+
})
4044
EventBroker.subscribe(EventKey.COMMAND_TOOLTIP_HIDE, (event: HideTooltip) => {
4145
if (event.tooltipText && event.tooltipText !== this.lastTooltipKey) return
4246
this.removeTooltip()

0 commit comments

Comments
 (0)