Program Listing for File ProxyScene.h#
↰ Return to documentation for file (include/Karana/ProxyScene/ProxyScene.h)
/*
*Copyright(c)2024-2025KaranaDynamicsPtyLtd.Allrightsreserved.
*
*NOTICETOUSER:
*
*Thissourcecodeand/ordocumentation(the"LicensedMaterials")is
*theconfidentialandproprietaryinformationofKaranaDynamicsInc.
*UseoftheseLicensedMaterialsisgovernedbythetermsandconditions
*ofaseparatesoftwarelicenseagreementbetweenKaranaDynamicsandthe
*Licensee("LicenseAgreement").Unlessexpresslypermittedunderthat
*agreement,anyreproduction,modification,distribution,ordisclosure
*oftheLicensedMaterials,inwholeorinpart,toanythirdparty
*withoutthepriorwrittenconsentofKaranaDynamicsisstrictlyprohibited.
*
*THELICENSEDMATERIALSAREPROVIDED"ASIS"WITHOUTWARRANTYOFANYKIND.
*KARANADYNAMICSDISCLAIMSALLWARRANTIES,EXPRESSORIMPLIED,INCLUDING
*BUTNOTLIMITEDTOWARRANTIESOFMERCHANTABILITY,NON-INFRINGEMENT,AND
*FITNESSFORAPARTICULARPURPOSE.
*
*INNOEVENTSHALLKARANADYNAMICSBELIABLEFORANYDAMAGESWHATSOEVER,
*INCLUDINGBUTNOTLIMITEDTOLOSSOFPROFITS,DATA,ORUSE,EVENIF
*ADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGES,WHETHERINCONTRACT,TORT,
*OROTHERWISEARISINGOUTOFORINCONNECTIONWITHTHELICENSEDMATERIALS.
*
*U.S.GovernmentEndUsers:TheLicensedMaterialsarea"commercialitem"
*asdefinedat48C.F.R.2.101,andareprovidedtotheU.S.Government
*onlyasacommercialenditemunderthetermsofthislicense.
*
*AnyuseoftheLicensedMaterialsinindividualorcommercialsoftwaremust
*include,intheuserdocumentationandinternalsourcecodecomments,
*thisNotice,Disclaimer,andU.S.GovernmentUseProvision.
*/
#pragmaonce
#include"Karana/KCore/CallbackRegistry.h"
#include"Karana/KCore/SharedPointer.h"
#include"Karana/ProxyScene/ClientRegistry.h"
#include"Karana/ProxyScene/ProxySceneNode.h"
#include"Karana/ProxyScene/ProxyScenePart.h"
#include"Karana/Scene/CollisionScene.h"
#include"Karana/Scene/GraphicalScene.h"
#include"Karana/Scene/Layer.h"
#include"Karana/Scene/Scene.h"
namespaceKarana::Scene{
namespacekf=Karana::Frame;
namespacekm=Karana::Math;
classProxyScene:publicScene{
//Forcreate/discard
friendclassProxySceneNode;
friendclassProxyScenePart;
public:
ProxyScene(std::string_viewname,constkc::ks_ptr<kf::Frame>&root_frame);
~ProxyScene();
statickc::ks_ptr<ProxyScene>create(std::string_viewname,
constkc::ks_ptr<kf::Frame>&root_frame);
voidupdate();
voidupdate(Scene&scene);
voidregisterClientScene(constkc::ks_ptr<Scene>&scene,
constkc::ks_ptr<kf::Frame>&origin_frame,
layer_tlayers=LAYER_ALL);
voidunregisterClientScene(Scene&scene);
kc::ks_ptr<Karana::Scene::GraphicalScene>graphics()const;
kc::ks_ptr<Karana::Scene::CollisionScene>collision()const;
constkc::ks_ptr<ProxySceneNode>&lookupProxyFromImpl(constSceneNode&impl);
constkc::ks_ptr<kf::Frame>&originFrame(constScene&client_scene);
std::vector<kc::ks_ptr<ProxySceneNode>>
getNodesAttachedToFrame(constkc::ks_ptr<kf::Frame>&frame);
kc::CallbackRegistry<void>update_callbacks;
voidshowAxes(kc::ks_ptr<kf::Frame>frm,floatsize=1);
voidviewAroundFrame(kc::ks_ptr<kf::Frame>frm,
constkm::Vec3&offset,
constkm::Vec3&at_offset={0,0,0},
constkm::Vec3&up={0,0,1});
protected:
virtualvoid_discard(kc::ks_ptr<Base>&b)override;
private:
virtualkc::ks_ptr<SceneNode>_createNodeBase(std::string_viewname)override;
virtualvoid_discardNodeBase(kc::ks_ptr<SceneNode>&node,boolrecursive)override;
virtualkc::ks_ptr<ScenePart>_createPartBase(std::string_viewname,
constVarStaticGeometry&goemetry,
constVarMaterial&material,
layer_tlayers)override;
virtualvoid_discardPartBase(kc::ks_ptr<ScenePart>&part)override;
kc::ks_ptr<kf::Frame>_root_frame;
kc::ks_ptr<ClientRegistry>_client_registry;
kc::ks_ptr<ImplDatabase>_impl_database;
std::unordered_map<kc::id_t,kc::ks_ptr<ProxySceneNode>>_nodes;
std::unordered_map<kc::id_t,kc::id_t>_frame2node_map;
};
}//namespaceKarana::Scene