Browse Source

Merge branch '1831-clientcomponents' into 'master'

Send paths of client components and wait for them to load

Closes #1831

See merge request Isleward/isleward!563
tags/v0.10.4^2
Big Bad Waffle 2 years ago
parent
commit
4912e36be8
42 changed files with 82 additions and 68 deletions
  1. +1
    -1
      .gitlab-ci.yml
  2. +50
    -61
      src/client/js/components/components.js
  3. +5
    -1
      src/client/js/main.js
  4. +3
    -0
      src/server/clientComponents/.eslintrc
  5. +0
    -0
      src/server/clientComponents/animation.js
  6. +0
    -0
      src/server/clientComponents/attackAnimation.js
  7. +0
    -0
      src/server/clientComponents/bumpAnimation.js
  8. +0
    -0
      src/server/clientComponents/chatter.js
  9. +0
    -0
      src/server/clientComponents/chest.js
  10. +0
    -0
      src/server/clientComponents/dialogue.js
  11. +0
    -0
      src/server/clientComponents/effects.js
  12. +0
    -0
      src/server/clientComponents/events.js
  13. +0
    -0
      src/server/clientComponents/explosion.js
  14. +0
    -0
      src/server/clientComponents/fadeInOut.js
  15. +0
    -0
      src/server/clientComponents/flash.js
  16. +0
    -0
      src/server/clientComponents/gatherer.js
  17. +0
    -0
      src/server/clientComponents/inventory.js
  18. +0
    -0
      src/server/clientComponents/keyboardMover.js
  19. +0
    -0
      src/server/clientComponents/light.js
  20. +0
    -0
      src/server/clientComponents/lightPatch.js
  21. +0
    -0
      src/server/clientComponents/lightningEffect.js
  22. +0
    -0
      src/server/clientComponents/mouseMover.js
  23. +0
    -0
      src/server/clientComponents/moveAnimation.js
  24. +0
    -0
      src/server/clientComponents/particles.js
  25. +0
    -0
      src/server/clientComponents/passives.js
  26. +0
    -0
      src/server/clientComponents/pather.js
  27. +0
    -0
      src/server/clientComponents/player.js
  28. +0
    -0
      src/server/clientComponents/projectile.js
  29. +0
    -0
      src/server/clientComponents/quests.js
  30. +0
    -0
      src/server/clientComponents/reputation.js
  31. +0
    -0
      src/server/clientComponents/resourceNode.js
  32. +0
    -0
      src/server/clientComponents/serverActions.js
  33. +0
    -0
      src/server/clientComponents/social.js
  34. +0
    -0
      src/server/clientComponents/sound.js
  35. +0
    -0
      src/server/clientComponents/spellbook.js
  36. +0
    -0
      src/server/clientComponents/stash.js
  37. +0
    -0
      src/server/clientComponents/stats.js
  38. +0
    -0
      src/server/clientComponents/touchMover.js
  39. +0
    -0
      src/server/clientComponents/trade.js
  40. +0
    -0
      src/server/clientComponents/whirlwind.js
  41. +14
    -0
      src/server/config/clientConfig.js
  42. +9
    -5
      src/server/server/requestHandlers.js

+ 1
- 1
.gitlab-ci.yml View File

@@ -16,7 +16,7 @@ audit:
lint-server:
stage: test
script:
- npm install eslint eslint-plugin-prettier prettier babel-eslint
- npm install eslint eslint-plugin-prettier prettier babel-eslint eslint-plugin-requirejs
- cd src/server
- ../../node_modules/.bin/eslint .
only:


+ 50
- 61
src/client/js/components/components.js View File

@@ -1,50 +1,15 @@
let components = [
'keyboardMover',
'mouseMover',
'touchMover',
'player',
'pather',
'attackAnimation',
'lightningEffect',
'moveAnimation',
'bumpAnimation',
'animation',
'light',
'lightPatch',
'projectile',
'particles',
'explosion',
'spellbook',
'inventory',
'stats',
'chest',
'effects',
'quests',
'events',
'resourceNode',
'gatherer',
'stash',
'flash',
'chatter',
'dialogue',
'trade',
'reputation',
'serverActions',
'social',
'passives',
'sound',
'whirlwind',
'fadeInOut'
].map(function (c) {
return 'js/components/' + c;
});

define([
...components,
'../system/events'
], function () {
const events = arguments[arguments.length - 1];
'js/system/events',
'js/system/globals'
], function (
events,
globals
) {
//Store templates here after loading them
const templates = [];
const extenders = [];

//Bound Methods
const hookEvent = function (e, cb) {
if (!this.eventList[e])
this.eventList[e] = [];
@@ -59,30 +24,54 @@ define([
});
};

let templates = {};
//Helpers
const loadComponent = cpn => {
return new Promise(res => {
require([cpn.path], tpl => {
if (cpn.type)
templates.push(tpl);
if (cpn.extends)
extenders.push(tpl);
res();
});
});
};

[].forEach.call(arguments, function (t, i) {
//Don't do this for the events module
if (i === arguments[2].length - 1)
return;
//Init Methods
const loadComponents = paths => {
return Promise.all(
paths.map(p => loadComponent(p))
);
};
const buildComponents = () => {
templates.forEach(t => {
const extensions = extenders.filter(e => e.extends === t.type);

t.eventList = {};
t.hookEvent = hookEvent;
t.unhookEvents = unhookEvents;
extensions.forEach(e => $.extend(true, t, e));

templates[t.type] = t;
});
t.eventList = {};
t.hookEvent = hookEvent;
t.unhookEvents = unhookEvents;
});
};

//Export
return {
init: async function () {
const paths = globals.clientConfig.clientComponents;

await loadComponents(paths);

buildComponents();
},

getTemplate: function (type) {
if (type === 'lightpatch')
type = 'lightPatch';

let template = templates[type] || {
type: type
};

return template;
return templates.find(t => t.type === type) || { type: type };
}
};
});

