Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allowing users to set their launcher preferences (steam vs epic). #123

Merged
merged 4 commits into from Oct 10, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
30 changes: 20 additions & 10 deletions rlbot_gui/gui.py
Expand Up @@ -28,6 +28,8 @@
from rlbot_gui.match_runner.match_runner import hot_reload_bots, shut_down, start_match_helper, \
do_infinite_loop_content, spawn_car_in_showroom, set_game_state, fetch_game_tick_packet
from rlbot_gui.type_translation.packet_translation import convert_packet_to_dict
from rlbot_gui.persistence.settings import load_settings, BOT_FOLDER_SETTINGS_KEY, MATCH_SETTINGS_KEY, \
LAUNCHER_SETTINGS_KEY, TEAM_SETTINGS_KEY, load_launcher_settings, launcher_preferences_from_map

#### LOAD JUST TO EXPOSE STORY_MODE
from rlbot_gui.story import story_runner
Expand All @@ -40,20 +42,15 @@
BOTPACK_REPO_NAME = 'RLBotPack'
BOTPACK_REPO_BRANCH = 'master'
CREATED_BOTS_FOLDER = 'MyBots'
BOT_FOLDER_SETTINGS_KEY = 'bot_folder_settings'
MATCH_SETTINGS_KEY = 'match_settings'
TEAM_SETTINGS_KEY = 'team_settings'
COMMIT_ID_KEY = 'latest_botpack_commit_id'
bot_folder_settings = None


def load_settings() -> QSettings:
return QSettings('rlbotgui', 'preferences')


@eel.expose
def start_match(bot_list, match_settings):
eel.spawn(start_match_helper, bot_list, match_settings)
launcher_preference_map = load_launcher_settings()
launcher_prefs = launcher_preferences_from_map(launcher_preference_map)
eel.spawn(start_match_helper, bot_list, match_settings, launcher_prefs)


@eel.expose
Expand All @@ -68,7 +65,7 @@ def pick_bot_folder():
if filename:
global bot_folder_settings
bot_folder_settings['folders'][filename] = {'visible': True}
settings = QSettings('rlbotgui', 'preferences')
settings = load_settings()
settings.setValue(DEFAULT_BOT_FOLDER, filename)
settings.setValue(BOT_FOLDER_SETTINGS_KEY, bot_folder_settings)
settings.sync()
Expand Down Expand Up @@ -171,6 +168,11 @@ def get_match_settings():
return match_settings if match_settings else None


@eel.expose
def get_launcher_settings():
return load_launcher_settings()


@eel.expose
def get_team_settings():
settings = load_settings()
Expand All @@ -190,6 +192,12 @@ def save_match_settings(match_settings):
settings.setValue(MATCH_SETTINGS_KEY, match_settings)


@eel.expose
def save_launcher_settings(launcher_settings_map):
settings = load_settings()
settings.setValue(LAUNCHER_SETTINGS_KEY, launcher_settings_map)


@eel.expose
def save_team_settings(blue_bots, orange_bots):
settings = load_settings()
Expand Down Expand Up @@ -281,7 +289,9 @@ def save_looks(looks: dict, path: str):
def spawn_car_for_viewing(looks: dict, team: int, showcase_type: str, map_name: str):
looks_config = convert_to_looks_config(looks)
loadout_config = load_bot_appearance(looks_config, team)
spawn_car_in_showroom(loadout_config, team, showcase_type, map_name)
launcher_settings_map = get_launcher_settings()
launcher_prefs = launcher_preferences_from_map(launcher_settings_map)
spawn_car_in_showroom(loadout_config, team, showcase_type, map_name, launcher_prefs)


@eel.expose
Expand Down
6 changes: 5 additions & 1 deletion rlbot_gui/gui/css/style.css
Expand Up @@ -296,6 +296,10 @@ button.icon-button {
width: initial;
}

#javascript-trouble {
.platform-icon {
height: 1em;
}

