Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

orxonox/trunk: optimized Lasers

File size: 6.5 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#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
22
23#include "test_gun.h"
24
25#include "world_entity.h"
26#include "model.h"
27#include "test_bullet.h"
28#include "weapon_manager.h"
29#include "factory.h"
30
31#include "vector.h"
32#include "list.h"
33#include "animation3d.h"
34#include "sound_engine.h"
35
36#include "null_parent.h"
37
38#include "fast_factory.h"
39
40
41using namespace std;
42
43CREATE_FACTORY(TestGun);
44
45/**
46 *  standard constructor
47
48   creates a new weapon
49*/
50TestGun::TestGun (WeaponManager* weaponManager, int leftRight)
51  : Weapon(weaponManager)
52{
53  this->init();
54
55
56  this->leftRight = leftRight;
57
58  this->objectComponent1 = new PNode();
59  Animation3D* animation1 = this->getAnimation(WS_SHOOTING, this->objectComponent1);
60  Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
61  Animation3D* animation3 = this->getAnimation(WS_DEACTIVATING, this);
62  //parent->addChild(this->objectComponent1, PNODE_ALL);
63  this->addChild(this->objectComponent1);
64
65  animation1->setInfinity(ANIM_INF_CONSTANT);
66  animation2->setInfinity(ANIM_INF_CONSTANT);
67  animation3->setInfinity(ANIM_INF_CONSTANT);
68
69  if( this->leftRight == W_LEFT)
70  {
71    this->setEmissionPoint(1.0, 0.0, -0.35);
72
73    animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
74    animation1->addKeyFrame(Vector(-0.4, 0, 0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
75    animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
76
77    animation2->addKeyFrame(Vector(0.0, 0.0, -1.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
78    animation2->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
79
80    animation3->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
81    animation3->addKeyFrame(Vector(0.0, 0.0, -1.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
82  }
83  else if( this->leftRight == W_RIGHT)
84  {
85    this->setEmissionPoint(1.0, 0.0, 0.5);
86
87    this->objectComponent1->setRelCoor(Vector(0,0,0.35));
88    animation1->addKeyFrame(Vector(0, 0, .5), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
89    animation1->addKeyFrame(Vector(-0.4, 0, .5), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
90    animation1->addKeyFrame(Vector(0, 0, .5), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
91
92    animation2->addKeyFrame(Vector(.0, .0, 1.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
93    animation2->addKeyFrame(Vector(.0, .0, .0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
94
95    animation3->addKeyFrame(Vector(.0, .0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
96    animation3->addKeyFrame(Vector(.0, .0, 1.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
97  }
98}
99
100
101TestGun::TestGun(const TiXmlElement* root)
102{
103  this->init();
104  this->loadParams(root);
105}
106
107/**
108 *  standard deconstructor
109*/
110TestGun::~TestGun ()
111{
112  // model will be deleted from WorldEntity-destructor
113}
114
115
116void TestGun::init()
117{
118  this->setClassID(CL_TEST_GUN, "TestGun");
119
120//  this->model = (Model*)ResourceManager::getInstance()->load("models/guns/test_gun.obj", OBJ, RP_CAMPAIGN);
121
122  this->loadModel("models/guns/test_gun.obj");
123
124  this->setStateDuration(WS_SHOOTING, .1);
125  this->setStateDuration(WS_RELOADING, .1);
126  this->setStateDuration(WS_ACTIVATING, .4);
127  this->setStateDuration(WS_DEACTIVATING, .4);
128
129  this->setMaximumEnergy(1000, 100);
130  this->increaseEnergy(1000);
131  this->setEmissionPoint(0,-100,0);
132  //this->minCharge = 2;
133
134  this->setActionSound(WA_SHOOT, "sound/shot1.wav");
135
136  this->setCapability(WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
137  this->setProjectileType(CL_LASER);
138  this->prepareProjectiles(20);
139
140}
141
142
143void TestGun::loadParams(const TiXmlElement* root)
144{
145
146
147}
148
149
150/**
151 *  this activates the weapon
152
153   This is needed, since there can be more than one weapon on a ship. the
154   activation can be connected with an animation. for example the weapon is
155   been armed out.
156*/
157void TestGun::activate()
158{
159}
160
161
162/**
163 *  this deactivates the weapon
164
165   This is needed, since there can be more than one weapon on a ship. the
166   activation can be connected with an animation. for example the weapon is
167   been armed out.
168*/
169void TestGun::deactivate()
170{
171}
172
173
174/**
175 *  fires the weapon
176
177   this is called from the player.cc, when fire-button is been pushed
178   @todo: the ObjectManager deliveres Projectiles not TestBullets! this should be diffrent
179*/
180void TestGun::fire()
181{
182  Projectile* pj =  this->getProjectile();
183  if (pj == NULL)
184    return;
185
186  pj->setParent(NullParent::getInstance());
187
188  pj->setVelocity(this->getVelocity() + this->getAbsDir().apply(Vector(1,0,0))*20);
189
190  pj->setAbsCoor(this->getEmissionPoint());
191  pj->setAbsDir(this->getAbsDir());
192  pj->activate();
193}
194
195
196/**
197 *  is called, when the weapon gets hit (=collide with something)
198 * @param from which entity it is been hit
199 * @param where it is been hit
200
201   this may not be used, since it would make the game relay complicated when one
202   can destroy the weapons of enemies or vice versa.
203*/
204void TestGun::hit (WorldEntity* entity, Vector* position)
205{}
206
207
208/**
209 *  is called, when the weapon is destroyed
210
211   this is in conjunction with the hit function, so when a weapon is able to get
212   hit, it can also be destoryed.
213*/
214void TestGun::destroy ()
215{}
216
217/**
218 *  this will draw the weapon
219*/
220void TestGun::draw ()
221{
222  /* draw gun body */
223  glMatrixMode(GL_MODELVIEW);
224  glPushMatrix();
225  glTranslatef (this->getAbsCoor ().x,
226                this->getAbsCoor ().y,
227                this->getAbsCoor ().z);
228
229  Vector tmpRot = this->getAbsDir().getSpacialAxis();
230  glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
231
232  if( this->leftRight == W_RIGHT)
233    glScalef(1.0, 1.0, -1.0);
234  this->model->draw(1);
235  glPopMatrix();
236
237  /* draw objectComponent1: gun coil - animated stuff */
238  glMatrixMode(GL_MODELVIEW);
239  glPushMatrix();
240  glTranslatef (this->objectComponent1->getAbsCoor ().x,
241                this->objectComponent1->getAbsCoor ().y,
242                this->objectComponent1->getAbsCoor ().z);
243  tmpRot = this->objectComponent1->getAbsDir().getSpacialAxis();
244  glRotatef (this->objectComponent1->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
245  this->model->draw(0);
246  glPopMatrix();
247}
248
Note: See TracBrowser for help on using the repository browser.