Xilexio Posted August 13, 2017 Share Posted August 13, 2017 (edited) I need a code to do an action when the character is facing away from the camera (e.g. when going upwards). This is kind of separate from my other problem with changing z-indexes of layers in my other topic. I have my current solution based on this topic: The current buggy solution is: In master_postinit: inst:ListenForEvent("locomote", OnLocomote) And the function itself: local function OnLocomote(inst) local dir = inst.Transform:GetRotation() local camera_rot = TheCamera:GetHeadingTarget() local relative_dir = ((dir + camera_rot) % 360 + 360) % 360 -- detect up to 90 degrees from the top if math.abs(relative_dir - 180) < 90 then print("facing away from camera") else print("facing to the camera") end end There are two problems with that: 1. When character is facing upwards and then doing some animation facing towards the camera. An example is using "examine" on an item - there is no locomote event before the talking animation. 2. This is not a problem for be, but noting this in case somebody needs the exact code. The above only detects when the character is facing more away from the camera than to the camera, so it produces false positives when the character's side is visible. I could adjust the angle to 45, but then I'd face some weird issues with the relative_dir above being like 0.001 degree different than actual, which happens kind of randomly depending on camera rotation, when using W+A or W+D keys. Plus, I can get a lot of false positives when user is using mouse to move the character (when there is an obstacle on the way). Are there any events or maybe just properties of AnimState that detect if the sprites used are the ones for facing away from the camera? EDIT: I found out about ThePlayer.AnimState:GetCurrentFacing() == 1 usually when facing upwards, but it is broken when doing emotes/talking. It seems that the character is facing upwards when examining stuff that is above, but the animation is playing with sprites facing the camera. Edited August 13, 2017 by Xilexio Link to comment Share on other sites More sharing options...
ZupaleX Posted August 16, 2017 Share Posted August 16, 2017 I don't understand your issue. If you want a function to be executed when the character is facing up, the the GetCurrentFacing works. The fact that emotes are playing as if your character is facing down, it doesn't change the fact that you character is effectively facing up. Then I probably miss what you want to achieve. Link to comment Share on other sites More sharing options...
Xilexio Posted August 16, 2017 Author Share Posted August 16, 2017 (edited) I want to know how to detect if the sprites used are facing the camera. In Extended Sample Character terms, I want to know when headbase-2 is used instead of headbase-0 or headbase-1. Using that information, I can do some hacks with animation that are hard to achieve in the current model (such as showing different beard from behind and from the front). GetCurrentFacing only says where the character is going/where is the thing the character is observing. But it does not change during emotes whose animation uses front sprites. And there is even a single fish catching animation that uses both front and back sprites, making it even harder to achieve. And I kinda don't want to get updated list of all animations and do a huge if. Edited August 16, 2017 by Xilexio Link to comment Share on other sites More sharing options...
ZupaleX Posted August 17, 2017 Share Posted August 17, 2017 I understand now. The AnimState has a bunch of function to check the current... animation state I would print the metatable of the AnimState and check out what are the available function, the names are self explanatory. I should copy/paste that metatable somewhere once to have a copy without having to go ingame to do it 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