Last commit not found
// All available actions | |
export default { | |
/** | |
* Adds the given environment to the specified set. | |
* @param context {Store} | |
* @param payload {{set: string, env: Object}} | |
*/ | |
addEnv(context, payload){ | |
context.commit('addEnv', payload); | |
}, | |
/** | |
* Removes the environment of the given index from the custom set. | |
* @param context {Store} | |
* @param payload {number} - Index of the environment to remove | |
*/ | |
deleteEnv(context, payload){ | |
context.commit('deleteEnv', payload); | |
}, | |
/** | |
* Loads the given environment into the simulation. | |
* @param context {Store} | |
* @param payload {Object} - Environment to load | |
*/ | |
loadEnv(context, payload){ | |
// Resets drawing mode | |
drawing_canvas.clear(); | |
window.terrain = { | |
ground: [], | |
ceiling: [] | |
}; | |
window.ground = [...payload.terrain.ground]; | |
window.ceiling = [...payload.terrain.ceiling]; | |
// Updates the values of the terrain sliders | |
for(let param in payload.terrain.parkourConfig){ | |
context.commit('updateParkourConfig', {name: param, value: payload.terrain.parkourConfig[param]}); | |
} | |
for(let param in payload.terrain.creepersConfig){ | |
context.commit('updateParkourConfig', {name: param, value: payload.terrain.creepersConfig[param]}); | |
} | |
// Replaces previous agents by the ones of the env | |
while (context.state.agents.length > 0){ | |
context.commit('deleteAgent', {index: 0}); | |
} | |
for(let agent of payload.agents){ | |
context.commit('addAgent', { | |
morphology: agent.morphology, | |
name: agent.name, | |
path: agent.path, | |
init_pos: agent.init_pos | |
}); | |
} | |
// Initializes the new environment | |
context.commit('init_default', {}); | |
}, | |
/** | |
* Initializes the game with default parameters. | |
* @param context {Store} | |
* @param payload | |
*/ | |
init_default(context, payload) { | |
context.commit('init_default', {}); | |
}, | |
/** | |
* Changes the value of the given terrain parameter. | |
* @param context {Store} | |
* @param payload {{name: string, value: number}} - Name and value of the terrain parameter to change | |
*/ | |
changeParkourConfig(context, payload){ | |
// Case one of the cppn dims is changed : aligns the terrain with the startpad | |
if(['dim1', 'dim2', 'dim3'].indexOf(payload.name) != -1){ | |
window.ground = []; | |
window.ceiling = []; | |
window.align_terrain = { | |
align: true, | |
ceiling_offset: null, // aligns the ceiling with the startpad | |
ground_offset: null, // aligns the ground with the startpad | |
smoothing: window.game.env.TERRAIN_CPPN_SCALE // previous smoothing | |
}; | |
} | |
// Case smoothing, water_level or creepers is changed | |
else{ | |
window.align_terrain = { | |
align: true, | |
ceiling_offset: window.align_terrain.ceiling_offset, // keeps the same | |
ground_offset: window.align_terrain.ground_offset, // keeps the same | |
smoothing: window.game.env.TERRAIN_CPPN_SCALE // previous smoothing | |
}; | |
} | |
// Updates the parameter | |
context.commit('updateParkourConfig', payload); | |
// Generates the terrain if drawing mode is active | |
if(context.state.drawingModeState.drawing){ | |
context.commit('generateTerrain', true); | |
} | |
// Resets drawing mode | |
drawing_canvas.clear(); | |
window.terrain = { | |
ground: [], | |
ceiling: [] | |
}; | |
// Resets the simulation and deselects agent | |
context.commit('resetSimulation', {keepPositions: true}); | |
context.commit('selectAgent', -1); | |
}, | |
/** | |
* Changes the value of the given switch parameter. | |
* @param context {Store} | |
* @param payload {{name: string, value: number}} - Name and value of the switch to toggle | |
*/ | |
toggleSwitch(context, payload) { | |
switch (payload.name) { | |
case 'drawJoints': | |
context.commit('drawJoints', payload.value); | |
break; | |
case 'drawLidars': | |
context.commit('drawLidars', payload.value); | |
break; | |
case 'drawNames': | |
context.commit('drawNames', payload.value); | |
break; | |
case 'drawObservation': | |
context.commit('drawObservation', payload.value); | |
break; | |
case 'drawReward': | |
context.commit('drawReward', payload.value); | |
break; | |
} | |
}, | |
/** | |
* Changes the status of the simulation. | |
* @param context {Store} | |
* @param payload {} | |
*/ | |
toggleRun(context, payload) { | |
const status = context.state.simulationState.status; | |
switch (status) { | |
case 'init': | |
context.commit('startSimulation', {}); | |
break; | |
case 'running': | |
context.commit('pauseSimulation', {}); | |
break; | |
case 'paused': | |
context.commit('startSimulation', {}); | |
break; | |
} | |
}, | |
/** | |
* Resets the simulation. | |
* @param context {Store} | |
* @param payload {} | |
*/ | |
resetSimulation(context, payload) { | |
// Updates the terrain alignment | |
window.align_terrain = { | |
align: true, // aligns the terrain with the startpad | |
ceiling_offset: window.ceiling.length > 0 ? window.game.env.ceiling_offset - window.ceiling[0].y : null, | |
ground_offset: window.ground.length > 0 ? window.ground[0].y : null, // first ground y value | |
smoothing: window.game.env.TERRAIN_CPPN_SCALE // smoothing of the current terrain | |
}; | |
context.commit('selectAgent', {index: -1}); | |
context.commit('resetSimulation', {keepPositions: false}); | |
}, | |
/** | |
* Adds the given agent to the simulation. | |
* @param context {Store} | |
* @param payload {{morphology: string, name: string, path: string, init_pos: {x: number, y: number}}} | |
*/ | |
addAgent(context, payload) { | |
// Pauses the simulation if it is running | |
if (context.state.simulationState.status == 'running') { | |
context.commit('pauseSimulation', {}); | |
} | |
context.commit('addAgent', payload); | |
}, | |
/** | |
* Deletes the agent of the given index from the simulation. | |
* @param context {Store} | |
* @param payload {{index: number}} | |
*/ | |
deleteAgent(context, payload) { | |
context.commit('deleteAgent', payload); | |
}, | |
/** | |
* Sets the initial position of the agent of the given index. | |
* @param context {Store} | |
* @param payload {{index: number, init_pos: {x: number, y: number}}} | |
*/ | |
setAgentInitPos(context, payload){ | |
context.commit('setAgentInitPos', payload); | |
}, | |
/** | |
* Selects the agent of the given index. | |
* @param context {Store} | |
* @param payload {{index: number}} | |
*/ | |
selectAgent(context, payload){ | |
context.commit('selectAgent', payload); | |
}, | |
/** | |
* Follows or not the agent of the given index according to the given boolean. | |
* @param context {Store} | |
* @param payload {{index: number, value: boolean}} | |
*/ | |
followAgent(context, payload) { | |
context.commit('followAgent', payload); | |
}, | |
/** | |
* Renames the agent of the given index with the given string value. | |
* @param context {Store} | |
* @param payload {{index: number, value: string}} | |
*/ | |
renameAgent(context, payload){ | |
context.commit('renameAgent', payload); | |
}, | |
/** | |
* Selects the seed option of the given index for the given morphology. | |
* @param context {Store} | |
* @param payload {{morphology: string, index: number}} | |
*/ | |
selectSeedIdx(context, payload) { | |
context.commit('selectSeedIdx', payload); | |
}, | |
/** | |
* Adds the given morphology with the given policy seeds to the list of morphologies. | |
* @param context {Store} | |
* @param payload {{morphology: string, seeds: []}} | |
*/ | |
addMorphology(context, payload) { | |
context.commit('addMorphology', payload); | |
// Selects the first seed option | |
context.commit('selectSeedIdx', {morphology: payload.morphology, index: 0}); | |
}, | |
/** | |
* Changes the active tab. | |
* @param context {Store} | |
* @param payload {string} - Name of the tab to activate | |
*/ | |
switchTab(context, payload) { | |
// Switch from 'Draw Yourself!' to another tab | |
if(context.state.activeTab == 'draw_yourself'){ | |
if(payload != 'draw_yourself' && context.state.drawingModeState.drawing) { | |
// Generates the terrain from the drawing | |
context.commit('generateTerrain', true); | |
} | |
} | |
// Switch to 'Draw Yourself!' from another tab | |
else if(payload == 'draw_yourself'){ | |
// Generates the drawing from the terrain | |
context.commit('generateTerrain', false); | |
} | |
context.commit('switchTab', payload); | |
}, | |
/** | |
* Activates or deactivates the ground drawing mode. | |
* @param context {Store} | |
* @param payload {boolean} | |
*/ | |
drawGround(context, payload) { | |
context.commit('drawGround', payload); | |
}, | |
/** | |
* Activates or deactivates the ceiling drawing mode. | |
* @param context {Store} | |
* @param payload {boolean} | |
*/ | |
drawCeiling(context, payload) { | |
context.commit('drawCeiling', payload); | |
}, | |
/** | |
* Activates or deactivates the erasing mode. | |
* @param context {Store} | |
* @param payload {boolean} | |
*/ | |
erase(context, payload) { | |
context.commit('erase', payload); | |
}, | |
/** | |
* Activates or deactivates the drawing mode of the given asset. | |
* @param context {Store} | |
* @param payload {{name: string, value: boolean}} | |
*/ | |
drawAsset(context, payload){ | |
// Only supports circle asset for now | |
switch (payload.name){ | |
case 'circle': | |
context.commit('drawCircle', payload.value); | |
break; | |
} | |
}, | |
/** | |
* Handles clicks outside the canvas when drawing. | |
* @param context {Store} | |
* @param payload {} | |
*/ | |
deselectDrawingButtons(context, payload){ | |
context.commit('deselectDrawingButtons', payload); | |
}, | |
/** | |
* Resets drawing mode. | |
* @param context {Store} | |
* @param payload {} | |
*/ | |
clear(context, payload) { | |
context.commit('clear', payload); | |
context.commit('generateTerrain', false); | |
}, | |
/** | |
* Generates the terrain from the drawing (true) or vice-versa (false). | |
* @param context {Store} | |
* @param payload {boolean} | |
*/ | |
generateTerrain(context, payload){ | |
context.commit('generateTerrain', payload); | |
}, | |
refreshDrawing(context, payload){ | |
context.commit('refreshDrawing', payload); | |
}, | |
/** | |
* Starts (true) or exits (false) intro tour. | |
* @param context {Store} | |
* @param payload {boolean} | |
*/ | |
setIntroTour(context, payload){ | |
context.commit('setIntroTour', payload); | |
}, | |
/** | |
* Sets the language. | |
* @param context {Store} | |
* @param payload {string} | |
*/ | |
setLanguage(context, payload){ | |
context.commit('setLanguage', payload); | |
// Resets the hints options of the intro | |
if(window.introTour != null){ | |
window.introTour.setOptions({ | |
hintButtonLabel: window.lang_dict[context.state.language]['introHints']['buttonLabel'], | |
hints: [ | |
{ | |
hint: window.lang_dict[context.state.language]['introHints']['tips'], | |
element: document.querySelector('#canvas_container'), | |
hintPosition: 'top-right', | |
} | |
] | |
}); | |
// Removes the div element of the hints | |
let introDiv = document.getElementsByClassName("introjs-hints")[0]; | |
introDiv.parentNode.removeChild(introDiv); | |
// Recreates the hints | |
window.introTour.addHints(); | |
} | |
window.game.env.render(); | |
} | |
}; |