+ 5
- 1
src/client/js/main.js View File

@@ -10,6 +10,7 @@ define([
'js/resources',
'js/sound/sound',
'js/system/globals',
'js/components/components',
'ui/templates/online/online',
'ui/templates/tooltips/tooltips'
], function (
@@ -23,7 +24,8 @@ define([
events,
resources,
sound,
globals
globals,
components
) {
let fnQueueTick = null;
const getQueueTick = updateMethod => {
@@ -69,6 +71,8 @@ define([
globals.clientConfig = config;

await resources.init();
await components.init();
events.emit('onResourcesLoaded');

this.start();


+ 3
- 0
src/server/clientComponents/.eslintrc View File

@@ -0,0 +1,3 @@
{
"extends": "../../client/.eslintrc"
}

src/client/js/components/animation.js → src/server/clientComponents/animation.js View File


src/client/js/components/attackAnimation.js → src/server/clientComponents/attackAnimation.js View File


src/client/js/components/bumpAnimation.js → src/server/clientComponents/bumpAnimation.js View File


src/client/js/components/chatter.js → src/server/clientComponents/chatter.js View File


src/client/js/components/chest.js → src/server/clientComponents/chest.js View File


src/client/js/components/dialogue.js → src/server/clientComponents/dialogue.js View File


src/client/js/components/effects.js → src/server/clientComponents/effects.js View File


src/client/js/components/events.js → src/server/clientComponents/events.js View File


src/client/js/components/explosion.js → src/server/clientComponents/explosion.js View File


src/client/js/components/fadeInOut.js → src/server/clientComponents/fadeInOut.js View File


src/client/js/components/flash.js → src/server/clientComponents/flash.js View File


src/client/js/components/gatherer.js → src/server/clientComponents/gatherer.js View File


src/client/js/components/inventory.js → src/server/clientComponents/inventory.js View File


src/client/js/components/keyboardMover.js → src/server/clientComponents/keyboardMover.js View File


src/client/js/components/light.js → src/server/clientComponents/light.js View File


src/client/js/components/lightPatch.js → src/server/clientComponents/lightPatch.js View File


src/client/js/components/lightningEffect.js → src/server/clientComponents/lightningEffect.js View File


src/client/js/components/mouseMover.js → src/server/clientComponents/mouseMover.js View File


src/client/js/components/moveAnimation.js → src/server/clientComponents/moveAnimation.js View File


src/client/js/components/particles.js → src/server/clientComponents/particles.js View File


src/client/js/components/passives.js → src/server/clientComponents/passives.js View File


src/client/js/components/pather.js → src/server/clientComponents/pather.js View File


src/client/js/components/player.js → src/server/clientComponents/player.js View File


src/client/js/components/projectile.js → src/server/clientComponents/projectile.js View File


src/client/js/components/quests.js → src/server/clientComponents/quests.js View File


src/client/js/components/reputation.js → src/server/clientComponents/reputation.js View File


src/client/js/components/resourceNode.js → src/server/clientComponents/resourceNode.js View File


src/client/js/components/serverActions.js → src/server/clientComponents/serverActions.js View File


src/client/js/components/social.js → src/server/clientComponents/social.js View File


src/client/js/components/sound.js → src/server/clientComponents/sound.js View File


src/client/js/components/spellbook.js → src/server/clientComponents/spellbook.js View File


src/client/js/components/stash.js → src/server/clientComponents/stash.js View File


src/client/js/components/stats.js → src/server/clientComponents/stats.js View File


src/client/js/components/touchMover.js → src/server/clientComponents/touchMover.js View File


src/client/js/components/trade.js → src/server/clientComponents/trade.js View File


src/client/js/components/whirlwind.js → src/server/clientComponents/whirlwind.js View File


+ 14
- 0
src/server/config/clientConfig.js View File

@@ -1,6 +1,7 @@
const imageSize = require('image-size');

const events = require('../misc/events');
const fileLister = require('../misc/fileLister');
const tos = require('./tos');

const config = {
@@ -197,6 +198,7 @@ const config = {
player: [],
npc: []
},
clientComponents: [],
sounds: {
ui: []
},
@@ -207,6 +209,18 @@ module.exports = {
config,

init: async function () {
fileLister.getFolder('./clientComponents').forEach(f => {
if (!f.endsWith('.js')) return;

const type = f.split('.')[0];
const path = 'server/clientComponents/' + f;

config.clientComponents.push({
type,
path
});
});

events.emit('onBeforeGetClientConfig', config);

//Deprecated


+ 9
- 5
src/server/server/requestHandlers.js View File

@@ -11,13 +11,17 @@ const appFile = (req, res) => {
let file = req.params[0];
file = file.replace('/' + root + '/', '');
const validRequest = (
root !== 'server' ||
(
file.includes('mods/') &&
validModPatterns.some(v => file.includes(v))
)
(
root === 'server' &&
file.startsWith('clientComponents/')
) ||
(
file.includes('mods/') &&
validModPatterns.some(v => file.includes(v))
)
);
if (!validRequest)


Loading…
Cancel
Save