Help Please - C# listeners android input to change state

So I am trying to get a basic structure for a text based game but at the moment it is set up for windows and i am trying to make it compatible with android, so I have the code below

    void cell () {
            text.text = "You are in a prison cell, and you want to escape. There are " +
                        "some dirty sheets on the bed, a mirror on the wall, and the door " +
                        "is locked from the outside.\n\n" +
                        "Press S to view Sheets, M to view Mirror and L to view Lock" ;
            if         (Input.GetKeyDown(KeyCode.S))     {myState = States.sheets_0;}
            else if (Input.GetKeyDown(KeyCode.M))     {myState = States.mirror;}
            else if (Input.GetKeyDown(KeyCode.L))     {myState = States.lock_0;}
        }

So if I want to make this work for Android I created 3 UI Buttons A, B and C and I made the buttons public doing the below in the same script

    public Button a;
    public Button b;
    public Button c;

So then if I want to change the (Input.GetKeyDown(KeyCode.S)) {myState = States.sheets_0;} to change the state with a button press I tried doing a.onClick.AddListener(() => { myState = YOUR_STATE_HERE; });

Press Spoiler if it helps to see all of the code its just a basic template which I am using from a paid tutorial and trying to adjust and learn from it to do different things with before moving on to the next stage .

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class TextController : MonoBehaviour {

    public Text text;
 
    private enum States {
        cell, mirror, sheets_0, lock_0, cell_mirror, sheets_1, lock_1, corridor_0, stairs_0, stairs_1,
        stairs_2, courtyard, floor, corridor_1, corridor_2, corridor_3,closet_door, in_closet
        };
    private States myState;
 
    // Use this for initialization
    void Start () {
       myState = States.cell;
    }
 
    // Update is called once per frame
    void Update () {
        print (myState);
        if         (myState == States.cell)         {cell();}
        else if (myState == States.sheets_0)     {sheets_0();}
        else if (myState == States.sheets_1)     {sheets_1();}
        else if (myState == States.lock_0)         {lock_0();}
        else if (myState == States.lock_1)         {lock_1();}
        else if (myState == States.mirror)         {mirror();}
        else if (myState == States.cell_mirror) {cell_mirror();}
        else if (myState == States.corridor_0)     {corridor_0();}
        else if (myState == States.stairs_0)     {stairs_0();}
        else if (myState == States.stairs_1)     {stairs_1();}
        else if (myState == States.stairs_2)     {stairs_2();}
        else if (myState == States.courtyard)     {courtyard();}
        else if (myState == States.floor)         {floor();}
        else if (myState == States.corridor_1)     {corridor_1();}
        else if (myState == States.corridor_2)     {corridor_2();}
        else if (myState == States.corridor_3)     {corridor_3();}
        else if (myState == States.closet_door) {closet_door();}
        else if (myState == States.in_closet)     {in_closet();}
    }
 
    void in_closet() {
        text.text = "Inside the closet you see a cleaner's uniform that looks about your size! " +
                    "Seems like your day is looking-up.\n\n" +
                    "Press D to Dress up, or R to Return to the corridor";
        if         (Input.GetKeyDown(KeyCode.R))     {myState = States.corridor_2;}
        else if (Input.GetKeyDown(KeyCode.D))     {myState = States.corridor_3;}
    }
 
    void closet_door() {
        text.text = "You are looking at a closet door, unfortunately it's locked. " +
                    "Maybe you could find something around to help enourage it open?\n\n" +
                    "Press R to Return to the corridor";
        if (Input.GetKeyDown(KeyCode.R))         {myState = States.corridor_0;}
    }
 
    void corridor_3() {
        text.text = "You're standing back in the corridor, now convincingly dressed as a cleaner. " +
                    "You strongly consider the run for freedom.\n\n" +
                    "Press S to take the Stairs, or U to Undress";
        if         (Input.GetKeyDown(KeyCode.S))     {myState = States.courtyard;}
        else if (Input.GetKeyDown(KeyCode.U))    {myState = States.in_closet;}
    }
 
    void corridor_2() {
        text.text = "Back in the corridor, having declined to dress-up as a cleaner.\n\n" +
                    "Press C to revisit the Closet, and S to climb the stairs";
        if         (Input.GetKeyDown(KeyCode.C))     {myState = States.in_closet;}
        else if (Input.GetKeyDown(KeyCode.S))     {myState = States.stairs_2;}
    }
 
    void corridor_1() {
        text.text = "Still in the corridor. Floor still dirty. Hairclip in hand. " +
                    "Now what? You wonder if that lock on the closet would succumb to " +
                    "to some lock-picking?\n\n" +
                    "P to Pick the lock, and S to climb the stairs";
        if (Input.GetKeyDown(KeyCode.P))         {myState = States.in_closet;}
        else if (Input.GetKeyDown(KeyCode.S))     {myState = States.stairs_1;}
    }
 
    void floor () {
        text.text = "Rummagaing around on the dirty floor, you find a hairclip.\n\n" +
                    "Press R to Return to the standing, or H to take the Hairclip." ;
        if         (Input.GetKeyDown(KeyCode.R))     {myState = States.corridor_0;}
        else if (Input.GetKeyDown(KeyCode.H))     {myState = States.corridor_1;}
    } 
 
    void courtyard () {
        text.text = "You walk through the courtyard dressed as a cleaner. " +
                    "The guard tips his hat at you as you waltz past, claiming " +
                    "your freedom. You heart races as you walk into the sunset.\n\n" +
                    "Press P to Play again." ;
        if (Input.GetKeyDown(KeyCode.P))         {myState = States.cell;}
    } 
 
    void stairs_0 () {
        text.text = "You start walking up the stairs towards the outside light. " +
                    "You realise it's not break time, and you'll be caught immediately. " +
                    "You slither back down the stairs and reconsider.\n\n" +
                    "Press R to Return to the corridor." ;
        if (Input.GetKeyDown(KeyCode.R))         {myState = States.corridor_0;}
    }
 
    void stairs_1 () {
        text.text = "Unfortunately weilding a puny hairclip hasn't given you the " +
                    "confidence to walk out into a courtyard surrounded by armed guards!\n\n" +
                    "Press R to Retreat down the stairs" ;
        if (Input.GetKeyDown(KeyCode.R))         {myState = States.corridor_1;}
    }
 
    void stairs_2() {
        text.text = "You feel smug for picking the closet door open, and are still armed with " +
                    "a hairclip (now badly bent). Even these achievements together don't give " +
                    "you the courage to climb up the staris to your death!\n\n" +
                    "Press R to Return to the corridor";
        if (Input.GetKeyDown(KeyCode.R))         {myState = States.corridor_2;}
    }
 
    void cell () {
        text.text = "You are in a prison cell, and you want to escape. There are " +
                    "some dirty sheets on the bed, a mirror on the wall, and the door " +
                    "is locked from the outside.\n\n" +
                    "Press S to view Sheets, M to view Mirror and L to view Lock" ;
        if         (Input.GetKeyDown(KeyCode.S))     {myState = States.sheets_0;}
        else if (Input.GetKeyDown(KeyCode.M))     {myState = States.mirror;}
        else if (Input.GetKeyDown(KeyCode.L))     {myState = States.lock_0;}
    }
 
    void mirror() {
        text.text = "The dirty old mirror on the wall seems loose.\n\n" +
                    "Press T to Take the mirror, or R to Return to cell" ;
        if         (Input.GetKeyDown(KeyCode.T))     {myState = States.cell_mirror;}
        else if (Input.GetKeyDown(KeyCode.R))     {myState = States.cell;}
    }
 
    void cell_mirror() {
        text.text = "You are still in your cell, and you STILL want to escape! There are " +
                    "some dirty sheets on the bed, a mark where the mirror was, " +
                    "and that pesky door is still there, and firmly locked!\n\n" +
                    "Press S to view Sheets, or L to view Lock" ;
        if         (Input.GetKeyDown(KeyCode.S))     {myState = States.sheets_1;}
        else if (Input.GetKeyDown(KeyCode.L))     {myState = States.lock_1;}
    }
 
    void sheets_0 () {
        text.text = "You can't believe you sleep in these things. Surely it's " +
                    "time somebody changed them. The pleasures of prison life " +
                    "I guess!\n\n" +
                    "Press R to Return to roaming your cell" ;
        if (Input.GetKeyDown(KeyCode.R))         {myState = States.cell;}
    }
 
    void sheets_1() {
        text.text = "Holding a mirror in your hand doesn't make the sheets look " +
                    "any better.\n\n" +
                    "Press R to Return to roaming your cell" ;
        if (Input.GetKeyDown(KeyCode.R))         {myState = States.cell_mirror;}
    }
 
    void lock_0() {
        text.text = "This is one of those button locks. You have no idea what the " +
                    "combination is. You wish you could somehow see where the dirty " +
                    "fingerprints were, maybe that would help.\n\n" +
                    "Press R to Return to roaming your cell" ;
        if (Input.GetKeyDown(KeyCode.R))         {myState = States.cell;}
    }
 
    void lock_1() {
        text.text = "You carefully put the mirror through the bars, and turn it round " +
                    "so you can see the lock. You can just make out fingerprints around " +
                    "the buttons. You press the dirty buttons, and hear a click.\n\n" +
                    "Press O to Open, or R to Return to your cell" ;
        if         (Input.GetKeyDown(KeyCode.O))     {myState = States.corridor_0;}
        else if (Input.GetKeyDown(KeyCode.R))     {myState = States.cell_mirror;}
    }
 
    void corridor_0() {
        text.text = "You're out of your cell, but not out of trouble." +
                    "You are in the corridor, there's a closet and some stairs leading to " +
                    "the courtyard. There's also various detritus on the floor.\n\n" +
                    "C to view the Closet, F to inspect the Floor, and S to climb the stairs";
        if         (Input.GetKeyDown(KeyCode.S))     {myState = States.stairs_0;}
        else if (Input.GetKeyDown(KeyCode.F))     {myState = States.floor;}
        else if (Input.GetKeyDown(KeyCode.C))     {myState = States.closet_door;}
    }
}

