载入中...
搜索中...
未找到
InventoryResourceAccount.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
11#include "inventory/Bag.h"
12
13#include <cstdint>
14#include <string_view>
15#include <unordered_map>
16
17namespace eve::inventory {
18
31public:
33 explicit InventoryResourceAccount(Bag& bag);
34
40 ~InventoryResourceAccount() override = default;
41
44 [[nodiscard]] eve::Result<eve::resource::Affordability> canAfford(
45 const eve::resource::CostSpec& cost) const override;
48 [[nodiscard]] eve::Result<eve::resource::Reservation> reserve(const eve::resource::CostSpec& cost) override;
51 [[nodiscard]] eve::Result<eve::resource::Receipt> debit(const eve::resource::CostSpec& cost) override;
54 [[nodiscard]] eve::Result<eve::resource::Receipt> credit(const eve::resource::CostSpec& cost) override;
57 [[nodiscard]] eve::Result<eve::resource::Receipt> commit(const eve::resource::Reservation& reservation) override;
60 [[nodiscard]] eve::Result<void> rollback(const eve::resource::Reservation& reservation) override;
61
62private:
63 enum class ReservationState : std::uint8_t { Active, Committed, RolledBack };
64 struct ReservationRecord {
66 ReservationState state = ReservationState::Active;
67 };
68
69 [[nodiscard]] eve::Result<std::int64_t> balanceOf(const eve::resource::ResourceId& resource) const;
70 [[nodiscard]] eve::Result<std::int64_t> activeReservationsFor(const eve::resource::ResourceId& resource) const;
71 [[nodiscard]] eve::Result<void> activeReservationsAreCovered() const;
72 [[nodiscard]] eve::Result<void> applyDelta(const eve::resource::CostSpec& cost, bool debit);
73
74 Bag& bag_;
75 std::unordered_map<eve::resource::ReservationId, ReservationRecord> reservations_;
76 eve::resource::AccountNonce accountNonce_;
77 eve::resource::ReservationId nextReservation_{1};
78 eve::resource::ReceiptId nextReceipt_{1};
79};
80
89public:
96 [[nodiscard]] static eve::Result<eve::resource::CostSpec> itemCost(std::string_view itemId, std::int64_t quantity);
97
104 [[nodiscard]] static eve::Result<eve::resource::CostSpec> ammoCost(std::string_view ammoItemId,
105 std::int64_t quantity);
106};
107
108} // namespace eve::inventory
LogicalId itemId
eve::resource::CostSpec cost
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
Strongly typed, transaction-friendly resource cost protocol.
std::string resource
Move-only operation result carrying either a value or Status.
Definition Result.h:155
格子型物品容器(脚本可直接操作)。
Definition Bag.h:21
Adapts one Bag's item quantities to the common resource protocol.
~InventoryResourceAccount() override=default
Inventory resource account.
InventoryResourceAccount(const InventoryResourceAccount &)=delete
InventoryResourceAccount(InventoryResourceAccount &&)=delete
InventoryResourceAccount & operator=(const InventoryResourceAccount &)=delete
InventoryResourceAccount & operator=(InventoryResourceAccount &&)=delete
Creates canonical costs for item and ammunition quantities.
Opaque process-local identity of the account that issued a credential.
Immutable canonical multi-resource cost.
Provider-neutral resource account contract.
Strong identity of a resource kind, such as mana or gold.
运行时容器:固定格数的背包 / 箱子 / 商店栏等。 行为由 InventorySystem 提供;本类暴露便于脚本绑定的薄封装方法。
Reservation credential returned by a successful reserve operation.