mirror of
https://github.com/dscalzi/HeliosLauncher.git
synced 2024-12-22 03:32:12 -08:00
Beginning work on new UI for landing page and the modlist resolver/process builder.
This commit is contained in:
parent
02758b27b2
commit
6eb6177d4b
@ -70,61 +70,73 @@ body {
|
||||
}
|
||||
|
||||
#main > #upper {
|
||||
height: 75%;
|
||||
height: 77%;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#main > #lower {
|
||||
height: 25%;
|
||||
height: 23%;
|
||||
display: flex;
|
||||
background: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
}
|
||||
|
||||
#main > #upper > #left {
|
||||
display: inline-flex;
|
||||
width: 18%;
|
||||
width: 15%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
#main > #upper > #content {
|
||||
display: inline-flex;
|
||||
width: 62%;
|
||||
width: 59%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#main > #upper > #right {
|
||||
display: inline-flex;
|
||||
width: 20%;
|
||||
width: 26%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#main > #lower > #top {
|
||||
height: 50%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#main > #lower > #bottom {
|
||||
height: 50%;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#main > #lower > #bottom > #left {
|
||||
#main > #lower > #left {
|
||||
height: 100%;
|
||||
width: 50%;
|
||||
width: 33%;
|
||||
display: inline-flex;
|
||||
position: relative;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#main > #lower > #bottom > #right {
|
||||
#main > #lower > #left #content {
|
||||
position: relative;
|
||||
top: 25px;
|
||||
display: inline-flex;
|
||||
line-height: 24px;
|
||||
left: 50px;
|
||||
}
|
||||
|
||||
#main > #lower > #center {
|
||||
height: 100%;
|
||||
width: 50%;
|
||||
width: 33%;
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#main > #lower > #center #content {
|
||||
position: relative;
|
||||
top: 25px;
|
||||
}
|
||||
|
||||
#main > #lower > #right {
|
||||
height: 100%;
|
||||
width: 33%;
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
#image_seal {
|
||||
height: 100px;
|
||||
height: 70px;
|
||||
width: auto;
|
||||
margin-top: 12px;
|
||||
position: relative;
|
||||
margin-top: 50px;
|
||||
border: 2px solid white;
|
||||
border-radius: 50%;
|
||||
}
|
||||
@ -133,7 +145,8 @@ body {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-top: 20px;
|
||||
position: relative;
|
||||
top: 50px;
|
||||
}
|
||||
|
||||
#user_avatar {
|
||||
@ -145,50 +158,18 @@ body {
|
||||
}
|
||||
|
||||
#user_text {
|
||||
margin-right: 15px;
|
||||
font-family: 'Avenir Book';
|
||||
font-size: 15px;
|
||||
font-size: 12px;
|
||||
min-width: 112px;
|
||||
font-weight: 900;
|
||||
letter-spacing: 1px;
|
||||
color: white;
|
||||
text-shadow: 0px 0px 20px black;
|
||||
position: relative;
|
||||
right: 25px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.menu_container {
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
margin-right: 22px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.bar1, .bar2, .bar3 {
|
||||
width: 30px;
|
||||
height: 4px;
|
||||
background-color: #d5d7df;
|
||||
margin: 6px auto;
|
||||
transition: 0.4s;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.bar2 {
|
||||
width: 25px !important;
|
||||
}
|
||||
|
||||
#launch_btn {
|
||||
background-color: #4f771d;
|
||||
color: white;
|
||||
border: none;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
padding-left: 26px;
|
||||
padding-right: 20px;
|
||||
font-family: 'Avenir Book';
|
||||
font-size: 16px;
|
||||
border-radius: 0px 20px 20px 0px;
|
||||
}
|
||||
|
||||
#launch_btn:focus {
|
||||
outline: 0px;
|
||||
}
|
||||
|
||||
/*
|
||||
#main_progress[value] {
|
||||
height: 32px;
|
||||
width: 245px;
|
||||
@ -212,6 +193,13 @@ body {
|
||||
|
||||
#main_progress[value]::-webkit-progress-value {
|
||||
background-color: black;
|
||||
background-image: -webkit-linear-gradient(-45deg,
|
||||
transparent 33%, rgba(0, 0, 0, .1) 33%,
|
||||
rgba(0,0, 0, .1) 66%, transparent 66%),
|
||||
-webkit-linear-gradient(top,
|
||||
rgba(255, 255, 255, .25),
|
||||
rgba(0, 0, 0, .25)),
|
||||
-webkit-linear-gradient(left, #09c, #f44);
|
||||
border-radius: 20px 0px 0px 20px;
|
||||
background-size: 35px 20px, 100% 100%, 100% 100%;
|
||||
}
|
||||
@ -248,4 +236,47 @@ body {
|
||||
color: #93b253;
|
||||
content: '\2022 ';
|
||||
line-height: 20px;
|
||||
} */
|
||||
|
||||
.bot_label {
|
||||
color: white;
|
||||
font-family: 'Avenir Book';
|
||||
font-size: 9px;
|
||||
font-weight: bold;
|
||||
text-shadow: 0px 0px 0px #bebcbb;
|
||||
}
|
||||
|
||||
#player_count {
|
||||
color: #635f5b;
|
||||
font-family: 'Avenir Book';
|
||||
font-size: 8px;
|
||||
font-weight: 900;
|
||||
text-shadow: 0px 0px 0px #635f5b;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.bot_divider {
|
||||
height: 25px;
|
||||
width: 2px;
|
||||
background: rgba(107, 105, 105, 0.7);
|
||||
margin-left: 20px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
#mojang_status_icon {
|
||||
font-size: 30px;
|
||||
color: #a5c325;
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
#menu_button {
|
||||
font-family: 'Avenir Book';
|
||||
background: none;
|
||||
border: none;
|
||||
color: white;
|
||||
font-weight: 900;
|
||||
letter-spacing: 2px;
|
||||
text-shadow: 0px 0px 0px #bebcbb;
|
||||
font-size: 11px;
|
||||
line-height: 24px;
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
const fs = require('fs')
|
||||
|
||||
/**
|
||||
* Class used to configure mod launch args.
|
||||
*/
|
||||
export class ModList {
|
||||
|
||||
/**
|
||||
* Construct a ModList.
|
||||
*
|
||||
* @param {String} repositoryRoot - the base path of the mod locations.
|
||||
* @param {Array.<String>} modRef - array containing the mod artifact ids.
|
||||
* @param {String} parentList - parent ModList file path, null if none.
|
||||
*/
|
||||
constructor(repositoryRoot, modRef, parentList){
|
||||
if(!arguments.length){
|
||||
this.repositoryRoot = ''
|
||||
this.modRef = []
|
||||
}
|
||||
this.repositoryRoot
|
||||
this.modRef = modRef
|
||||
if(parentList != null) this.parentList = parentList
|
||||
}
|
||||
|
||||
/**
|
||||
* Exports a ModList object to the specified file path.
|
||||
*
|
||||
* @param {ModList} modList - the ModList object to export.
|
||||
* @param {String} filePath - desired filepath.
|
||||
* @returns {Promise.<String>} - a promise which resolves FML modList argument.
|
||||
*/
|
||||
static exportModList(modList, filePath){
|
||||
return new Promise(function(resolve, reject){
|
||||
fs.writeFile(filePath, JSON.stringify(modList), (err) => {
|
||||
if(err){
|
||||
reject(err.message)
|
||||
}
|
||||
resolve('--modListFile ' + filePath)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {Object} distro - the distribution index.
|
||||
*/
|
||||
static generateModList(distro){
|
||||
|
||||
}
|
||||
|
||||
}
|
17
app/assets/js/modresolver.js
Normal file
17
app/assets/js/modresolver.js
Normal file
@ -0,0 +1,17 @@
|
||||
function _shouldInclude(mdle){
|
||||
return mdle.required == null || mdle.required.value == null || mdle.required.value === true || (mdle.required.value === false && mdle.required.def === true)
|
||||
}
|
||||
|
||||
function resolveForgeFromDistro(moduleArr){
|
||||
const mods = []
|
||||
|
||||
for(let i=0; i<moduleArr.length; ++i){
|
||||
if(moduleArr[i].type != null && moduleArr[i].type === 'forgemod'){
|
||||
if(_shouldInclude(moduleArr[i])){
|
||||
mods.push(moduleArr[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return mods
|
||||
}
|
104
app/assets/js/processbuider.js
Normal file
104
app/assets/js/processbuider.js
Normal file
@ -0,0 +1,104 @@
|
||||
/**
|
||||
* Work in progress
|
||||
*/
|
||||
|
||||
const path = require('path')
|
||||
const fs = require('fs')
|
||||
|
||||
class ProcessBuilder {
|
||||
|
||||
constructor(gameDirectory, distroServer, versionData, forgeData, authUser){
|
||||
this.dir = gameDirectory
|
||||
this.server = server
|
||||
this.versionData = versionData
|
||||
this.forgeData = forgeData
|
||||
this.authUser = authUser
|
||||
this.fmlDir = path.join(this.dir, 'versions', this.server.id)
|
||||
}
|
||||
|
||||
static shouldInclude(mdle){
|
||||
//If the module should be included by default
|
||||
return mdle.required == null || mdle.required.value == null || mdle.required.value === true || (mdle.required.value === false && mdle.required.def === true)
|
||||
}
|
||||
|
||||
resolveDefaultMods(options = {type: 'forgemod'}){
|
||||
//Returns array of default forge mods to load.
|
||||
const mods = []
|
||||
const mdles = this.server.modules
|
||||
|
||||
for(let i=0; i<mdles.length; ++i){
|
||||
if(mdles[i].type != null && mdles[i].type === options.type){
|
||||
if(_shouldInclude(mdles[i])){
|
||||
mods.push(mdles[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return mods
|
||||
}
|
||||
|
||||
constructFMLModList(mods, save = false){
|
||||
//untested - save modlist file
|
||||
const modList = {}
|
||||
modList.repositoryRoot = path.join(this.dir, 'modstore')
|
||||
const ids = []
|
||||
for(let i=0; i<mods.length; ++i){
|
||||
ids.push(mods.id)
|
||||
}
|
||||
modList.modRef = ids
|
||||
|
||||
if(save){
|
||||
fs.writeFileSync(this.fmlDir, modList, 'UTF-8')
|
||||
}
|
||||
}
|
||||
|
||||
constructJVMArguments(){
|
||||
//pending changes
|
||||
const args = [];
|
||||
const mcArgs = this.forgeData.minecraftArguments.split(' ')
|
||||
const argDiscovery = /\${*(.*)}/
|
||||
for(let i=0; i<mcArgs.length; ++i){
|
||||
if(argDiscovery.test(mcArgs[i])){
|
||||
const identifier = mcArgs[i]
|
||||
let val = null;
|
||||
switch(identifier){
|
||||
case 'auth_player_name':
|
||||
val = authUser.selectedProfile.name
|
||||
break
|
||||
case 'version_name':
|
||||
//val = versionData.id
|
||||
val = this.server.id
|
||||
break
|
||||
case 'game_directory':
|
||||
val = this.dir
|
||||
break
|
||||
case 'assets_root':
|
||||
val = path.join(this.dir, 'assets')
|
||||
break
|
||||
case 'assets_index_name':
|
||||
val = this.versionData.assets
|
||||
break
|
||||
case 'auth_uuid':
|
||||
val = this.authUser.selectedProfile.id
|
||||
break
|
||||
case 'auth_access_token':
|
||||
val = authUser.accessToken
|
||||
break
|
||||
case 'user_type':
|
||||
val = 'MOJANG'
|
||||
break
|
||||
case 'version_type':
|
||||
val = versionData['type']
|
||||
break
|
||||
}
|
||||
if(val != null){
|
||||
mcArgs[i] = val;
|
||||
}
|
||||
}
|
||||
}
|
||||
return args.concat(mcArgs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = ProcessBuilder
|
@ -21,30 +21,32 @@
|
||||
<img id="user_avatar" src="https://cdn.discordapp.com/avatars/169197209630277642/6650b5a50e1cb3d00a79b9b88b9a0cd4.png"/>
|
||||
</div>
|
||||
<div id="bottom">
|
||||
<div class="menu_container">
|
||||
<div class="bar1"></div>
|
||||
<div class="bar2"></div>
|
||||
<div class="bar3"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="lower">
|
||||
<div id="top">
|
||||
<div id="launch_area_container">
|
||||
<progress id="main_progress" max=100 value=20 data-label="•  Westeroscraft Production Server"></progress>
|
||||
<button id="launch_btn">LAUNCH</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="bottom">
|
||||
<div id="left">
|
||||
<button class="home_btn" id="mojang_btn" status="#93b253">Mojang Status</button>
|
||||
<div class="bot_wrapper">
|
||||
<div id="content">
|
||||
<span class="bot_label">PLAYERS</span>
|
||||
<span id="player_count">18/100</span>
|
||||
<div class="bot_divider"></div>
|
||||
<span class="bot_label">MOJANG STATUS</span>
|
||||
<span id="mojang_status_icon">•</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="center">
|
||||
<div class="bot_wrapper">
|
||||
<div id="content">
|
||||
<button id="menu_button">MENU</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="right">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user