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.Skill.cs 3.8 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using Preparation.Utility;
  2. using Preparation.Interface;
  3. using System.Collections.Generic;
  4. namespace GameClass.GameObj
  5. {
  6. public partial class Character
  7. {
  8. private readonly CharacterType characterType;
  9. public CharacterType CharacterType => characterType;
  10. private readonly IOccupation occupation;
  11. public IOccupation Occupation => occupation;
  12. private Dictionary<ActiveSkillType, int> timeUntilActiveSkillAvailable = new();
  13. public Dictionary<ActiveSkillType, int> TimeUntilActiveSkillAvailable => timeUntilActiveSkillAvailable;
  14. private Dictionary<ActiveSkillType, IActiveSkill> iActiveSkillDictionary = new();
  15. public Dictionary<ActiveSkillType, IActiveSkill> IActiveSkillDictionary => iActiveSkillDictionary;
  16. public IActiveSkill FindIActiveSkill(ActiveSkillType activeSkillType)
  17. {
  18. if (Occupation.ListOfIActiveSkill.Contains(activeSkillType))
  19. {
  20. return IActiveSkillDictionary[activeSkillType];
  21. }
  22. return new NullSkill();
  23. }
  24. public bool SetTimeUntilActiveSkillAvailable(ActiveSkillType activeSkillType, int timeUntilActiveSkillAvailable)
  25. {
  26. if (TimeUntilActiveSkillAvailable.ContainsKey(activeSkillType))
  27. {
  28. lock (gameObjLock)
  29. this.timeUntilActiveSkillAvailable[activeSkillType] = (timeUntilActiveSkillAvailable > 0) ? timeUntilActiveSkillAvailable : 0;
  30. return true;
  31. }
  32. return false;
  33. }
  34. public bool AddTimeUntilActiveSkillAvailable(ActiveSkillType activeSkillType, int addTimeUntilActiveSkillAvailable)
  35. {
  36. if (TimeUntilActiveSkillAvailable.ContainsKey(activeSkillType))
  37. {
  38. lock (gameObjLock)
  39. this.timeUntilActiveSkillAvailable[activeSkillType] = (timeUntilActiveSkillAvailable[activeSkillType] + addTimeUntilActiveSkillAvailable > 0) ? timeUntilActiveSkillAvailable[activeSkillType] + addTimeUntilActiveSkillAvailable : 0;
  40. return true;
  41. }
  42. return false;
  43. }
  44. public bool IsGhost()
  45. {
  46. return GameData.IsGhost(CharacterType);
  47. }
  48. protected Character(XY initPos, int initRadius, CharacterType characterType) :
  49. base(initPos, initRadius, GameObjType.Character)
  50. {
  51. this.canMove = true;
  52. this.score = 0;
  53. this.buffManager = new BuffManager();
  54. this.occupation = OccupationFactory.FindIOccupation(characterType);
  55. this.MaxHp = this.hp = Occupation.MaxHp;
  56. this.OrgMoveSpeed = this.moveSpeed = Occupation.MoveSpeed;
  57. this.BulletOfPlayer = this.OriBulletOfPlayer = Occupation.InitBullet;
  58. this.concealment = Occupation.Concealment;
  59. this.alertnessRadius = Occupation.AlertnessRadius;
  60. this.ViewRange = Occupation.ViewRange;
  61. this.characterType = characterType;
  62. this.SpeedOfOpeningOrLocking = Occupation.SpeedOfOpeningOrLocking;
  63. this.SpeedOfClimbingThroughWindows = Occupation.SpeedOfClimbingThroughWindows;
  64. this.SpeedOfOpenChest = Occupation.SpeedOfOpenChest;
  65. foreach (var activeSkill in this.Occupation.ListOfIActiveSkill)
  66. {
  67. this.IActiveSkillDictionary.Add(activeSkill, SkillFactory.FindIActiveSkill(activeSkill));
  68. this.TimeUntilActiveSkillAvailable.Add(activeSkill, 0);
  69. }
  70. // UsePassiveSkill(); //创建player时开始被动技能,这一过程也可以放到gamestart时进行
  71. // 这可以放在AddPlayer中做
  72. Debugger.Output(this, "constructed!");
  73. }
  74. }
  75. }