using Base; using Data; using Item; using Managers; using UnityEngine; namespace Entity { public class Monster : LivingEntity { private WeaponResource weapon; private void OnCollisionStay2D(Collision2D other) { if (!other.gameObject.CompareTag("Player")) return; var playerEntity = other.gameObject.GetComponent(); playerEntity?.OnHit(10); } public override void Init(EntityDef entityDefine) { base.Init(entityDefine); var monsterDef = entityDefine as MonsterDef; if (monsterDef != null) { weapon = ItemResourceManager.Instance.GetItem(monsterDef.weapon?.defName) as WeaponResource; if (monsterDef.defaultHediff != null) { foreach (var hediffDef in monsterDef.defaultHediff) { AddHediff(new Hediff(hediffDef)); } } } } protected override void ExecuteMeleeAttack(WeaponResource weapon) { var attackRange = AttributesNow.attackRange; var attackTargetCount = AttributesNow.attackTargetCount; var hits = EntityManager.FindEntity(Position, attackRange); foreach (var hit in hits) { if (attackTargetCount <= 0) break; // 已达到最大攻击目标数 if (hit.gameObject == gameObject) continue; // 不攻击自己 var relation = AffiliationManager.Instance.GetRelation(affiliation, hit.affiliation); if (!Setting.Instance.CurrentSettings.friendlyFire && relation != Relation.Hostile) continue; hit.OnHit(this); attackTargetCount--; } } public override WeaponResource GetCurrentWeapon() { return weapon; } } }