private static ushort GetValue(Level level, ITriggerParameter parameter) { if (parameter == null) { return(0); } else if (parameter is TriggerParameterUshort) { return(((TriggerParameterUshort)parameter).Key); } else if (parameter is IHasScriptID) { uint?Id = ((IHasScriptID)parameter).ScriptId; if (Id == null) { throw new ExceptionScriptIdMissing(); } return(checked ((ushort)Id)); } else if (parameter is Room) { return((ushort)level.Rooms.ReferenceIndexOf(parameter)); } else { throw new Exception("Trigger parameter of invalid type!"); } }
private void UpdateEvents(ref ITriggerParameter oldValue, ITriggerParameter newValue) { if (oldValue == newValue) { return; } if (newValue is ObjectInstance) { ((ObjectInstance)newValue).DeletedEvent += ObjectParameterDeletedEvent; } if (newValue is Room) { ((Room)newValue).DeletedEvent += RoomParameterDeletedEvent; } if (newValue is ObjectInstance) { ((ObjectInstance)newValue).DeletedEvent -= ObjectParameterDeletedEvent; } if (newValue is Room) { ((Room)newValue).DeletedEvent -= RoomParameterDeletedEvent; } oldValue = newValue; }
private void View(ITriggerParameter value) { value = GetObjectPointer(); if (value is ObjectInstance) { ViewObject?.Invoke((ObjectInstance)value); } if (value is Room) { ViewRoom?.Invoke((Room)value); } }
public bool ParameterMatches(ITriggerParameter parameter, bool nullResult) { if (parameter == null) { return(nullResult || Kind == NgParameterKind.Empty); } switch (Kind) { case NgParameterKind.Empty: return(parameter == null); case NgParameterKind.Choice: foreach (NgParameterRange choice in Choices) { if (choice.ParameterMatches(parameter, false)) { return(true); } } return(false); case NgParameterKind.MoveablesInLevel: return(parameter is MoveableInstance); case NgParameterKind.StaticsInLevel: return(parameter is StaticInstance); case NgParameterKind.CamerasInLevel: return(parameter is CameraInstance); case NgParameterKind.SinksInLevel: return(parameter is SinkInstance); case NgParameterKind.FlybyCamerasInLevel: return(parameter is FlybyCameraInstance); case NgParameterKind.Rooms255: return(parameter is Room); default: if (IsNumber) { return(parameter is TriggerParameterUshort); } else { return(false); } } }
public override void TransformRoomReferences(Func <Room, Room> transformRoom) { if (_target is Room) { _target = transformRoom((Room)_target); } if (_timer is Room) { _timer = transformRoom((Room)_timer); } if (_extra is Room) { _extra = transformRoom((Room)_extra); } }
private void ParameterDeletedEvent(ITriggerParameter parameter) { if (_target == parameter) { _target = null; } if (_timer == parameter) { _timer = null; } if (_extra == parameter) { _extra = null; } }
public bool IsPointingTo(ITriggerParameter value) { if (Target != null && Target.Equals(value)) { return(true); } if (Timer != null && Timer.Equals(value)) { return(true); } if (Extra != null && Extra.Equals(value)) { return(true); } return(false); }
bool IEquatable <ITriggerParameter> .Equals(ITriggerParameter other) => this == other;
public static NgParameterRange GetExtraRange(LevelSettings levelSettings, TriggerType triggerType, TriggerTargetType targetType, ITriggerParameter target, ITriggerParameter timer) { switch (triggerType) { case TriggerType.ConditionNg: if (!(timer is TriggerParameterUshort)) { return(new NgParameterRange(NgParameterKind.Empty)); } NgTriggerSubtype conditionSubtriggerType = NgCatalog.ConditionTrigger.MainList.TryGetOrDefault(((TriggerParameterUshort)timer).Key); return(conditionSubtriggerType?.Extra ?? new NgParameterRange(NgParameterKind.Empty)); default: switch (targetType) { case TriggerTargetType.FlipEffect: if (!(target is TriggerParameterUshort)) { return(new NgParameterRange(NgParameterKind.Empty)); } NgTriggerSubtype flipEffectSubtriggerType = NgCatalog.FlipEffectTrigger.MainList.TryGetOrDefault(((TriggerParameterUshort)target).Key); return(flipEffectSubtriggerType?.Extra ?? new NgParameterRange(NgParameterKind.Empty)); case TriggerTargetType.ActionNg: if (!(timer is TriggerParameterUshort)) { return(new NgParameterRange(NgParameterKind.Empty)); } NgTriggerSubtype actionSubtriggerType = NgCatalog.ActionTrigger.MainList.TryGetOrDefault(((TriggerParameterUshort)timer).Key); return(actionSubtriggerType?.Extra ?? new NgParameterRange(NgParameterKind.Empty)); default: return(new NgParameterRange(NgParameterKind.Empty)); } } }
public static NgParameterRange GetTimerRange(LevelSettings levelSettings, TriggerType triggerType, TriggerTargetType targetType, ITriggerParameter target) { switch (triggerType) { case TriggerType.ConditionNg: return(new NgParameterRange(NgCatalog.ConditionTrigger.MainList.DicSelect(e => (TriggerParameterUshort)e.Value))); default: switch (targetType) { case TriggerTargetType.FlipEffect: if (!(target is TriggerParameterUshort)) { return(new NgParameterRange(NgParameterKind.Empty)); } NgTriggerSubtype flipEffectSubtriggerType = NgCatalog.FlipEffectTrigger.MainList.TryGetOrDefault(((TriggerParameterUshort)target).Key); return(flipEffectSubtriggerType?.Timer ?? new NgParameterRange(NgParameterKind.Empty)); case TriggerTargetType.ActionNg: return(new NgParameterRange(NgCatalog.ActionTrigger.MainList.DicSelect(e => (TriggerParameterUshort)e.Value))); case TriggerTargetType.TimerfieldNg: return(new NgParameterRange(NgParameterKind.Empty)); default: return(new NgParameterRange(NgParameterKind.AnyNumber)); } } }
public static NgParameterRange GetTargetRange(LevelSettings levelSettings, TriggerType triggerType, TriggerTargetType targetType, ITriggerParameter timer) { switch (triggerType) { case TriggerType.ConditionNg: if (!(timer is TriggerParameterUshort)) { return(new NgParameterRange(NgParameterKind.Empty)); } NgTriggerSubtype conditionSubtriggerType = NgCatalog.ConditionTrigger.MainList.TryGetOrDefault(((TriggerParameterUshort)timer).Key); return(conditionSubtriggerType?.Target ?? new NgParameterRange(NgParameterKind.Empty)); default: switch (targetType) { case TriggerTargetType.Object: return(new NgParameterRange(NgParameterKind.MoveablesInLevel)); case TriggerTargetType.Camera: return(new NgParameterRange(NgParameterKind.CamerasInLevel)); case TriggerTargetType.Sink: return(new NgParameterRange(NgParameterKind.SinksInLevel)); case TriggerTargetType.Target: // Actually it is possible to not only target Target objects, but all movables. // This is also useful: It makes sense to target egg a trap or an enemy. return(new NgParameterRange(NgParameterKind.MoveablesInLevel)); case TriggerTargetType.FlyByCamera: return(new NgParameterRange(NgParameterKind.FlybyCamerasInLevel)); case TriggerTargetType.FlipEffect: if (levelSettings.GameVersion == TRVersion.Game.TRNG) { return(new NgParameterRange(NgCatalog.FlipEffectTrigger.MainList.DicSelect(e => (TriggerParameterUshort)e.Value))); } else if (levelSettings.GameVersion == TRVersion.Game.TR4) { return(new NgParameterRange(NgCatalog.FlipEffectTrigger.MainList .DicWhere(entry => entry.Value.Name.Contains("OldFlip")) .DicSelect(e => (TriggerParameterUshort)e.Value))); } else { return(new NgParameterRange(NgParameterKind.AnyNumber)); } case TriggerTargetType.ActionNg: if (!(timer is TriggerParameterUshort)) { return(new NgParameterRange(NgParameterKind.Empty)); } NgTriggerSubtype actionSubtriggerType = NgCatalog.ActionTrigger.MainList.TryGetOrDefault(((TriggerParameterUshort)timer).Key); return(actionSubtriggerType?.Target ?? new NgParameterRange(NgParameterKind.Empty)); case TriggerTargetType.TimerfieldNg: return(NgCatalog.TimerFieldTrigger); default: return(new NgParameterRange(NgParameterKind.AnyNumber)); } } }
bool IEquatable <ITriggerParameter> .Equals(ITriggerParameter other) => Equals(other);