示例#1
0
        public static void ApplyStates <StateType>(
            List <StateType> oldStates, List <StateType> newStates,
            Func <StateType, StateType, bool> doStatesHaveSameId,
            Action <StateType> removeStateObject,
            Action <StateType> addStateObject,
            Action <StateType, StateType> updateStateObject
            )
        {
            List <StateType> removedStates, addedStates, updatedStates;

            ListExtensions.GetChanges(
                oldStates, newStates, doStatesHaveSameId,
                out removedStates, out addedStates, out updatedStates
                );

            // Despawn weapon objects.
            foreach (var removedState in removedStates)
            {
                removeStateObject(removedState);
            }

            // Spawn weapon objects.
            foreach (var addedState in addedStates)
            {
                addStateObject(addedState);
            }

            // Update existing weapon objects.
            foreach (var updatedState in updatedStates)
            {
                var oldState = oldStates.First(os => doStatesHaveSameId(os, updatedState));
                updateStateObject(oldState, updatedState);
            }
        }