.btn-dark .platform-icon {
filter: invert()
}
Binary file added rlbot_gui/gui/imgs/epic.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added rlbot_gui/gui/imgs/steam.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
51 changes: 51 additions & 0 deletions rlbot_gui/gui/js/launcher-preference-vue.js
@@ -0,0 +1,51 @@
export default {
name: 'launcher-preference',
props: ['modalId'],
template: `
<div>
<div>
<b-form-group>
<b-form-radio v-model="launcherSettings.preferred_launcher" name="launcher-radios" value="steam">Steam</b-form-radio>
<b-form-radio v-model="launcherSettings.preferred_launcher" name="launcher-radios" value="epic">Epic Games</b-form-radio>
<b-form-checkbox
class="ml-4"
v-model="launcherSettings.use_login_tricks"
:disabled="launcherSettings.preferred_launcher !== 'epic'">

Use Epic Login Tricks <b-icon class="warning-icon" icon="exclamation-triangle-fill" v-b-tooltip.hover
title="If you choose this, we'll do some fancy things to make sure your Epic account logs in successfully and loads your car + camera settings.
It might look slightly weird on the Epic login server but they probably won't care."></b-icon>
</b-form-checkbox>
</b-form-group>
</div>
<b-button variant="primary" class="mt-3" @click="saveLauncherSettings()">Save</b-button>
</div>
`,
data () {
return {
launcherSettings: { preferred_launcher: 'epic', use_login_tricks: false },
}
},

methods: {
launcherSettingsReceived: function (launcherSettings) {
if (launcherSettings) {
Object.assign(this.launcherSettings, launcherSettings);
}
},
saveLauncherSettings: function () {
eel.save_launcher_settings(this.launcherSettings);
this.$bvModal.hide(this.modalId);
},
},
created: function () {
eel.get_launcher_settings()(this.launcherSettingsReceived);
},
watch: {
'launcherSettings.preferred_launcher': function(newVal) {
if (newVal === 'steam') {
this.launcherSettings.use_login_tricks = false;
}
}
},
}
28 changes: 19 additions & 9 deletions rlbot_gui/gui/js/main-vue.js
@@ -1,6 +1,7 @@
import AppearanceEditor from './appearance-editor-vue.js'
import MutatorField from './mutator-field-vue.js'
import BotCard from './bot-card-vue.js'
import LauncherPreferenceModal from './launcher-preference-vue.js'

