Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/height_map/src/world_entities/npcs/npc.cc @ 6472

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

orxonox/trunk: multiple new Reparenting modes in PNode.
Testing the stuff in GuidedMissile
Projectile has a PNode as reference not as pointer
some minor weapon changes

File size: 1.7 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#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
18
19
20#include "npc.h"
21#include "obb_tree.h"
22
23#include "state.h"
24#include "list.h"
25#include "stdlibincl.h"
26#include "power_ups/turret_power_up.h"
27#include "power_ups/laser_power_up.h"
28
29using namespace std;
30
31
32NPC::NPC()
33{
34  this->setClassID(CL_NPC, "NPC");
35
36}
37
38
39NPC::~NPC () {}
40
41
42void NPC::collidesWith(WorldEntity* entity, const Vector& location)
43{
44  if (entity->isA(CL_PROJECTILE) && entity != this->collider)
45  {
46//    PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getName(), entity->getName(), location.x, location.y, location.z);
47//    this->applyForce(Vector(0,0,0)-location*1000);
48    if ((float)rand()/RAND_MAX < .3)
49    {
50      WorldEntity* powerUp = new TurretPowerUp();
51      powerUp->setAbsCoor(this->getAbsCoor());
52      State::getWorldEntityList()->add(powerUp);
53    }
54    else if ((float)rand()/RAND_MAX < .3)
55    {
56      WorldEntity* powerUp = new LaserPowerUp();
57      powerUp->setAbsCoor(this->getAbsCoor());
58      State::getWorldEntityList()->add(powerUp);
59    }
60    State::getWorldEntityList()->remove(this);
61    this->removeNode();
62
63      this->collider = entity;
64  }
65  else if (entity->isA(CL_PLAYER))
66    this->applyForce(Vector(0,0,0)-location*100);
67  else if (entity->isA(CL_NPC))
68  {
69    this->setVisibiliy(false);
70    State::getWorldEntityList()->remove(this);
71    this->removeNode();
72  }
73}
Note: See TracBrowser for help on using the repository browser.