载入中...
搜索中...
未找到
PcgWaterPhotoMode.cpp
浏览该文件的文档.
8PcgWaterPhotoModeAuthority::~PcgWaterPhotoModeAuthority(){if(authority_)cap::removeListener<IPhotoModeFieldSink>(this);}
9void PcgWaterPhotoModeAuthority::setAuthority(bool enabled){if(enabled==authority_)return;if(enabled)cap::addListener<IPhotoModeFieldSink>(this);else cap::removeListener<IPhotoModeFieldSink>(this);authority_=enabled;}
10PhotoModeFieldAcceptance PcgWaterPhotoModeAuthority::acceptsPhotoModeField(const PhotoModeAssignment&a)const noexcept{return a.domain==PhotoModeDomain::Water?PhotoModeFieldAcceptance::Accepted:PhotoModeFieldAcceptance::Rejected;}
12 if(a.domain!=PhotoModeDomain::Water)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"assignment is not a Water field",a.field,{},"graphics.pcgWaterPhotoMode"));
13 if(a.field=="m_pcgWaterReflectionEnabled"){auto*v=std::get_if<bool>(&a.value);if(!v)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"reflection enabled requires bool",a.field,{},"graphics.pcgWaterPhotoMode"));reflectionEnabled_=*v;}
14 else if(a.field=="m_pcgWaterReflectionDistance"){auto*v=std::get_if<float>(&a.value);if(!v||!std::isfinite(*v))return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"reflection distance requires finite float",a.field,{},"graphics.pcgWaterPhotoMode"));reflectionDistance_=*v;}
15 else if(a.field=="m_pcgWaterReflectionResolution"){auto*v=std::get_if<int64_t>(&a.value);if(!v||*v<0||*v>3)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"reflection resolution requires 0..3",a.field,{},"graphics.pcgWaterPhotoMode"));reflectionResolution_=int(*v);}
16 else if(a.field=="m_pcgReflectionsLODBias"){auto*v=std::get_if<float>(&a.value);if(!v||!std::isfinite(*v)||*v<=0)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"reflection LOD bias must be positive",a.field,{},"graphics.pcgWaterPhotoMode"));reflectionLodBias_=*v;}
17 else if(a.field=="m_pcgUnderwaterFogColor"){auto*v=std::get_if<PhotoModeColor>(&a.value);if(!v||!std::isfinite(v->r)||!std::isfinite(v->g)||!std::isfinite(v->b)||!std::isfinite(v->a))return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"underwater fog color must be finite",a.field,{},"graphics.pcgWaterPhotoMode"));fogColor_=*v;}
18 else if(a.field=="m_pcgUnderwaterFogDensity"){auto*v=std::get_if<float>(&a.value);if(!v||!std::isfinite(*v)||*v<0)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"underwater fog density must be nonnegative",a.field,{},"graphics.pcgWaterPhotoMode"));fogDensity_=*v;}
19 else if(a.field=="m_pcgUnderwaterFogDistance"){auto*v=std::get_if<float>(&a.value);if(!v||!std::isfinite(*v)||*v<0)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"underwater fog distance must be nonnegative",a.field,{},"graphics.pcgWaterPhotoMode"));fogDistance_=*v;}
20 else return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"unsupported Water field",a.field,{},"graphics.pcgWaterPhotoMode"));
23Result<void> PcgWaterPhotoModeAuthority::applyToPlanarSettings(WaterPlanarReflectionSettings&s)const{
24 if(!std::isfinite(s.customRenderDistance)||s.customRenderDistance<0)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"base planar reflection distance is invalid",{},{},"graphics.pcgWaterPhotoMode"));
25 s.enabled=reflectionEnabled_;s.resolutionMultiplier=static_cast<WaterReflectionResolution>(reflectionResolution_);
29Result<void> PcgWaterPhotoModeAuthority::applyToUnderwaterSettings(WaterUnderwaterSettings&s)const{
31 s.fogDensity=fogDensity_;s.fogDistance=fogDistance_;s.hdrpFogDistance=fogDistance_;return Result<void>::success();
33void exposePcgWaterPhotoModeBindings(ssq::Table&t){auto c=t.addClass("PcgWaterPhotoModeAuthority",ssq::Class::Ctor<PcgWaterPhotoModeAuthority()>());auto vm=t.getHandle();
34 c.addFunc("setAuthority",[](PcgWaterPhotoModeAuthority*s,bool v){s->setAuthority(v);});c.addFunc("getAuthority",[](const PcgWaterPhotoModeAuthority*s){return s->getAuthority();});
35 c.addFunc("applyToPlanarSettings",[vm](const PcgWaterPhotoModeAuthority*s,WaterPlanarReflectionSettings*v){return script::projectResult(vm,v?s->applyToPlanarSettings(*v):Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"planar settings are required",{},{},"graphics.pcgWaterPhotoMode")));});
36 c.addFunc("applyToUnderwaterSettings",[vm](const PcgWaterPhotoModeAuthority*s,WaterUnderwaterSettings*v){return script::projectResult(vm,v?s->applyToUnderwaterSettings(*v):Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"underwater settings are required",{},{},"graphics.pcgWaterPhotoMode")));});
37 c.addFunc("getReflectionEnabled",[](const PcgWaterPhotoModeAuthority*s){return s->getReflectionEnabled();});c.addFunc("getReflectionDistance",[](const PcgWaterPhotoModeAuthority*s){return s->getReflectionDistance();});
38 c.addFunc("getReflectionResolution",[](const PcgWaterPhotoModeAuthority*s){return s->getReflectionResolution();});c.addFunc("getReflectionLodBias",[](const PcgWaterPhotoModeAuthority*s){return s->getReflectionLodBias();});
39 c.addFunc("getFogDensity",[](const PcgWaterPhotoModeAuthority*s){return s->getFogDensity();});c.addFunc("getFogDistance",[](const PcgWaterPhotoModeAuthority*s){return s->getFogDistance();});
40 c.addFunc("getFogRed",[](const PcgWaterPhotoModeAuthority*s){return s->getFogRed();});c.addFunc("getFogGreen",[](const PcgWaterPhotoModeAuthority*s){return s->getFogGreen();});c.addFunc("getFogBlue",[](const PcgWaterPhotoModeAuthority*s){return s->getFogBlue();});}
The single Squirrel projection for common Result, Status and Value.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Explicit, caller-owned authority for Pcg photo-mode water reflection and underwater fog values.
Definition PcgWaterPhotoMode.h:8
PhotoModeFieldAcceptance acceptsPhotoModeField(const PhotoModeAssignment &assignment) const noexcept override
Return whether this provider owns the assignment.
Definition PcgWaterPhotoMode.cpp:10
Result< void > applyToUnderwaterSettings(WaterUnderwaterSettings &settings) const
Copy fog values into the real underwater-effects settings.
Definition PcgWaterPhotoMode.cpp:29
~PcgWaterPhotoModeAuthority() override
Pcg water photo mode authority.
Definition PcgWaterPhotoMode.cpp:8
void setAuthority(bool enabled)
Register or revoke this object as the unique water-field provider.
Definition PcgWaterPhotoMode.cpp:9
Result< void > applyToPlanarSettings(WaterPlanarReflectionSettings &settings) const
Copy reflection values into the real planar-reflection planner settings.
Definition PcgWaterPhotoMode.cpp:23
Result< void > applyPhotoModeField(const PhotoModeAssignment &assignment) override
Apply one Water-domain assignment atomically.
Definition PcgWaterPhotoMode.cpp:11
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
WaterReflectionResolution
Pcg-compatible render-size multiplier for planar water reflections.
Definition WaterPlanarReflection.h:15
void exposePcgWaterPhotoModeBindings(ssq::Table &t)
Register Pcg water photo-mode authority bindings.
Definition PcgWaterPhotoMode.cpp:33
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Definition SquirrelBinding.cpp:470
@ InvalidArgument
PhotoModeFieldAcceptance
Capability implemented by the composition root that routes assignments to domain owners.
Definition PcgPhotoModeApply.h:32
@ Accepted
@ Rejected
@ Water
One reversible field assignment in a photo-mode transaction.
Definition PcgPhotoModeApply.h:15
Authored planar-reflection policy with no camera or texture ownership.
Definition WaterPlanarReflection.h:18
Authored Pcg underwater-effects policy; owns no renderer, audio source or scene object.
Definition WaterUnderwaterEffects.h:48