Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/new_class_id/src/world_entities/npcs/network_turret.cc @ 9833

Last change on this file since 9833 was 9727, checked in by bensch, 18 years ago

orxonox/new_class_id: new Executor construct, that is much more typesafe, faster, and easier to extend…

Also changed the LoadParam process, and adapted ScriptEngine calls

Then at the end, some missing headers appeared, and appended them to all the cc-files again.

File size: 4.3 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: Manuel Leuenberger
13   co-programmer: ...
14*/
15
16#include "network_turret.h"
17#include "model.h"
18#include "world_entities/weapons/turret.h"
19
20#include "state.h"
21#include "playable.h"
22#include "player.h"
23
24
25#include "util/loading/factory.h"
26#include "network_game_manager.h"
27#include "util/loading/load_param.h"
28
29#include "effects/explosion.h"
30
31#include "weapons/aiming_turret.h"
32#include "debug.h"
33
34#include "class_id_DEPRECATED.h"
35ObjectListDefinitionID(NetworkTurret, CL_NETWORK_TURRET);
36CREATE_FACTORY(NetworkTurret);
37
38
39/**
40 * constructs and loads a NetworkTurret from a XML-element
41 * @param root the XML-element to load from
42 */
43NetworkTurret::NetworkTurret(const TiXmlElement* root)
44    : NPC(root)
45{
46  this->init();
47  if (root != NULL)
48    this->loadParams(root);
49}
50
51
52/**
53 * standard deconstructor
54 */
55NetworkTurret::~NetworkTurret ()
56{}
57
58
59/**
60 * initializes the NetworkTurret
61 * @todo change this to what you wish
62 */
63void NetworkTurret::init()
64{
65  this->registerObject(this, NetworkTurret::_objectList);
66  this->loadModel("models/ground_turret_#.obj", 5);
67
68  this->weapon = new AimingTurret();
69  this->weapon->loadModel("models/guns/turret2.obj", 10);
70  this->weapon->setParent(this);
71  this->weapon->toList(this->getOMListNumber());
72  this->weapon->setRelCoor(0,10,-5);
73  this->weapon->requestAction( WA_ACTIVATE);
74  this->weapon->setParent(&this->weaponHolder);
75
76  this->setHealthMax(300);
77  this->setHealth(300);
78
79  this->weaponHolder.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
80
81  this->weaponHolder.setRelCoor(0,25,0);
82  this->weaponHolder.setParent(this);
83
84
85  this->targetGroup = OM_GROUP_01;
86  this->targetGroup_write = OM_GROUP_01;
87  this->targetGroup_handle = this->registerVarId( new SynchronizeableInt ( &targetGroup, &targetGroup_write, "targetgroup", PERMISSION_MASTER_SERVER ) );
88
89  this->setSynchronized( true );
90}
91
92
93/**
94 * @brief loads a NetworkTurret from a XML-element
95 * @param root the XML-element to load from
96 * @todo make the class Loadable
97 */
98void NetworkTurret::loadParams(const TiXmlElement* root)
99{
100  // all the clases this Entity is directly derived from must be called in this way, to load all settings.
101  NPC::loadParams(root);
102
103  LoadParam(root, "target-group", this, NetworkTurret, setTargetGroupS);
104}
105
106/**
107 * advances the NetworkTurret about time seconds
108 * @param time the Time to step
109 */
110void NetworkTurret::tick(float dt)
111{
112  ObjectManager::EntityList::iterator entity;
113  Vector diffVec;
114  for (entity = State::getObjectManager()->getEntityList((OM_LIST)this->targetGroup).begin();
115       entity != State::getObjectManager()->getEntityList((OM_LIST)this->targetGroup).end();
116       entity ++)
117  {
118    diffVec = ( (*entity)->getAbsCoor() - this->getAbsCoor() );
119
120    if ( diffVec.len() < 400.0 )//&&  acos( (this->source->getAbsDirX()).dot(diffVec)/(diffVec.len() * (this->source->getAbsDirX()).len() ) )  < angle)
121    {
122      //if (this->getParent() != (*entity))
123      {
124        this->weapon->requestAction(WA_SHOOT);
125        return;
126      }
127    }
128  }
129}
130
131/**
132 * draws this worldEntity
133 */
134void NetworkTurret::draw () const
135{
136  WorldEntity::draw();
137
138  if (this->weapon != NULL)
139    this->weapon->draw();
140}
141
142void NetworkTurret::setTargetGroup(int targetGroup)
143{
144  this->targetGroup = targetGroup;
145  this->weapon->setTargetGroup((OM_LIST)targetGroup);
146}
147
148
149void NetworkTurret::setTargetGroupS(const std::string& groupName)
150{
151  OM_LIST id = ObjectManager::StringToOMList(groupName);
152  if (id != OM_NULL)
153    this->setTargetGroup(id);
154  else
155    PRINTF(2)("List %s not found for targetting\n", groupName.c_str());
156}
157
158void NetworkTurret::varChangeHandler( std::list< int > & id )
159{
160  WorldEntity::varChangeHandler( id );
161
162  if ( std::find( id.begin(), id.end(), targetGroup_handle) != id.end() )
163  {
164    setTargetGroup( targetGroup_write );
165  }
166}
167
168/**
169 *
170 *
171 */
172void NetworkTurret::postSpawn ()
173{}
174
175/**
176 *
177 *
178 */
179void NetworkTurret::leftWorld ()
180{}
181
182void NetworkTurret::destroy(WorldEntity* killer)
183{
184  this->setAbsDirSoft(Quaternion(-90, Vector(0,0,1)), 90);
185  Explosion::explode(this, Vector(10,10,10));
186
187  this->toList(OM_DEAD);
188}
Note: See TracBrowser for help on using the repository browser.