Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/presentation/src/world_entities/weapons/aiming_system.cc @ 9188

Last change on this file since 9188 was 9188, checked in by patrick, 18 years ago

aiming system now works

File size: 3.0 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: Patrick Boenzli
13   co-programmer: ...
14*/
15
16#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
17
18#include "aiming_system.h"
19
20#include "util/loading/load_param.h"
21
22#include "state.h"
23
24#include "aabb.h"
25#include "obb_tree.h"
26
27#include <vector>
28
29
30using namespace std;
31
32
33/**
34 * standart constructor
35 */
36AimingSystem::AimingSystem (WorldEntity* entity)
37  : WorldEntity()
38{
39  this->owner = entity;
40
41  this->init();
42}
43
44
45/**
46 * destroys a AimingSystem
47*/
48AimingSystem::~AimingSystem ()
49{}
50
51
52/**
53 * initializes the AimingSystem
54 */
55void AimingSystem::init()
56{
57  this->setClassID(CL_AIMING_SYSTEM, "AimingSystem");
58  this->setName("AimingSystem");
59
60  //this->loadModel("models/guns/targeting_system_body2.obj");
61//   this->loadModel("models/ships/fighter.obj");
62
63  // registering default reactions:
64  this->unsubscribeReaction(CREngine::CR_OBJECT_DAMAGE);
65  this->subscribeReaction(CREngine::CR_OBJECT_DAMAGE, CL_WORLD_ENTITY);
66
67  this->range = 30.0f;
68  this->sideLength = 2.0f;
69
70  // new obb tree
71  this->obbTree = new OBBTree();
72  this->obbTree->createBox(Vector(0.0f, 0.0f, 0.0f), Vector(this->range, this->sideLength, this->sideLength));
73  this->setOBBTree(this->obbTree);
74}
75
76
77
78/**
79 * get back the nearest target
80 * @returns the nerest target
81 */
82WorldEntity* AimingSystem::getNearestTarget()
83{
84
85//   PRINTF(0)("size: %i\n", this->selectionList.size());
86
87
88  if( this->selectionList.size() == 0)
89    return NULL;
90
91
92  WorldEntity* nearestEntity     = NULL;
93  float        distance          = 0.0f;
94  float        smalestDistance   = this->range * 5.0f;
95
96
97  for( int i = 0; i < this->selectionList.size(); i++)
98  {
99    distance = fabs((this->getAbsCoor() - this->selectionList[i]->getAbsCoor()).len());
100    if( distance < smalestDistance)
101    {
102      nearestEntity = this->selectionList[i];
103      smalestDistance = distance;
104    }
105  }
106
107  if( nearestEntity != this->owner)
108    return nearestEntity;
109  else
110    return NULL;
111}
112
113
114/**
115 * called when an object is "selected"
116 *  @param damage damage to be dealt
117 *  @param killer the entity
118 */
119void AimingSystem::hit(float damage, WorldEntity* killer)
120{
121  this->selectionList.push_back(killer);
122}
123
124
125
126/**
127 * ticks the AimingSystem
128 * @param dt the time to ticks
129 */
130void AimingSystem::tick(float dt)
131{
132
133
134}
135
136
137/**
138 * draws the crosshair
139 */
140void AimingSystem::draw() const
141{
142  WorldEntity::draw();
143
144//   glMatrixMode(GL_MODELVIEW);
145//   glPushMatrix();
146//
147//   /* translate */
148//   glTranslatef (this->getAbsCoor ().x,
149//                 this->getAbsCoor ().y,
150//                 this->getAbsCoor ().z);
151//   Vector tmpRot = this->getAbsDir().getSpacialAxis();
152//   glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
153//
154//   this->obbTree->drawBV(0, 1);
155//
156//   glPopMatrix();
157
158}
Note: See TracBrowser for help on using the repository browser.