From 0ea5fc66924303d1bf73ba283a383e2aadee02f2 Mon Sep 17 00:00:00 2001 From: neodarz Date: Sat, 11 Aug 2018 20:21:34 +0200 Subject: Initial commit --- .../x-cvsweb-markup&sortby=date/index.html | 229 +++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 cvs/cvsweb.cgi/code/nel/samples/pacs/object.cpp?rev=1.2&content-type=text/x-cvsweb-markup&sortby=date/index.html (limited to 'cvs/cvsweb.cgi/code/nel/samples/pacs/object.cpp?rev=1.2&content-type=text/x-cvsweb-markup&sortby=date/index.html') diff --git a/cvs/cvsweb.cgi/code/nel/samples/pacs/object.cpp?rev=1.2&content-type=text/x-cvsweb-markup&sortby=date/index.html b/cvs/cvsweb.cgi/code/nel/samples/pacs/object.cpp?rev=1.2&content-type=text/x-cvsweb-markup&sortby=date/index.html new file mode 100644 index 00000000..68c678e0 --- /dev/null +++ b/cvs/cvsweb.cgi/code/nel/samples/pacs/object.cpp?rev=1.2&content-type=text/x-cvsweb-markup&sortby=date/index.html @@ -0,0 +1,229 @@ + + + +code/nel/samples/pacs/object.cpp - view - 1.2 + +
[BACK] Return to object.cpp + CVS log [TXT][DIR] Up to Nevrax / code / nel / samples / pacs

File: Nevrax / code / nel / samples / pacs / object.cpp (download)
+Revision 1.2, Wed Feb 20 18:07:14 2002 UTC (5 months ago) by lecroart +
Branch: MAIN +
CVS Tags: georges_v2, HEAD
Changes since 1.1: +2 -2 + lines
+#FIXED: doxygen warning
+
+

