using Godot; /// <summary> /// 针对敌人生成位置的标记 /// </summary> [Tool] public partial class EnemyMark : ActivityMark { /// <summary> /// 武器1 id, id会自动加上武器前缀 /// </summary> [Export] public string Weapon1Id; /// <summary> /// 武器1弹药量, 如果值小于0, 则使用默认弹药量 /// </summary> [Export] public int Weapon1Ammo = -1; /// <summary> /// 武器2 id, id会自动加上武器前缀 /// </summary> [Export] public string Weapon2Id; /// <summary> /// 武器2弹药量, 如果值小于0, 则使用默认弹药量 /// </summary> [Export] public int Weapon2Ammo = -1; /// <summary> /// 武器3 id, id会自动加上武器前缀 /// </summary> [Export] public string Weapon3Id; /// <summary> /// 武器3弹药量, 如果值小于0, 则使用默认弹药量 /// </summary> [Export] public int Weapon3Ammo = -1; /// <summary> /// 武器4 id, id会自动加上武器前缀 /// </summary> [Export] public string Weapon4Id; /// <summary> /// 武器4弹药量, 如果值小于0, 则使用默认弹药量 /// </summary> [Export] public int Weapon4Ammo = -1; public override void _Ready() { Type = ActivityIdPrefix.ActivityPrefixType.Enemy; Layer = RoomLayerEnum.YSortLayer; } public override void Doing(RoomInfo roomInfo) { var pos = Position; //创建敌人 var instance = (Enemy)CreateActivityObject(); instance.PutDown(Layer); if (!string.IsNullOrWhiteSpace(Weapon1Id)) CreateWeapon(instance, pos, Weapon1Id, Weapon1Ammo); if (!string.IsNullOrWhiteSpace(Weapon2Id)) CreateWeapon(instance, pos, Weapon2Id, Weapon2Ammo); if (!string.IsNullOrWhiteSpace(Weapon3Id)) CreateWeapon(instance, pos, Weapon3Id, Weapon3Ammo); if (!string.IsNullOrWhiteSpace(Weapon4Id)) CreateWeapon(instance, pos, Weapon4Id, Weapon4Ammo); var effect1 = ResourceManager.LoadAndInstantiate<Effect1>(ResourcePath.prefab_effect_Effect1_tscn); effect1.Position = instance.Position; effect1.AddToActivityRoot(RoomLayerEnum.NormalLayer); } //生成武器 private void CreateWeapon(Enemy instance, Vector2 pos, string id, int ammon) { var weaponId = ActivityIdPrefix.GetNameByPrefixType(ActivityIdPrefix.ActivityPrefixType.Weapon) + id; var weapon = ActivityObject.Create<Weapon>(weaponId); //设置弹药量 if (ammon >= 0) { weapon.SetTotalAmmo(ammon); } //如果不能放下, 则直接扔地上 if (!instance.PickUpWeapon(weapon)) { weapon.PutDown(pos, RoomLayerEnum.NormalLayer); } } }