Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

orxonox/trunk: heavy ParticleEmission from the Bullets

@patrick: i think, this is what you wanted me to do…

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#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, .3);
125  this->setStateDuration(WS_RELOADING, .5);
126  this->setStateDuration(WS_ACTIVATING, .4);
127  this->setStateDuration(WS_DEACTIVATING, .4);
128
129  this->setMaximumEnergy(1000, 100);
130  this->increaseEnergy(1000);
131  //this->minCharge = 2;
132
133  this->setActionSound(WA_SHOOT, "sound/shot1.wav");
134
135  this->setCapability(WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
136  this->setProjectileType(CL_TEST_BULLET);
137  this->prepareProjectiles(20);
138}
139
140
141void TestGun::loadParams(const TiXmlElement* root)
142{
143
144
145}
146
147
148/**
149 *  this activates the weapon
150
151   This is needed, since there can be more than one weapon on a ship. the
152   activation can be connected with an animation. for example the weapon is
153   been armed out.
154*/
155void TestGun::activate()
156{
157}
158
159
160/**
161 *  this deactivates the weapon
162
163   This is needed, since there can be more than one weapon on a ship. the
164   activation can be connected with an animation. for example the weapon is
165   been armed out.
166*/
167void TestGun::deactivate()
168{
169}
170
171
172/**
173 *  fires the weapon
174
175   this is called from the player.cc, when fire-button is been pushed
176   @todo: the ObjectManager deliveres Projectiles not TestBullets! this should be diffrent
177*/
178void TestGun::fire()
179{
180  Projectile* pj =  this->getProjectile();
181  if (pj == NULL)
182    return;
183
184  pj->setParent(NullParent::getInstance());
185
186  pj->setVelocity(this->getVelocity() + this->getAbsDir().apply(Vector(1,0,0))*20);
187
188  pj->setAbsCoor(this->getEmissionPoint());
189  pj->setAbsDir(this->getAbsDir());
190  pj->activate();
191}
192
193
194/**
195 *  is called, when the weapon gets hit (=collide with something)
196 * @param from which entity it is been hit
197 * @param where it is been hit
198
199   this may not be used, since it would make the game relay complicated when one
200   can destroy the weapons of enemies or vice versa.
201*/
202void TestGun::hit (WorldEntity* entity, Vector* position)
203{}
204
205
206/**
207 *  is called, when the weapon is destroyed
208
209   this is in conjunction with the hit function, so when a weapon is able to get
210   hit, it can also be destoryed.
211*/
212void TestGun::destroy ()
213{}
214
215/**
216 *  this will draw the weapon
217*/
218void TestGun::draw ()
219{
220  /* draw gun body */
221  glMatrixMode(GL_MODELVIEW);
222  glPushMatrix();
223  glTranslatef (this->getAbsCoor ().x,
224                this->getAbsCoor ().y,
225                this->getAbsCoor ().z);
226
227  Vector tmpRot = this->getAbsDir().getSpacialAxis();
228  glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
229
230  if( this->leftRight == W_RIGHT)
231    glScalef(1.0, 1.0, -1.0);
232  this->model->draw(1);
233  glPopMatrix();
234
235  /* draw objectComponent1: gun coil - animated stuff */
236  glMatrixMode(GL_MODELVIEW);
237  glPushMatrix();
238  glTranslatef (this->objectComponent1->getAbsCoor ().x,
239                this->objectComponent1->getAbsCoor ().y,
240                this->objectComponent1->getAbsCoor ().z);
241  tmpRot = this->objectComponent1->getAbsDir().getSpacialAxis();
242  glRotatef (this->objectComponent1->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
243  this->model->draw(0);
244  glPopMatrix();
245}
246
Note: See TracBrowser for help on using the repository browser.