Files
FC1/Editor/Objects/SoundObject.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

200 lines
5.1 KiB
C++

////////////////////////////////////////////////////////////////////////////
//
// Crytek Engine Source File.
// Copyright (C), Crytek Studios, 2001.
// -------------------------------------------------------------------------
// File name: SoundObject.cpp
// Version: v1.00
// Created: 10/10/2001 by Timur.
// Compilers: Visual C++ 6.0
// Description: CSoundObject implementation.
// -------------------------------------------------------------------------
// History:
//
////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "SoundObject.h"
#include "..\SoundObjectPanel.h"
#include "..\Viewport.h"
//////////////////////////////////////////////////////////////////////////
// CBase implementation.
//////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNCREATE(CSoundObject,CBaseObject)
int CSoundObject::m_rollupId = 0;
CSoundObjectPanel* CSoundObject::m_panel = 0;
//////////////////////////////////////////////////////////////////////////
CSoundObject::CSoundObject()
{
//m_ITag = 0;
m_innerRadius = 1;
m_outerRadius = 10;
}
//////////////////////////////////////////////////////////////////////////
void CSoundObject::Done()
{
//if (m_ITag)
{
// GetIEditor()->GetGame()->RemoveSoundObject( m_ITag );
}
CBaseObject::Done();
}
//////////////////////////////////////////////////////////////////////////
bool CSoundObject::Init( IEditor *ie,CBaseObject *prev,const CString &file )
{
m_ie = ie;
SetColor( RGB(255,255,0) );
bool res = CBaseObject::Init( ie,prev,file );
// Create Tag point in game.
//m_ITag = GetIEditor()->GetGame()->CreateSoundObject( (const char*)GetName(),GetPos(),GetAngles() );
return res;
}
//////////////////////////////////////////////////////////////////////////
void CSoundObject::SetName( const CString &name )
{
CBaseObject::SetName( name );
//if (m_ITag)
//m_ITag->SetName( name );
}
//////////////////////////////////////////////////////////////////////////
void CSoundObject::SetPos( const Vec3d &pos )
{
CBaseObject::SetPos( pos );
//if (m_ITag)
//m_ITag->SetPos( pos );
}
//////////////////////////////////////////////////////////////////////////
void CSoundObject::SetAngles( const Vec3d &angles )
{
}
//////////////////////////////////////////////////////////////////////////
void CSoundObject::SetScale( const Vec3d &scale )
{
}
//////////////////////////////////////////////////////////////////////////
void CSoundObject::GetBoundSphere( Vec3d &pos,float &radius )
{
pos = GetPos();
radius = m_outerRadius;
}
//////////////////////////////////////////////////////////////////////////
void CSoundObject::BeginEditParams( IEditor *ie,int flags )
{
m_ie = ie;
CBaseObject::BeginEditParams( ie,flags );
}
//////////////////////////////////////////////////////////////////////////
void CSoundObject::EndEditParams( IEditor *ie )
{
CBaseObject::EndEditParams( ie );
}
/*
//////////////////////////////////////////////////////////////////////////
void CSoundObject::OnPropertyChange( const CString &property )
{
CBaseObject::OnPropertyChange(property);
if (!GetParams())
return;
GetParams()->getAttr( "InnerRadius",m_innerRadius );
GetParams()->getAttr( "OuterRadius",m_outerRadius );
}
*/
//////////////////////////////////////////////////////////////////////////
int CSoundObject::MouseCreateCallback( CViewport *view,EMouseEvent event,CPoint &point,int flags )
{
if (event == eMouseMove || event == eMouseLDown)
{
Vec3 pos;
// Position 1 meter above ground when creating.
if (GetIEditor()->GetAxisConstrains() != AXIS_TERRAIN)
{
pos = view->MapViewToCP(point);
}
else
{
// Snap to terrain.
bool hitTerrain;
pos = view->ViewToWorld( point,&hitTerrain );
if (hitTerrain)
{
pos.z = GetIEditor()->GetTerrainElevation(pos.x,pos.y) + 1.0f;
}
pos = view->SnapToGrid(pos);
}
SetPos( pos );
if (event == eMouseLDown)
return MOUSECREATE_OK;
return MOUSECREATE_CONTINUE;
}
return CBaseObject::MouseCreateCallback( view,event,point,flags );
}
//////////////////////////////////////////////////////////////////////////
bool CSoundObject::HitTest( HitContext &hc )
{
Vec3 origin = GetPos();
float radius = 1;
Vec3 w = origin - hc.raySrc;
w = hc.rayDir.Cross( w );
float d = w.Length();
if (d < radius + hc.distanceTollerance)
{
hc.dist = GetDistance(hc.raySrc,origin);
return true;
}
return false;
}
//////////////////////////////////////////////////////////////////////////
void CSoundObject::Display( DisplayContext &dc )
{
COLORREF color = GetColor();
dc.SetColor( color,0.8f );
dc.DrawBall( GetPos(),1 );
dc.SetColor( 0,1,0,0.3f );
dc.DrawWireSphere( GetPos(),m_innerRadius );
dc.SetColor( color,1 );
dc.DrawWireSphere( GetPos(),m_outerRadius );
//dc.renderer->DrawBall( GetPos(),m_outerRadius );
if (IsSelected())
{
dc.SetSelectedColor( 0.5f );
dc.DrawBall( GetPos(),1.3f );
}
DrawDefault( dc );
}
//////////////////////////////////////////////////////////////////////////
XmlNodeRef CSoundObject::Export( const CString &levelPath,XmlNodeRef &xmlNode )
{
XmlNodeRef objNode = CBaseObject::Export( levelPath,xmlNode );
return objNode;
}