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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. public CharacterType CharacterType { protected set; get; }
  10. public IOccupation Occupation { protected set; get; }
  11. private Dictionary<ActiveSkillType, int> timeUntilActiveSkillAvailable;
  12. public Dictionary<ActiveSkillType, int> TimeUntilActiveSkillAvailable => timeUntilActiveSkillAvailable;
  13. public bool SetTimeUntilActiveSkillAvailable(ActiveSkillType activeSkillType, int timeUntilActiveSkillAvailable)
  14. {
  15. if (TimeUntilActiveSkillAvailable.ContainsKey(activeSkillType))
  16. {
  17. lock (gameObjLock)
  18. this.timeUntilActiveSkillAvailable[activeSkillType] = (timeUntilActiveSkillAvailable > 0) ? timeUntilActiveSkillAvailable : 0;
  19. return true;
  20. }
  21. return false;
  22. }
  23. public bool AddTimeUntilActiveSkillAvailable(ActiveSkillType activeSkillType, int addTimeUntilActiveSkillAvailable)
  24. {
  25. if (TimeUntilActiveSkillAvailable.ContainsKey(activeSkillType))
  26. {
  27. lock (gameObjLock)
  28. this.timeUntilActiveSkillAvailable[activeSkillType] = (timeUntilActiveSkillAvailable[activeSkillType] + addTimeUntilActiveSkillAvailable > 0) ? timeUntilActiveSkillAvailable[activeSkillType] + addTimeUntilActiveSkillAvailable : 0;
  29. return true;
  30. }
  31. return false;
  32. }
  33. public bool UseActiveSkill(ActiveSkillType activeSkillType)
  34. {
  35. if (Occupation.ListOfIActiveSkill.Contains(ActiveSkillFactory.FindIActiveSkill(activeSkillType)))
  36. return ActiveSkillFactory.FindIActiveSkill(activeSkillType).SkillEffect(this);
  37. return false;
  38. }
  39. public void UsePassiveSkill(PassiveSkillType passiveSkillType)
  40. {
  41. if (Occupation.ListOfIPassiveSkill.Contains(PassiveSkillFactory.FindIPassiveSkill(passiveSkillType)))
  42. PassiveSkillFactory.FindIPassiveSkill(passiveSkillType).SkillEffect(this);
  43. return;
  44. }
  45. public bool IsGhost()
  46. {
  47. return this.CharacterType switch
  48. {
  49. CharacterType.Assassin => true,
  50. _ => false,
  51. };
  52. }
  53. protected Character(XY initPos, int initRadius, PlaceType initPlace) :
  54. base(initPos, initRadius, initPlace, GameObjType.Character)
  55. {
  56. this.CanMove = true;
  57. this.score = 0;
  58. this.propInventory = null;
  59. this.buffManager = new BuffManager();
  60. this.MaxHp = Occupation.MaxHp;
  61. this.hp = Occupation.MaxHp;
  62. this.OrgMoveSpeed = Occupation.MoveSpeed;
  63. this.moveSpeed = Occupation.MoveSpeed;
  64. this.cd = Occupation.CD;
  65. this.maxBulletNum = Occupation.MaxBulletNum;
  66. this.bulletNum = maxBulletNum;
  67. this.bulletOfPlayer = Occupation.InitBullet;
  68. this.OriBulletOfPlayer = Occupation.InitBullet;
  69. foreach (var activeSkill in this.Occupation.ListOfIActiveSkill)
  70. {
  71. this.TimeUntilActiveSkillAvailable.Add(ActiveSkillFactory.FindActiveSkillType(activeSkill), 0);
  72. }
  73. // UsePassiveSkill(); //创建player时开始被动技能,这一过程也可以放到gamestart时进行
  74. // 这可以放在AddPlayer中做
  75. Debugger.Output(this, "constructed!");
  76. }
  77. }
  78. }