载入中...
搜索中...
未找到
CardControl.h
浏览该文件的文档.
1#pragma once
2
6
7#include <cstdint>
8#include <string>
9#include <string_view>
10#include <vector>
11
12namespace eve::card {
13
14class Card;
15class Hand;
16
45public:
50 explicit CardControl(Card& module);
52 ~CardControl() override;
53
54 CardControl(const CardControl&) = delete;
56
65 [[nodiscard]] Result<void> publish(SubjectRef instance, SubjectRef owner, Hand& hand,
68 [[nodiscard]] Result<void> unpublish(SubjectRef instance);
70 void clear();
72 [[nodiscard]] int count() const;
74 [[nodiscard]] std::vector<SubjectRef> instances() const;
75
78 [[nodiscard]] std::string_view gameplayDomain() const noexcept override;
81 [[nodiscard]] std::vector<SubjectRef> gameplayInstances() const override;
85 SubjectRef instance) const override;
89 const GameplaySession& session, SubjectRef instance, SubjectRef subject) const override;
93 const GameplayCommand& command) override;
97 const SimulationStep& step) override;
100 [[nodiscard]] Result<std::vector<GameplayEvent>> gameplayEvents(const GameplaySession& session, SubjectRef instance,
101 std::uint64_t afterSequence) const override;
102
103private:
105 struct Entry {
106 SubjectRef instance;
107 SubjectRef owner;
108 Hand* hand = nullptr;
111 std::uint64_t revision = 0;
112 std::uint64_t nextEventSequence = 1;
113 std::vector<GameplayEvent> events;
114 };
115
123 [[nodiscard]] Entry* find(SubjectRef instance);
125 [[nodiscard]] const Entry* find(SubjectRef instance) const;
127 [[nodiscard]] bool controls(const GameplaySession& session, const Entry& entry) const;
129 [[nodiscard]] Value handState(const Entry& entry) const;
130
131 Card* module_ = nullptr;
132 std::vector<Entry> entries_;
133};
134
135} // namespace eve::card
int subject
Definition AnimSmr.cpp:163
eve::resource::IResourceAccount * account
Host-neutral player-equivalent command and observation protocol.
Optional companion surface for gameplay providers that can enumerate instances.
std::uint64_t revision
Strongly typed, transaction-friendly resource cost protocol.
Battle::Events events
SimulationTick tick
std::optional< InteractionSession > session
Definition Tactics.cpp:39
float step
Definition TreeMesh.cpp:314
Multi-provider gameplay boundary consumed by input, scripts and automation.
Optional read-only discovery surface implemented beside a gameplay provider.
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Strong, domain-neutral reference to a runtime subject.
Definition SubjectRef.h:26
The canonical owning dynamic value used by data-facing protocols.
Definition Value.h:31
Exposes published card hands through the shared gameplay protocol.
Definition CardControl.h:44
Result< void > publish(SubjectRef instance, SubjectRef owner, Hand &hand, eve::resource::IResourceAccount *account)
Publish one borrowed hand under a stable instance identity.
void clear()
Drop every publication.
Result< std::vector< GameplayActionDescriptor > > availableGameplayActions(const GameplaySession &session, SubjectRef instance, SubjectRef subject) const override
Discover currently legal player-semantic actions for one subject.
CardControl(const CardControl &)=delete
int count() const
Number of published instances.
Result< GameplayObservation > advanceGameplay(const GameplaySession &session, SubjectRef instance, const SimulationStep &step) override
Advance one provider-owned instance using injected deterministic time.
~CardControl() override
Unpublish every hand without touching the borrowed authorities.
Result< GameplayObservation > observeGameplay(const GameplaySession &session, SubjectRef instance) const override
Observe one provider-owned gameplay instance without mutation.
Result< std::vector< GameplayEvent > > gameplayEvents(const GameplaySession &session, SubjectRef instance, std::uint64_t afterSequence) const override
Return events strictly newer than an instance-local sequence cursor.
std::vector< SubjectRef > gameplayInstances() const override
Instances currently served, in publication order.
std::vector< SubjectRef > instances() const
Published instance identities, in publication order.
Result< void > unpublish(SubjectRef instance)
Drop one publication; NotFound when that instance is not published.
std::string_view gameplayDomain() const noexcept override
Stable provider domain used for discovery and routing.
CardControl & operator=(const CardControl &)=delete
Result< GameplayCommandReceipt > submitGameplay(const GameplaySession &session, SubjectRef instance, const GameplayCommand &command) override
Validate authority and atomically submit one domain command.
卡牌模块入口(eve.Card):定义注册、对象工厂与每帧 update/render。
Definition Card.h:91
手牌:扇形布局 + 悬浮 + 拖拽 + 落区判定 + 渲染。
Definition CardTypes.h:273
static constexpr StrongUint64 zero() noexcept
Returns the zero value for this strong type.
Provider-neutral resource account contract.
One discoverable domain action and its owning schema projection.
Owning evidence that a gameplay authority accepted one command.
One player-semantic command submitted to a domain authority.
Owning event projection safe across frames and process boundaries.
Immutable owning observation of one authoritative gameplay instance.
Owning authorization context shared by player, script and automation adapters.
One deterministic fixed-step emitted by SimulationClock.
Definition Time.h:158