pickleplayer Posted January 24, 2018 Share Posted January 24, 2018 Back again with another question that I thought was going to be easy. The title says it all, I'm trying to add a white tint to an object on the hud (more specifically, trying to make that object match the environment's ambient colors and lighting as if it was being simulated in the world along with the player) I tried the usual huditem:GetAnimState():SetAddColour(1,1,1,0.5) only to find that, strangely enough, SetAddColour() doesn't seem to work on hud objects... It seems the UIAnim widget just doesn't do anything with it, despite handling SetMultColour() just fine. I opened up every single game file in the widgets/screens folder and did an encompassing Ctrl-F for "AddColour" and "tint" and came up totally empty handed. anything related to tint was only referring to black tint. And it seems most "highlighted" versions of buttons have their own separate sprite, while their color values aren't changed. Not really sure where to go from here. I hope I'm just missing something small. I'd be a little disappointed to find out that adding a white hue to a hud image just isn't possible Link to comment Share on other sites More sharing options...
Cunning fox Posted January 25, 2018 Share Posted January 25, 2018 (edited) Maybe you can try huditem:GetAnimState():SetMultColour(r,g,b,a) Edited January 25, 2018 by Cunning fox 1 Link to comment Share on other sites More sharing options...
pickleplayer Posted January 25, 2018 Author Share Posted January 25, 2018 4 hours ago, Cunning fox said: Maybe you can try huditem:GetAnimState():SetMultColour(r,g,b,a) MultColour works fine. But you can't add white with that. You can tint it black by toning down the rgb, but to get white, you need to add color Link to comment Share on other sites More sharing options...
CarlZalph Posted January 25, 2018 Share Posted January 25, 2018 (edited) @pickleplayer If you can't get anything to work, then a workaround might be to make your own additive layer. By creating an Image("images/global.xml", "square.tex") as a child to the UI element, you can then call SetTint(R,G,B,A) for ranges [0..1] on each, with the Alpha channel being less than 1. Don't forget to set this child's SetClickable(false) else it may rob your root UI element's clicks. Edited January 25, 2018 by CarlZalph Link to comment Share on other sites More sharing options...
Developer bizziboi Posted January 25, 2018 Developer Share Posted January 25, 2018 2 hours ago, pickleplayer said: MultColour works fine. But you can't add white with that. You can tint it black by toning down the rgb, but to get white, you need to add color You could try SetAddColour? Link to comment Share on other sites More sharing options...
pickleplayer Posted January 25, 2018 Author Share Posted January 25, 2018 1 hour ago, bizziboi said: You could try SetAddColour? That was the first thing I tried. I use SetAddColour all the time on non-hud objects all the time, but for some reason, it doesn't seem to work here. I can use SetMultColour(1,1,1,0.5) to cut its opacity in half, and it works fine. But when I replace it with SetAddColour(1,1,1,0.5), nothing happens. I've tried it with all sorts of different values, and on other existing hud objects, but the results are always the same. Link to comment Share on other sites More sharing options...
Developer bizziboi Posted January 25, 2018 Developer Share Posted January 25, 2018 Drat, I didn't read your original post - apologies. So much for trying to be helpful. Hmmm, you could try UIAnim:TintTo? Link to comment Share on other sites More sharing options...
pickleplayer Posted January 25, 2018 Author Share Posted January 25, 2018 4 hours ago, CarlZalph said: @pickleplayer If you can't get anything to work, then a workaround might be to make your own additive layer. By creating an Image("images/global.xml", "square.tex") as a child to the UI element, you can then call SetTint(R,G,B,A) for ranges [0..1] on each, with the Alpha channel being less than 1. Don't forget to set this child's SetClickable(false) else it may rob your root UI element's clicks. Unfortunately, my hud object is not square shaped, and it takes all sorts of shapes and sizes and is also animated. Unless there is some sort of layer masking function, I wont be able to just use a white square over it. I also messed around with blendmodes to see if there was a way to only apply it to the hud layer, but no dice. Duplicating a white version of it to layer on top of it is not really an option either, given how many different forms it takes. And since it's animated, it has to be a UIAnim, so i can't make it an Image and use SetTint() on it directly. I even messed around with transplanting code from the image widget into the uianim widget to see if I could replicate the SetTint() function for UIAnims, but didn't get anywhere. Link to comment Share on other sites More sharing options...
CarlZalph Posted January 25, 2018 Share Posted January 25, 2018 (edited) 40 minutes ago, bizziboi said: Hmmm, you could try UIAnim:TintTo? Alas, that requires the underlying widget to have a tinting function (self.inst.widget.SetTint)- used by Image widgets. I did a test at the main menu with the UIAnim and I'd have to say that this might be a bug. I can't seem to get an applied additive field to the AnimState to take effect. Example code: UIAnim = require "widgets/uianim" cz_t = UIAnim() cz_t:GetAnimState():SetBank("saving_indicator") cz_t:GetAnimState():SetBuild("saving_indicator") cz_t:GetAnimState():PlayAnimation("save_loop", true) cz_t:SetVAnchor(ANCHOR_BOTTOM) cz_t:SetHAnchor(ANCHOR_RIGHT) cz_t:SetScaleMode(SCALEMODE_PROPORTIONAL) cz_t:SetMaxPropUpscale(MAX_HUD_SCALE) cz_t:SetPosition(-10, 40) cz_t:GetAnimState():SetAddColour(1,0,0,1) print(cz_t:GetAnimState():GetAddColour()) Prints out the proper set value, but the animating dibbly doesn't doobly out the desired colour application. Edited January 25, 2018 by CarlZalph Link to comment Share on other sites More sharing options...
pickleplayer Posted January 25, 2018 Author Share Posted January 25, 2018 26 minutes ago, bizziboi said: Drat, I didn't read your original post - apologies. So much for trying to be helpful. Hmmm, you could try UIAnim:TintTo? Oh! I didn't notice there was a second uianim.lua in the components folder. sneaky. Inserting a few temporary print fns into the game files, I followed it's path through the code and found that it gets to the first line of the function function UIAnim:TintTo(start, dest, duration, whendone) if not self.inst.widget.SetTint then return end and immediately ends there, because only Image widgets have SetTint(). the UIAnim widget does not. I then made a new version of UIAnim widget that DOES have a SetTint() function, and this let it get past the first 3 lines of the TintTo function. It then proceeded to do nothing, once again. Link to comment Share on other sites More sharing options...
Developer PeterA Posted January 25, 2018 Developer Share Posted January 25, 2018 1 hour ago, pickleplayer said: But when I replace it with SetAddColour(1,1,1,0.5), nothing happens. Yeah it turns out that shader constant wasn't being used in the UI anim shader. I've added that in now, and will do some testing before it gets released. Edit: looks like it's working. You'll just need to do something like this self.bg_anim:GetAnimState():SetAddColour(1,1,1,0) The alpha channel isn't currently used though. I left it out to be consistent with the in-game shaders. Link to comment Share on other sites More sharing options...
pickleplayer Posted January 26, 2018 Author Share Posted January 26, 2018 49 minutes ago, PeterA said: Yeah it turns out that shader constant wasn't being used in the UI anim shader. I've added that in now, and will do some testing before it gets released. Edit: looks like it's working. You'll just need to do something like this self.bg_anim:GetAnimState():SetAddColour(1,1,1,0) The alpha channel isn't currently used though. I left it out to be consistent with the in-game shaders. Awesome! Thank you all very much for all your help! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now