Forum rules - please read before posting.
Tech questions during the weekend? Drop in on the community Discord channel!

BUG(s): Hotspot Cursor

Hi,

I noticed one (or maybe two) bugs with the Hotspot cursor option in the Cursor manager.

I switched to "Choose interaction then hotspot" and assigned a few cursors (4 verbs).

I also activated "Prefix cursor labels?" in Hotspot cursor and assigned a new Texture.

However,

a) the cursor won't change when I hover a hotspot (I tried a complete different sprite to verify, as maybe the changes were too subtle, but the cursor stayed the assigned Main cursor.

b) the prefix (verb) of the actual cursor stays on the last hovered hotspot, so that the verb is visible until I hover over another hotspot, and when I leave this one, the verb stays there, and so on. These verbs even change together with my cursor, when I change command with the right mouse button.
So a non-hovered hotspot is labeled "examine", and changes to "look at" when I cycle commands :wink:

I tested the "Demo2D_CursorManager" and the behaviour stays the same, so it should be easy to reproduce (a and b).

I am on Windows 7, using Unity 2019.4.9 and latest AC 1.71.8, building for Windows in 3D mode.

Comments

  • the cursor won't change when I hover a hotspot

    Recreated, thanks.

    the prefix (verb) of the actual cursor stays on the last hovered hotspot, so that the verb is visible until I hover over another hotspot

    I'm afraid I don't follow. Can you share screens and steps on how to reproduce this with the 2D Demo?

  • Hi Chris,

    after a little fiddling, I found out that it obviously is related to the "Hotspot" Menu in the Menu Manager.

    If you switch the 2D-Demo to "Choose interaction then hotspot" and in the Hotspot Menu Appear-type and Position to "On Hotspot", you will see the effect.

    It seems that the prefix belongs to the cursor, but stays on the hotspot because of the Appear-Position, as I noticed that by default (Follow cursor), the prefix is always be shown with the current cursor, but that is something I wouldn't like.

    I just want the pefixes shown on the hotspot and disappear when I leave the hotspot, and only the icon of the cursor. Is that even possible?

  • edited September 2020

    Where would you want the Hotspot label to be displayed? In a fixed position on the Hotspot?

    What would be the desired behaviour when an inventory item is selected? For the label to still only be visible when over a Hotspot or item?

  • I've recreated the issue. The Hotspot's position and label are handled separately, but you can remove the label when not over a Hotspot by going to the PlayerInteraction script's GetInteractionLabel function and replacing:

    return KickStarter.cursorManager.GetLabelFromID (cursorID, _language);
    

    with:

    return string.Empty;
    

    I shall add an option to the Cursor Manager to make this optional in the next release.

  • Hi Chris,

    thank you for your help, that option would be a great addition, at least for my project ;)

    Desired behaviour would be:

    Whenever not on a hotspot or inventory item: just the cursor, no text / prefix

    When over a hotspot or inventory item: the prefix and the name of the item / object on the hotspot or the inventory item

    (so, like in the demo, but without the command when the cursor is over nothing)

    When an item is selected, the item as cursor (what is just working fine) without text, and when over an item or a hotspot, the use syntax over the hotspot or the inventory item.

    The additional option would already help me alot to achieve most of it :wink:

    Maybe some additional feature requests to this topic:

    As far as I can see, I can add an override use-syntax for every inventory item, which is already nice.

    What would really be awesome, if we could have a list of Override syntaxes for different hotspots, so when I enable "Override 'Use' syntax", I could have a button for an "Add override", where I could put a syntax and add several hotspots and items that I want to use that one for, and a standard syntax for unhandled hotspots or items.
    Say, I have a key, and I add all doors to the override "open {hotspot} with {item}, or maybe simply key instead of {item} and another override for a volcano, saying "throw {item} into {object}", and all undefined would say "use {item} on {object}", but maybe this would be too much work.

    For the beginning, it would be nice if I could just enter a string where I place the placeholders (item) and (hotspot) myself or at least the ability to switch the position of these :wink:

    That way, I could make an interaction "use key on door", that I could just label "open door with key", which sounds more correct, without having to implement a separate "open" interaction :wink:

    I guess for German, for which I currently am developing, this is more interesting than for english, but I think this might be interesting for some other languages, also.

    And btw, thank you for this great asset and the stellar support :smiley:

  • edited September 2020

    Whenever not on a hotspot or inventory item: just the cursor, no text / prefix

    The "Inventory cursor" section of the Cursor Manager has an Only show label when over Hotspots and Inventory? option. I'll see about adding an equivalent for the "Interaction icons" section.

    "open door with key", which sounds more correct

    For something that could potentially be as complex as you'd want it to be for your own project, I think you'd be best off looking at a custom script solution. Probably more-so with other languages involved, since other languages may have their own differences in syntax, too.

    This would involve removing the default Hotspot label from view, and replacing it with a Unity UI Text component that has its text value set via:

    AC.KickStarter.playerMenus.GetHotspotLabel ();
    

    (For the default value)

    You could then replace this with a custom label under certain conditions - for example, if a "key" inventory item is selected, and the active Hotspot is given a "Door" tag:

    private string GetCustomLabel ()
    {
        if (KickStarter.runtimeInventory.SelectedItem != null &&
            KickStarter.runtimeInventory.SelectedItem.label == "Key" &&
            KickStarter.playerInteraction.GetActiveHotspot () &&
            KickStarter.playerInteraction.GetActiveHotspot ().tag == "Door")
        {
            int language = Options.GetLanguage ();
            return "Open " + KickStarter.playerInteraction.GetActiveHotspot ().GetName (language) + " with " + KickStarter.runtimeInventory.SelectedItem.GetLabel (language);
        }
    
        return KickStarter.playerMenus.GetHotspotLabel ();
    }
    

    Such code could also be moved into custom events (e.g. OnHotspotSelect / OnHotspotDeselect) to improve performance.

    More importantly, though, you can have your script implement the ITranslatable interface so that you can hook up any custom words (e.g. "Open" and "with") to AC's translation system. See the Manual's "Custom translatables" chapter for more on this.

  • Hi Chris,

    thank you very much, as I already have a custom OnHotspotSelect / Deselect, I think this is exactly what I needed to replace a handful of prefixes :)

Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Welcome to the official forum for Adventure Creator.