moodlet.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /// <reference path="../../../_shared/Initializing.ts"/>
  2. const enum moodletTimeMode{
  3. Continuous,
  4. Resetting,
  5. Lasting
  6. }
  7. const enum moodletAccumulationMode{
  8. ADD,
  9. HIGHEST,
  10. LOWEST,
  11. DIMINISHING,
  12. DIMINISHING_REVERSE
  13. }
  14. class Moodlet extends Initializing{
  15. id:string;
  16. title:string='Title Missing';
  17. groupId:string= 'none';
  18. description:string= 'Description Missing';
  19. effect:number=0;
  20. timeConversion:number=0;
  21. timeMode:moodletTimeMode= moodletTimeMode.Resetting;
  22. duration:number=60;
  23. maxDuration:number=0;
  24. includes:Array<string>=[];
  25. static get(moodletId:string):Moodlet{
  26. let result = setup.moodlets[moodletId] ?? new NullMoodlet();
  27. result.id = moodletId;
  28. return result;
  29. }
  30. constructor(initialData:object={}){
  31. super(initialData);
  32. }
  33. }
  34. class ActiveMoodlet extends Moodlet{
  35. //expiration:Date;
  36. private dynamicDataReferecne;
  37. static create(moodletId:string,dynamicData:object):ActiveMoodlet{
  38. let staticMoodlet = Moodlet.get(moodletId) as ActiveMoodlet;
  39. let dynamicMoodlet = new ActiveMoodlet(staticMoodlet);
  40. dynamicMoodlet.dynamicDataReferecne = dynamicData;
  41. return dynamicMoodlet;
  42. }
  43. get expiration():Date{
  44. return this.dynamicDataReferecne.expiration ?? State.variables.time.endTime;
  45. }
  46. get isActive(){
  47. const time = State.variables.time;
  48. return time.isFuture(this.expiration);
  49. }
  50. }
  51. class PainMoodlet extends ActiveMoodlet{
  52. static createPainMoodlet(pain:number):ActiveMoodlet{
  53. if(pain <= 0)
  54. return new NullMoodlet();
  55. let result = new PainMoodlet(Moodlet.get('pain'));
  56. result.effect = Math.round(pain * -1);
  57. return result;
  58. }
  59. }
  60. class NullMoodlet extends ActiveMoodlet{
  61. }
  62. class MoodletGroup extends Initializing{
  63. id:string;
  64. accumulationMode: moodletAccumulationMode;
  65. diminishFactor:0;
  66. static get(moodletGroupId:string):MoodletGroup{
  67. let result = setup.moodletGroups[moodletGroupId] ?? new NullMoodletGroup();
  68. result.id = moodletGroupId;
  69. return result;
  70. }
  71. constructor(initialData:object={}){
  72. super(initialData);
  73. }
  74. }
  75. class NullMoodletGroup extends MoodletGroup{
  76. }
  77. setup.moodlets ??= {};
  78. setup.moodletGroups ??= {};
  79. setup.moodletGroups.none = new MoodletGroup({
  80. accumulationMode: moodletAccumulationMode.ADD
  81. });
  82. setup.moodletGroups.pain = new MoodletGroup({
  83. accumulationMode: moodletAccumulationMode.LOWEST
  84. });