Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/new_class_id/src/lib/physics/physics_connection.cc @ 9727

Last change on this file since 9727 was 9727, checked in by bensch, 18 years ago

orxonox/new_class_id: new Executor construct, that is much more typesafe, faster, and easier to extend…

Also changed the LoadParam process, and adapted ScriptEngine calls

Then at the end, some missing headers appeared, and appended them to all the cc-files again.

File size: 2.8 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: Benjamin Grauer
13   co-programmer: ...
14*/
15
16#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_PHYSICS
17
18#include "physics_connection.h"
19
20#include "physics_engine.h"
21#include "debug.h"
22
23#include "field.h"
24#include "particle_system.h"
25#include "physics_interface.h"
26
27#include "util/loading/factory.h"
28#include "util/loading/load_param.h"
29
30#include "class_id_DEPRECATED.h"
31ObjectListDefinition(PhysicsConnection);
32CREATE_FACTORY(PhysicsConnection);
33/**
34 *  creates a PhysicsConnection
35*/
36PhysicsConnection::PhysicsConnection(PhysicsInterface* subject, Field* field)
37{
38  this->registerObject(this, PhysicsConnection::_objectList);
39  this->type = PCON_PhysIField;
40
41  this->subject = subject;
42  this->field = field;
43
44  PhysicsEngine::getInstance()->addConnection(this);
45}
46
47PhysicsConnection::PhysicsConnection(const TiXmlElement* root)
48{
49  this->registerObject(this, PhysicsConnection::_objectList);
50  this->type = PCON_PhysIField;
51
52  BaseObject::loadParams(root);
53
54  LoadParam(root, "subject", this, PhysicsConnection, setSubject)
55      .describe("set the subject by a name");
56
57  LoadParam(root, "field", this, PhysicsConnection, setField)
58      .describe("set the field by name");
59
60  PhysicsEngine::getInstance()->addConnection(this);
61}
62
63/**
64 *  standard deconstructor
65
66*/
67PhysicsConnection::~PhysicsConnection ()
68{
69  PhysicsEngine::getInstance()->removeConnection(this);
70}
71
72/**
73 * @param subjectName the name of the Subject for this PhysicsConnection
74*/
75void PhysicsConnection::setSubject(const std::string& subjectName)
76{
77  this->subject = PhysicsEngine::getInstance()->getPhysicsInterfaceByName(subjectName);
78  if (this->subject == NULL)
79  {
80    PRINTF(2)("subject: (%s) not found for PhysicsConnection\n", subjectName.c_str());
81  }
82  else
83    PRINTF(5)("subject::%s\n", this->subject->getCName());
84}
85
86/**
87* @param fieldName the Name of the Field for this connection
88*/
89void PhysicsConnection::setField(const std::string& fieldName)
90{
91  this->field = PhysicsEngine::getInstance()->getFieldByName(fieldName);
92  if (this->field == NULL)
93  {
94    PRINTF(2)("field: (%s) not found for PhysicsConnection\n", fieldName.c_str());
95  }
96  else
97    PRINTF(5)("field::%s\n", this->field->getCName());
98
99}
100
101/**
102  *  applies the Force to some Object.
103*/
104void PhysicsConnection::apply() const
105{
106  if (likely(this->type == PCON_PhysIField && this->field->getMagnitude() != 0.0
107      && this->subject != NULL && this->field != NULL))
108      this->subject->applyField(this->field);
109  else ;
110}
Note: See TracBrowser for help on using the repository browser.