载入中...
搜索中...
未找到
WaterReflectionMasker.cpp
浏览该文件的文档.
13 return std::isfinite(a)&&std::isfinite(b)&&std::isfinite(c)&&std::isfinite(d)&&std::isfinite(e)&&std::isfinite(f);
17Result<void> WaterReflectionMasker::configure(WaterReflectionMaskChannel channel, float minimum, float maximum,
21 return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "valid channel and finite ordered thresholds are required", {}, {},
29 if(width<=0||height<=0)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "mask dimensions must be positive", {}, {},
32 for(int y=0;y<height;++y)for(int x=0;x<width;++x){const auto c=mask.getPixel(x,y);next.push_back({c.r,c.g,c.b,c.a});}
33 width_=width;height_=height;pixels_=std::move(next);sampleX_=sampleY_=-1;return Result<void>::success();
36void WaterReflectionMasker::clearMask() noexcept { width_=height_=0;pixels_.clear();sampleX_=sampleY_=-1; }
38Result<WaterReflectionMaskTransition> WaterReflectionMasker::evaluate(float playerX,float playerZ,
39 float terrainX,float terrainZ,float terrainWidth,float terrainDepth,WaterPlanarReflectionSettings& settings) {
40 if(!finite6(playerX,playerZ,terrainX,terrainZ,terrainWidth,terrainDepth)||terrainWidth<=0.f||terrainDepth<=0.f)
41 return Result<WaterReflectionMaskTransition>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "finite player, terrain origin and positive terrain size are required", {}, {},
52 switch(channel_){case WaterReflectionMaskChannel::R:next=hit(p.r);break;case WaterReflectionMaskChannel::G:next=hit(p.g);break;case WaterReflectionMaskChannel::B:next=hit(p.b);break;case WaterReflectionMaskChannel::A:next=hit(p.a);break;case WaterReflectionMaskChannel::RGBA:next=hit(p.r)||hit(p.g)||hit(p.b)||hit(p.a);break;}
55 if(next==enabled_)return Result<WaterReflectionMaskTransition>::success(WaterReflectionMaskTransition::Unchanged);
60void exposeWaterReflectionMaskerBindings(ssq::Table& table){auto c=table.addClass("WaterReflectionMasker",ssq::Class::Ctor<WaterReflectionMasker()>());auto vm=table.getHandle();
61 c.addFunc("configure",[vm](WaterReflectionMasker*s,int channel,float min,float max,bool enabled){return eve::script::projectResult(vm,s->configure(static_cast<WaterReflectionMaskChannel>(channel),min,max,enabled));});
62 c.addFunc("setMask",[vm](WaterReflectionMasker*s,const image::ImageData* mask){auto r=mask?s->setMask(*mask):Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "ImageData mask is required", {}, {},
65 c.addFunc("evaluate",[vm](WaterReflectionMasker*s,float px,float pz,float tx,float tz,float tw,float td,WaterPlanarReflectionSettings* settings){auto r=settings?s->evaluate(px,pz,tx,tz,tw,td,*settings):Result<WaterReflectionMaskTransition>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument, "reflection settings are required", {}, {},
66 "graphics.waterReflectionMasker"));return eve::script::projectResult(vm,std::move(r),[](WaterReflectionMaskTransition v){return eve::Value(static_cast<int>(v));});});
67 c.addFunc("getEnabled",[](const WaterReflectionMasker*s){return s->getEnabled();});c.addFunc("getHeightFeaturesEnabled",[](const WaterReflectionMasker*s){return s->getHeightFeaturesEnabled();});c.addFunc("getSampleX",[](const WaterReflectionMasker*s){return s->getSampleX();});c.addFunc("getSampleY",[](const WaterReflectionMasker*s){return s->getSampleY();});}
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
Own a CPU snapshot of Pcg's planar-reflection mask and evaluate player movement against it.
Definition WaterReflectionMasker.h:26
void clearMask() noexcept
Clear the mask; subsequent evaluations disable reflections when state changes.
Definition WaterReflectionMasker.cpp:36
Result< void > setMask(const image::ImageData &mask)
Replace the owned mask snapshot from any readable ImageData format.
Definition WaterReflectionMasker.cpp:27
Result< WaterReflectionMaskTransition > evaluate(float playerX, float playerZ, float terrainX, float terrainZ, float terrainWidth, float terrainDepth, WaterPlanarReflectionSettings &settings)
Sample a player X/Z position in one terrain's origin and size and update planar reflection settings.
Definition WaterReflectionMasker.cpp:38
Result< void > configure(WaterReflectionMaskChannel channel, float minimum, float maximum, bool reflectionsEnabled)
Configure inclusive thresholds, channel selection and initial scene-profile state.
Definition WaterReflectionMasker.cpp:17
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
WaterReflectionMaskChannel
Pcg ReflectionMasker channel selection.
Definition WaterReflectionMasker.h:16
void exposeWaterReflectionMaskerBindings(ssq::Table &table)
Register Pcg reflection-mask bindings.
Definition WaterReflectionMasker.cpp:60
WaterReflectionMaskTransition
Observable reflection-state transition after one player-position sample.
Definition WaterReflectionMasker.h:18
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Definition SquirrelBinding.cpp:470
@ InvalidArgument
Authored planar-reflection policy with no camera or texture ownership.
Definition WaterPlanarReflection.h:18