[Solved] using an enum from another script efficiently

hi i have been wondering how to use enums in other classes efficiently and after many failures (look below) i have got it set up to work. is it a good way? to keep this short i have cut all unrelated code. note: this is my first time using enums and the switch statement globally, im pretty bad at both but grasp local use perfectly. any insight on this would be much apprieciated. thanks.

here is the way the enum is set up:

using UnityEngine;
using System.Collections;
public enum emotion {
idle, happy, vhappy, angry, vangry, sad, vsad, sleep, hurt, dead
}
public emotion charemote = emotion.idle; // appears in the inspector can be changed and the emotion changes.

public class eyeanim : MonoBehaviour
{
class code...
}

the other class in the parent object attempt 1:

using UnityEngine;
using System;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;
[RequireComponent(typeof (Rigidbody))]

public class physicscharcontroller : MonoBehaviour
{
public enum state {
idle, sit, sit2, lay, lay2, gun, carry, hurt, ragdoll, dead
}
public enum emotestate {
idle, happy, vhappy ,angry, vangry, sad, vsad, sleep, hurt
}
public state cstate = state.idle;
public emotestate estate = emotestate.idle; // to change emotion in the emotion script, currently nothing happens when this is changed more later.
void Start(){
eye = GetComponentInChildren<eyeanim>();
}

void Update(){
switch(estate){
case emotestate.idle : eye.charemote = emotion.idle; break; // as a test to change the emotion back from another emotion it errors as of now.
}
}
}

attempt 2:

using UnityEngine;
using System;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;
[RequireComponent(typeof (Rigidbody))]

public class physicscharcontroller : MonoBehaviour
{
public enum state {
idle, sit, sit2, lay, lay2, gun, carry, hurt, ragdoll, dead
}
public enum emotestate {
idle, happy, vhappy ,angry, vangry, sad, vsad, sleep, hurt
}
public state cstate = state.idle;
public emotestate estate = emotestate.idle; // to change emotion in the emotion script, currently nothing happens when this is changed more later.
public emotion emot;

void Start(){
eye = GetComponentInChildren<eyeanim>();
}
void Update(){
switch(estate){
case emotestate.idle : eye.charemote = emot.idle; break; // as a test to change the emotion back from another emotion it errors as of now.
}
}
}

attempt 3:

using UnityEngine;
using System;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;
[RequireComponent(typeof (Rigidbody))]

public class physicscharcontroller : MonoBehaviour
{
public enum state {
idle, sit, sit2, lay, lay2, gun, carry, hurt, ragdoll, dead
}
public enum emotestate {
idle, happy, vhappy ,angry, vangry, sad, vsad, sleep, hurt
}
public state cstate = state.idle;
public emotestate estate = emotestate.idle; // to change emotion in the emotion script, currently nothing happens when this is changed more later.
public emotion emot;

void Start(){
eye = GetComponentInChildren<eyeanim>();
emot = eye.charemote;
}
void Update(){
eye.charemote = emot; // change this in the inspector and the emotion changes.
/*switch(estate){
case emotestate.idle : eye.charemote = emot.idle; break; //it still errors
}*/
}
}

attempt 4:

using UnityEngine;
using System;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;
[RequireComponent(typeof (Rigidbody))]

public class physicscharcontroller : MonoBehaviour
{
public enum state {
idle, sit, sit2, lay, lay2, gun, carry, hurt, ragdoll, dead
}
public enum emotestate {
idle, happy, vhappy ,angry, vangry, sad, vsad, sleep, hurt
}
public state cstate = state.idle;
public emotestate estate = emotestate.idle; // to change emotion in the emotion script, currently nothing happens when this is changed more later.
public emotion emot;

void Start(){
eye = GetComponentInChildren<eyeanim>();
emot = eye.charemote;
}

void Update(){
//eye.charemote = emot; // disable it and...
switch(estate){
case emotestate.idle : eye.charemote = emot.idle; break; // back to square one.
}
}
}

attempt 5:

using UnityEngine;
using System;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;
[RequireComponent(typeof (Rigidbody))]

public class physicscharcontroller : MonoBehaviour
{
public enum state {
idle, sit, sit2, lay, lay2, gun, carry, hurt, ragdoll, dead
}
public enum emotestate {
idle, happy, vhappy ,angry, vangry, sad, vsad, sleep, hurt
}
public state cstate = state.idle;
public emotestate estate = emotestate.idle; // to change emotion in the emotion script, currently nothing happens when this is changed more later.
public emotion emot;

void Start(){
eye = GetComponentInChildren<eyeanim>();
emot = eye.charemote;
}

void Update(){
eye.charemote = emot;
switch(estate){
case emotestate.idle : emot = emotion.idle; break; //if changed in the inspector they both work and the emotion switches but it seems a little crude ?
case emotestate.vhappy : emot = emotion.vhappy; break;
}
}
}

I have usually placed the public enum in the main class it is used in and if any other class needs access to it I just access it via the class.

public class enumController {
    public enum eEnumeration {
        enumValue1,
        enumValue2,
        enumValue3,
    }
}

public class enumUser {
     public void aFunction(enumController.eEnumeration enumState)
     {
          switch(enumState)
          {
               case enumController.eEnumeration.enumValue1: workRelatingToenumState1(); break;
               case enumController.eEnumeration.enumValue2: workRelatingToenumState2(); break;
               case enumController.eEnumeration.enumValue3: workRelatingToenumState3(); break;
          }
     }
}

thanks, i will try that later, it seems to be much better than what i currently have.

finally found the time to implement this into my main class and switch all my other classes to it. it works great and is less cluttering to the Update(), i also gained 6 fps on the soon to be mobile version of my game. thanks.