You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

Character.SkillManager.cs 4.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using GameClass.Skill;
  2. using Preparation.Utility;
  3. using System.Collections.Generic;
  4. using System;
  5. namespace GameClass.GameObj
  6. {
  7. public partial class Character
  8. {
  9. private readonly CharacterType characterType;
  10. public CharacterType CharacterType => characterType;
  11. private readonly IOccupation occupation;
  12. public IOccupation Occupation => occupation;
  13. private Dictionary<ActiveSkillType, int> timeUntilActiveSkillAvailable = new();
  14. public Dictionary<ActiveSkillType, int> TimeUntilActiveSkillAvailable => timeUntilActiveSkillAvailable;
  15. public bool SetTimeUntilActiveSkillAvailable(ActiveSkillType activeSkillType, int timeUntilActiveSkillAvailable)
  16. {
  17. if (TimeUntilActiveSkillAvailable.ContainsKey(activeSkillType))
  18. {
  19. lock (gameObjLock)
  20. this.timeUntilActiveSkillAvailable[activeSkillType] = (timeUntilActiveSkillAvailable > 0) ? timeUntilActiveSkillAvailable : 0;
  21. return true;
  22. }
  23. return false;
  24. }
  25. public bool AddTimeUntilActiveSkillAvailable(ActiveSkillType activeSkillType, int addTimeUntilActiveSkillAvailable)
  26. {
  27. if (TimeUntilActiveSkillAvailable.ContainsKey(activeSkillType))
  28. {
  29. lock (gameObjLock)
  30. this.timeUntilActiveSkillAvailable[activeSkillType] = (timeUntilActiveSkillAvailable[activeSkillType] + addTimeUntilActiveSkillAvailable > 0) ? timeUntilActiveSkillAvailable[activeSkillType] + addTimeUntilActiveSkillAvailable : 0;
  31. return true;
  32. }
  33. return false;
  34. }
  35. public bool UseActiveSkill(ActiveSkillType activeSkillType)
  36. {
  37. if (Occupation.ListOfIActiveSkill.Contains(ActiveSkillFactory.FindIActiveSkill(activeSkillType)))
  38. return ActiveSkillFactory.FindIActiveSkill(activeSkillType).SkillEffect(this);
  39. return false;
  40. }
  41. public void UsePassiveSkill(PassiveSkillType passiveSkillType)
  42. {
  43. if (Occupation.ListOfIPassiveSkill.Contains(PassiveSkillFactory.FindIPassiveSkill(passiveSkillType)))
  44. PassiveSkillFactory.FindIPassiveSkill(passiveSkillType).SkillEffect(this);
  45. return;
  46. }
  47. public bool IsGhost()
  48. {
  49. return this.CharacterType switch
  50. {
  51. CharacterType.Assassin => true,
  52. _ => false,
  53. };
  54. }
  55. protected Character(XY initPos, int initRadius, PlaceType initPlace, CharacterType characterType) :
  56. base(initPos, initRadius, initPlace, GameObjType.Character)
  57. {
  58. this.CanMove = true;
  59. this.score = 0;
  60. this.propInventory = null;
  61. this.buffManager = new BuffManager();
  62. switch (characterType)
  63. {
  64. case CharacterType.Assassin:
  65. this.occupation = new Assassin();
  66. break;
  67. case CharacterType.Athlete:
  68. this.occupation = new Athlete();
  69. break;
  70. default:
  71. this.occupation = null;
  72. break;
  73. }
  74. this.MaxHp = Occupation.MaxHp;
  75. this.hp = Occupation.MaxHp;
  76. this.OrgMoveSpeed = Occupation.MoveSpeed;
  77. this.moveSpeed = Occupation.MoveSpeed;
  78. this.cd = Occupation.CD;
  79. this.maxBulletNum = Occupation.MaxBulletNum;
  80. this.bulletNum = maxBulletNum;
  81. this.bulletOfPlayer = Occupation.InitBullet;
  82. this.OriBulletOfPlayer = Occupation.InitBullet;
  83. this.characterType = characterType;
  84. foreach (var activeSkill in this.Occupation.ListOfIActiveSkill)
  85. {
  86. this.TimeUntilActiveSkillAvailable.Add(ActiveSkillFactory.FindActiveSkillType(activeSkill), 0);
  87. }
  88. // UsePassiveSkill(); //创建player时开始被动技能,这一过程也可以放到gamestart时进行
  89. // 这可以放在AddPlayer中做
  90. Debugger.Output(this, "constructed!");
  91. }
  92. }
  93. }