bool RunSingleStatement(SingleStatement singleStatement, ItemId itemId, StateValue signal, out string updatedKey) { var target = singleStatement.TargetState; var parameterType = target.ParameterType; updatedKey = GetStateKey(target.Target, target.Key, itemId); if (parameterType == ParameterType.Signal) { var conditionSatisfied = singleStatement.Expression == null || EvaluateExpression(singleStatement.Expression, itemId).ToBool(); if (conditionSatisfied) { roomStateRepository.Update(updatedKey, signal); } return(conditionSatisfied); } else { var value = Cast(parameterType, EvaluateExpression(singleStatement.Expression, itemId)); roomStateRepository.Update(updatedKey, value); return(true); } }
void UpdateState(IReadOnlyCollection <KeyValuePair <string, StateValue> > stateChange) { if (stateChange.Count == 0) { return; } foreach (var state in stateChange) { roomStateRepository.Update(state.Key, state.Value); } gimmickManager.OnStateUpdated(stateChange.Select(s => s.Key)); }
void OnTriggered(object sender, TriggerEventArgs args) { var senderTrigger = (IItemTrigger)sender; var senderItem = senderTrigger.Item; if (!TryGetKey(args.Target, senderItem, args.SpecifiedTargetItem, args.CollidedObject, args.Key, out var key)) { return; } var gimmickValue = GetGimmickValue(args.Type, args.Value); roomStateRepository.Update(key, gimmickValue); gimmickManager.Invoke(key, gimmickValue); }