const HUMAN = {'name': 'Human', 'type': 'human', 'image': 'imgs/human.png'};
const STARTING_BOT_POOL = [
Expand All @@ -25,7 +26,7 @@ export default {
<b-spinner v-if="showProgressSpinner" variant="success" label="Spinning" class="mr-2"></b-spinner>
<span id="sandbox-button-wrapper">
<b-button
@click="$router.replace('/sandbox')" variant="dark"
@click="$router.replace('/sandbox')" variant="dark" class="ml-2"
:disabled="!matchSettings.enable_state_setting">
State Setting Sandbox
</b-button>
Expand Down Expand Up @@ -194,6 +195,10 @@ export default {

<b-button class="ml-4" v-b-modal.mutators-modal>Mutators</b-button>
<b-button class="ml-2" v-b-modal.extra-modal>Extra</b-button>
<b-button class="ml-2" v-b-modal.launcher-modal>
<img class="platform-icon" src="imgs/steam.png" /> /
<img class="platform-icon" src="imgs/epic.png" />
</b-button>

<span style="flex-grow: 1"></span>

Expand All @@ -208,13 +213,13 @@ export default {
</div>

<b-modal title="Extra Options" id="extra-modal" size="md" hide-footer centered>
<div><b-form-checkbox v-model="matchSettings.enable_rendering">Enable Rendering (bots can draw on screen)</b-form-checkbox></div>
<div><b-form-checkbox v-model="matchSettings.enable_state_setting">Enable State Setting (bots can teleport)</b-form-checkbox></div>
<div><b-form-checkbox v-model="matchSettings.auto_save_replay">Auto Save Replay</b-form-checkbox></div>
<div><b-form-checkbox v-model="matchSettings.skip_replays">Skip Replays</b-form-checkbox></div>
<div><b-form-checkbox v-model="matchSettings.instant_start">Instant Start</b-form-checkbox></div>
<div><b-form-checkbox v-model="matchSettings.enable_lockstep">Enable Lockstep</b-form-checkbox></div>
<mutator-field label="Existing Match Behaviour" :options="matchOptions.match_behaviours" v-model="matchSettings.match_behavior" class="mt-3"></mutator-field>
<div><b-form-checkbox v-model="matchSettings.enable_rendering">Enable Rendering (bots can draw on screen)</b-form-checkbox></div>
<div><b-form-checkbox v-model="matchSettings.enable_state_setting">Enable State Setting (bots can teleport)</b-form-checkbox></div>
<div><b-form-checkbox v-model="matchSettings.auto_save_replay">Auto Save Replay</b-form-checkbox></div>
<div><b-form-checkbox v-model="matchSettings.skip_replays">Skip Replays</b-form-checkbox></div>
<div><b-form-checkbox v-model="matchSettings.instant_start">Instant Start</b-form-checkbox></div>
<div><b-form-checkbox v-model="matchSettings.enable_lockstep">Enable Lockstep</b-form-checkbox></div>
<mutator-field label="Existing Match Behaviour" :options="matchOptions.match_behaviours" v-model="matchSettings.match_behavior" class="mt-3"></mutator-field>
</b-modal>

<b-modal id="mutators-modal" title="Mutators" size="lg" hide-footer centered>
Expand Down Expand Up @@ -375,6 +380,10 @@ export default {
v-bind:path="appearancePath"
v-bind:map="matchSettings.map"
id="appearance-editor-dialog" />

<b-modal title="Preferred Rocket League Launcher" id="launcher-modal" size="md" hide-footer centered>
<launcher-preference-modal modal-id="launcher-modal" />
</b-modal>

</div>

Expand All @@ -385,6 +394,7 @@ export default {
'appearance-editor': AppearanceEditor,
'mutator-field': MutatorField,
'bot-card': BotCard,
'launcher-preference-modal': LauncherPreferenceModal,
},
data () {
return {
Expand Down Expand Up @@ -710,5 +720,5 @@ export default {
self.downloadStatus = status;
self.downloadProgressPercent = progress;
}
},
}
};
13 changes: 12 additions & 1 deletion rlbot_gui/gui/js/story-mode-start.js
@@ -1,9 +1,11 @@
import Colorpicker from './colorpicker-vue.js'
import LauncherPreferenceModal from './launcher-preference-vue.js'

export default {
name: 'story-start',
components: {
'colorpicker': Colorpicker,
'launcher-preference-modal': LauncherPreferenceModal,
},
template: /*html*/`
<b-container class="pt-5">
Expand Down Expand Up @@ -36,12 +38,21 @@ export default {
<span>{{this.form.custom_story.storyPath}}</span>
</b-form-group>
</b-form-group>


<b-form-group label="Launcher" label-cols="auto">
<b-button v-b-modal.launcher-modal-story>
Choose Steam or Epic
</b-button>
</b-form-group>

<b-button type="submit" variant="primary" class="mt-2">Get Started</b-button>
</b-form>
</b-card-text>
</b-card>
<b-modal title="Preferred Rocket League Launcher" id="launcher-modal-story" size="md" hide-footer centered>
<!-- Modal id is intentionally different from the one on the main page in main-vue.js-->
<launcher-preference-modal modal-id="launcher-modal-story" />
</b-modal>
</b-container>
`,
data() {
Expand Down
4 changes: 2 additions & 2 deletions rlbot_gui/gui/js/story-pick-team.js
Expand Up @@ -24,7 +24,7 @@ export default {
>
<div class="d-block text-center">
<div v-if="!enoughAvailableTeammates">
<p>You do not have enough teamamtes to create a team for this challenge.
<p>You do not have enough teammates to create a team for this challenge.
Recruit teammates from the "teammate" tab or play older matches to earn
more currency</p>

Expand Down Expand Up @@ -91,4 +91,4 @@ export default {
this.pickedTeammates = [];
}
}
};
};
14 changes: 8 additions & 6 deletions rlbot_gui/match_runner/match_runner.py
@@ -1,10 +1,11 @@
from math import pi
from typing import List

from rlbot.gateway_util import NetworkingRole
from rlbot.matchconfig.loadout_config import LoadoutConfig
from rlbot.matchconfig.match_config import PlayerConfig, MatchConfig, MutatorConfig, ScriptConfig
from rlbot.parsing.incrementing_integer import IncrementingInteger
from rlbot.setup_manager import SetupManager
from rlbot.setup_manager import SetupManager, RocketLeagueLauncherPreference
from rlbot.utils.structures.bot_input_struct import PlayerInput
from rlbot.utils.game_state_util import GameState, CarState, BallState, Physics, Vector3, Rotator
from rlbot.utils.structures.game_data_struct import GameTickPacket
Expand All @@ -14,7 +15,7 @@
sm: SetupManager = None


def create_player_config(bot, human_index_tracker: IncrementingInteger):
def create_player_config(bot: dict, human_index_tracker: IncrementingInteger):
player_config = PlayerConfig()
player_config.bot = bot['type'] in ('rlbot', 'psyonix')
player_config.rlbot_controlled = bot['type'] in ('rlbot', 'party_member_bot')
Expand All @@ -30,7 +31,8 @@ def create_script_config(script):
return ScriptConfig(script['path'])


def spawn_car_in_showroom(loadout_config: LoadoutConfig, team: int, showcase_type: str, map_name: str):
def spawn_car_in_showroom(loadout_config: LoadoutConfig, team: int, showcase_type: str, map_name: str,
launcher_prefs: RocketLeagueLauncherPreference):
match_config = MatchConfig()
match_config.game_mode = 'Soccer'
match_config.game_map = map_name
Expand All @@ -54,7 +56,7 @@ def spawn_car_in_showroom(loadout_config: LoadoutConfig, team: int, showcase_typ
global sm
if sm is None:
sm = SetupManager()
sm.connect_to_game()
sm.connect_to_game(launcher_preference=launcher_prefs)
sm.load_match_config(match_config)
sm.start_match()

Expand Down Expand Up @@ -129,7 +131,7 @@ def get_fresh_setup_manager():
return sm


def start_match_helper(bot_list, match_settings):
def start_match_helper(bot_list: List[dict], match_settings: dict, launcher_prefs: RocketLeagueLauncherPreference):
print(bot_list)
print(match_settings)

Expand Down Expand Up @@ -169,7 +171,7 @@ def start_match_helper(bot_list, match_settings):

sm = get_fresh_setup_manager()
sm.early_start_seconds = 5
sm.connect_to_game()
sm.connect_to_game(launcher_preference=launcher_prefs)
sm.load_match_config(match_config)
sm.launch_early_start_bot_processes()
sm.start_match()
Expand Down
Empty file.
22 changes: 22 additions & 0 deletions rlbot_gui/persistence/settings.py
@@ -0,0 +1,22 @@
from PyQt5.QtCore import QSettings
from rlbot.setup_manager import DEFAULT_LAUNCHER_PREFERENCE, RocketLeagueLauncherPreference

BOT_FOLDER_SETTINGS_KEY = 'bot_folder_settings'
MATCH_SETTINGS_KEY = 'match_settings'
LAUNCHER_SETTINGS_KEY = 'launcher_settings'
TEAM_SETTINGS_KEY = 'team_settings'


def load_settings() -> QSettings:
return QSettings('rlbotgui', 'preferences')


def launcher_preferences_from_map(launcher_preference_map: dict) -> RocketLeagueLauncherPreference:
return RocketLeagueLauncherPreference(launcher_preference_map['preferred_launcher'],
launcher_preference_map['use_login_tricks'])


def load_launcher_settings():
settings = load_settings()
launcher_settings = settings.value(LAUNCHER_SETTINGS_KEY, type=dict)
return launcher_settings if launcher_settings else DEFAULT_LAUNCHER_PREFERENCE.__dict__
6 changes: 3 additions & 3 deletions rlbot_gui/story/story_challenge_setup.py
Expand Up @@ -27,7 +27,7 @@
MutatorConfig,
Team,
)
from rlbot.setup_manager import SetupManager
from rlbot.setup_manager import SetupManager, RocketLeagueLauncherPreference

from rlbot_gui.match_runner.match_runner import get_fresh_setup_manager
from rlbot_gui import gui as rlbot_gui # TODO: Need to remove circular import
Expand Down Expand Up @@ -430,12 +430,12 @@ def manage_game_state(


def run_challenge(
match_config: MatchConfig, challenge: dict, upgrades: dict
match_config: MatchConfig, challenge: dict, upgrades: dict, launcher_pref: RocketLeagueLauncherPreference
) -> Tuple[bool, dict]:
"""Launch the game and keep track of the state"""
setup_manager = get_fresh_setup_manager()
setup_manager.early_start_seconds = 5
setup_manager.connect_to_game()
setup_manager.connect_to_game(launcher_preference=launcher_pref)
setup_manager.load_match_config(match_config)
setup_manager.launch_early_start_bot_processes()
setup_manager.start_match()
Expand Down