Unified Resource loading api, projectile weapon allows to configure spells.
统一资源加载的api,抛射体武器允许配置法术。
This commit is contained in:
parent
d1c0f1e265
commit
929dfb5f2f
|
@ -1,5 +1,5 @@
|
|||
#Register spells used by the projectile here.
|
||||
#在这里注册抛射体使用的法术。
|
||||
#Register items here.
|
||||
#在这里注册物品。
|
||||
#Note: The id must be the same as the item id in the scene. Otherwise, an ArgumentException will be thrown.
|
||||
#备注:id必须和场景内的物品id保持一致。否则会抛出ArgumentException。
|
||||
#After you declare the id of the item, add the corresponding localized text to the csv file in the locals' folder. For example, if the id is a corresponding name is item_a and the corresponding description is item_a_desc.
|
||||
|
|
|
@ -14,9 +14,9 @@ size = Vector2(49, 5.25)
|
|||
[node name="StaffOfTheUndead" type="RigidBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 34
|
||||
angular_damp = -1.0
|
||||
script = ExtResource("1_w8hhv")
|
||||
_numberSlots = 5
|
||||
_spellList = PackedStringArray("necromancy")
|
||||
_fireSequentially = true
|
||||
FiringIntervalAsMillisecond = 300
|
||||
_recoilStrength = 5
|
||||
|
|
|
@ -134,10 +134,8 @@ grow_vertical = 0
|
|||
|
||||
[node name="MiniMap" type="NinePatchRect" parent="Control"]
|
||||
layout_mode = 1
|
||||
offset_left = 983.0
|
||||
offset_top = 480.0
|
||||
offset_right = 1133.0
|
||||
offset_bottom = 630.0
|
||||
offset_right = 150.0
|
||||
offset_bottom = 150.0
|
||||
texture = ExtResource("1_h88bi")
|
||||
patch_margin_left = 7
|
||||
patch_margin_top = 7
|
||||
|
|
|
@ -153,10 +153,10 @@ public partial class HealthBarUi : HBoxContainer
|
|||
{
|
||||
base._Ready();
|
||||
NodeUtils.DeleteAllChild(this);
|
||||
_heartEmpty = GD.Load<Texture2D>("res://sprites/ui/HeartEmpty.png");
|
||||
_heartQuarter = GD.Load<Texture2D>("res://sprites/ui/HeartQuarter.png");
|
||||
_heartHalf = GD.Load<Texture2D>("res://sprites/ui/HeartHalf.png");
|
||||
_heartThreeFourths = GD.Load<Texture2D>("res://sprites/ui/HeartThreeFourths.png");
|
||||
_heartFull = GD.Load<Texture2D>("res://sprites/ui/HeartFull.png");
|
||||
_heartEmpty = ResourceLoader.Load<Texture2D>("res://sprites/ui/HeartEmpty.png");
|
||||
_heartQuarter = ResourceLoader.Load<Texture2D>("res://sprites/ui/HeartQuarter.png");
|
||||
_heartHalf = ResourceLoader.Load<Texture2D>("res://sprites/ui/HeartHalf.png");
|
||||
_heartThreeFourths = ResourceLoader.Load<Texture2D>("res://sprites/ui/HeartThreeFourths.png");
|
||||
_heartFull = ResourceLoader.Load<Texture2D>("res://sprites/ui/HeartFull.png");
|
||||
}
|
||||
}
|
|
@ -121,14 +121,14 @@ public sealed partial class AiCharacter : CharacterTemplate
|
|||
_bubbleMarker = GetNode<BubbleMarker>("BubbleMarker");
|
||||
if (_bubbleMarker != null)
|
||||
{
|
||||
using var plaintScene = GD.Load<PackedScene>("res://prefab/ui/plaint.tscn");
|
||||
using var plaintScene = ResourceLoader.Load<PackedScene>("res://prefab/ui/plaint.tscn");
|
||||
var plaint = NodeUtils.InstantiatePackedScene<Control>(plaintScene);
|
||||
if (plaint != null)
|
||||
{
|
||||
_bubbleMarker.AddBubble(PlaintBubbleId, plaint);
|
||||
}
|
||||
|
||||
using var queryScene = GD.Load<PackedScene>("res://prefab/ui/query.tscn");
|
||||
using var queryScene = ResourceLoader.Load<PackedScene>("res://prefab/ui/query.tscn");
|
||||
var query = NodeUtils.InstantiatePackedScene<Control>(queryScene);
|
||||
if (query != null)
|
||||
{
|
||||
|
@ -200,7 +200,7 @@ public sealed partial class AiCharacter : CharacterTemplate
|
|||
|
||||
//Set the resource path of the initial weapon and try to create the object of the initial weapon.
|
||||
//设置了初始武器的资源路径,尝试创建初始武器的对象。
|
||||
var packedScene = GD.Load<PackedScene>(initWeaponRes);
|
||||
var packedScene = ResourceLoader.Load<PackedScene>(initWeaponRes);
|
||||
var weaponTemplate = NodeUtils.InstantiatePackedScene<WeaponTemplate>(packedScene);
|
||||
if (weaponTemplate == null)
|
||||
{
|
||||
|
|
|
@ -53,7 +53,7 @@ public partial class Player : CharacterTemplate
|
|||
|
||||
//Mount the camera.
|
||||
//挂载相机。
|
||||
var mainCameraPackedScene = GD.Load<PackedScene>("res://prefab/MainCamera.tscn");
|
||||
var mainCameraPackedScene = ResourceLoader.Load<PackedScene>("res://prefab/MainCamera.tscn");
|
||||
var camera2D = NodeUtils.InstantiatePackedScene<Camera2D>(mainCameraPackedScene);
|
||||
if (camera2D != null)
|
||||
{
|
||||
|
|
|
@ -46,7 +46,7 @@ public partial class DamageNumberNodeSpawn : Marker2D
|
|||
public override void _Ready()
|
||||
{
|
||||
base._Ready();
|
||||
_damageNumberPackedScene = GD.Load("res://prefab/ui/DamageNumber.tscn") as PackedScene;
|
||||
_damageNumberPackedScene = ResourceLoader.Load("res://prefab/ui/DamageNumber.tscn") as PackedScene;
|
||||
_rootNode = GetNode<Node2D>("/root/Game/DamageNumberContainer");
|
||||
//The horizontal velocity is in the X positive direction
|
||||
//水平速度的X正方向
|
||||
|
|
|
@ -47,7 +47,7 @@ public partial class GuiFurniture : Furniture
|
|||
{
|
||||
GameSceneDepend.DynamicUiGroup?.RegisterControl(Path, () =>
|
||||
{
|
||||
var packedScene = GD.Load<PackedScene>(Path);
|
||||
var packedScene = ResourceLoader.Load<PackedScene>(Path);
|
||||
return NodeUtils.InstantiatePackedScene<SpellEditorUi>(packedScene);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ namespace ColdMint.scripts.inventory;
|
|||
|
||||
public class ItemSlotContainerDisplay(Node rootNode) : ItemContainerDisplayTemplate
|
||||
{
|
||||
private readonly PackedScene? _packedScene = GD.Load<PackedScene>("res://prefab/ui/ItemSlot.tscn");
|
||||
private readonly PackedScene? _packedScene = ResourceLoader.Load<PackedScene>("res://prefab/ui/ItemSlot.tscn");
|
||||
|
||||
protected override void AddItemDisplay()
|
||||
{
|
||||
|
|
|
@ -20,8 +20,8 @@ public partial class ItemSlotNode : MarginContainer, IItemDisplay
|
|||
|
||||
public override void _Ready()
|
||||
{
|
||||
_backgroundTexture = GD.Load<Texture2D>("res://sprites/ui/ItemBarEmpty.png");
|
||||
_backgroundTextureWhenSelect = GD.Load<Texture2D>("res://sprites/ui/ItemBarFocus.png");
|
||||
_backgroundTexture = ResourceLoader.Load<Texture2D>("res://sprites/ui/ItemBarEmpty.png");
|
||||
_backgroundTextureWhenSelect = ResourceLoader.Load<Texture2D>("res://sprites/ui/ItemBarFocus.png");
|
||||
_backgroundTextureRect =
|
||||
GetNode<TextureRect>("BackgroundTexture");
|
||||
_iconTextureRect = GetNode<TextureRect>("BackgroundTexture/IconTextureRect");
|
||||
|
|
|
@ -62,7 +62,7 @@ public partial class Packsack : PickAbleTemplate
|
|||
}
|
||||
GameSceneDepend.DynamicUiGroup?.RegisterControl(Path, () =>
|
||||
{
|
||||
var packedScene = GD.Load<PackedScene>(Path);
|
||||
var packedScene = ResourceLoader.Load<PackedScene>(Path);
|
||||
return NodeUtils.InstantiatePackedScene<PacksackUi>(packedScene);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -18,9 +18,9 @@ public partial class ContributorLoader : UiLoaderTemplate
|
|||
|
||||
public override void InitializeData()
|
||||
{
|
||||
_mainMenu = GD.Load<PackedScene>("res://scenes/mainMenu.tscn");
|
||||
_packedScene = GD.Load<PackedScene>("res://prefab/ui/contributorGroup.tscn");
|
||||
_contributorGroup = GD.Load<PackedScene>("res://prefab/ui/contributorGroup.tscn");
|
||||
_mainMenu = ResourceLoader.Load<PackedScene>("res://scenes/mainMenu.tscn");
|
||||
_packedScene = ResourceLoader.Load<PackedScene>("res://prefab/ui/contributorGroup.tscn");
|
||||
_contributorGroup = ResourceLoader.Load<PackedScene>("res://prefab/ui/contributorGroup.tscn");
|
||||
}
|
||||
|
||||
public override void InitializeUi()
|
||||
|
|
|
@ -60,8 +60,8 @@ public partial class LevelGraphEditorLoader : UiLoaderTemplate
|
|||
public override void InitializeData()
|
||||
{
|
||||
base.InitializeData();
|
||||
_mainMenu = GD.Load<PackedScene>("res://scenes/mainMenu.tscn");
|
||||
_roomNodeScene = GD.Load<PackedScene>("res://prefab/ui/RoomNode.tscn");
|
||||
_mainMenu = ResourceLoader.Load<PackedScene>("res://scenes/mainMenu.tscn");
|
||||
_roomNodeScene = ResourceLoader.Load<PackedScene>("res://prefab/ui/RoomNode.tscn");
|
||||
_defaultRoomName = TranslationServerUtils.Translate("ui_default_room_name");
|
||||
var folder = Config.GetLevelGraphExportDirectory();
|
||||
if (!Directory.Exists(folder))
|
||||
|
|
|
@ -25,9 +25,9 @@ public partial class MainMenuLoader : UiLoaderTemplate
|
|||
|
||||
public override void InitializeData()
|
||||
{
|
||||
_gameScene = GD.Load<PackedScene>("res://scenes/game.tscn");
|
||||
_contributor = GD.Load<PackedScene>("res://scenes/contributor.tscn");
|
||||
_levelGraphEditor = GD.Load<PackedScene>("res://scenes/levelGraphEditor.tscn");
|
||||
_gameScene = ResourceLoader.Load<PackedScene>("res://scenes/game.tscn");
|
||||
_contributor = ResourceLoader.Load<PackedScene>("res://scenes/contributor.tscn");
|
||||
_levelGraphEditor = ResourceLoader.Load<PackedScene>("res://scenes/levelGraphEditor.tscn");
|
||||
}
|
||||
|
||||
public override void InitializeUi()
|
||||
|
|
|
@ -69,7 +69,7 @@ public partial class PacksackUi : UiLoaderTemplate
|
|||
|
||||
public override void InitializeData()
|
||||
{
|
||||
_packedScene = GD.Load<PackedScene>("res://prefab/ui/ItemSlot.tscn");
|
||||
_packedScene = ResourceLoader.Load<PackedScene>("res://prefab/ui/ItemSlot.tscn");
|
||||
}
|
||||
|
||||
private void BindItemContainer()
|
||||
|
|
|
@ -29,7 +29,7 @@ public partial class SplashScreenLoader : UiLoaderTemplate
|
|||
|
||||
public override void InitializeData()
|
||||
{
|
||||
_mainMenuScene = GD.Load<PackedScene>("res://scenes/mainMenu.tscn");
|
||||
_mainMenuScene = ResourceLoader.Load<PackedScene>("res://scenes/mainMenu.tscn");
|
||||
}
|
||||
|
||||
public override void InitializeUi()
|
||||
|
|
|
@ -32,7 +32,7 @@ public partial class AiCharacterSpawn : Marker2D, ISpawnMarker
|
|||
{
|
||||
return null;
|
||||
}
|
||||
var packedScene = GD.Load<PackedScene>(resPath);
|
||||
var packedScene = ResourceLoader.Load<PackedScene>(resPath);
|
||||
if (packedScene == null)
|
||||
{
|
||||
return null;
|
||||
|
|
|
@ -24,7 +24,7 @@ public partial class PlayerSpawn : Marker2D, ISpawnMarker
|
|||
public override void _Ready()
|
||||
{
|
||||
base._Ready();
|
||||
_playerPackedScene = GD.Load<PackedScene>("res://prefab/entitys/Character.tscn");
|
||||
_playerPackedScene = ResourceLoader.Load<PackedScene>("res://prefab/entitys/Character.tscn");
|
||||
EventBus.MapGenerationCompleteEvent += MapGenerationCompleteEvent;
|
||||
EventBus.GameReplayEvent += GameReplayEvent;
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ public static class RoomFactory
|
|||
|
||||
var room = new Room
|
||||
{
|
||||
RoomScene = GD.Load<PackedScene>(ResUtils.GetEditorResPath(resPath)),
|
||||
RoomScene = ResourceLoader.Load<PackedScene>(ResUtils.GetEditorResPath(resPath)),
|
||||
EnterRoomEventHandlerId = enterRoomEventHandlerId,
|
||||
ExitRoomEventHandlerId = exitRoomEventHandlerId
|
||||
};
|
||||
|
|
|
@ -42,7 +42,7 @@ public class NodeSpawnOnKillCharacterDecorator : IProjectileDecorator
|
|||
return;
|
||||
}
|
||||
|
||||
var packedScene = GD.Load<PackedScene>(PackedScenePath);
|
||||
var packedScene = ResourceLoader.Load<PackedScene>(PackedScenePath);
|
||||
var node2D = NodeUtils.InstantiatePackedScene<Node2D>(packedScene);
|
||||
if (node2D == null)
|
||||
{
|
||||
|
|
|
@ -34,7 +34,7 @@ public partial class SpellPickAble : PickAbleTemplate, ISpell
|
|||
base._Ready();
|
||||
if (!string.IsNullOrEmpty(_projectilePath))
|
||||
{
|
||||
_projectileScene = GD.Load<PackedScene>(_projectilePath);
|
||||
_projectileScene = ResourceLoader.Load<PackedScene>(_projectilePath);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,17 @@ public partial class ProjectileWeapon : WeaponTemplate
|
|||
[Export]
|
||||
private int _numberSlots;
|
||||
|
||||
/// <summary>
|
||||
/// <para>SpellList</para>
|
||||
/// <para>法术列表</para>
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
///<para>To make weapons out of the box, you need to configure pre-made spells here.</para>
|
||||
///<para>为了使武器开箱即用,您需要在这里配置预制的法术。</para>
|
||||
/// </remarks>
|
||||
[Export]
|
||||
private string[]? _spellList;
|
||||
|
||||
/// <summary>
|
||||
/// <para>How many projectiles are generated per fire</para>
|
||||
/// <para>每次开火生成多少个抛射体</para>
|
||||
|
@ -119,6 +130,25 @@ public partial class ProjectileWeapon : WeaponTemplate
|
|||
{
|
||||
SelfItemContainer = new UniversalItemContainer(_numberSlots);
|
||||
SelfItemContainer.AllowAddingItemByType(Config.ItemType.Spell);
|
||||
//Reload pre-made spells.
|
||||
//装填预制的法术。
|
||||
if (_spellList is not { Length: > 0 }) return;
|
||||
foreach (var spellId in _spellList)
|
||||
{
|
||||
if (string.IsNullOrEmpty(spellId))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var item = ItemTypeManager.CreateItem(spellId, this);
|
||||
if (item == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (SelfItemContainer.CanAddItem(item))
|
||||
{
|
||||
SelfItemContainer.AddItem(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user