Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/world_entities/weapons/test_gun.cc @ 4930

Last change on this file since 4930 was 4930, checked in by bensch, 19 years ago

orxonox/trunk: adapted the Factory algorithm to ObjectManager… still a logn way to go…

File size: 6.4 KB
Line 
1
2
3/*
4   orxonox - the future of 3D-vertical-scrollers
5
6   Copyright (C) 2004 orx
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   ### File Specific
14   main-programmer: Patrick Boenzli
15   co-programmer:
16
17
18   @todo: direction in which the projectile flights
19   @todo: a target to set/hit
20*/
21
22
23#include "test_gun.h"
24
25#include "world_entity.h"
26#include "model.h"
27#include "test_bullet.h"
28
29#include "state.h"
30#include "vector.h"
31#include "list.h"
32#include "animation3d.h"
33#include "sound_engine.h"
34
35#include "object_manager.h"
36
37using namespace std;
38
39
40/**
41 *  standard constructor
42
43   creates a new weapon
44*/
45TestGun::TestGun (PNode* parent, const Vector& coordinate,
46                  const Quaternion& direction, int leftRight)
47  :  Weapon (parent, coordinate, direction)
48{
49  this->setClassID(CL_TEST_GUN, "TestGun");
50
51  this->model = (Model*)ResourceManager::getInstance()->load("models/test_gun.obj", OBJ, RP_CAMPAIGN);
52  this->leftRight = leftRight;
53
54  this->objectComponent1 = new PNode();
55  Animation3D* animation1 = this->getAnimation(WS_SHOOTING, this->objectComponent1);
56  Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
57  Animation3D* animation3 = this->getAnimation(WS_DEACTIVATING, this);
58  //parent->addChild(this->objectComponent1, PNODE_ALL);
59  this->addChild(this->objectComponent1, PNODE_ALL);
60
61  animation1->setInfinity(ANIM_INF_CONSTANT);
62  animation2->setInfinity(ANIM_INF_CONSTANT);
63  animation3->setInfinity(ANIM_INF_CONSTANT);
64  if( this->leftRight == W_LEFT)
65    {
66      this->setEmissionPoint(1.0, 0.0, -0.35);
67
68      animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
69      animation1->addKeyFrame(Vector(-0.4, 0, 0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
70      animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_CONSTANT);
71
72      animation2->addKeyFrame(Vector(-2.6, 0.1, 2.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
73      animation2->addKeyFrame(Vector(-2.6, 0.1, 3.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
74
75      animation3->addKeyFrame(Vector(-2.6, 0.1, 3.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
76      animation3->addKeyFrame(Vector(-2.6, 0.1, 2.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
77    }
78  else if( this->leftRight == W_RIGHT)
79    {
80      this->setEmissionPoint(1.0, 0.0, 0.5);
81
82      this->objectComponent1->setRelCoor(Vector(0,0,0.35));
83      animation1->addKeyFrame(Vector(0, 0, .5), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
84      animation1->addKeyFrame(Vector(-0.4, 0, .5), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
85      animation1->addKeyFrame(Vector(0, 0, .5), Quaternion(), 0.0, ANIM_LINEAR, ANIM_CONSTANT);
86
87      animation2->addKeyFrame(Vector(-2.6, 0.1, -2.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
88      animation2->addKeyFrame(Vector(-2.6, 0.1, -3.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
89
90      animation3->addKeyFrame(Vector(-2.6, 0.1, -3.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
91      animation3->addKeyFrame(Vector(-2.6, 0.1, -2.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
92    }
93/*
94  this->fireSound = (SoundBuffer*)ResourceManager::getInstance()->load("sound/shot1.wav", WAV);
95  this->weaponSource = new SoundSource(this->fireSound, this);
96  this->weaponSource->setRolloffFactor(.1);*/
97  Projectile* p = new TestBullet(this);
98
99  //  ObjectManager::getInstance()->cache(CL_TEST_BULLET, 100, p);
100  //ObjectManager::getInstance()->debug();
101
102  this->setStateDuration(WS_SHOOTING, .4);
103  this->setStateDuration(WS_RELOADING, 1);
104  this->setStateDuration(WS_ACTIVATING, .4);
105  this->setStateDuration(WS_DEACTIVATING, .4);
106
107  this->setMaximumEnergy(1000, 10);
108  this->increaseEnergy(100);
109  //this->minCharge = 2;
110
111  this->setActionSound(WA_SHOOT, "sound/shot1.wav");
112}
113
114
115/**
116 *  standard deconstructor
117*/
118TestGun::~TestGun ()
119{
120  // model will be deleted from WorldEntity-destructor
121}
122
123
124/**
125 *  this activates the weapon
126
127   This is needed, since there can be more than one weapon on a ship. the
128   activation can be connected with an animation. for example the weapon is
129   been armed out.
130*/
131void TestGun::activate()
132{
133}
134
135
136/**
137 *  this deactivates the weapon
138
139   This is needed, since there can be more than one weapon on a ship. the
140   activation can be connected with an animation. for example the weapon is
141   been armed out.
142*/
143void TestGun::deactivate()
144{
145}
146
147
148/**
149 *  fires the weapon
150
151   this is called from the player.cc, when fire-button is been pushed
152   @todo: the ObjectManager deliveres Projectiles not TestBullets! this should be diffrent
153*/
154void TestGun::fire()
155{
156  Projectile* pj =  new TestBullet(this);//dynamic_cast<Projectile*>(ObjectManager::getInstance()->getFromDeadList(CL_TEST_BULLET & CL_MASK_LOWLEVEL_CLASS));
157//  weaponSource->play();
158
159  pj->setAbsCoor(this->getEmissionPoint());
160  pj->setAbsDir(this->getAbsDir());
161  pj->setVelocity(this->getVelocity());
162  State::getWorldEntityList()->add(pj);
163}
164
165
166/**
167 *  is called, when the weapon gets hit (=collide with something)
168 * @param from which entity it is been hit
169 * @param where it is been hit
170
171   this may not be used, since it would make the game relay complicated when one
172   can destroy the weapons of enemies or vice versa.
173*/
174void TestGun::hit (WorldEntity* entity, Vector* position)
175{}
176
177
178/**
179 *  is called, when the weapon is destroyed
180
181   this is in conjunction with the hit function, so when a weapon is able to get
182   hit, it can also be destoryed.
183*/
184void TestGun::destroy ()
185{}
186
187/**
188 *  this will draw the weapon
189*/
190void TestGun::draw ()
191{
192  /* draw gun body */
193  glMatrixMode(GL_MODELVIEW);
194  glPushMatrix();
195  float matrix[4][4];
196  glTranslatef (this->getAbsCoor ().x,
197                this->getAbsCoor ().y,
198                this->getAbsCoor ().z);
199  this->getAbsDir ().matrix (matrix);
200  glMultMatrixf((float*)matrix);
201  if( this->leftRight == W_RIGHT)
202    glScalef(1.0, 1.0, -1.0);
203  this->model->draw(1);
204  glPopMatrix();
205
206  /* draw objectComponent1: gun coil - animated stuff */
207  glMatrixMode(GL_MODELVIEW);
208  glPushMatrix();
209  glTranslatef (this->objectComponent1->getAbsCoor ().x,
210                this->objectComponent1->getAbsCoor ().y,
211                this->objectComponent1->getAbsCoor ().z);
212  this->objectComponent1->getAbsDir ().matrix (matrix);
213  glMultMatrixf((float*)matrix);
214  this->model->draw(0);
215  glPopMatrix();
216}
217
Note: See TracBrowser for help on using the repository browser.