Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 10718 was 10718, checked in by rennerc, 17 years ago

dead gui :D

File size: 3.1 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#include "debug.h"
24
25#include "aabb.h"
26#include "obb_tree.h"
27
28
29
30ObjectListDefinition(AimingSystem);
31
32/**
33 * standart constructor
34 */
35AimingSystem::AimingSystem (WorldEntity* entity)
36  : WorldEntity()
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->registerObject(this, AimingSystem::_objectList);
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->unsubscribeReaction(CoRe::CREngine::CR_OBJECT_DAMAGE);
64  this->subscribeReaction(CoRe::CREngine::CR_OBJECT_DAMAGE, WorldEntity::staticClassID());
65
66  this->range = 1000.0f;
67  this->sideLength = 2.0f;
68
69  // new obb tree
70  this->obbTree = new OBBTree();
71  this->obbTree->createBox(Vector(0.0f, 0.0f, 0.0f), Vector(this->range, this->sideLength, this->sideLength));
72  this->setOBBTree(this->obbTree);
73}
74
75
76
77/**
78 * get back the nearest target
79 * @returns the nerest target
80 */
81WorldEntity* AimingSystem::getNearestTarget()
82{
83  if( this->selectionList.size() == 0)
84    return NULL;
85
86
87  WorldEntity* nearestEntity     = NULL;
88  float        distance          = 0.0f;
89  float        smalestDistance   = this->range * 5.0f;
90
91
92  for(unsigned int i = 0; i < this->selectionList.size(); i++)
93  {
94    distance = fabs((this->getAbsCoor() - this->selectionList[i]->getAbsCoor()).len());
95    if( distance < smalestDistance)
96    {
97      nearestEntity = this->selectionList[i];
98      smalestDistance = distance;
99    }
100  }
101
102  return nearestEntity;
103}
104
105
106/**
107 * called when an object is "selected"
108 *  @param damage damage to be dealt
109 *  @param killer the entity
110 */
111void AimingSystem::hit(float damage, WorldEntity* killer)
112{
113  if( this->owner != killer && killer != this && !killer->isA( AimingSystem::staticClassID() ) )
114  {
115    //PRINTF(0)("real hit: %s\n", killer->getClassCName());
116    this->selectionList.push_back(killer);
117  }
118}
119
120
121
122/**
123 * ticks the AimingSystem
124 * @param dt the time to ticks
125 */
126void AimingSystem::tick(float dt)
127{
128}
129
130
131/**
132 * draws the crosshair
133 */
134void AimingSystem::draw() const
135{
136  WorldEntity::draw();
137
138//   glMatrixMode(GL_MODELVIEW);
139//   glPushMatrix();
140//
141//   /* translate */
142//   glTranslatef (this->getAbsCoor ().x,
143//                 this->getAbsCoor ().y,
144//                 this->getAbsCoor ().z);
145//   Vector tmpRot = this->getAbsDir().getSpacialAxis();
146//   glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
147//
148//   this->obbTree->drawBV(0, 1);
149//
150//   glPopMatrix();
151
152}
Note: See TracBrowser for help on using the repository browser.