Exemple #1
0
        public static void ResetStateChanged(IStateChanged state)
        {
            if (state != null)
            {
                state.SetStateChanged(false);
            }

            var properties = state.GetType().GetProperties();

            foreach (var property in properties)
            {
                var value = property.GetValue(state, null);

                if (value != null && value is IStateChanged)
                {
                    var changedValue = (IStateChanged)value;
                    changedValue.SetStateChanged(false);
                }
            }

            var fields = state.GetType().GetFields();

            foreach (var field in fields)
            {
                var value = field.GetValue(state);
                if (value != null && value is IStateChanged)
                {
                    var changedValue = (IStateChanged)value;
                    changedValue.SetStateChanged(false);
                }
            }
        }
Exemple #2
0
        // TODO: optimize
        public static bool ApplyStateChanged(IStateChanged oldState, IStateChanged newState)
        {
            if (oldState == null || newState == null)
            {
                return(oldState != null || newState != null);
            }

            bool stateChanged = false;

            var properties = newState.GetType().GetProperties();

            foreach (var property in properties)
            {
                var newValue = property.GetValue(newState, null);
                var oldValue = property.GetValue(oldState, null);

                if (newValue is IStateChanged)
                {
                    stateChanged |= ApplyStateChanged((IStateChanged)oldValue, (IStateChanged)newValue);
                }
                else if (newValue == null && oldValue != null || newValue != null && !newValue.Equals(oldValue))
                {
                    stateChanged = true;
                }
            }

            var fields = newState.GetType().GetFields();

            foreach (var field in fields)
            {
                var newValue = field.GetValue(newState);
                var oldValue = field.GetValue(oldState);

                if (newValue is IStateChanged)
                {
                    stateChanged |= ApplyStateChanged((IStateChanged)oldValue, (IStateChanged)newValue);
                }
                else if (newValue == null && oldValue != null || newValue != null && !newValue.Equals(oldValue))
                {
                    stateChanged = true;
                }
            }

            if (stateChanged)
            {
                newState.SetStateChanged();
            }

            return(stateChanged);
        }