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.

Generator.cs 2.2 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using Preparation.Utility;
  2. using System.Threading;
  3. namespace GameClass.GameObj
  4. {
  5. /// <summary>
  6. /// 发电机
  7. /// </summary>
  8. public class Generator : Immovable
  9. {
  10. public Generator(XY initPos) :
  11. base(initPos, GameData.numOfPosGridPerCell / 2, GameObjType.Generator)
  12. {
  13. }
  14. public override bool IsRigid => true;
  15. public override ShapeType Shape => ShapeType.Square;
  16. private int numOfFixing = 0;
  17. public int NumOfFixing
  18. {
  19. get => Interlocked.CompareExchange(ref numOfFixing, 0, 0);
  20. }
  21. public void AddNumOfFixing()
  22. {
  23. Interlocked.Increment(ref numOfFixing);
  24. }
  25. public void SubNumOfFixing()
  26. {
  27. Interlocked.Decrement(ref numOfFixing);
  28. }
  29. private int degreeOfRepair = 0;
  30. public int DegreeOfRepair
  31. {
  32. get
  33. {
  34. lock (gameObjLock)
  35. return degreeOfRepair;
  36. }
  37. private set
  38. {
  39. lock (gameObjLock)
  40. {
  41. if (degreeOfRepair < GameData.degreeOfFixedGenerator)//不允许正常破坏已经修好的发电机
  42. if (value < 0) degreeOfRepair = 0;
  43. else degreeOfRepair = value > GameData.degreeOfFixedGenerator ? GameData.degreeOfFixedGenerator : value;
  44. }
  45. }
  46. }
  47. public bool Repair(int addDegree, Character character)
  48. {
  49. if (DegreeOfRepair == GameData.degreeOfFixedGenerator) return false;
  50. int orgDegreeOfRepair = degreeOfRepair;
  51. DegreeOfRepair += addDegree;
  52. if (DegreeOfRepair > orgDegreeOfRepair)
  53. character.AddScore(GameData.StudentScoreFix(DegreeOfRepair) - GameData.StudentScoreFix(orgDegreeOfRepair));
  54. else character.AddScore(GameData.TrickerScoreDamageGenerator(orgDegreeOfRepair) - GameData.TrickerScoreDamageGenerator(DegreeOfRepair));
  55. if (DegreeOfRepair == GameData.degreeOfFixedGenerator)
  56. return true;
  57. else return false;
  58. }
  59. }
  60. }