// File: /workspace/github_cpp_makefile_star2_O2/LifeAlgorithm[P]RockPaperScissors/RPSGame.cpp
// Function: RPSGame::toolSettingsMenu()
void RPSGame::toolSettingsMenu() {
	bool runToolSettings = true;
	int settingsInput;

	while (runToolSettings) {
		screenClear();
		cout << "Tool Settings Menu" << endl << endl;
		cout << "1) Human Tool Strength" << endl;
		cout << "2) Computer Tool Strength" << endl;
		cout << "3) Back to main menu" << endl;

		//cout << "X) Tempo - (" << getTempo() << " seconds)" << endl;     If we want to add tempo between rounds

		cout << "Enter option (1-3): ";
		cin >> settingsInput;
		settingsInput = validateBetween(settingsInput, 1, 3);

		switch (settingsInput) {
		case 1: //Human tool Strength
		{
			bool humanToolSettingsRun = true;
			int tempUserChoice;


			while (humanToolSettingsRun) {
				screenClear();
				cout << "Human tool strength settings" << endl << endl;
				cout << "1) Rock strength:  " << humanRockStrength << endl;
				cout << "2) Paper strength: " << humanPaperStrength << endl;
				cout << "3) Scissor strength: " << humanScissorStrength << endl;
				cout << "4) Back to Tool settings menu" << endl;
				cout << endl << endl << "Enter 1-4: ";
				cin >> tempUserChoice;
				tempUserChoice = validateBetween(tempUserChoice, 1, 4);
				int tempStrength = 0;

				switch (tempUserChoice) {
				case 1: // Set Human rock strength
				{
					cout << endl << "Enter new rock strength: ";
					cin >> tempStrength;
					humanRockStrength = validateBetween(tempStrength, minStrength, maxStrength);

					break;
				}
				case 2: // Set Human paper strength
				{
					cout << endl << "Enter new paper strength: ";
					cin >> tempStrength;
					humanPaperStrength = validateBetween(tempStrength, minStrength, maxStrength);

					break;
				}
				case 3: // Set Human scissor strength
				{
					cout << endl << "Enter new scissor strength: ";
					cin >> tempStrength;
					humanScissorStrength = validateBetween(tempStrength, minStrength, maxStrength);
					break;
				}
				case 4: {
					humanToolSettingsRun = false;
				}
				}
			}
			break;
		}

		case 2: //Computer tool Strength
		{
			bool computerToolSettingsRun = true;
			int tempUserChoice;


			while (computerToolSettingsRun) {
				screenClear();
				cout << "Computer tool strength settings" << endl << endl;
				cout << "1) Rock strength:  " << computerRockStrength << endl;
				cout << "2) Paper strength: " << computerPaperStrength << endl;
				cout << "3) Scissor strength: " << computerScissorStrength << endl;
				cout << "4) Back to Tool settings menu" << endl;
				cout << endl << endl << "Enter 1-4: ";
				cin >> tempUserChoice;
				tempUserChoice = validateBetween(tempUserChoice, 1, 4);
				int tempStrength = 0;
				switch (tempUserChoice) {
				case 1: // Set Computer rock strength
				{
					cout << endl << "Enter new rock strength: ";
					cin >> tempStrength;
					computerRockStrength = validateBetween(tempStrength, minStrength, maxStrength);
					break;
				}
				case 2: // Set Computer paper strength
				{
					cout << endl << "Enter new paper strength: ";
					cin >> tempStrength;
					computerPaperStrength = validateBetween(tempStrength, minStrength, maxStrength);
					break;
				}
				case 3: // Set Computer scissor strength
				{
					cout << endl << "Enter new scissor strength: ";
					cin >> tempStrength;
					computerScissorStrength = validateBetween(tempStrength, minStrength, maxStrength);
					break;
				}
				case 4: {
					computerToolSettingsRun = false;
				}
				}
			}
			break;
		}
		case 3: {
			runToolSettings = false;
		}
		}
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
movq 0x3e5c(%rip), %r15      # 0x6fd0
movq 0x3e65(%rip), %rbp      # 0x6fe0
leaq 0x10f3(%rip), %r12      # 0x4275
leaq 0x10(%rsp), %r14
pushq $0x4
popq %r13
leaq 0x11ac(%rip), %rdi      # 0x433e
callq 0x20e0
movq %r15, %rdi
leaq 0x1002(%rip), %rsi      # 0x41a3
callq 0x2130
movq %rax, %rdi
callq 0x20a0
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xff6(%rip), %rsi       # 0x41b6
callq 0x2130
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xff6(%rip), %rsi       # 0x41cd
callq 0x2130
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xff9(%rip), %rsi       # 0x41e7
callq 0x2130
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xf80(%rip), %rsi       # 0x4185
callq 0x2130
movq %rbp, %rdi
leaq 0x14(%rsp), %rsi
callq 0x20c0
movl 0x14(%rsp), %esi
pushq $0x1
popq %rdx
pushq $0x3
popq %rcx
callq 0x2f4e
movl %eax, 0x14(%rsp)
cmpl $0x1, %eax
je 0x3497
cmpl $0x2, %eax
je 0x32f0
cmpl $0x3, %eax
jne 0x318b
jmp 0x3598
movq %r15, %rdi
callq 0x20a0
movq %rax, %rdi
leaq 0x1025(%rip), %rsi      # 0x4281
callq 0x2130
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0x20c0
movl 0xc(%rsp), %esi
movl 0x48(%rbx), %ecx
movl 0x4c(%rbx), %edx
callq 0x2f4e
movl %eax, 0x5c(%rbx)
jmp 0x32f0
movq %r15, %rdi
callq 0x20a0
movq %rax, %rdi
leaq 0x1022(%rip), %rsi      # 0x42b6
callq 0x2130
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0x20c0
movl 0xc(%rsp), %esi
movl 0x48(%rbx), %ecx
movl 0x4c(%rbx), %edx
callq 0x2f4e
movl %eax, 0x64(%rbx)
jmp 0x32f0
movq %r15, %rdi
callq 0x20a0
movq %rax, %rdi
leaq 0xfcf(%rip), %rsi       # 0x429b
callq 0x2130
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0x20c0
movl 0xc(%rsp), %esi
movl 0x48(%rbx), %ecx
movl 0x4c(%rbx), %edx
callq 0x2f4e
movl %eax, 0x60(%rbx)
leaq 0x1047(%rip), %rdi      # 0x433e
callq 0x20e0
movq %r15, %rdi
leaq 0xfcd(%rip), %rsi       # 0x42d3
callq 0x2130
movq %rax, %rdi
callq 0x20a0
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xef4(%rip), %rsi       # 0x4219
callq 0x2130
movl 0x5c(%rbx), %esi
movq %rax, %rdi
callq 0x2190
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xee6(%rip), %rsi       # 0x422d
callq 0x2130
movl 0x60(%rbx), %esi
movq %rax, %rdi
callq 0x2190
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xed8(%rip), %rsi       # 0x4241
callq 0x2130
movl 0x64(%rbx), %esi
movq %rax, %rdi
callq 0x2190
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xecc(%rip), %rsi       # 0x4257
callq 0x2130
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
callq 0x20a0
movq %rax, %rdi
callq 0x20a0
movq %rax, %rdi
movq %r12, %rsi
callq 0x2130
movq %rbp, %rdi
movq %r14, %rsi
callq 0x20c0
movl 0x10(%rsp), %esi
pushq $0x1
popq %rdx
movl %r13d, %ecx
callq 0x2f4e
andl $0x0, 0xc(%rsp)
movl %eax, 0x10(%rsp)
decl %eax
cmpl $0x3, %eax
ja 0x32f0
leaq 0xc78(%rip), %rcx       # 0x4060
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %r15, %rdi
callq 0x20a0
movq %rax, %rdi
leaq 0xe7e(%rip), %rsi       # 0x4281
callq 0x2130
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0x20c0
movl 0xc(%rsp), %esi
movl 0x48(%rbx), %ecx
movl 0x4c(%rbx), %edx
callq 0x2f4e
movl %eax, 0x50(%rbx)
jmp 0x3497
movq %r15, %rdi
callq 0x20a0
movq %rax, %rdi
leaq 0xe7b(%rip), %rsi       # 0x42b6
callq 0x2130
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0x20c0
movl 0xc(%rsp), %esi
movl 0x48(%rbx), %ecx
movl 0x4c(%rbx), %edx
callq 0x2f4e
movl %eax, 0x58(%rbx)
jmp 0x3497
movq %r15, %rdi
callq 0x20a0
movq %rax, %rdi
leaq 0xe28(%rip), %rsi       # 0x429b
callq 0x2130
movq %rbp, %rdi
leaq 0xc(%rsp), %rsi
callq 0x20c0
movl 0xc(%rsp), %esi
movl 0x48(%rbx), %ecx
movl 0x4c(%rbx), %edx
callq 0x2f4e
movl %eax, 0x54(%rbx)
leaq 0xea0(%rip), %rdi       # 0x433e
callq 0x20e0
movq %r15, %rdi
leaq 0xd4f(%rip), %rsi       # 0x41fc
callq 0x2130
movq %rax, %rdi
callq 0x20a0
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xd4d(%rip), %rsi       # 0x4219
callq 0x2130
movl 0x50(%rbx), %esi
movq %rax, %rdi
callq 0x2190
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xd3f(%rip), %rsi       # 0x422d
callq 0x2130
movl 0x54(%rbx), %esi
movq %rax, %rdi
callq 0x2190
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xd31(%rip), %rsi       # 0x4241
callq 0x2130
movl 0x58(%rbx), %esi
movq %rax, %rdi
callq 0x2190
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
leaq 0xd25(%rip), %rsi       # 0x4257
callq 0x2130
movq %rax, %rdi
callq 0x20a0
movq %r15, %rdi
callq 0x20a0
movq %rax, %rdi
callq 0x20a0
movq %rax, %rdi
movq %r12, %rsi
callq 0x2130
movq %rbp, %rdi
movq %r14, %rsi
callq 0x20c0
movl 0x10(%rsp), %esi
pushq $0x1
popq %rdx
movl %r13d, %ecx
callq 0x2f4e
andl $0x0, 0xc(%rsp)
movl %eax, 0x10(%rsp)
decl %eax
cmpl $0x3, %eax
ja 0x3497
leaq 0xae1(%rip), %rcx       # 0x4070
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop