/*==LICENSE==* CyanWorlds.com Engine - MMOG client, server and tools Copyright (C) 2011 Cyan Worlds, Inc. This program 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 3 of the License, or (at your option) any later version. This program 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 this program. If not, see . You can contact Cyan Worlds, Inc. by email legal@cyan.com or by snail mail at: Cyan Worlds, Inc. 14617 N Newport Hwy Mead, WA 99021 *==LICENSE==*/ #ifndef _pySceneObject_h_ #define _pySceneObject_h_ ////////////////////////////////////////////////////////////////////// // // pySceneObject - a wrapper class to provide interface to modifier // attached to a SceneObject // ////////////////////////////////////////////////////////////////////// #include "pyKey.h" #include "cyDraw.h" #include "cyPhysics.h" #include "cyAvatar.h" #include "cyParticleSys.h" #include "hsStlUtils.h" #include #include "pyGlueHelpers.h" class pySceneObject { private: hsTArray fSceneObjects; plKey fSenderKey; // the holder of the who (the modifier) we are plKey fPyMod; // pyKey that points to modifier hsBool fNetForce; virtual void IAddObjKeyToAll(plKey key); virtual void ISetAllSenderKeys(); protected: pySceneObject(); pySceneObject(pyKey& objkey, pyKey& selfkey); pySceneObject(plKey objkey,pyKey& selfkey); pySceneObject(plKey objkey); public: ~pySceneObject() {Py_XDECREF(fDraw); Py_XDECREF(fPhysics); Py_XDECREF(fAvatar); Py_XDECREF(fParticle);} // required functions for PyObject interoperability PYTHON_CLASS_NEW_FRIEND(ptSceneobject); static PyObject *New(plKey objKey, PyObject *selfKeyObj); static PyObject *New(plKey objKey, pyKey &selfKey); static PyObject *New(plKey objKey, plKey selfkey); static PyObject *New(plKey objKey); PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pySceneObject object PYTHON_CLASS_CONVERT_FROM_DEFINITION(pySceneObject); // converts a PyObject to a pySceneObject (throws error if not correct type) static void AddPlasmaClasses(PyObject *m); // override the equals to operator hsBool operator==(const pySceneObject &sobj) const; hsBool operator!=(const pySceneObject &sobj) const { return !(sobj == *this); } PyObject* fDraw; // cyDraw PyObject* fPhysics; // cyPhysics PyObject* fAvatar; // cyAvatar PyObject* fParticle; // cyParticleSys // getter and setters virtual void addObjKey(plKey key); virtual void addObjPyKey(pyKey& objkey); virtual plKey getObjKey(); virtual PyObject* getObjPyKey(); // pyKey virtual void setSenderKey(plKey key); virtual void setPyMod(pyKey& pymod); virtual void setPyMod(plKey& key); virtual void SetNetForce(hsBool state); virtual PyObject* findObj(const char* name); // pySceneObject virtual const char* GetName(); virtual std::vector GetResponders(); // pyKey list virtual std::vector GetPythonMods(); // pyKey list // // deteremine if this object (or the first object in the list) // ...is locally owned virtual hsBool IsLocallyOwned(); // // get the local to world matrix virtual PyObject* GetLocalToWorld(); // // get the local to world matrix virtual PyObject* GetWorldToLocal(); // // get the local to world matrix virtual PyObject* GetLocalToParent(); // // get the local to world matrix virtual PyObject* GetParentToLocal(); // // set the local to world matrix virtual void SetTransform(pyMatrix44& l2w, pyMatrix44& w2l); // // find the position of this object (if there are more than one, just the first one) virtual PyObject* GetWorldPosition(); // pyPoint3 // // find the view vector for this object (if there are more than one, just the first one) virtual PyObject* GetViewVector(); // pyVector3 // // find the up vector for this object (if there are more than one, just the first one) virtual PyObject* GetUpVector(); // pyVector3 // // find the up vector for this object (if there are more than one, just the first one) virtual PyObject* GetRightVector(); // pyVector3 // // deteremine if this object (or any of the object attached) // ...is an avatar, of any type virtual hsBool IsAvatar(); virtual PyObject* GetAvatarVelocity(); // pyVector3 // // deteremine if this object (or the first object in the list) // ...is a human avatar virtual hsBool IsHumanAvatar(); // // switch to / from this camera (if it is a camera) // void PushCamera(pyKey& avKey); void PushCameraCut(pyKey& avKey); void PopCamera(pyKey& avKey); void PushCutsceneCamera(hsBool cut,pyKey& avKey); void PopCutsceneCamera(pyKey& avKey); void Animate(); // return responder state (if responder modifier found) Int8 GetResponderState(); // some animation commands for s.o.'s w/ multiple animations attached void RewindAnim(const char* animName); void PlayAnim(const char* animName); void StopAnim(const char* animName); void RunResponder(int state); void FFResponder(int state); void SetSoundFilename(int index, const char* filename, bool isCompressed); int GetSoundObjectIndex(const char* sndObj); // hack for garrison void VolumeSensorIgnoreExtraEnters(bool ignore); }; #endif // _pySceneObject_h_