Skip to content
Snippets Groups Projects
Select Git revision
  • 32256e4c757a52efba72fb1642e8d0cf487937e8
  • branchX default protected
  • Inventory
  • UIControls
  • fsv2
  • tonetest
  • from_nb
  • tonemapping
  • opt-shadows
  • BX-634
  • xCSG
  • hc
  • gizmos
  • gui2CSSLexer
  • msExporter
  • gui2
  • gui2Fix
  • master protected
  • pk
  • mesh_optimize
  • light_wip
  • version_X.11.2 protected
  • version_X.11.1 protected
  • version_X.11.1-dev protected
  • version_X.11.0-dev protected
  • version_X.10.1 protected
  • version_X.10.1-dev protected
  • version_X.10.0-dev protected
  • version_X.9.5 protected
  • version_X.9.4 protected
  • version_X.9.3 protected
  • version_X.9.3-dev protected
  • version_X.9.2-dev protected
  • version_X.9.1-dev protected
  • version_X.9.0-dev protected
  • version_X.8.2 protected
  • version_X.8.2-dev protected
  • version_X.8.1-dev protected
  • version_X.8.0-dev protected
  • version_X.7.1 protected
  • version_X.7.0 protected
41 results

BaseAmmo.cpp

Blame
  • BaseAmmo.cpp 11.54 KiB
    
    /***********************************************************
    Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
    See the license in LICENSE
    ***********************************************************/
    
    #include "BaseAmmo.h"
    #include "Tracer.h"
    #include "BaseTool.h"
    #include <particles/sxparticles.h>
    #include <decals/sxdecals.h>
    #include <BulletCollision/NarrowPhaseCollision/btRaycastCallback.h>
    
    /*! \skydocent base_ammo
    Базовый класс для патронов
    */
    
    BEGIN_PROPTABLE(CBaseAmmo)
    	//! Начальная скорость пули
    	DEFINE_FIELD_FLOAT(m_fStartSpeed, PDFF_NOEDIT | PDFF_NOEXPORT, "start_speed", "", EDITOR_NONE)
    	//! Масса пули, кг
    	DEFINE_FIELD_FLOAT(m_fBulletMass, PDFF_NOEDIT | PDFF_NOEXPORT, "bullet_mass", "", EDITOR_NONE)
    	//! Бронебойность
    	DEFINE_FIELD_FLOAT(m_fArmorPiercing, PDFF_NOEDIT | PDFF_NOEXPORT, "armor_piercing", "", EDITOR_NONE)
    	//! Экспансивная?
    	DEFINE_FIELD_BOOL(m_isExpansive, PDFF_NOEDIT | PDFF_NOEXPORT, "is_expansive", "", EDITOR_NONE)
    	//! Разрывная?
    	DEFINE_FIELD_BOOL(m_isBursting, PDFF_NOEDIT | PDFF_NOEXPORT, "is_bursting", "", EDITOR_NONE)
    END_PROPTABLE()
    
    REGISTER_ENTITY_NOLISTING(CBaseAmmo, base_ammo);
    
    struct AllHitsNotMeRayResultCallback: public btCollisionWorld::AllHitsRayResultCallback
    {
    	AllHitsNotMeRayResultCallback(btCollisionObject* me, const btVector3&	rayFromWorld, const btVector3&	rayToWorld):
    		AllHitsRayResultCallback(rayFromWorld, rayToWorld)
    	{
    		m_me = me;
    	}
    
    	virtual	btScalar	addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace)
    	{
    		//printf("%f\n", rayResult.m_hitFraction);
    		if(rayResult.m_collisionObject == m_me)
    		{
    			return 1.0;
    		}
    		if(rayResult.m_localShapeInfo)
    		{
    			m_shapeInfos.push_back(*rayResult.m_localShapeInfo);
    		}
    		else
    		{
    			m_shapeInfos.push_back({-1, -1});
    		}
    		return(AllHitsRayResultCallback::addSingleResult(rayResult, normalInWorldSpace));
    	}
    	Array<btCollisionWorld::LocalShapeInfo> m_shapeInfos;
    protected:
    	btCollisionObject* m_me;
    };
    
    CBaseAmmo::CBaseAmmo(CEntityManager * pMgr):
    	BaseClass(pMgr),
    	m_fStartSpeed(0.0f),
    	m_fBulletMass(0.0f),
    	m_fArmorPiercing(0.0f),
    	m_fNextBarrierDepth(0.0f)
    {
    	m_bPickable = false;