Changeset View
Changeset View
Standalone View
Standalone View
source/gameengine/GameLogic/SCA_NetworkMessageSensor.cpp
- This file was moved from source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp.
| Show All 17 Lines | |||||
| * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. | * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. | ||||
| * All rights reserved. | * All rights reserved. | ||||
| * | * | ||||
| * The Original Code is: all of this file. | * The Original Code is: all of this file. | ||||
| * | * | ||||
| * Contributor(s): none yet. | * Contributor(s): none yet. | ||||
| * | * | ||||
| * ***** END GPL LICENSE BLOCK ***** | * ***** END GPL LICENSE BLOCK ***** | ||||
| * Ketsji Logic Extension: Network Message Sensor generic implementation | * Network Message Sensor generic implementation | ||||
| */ | */ | ||||
| /** \file gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp | /** \file gameengine/Gamelogic/SCA_NetworkMessageSensor.cpp | ||||
| * \ingroup ketsjinet | * \ingroup gamelogic | ||||
| */ | */ | ||||
| #include <stddef.h> | #include <stddef.h> | ||||
| #include "KX_NetworkMessageSensor.h" | #include "SCA_NetworkMessageSensor.h" | ||||
| #include "KX_NetworkEventManager.h" | #include "SCA_NetworkEventManager.h" | ||||
| #include "NG_NetworkMessage.h" | #include "NG_NetworkMessage.h" | ||||
| #include "NG_NetworkScene.h" | #include "NG_NetworkScene.h" | ||||
| #include "NG_NetworkObject.h" | #include "NG_NetworkObject.h" | ||||
| #include "SCA_IObject.h" | #include "SCA_IObject.h" | ||||
| #include "InputParser.h" | #include "InputParser.h" | ||||
| #include "ListValue.h" | #include "ListValue.h" | ||||
| #include "StringValue.h" | #include "StringValue.h" | ||||
| #ifdef NAN_NET_DEBUG | #ifdef NAN_NET_DEBUG | ||||
| #include <iostream> | #include <iostream> | ||||
| #endif | #endif | ||||
| KX_NetworkMessageSensor::KX_NetworkMessageSensor( | SCA_NetworkMessageSensor::SCA_NetworkMessageSensor( | ||||
| class KX_NetworkEventManager* eventmgr, // our eventmanager | class SCA_NetworkEventManager* eventmgr, // our eventmanager | ||||
| class NG_NetworkScene *NetworkScene, // our scene | class NG_NetworkScene *NetworkScene, // our scene | ||||
| SCA_IObject* gameobj, // the sensor controlling object | SCA_IObject* gameobj, // the sensor controlling object | ||||
| const STR_String &subject | const STR_String &subject | ||||
| ) : | ) : | ||||
| SCA_ISensor(gameobj,eventmgr), | SCA_ISensor(gameobj,eventmgr), | ||||
| m_NetworkScene(NetworkScene), | m_NetworkScene(NetworkScene), | ||||
| m_subject(subject), | m_subject(subject), | ||||
| m_frame_message_count (0), | m_frame_message_count (0), | ||||
| m_BodyList(NULL), | m_BodyList(NULL), | ||||
| m_SubjectList(NULL) | m_SubjectList(NULL) | ||||
| { | { | ||||
| Init(); | Init(); | ||||
| } | } | ||||
| void KX_NetworkMessageSensor::Init() | void SCA_NetworkMessageSensor::Init() | ||||
| { | { | ||||
| m_IsUp = false; | m_IsUp = false; | ||||
| } | } | ||||
| KX_NetworkMessageSensor::~KX_NetworkMessageSensor() | SCA_NetworkMessageSensor::~SCA_NetworkMessageSensor() | ||||
| { | { | ||||
| } | } | ||||
| CValue* KX_NetworkMessageSensor::GetReplica() | CValue* SCA_NetworkMessageSensor::GetReplica() | ||||
| { | { | ||||
| // This is the standard sensor implementation of GetReplica | // This is the standard sensor implementation of GetReplica | ||||
| // There may be more network message sensor specific stuff to do here. | // There may be more network message sensor specific stuff to do here. | ||||
| CValue* replica = new KX_NetworkMessageSensor(*this); | CValue* replica = new SCA_NetworkMessageSensor(*this); | ||||
| if (replica == NULL) return NULL; | if (replica == NULL) return NULL; | ||||
| replica->ProcessReplica(); | replica->ProcessReplica(); | ||||
| return replica; | return replica; | ||||
| } | } | ||||
| // Return true only for flank (UP and DOWN) | // Return true only for flank (UP and DOWN) | ||||
| bool KX_NetworkMessageSensor::Evaluate() | bool SCA_NetworkMessageSensor::Evaluate() | ||||
| { | { | ||||
| bool result = false; | bool result = false; | ||||
| bool WasUp = m_IsUp; | bool WasUp = m_IsUp; | ||||
| m_IsUp = false; | m_IsUp = false; | ||||
| if (m_BodyList) { | if (m_BodyList) { | ||||
| m_BodyList->Release(); | m_BodyList->Release(); | ||||
| Show All 10 Lines | bool SCA_NetworkMessageSensor::Evaluate() | ||||
| vector<NG_NetworkMessage*> messages = | vector<NG_NetworkMessage*> messages = | ||||
| m_NetworkScene->FindMessages(toname,"",subject,true); | m_NetworkScene->FindMessages(toname,"",subject,true); | ||||
| m_frame_message_count = messages.size(); | m_frame_message_count = messages.size(); | ||||
| if (!messages.empty()) { | if (!messages.empty()) { | ||||
| #ifdef NAN_NET_DEBUG | #ifdef NAN_NET_DEBUG | ||||
| printf("KX_NetworkMessageSensor found one or more messages\n"); | printf("SCA_NetworkMessageSensor found one or more messages\n"); | ||||
| #endif | #endif | ||||
| m_IsUp = true; | m_IsUp = true; | ||||
| m_BodyList = new CListValue(); | m_BodyList = new CListValue(); | ||||
| m_SubjectList = new CListValue(); | m_SubjectList = new CListValue(); | ||||
| } | } | ||||
| vector<NG_NetworkMessage*>::iterator mesit; | vector<NG_NetworkMessage*>::iterator mesit; | ||||
| for (mesit=messages.begin();mesit!=messages.end();mesit++) | for (mesit=messages.begin();mesit!=messages.end();mesit++) | ||||
| Show All 22 Lines | #endif | ||||
| if (m_IsUp) | if (m_IsUp) | ||||
| return true; | return true; | ||||
| // Is it useful to return also true when the first frame without a message?? | // Is it useful to return also true when the first frame without a message?? | ||||
| // This will cause a fast on/off cycle that seems useless! | // This will cause a fast on/off cycle that seems useless! | ||||
| return result; | return result; | ||||
| } | } | ||||
| // return true for being up (no flank needed) | // return true for being up (no flank needed) | ||||
| bool KX_NetworkMessageSensor::IsPositiveTrigger() | bool SCA_NetworkMessageSensor::IsPositiveTrigger() | ||||
| { | { | ||||
| // printf("KX_NetworkMessageSensor IsPositiveTrigger\n"); | //printf("SCA_NetworkMessageSensor IsPositiveTrigger\n"); | ||||
| //attempt to fix [ #3809 ] IPO Actuator does not work with some Sensors | //attempt to fix [ #3809 ] IPO Actuator does not work with some Sensors | ||||
| //a better solution is to properly introduce separate Edge and Level triggering concept | //a better solution is to properly introduce separate Edge and Level triggering concept | ||||
| return m_IsUp; | return m_IsUp; | ||||
| } | } | ||||
| #ifdef WITH_PYTHON | #ifdef WITH_PYTHON | ||||
| /* --------------------------------------------------------------------- */ | /* --------------------------------------------------------------------- */ | ||||
| /* Python interface ---------------------------------------------------- */ | /* Python interface ---------------------------------------------------- */ | ||||
| /* --------------------------------------------------------------------- */ | /* --------------------------------------------------------------------- */ | ||||
| /* Integration hooks --------------------------------------------------- */ | /* Integration hooks --------------------------------------------------- */ | ||||
| PyTypeObject KX_NetworkMessageSensor::Type = { | PyTypeObject SCA_NetworkMessageSensor::Type = { | ||||
| PyVarObject_HEAD_INIT(NULL, 0) | PyVarObject_HEAD_INIT(NULL, 0) | ||||
| "KX_NetworkMessageSensor", | "SCA_NetworkMessageSensor", | ||||
| sizeof(PyObjectPlus_Proxy), | sizeof(PyObjectPlus_Proxy), | ||||
| 0, | 0, | ||||
| py_base_dealloc, | py_base_dealloc, | ||||
| 0, | 0, | ||||
| 0, | 0, | ||||
| 0, | 0, | ||||
| 0, | 0, | ||||
| py_base_repr, | py_base_repr, | ||||
| 0,0,0,0,0,0,0,0,0, | 0,0,0,0,0,0,0,0,0, | ||||
| Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, | Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, | ||||
| 0,0,0,0,0,0,0, | 0,0,0,0,0,0,0, | ||||
| Methods, | Methods, | ||||
| 0, | 0, | ||||
| 0, | 0, | ||||
| &SCA_ISensor::Type, | &SCA_ISensor::Type, | ||||
| 0,0,0,0,0,0, | 0,0,0,0,0,0, | ||||
| py_base_new | py_base_new | ||||
| }; | }; | ||||
| PyMethodDef KX_NetworkMessageSensor::Methods[] = { | PyMethodDef SCA_NetworkMessageSensor::Methods[] = { | ||||
| {NULL,NULL} //Sentinel | {NULL,NULL} //Sentinel | ||||
| }; | }; | ||||
| PyAttributeDef KX_NetworkMessageSensor::Attributes[] = { | PyAttributeDef SCA_NetworkMessageSensor::Attributes[] = { | ||||
| KX_PYATTRIBUTE_STRING_RW("subject", 0, 100, false, KX_NetworkMessageSensor, m_subject), | KX_PYATTRIBUTE_STRING_RW("subject", 0, 100, false, SCA_NetworkMessageSensor, m_subject), | ||||
| KX_PYATTRIBUTE_INT_RO("frameMessageCount", KX_NetworkMessageSensor, m_frame_message_count), | KX_PYATTRIBUTE_INT_RO("frameMessageCount", SCA_NetworkMessageSensor, m_frame_message_count), | ||||
| KX_PYATTRIBUTE_RO_FUNCTION("bodies", KX_NetworkMessageSensor, pyattr_get_bodies), | KX_PYATTRIBUTE_RO_FUNCTION("bodies", SCA_NetworkMessageSensor, pyattr_get_bodies), | ||||
| KX_PYATTRIBUTE_RO_FUNCTION("subjects", KX_NetworkMessageSensor, pyattr_get_subjects), | KX_PYATTRIBUTE_RO_FUNCTION("subjects", SCA_NetworkMessageSensor, pyattr_get_subjects), | ||||
| { NULL } //Sentinel | { NULL } //Sentinel | ||||
| }; | }; | ||||
| PyObject *KX_NetworkMessageSensor::pyattr_get_bodies(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | PyObject *SCA_NetworkMessageSensor::pyattr_get_bodies(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | ||||
| { | { | ||||
| KX_NetworkMessageSensor *self = static_cast<KX_NetworkMessageSensor*>(self_v); | SCA_NetworkMessageSensor *self = static_cast<SCA_NetworkMessageSensor*>(self_v); | ||||
| if (self->m_BodyList) { | if (self->m_BodyList) { | ||||
| return self->m_BodyList->GetProxy(); | return self->m_BodyList->GetProxy(); | ||||
| } else { | } else { | ||||
| return (new CListValue())->NewProxy(true); | return (new CListValue())->NewProxy(true); | ||||
| } | } | ||||
| } | } | ||||
| PyObject *KX_NetworkMessageSensor::pyattr_get_subjects(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | PyObject *SCA_NetworkMessageSensor::pyattr_get_subjects(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) | ||||
| { | { | ||||
| KX_NetworkMessageSensor *self = static_cast<KX_NetworkMessageSensor*>(self_v); | SCA_NetworkMessageSensor *self = static_cast<SCA_NetworkMessageSensor*>(self_v); | ||||
| if (self->m_SubjectList) { | if (self->m_SubjectList) { | ||||
| return self->m_SubjectList->GetProxy(); | return self->m_SubjectList->GetProxy(); | ||||
| } else { | } else { | ||||
| return (new CListValue())->NewProxy(true); | return (new CListValue())->NewProxy(true); | ||||
| } | } | ||||
| } | } | ||||
| #endif // WITH_PYTHON | #endif // WITH_PYTHON | ||||