public bool TakeCure(float damage, IAlignmentProvider damageAlignment, out HealthChangeInfo output) { output = new HealthChangeInfo { damageAlignment = damageAlignment, damageable = this, newHealth = currentHealth, oldHealth = currentHealth }; bool isFriend = damageAlignment == null || alignmentProvider == null || damageAlignment.IsFriend(alignmentProvider); if (isDead || !isFriend) { return(false); } ChangeHealth(damage, output); SafelyDoAction(damaged, output); if (isDead) { SafelyDoAction(died, output); } return(true); }
protected virtual bool IsLegalTarget(Transform targetable, SearchType searchType) { if (targetable == null) { return(false); } if (targetable.GetComponent <Targetable>() == null) { return(false); } bool isLegalTarget = true; IAlignmentProvider targetAlignment = targetable.GetComponent <Targetable>().configuration.alignmentProvider; IAlignmentProvider selfAlignment = alignment.GetInterface(); if (searchType == SearchType.All) { isLegalTarget = true; } else if (searchType == SearchType.Enemy) { isLegalTarget = selfAlignment == null || targetAlignment == null || selfAlignment.CanHarm(targetAlignment); } else if (searchType == SearchType.Friend) { isLegalTarget = selfAlignment == null || targetAlignment == null || selfAlignment.IsFriend(targetAlignment); } return(isLegalTarget); }
/// <summary> /// 治疗 /// </summary> public void Cure(float addCureValue, Vector3 damagePoint, IAlignmentProvider alignment) { if (alignment.IsFriend(this.configuration.alignmentProvider)) { this.TakeCure(addCureValue, damagePoint, alignment); } else { Debug.Log("不可治疗,因为是敌方单位"); } }