From fb27f182dde529d065f02d95566b4471dc4381c6 Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Sun, 25 May 2025 12:43:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=88=9D=E5=A7=8B=E6=9E=84?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + ComponentBasic/ComponentBasic.vcxproj | 114 ++++++++++ ComponentBasic/ComponentBasic.vcxproj.filters | 36 +++ ComponentBasic/ComponentBasic.vcxproj.user | 12 + ComponentBasic/componentbasic.cpp | 1 + ComponentBasic/componentbasic.h | 112 ++++++++++ ComponentBasic/componentbasic_global.h | 13 ++ MessageBasic/MessageBasic.vcxproj | 108 +++++++++ MessageBasic/MessageBasic.vcxproj.filters | 36 +++ MessageBasic/MessageBasic.vcxproj.user | 12 + MessageBasic/messagebasic.cpp | 202 +++++++++++++++++ MessageBasic/messagebasic.h | 106 +++++++++ MessageBasic/messagebasic_global.h | 13 ++ SimsBasic/SimsBasic.vcxproj | 107 +++++++++ SimsBasic/SimsBasic.vcxproj.filters | 36 +++ SimsBasic/SimsBasic.vcxproj.user | 12 + SimsBasic/simsbasic.cpp | 124 +++++++++++ SimsBasic/simsbasic.h | 205 ++++++++++++++++++ SimsBasic/simsbasic_global.h | 13 ++ SimsWorld.sln | 43 ++++ SimsWorld/SimsWorld.ico | Bin 0 -> 370070 bytes SimsWorld/SimsWorld.rc | 1 + SimsWorld/SimsWorld.vcxproj | 113 ++++++++++ SimsWorld/SimsWorld.vcxproj.filters | 53 +++++ SimsWorld/SimsWorld.vcxproj.user | 12 + SimsWorld/main.cpp | 10 + SimsWorld/sims_world.cpp | 10 + SimsWorld/sims_world.h | 16 ++ SimsWorld/sims_world.qrc | 4 + SimsWorld/sims_world.ui | 28 +++ 30 files changed, 1555 insertions(+) create mode 100644 .gitignore create mode 100644 ComponentBasic/ComponentBasic.vcxproj create mode 100644 ComponentBasic/ComponentBasic.vcxproj.filters create mode 100644 ComponentBasic/ComponentBasic.vcxproj.user create mode 100644 ComponentBasic/componentbasic.cpp create mode 100644 ComponentBasic/componentbasic.h create mode 100644 ComponentBasic/componentbasic_global.h create mode 100644 MessageBasic/MessageBasic.vcxproj create mode 100644 MessageBasic/MessageBasic.vcxproj.filters create mode 100644 MessageBasic/MessageBasic.vcxproj.user create mode 100644 MessageBasic/messagebasic.cpp create mode 100644 MessageBasic/messagebasic.h create mode 100644 MessageBasic/messagebasic_global.h create mode 100644 SimsBasic/SimsBasic.vcxproj create mode 100644 SimsBasic/SimsBasic.vcxproj.filters create mode 100644 SimsBasic/SimsBasic.vcxproj.user create mode 100644 SimsBasic/simsbasic.cpp create mode 100644 SimsBasic/simsbasic.h create mode 100644 SimsBasic/simsbasic_global.h create mode 100644 SimsWorld.sln create mode 100644 SimsWorld/SimsWorld.ico create mode 100644 SimsWorld/SimsWorld.rc create mode 100644 SimsWorld/SimsWorld.vcxproj create mode 100644 SimsWorld/SimsWorld.vcxproj.filters create mode 100644 SimsWorld/SimsWorld.vcxproj.user create mode 100644 SimsWorld/main.cpp create mode 100644 SimsWorld/sims_world.cpp create mode 100644 SimsWorld/sims_world.h create mode 100644 SimsWorld/sims_world.qrc create mode 100644 SimsWorld/sims_world.ui diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4bd821c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +x64/* +.vs/* +*/x64/* \ No newline at end of file diff --git a/ComponentBasic/ComponentBasic.vcxproj b/ComponentBasic/ComponentBasic.vcxproj new file mode 100644 index 0000000..5ede4b3 --- /dev/null +++ b/ComponentBasic/ComponentBasic.vcxproj @@ -0,0 +1,114 @@ + + + + + Debug + x64 + + + Release + x64 + + + + {20CFC220-4F5B-4D39-97FA-74C70768F1A7} + QtVS_v304 + 10.0 + 10.0 + $(MSBuildProjectDirectory)\QtMsBuild + + + + DynamicLibrary + v143 + true + Unicode + + + DynamicLibrary + v143 + false + true + Unicode + + + + + + + 5.12.11_msvc2017_64 + core + debug + + + 5.12.11_msvc2017_64 + core + release + + + + + + + + + + + + + + + + + $(SolutionDir)SimsBasic;$(SolutionDir)MessageBasic;$(IncludePath) + $(SolutionDir)$(Platform)\$(Configuration);$(LibraryPath) + + + + + + MessageBasic.lib;%(AdditionalDependencies) + + + + + true + COMPONENTBASIC_LIB;%(PreprocessorDefinitions) + Level3 + true + true + + + Windows + true + + + + + true + COMPONENTBASIC_LIB;%(PreprocessorDefinitions) + Level3 + true + true + true + true + + + Windows + false + true + true + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ComponentBasic/ComponentBasic.vcxproj.filters b/ComponentBasic/ComponentBasic.vcxproj.filters new file mode 100644 index 0000000..71afe92 --- /dev/null +++ b/ComponentBasic/ComponentBasic.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + qml;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {99349809-55BA-4b9d-BF79-8FDBB0286EB3} + ui + + + {639EADAA-A684-42e4-A9AD-28FC9BCB8F7C} + ts + + + + + Header Files + + + Source Files + + + Header Files + + + \ No newline at end of file diff --git a/ComponentBasic/ComponentBasic.vcxproj.user b/ComponentBasic/ComponentBasic.vcxproj.user new file mode 100644 index 0000000..41a709a --- /dev/null +++ b/ComponentBasic/ComponentBasic.vcxproj.user @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/ComponentBasic/componentbasic.cpp b/ComponentBasic/componentbasic.cpp new file mode 100644 index 0000000..e658e37 --- /dev/null +++ b/ComponentBasic/componentbasic.cpp @@ -0,0 +1 @@ +#include "componentbasic.h" diff --git a/ComponentBasic/componentbasic.h b/ComponentBasic/componentbasic.h new file mode 100644 index 0000000..133ac23 --- /dev/null +++ b/ComponentBasic/componentbasic.h @@ -0,0 +1,112 @@ +#pragma once + +#include "componentbasic_global.h" +#include + + +/// +/// ÏûÏ¢´¦Àíµ¥Ôª»ùÀà +/// +/// ÊäÈëÀàÐÍ +/// Êä³öÀàÐÍ +template class WsRespond { +public: + using SelfType = WsRespond; + + virtual ~WsRespond() = default; + /// + /// RespondµÄÀàÐÍÇ©Ãû + /// + /// + static WsRespondSignatureType signature() + { + return std::make_pair(MsgA().topicString(), MsgB().topicString()); + } + + /// + /// ×ÓÀàÖÐʵ¼Ê´¦Àíº¯Êý + /// + /// + /// + virtual std::shared_ptr execute(std::shared_ptr in) = 0; + /// + /// WsRespond¹¹Ô캯Êý + /// + /// ×¢²áº¯Êý + explicit WsRespond(QHash& map) { + WsRespondEntry ins = [=](std::shared_ptr in) -> std::shared_ptr { + return this->execute(std::static_pointer_cast(in)); + }; + map[SelfType::signature()] = ins; + } +}; + + +template struct _ProcRoute_; +template <> struct COMPONENTBASIC_EXPORT _ProcRoute_<> +{ + QHash _execute_map; + + _ProcRoute_() = default; +}; +template +struct _ProcRoute_ : public _ProcRoute_, public ProcSig +{ + _ProcRoute_() : _ProcRoute_(), ProcSig(_ProcRoute_<>::_execute_map) {} +}; + +template +struct ProcList : public _ProcRoute_, public WsComponent +{ + using SuperType = ProcList; + + ProcList() : _ProcRoute_() {} + + // ͨ¹ý WsComponent ¼Ì³Ð + QList inputTypes() const override + { + QList list; + for (auto key : _ProcRoute_<>::_execute_map.keys()) { + list.append(key.first); + } + return list; + } + WsRespondEntry getEntryWithSignature(const WsRespondSignatureType& t) const override + { + for (auto key : _ProcRoute_<>::_execute_map.keys()) { + if (key == t) + return _ProcRoute_<>::_execute_map[key]; + } + } + QList getEntrysWithInType(const QString& msg_type) const override + { + QList list; + for (auto key : _ProcRoute_<>::_execute_map.keys()) { + if (key.first == msg_type) + list.append(_ProcRoute_<>::_execute_map[key]); + } + return list; + } +}; + +#include +class COMPONENTBASIC_EXPORT Visible3DPlugin : public ProcList< + WsRespond +> +{ +public: + + // ͨ¹ý ProcList ¼Ì³Ð + std::shared_ptr execute(std::shared_ptr in) override; + + void recoveryFrom(const QJsonObject& obj) override; + + void saveTo(QJsonObject& obj) const override; + + std::shared_ptr defaultNew() const override; + + void bindEntity(uint64_t entity_id) override; + + QString name() const override; + +}; \ No newline at end of file diff --git a/ComponentBasic/componentbasic_global.h b/ComponentBasic/componentbasic_global.h new file mode 100644 index 0000000..3da0605 --- /dev/null +++ b/ComponentBasic/componentbasic_global.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#ifndef BUILD_STATIC +# if defined(COMPONENTBASIC_LIB) +# define COMPONENTBASIC_EXPORT Q_DECL_EXPORT +# else +# define COMPONENTBASIC_EXPORT Q_DECL_IMPORT +# endif +#else +# define COMPONENTBASIC_EXPORT +#endif diff --git a/MessageBasic/MessageBasic.vcxproj b/MessageBasic/MessageBasic.vcxproj new file mode 100644 index 0000000..0d47bfe --- /dev/null +++ b/MessageBasic/MessageBasic.vcxproj @@ -0,0 +1,108 @@ + + + + + Debug + x64 + + + Release + x64 + + + + {E1104048-F35B-40B7-995C-0320E689BF09} + QtVS_v304 + 10.0 + 10.0 + $(MSBuildProjectDirectory)\QtMsBuild + + + + DynamicLibrary + v143 + true + Unicode + + + DynamicLibrary + v143 + false + true + Unicode + + + + + + + 5.12.11_msvc2017_64 + core + debug + + + 5.12.11_msvc2017_64 + core + release + + + + + + + + + + + + + + + + + $(SolutionDir)SimsBasic;$(IncludePath) + + + + + + true + MESSAGEBASIC_LIB;%(PreprocessorDefinitions) + Level3 + true + true + + + Windows + true + + + + + true + MESSAGEBASIC_LIB;%(PreprocessorDefinitions) + Level3 + true + true + true + true + + + Windows + false + true + true + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MessageBasic/MessageBasic.vcxproj.filters b/MessageBasic/MessageBasic.vcxproj.filters new file mode 100644 index 0000000..4412b74 --- /dev/null +++ b/MessageBasic/MessageBasic.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + qml;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {99349809-55BA-4b9d-BF79-8FDBB0286EB3} + ui + + + {639EADAA-A684-42e4-A9AD-28FC9BCB8F7C} + ts + + + + + Header Files + + + Source Files + + + Header Files + + + \ No newline at end of file diff --git a/MessageBasic/MessageBasic.vcxproj.user b/MessageBasic/MessageBasic.vcxproj.user new file mode 100644 index 0000000..41a709a --- /dev/null +++ b/MessageBasic/MessageBasic.vcxproj.user @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/MessageBasic/messagebasic.cpp b/MessageBasic/messagebasic.cpp new file mode 100644 index 0000000..2ee2434 --- /dev/null +++ b/MessageBasic/messagebasic.cpp @@ -0,0 +1,202 @@ +#include "messagebasic.h" +#include + +void from_to_save(uint64_t f, uint64_t t, QJsonObject& o) { + o["source_entity"] = QJsonValue::fromVariant(QVariant::fromValue(f)); + o["target_entity"] = QJsonValue::fromVariant(QVariant::fromValue(t)); +} +void from_to_recovery(uint64_t& f, uint64_t& t, const QJsonObject& o) { + f = o["source_entity"].toVariant().toULongLong(); + t = o["target_entity"].toVariant().toULongLong(); +} + +DeduceRequest::DeduceRequest() {} + +void DeduceRequest::reset(uint64_t from, uint64_t to) { + _from_id = from; + _to_id = to; +} + +void DeduceRequest::recoveryFrom(const QJsonObject& obj) +{ + from_to_recovery(_from_id, _to_id, obj); +} + +void DeduceRequest::saveTo(QJsonObject& obj) const +{ + from_to_save(_from_id, _to_id, obj); +} + +QString DeduceRequest::topicString() const +{ + return NAME(DeduceRequest); +} + +uint64_t DeduceRequest::targetEntity() const +{ + return _to_id; +} + +uint64_t DeduceRequest::sourceEntity() const +{ + return _from_id; +} + +SyncRequest::SyncRequest() { +} + +void SyncRequest::reset(uint64_t from, uint64_t to, double timepoint) +{ + _from_id = from; + _to_id = to; + this->_time_current = timepoint; +} + +void SyncRequest::recoveryFrom(const QJsonObject& obj) +{ + from_to_recovery(_from_id, _to_id, obj); + this->_time_current = obj["current_time"].toDouble(); +} + +void SyncRequest::saveTo(QJsonObject& obj) const +{ + from_to_save(_from_id, _to_id, obj); + obj["current_time"] = this->_time_current; +} + +QString SyncRequest::topicString() const +{ + return NAME(SyncRequest); +} + +uint64_t SyncRequest::targetEntity() const +{ + return _to_id; +} + +uint64_t SyncRequest::sourceEntity() const +{ + return _from_id; +} + +RespondDefault::RespondDefault() { +} + +void RespondDefault::reset(uint64_t from, uint64_t to, double consume) { + _from_id = from; + _to_id = to; + _time_consume = consume; +} + +double RespondDefault::consume() const { + return this->_time_consume; +} + +void RespondDefault::recoveryFrom(const QJsonObject& obj) +{ + from_to_recovery(_from_id, _to_id, obj); + this->_time_consume = obj["time_consume"].toDouble(); +} + +void RespondDefault::saveTo(QJsonObject& obj) const +{ + from_to_save(_from_id, _to_id, obj); + obj["time_consume"] = this->_time_consume; +} + +QString RespondDefault::topicString() const +{ + return NAME(DeduceRequest); +} + +uint64_t RespondDefault::targetEntity() const +{ + return _to_id; +} + +uint64_t RespondDefault::sourceEntity() const +{ + return _from_id; +} + +Get3DVolume::Get3DVolume() +{ +} + +void Get3DVolume::reset(uint64_t from, uint64_t to) +{ + _from_id = from; + _to_id = to; +} + +void Get3DVolume::recoveryFrom(const QJsonObject& obj) +{ + from_to_recovery(_from_id, _to_id, obj); +} + +void Get3DVolume::saveTo(QJsonObject& obj) const +{ + from_to_save(_from_id, _to_id, obj); +} + +QString Get3DVolume::topicString() const +{ + return NAME(Get3DVolume); +} + +uint64_t Get3DVolume::targetEntity() const +{ + return _to_id; +} + +uint64_t Get3DVolume::sourceEntity() const +{ + return _from_id; +} + +Volume3DDesc::Volume3DDesc() +{ +} + +void Volume3DDesc::reset(uint64_t from, uint64_t to, double l, double w, double h, double azi) +{ + _from_id = from; + _to_id = to; + _length = l; + _width = w; + _height = h; + _azimuth_deg = azi; +} + +void Volume3DDesc::recoveryFrom(const QJsonObject& obj) +{ + from_to_recovery(_from_id, _to_id, obj); + _length = obj["length"].toDouble(); + _width = obj["width"].toDouble(); + _height = obj["height"].toDouble(); + _azimuth_deg = obj["azimuth_deg"].toDouble(); +} + +void Volume3DDesc::saveTo(QJsonObject& obj) const +{ + from_to_save(_from_id, _to_id, obj); + obj["length"] = _length; + obj["width"] = _width; + obj["height"] = _height; + obj["azimuth_deg"] = _azimuth_deg; +} + +QString Volume3DDesc::topicString() const +{ + return NAME(Volume3DDesc); +} + +uint64_t Volume3DDesc::targetEntity() const +{ + return _to_id; +} + +uint64_t Volume3DDesc::sourceEntity() const +{ + return _from_id; +} diff --git a/MessageBasic/messagebasic.h b/MessageBasic/messagebasic.h new file mode 100644 index 0000000..4aaca90 --- /dev/null +++ b/MessageBasic/messagebasic.h @@ -0,0 +1,106 @@ +#pragma once + +#include "messagebasic_global.h" +#include "simsbasic.h" + +#define NAME(v) #v + +/// +/// ÍÆÑÝÇëÇó +/// +class MESSAGEBASIC_EXPORT DeduceRequest : public WsMessage { +private: + uint64_t _from_id, _to_id; + +public: + DeduceRequest(); + + void reset(uint64_t from, uint64_t to); + + // ͨ¹ý WsMessage ¼Ì³Ð + void recoveryFrom(const QJsonObject& obj) override; + void saveTo(QJsonObject& obj) const override; + QString topicString() const override; + uint64_t targetEntity() const override; + uint64_t sourceEntity() const override; +}; + +/// +/// ĬÈϵÄÎÞ·µ»ØÏûÏ¢µÄ´¦Àí¹ý³ÌͨÓ÷µ»ØÏûÏ¢ +/// +class MESSAGEBASIC_EXPORT RespondDefault : public WsMessage { +private: + uint64_t _from_id, _to_id; + double _time_consume; + +public: + RespondDefault(); + + void reset(uint64_t from, uint64_t to, double consume); + + double consume() const; + + // ͨ¹ý WsMessage ¼Ì³Ð + void recoveryFrom(const QJsonObject& obj) override; + void saveTo(QJsonObject& obj) const override; + QString topicString() const override; + uint64_t targetEntity() const override; + uint64_t sourceEntity() const override; +}; + +/// +/// ʱ¼äͬ²½ÏûÏ¢ +/// +class MESSAGEBASIC_EXPORT SyncRequest : public WsMessage { +private: + uint64_t _from_id, _to_id; + double _time_current; + +public: + SyncRequest(); + + void reset(uint64_t from, uint64_t to, double timepoint); + + // ͨ¹ý WsMessage ¼Ì³Ð + void recoveryFrom(const QJsonObject& obj) override; + void saveTo(QJsonObject& obj) const override; + QString topicString() const override; + uint64_t targetEntity() const override; + uint64_t sourceEntity() const override; +}; + +class MESSAGEBASIC_EXPORT Get3DVolume : public WsMessage { +private: + uint64_t _from_id = 0, _to_id = 0; + +public: + Get3DVolume(); + + void reset(uint64_t from, uint64_t to); + + // ͨ¹ý WsMessage ¼Ì³Ð + void recoveryFrom(const QJsonObject& obj) override; + void saveTo(QJsonObject& obj) const override; + QString topicString() const override; + uint64_t targetEntity() const override; + uint64_t sourceEntity() const override; +}; + +class MESSAGEBASIC_EXPORT Volume3DDesc : public WsMessage { +private: + uint64_t _from_id, _to_id; + double _length, _width, _height; + double _azimuth_deg; + +public: + Volume3DDesc(); + + void reset(uint64_t from, uint64_t to, double l, double w, double h, double azi); + + // ͨ¹ý WsMessage ¼Ì³Ð + void recoveryFrom(const QJsonObject& obj) override; + void saveTo(QJsonObject& obj) const override; + QString topicString() const override; + uint64_t targetEntity() const override; + uint64_t sourceEntity() const override; +}; \ No newline at end of file diff --git a/MessageBasic/messagebasic_global.h b/MessageBasic/messagebasic_global.h new file mode 100644 index 0000000..9eae995 --- /dev/null +++ b/MessageBasic/messagebasic_global.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#ifndef BUILD_STATIC +# if defined(MESSAGEBASIC_LIB) +# define MESSAGEBASIC_EXPORT Q_DECL_EXPORT +# else +# define MESSAGEBASIC_EXPORT Q_DECL_IMPORT +# endif +#else +# define MESSAGEBASIC_EXPORT +#endif diff --git a/SimsBasic/SimsBasic.vcxproj b/SimsBasic/SimsBasic.vcxproj new file mode 100644 index 0000000..0edb828 --- /dev/null +++ b/SimsBasic/SimsBasic.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + x64 + + + Release + x64 + + + + {DF15B899-B9AE-4EBE-8FCC-436C9DB6CEF0} + QtVS_v304 + 10.0 + 10.0 + $(MSBuildProjectDirectory)\QtMsBuild + + + + DynamicLibrary + v143 + true + Unicode + + + DynamicLibrary + v143 + false + true + Unicode + + + + + + + 5.12.11_msvc2017_64 + core + debug + + + 5.12.11_msvc2017_64 + core + release + + + + + + + + + + + + + + + + + + + + + + true + SIMSBASIC_LIB;%(PreprocessorDefinitions) + Level3 + true + true + + + Windows + true + + + + + true + SIMSBASIC_LIB;%(PreprocessorDefinitions) + Level3 + true + true + true + true + + + Windows + false + true + true + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SimsBasic/SimsBasic.vcxproj.filters b/SimsBasic/SimsBasic.vcxproj.filters new file mode 100644 index 0000000..9d48920 --- /dev/null +++ b/SimsBasic/SimsBasic.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + qml;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {99349809-55BA-4b9d-BF79-8FDBB0286EB3} + ui + + + {639EADAA-A684-42e4-A9AD-28FC9BCB8F7C} + ts + + + + + Header Files + + + Source Files + + + Header Files + + + \ No newline at end of file diff --git a/SimsBasic/SimsBasic.vcxproj.user b/SimsBasic/SimsBasic.vcxproj.user new file mode 100644 index 0000000..41a709a --- /dev/null +++ b/SimsBasic/SimsBasic.vcxproj.user @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/SimsBasic/simsbasic.cpp b/SimsBasic/simsbasic.cpp new file mode 100644 index 0000000..f1c6fbf --- /dev/null +++ b/SimsBasic/simsbasic.cpp @@ -0,0 +1,124 @@ +#include "simsbasic.h" + + +UniException::UniException(const QString& msg) + :_error_store(msg) { +} + +QString UniException::content() const noexcept +{ + return _error_store; +} + +WsEntity::WsEntity() {} + +void WsEntity::resetTemplet(const QString& name) { + this->_templet_name = name; +} + +QString WsEntity::templetName() const { + return this->_templet_name; +} + +void WsEntity::resetID(uint64_t id) { + this->_entity_id = id; +} + +uint64_t WsEntity::entityID() const { + return this->_entity_id; +} + +void WsEntity::resetName(const QString& name) { + this->_runtime_name = name; +} + +QString WsEntity::name() const { + return this->_runtime_name; +} + +void WsEntity::append(std::shared_ptr ins) { + if (this->_comps_list.contains(ins->name())) + return; + this->_comps_list[ins->name()] = ins; +} + +void WsEntity::remove(const QString& component_type) { + this->_comps_list.remove(component_type); +} + +QList> WsEntity::components() const { + return _comps_list.values(); +} + +std::shared_ptr WsEntity::defaultNew() const { + auto newx = std::make_shared(); + newx->_entity_id = this->_entity_id; + newx->_templet_name = this->_templet_name; + newx->_runtime_name = this->_runtime_name; + + for (auto c : this->_comps_list) + newx->append(c->defaultNew()); + return newx; +} + +#include +QList WsEntity::inputTypes() const +{ + QList types; + for (auto c : this->_comps_list) + types.append(c->inputTypes()); + return types.toSet().toList(); +} + +#include +#include +QList WsEntity::getEntryWithSignature(const WsRespondSignatureType& t) const +{ + QList list; + for(auto c : this->_comps_list) + list.append(c->getEntryWithSignature(t)); + return list; +} + +QList WsEntity::getEntryWithInType(const QString& msg_type) const +{ + QList list; + for(auto c : this->_comps_list) + list.append(c->getEntrysWithInType(msg_type)); + return list; +} +void WsEntity::recoveryFrom(const QJsonObject& obj) +{ + this->_entity_id = obj["entity_id"].toVariant().toULongLong(); + this->_runtime_name = obj["entity_name"].toString(); + this->_templet_name = obj["entity_templet"].toString(); + + auto array = obj["component_array"].toArray(); + for (auto idx = 0; idx < array.size(); ++idx) { + auto value = array.at(idx).toObject(); + auto type = value["component_type"].toString(); + + auto compins = this->_comps_list[type]; + if (!compins) + throw new UniException(type + "ÀàÐͲå¼þ²»´æÔÚ£¡"); + + compins->recoveryFrom(value); + } +} + +void WsEntity::saveTo(QJsonObject& obj) const +{ + obj["entity_id"] = QJsonValue::fromVariant(QVariant::fromValue(this->_entity_id)); + obj["entity_name"] = this->_runtime_name; + obj["entity_templet"] = this->_templet_name; + + QJsonArray array; + for (auto c : this->_comps_list) + { + QJsonObject comp_obj; + comp_obj["component_type"] = c->name(); + c->saveTo(comp_obj); + array.append(comp_obj); + } + obj["component_array"] = array; +} diff --git a/SimsBasic/simsbasic.h b/SimsBasic/simsbasic.h new file mode 100644 index 0000000..fc3c7ef --- /dev/null +++ b/SimsBasic/simsbasic.h @@ -0,0 +1,205 @@ +#pragma once + +#include "simsbasic_global.h" +#include +#include +#include + +/// +/// ¿ÉÐòÁл¯¶ÔÏó +/// +class Serializable { +public: + virtual ~Serializable() = default; + /// + /// ͨ¹ý·´ÐòÁл¯ÍêÈ«»Ö¸´Êý¾Ý + /// + /// Êý¾ÝJson + virtual void recoveryFrom(const QJsonObject& obj) = 0; + /// + /// ͨ¹ýÐòÁл¯Êä³öËùÓÐÊý¾Ý + /// + /// Ä¿±êJson + virtual void saveTo(QJsonObject& obj) const = 0; +}; + +/// +/// ËùÓÐÒì³£»ùÀà +/// +class SIMSBASIC_EXPORT UniException { +private: + QString _error_store; + +public: + explicit UniException(const QString& msg); + virtual ~UniException() = default; + + virtual QString content() const noexcept; +}; + +/// +/// ͨÓÃÏûÏ¢»ùÀà +/// +class WsMessage : public Serializable { +public: + virtual ~WsMessage() = default; + /// + /// »ñÈ¡ÏûÏ¢ÀàÐÍ×Ö·û´® + /// + /// ÏûÏ¢ÀàÐÍ + virtual QString topicString() const = 0; + /// + /// Ä¿±êʵÌåID + /// + /// ID + virtual uint64_t targetEntity() const = 0; + /// + /// À´Ô´ÊµÌåID + /// + /// ID + virtual uint64_t sourceEntity() const = 0; +}; + +/// +/// ËùÓÐÏûÏ¢´¦Àíµ¥ÔªÍ¨ÓÃ½Ó¿Ú +/// +using WsRespondEntry = std::function(std::shared_ptr)>; +/// +/// RespondÇ©ÃûÀàÐÍ +/// +using WsRespondSignatureType = std::pair; + +/// +/// ¹¦Äܲå¼þµÄ»ùÀà +/// +class WsComponent : public Serializable, public std::enable_shared_from_this { +public: + virtual ~WsComponent() = default; + + /// + /// ¿Ë¡һ¸ö¾ßÓÐÏàͬÊý¾ÝµÄʵÀý + /// + /// ʵÀýÖ¸Õë + virtual std::shared_ptr defaultNew() const = 0; + /// + /// °ó¶¨Entity + /// + /// EntityID + virtual void bindEntity(uint64_t entity_id) = 0; + + /// + /// ²å¼þΨһÃüÃû + /// + /// ²å¼þÃû + virtual QString name() const = 0; + + /// + /// ÔÊÐíÊäÈëµÄÏûÏ¢ÀàÐÍ + /// + /// ÏûÏ¢ÀàÐͼ¯ºÏ + virtual QList inputTypes() const = 0; + /// + /// ͨ¹ýÖ¸¶¨µÄÇ©Ãû»ñÈ¡´¦ÀíÈë¿Ú + /// + /// ´¦ÀíÇ©Ãû + /// ´¦Àí½Ó¿Ú + virtual WsRespondEntry getEntryWithSignature(const WsRespondSignatureType& t) const = 0; + /// + /// ͨ¹ýÊäÈëÏûÏ¢ÀàÐÍ»ñÈ¡´¦ÀíÈë¿Ú + /// + /// ÊäÈëÏûÏ¢ÀàÐÍ + /// ´¦Àí½Ó¿ÚÁбí + virtual QList getEntrysWithInType(const QString& msg_type) const = 0; +}; + +#include +/// +/// ÄÚ´æÊµÌåʵÀýÀàÐÍ +/// +class SIMSBASIC_EXPORT WsEntity : public Serializable, public std::enable_shared_from_this { +private: + uint64_t _entity_id = 0; + QString _templet_name, _runtime_name; + QHash> _comps_list; + +public: + explicit WsEntity(); + virtual ~WsEntity() = default; + + /// + /// ÖØÖñ¾ÊµÀýÄ£°åÃû + /// + /// Ä£°åÃû³Æ + virtual void resetTemplet(const QString& name); + /// + /// »ñÈ¡±¾ÊµÀýµÄÄ£°åÃû + /// + /// Ä£°åÃû³Æ + virtual QString templetName() const; + + /// + /// ÖØÖñ¾ÊµÀýµÄÔËÐÐID + /// + /// + virtual void resetID(uint64_t id); + /// + /// »ñÈ¡±¾ÊµÀýµÄÔËÐÐID + /// + /// + virtual uint64_t entityID() const; + /// + /// ÖØÖñ¾ÊµÀýµÄÔËÐÐÃû³Æ + /// + /// + virtual void resetName(const QString& name); + /// + /// »ñÈ¡±¾ÊµÀýµÄÔËÐÐÃû³Æ + /// + /// ÔËÐÐÃû³Æ + virtual QString name() const; + + /// + /// Ϊ±¾ÊµÀýÌí¼ÓÖ¸¶¨ÀàÐ͵IJå¼þ + /// + /// + virtual void append(std::shared_ptr ins); + /// + /// ÒÆ³ýÖ¸¶¨ÀàÐ͵IJå¼þʵÀý + /// + /// + virtual void remove(const QString& component_type); + /// + /// »ñÈ¡±¾ÊµÀýÄÚ°üº¬µÄËùÓвå¼þʵÀý + /// + /// + virtual QList> components() const; + + /// + /// Éî¶È¿Ë¡±¾ÊµÀý£¬²å¼þºÍÊý¾ÝÒ»Ö + /// + /// + virtual std::shared_ptr defaultNew() const; + + + /// + /// ÔÊÐíÊäÈëµÄÏûÏ¢ÀàÐÍ + /// + /// ÏûÏ¢ÀàÐͼ¯ºÏ + virtual QList inputTypes() const; + /// + /// ͨ¹ýÖ¸¶¨µÄÇ©Ãû»ñÈ¡´¦ÀíÈë¿Ú + /// + /// Ç©Ãû + /// ´¦Àí½Ó¿Ú + virtual QList getEntryWithSignature(const WsRespondSignatureType& t) const; + /// + /// ͨ¹ýÊäÈëÏûÏ¢ÀàÐÍ»ñÈ¡´¦ÀíÈë¿Ú + /// + /// ÊäÈëÏûÏ¢ÀàÐÍ + /// ´¦Àí½Ó¿ÚÁбí + virtual QList getEntryWithInType(const QString& msg_type) const; + + // ͨ¹ý Serializable ¼Ì³Ð + void recoveryFrom(const QJsonObject& obj) override; + void saveTo(QJsonObject& obj) const override; +}; \ No newline at end of file diff --git a/SimsBasic/simsbasic_global.h b/SimsBasic/simsbasic_global.h new file mode 100644 index 0000000..2376d3a --- /dev/null +++ b/SimsBasic/simsbasic_global.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +#ifndef BUILD_STATIC +# if defined(SIMSBASIC_LIB) +# define SIMSBASIC_EXPORT Q_DECL_EXPORT +# else +# define SIMSBASIC_EXPORT Q_DECL_IMPORT +# endif +#else +# define SIMSBASIC_EXPORT +#endif diff --git a/SimsWorld.sln b/SimsWorld.sln new file mode 100644 index 0000000..98a9502 --- /dev/null +++ b/SimsWorld.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.13.35825.156 d17.13 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimsWorld", "SimsWorld\SimsWorld.vcxproj", "{46E3FBA5-6775-4638-AE2E-935675D3B9CE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimsBasic", "SimsBasic\SimsBasic.vcxproj", "{DF15B899-B9AE-4EBE-8FCC-436C9DB6CEF0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ComponentBasic", "ComponentBasic\ComponentBasic.vcxproj", "{20CFC220-4F5B-4D39-97FA-74C70768F1A7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MessageBasic", "MessageBasic\MessageBasic.vcxproj", "{E1104048-F35B-40B7-995C-0320E689BF09}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {46E3FBA5-6775-4638-AE2E-935675D3B9CE}.Debug|x64.ActiveCfg = Debug|x64 + {46E3FBA5-6775-4638-AE2E-935675D3B9CE}.Debug|x64.Build.0 = Debug|x64 + {46E3FBA5-6775-4638-AE2E-935675D3B9CE}.Release|x64.ActiveCfg = Release|x64 + {46E3FBA5-6775-4638-AE2E-935675D3B9CE}.Release|x64.Build.0 = Release|x64 + {DF15B899-B9AE-4EBE-8FCC-436C9DB6CEF0}.Debug|x64.ActiveCfg = Debug|x64 + {DF15B899-B9AE-4EBE-8FCC-436C9DB6CEF0}.Debug|x64.Build.0 = Debug|x64 + {DF15B899-B9AE-4EBE-8FCC-436C9DB6CEF0}.Release|x64.ActiveCfg = Release|x64 + {DF15B899-B9AE-4EBE-8FCC-436C9DB6CEF0}.Release|x64.Build.0 = Release|x64 + {20CFC220-4F5B-4D39-97FA-74C70768F1A7}.Debug|x64.ActiveCfg = Debug|x64 + {20CFC220-4F5B-4D39-97FA-74C70768F1A7}.Debug|x64.Build.0 = Debug|x64 + {20CFC220-4F5B-4D39-97FA-74C70768F1A7}.Release|x64.ActiveCfg = Release|x64 + {20CFC220-4F5B-4D39-97FA-74C70768F1A7}.Release|x64.Build.0 = Release|x64 + {E1104048-F35B-40B7-995C-0320E689BF09}.Debug|x64.ActiveCfg = Debug|x64 + {E1104048-F35B-40B7-995C-0320E689BF09}.Debug|x64.Build.0 = Debug|x64 + {E1104048-F35B-40B7-995C-0320E689BF09}.Release|x64.ActiveCfg = Release|x64 + {E1104048-F35B-40B7-995C-0320E689BF09}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6FB4589F-9657-44A5-9137-24A66C2A5057} + EndGlobalSection +EndGlobal diff --git a/SimsWorld/SimsWorld.ico b/SimsWorld/SimsWorld.ico new file mode 100644 index 0000000000000000000000000000000000000000..1c4fb80d0527ef003399ff11bbcebdb162bf7725 GIT binary patch literal 370070 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 LC;>_!^%D610I=HW literal 0 HcmV?d00001 diff --git a/SimsWorld/SimsWorld.rc b/SimsWorld/SimsWorld.rc new file mode 100644 index 0000000..5559e55 --- /dev/null +++ b/SimsWorld/SimsWorld.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "SimsWorld.ico" diff --git a/SimsWorld/SimsWorld.vcxproj b/SimsWorld/SimsWorld.vcxproj new file mode 100644 index 0000000..d1a14fa --- /dev/null +++ b/SimsWorld/SimsWorld.vcxproj @@ -0,0 +1,113 @@ + + + + + Debug + x64 + + + Release + x64 + + + + {46E3FBA5-6775-4638-AE2E-935675D3B9CE} + QtVS_v304 + 10.0 + 10.0 + $(MSBuildProjectDirectory)\QtMsBuild + + + + Application + v143 + true + Unicode + + + Application + v143 + false + true + Unicode + + + + + + + 5.12.11_msvc2017_64 + core;gui;widgets + debug + + + 5.12.11_msvc2017_64 + core;gui;widgets + release + + + + + + + + + + + + + + + + + + + + + + true + Level3 + true + true + + + Windows + true + + + + + true + Level3 + true + true + true + true + + + Windows + false + true + true + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SimsWorld/SimsWorld.vcxproj.filters b/SimsWorld/SimsWorld.vcxproj.filters new file mode 100644 index 0000000..e0efcd9 --- /dev/null +++ b/SimsWorld/SimsWorld.vcxproj.filters @@ -0,0 +1,53 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + qml;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {99349809-55BA-4b9d-BF79-8FDBB0286EB3} + ui + + + {639EADAA-A684-42e4-A9AD-28FC9BCB8F7C} + ts + + + + + Resource Files + + + Form Files + + + Header Files + + + Source Files + + + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + diff --git a/SimsWorld/SimsWorld.vcxproj.user b/SimsWorld/SimsWorld.vcxproj.user new file mode 100644 index 0000000..41a709a --- /dev/null +++ b/SimsWorld/SimsWorld.vcxproj.user @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/SimsWorld/main.cpp b/SimsWorld/main.cpp new file mode 100644 index 0000000..3bb7154 --- /dev/null +++ b/SimsWorld/main.cpp @@ -0,0 +1,10 @@ +#include "sims_world.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + SimsWorld w; + w.show(); + return a.exec(); +} diff --git a/SimsWorld/sims_world.cpp b/SimsWorld/sims_world.cpp new file mode 100644 index 0000000..0875831 --- /dev/null +++ b/SimsWorld/sims_world.cpp @@ -0,0 +1,10 @@ +#include "sims_world.h" + +SimsWorld::SimsWorld(QWidget *parent) + : QMainWindow(parent) +{ + ui.setupUi(this); +} + +SimsWorld::~SimsWorld() +{} diff --git a/SimsWorld/sims_world.h b/SimsWorld/sims_world.h new file mode 100644 index 0000000..921040f --- /dev/null +++ b/SimsWorld/sims_world.h @@ -0,0 +1,16 @@ +#pragma once + +#include +#include "ui_sims_world.h" + +class SimsWorld : public QMainWindow +{ + Q_OBJECT + +public: + SimsWorld(QWidget *parent = nullptr); + ~SimsWorld(); + +private: + Ui::SimsWorldClass ui; +}; diff --git a/SimsWorld/sims_world.qrc b/SimsWorld/sims_world.qrc new file mode 100644 index 0000000..45fffd3 --- /dev/null +++ b/SimsWorld/sims_world.qrc @@ -0,0 +1,4 @@ + + + + diff --git a/SimsWorld/sims_world.ui b/SimsWorld/sims_world.ui new file mode 100644 index 0000000..47a1865 --- /dev/null +++ b/SimsWorld/sims_world.ui @@ -0,0 +1,28 @@ + + SimsWorldClass + + + SimsWorldClass + + + + 0 + 0 + 600 + 400 + + + + SimsWorld + + + + + + + + + + + +