Program Listing for File CoalScene.h#
↰ Return to documentation for file (include/Karana/CoalScene/CoalScene.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/CoalScene/CoalGeometryCache.h"
#include"Karana/CoalScene/CoalSceneNode.h"
#include"Karana/CoalScene/CoalScenePart.h"
#include"Karana/KCore/SharedPointer.h"
#include"Karana/Scene/CollisionInfo.h"
#include"Karana/Scene/CollisionScene.h"
#include"Karana/Scene/Material.h"
#include"Karana/Scene/StaticGeometry.h"
#include<memory>
namespacecoal{
classBroadPhaseCollisionManager;//forwarddeclaration.Fullclassincludedintheccfile.
}
namespaceKarana::Scene{
classCoalScenePart;//forwarddeclare.Fullclassincludedintheccfile.
classCoalScene:publicCollisionScene{
//Accessneededforcreate/discard
friendclassCoalSceneNode;
friendclassCoalScenePart;
public:
CoalScene(std::string_viewname);
~CoalScene();
staticKarana::Core::ks_ptr<CoalScene>create(std::string_viewname);
voidbroadphase(std::function<void(constCollisionScenePart&,constCollisionScenePart&)>
callback)override;
voidsweep(conststd::function<void(constCollisionInfo&collision)>&callback,
conststd::function<bool(constCollisionScenePart&,constCollisionScenePart&)>
&filter=nullptr)override;
conststd::vector<CollisionInfo>&cachedCollisions()constoverride;
constKarana::Core::ks_ptr<CollisionScenePart>&
lookupPart(Karana::Core::id_t)constoverride;
protected:
virtualvoid_discard(Karana::Core::ks_ptr<Karana::Core::Base>&base)override;
private:
Karana::Core::ks_ptr<SceneNode>_createNodeBase(std::string_viewname)override;
void_discardNodeBase(Karana::Core::ks_ptr<SceneNode>&node,
boolrecursive=true)override;
Karana::Core::ks_ptr<ScenePart>_createPartBase(std::string_viewname,
constVarStaticGeometry&geometry,
constVarMaterial&material,
layer_tlayers)override;
void_discardPartBase(Karana::Core::ks_ptr<ScenePart>&part)override;
constCoalGeometryCache_geometry_cache;
conststd::unique_ptr<coal::BroadPhaseCollisionManager>_broadphase;
std::unordered_map<Karana::Core::id_t,Karana::Core::ks_ptr<CollisionScenePart>>_part_map;
Karana::Core::RegistryList<CoalScenePart>_parts;
std::vector<CollisionInfo>_cached_collisions={};
};
}//namespaceKarana::Scene