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.9 kB

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