Remove button from Action

americanslon

Chieftain
Joined
Apr 3, 2019
Messages
14
I making a mod where a button should show up based on the type of unit is selected.
I "borrowed" some code to display the button from another mod:

If correct unit is detected it calls two functions

First:
Code:
function CreateHurryProductionButton()
    hurryProductionIM:DestroyInstances();

    local instance = hurryProductionIM:GetInstance();

    instance.UnitActionIcon:SetIcon("ICON_UNITCOMMAND_WONDER_PRODUCTION");
    instance.UnitActionButton:SetDisabled((not isHurryable));
    instance.UnitActionButton:SetAlpha((not isHurryable and 0.4) or 1);
    instance.UnitActionButton:SetToolTipString("Hurry Production");
    instance.UnitActionButton:RegisterCallback(Mouse.eLClick,
        function(void1, void2)      
            if isHurryable then             
                HurryProduction();
            end
        end
    );
end
and then
Code:
function AttachHurryButtonToUnitPanelActions ()
    local SecondaryActionsStack = ContextPtr:LookUpControl("/InGame/UnitPanel/SecondaryActionsStack");
     
    Controls.HurryProductionSecondaryActionsStack:ChangeParent(SecondaryActionsStack);
 
    if SecondaryActionsStack ~= nil then
        SecondaryActionsStack:AddChildAtIndex(Controls.HurryProductionSecondaryActionsStack, 0);
        SecondaryActionsStack:CalculateSize();
        SecondaryActionsStack:ReprocessAnchoring();
    end 
end
Accompanying XML
Code:
<Context Name="HurryProduction" >

    <Stack ID="HurryProductionSecondaryActionsStack" Anchor="C,B" StackGrowth="Right" Padding="2" ConsumeMouse="1" />

    <Instance Name="UnitActionInstance" >
        <Button    ID="UnitActionButton" Anchor="L,T" Size="44,53" Texture="UnitPanel_ActionButton">
            <Image ID="UnitActionIcon" Anchor="C,C" Offset="0,-2" Size="38,38" Texture="UnitActions"/>
        </Button>
    </Instance>

</Context>

I sorta get what this is doing because I can see the result. But don't get it enough to figure out how to remove the button if I shift focus to another unit that shouldn't have the button.
 
Last edited:
If anyone needs this later this is how I did it.

Code:
function DetachHurryButtonToUnitPanelActions()
	local actionsStack = ContextPtr:LookUpControl("/InGame/UnitPanel/SecondaryActionsStack");

	if actionsStack ~= nil then
		actionsStack:DestroyChild(Controls.HurryProductionActionsStack);
	end	
end
 
Back
Top Bottom