public void ApplyScript()
        {
            var isScriptValid = false;

            try {
                var table    = script.script.Globals;
                var dynValue = new List <DynValue> ();

                foreach (var key in table.Keys)
                {
                    var value    = table.Get(key);
                    var dataType = value.Type;
                    if (dataType == DataType.String || dataType == DataType.Boolean || dataType == DataType.Number)
                    {
                        dynValue.Add(key);
                    }
                }

                foreach (var thing in dynValue)
                {
                    table.Remove(thing);
                }

                script.script.DoString(input.text);
                errorMessage.SetActive(false);
                isScriptValid = true;
            } catch {
                Debug.LogWarning("Error on script!  Will not apply");
                errorMessage.SetActive(true);
                errorMessage.GetComponent <Animator> ().Play("Error Msg Shake");
                isScriptValid = false;
            }

            if (isScriptValid)
            {
                var candidate = script.CreateCopy();
                candidate.code       = input.text;
                candidate.properties = ScriptUtility.ExtractProperties(script.script);
                entity.Script        = candidate;
                eventTable.Invoke <IEntityContainer> ("OnScriptApply", entity);
            }
        }