|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- using Preparation.Utility;
- using Preparation.Interface;
- using System;
-
- namespace GameClass.GameObj
- {
- public class Student : Character
- {
- /// <summary>
- /// 遭受攻击
- /// </summary>
- /// <param name="subHP"></param>
- /// <param name="hasSpear"></param>
- /// <param name="attacker">伤害来源</param>
- /// <returns>人物在受到攻击后死了吗</returns>
- public bool BeAttacked(Bullet bullet)
- {
- #if DEBUG
- Debugger.Output(this, "is being shot!");
- #endif
- lock (beAttackedLock)
- {
- if (hp <= 0 || NoHp())
- return false; // 原来已经死了
- if (bullet.Parent.IsGhost() != this.IsGhost())
- {
- #if DEBUG
- Debugger.Output(bullet, " 's AP is " + bullet.AP.ToString());
- #endif
- if (TryUseShield())
- {
- if (bullet.HasSpear)
- {
- int subHp = TrySubHp(bullet.AP);
- #if DEBUG
- Debugger.Output(this, "is being shot! Now his hp is" + HP.ToString());
- #endif
- bullet.Parent.AddScore(GameData.TrickerScoreAttackStudent(subHp) + GameData.ScorePropUseSpear);
- bullet.Parent.HP = (int)(bullet.Parent.HP + (bullet.Parent.Vampire * subHp));
- }
- else
- return false;
- }
- else
- {
- int subHp;
- if (bullet.HasSpear)
- {
- subHp = TrySubHp(bullet.AP + GameData.ApSpearAdd);
- #if DEBUG
- Debugger.Output(this, "is being shot with Spear! Now his hp is" + HP.ToString());
- #endif
- }
- else
- {
- subHp = TrySubHp(bullet.AP);
- #if DEBUG
- Debugger.Output(this, "is being shot! Now his hp is" + HP.ToString());
- #endif
- }
- bullet.Parent.AddScore(GameData.TrickerScoreAttackStudent(subHp));
- bullet.Parent.HP = (int)(bullet.Parent.HP + (bullet.Parent.Vampire * subHp));
- }
-
- if (hp <= 0)
- TryActivatingLIFE(); // 如果有复活甲
- }
- return hp <= 0;
- }
- }
-
- protected int fixSpeed;
- /// <summary>
- /// 修理电机速度
- /// </summary>
- public int FixSpeed
- {
- get => fixSpeed;
- set
- {
- lock (gameObjLock)
- {
- fixSpeed = value;
- }
- }
- }
- /// <summary>
- /// 原初修理电机速度
- /// </summary>
- public int OrgFixSpeed { get; protected set; }
-
- protected int treatSpeed = GameData.basicTreatSpeed;
- public int TreatSpeed
- {
- get => treatSpeed;
- set
- {
- lock (gameObjLock)
- {
- treatSpeed = value;
- }
- }
- }
- public int OrgTreatSpeed { get; protected set; }
-
- public int MaxGamingAddiction { get; protected set; }
- private int gamingAddiction;
- public int GamingAddiction
- {
- get => gamingAddiction;
- set
- {
- if (value > 0)
- lock (gameObjLock)
- gamingAddiction = value <= MaxGamingAddiction ? value : MaxGamingAddiction;
- else
- lock (gameObjLock)
- gamingAddiction = 0;
- }
- }
-
- private int selfHealingTimes = 1;//剩余的自愈次数
- public int SelfHealingTimes
- {
- get => selfHealingTimes;
- set
- {
- lock (gameObjLock)
- selfHealingTimes = (value > 0) ? value : 0;
- }
- }
-
- private int degreeOfTreatment = 0;
- public int DegreeOfTreatment
- {
- get => degreeOfTreatment;
- set
- {
- if (value > 0)
- lock (gameObjLock)
- degreeOfTreatment = (value < MaxHp - HP) ? value : MaxHp - HP;
- else
- lock (gameObjLock)
- degreeOfTreatment = 0;
- }
- }
-
- private int timeOfRescue = 0;
- public int TimeOfRescue
- {
- get => timeOfRescue;
- set
- {
- if (value > 0)
- lock (gameObjLock)
- timeOfRescue = (value < GameData.basicTimeOfRescue) ? value : GameData.basicTimeOfRescue;
- else
- lock (gameObjLock)
- timeOfRescue = 0;
- }
- }
-
- public Student(XY initPos, int initRadius, CharacterType characterType) : base(initPos, initRadius, characterType)
- {
- this.OrgFixSpeed = this.fixSpeed = ((IStudent)Occupation).FixSpeed;
- this.TreatSpeed = this.OrgTreatSpeed = ((IStudent)Occupation).TreatSpeed;
- this.MaxGamingAddiction = ((IStudent)Occupation).MaxGamingAddiction;
- }
- }
- }
|