( this code / Spoiler does not have any of my attempts with the button changes it it the code with the windows input as my android button attempts have not worked)

However any of my attempts to get a basic function where the button input of A B and C will change the state has come up in multiple errors and seems like I am not getting the write code together, any simple fixes or help will be much appreciated, trying to get this to work for android devices

Thank you for your help and time in advance I apologies for the noob questions

I’ll start with a maxim for programming: if you’re copying and pasting code, you probably should rethink your design. In this case, the fact that you have a bunch of hard-coded functions means that changing one thing about the way your game works implies making a change in dozens of statements. In other words: right now, you are experiencing the consequences of hard-coding. You could apply some “minor fixes” to the code and patch it up, but it’ll involve more copy-pasting and will send you further down the rabbit hole.

Instead, let’s turn this into a lesson in writing versatile code.

What I’d recommend instead of this one class is two main classes: TextController, and let’s call it TextState. There will be a bunch of TextState objects, and each one should have a string(its “message”), and an array of a third (non-MonoBehaviour) class, let’s call it Response. The idea is the the TextController is the master of everything; each TextState represents a “prompt” with its series of possible answers; and the Response is each answer, including what triggers the answer and what it does. to create a new prompt with messages and buttons, you just need to create another object with a TextState component.

TextState’s data will look something like this:

public class TextState : MonoBehaviour {
[TextArea]
public string prompt = "";
public Response[] responses;
}

Response will look something like this:

[System.Serializable]
public class Response {
public KeyCode keycode; //set this in the editor
public string buttonLabel; //if the string is not blank, we'll activate a button and set this as its label
public TextState activateOnSelection;
}

You’ll have 3 (or however many the “maximum” number is) buttons, stored in an array on TextController. When you activate a new state, it’ll check each Response in the active TextState, and if its buttonLabel is not blank, set the button label to that string. The buttons will be set up to call a function on TextController with an int as the parameter (the int should match their index in the button array - 0, 1, 2). The TextController will then find that response and activate the appropriate next state, which it does simply by setting an activeState variable on itself.

Here’s the function the buttons should be wired up to call:

public TextState activeState;
public void SelectButton(int buttonIndex) {
if (buttonIndex < activeState.responses.Length) {
Response r = activeState.responses[buttonIndex];
if (r.activateOnSelection != null) activeState = r.activateOnSelection;
}
}