Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

less debug more boxes creation obb

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