annotate src/CollisionDetector.cpp @ 13:39e0c583e0a3 default tip

add GiantroboClassfile.
author tokumoritaichirou@w-133-13-243-110.cc.u-ryukyu.ac.jp
date Wed, 03 Feb 2010 18:37:01 +0900
parents 5727d511a13a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
1 /*
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
2 * CollisionDetector.cpp
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
3 * Martial
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
4 *
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
5 * Created by ryoma on 10/01/26.
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
6 * Copyright 2010 琉球大学. All rights reserved.
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
7 *
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
8 */
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
9
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
10 #include "CollisionDetector.h"
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
11
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
12 void CollisionDetector::addCollisionObject(CollisionObject* cobj) {
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
13 collisionObjectList.push_back(cobj);
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
14 }
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
15
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
16 void CollisionDetector::detectCollision(CollisionNode* cn1, CollisionNode* cn2) {
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
17 cn1->setCollision(true);
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
18 cn2->setCollision(true);
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
19 }
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
20
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
21 void CollisionDetector::checkCollision(CollisionObject* co1, CollisionObject* co2) {
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
22 std::list<CollisionNode*> collisionNodeList1, collisionNodeList2;
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
23 collisionNodeList1 = co1->getCollisionNodeList();
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
24 collisionNodeList2 = co2->getCollisionNodeList();
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
25 osg::NodePath npl1 , npl2;
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
26 osg::Matrix m1, m2;
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
27 std::list<CollisionNode*>::iterator node1, node2;
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
28 for(node1 = collisionNodeList1.begin(); node1 != collisionNodeList1.end(); ++node1) {
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
29 for(node2 = collisionNodeList2.begin(); node2 != collisionNodeList2.end(); ++node2) {
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
30 npl1 = (*node1)->getNodePath();
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
31 npl2 = (*node2)->getNodePath();
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
32 //衝突判定
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
33 m1 = osg::computeLocalToWorld(npl1);
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
34 m2 = osg::computeLocalToWorld(npl2);
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
35 if ((*node1)->getBound(m1).intersects((*node2)->getBound(m2))) {
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
36 if (Martial::TEST::SHOW_COLLISION) printf("collision!! %s->[%s] & %s->[%s]\n", co1->getName(), (*node1)->getName(),
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
37 co2->getName(), (*node2)->getName());
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
38 detectCollision(*node1, *node2);
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
39 }
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
40 }
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
41 }
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
42 }
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
43
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
44 void CollisionDetector::frame() {
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
45 std::list<CollisionObject*>::iterator iter1, iter2;
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
46 iter1 = collisionObjectList.begin();
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
47 iter2 = iter1;
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
48 float length;
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
49 osg::Vec3 v1, v2;
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
50
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
51 for(++iter1; iter1 != collisionObjectList.end(); ++iter1) {
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
52 length = ((*iter1)->getPos()-(*iter2)->getPos()).length();
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
53 if (length <= 3.0) {
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
54 if (Martial::TEST::SHOW_COLLISION) printf("%s close to %s (%.3f), check collision..\n", (*iter2)->getName(), (*iter1)->getName(), length);
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
55 checkCollision(*iter1, *iter2);
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
56 }
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
57 iter2 = iter1;
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
58 }
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
59 }
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
60 /*
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
61 startFrameTick = osg::Timer::instance()->tick();
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
62
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
63 //SceneGraphの走査 -> 座標計算, 衝突判定
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
64 //衝突処理はcheckCollision内部で行なう?(未実装)
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
65 for(mobIter = movableObjectList.begin(); mobIter != movableObjectList.end(); ++mobIter) {
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
66 (*mobIter)->reload();
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
67 //このcheckCollisionは、後に削除
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
68 //CollisionDetectorクラスを定義し、そこでcheckCollsionすることに
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
69 (*mobIter)->checkCollision();
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
70 }
5727d511a13a add src in Martial Project Xcode.
tokumoritaichirou@nw0743.st.ie.u-ryukyu.ac.jp
parents:
diff changeset
71 */