public void PlayPattern(IPattern pattern) { lock (lockObject) { long startTime = getTimeMilliseconds(); if (pattern.GetType() == typeof(RepeatablePattern)) { foreach (RepeatPattern repeatP in repeatablePatternList) { if (repeatP.pattern.ID == ((RepeatablePattern)pattern).ID) { return; //Pattern already present } } RepeatablePattern repeatablePattern = (RepeatablePattern)pattern; List <SimplePattern> simplePatternList = repeatablePattern.GetSimplePatterns(); repeatablePatternList.Add(new RepeatPattern(repeatablePattern, startTime + Pattern.Utils.GetMaxDuration(simplePatternList))); PlaySimplePatterns(simplePatternList, startTime, false); } else { PlaySimplePatterns(pattern.GetSimplePatterns(), startTime, true); } } }
public void PlayPattern(IPattern pattern) { if (pattern.GetType() == typeof(RepeatablePattern)) { foreach (RepeatPattern repeatP in repeatablePatternList) { if (repeatP.pattern.ID == ((RepeatablePattern)pattern).ID) { return; //Pattern already present } } RepeatablePattern repeatablePattern = (RepeatablePattern)pattern; List <SimplePattern> simplePatternList = repeatablePattern.GetSimplePatterns(); repeatablePatternList.Add(new RepeatPattern(repeatablePattern, Environment.TickCount + Utils.GetMaxDuration(simplePatternList))); foreach (SimplePattern sp in simplePatternList) { StartPatternOnMotor(sp.GetMotor(), sp); } } else { foreach (SimplePattern p in pattern.GetSimplePatterns()) { int motor = p.GetMotor(); if (motor >= numberOfMotors || motor < 0) { Console.Error.WriteLine("Invalid motor id: " + motor + ". Vibration device has " + numberOfMotors + " motorThreads."); } StartPatternOnMotor(motor, p); } } }
public void Disable() { enabled = false; timer.Stop(); if (repeatablePattern != null) { repeatablePattern.Stop(); } repeatablePattern = null; }
private void PlayVibraion() { if (useRepeatablePattern) { lastStamina = currentStamina / maxStamina; //IPattern newPattern = Utils.STAMINA_PATTERN_STUDY_2(currentStamina); IPattern newPattern = Utils.HEALT_PATTERN_2(currentStamina); if (repeatablePattern == null || !repeatablePattern.IsRepeating()) { repeatablePattern = new RepeatablePattern(newPattern); Main.vibrationDevice.PlayPattern(repeatablePattern); } else { repeatablePattern.UpdatePattern(newPattern); } } else { if (Environment.TickCount > lastNotification + 3000) { double change = GetStaminaChangePerSecond(1500); double pctChange = GetStaminaPercentageChangePerSecond(1500); if (pctChange < 0) { //stamina drain if (Math.Abs(WALK_STAMINA_CHANGE_PER_SECOND - Math.Abs(change)) < WALK_STAMINA_CHANGE_PER_SECOND * 0.3) { //walking } else if (Math.Abs(SPRINT_STAMINA_CHANGE_PER_SECOND - Math.Abs(change)) < SPRINT_STAMINA_CHANGE_PER_SECOND * 0.3) { //sprinting lastNotification = Environment.TickCount; Main.vibrationDevice.PlayPattern(Utils.STAMINA_PATTERN_5(-1)); } } else { //stamina regeneration or no change if (Math.Abs(STAND_STAMINA_PERCENTAGE_CHANGE_PER_SECOND - Math.Abs(pctChange)) < STAND_STAMINA_PERCENTAGE_CHANGE_PER_SECOND * 0.3) { //regeneration lastNotification = Environment.TickCount; Main.vibrationDevice.PlayPattern(Utils.STAMINA_PATTERN_5(1)); } } } } }
private void UpdateStaminaPattern(String selection, double stamina, double staminaChange, int vibrationDuration) { IPattern newPattern = null; switch (selection) { case "Pattern Study 2": newPattern = new RepeatablePattern(Utils.STAMINA_PATTERN_STUDY_2(stamina)); numberOfGroupsForTest = -1; break; case "Pattern 1": newPattern = new RepeatablePattern(Utils.STAMINA_PATTERN_1(stamina)); numberOfGroupsForTest = -1; break; case "Pattern 2": newPattern = new RepeatablePattern(Utils.STAMINA_PATTERN_2(staminaChange)); numberOfGroupsForTest = -1; break; case "Pattern 3": newPattern = new RepeatablePattern(Utils.STAMINA_PATTERN_3(staminaChange)); numberOfGroupsForTest = -1; break; case "Pattern 4": newPattern = new RepeatablePattern(Utils.STAMINA_PATTERN_4(staminaChange)); numberOfGroupsForTest = -1; break; case "Pattern 5": newPattern = new RepeatablePattern(Utils.STAMINA_PATTERN_5(staminaChange)); numberOfGroupsForTest = -1; break; default: break; } if (newPattern != null) { nextStaminaTime = Environment.TickCount + (long)numericUpDown7.Value; bool result = PlayPattern(staminaPattern, newPattern); if (!result) { staminaPattern = newPattern; } } }
public EasyGridPatternGenerator(RepeatablePattern pattern, TimeSpan duration) { _pattern = pattern; Duration = duration; }
public RepeatPattern(RepeatablePattern pattern, long endTime) { this.pattern = pattern; this.endTime = endTime; }
private void UpdateHealthPattern(String selection, double health, int vibrationDuration) { IPattern newPattern = null; switch (selection) { case "Pattern 1": newPattern = new RepeatablePattern(Utils.HEALT_PATTERN_1(health, vibrationDuration)); numberOfGroupsForTest = -1; break; case "Pattern 1b": newPattern = new RepeatablePattern(Utils.HEALT_PATTERN_1b(health, vibrationDuration)); numberOfGroupsForTest = -1; break; case "Pattern 1c": newPattern = new RepeatablePattern(Utils.HEALT_PATTERN_1c(health)); numberOfGroupsForTest = -1; break; case "Pattern 1d": newPattern = new RepeatablePattern(Utils.HEALT_PATTERN_1d(health, vibrationDuration)); numberOfGroupsForTest = -1; break; case "Pattern 2": newPattern = new RepeatablePattern(Utils.HEALT_PATTERN_2(health)); numberOfGroupsForTest = -1; break; case "Pattern 2b": newPattern = new RepeatablePattern(Utils.HEALT_PATTERN_2b(health)); numberOfGroupsForTest = -1; break; case "Pattern 3": newPattern = new RepeatablePattern(Utils.HEALT_PATTERN_3(health, Utils.HEALT_PATTERN_1(health, vibrationDuration))); numberOfGroupsForTest = -1; break; case "Test Motor 1": newPattern = new RepeatablePattern(Utils.HEALTH_PATTERN_MOTOR(1, health)); break; case "Test Motor 2": newPattern = new RepeatablePattern(Utils.HEALTH_PATTERN_MOTOR(2, health)); break; case "Test Motor 3": newPattern = new RepeatablePattern(Utils.HEALTH_PATTERN_MOTOR(3, health)); break; case "Test Motor 4": newPattern = new RepeatablePattern(Utils.HEALTH_PATTERN_MOTOR(4, health)); break; case "Test Motor 5": newPattern = new RepeatablePattern(Utils.HEALTH_PATTERN_MOTOR(5, health)); break; case "Test Motor 6": newPattern = new RepeatablePattern(Utils.HEALTH_PATTERN_MOTOR(6, health)); break; case "Test Motor 7": newPattern = new RepeatablePattern(Utils.HEALTH_PATTERN_MOTOR(7, health)); break; case "Test Motor 8": newPattern = new RepeatablePattern(Utils.HEALTH_PATTERN_MOTOR(8, health)); break; default: break; } if (newPattern != null) { nextHealthTime = Environment.TickCount + (long)numericUpDown4.Value; bool result = PlayPattern(healthPattern, newPattern); if (!result) { healthPattern = newPattern; } } }
private void ResetPattern() { repeatablePattern = new RepeatablePattern(DEFAULT_PATTERN); }