/** \file net_layer5/object.cpp
+ * Objects for the sample. Link between 3d instance and collision primitives.
+ *
+ * $Id: object.cpp,v 1.2 2002/02/20 18:07:14 lecroart Exp $
+ */
+
+/* Copyright, 2001 Nevrax Ltd.
+ *
+ * This file is part of NEVRAX NEL.
+ * NEVRAX NEL is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+
+ * NEVRAX NEL is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with NEVRAX NEL; see the file COPYING. If not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+#include "object.h"
+
+// Pacs includes
+#include <nel/pacs/u_move_container.h>
+#include <nel/pacs/u_move_primitive.h>
+
+// 3d includes
+#include <nel/3d/u_scene.h>
+#include <nel/3d/u_instance.h>
+
+// Misc includes
+#include <nel/misc/vectord.h>
+
+#define BRAKE_FORCE (-0.1) // (m.s-2)
+#define GRAVITY_FORCE (-15.0)
+#define SHOCK_ABSORB (1.0)              //
+
+using namespace NL3D;
+using namespace NLNET;
+using namespace NLMISC;
+using namespace NLPACS;
+
+// ***************************************************************************
+
+CObjectDyn::CObjectDyn (double width, double depth, double height, double orientation, const CVectorD& pos, 
+                                 const CVectorD& speed, bool obstacle, UMoveContainer &container, UScene &scene, 
+                                 UMovePrimitive::TReaction reaction, uint8 worldImage, uint8 nbImage, uint8 insertWorldImage)
+{
+        // Create a box instance
+        _Instance = scene.createInstance ("rectangle.shape");
+        nlassert (_Instance);
+
+        // Setup the instance
+        _Instance->setScale (CVectorD (width, depth, height));
+        _Instance->setRotQuat (CQuat (CVectorD (0, 0, 1), (float)orientation));
+
+        // Create a collision volume
+        _MovePrimitive = container.addCollisionablePrimitive (worldImage, nbImage);
+        _MovePrimitive->insertInWorldImage (insertWorldImage);
+
+        // Setup the collision primitive
+        _MovePrimitive->setPrimitiveType (UMovePrimitive::_2DOrientedBox);
+        _MovePrimitive->setHeight ((float)height);
+        _MovePrimitive->setOrientation (orientation, insertWorldImage);
+        _MovePrimitive->setSize ((float)width, (float)depth);
+
+         // This primitive is an obstacle (it blocks others)
+        _MovePrimitive->setObstacle (obstacle);
+
+         // Setup reaction type
+        _MovePrimitive->setReactionType (reaction);
+
+        // Setup absorption value
+        _MovePrimitive->setAbsorbtion (0.9f);
+
+        // Setup user data
+        _MovePrimitive->UserData=(uint)this;
+
+        // Setup trigger type
+        _MovePrimitive->setTriggerType (UMovePrimitive::EnterTrigger);
+
+        // Set pos and speed
+        setPos (pos);
+        setSpeed (speed);
+
+        _MovePrimitive->setGlobalPosition (pos, insertWorldImage);
+}
+
+// ***************************************************************************
+
+CObjectDyn::CObjectDyn (double diameter, double height, const CVectorD& pos, const CVectorD& speed, 
+        bool obstacle, UMoveContainer &container, UScene &scene, UMovePrimitive::TReaction reaction, 
+        uint8 worldImage, uint8 nbImage, uint8 insertWorldImage)
+{
+        // Create a box instance
+        _Instance = scene.createInstance ("cylinder.shape");
+        nlassert (_Instance);
+
+        // Setup the instance
+        _Instance->setScale (CVectorD (diameter, diameter, height));
+
+        // Create a collision volume
+        _MovePrimitive = container.addCollisionablePrimitive (worldImage, nbImage);
+        _MovePrimitive->insertInWorldImage (insertWorldImage);
+
+        // Setup the primitive
+        _MovePrimitive->setPrimitiveType (UMovePrimitive::_2DOrientedCylinder);
+        _MovePrimitive->setHeight ((float)height);
+        _MovePrimitive->setRadius ((float)diameter/2.f);
+
+        // This primitive is an obstacle (it blocks others)
+        _MovePrimitive->setObstacle (true);
+
+        // Setup reaction type
+        _MovePrimitive->setReactionType (reaction);
+
+        // Setup reaction type
+        _MovePrimitive->setAbsorbtion (0.9f);
+
+        // Setup user data
+        _MovePrimitive->UserData=(uint)this;
+
+        // Setup trigger type
+        _MovePrimitive->setTriggerType (UMovePrimitive::EnterTrigger);
+
+        // Set pos and speed
+        setPos (pos);
+        setSpeed (speed);
+        _MovePrimitive->setGlobalPosition (pos, insertWorldImage);
+}
+
+// ***************************************************************************
+
+void CObjectDyn::tryMove (double deltaTime, UMoveContainer &container, uint8 worldImage)
+{
+        // New speed
+        if ( (_MovePrimitive->getSpeed(worldImage).norm()>0.f) || _Speed.norm()>0.f )
+        {
+                // Brake
+                CVectorD newSpeed=_Speed;
+                newSpeed.normalize();
+                newSpeed*=BRAKE_FORCE*deltaTime;
+                newSpeed+=_Speed;
+
+                // Stop ?
+                if (_Speed*newSpeed<=0)
+                        newSpeed=CVectorD (0,0,0);
+
+                // Set speed
+                setSpeed (newSpeed);
+
+                // Try this move
+                _MovePrimitive->move (_Speed, worldImage);
+                _TryMove=true;
+        }
+        else
+                _TryMove=false;
+
+}
+
+// ***************************************************************************
+
+void CObjectDyn::doMove (double deltaTime, uint8 worldImage)
+{
+        // New speed
+        setSpeed (_MovePrimitive->getSpeed(worldImage));
+
+        // New position
+        setPos (_MovePrimitive->getFinalPosition (worldImage));
+}
+
+// ***************************************************************************
+
+void CObjectDyn::setPos (const CVectorD& pos)
+{
+        _Position=pos;
+        if (_Instance)
+                _Instance->setPos (pos);
+}
+
+// ***************************************************************************
+
+void CObjectDyn::setGlobalPos (UGlobalPosition& gpos, CVectorD& pos, uint8 worldimage)
+{
+        // Place the primitive the first time
+        _MovePrimitive->setGlobalPosition (gpos, worldimage);
+        setPos (pos);
+}
+
+// ***************************************************************************
+
+void CObjectDyn::setSpeed (const CVectorD& speed)
+{
+        _Speed=speed;
+}
+
+// ***************************************************************************
+
+void CObjectDyn::remove (NLPACS::UMoveContainer &container, UScene &scene)
+{
+        // Remove from container
+        container.removePrimitive (_MovePrimitive);
+
+        // Remove instance
+        if (_Instance)
+                scene.deleteInstance (_Instance);
+}
+
+// ***************************************************************************
+
+
\ No newline at end of file -- cgit v1.2.1