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 4.1 kB

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