00001 /* 00002 SagaEngine library 00003 Copyright (c) 2002-2006 Skalden Studio AS 00004 00005 This software is provided 'as-is', without any express or implied 00006 warranty. In no event will the authors be held liable for any 00007 damages arising from the use of this software. 00008 00009 Permission is granted to distribute the library under the terms of the 00010 Q Public License version 1.0. Be sure to read and understand the license 00011 before using the library. It should be included here, or you may read it 00012 at http://www.trolltech.com/products/qt/licenses/licensing/qpl 00013 00014 The original version of this library can be located at: 00015 http://www.sagaengine.com/ 00016 00017 Rune Myrland 00018 rune@skalden.com 00019 */ 00020 00021 00022 #include "PhysicsAreaComponent.hpp" 00023 #include "PhysicsManager.hpp" 00024 #include "../schema/SimSchema.hpp" 00025 #include "comp/list/NodeComponentList.hpp" 00026 #include "../react/CollisionAreaComponent.hpp" 00027 #include "../react/CollisionComponent.hpp" 00028 #include "util/error/Log.hpp" 00029 #include "util/bounds/BoundingBox.hpp" 00030 #include "../thing/Actor.hpp" 00031 00032 00033 00034 namespace se_core { 00035 00036 PhysicsAreaComponent 00037 ::PhysicsAreaComponent(Composite* owner, CollisionAreaComponent* cac) 00038 : NodeComponent(sct_PHYSICS, owner) 00039 , collisionAreaComponent_(cac) 00040 , moverCount_(0) { 00041 } 00042 00043 00044 PhysicsAreaComponent 00045 ::~PhysicsAreaComponent() { 00046 } 00047 00048 00049 void PhysicsAreaComponent 00050 ::flipChildren() { 00051 if(children_.isEmpty()) 00052 return; 00053 00054 NodeComponentList::TreeIterator it(children()); 00055 while(it.hasNext()) { 00056 PhysicsComponent& ph = static_cast<PhysicsComponent&>(it.next()); 00057 PosComponent* p = ph.posComponent_; //SimSchema::simObjectList.nextPosNode(itStack [ sp ]); 00058 Assert(p); 00059 00060 // Do the flip 00061 ph.flip(); 00062 } 00063 } 00064 00065 00066 void PhysicsAreaComponent 00067 ::setActive(bool state) { 00068 if(state) { 00069 PhysicsManager::singleton().setSolverActive(this); 00070 } 00071 else { 00072 moverCount_ = 0; 00073 PhysicsManager::singleton().setSolverInactive(this); 00074 } 00075 } 00076 00077 00078 int PhysicsAreaComponent 00079 ::performChildPhysics(PhysicsComponent** movers) { 00080 int moverCount = 0; 00081 NodeComponentList::TreeIterator it(children()); 00082 while(it.hasNext()) { 00083 PhysicsComponent& ph = static_cast<PhysicsComponent&>(it.next()); 00084 00085 // Calc next position 00086 ph.calcNextCoor(); 00087 movers[moverCount++] = &ph; 00088 } 00089 return moverCount; 00090 } 00091 00092 00093 void PhysicsAreaComponent 00094 ::affectChildren() { 00095 NodeComponentList::TreeIterator it(children()); 00096 while(it.hasNext()) { 00097 PhysicsComponent& ph = static_cast<PhysicsComponent&>(it.next()); 00098 ph.affect(); 00099 } 00100 } 00101 00102 00103 }
Home Page | SagaEngine trunk (updated nightly) reference generated Sun Dec 2 20:06:11 2007 by Doxygen version 1.3.9.1.