reldens
Version:
Reldens - MMORPG Platform
130 lines (117 loc) • 5.27 kB
JavaScript
/**
*
* Reldens - DataLoader
*
*/
const { TypeAttack, TypeEffect, TypePhysicalAttack, TypePhysicalEffect } = require('./skills/types');
const { SkillConst} = require('@reldens/skills');
const { sc } = require('@reldens/utils');
class DataLoader
{
static async enrichConfig(configProcessor, skillsModelsManager, dataServer)
{
await this.prepareConfigProcessor(configProcessor);
await this.loadSkillsFullList(configProcessor, skillsModelsManager);
await this.loadGroupsFullList(configProcessor, dataServer);
await this.loadClassPathFullList(configProcessor, skillsModelsManager);
await this.appendSkillsAnimations(configProcessor, dataServer);
await this.appendLevelsAnimations(configProcessor, dataServer);
}
static async prepareConfigProcessor(configProcessor)
{
if(!sc.hasOwn(configProcessor, 'skills')){
configProcessor.skills = {skillsList: {}};
}
if(!sc.hasOwn(configProcessor.skills, 'defaultSkills')){
configProcessor.skills.defaultSkills = {};
}
configProcessor.skills.defaultSkills[SkillConst.SKILL.TYPE.ATTACK] = TypeAttack;
configProcessor.skills.defaultSkills[SkillConst.SKILL.TYPE.EFFECT] = TypeEffect;
configProcessor.skills.defaultSkills[SkillConst.SKILL.TYPE.PHYSICAL_ATTACK] = TypePhysicalAttack;
configProcessor.skills.defaultSkills[SkillConst.SKILL.TYPE.PHYSICAL_EFFECT] = TypePhysicalEffect;
return configProcessor;
}
static async loadSkillsFullList(configProcessor, skillsModelsManager)
{
let skillsClasses = configProcessor.getWithoutLogs('server/customClasses/skills/skillsList', {});
// defined in this same class on the reldens.serverReady listener:
Object.assign(skillsClasses, configProcessor.skills.defaultSkills);
configProcessor.skills = await skillsModelsManager.generateSkillsDataFromModels(skillsClasses);
}
static async loadGroupsFullList(configProcessor, dataServer)
{
let groupsModels = await dataServer.getEntity('skillGroups').loadAll();
if(0 < groupsModels.length){
configProcessor.skills.groups = groupsModels;
}
}
static async loadClassPathFullList(configProcessor, skillsModelsManager)
{
configProcessor.skills.classPaths = await skillsModelsManager.generateClassPathInstances(
configProcessor.getWithoutLogs('server/customClasses/skills/classPath', {})
);
}
static async appendSkillsAnimations(config, dataServer)
{
let animationsModels = await dataServer.getEntity('animations').loadAllWithRelations();
if(0 === animationsModels.length){
return config.client.skills.animations;
}
for(let skillAnim of animationsModels){
let animationData = sc.toJson(skillAnim.animationData, {});
let customDataJson = sc.toJson(skillAnim.skill.customData, {});
if(sc.hasOwn(customDataJson, 'blockMovement')){
animationData.blockMovement = customDataJson.blockMovement;
}
config.client.skills.animations[skillAnim.skill.key+'_'+skillAnim.key] = {
skillId: skillAnim.skill_id,
skillKey: skillAnim.skill.key,
key: skillAnim.key,
class: skillAnim.classKey,
animationData
}
}
return config.client.skills.animations;
}
static async appendLevelsAnimations(config, dataServer)
{
if(!sc.hasOwn(config.client, 'levels')){
config.client.levels = {};
}
if(!sc.hasOwn(config.client.levels, 'animations')){
config.client.levels.animations = {};
}
let levelsAnimationsModels = await dataServer.getEntity('levelAnimations').loadAllWithRelations();
if(0 === levelsAnimationsModels.length){
return config.client.levels.animations;
}
for(let levelAnimation of levelsAnimationsModels){
let animationData = sc.toJson(levelAnimation.animationData, {});
let animationKey = this.generateAnimationKey(levelAnimation);
config.client.levels.animations[animationKey] = {
key: animationKey,
levelId: sc.get(levelAnimation.level, 'id', null),
classKey: sc.get(levelAnimation.class_path, 'key', null),
animationData
}
}
return config.client.levels.animations;
}
static generateAnimationKey(levelAnimation)
{
let levelKey = sc.get(levelAnimation.level, 'id', '');
let classPathKey = sc.get(levelAnimation.class_path, 'key', '');
if('' === levelKey && '' === classPathKey){
return 'level_default';
}
let animationKey = 'level';
if('' !== classPathKey){
classPathKey = '_'+classPathKey;
}
if('' !== levelKey){
levelKey = '_'+levelKey;
}
return animationKey+classPathKey+levelKey;
}
}
module.exports.DataLoader = DataLoader;