123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #include "../idlib/precompiled.h"
- #pragma hdrstop
- #include "Game_local.h"
- const idEventDef EV_doorfoldingactivate( "doorfoldingactivate", "d" );
- CLASS_DECLARATION( idEntity, idDoorFolding )
- EVENT( EV_doorfoldingactivate, idDoorFolding::Event_activate)
- END_CLASS
- void idDoorFolding::Think( void )
- {
-
- idEntity::Present();
- }
- void idDoorFolding::Event_activate( int value )
- {
- if (value <= 0)
- {
- int i;
- //close.
- for (i = 0; i < BARCOUNT; i++)
- {
- idVec3 origin = GetPhysics()->GetOrigin();
- movers[i]->Event_MoveToPos( origin );
- }
- }
- else
- {
- int i;
- //open.
- for (i = 0; i < BARCOUNT; i++)
- {
- movers[i]->Event_MoveToPos( movers[i]->originalPosition );
- }
- }
- }
- void idDoorFolding::Spawn( void )
- {
- int i;
- idVec3 forward;
- int doorHeight = 112;
- int doorWidth = spawnArgs.GetInt("width", "128");
- float movetime = spawnArgs.GetFloat("movetime", "1" );
- int segmentWidth = doorWidth / BARCOUNT;
- this->GetPhysics()->GetAxis().ToAngles().ToVectors(&forward);
- int barheight0 = doorHeight * 0.3f;
- int barheight1 = doorHeight * 0.7f;
- for (i = 0; i < BARCOUNT; i++)
- {
- idDict args;
- args.Clear();
- args.SetVector( "origin", this->GetPhysics()->GetOrigin() + (forward * (segmentWidth * (i+1))));
- args.Set( "model", "models/doorfolding/tris.ase" );
- movers[i] = ( idMover * )gameLocal.SpawnEntityType( idMover::Type, &args );
- movers[i]->Event_SetMoveTime( movetime );
- }
- //diagonal bars.
- for (i = 1; i < BARCOUNT; i++)
- {
- idDict args;
- args.Clear();
- args.SetVector( "origin", movers[i]->GetPhysics()->GetOrigin() + idVec3(0,0,barheight0+16) );
- this->beam[(i * 8) + 0] = ( idBeam * )gameLocal.SpawnEntityType( idBeam::Type, &args );
- this->beam[(i * 8) + 0]->Bind(movers[i], false);
- args.Clear();
- args.SetVector( "origin", movers[i - 1]->GetPhysics()->GetOrigin() + idVec3(0,0,barheight0-16) );
- args.Set( "width", "2" );
- args.Set( "skin", "skins/beam_black" );
- args.Set( "target", beam[(i * 8) + 0]->name.c_str() );
- this->beam[(i * 8) + 1] = ( idBeam * )gameLocal.SpawnEntityType( idBeam::Type, &args );
- this->beam[(i * 8) + 1]->Bind(movers[i - 1], false);
- args.Clear();
- args.SetVector( "origin", movers[i]->GetPhysics()->GetOrigin() + idVec3(0,0,barheight0-16) );
- this->beam[(i * 8) + 2] = ( idBeam * )gameLocal.SpawnEntityType( idBeam::Type, &args );
- this->beam[(i * 8) + 2]->Bind(movers[i], false);
- args.Clear();
- args.SetVector( "origin", movers[i - 1]->GetPhysics()->GetOrigin() + idVec3(0,0,barheight0+16) );
- args.Set( "width", "2" );
- args.Set( "skin", "skins/beam_black" );
- args.Set( "target", beam[(i * 8) + 2]->name.c_str() );
- this->beam[(i * 8) + 3] = ( idBeam * )gameLocal.SpawnEntityType( idBeam::Type, &args );
- this->beam[(i * 8) + 3]->Bind(movers[i - 1], false);
- //second set.
- args.Clear();
- args.SetVector( "origin", movers[i]->GetPhysics()->GetOrigin() + idVec3(0,0,barheight1+16) );
- this->beam[(i * 8) + 4] = ( idBeam * )gameLocal.SpawnEntityType( idBeam::Type, &args );
- this->beam[(i * 8) + 4]->Bind(movers[i], false);
- args.Clear();
- args.SetVector( "origin", movers[i - 1]->GetPhysics()->GetOrigin() + idVec3(0,0,barheight1-16) );
- args.Set( "width", "2" );
- args.Set( "skin", "skins/beam_black" );
- args.Set( "target", beam[(i * 8) + 4]->name.c_str() );
- this->beam[(i * 8) + 5] = ( idBeam * )gameLocal.SpawnEntityType( idBeam::Type, &args );
- this->beam[(i * 8) + 5]->Bind(movers[i - 1], false);
- args.Clear();
- args.SetVector( "origin", movers[i]->GetPhysics()->GetOrigin() + idVec3(0,0,barheight1-16) );
- this->beam[(i * 8) + 6] = ( idBeam * )gameLocal.SpawnEntityType( idBeam::Type, &args );
- this->beam[(i * 8) + 6]->Bind(movers[i], false);
- args.Clear();
- args.SetVector( "origin", movers[i - 1]->GetPhysics()->GetOrigin() + idVec3(0,0,barheight1+16) );
- args.Set( "width", "2" );
- args.Set( "skin", "skins/beam_black" );
- args.Set( "target", beam[(i * 8) + 6]->name.c_str() );
- this->beam[(i * 8) + 7] = ( idBeam * )gameLocal.SpawnEntityType( idBeam::Type, &args );
- this->beam[(i * 8) + 7]->Bind(movers[i - 1], false);
- }
- }
|