public static Action GenerateAction(ActionName actionName) { Action action; switch (actionName) { case ActionName.CastSkill: action = new CastSkillAction(); break; default: throw new Exception(string.Format($"Not recognized action name of '{actionName}'")); } return(action); }
private bool IsSpawnerContainMonsterId(string monsterId) { for (int i = 0; i < spawn.actions.Count; i++) { if (spawn.actions[i].IsSpawnAction()) { CastSkillAction castSkillAction = spawn.actions[i] as CastSkillAction; foreach (ChallengePreset challengePreset in castSkillAction.challengePresets) { if (!string.IsNullOrEmpty(challengePreset.path) && challengePreset.path.Contains(monsterId)) { return(true); } } } } return(false); }
private float CalculateChallengeMinTime(Challenge challenge) { float challengeMinTime = 0; switch (challenge.trigger.ShowTriggerName()) { case TriggerName.WaitForSeconds: challengeMinTime = (challenge.trigger as TimeTrigger).waitTime; break; case TriggerName.WaitForEvent: EventTrigger eventTrigger = challenge.trigger as EventTrigger; int eventId = eventTrigger.eventId; challengeMinTime = trackerMinWaitTimeByEventID.ContainsKey(eventId) ? trackerMinWaitTimeByEventID[eventId] : 0; challengeMinTime += eventTrigger.waitTime; break; } if (challenge.IsSpawner()) { CalculateTrackerMinWaitTime(challenge.spawn.trackers, challengeMinTime); float spawnerMinTime = 0; foreach (Action action in challenge.spawn.actions) { if (action.IsSpawnAction()) { CastSkillAction spawnAction = action as CastSkillAction; float triggerTime = 0; float spawnTime = 0; switch (spawnAction.ShowTriggerCondition()) { case ActionTriggerCondition.Time: triggerTime = spawnAction.waitTime; break; case ActionTriggerCondition.ByEvent: triggerTime = trackerMinWaitTimeByEventID.ContainsKey(spawnAction.eventId) ? trackerMinWaitTimeByEventID[spawnAction.eventId] : 0; triggerTime += spawnAction.waitTime; break; } foreach (ChallengePreset challengePreset in spawnAction.challengePresets) { spawnTime = Mathf.Max(spawnTime, challengePreset.delay + (challengePreset.count - 1) * challengePreset.interval); // DLog.Log($"{challengeMinTime + action.waitTime + challengePreset.delay}s"); CalculateTrackerMinWaitTime(challengePreset.trackers, challengeMinTime + action.waitTime + challengePreset.delay); } spawnerMinTime = Mathf.Max(triggerTime + spawnTime, spawnerMinTime); } } challengeMinTime += spawnerMinTime; } else { CalculateTrackerMinWaitTime(challenge.spawn.trackers, challengeMinTime); } return(challengeMinTime); }