void handleSubmit() { Debug.LogFormat("[Homestuck Flashes #{0}] Checking submission, {1}.", _moduleId, songArray [stageSongArray [currentSSAIndex]]); Audio.PlayGameSoundAtTransform(KMSoundOverride.SoundEffect.ButtonPress, Submit.transform); Submit.AddInteractionPunch(); if (!_lightsOn || _isSolved) { return; } if (currentSSAIndex == 0) { Debug.LogFormat("[Homestuck Flashes #{0}] Stage is complete.", _moduleId); if (stageNum == totalStageNum) { _isSolved = true; Module.HandlePass(); StageInd.text = "DEFUSED"; Debug.LogFormat("[Homestuck Flashes #{0}] Module is defused.", _moduleId); } else { int newStageNum = stageNum + 1; StageInd.text = "STAGE " + newStageNum.ToString() + " OF " + totalStageNum.ToString(); generateStage(); } stageNum++; } else { Debug.LogFormat("[Homestuck Flashes #{0}] The inputted answer is incorrect.", _moduleId); Module.HandleStrike(); } }
private KMSelectable.OnInteractHandler btnDown(int multi, bool minutes) { return(delegate { if (_isSolved) { return false; } Submit.AddInteractionPunch(); Audio.PlayGameSoundAtTransform(KMSoundOverride.SoundEffect.ButtonPress, Submit.transform); if (_handHeld != null) { StopCoroutine(_handHeld); } _handHeld = StartCoroutine(moveHands(multi, minutes)); return false; }); }
private void submit() { if (_isSolved) { return; } Submit.AddInteractionPunch(); Audio.PlayGameSoundAtTransform(KMSoundOverride.SoundEffect.ButtonPress, Submit.transform); var isFirstHalf = Bomb.GetTime() > _bombTime / 2; Debug.LogFormat("[The Clock #{0}] Pressed Submit {1} half of the bomb’s time has elapsed. Expecting {2}.", _moduleId, isFirstHalf ? "before" : "after", isFirstHalf ? "add" : "subtract"); if (_shownTime == (_initialTime + (isFirstHalf ? _addTime : totalMinutes - _addTime)) % totalMinutes) { // Correct! :) Debug.LogFormat("[The Clock #{0}] Module solved.", _moduleId); Module.HandlePass(); _isSolved = true; StartCoroutine(transitionSecondHand()); } else { // Wrong, dude _initialTime = Rnd.Range(0, totalMinutes); Debug.LogFormat("[The Clock #{0}] {1} submitted. Strike. New initial time: {2}", _moduleId, formatTime(_shownTime), formatTime(_initialTime)); LogAnswer(); _shownTime = _initialTime; Module.HandleStrike(); } if (_handHeld != null) { StopCoroutine(_handHeld); } _handHeld = StartCoroutine(moveHands(0, false, secondsOnly: _isSolved)); }
void Start() { _moduleId = _moduleIdCounter++; _solved = false; // Rule seed var rnd = RuleSeedable.GetRNG(); Debug.LogFormat("[101 Dalmatians #{0}] Using rule seed: {1}", _moduleId, rnd.Seed); var skip = rnd.Next(0, 100); for (var i = 0; i < skip; i++) { rnd.NextDouble(); } rnd.ShuffleFisherYates(Furspots); // Decide which fur pattern to show on the module and in what rotation. _solution = Rnd.Range(0, 101); Fur.material.mainTexture = Furspots[_solution]; var moduleRotation = Rnd.Range(0, 360f); Fur.transform.localEulerAngles = new Vector3(0, moduleRotation, 0); _curDalmatianIndex = Rnd.Range(0, 101); UpdateName(); Debug.LogFormat(@"<101 Dalmatians #{0}> Name initially shown: {1}", _moduleId, _dalmatians[_curDalmatianIndex]); Debug.LogFormat(@"[101 Dalmatians #{0}] Solution: {1}", _moduleId, _dalmatians[_solution]); Debug.LogFormat(@"[101 Dalmatians #{0}] Showing fur pattern {1} rotated {2}° clockwise", _moduleId, Furspots[_solution].name.Substring(3), Math.Round(moduleRotation)); LeftArrow.OnInteract = delegate { _curDalmatianIndex = (_curDalmatianIndex + 100) % 101; UpdateName(); startLongPress(100); return(false); }; RightArrow.OnInteract = delegate { _curDalmatianIndex = (_curDalmatianIndex + 1) % 101; UpdateName(); startLongPress(1); return(false); }; LeftArrow.OnInteractEnded = RightArrow.OnInteractEnded = delegate { if (_longPress != null) { StopCoroutine(_longPress); } }; Submit.OnInteract = delegate { Audio.PlayGameSoundAtTransform(KMSoundOverride.SoundEffect.ButtonPress, transform); Submit.AddInteractionPunch(); if (_solved) { return(false); } if (_curDalmatianIndex == _solution) { Debug.LogFormat(@"[101 Dalmatians #{0}] You submitted {1}. Correct.", _moduleId, _dalmatians[_curDalmatianIndex]); Module.HandlePass(); Audio.PlayGameSoundAtTransform(KMSoundOverride.SoundEffect.CorrectChime, transform); LeftArrow.gameObject.SetActive(false); RightArrow.gameObject.SetActive(false); StartCoroutine(solveAnimationPart1()); StartCoroutine(solveAnimationPart2()); _solved = true; } else { Debug.LogFormat(@"[101 Dalmatians #{0}] You submitted {1}. Strike.", _moduleId, _dalmatians[_curDalmatianIndex]); Module.HandleStrike(); } return(false); }; }
private void SubmitHandler() { Audio.PlayGameSoundAtTransform(KMSoundOverride.SoundEffect.ButtonPress, Submit.transform); Submit.AddInteractionPunch(); if (Barempty) { Barempty = false; BarControl.gameObject.transform.localScale = new Vector3(1, 1, 1); Debug.LogFormat("[Waste Management #{0}] Strike avoided, continue with next stage", _moduleId); return; } if (!_lightsOn || _isSolved) { return; } if (!Calculated && !ForcedSolve) { //once submit button is pressed for the first time, those rules will be in effect for the rest of the bomb, unless you get a strike on this module CurrentTime = Mathf.FloorToInt(Info.GetTime()); Debug.LogFormat("[Waste Management #{0}] Submit button pressed, performing final adjustments", _moduleId); TimeAdjustments(); } switch (Stage) { case 1: { if (!ForcedSolve) { CalculateProportions(); } Debug.LogFormat("[Waste Management #{0}] Received {1} for paper recycling, expected {2}", _moduleId, PaperRecycle, PaperRecycleAns); Debug.LogFormat("[Waste Management #{0}] Received {1} for paper waste, expected {2}", _moduleId, PaperWaste, PaperWasteAns); if (PaperRecycle == PaperRecycleAns && PaperWaste == PaperWasteAns) { Debug.LogFormat("[Waste Management #{0}] Paper correct!", _moduleId); Audio.PlaySoundAtTransform("PaperSubmit", Submit.transform); Stage++; Input = 0; Screen.text = "Plastic"; Screen.fontSize = 70; } else { Debug.LogFormat("[Waste Management #{0}] Paper incorrect, Strike.", _moduleId); Module.HandleStrike(); Strike = true; Init(); } break; } case 2: { Debug.LogFormat("[Waste Management #{0}] Received {1} for plastic recycling, expected {2}", _moduleId, PlasticRecycle, PlasticRecycleAns); Debug.LogFormat("[Waste Management #{0}] Received {1} for plastic waste, expected {2}", _moduleId, PlasticWaste, PlasticWasteAns); if (PlasticRecycle == PlasticRecycleAns && PlasticWaste == PlasticWasteAns) { Debug.LogFormat("[Waste Management #{0}] Plastic correct!", _moduleId); Audio.PlaySoundAtTransform("PlasticSubmit", Submit.transform); Stage++; Input = 0; Screen.text = "Metal"; Screen.fontSize = 75; } else { Debug.LogFormat("[Waste Management #{0}] Plastic incorrect, Strike.", _moduleId); Module.HandleStrike(); Strike = true; Init(); } break; } case 3: { Debug.LogFormat("[Waste Management #{0}] Received {1} for metal recycling, expected {2}", _moduleId, MetalRecycle, MetalRecycleAns); Debug.LogFormat("[Waste Management #{0}] Received {1} for metal waste, expected {2}", _moduleId, MetalWaste, MetalWasteAns); if (MetalRecycle == MetalRecycleAns && MetalWaste == MetalWasteAns) { if (LeftoverRecycleAns > 0 || LeftoverWasteAns > 0) { Debug.LogFormat("[Waste Management #{0}] Metal correct!", _moduleId); Audio.PlaySoundAtTransform("MetalSubmit", Submit.transform); Stage++; Input = 0; Screen.text = "Leftovers"; Screen.fontSize = 50; } else { Debug.LogFormat("[Waste Management #{0}] Metal correct!", _moduleId); Debug.LogFormat("[Waste Management #{0}] There are no leftovers", _moduleId); Debug.LogFormat("[Waste Management #{0}] Module Passed.", _moduleId); _isSolved = true; //module is solved Module.HandlePass(); Audio.PlaySoundAtTransform("WasteManagementSolve", Submit.transform); Input = 0; Screen.text = ""; Screen.fontSize = 75; } } else { Debug.LogFormat("[Waste Management #{0}] Metal incorrect, Strike.", _moduleId); Strike = true; Module.HandleStrike(); Init(); } break; } default: { Debug.LogFormat("[Waste Management #{0}] Received {1} for leftover recycling, expected {2}", _moduleId, LeftoverRecycle, LeftoverRecycleAns); Debug.LogFormat("[Waste Management #{0}] Received {1} for leftover waste, expected {2}", _moduleId, LeftoverWaste, LeftoverWasteAns); if (LeftoverRecycle == LeftoverRecycleAns && LeftoverWaste == LeftoverWasteAns) { Debug.LogFormat("[Waste Management #{0}] Leftovers correct!", _moduleId); Debug.LogFormat("[Waste Management #{0}] Module Passed.", _moduleId); _isSolved = true; //module is solved Module.HandlePass(); Audio.PlaySoundAtTransform("WasteManagementSolve", Submit.transform); Input = 0; Screen.text = string.Empty; Screen.fontSize = 75; } else { Debug.LogFormat("[Waste Management #{0}] Leftovers incorrect, Strike.", _moduleId); Strike = true; Module.HandleStrike(); Init(); } break; } } if (Stage < 1 || Stage >= 4) { return; } int random = UnityEngine.Random.Range(1, 21); //5% chance of bar going blank if (random != 1) { return; } Barempty = true; BarControl.gameObject.transform.localScale = new Vector3(1, 1, 0); Debug.LogFormat("[Waste Management #{0}] Bar empty, submit expected or strike", _moduleId); }
private void Initialization() { _clues = new List <Clue>(); // Add the size indication var sizeSystem = Rnd.Range(0, 5); var primes = new[] { 3, 5, 7 }; var size = Enumerable.Range(3, 5).SelectMany(width => Enumerable.Range(3, 5).Select(height => new { Width = width, Height = height })) .Where(sz => sizeSystem != 0 || (primes.Contains(sz.Width) && primes.Contains(sz.Height))) .PickRandom(); Clue clue = null; switch (sizeSystem) { case 0: clue = new Clue((size.Width > size.Height ? "{0}" : size.Width < size.Height ? "({0})" : Rnd.Range(0, 2) == 0 ? "{0}" : "({0})").Fmt(size.Width * size.Height), false, false, 128); break; case 1: clue = new Clue("{0}×{1}".Fmt(size.Width, size.Height), false, false, 128, null, "{0}x{1}".Fmt(size.Width, size.Height)); break; case 2: clue = new Clue("{1} by {0}".Fmt(size.Width, size.Height), false, false, 128); break; case 3: clue = new Clue("{0}*{1}".Fmt(size.Width * size.Height, size.Height), false, false, 128); break; case 4: clue = new Clue("{0} : {1}".Fmt(size.Width * size.Height, size.Width), false, false, 128); break; } _clues.Add(clue); Debug.LogFormat(@"[Coordinates #{3}] Showing grid size {0}×{1} as {2}", size.Width, size.Height, clue.LoggingText, _moduleId); var coordCh = 'a'; var grid = new char[size.Width * size.Height]; for (int i = 0; i < size.Width * size.Height; i++) { grid[i] = '.'; } var coordinates = Enumerable.Range(0, size.Width * size.Height).ToList(); coordinates.Shuffle(); var illegalCoords = new List <int>(); var num = 0; // Generate 6 illegal coordinates for (; num < 6; num++) { illegalCoords.Add(coordinates[num]); clue = addClue(false, coordinates[num], size.Width, size.Height); Debug.LogFormat(@"[Coordinates #{3}] Showing illegal coordinate {0}={1} as {2}", coordCh, loggingCoords(coordinates[num], size.Width), clue.LoggingText, _moduleId); grid[coordinates[num]] = coordCh; coordCh++; } // Generate the correct coordinate twice with different coordinate systems clue = addClue(true, coordinates[num], size.Width, size.Height); Debug.LogFormat(@"[Coordinates #{0}] Showing correct coordinate *={1} as {2}", _moduleId, loggingCoords(coordinates[num], size.Width), clue.LoggingText); clue = addClue(true, coordinates[num], size.Width, size.Height, avoidSystem: clue.System); Debug.LogFormat(@"[Coordinates #{0}] Showing correct coordinate *={1} as {2}", _moduleId, loggingCoords(coordinates[num], size.Width), clue.LoggingText); grid[coordinates[num]] = '*'; // Log the grid Debug.LogFormat("[Coordinates #{0}] Grid:\n{1}", _moduleId, Enumerable.Range(0, size.Height).Select(row => (grid[size.Width * row] == '*' ? "" : " ") + Enumerable.Range(0, size.Width) .Select(col => new { Char = grid[col + size.Width * row], Col = col, Coord = col + size.Width * row }) .Select(inf => inf.Char == '*' ? "[*]" : (inf.Char != '.' ? inf.Char : illegalCoords.Contains(inf.Coord) ? '#' : '.') + (inf.Col == size.Width - 1 || grid[inf.Col + 1 + size.Width * row] == '*' ? "" : " ")) .JoinString()) .JoinString("\n")); _clues.Shuffle(); _selectedIndex = 0; _firstCorrectSubmitted = null; Left.OnInteract = delegate { Left.AddInteractionPunch(.5f); Audio.PlayGameSoundAtTransform(KMSoundOverride.SoundEffect.ButtonPress, Left.transform); StartCoroutine(ButtonAnimation(Left)); if (_clues == null) { return(false); } _selectedIndex = (_selectedIndex + _clues.Count - 1) % _clues.Count; UpdateDisplay(false); return(false); }; Right.OnInteract = delegate { Right.AddInteractionPunch(.5f); Audio.PlayGameSoundAtTransform(KMSoundOverride.SoundEffect.ButtonPress, Right.transform); StartCoroutine(ButtonAnimation(Right)); if (_clues == null) { return(false); } _selectedIndex = (_selectedIndex + 1) % _clues.Count; UpdateDisplay(true); return(false); }; Submit.OnInteract = delegate { Submit.AddInteractionPunch(1f); Audio.PlayGameSoundAtTransform(KMSoundOverride.SoundEffect.ButtonPress, Submit.transform); StartCoroutine(ButtonAnimation(Submit)); if (_clues == null) { return(false); } if (_clues[_selectedIndex].IsCorrect && (_firstCorrectSubmitted == null || _firstCorrectSubmitted == _selectedIndex)) { Debug.LogFormat("[Coordinates #{0}] Pressed submit button on {1}: first correct answer.", _moduleId, _clues[_selectedIndex].LoggingText); _firstCorrectSubmitted = _selectedIndex; } else if (_clues[_selectedIndex].IsCorrect) { Debug.LogFormat("[Coordinates #{0}] Pressed submit button on {1}: second correct answer. Module solved.", _moduleId, _clues[_selectedIndex].LoggingText); Module.HandlePass(); _clues = null; } else { Debug.LogFormat("[Coordinates #{0}] Pressed submit button on wrong answer {1}.", _moduleId, _clues[_selectedIndex].LoggingText); Module.HandleStrike(); } return(false); }; UpdateDisplay(true); }