载入中...
搜索中...
未找到
PcgTooltip.cpp
浏览该文件的文档.
1#include "ui/PcgTooltip.h"
3#include <simplesquirrel/simplesquirrel.hpp>
4#include <cmath>
5namespace eve::ui {namespace {}
6Result<void> PcgTooltipManager::configure(int mode,int theme,float delay,float bottom,float top,int wrap){if(mode<0||mode>2||theme<0||theme>1||!std::isfinite(delay)||!std::isfinite(bottom)||!std::isfinite(top)||delay<0||bottom<0||top<0||wrap<0)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"invalid tooltip configuration","ui.pcgTooltip"));mode_=mode;theme_=theme;delay_=delay;bottomOffset_=bottom;topOffset_=top;wrapLimit_=wrap;hide();return Result<void>::success();}
7Result<void> PcgTooltipManager::addTooltip(const std::string&id,const std::string&header,const std::string&text){if(id.empty())return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"tooltip id must not be empty","ui.pcgTooltip"));entries_.push_back({id,header,text});return Result<void>::success();}
8Result<bool> PcgTooltipManager::removeTooltip(const std::string&q){if(q.empty())return Result<bool>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"tooltip query must not be empty","ui.pcgTooltip"));for(auto it=entries_.begin();it!=entries_.end();++it)if(it->id.find(q)!=std::string::npos){entries_.erase(it);return Result<bool>::success(true);}return Result<bool>::success(false);}
9bool PcgTooltipManager::accepts(int source)const noexcept{return source>=0&&source<=1&&(mode_==2||mode_==source);}
10Result<bool> PcgTooltipManager::enter(int source,const std::string&q,float now){if(!std::isfinite(now)||now<0||q.empty()||source<0||source>1)return Result<bool>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"invalid tooltip enter request","ui.pcgTooltip"));pending_=false;if(!accepts(source))return Result<bool>::success(false);for(const auto&e:entries_)if(e.id.find(q)!=std::string::npos){source_=source;header_=e.header;text_=e.text;showAt_=now+delay_;pending_=true;return Result<bool>::success(true);}return Result<bool>::success(false);}
11Result<void> PcgTooltipManager::enterText(int source,const std::string&content,const std::string&header,float now){if(!std::isfinite(now)||now<0||source<0||source>1)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"invalid tooltip enter request","ui.pcgTooltip"));pending_=false;if(!accepts(source))return Result<void>::success();source_=source;header_=header;text_=content;showAt_=now+delay_;pending_=true;return Result<void>::success();}
12Result<void> PcgTooltipManager::exit(int source){if(source<0||source>1)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"tooltip source must be UI or scene","ui.pcgTooltip"));if(accepts(source)){pending_=false;visible_=false;}return Result<void>::success();}
13Result<void> PcgTooltipManager::tick(float now,float x,float y,float sw,float sh,bool input){if(!std::isfinite(now)||!std::isfinite(x)||!std::isfinite(y)||!std::isfinite(sw)||!std::isfinite(sh)||now<0||sw<=0||sh<=0)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"invalid tooltip frame input","ui.pcgTooltip"));pivotX_=x/sw;float normalized=y/sh;pivotY_=normalized*(y<=sh*.5f?bottomOffset_:topOffset_);if(input){hide();return Result<void>::success();}if(pending_&&now>=showAt_){pending_=false;visible_=true;}return Result<void>::success();}
14void exposePcgTooltipBindings(ssq::Table&t){auto c=t.addClass("PcgTooltipManager",ssq::Class::Ctor<PcgTooltipManager()>());auto vm=t.getHandle();c.addFunc("configure",[vm](PcgTooltipManager*s,int m,int th,float d,float b,float top,int w){return eve::script::projectResult(vm,s->configure(m,th,d,b,top,w));});c.addFunc("addTooltip",[vm](PcgTooltipManager*s,const std::string&i,const std::string&h,const std::string&x){return eve::script::projectResult(vm,s->addTooltip(i,h,x));});c.addFunc("removeTooltip",[vm](PcgTooltipManager*s,const std::string&q){return eve::script::projectResult(vm,s->removeTooltip(q),[](bool v){return v;});});c.addFunc("enter",[vm](PcgTooltipManager*s,int src,const std::string&q,float n){return eve::script::projectResult(vm,s->enter(src,q,n),[](bool v){return v;});});c.addFunc("enterText",[vm](PcgTooltipManager*s,int src,const std::string&text,const std::string&header,float n){return eve::script::projectResult(vm,s->enterText(src,text,header,n));});c.addFunc("exit",[vm](PcgTooltipManager*s,int src){return eve::script::projectResult(vm,s->exit(src));});c.addFunc("tick",[vm](PcgTooltipManager*s,float n,float x,float y,float w,float h,bool i){return eve::script::projectResult(vm,s->tick(n,x,y,w,h,i));});c.addFunc("hide",[](PcgTooltipManager*s){s->hide();});c.addFunc("getVisible",[](const PcgTooltipManager*s){return s->getVisible();});c.addFunc("getPending",[](const PcgTooltipManager*s){return s->getPending();});c.addFunc("getHeader",[](const PcgTooltipManager*s){return s->getHeader();});c.addFunc("getText",[](const PcgTooltipManager*s){return s->getText();});c.addFunc("getHeaderVisible",[](const PcgTooltipManager*s){return s->getHeaderVisible();});c.addFunc("getWrapEnabled",[](const PcgTooltipManager*s){return s->getWrapEnabled();});c.addFunc("getPivotX",[](const PcgTooltipManager*s){return s->getPivotX();});c.addFunc("getPivotY",[](const PcgTooltipManager*s){return s->getPivotY();});c.addFunc("getBackgroundR",[](const PcgTooltipManager*s){return s->getBackgroundR();});c.addFunc("getForeground",[](const PcgTooltipManager*s){return s->getForeground();});c.addFunc("getCount",[](const PcgTooltipManager*s){return s->getCount();});}
15}
SQInteger top
float w
Definition AnimClip.cpp:738
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
const std::string & s
HSQUIRRELVM vm
Definition ECS.cpp:20
Object::Ptr theme
EvpackChunkInput input
Definition Evpack.cpp:170
glm::vec3 n
Definition Grass.cpp:63
std::array< double, 10 > q
float v
std::int32_t c
int h
std::string text
MeleePoint3 b
Definition MeleeHit.cpp:41
const std::string * accepts
std::string id
Definition PlayHost.cpp:108
float d
float t
The single Squirrel projection for common Result, Status and Value.
const UnitySourceAsset & source
float m[16]
float bottom
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
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result success(T value)
Construct a successful result owning value.
Definition Result.h:164
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Caller-owned runtime model of Pcg Tooltip, TooltipManager, Profile and Trigger.
Definition PcgTooltip.h:12
Result< bool > removeTooltip(const std::string &query)
Remove first entry whose id contains the query.
Definition PcgTooltip.cpp:8
Result< void > tick(float now, float mouseX, float mouseY, float screenWidth, float screenHeight, bool anyInput)
Update mouse placement, delayed visibility, and input dismissal.
Result< void > exit(int source)
Cancel matching hover and hide tooltip.
Result< bool > enter(int source, const std::string &query, float now)
Schedule the first profile entry whose id contains query. source is 0 UI or 1 scene.
Result< void > addTooltip(const std::string &id, const std::string &header, const std::string &text)
Append a tooltip profile entry.
Definition PcgTooltip.cpp:7
void hide() noexcept
Hide and cancel all pending tooltip work.
Definition PcgTooltip.h:21
Result< void > enterText(int source, const std::string &content, const std::string &header, float now)
Schedule direct trigger content, matching TooltipTrigger.
Result< void > configure(int interactionMode, int theme, float delay, float bottomOffset, float topOffset, int wrapLimit)
Configure interaction mode (0 UI, 1 scene, 2 both), theme (0 light, 1 dark), delay and layout.
Definition PcgTooltip.cpp:6
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
void exposePcgTooltipBindings(ssq::Table &t)
Register Pcg tooltip bindings.