Program Listing for File ProxyScene.h

Program Listing for File ProxyScene.h#

Return to documentation for file (include/Karana/ProxyScene/ProxyScene.h)

/*
*Copyright(c)2024-2026KaranaDynamicsPtyLtd.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);

std::vector<kc::ks_ptr<Karana::Scene::Scene>>clientScenes()const;

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