Program Listing for File CoalScene.h

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