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
zcmeHw2W%Zjwk5SQvwsI43;e~$VDT~Vjt7ImpO3}j|HWdl04a@gkaLb>%Q2;F_OZ*dou*vFGc&8oAD7>WIOKfF`#V+rS=A5L
zsnhCD$r*>d^RUi?`~7*%SIB$yYTed#YQyjbwcD~?ocG`9ep~&t=_j>E^=>-8?(FyR
zY~M(qI)3F})XtLr=Nms$_pZ4|9ZfGAt{7PD$@1Ib2yjnH1O5ayEuD(Hi(DS}J
zWcfj=d8m2fdM1u3>7P=6vZ@{K;N
zUD$NKx~k<$dGBDImilwm%!%_H<^P3Tdrrp@@OL8r(BrJiieJfl{~F@>qt<^hf6L00
zGC5#pc9dghIkcUb@7OlE;0nboBhxOvjZcaWgrEOcj#)7tzxFHZ%&Lk8NjuvXS^Hb!
ze_syIJVZ$!c0FXC-I%O7>(!yON)7uUa_?r*FUn%U~(jUPGJ7xgZhNdL$cM>yBkY+2*9576#Gdr7COe}krf#PY+`*w~oU
z_S$vX&XeLnUVy)CW7{V31z901>iufcvpQY<8#MhZnlE?aTimxeXM8IMRyg<1Y&gTY
ze|p2I&fj13exCFBu<75?cAFF5yWQ{PjPIMiubunIC*ro9{yl5%cH)0y!|OTIN1G7g
znwG0#N&nWiTb%e8b}!7C{&)S0o%@$HU!o4GJwRR8dad*K(*C6i*fYi7Usqk^#E0(#
ztvmNG+U^J^*Pp0fTK}SRp8X&4<$ed}LGia=&AtxTw~TI4vupO66whJH4{`1djSeYr
z|Q;HK_+X7C6Tq)w@r6FHHJ)R%7g&zHih~D~@#deB8=o)z6!LcG6nd
z{oX|Uw(*Dbk63Y-^UanmSNuKx?X$m?^d+r#kY26>wgz1IsOLjR9{6^0iE6{;NFmrTe+K&U2+N;+!GrArFh|70m42b};FrFWhjCpT
zDEW=+*bV9MpbUzQ0asT*QBKiMfiBe(
zJR>WU^J7*Xt@f(kBjomgJf7{AXnBq?3K_lr4iTk8_M`uG!M2`bYZJ
zQ|tb&_Nm!>q8yH%GV%#?F3&EN!?z5gQ^C)6{A;W`x<;CrvLIb2?aXiX`4j6NbNUC-
zN7y~wJ)VEpyY6^Go@|}^9qXXBu*FAk5eWmEv(cyaOyVCa%mxc2;yl^CO
z2ev=R3;J~)S^KbhulrqR>>K?cD>8kbko^yve(<$9;Kzkc7dU^Z`(ZO`rM|ACb+BP!kD`rCz(F0?MlAWFS9~>72UboO^f%^EUpvYOXq`
z@hpY1V!nc-qX_sBJ^9)n#Z{f9`wP?>r#=#5%m+v%Q}k&t2Jag}$Yp?tE&T<1Wm)
z~ru?>;1O2Tb*+0
z@@4YI`={d3(msfUt@(rZZ^UOc^>&QsUGxMvjz1sDP7O8rm
zv{AbFF{A=0B
z`GXw~ILShG7*o^wacocKS$(d@obf_)W{w}~I=rhxuJdD795tS%#OK82=w#BlXZ|Ix
z&i9u)&%mO_<0Y&9I-&R4f!gh5(`9u1-nHhAiDy6C_^I=(&cDV^uHT9LyW*P2&-gXZ
z{7ZSq?Y|?-Oqp?>k;QD8-vL{KfVmDwLspsl`d7=pYICI)v$|`|oz8Q!WwGoJ@{jf*@}zZ-y6JGzAY@{&;`8{hwlI#&J8<
z7Wv`-!|^=kwm%M!fOpZu5i1T?uXMevTDP=1b6t=Z$Qy0yulp9M%jNq-msh{1?Fs5K
z)Xz9j&*|%4&u3lt%)dPMTS=?VNl)_VyeGff{!CoQJ=cN!;9GE_o$tEme$LXlXZ}Tm
zGbFFS6?sS*rrIBrM<3eG=)d)EuIqX1i5E`1uKVU6Wstl;599L|wJbBZaq@|4x-0?C
zC-f)pSUAs{|8YH3>>#q7n0pDiYT4>vT?YNP{`I?#XY_OW7te>d9w`5g9xBUsaP;8l
zV4Sy>Fg%GrA>$03e@72hvd*Kj{9=*M#m=vsi@YutOv@4ET%N0v=bY!w&n4YskuM&U
z0Wm-f5ChX21LO07uqFzDzlD|q=4tIL$9y^TJgqWW^O_yV)9KAq>Yw^228aP-fEXYK
zh=J*j0qH|KQjU2kKK@{$L+KO5dhhN1&}lobtZ0`0&)-LtLF&stuCHe47mg%@5-C6M
z+bqZL!s4J1<;S=h#yT;E88g?K!pfi!<-dE)U7{A{%n`h|{T{b3r#R#hN(OP4{{WdQ
z)4#3XDZl;?7MFfP7t%|0=gALFCWm}OoW#997x8qc1X
zKcZ!Dlb-KZn0ofLd>Ak-KjyQYQh$=VO?*LMKG@6aUvhjcJk;@^<5NwS8^7>L5C->H
z*AM?Gm~W=%{e^iSWs9r)n4g4sXxVeX-Q{(kW4;vpGUUrY6gZNkb7;zsp3b`9pDr3j<(xn4%Ma3+7#H%eZ;qsS9!Cq$5H+|
z@oni2@HOeo>GiPZm`hbVP~(0@*6D2b$>PrQ{FZAbJ@;Javw_R%jz^!{F8`4-*UfE{
zpiB7E(&>5qp51unr1vn7I9FTvPMPcK4*BM`d!?tZ+b;jjt8a2=Z(?1QPS5W*yPnA9
z9~E}r9pJ;wFV1}TY?uFKX}7w=lk1)coImiy9pF1EJOA0`zYgnlJa`r4y6y6Ro$=?T
z%i*ji3Yb5v&v6I6UdLUIq?aFa)!pGdS;yqgzu&p`Ri@v6Cx_3pq?f-X<4;VN;bdv|
z`jy#z?<*t|E`Jtwl3srJ4Ri;r|I03e*WciZJAB#u<&<}mUj8;&i|r2ZU*}cc
z?CV%R><+nn5GK9+jf3NUHFY_{v_-K_${jwGHDK8?N_zQ!7C(dTaIvi8$u5J}-}oMO
zhgUP}mf+VM^*oLbW&MUbz^|jer+?ww(<_ba>$dAZy>3tE5pDDAG`;>tS=<5gz_aj^
z7$$_Vxwgyy*xE-YW%W(08P2ldUVks!Ts7(4c^RLeX)6ERjK57?5ZFVn^182UU$FW;
zd_x?X@iC9@hd%kv!;!rfXi(O8>wEh5gt|F_(nR{U^$)JPeL|od=Qp00H$S@nTbDn3
z&9|0S((NDenQa4Fhguc-gLE0Pe~%UaD_EQ64(Q{_ehz=9q5Rla0qc0(Vf}EYf{u?C
z|Eu`khu_iTrEP?A;#=1p(7)ql!_!cH=m~4>q6F~ehSuwI>OL*{M?TTtgT736Ur0WA
zpsxhqKzQHlD31QU{pxzx4`Ow+%WrBY-~>r%z~4@rSIBe13X$
zKD>Sd+W-G0?{|8|5#&1fj(+)TW#1R{S)r|qHQE>#ar;yW5|_$=O8GM~_&=o}gQ(>%
z6&aY6-;qJ3v**vFf`ybG<>#XuJSYQVfEXYKhyh}N7$63Sf$55YY<~d!dwNL#ej?_h
z$TM7iB4jW0>@Z#V!E&>1AO?s5Vt^PR28aP-fEXYKhyh}N7$63S0b+m{AO?s5Vt^PR
z28aP-fEXYKhyh}N7$63S0b+m{AO?s5Vt^PR28aP-fEXYKh=EeWfcObGQ`Q9!@F
zqkr-90y|Jp3{d~c(ZA@zsV8L5qpJ#K2dMw#>3
zlK%Iq-a|DEHaPp2`S~(Vk^WI1TpA|^N=g6l<*NgHkiXjXinH%r%Jl8D0Ve0UJT?rJ
zivHo37`~aa!|>R!!rql(_Bfd=`{K6`GT#LkOWCaV50rxbQRn}ZwWmim4o1gDojo{`
zrrQwt8J$&CKG!w|NIciAs1K9SR`|C8%a%-QC1<6%Jd9@2Xh
zxnx%gc#yiF;y@{@QJXNW`o|u{)tjr`s?K?SU;E!mLDyboIJZ>wkA0_6w}ZP!$bQ8~
ztT;>^RC|Ehec7EN*GLIq$wb^@H`wbnlsj+l-RXKXi&c>9CjXcm0c1`<8ZR54l|X
zGT|E^_p|ro$|nD)?Co_%!)ac;F}{wzM)WzH-FTL>cO3RjKW4>I&Yocf#7wI7k3AsY
z?_Q`-N81iz_H+!YFZ3ayy}5eJYK8uUTmjdyNB9q$eo(K-KHC>HU1*FopZuj#|A&Z8
z|Gf9}y!Jbne1lxuII>agQ?s`9(z#!r(D&%0Kht}u)Bj&r&7HE3q@Vnv
z+=HH;>3mwDjc7ymAN70`B^%B=z>SSOc*Kz^{bMh^Tz&MBh3oSo+76#={KUBZhkm16
z?GT@&C*68_-BZ-R%xl3OcBI
z+Du^rY4s@{a+*fQz%Q=bVEF!c>QC~`2LapymG7-o*ymW
z&mqe0JUh4PBGonAl{fweTK_Dsf}!C~`k@%hB-AA4oz3*YsB=j^v0RW3&?
zKTLIQ?et9s^MS(73Hzw$L*F=0sGCzv-6QS9>%VSrrLPRpS7PH^{oKa0^VS7n#{zzo
z`o$}3-nQBJ+afC7UGF7Y|3^x{eZFs}+hvb+S9y%i7xjMSr7q`s%|K14_%VLq6O@Lggf&xUa%
zTK}I)|BGLEulrrAGQ?OP+T(sK|kGe&Z!*7hoL7RTeAf_qN~Tr84LG;t+cC
z)BobWZ>{9lu>6VD|7rE7`04?6I*zqk=QTnk-T`w5g36rwk2XIQ^1Y_zYHuaTow(Xh
zhb%wHw+)E#r=W9!sQ>8tU(kM^ul~`u5|oEwp4)ZV&N9w4y9Q-OM@otLN
zkV`N5u6-->FZ{xdt8WODHuWD}|M~cTZLIwN)=&M;+@X9J!hPyLy8bZ-$}a@vU=TfJ
zKZCIuzYx^+Q2){O|GCVA^9y&h-5$sWXX`e|-}&4Bmjz0j`j4*vcV%qXFFe?>Adn7%
z=sWwFyx;##=LJfe`j4)Ew=b?-IC!q}*+4qT)@_i#^Y#D1Z$OZEsQ>8te?a){7cf^k
zhz`O&vy1fqW3H!H7$0{&Xj0n8%ev0*`aUa13R|8$&nI^L
z7wvn$fOR!_$`C=?<;qaH(RKiRId6%NmwcgWb5-d0seg0*Lr?kUfro@r-gO=QPvt!|912b8-TUoe&1$pec3$6SkSR6j}C47+5WSqdtF!O>zlKwcfHm3a!<$Z`#
zR-Bq6UL(61Ccaa}Prw@+UUz)>MZp5T8=GXk-(zbZ6@L7^%U_8pj|HgY
zeVP&;Sk=E{2Pz#5ypfXfr$tY3<JpaduZN`Mle1So-N
zCxJhq#53ghPx#ppf0dQ(_{;HM*Z*wql}3AydZZqS0b+m{AO?s5Vt^PR28aP-fEXYK
zhyh}N7$63S0b+m{AO?s5Vt^PR28aP-fEXYKhyh}N7$63S0b+m{AO?s5Vt^PR28aP-
zfEXYKhyh}N7$63S0b+m{AO?s5Vt^PR28aP-fEXYKhyh}N7$63S0b+m{AO?s5Vt^PR
z28aP-fEXYKhyh}N7$63S0b+m{AO?s5Vt^PR28aP-fEXYKhyh}N7$63S0b+m{AO?s5
zVt^PR28aP-fEXYKhyh}N7$63S0b+m{AO?s5Vt^PR28aP-fEXYKhyh}N7$63S0b+m{
zAO?s5Vt^PR28aP-fEXYKhyh}N7$63S0b+m{AO?s5Vt^PR28aP-fEXYKhyh}N7$63S
z0b+m{AO?s5Vt^PR28aP-fEXYKhyh}N7$63S0b+m{n2Lc}RTYb8R#kNIpbVxP24+>3
z-z@n5#dNj{QvNzQ6c5T^8e(8n%6zLF)7Az^*~x#}zv*oMVFPZQt~P-DXT2{Nn9lr1
z*&Q1o-#^o?9YFq1d+bkl?mOid?yH%V<<|=zrj-pK|H*&B0Byi_8C*N7s(jkm0P>&M
zC;zu&U}mLrE;e9#v;)Zh?YbuqC<_MzumP17S51d@0QpbM)9!g<;2M!lNq-BF|DL+%
zH}Upw;^`_2j0;>P{emTH1IT~!UobFT`5mO(umSVrd!Qt30QpbslmB@!Fm3}%@LPcV
zU_&bp)R&{Wb(_z@>7OR6BtDC;tTlv|qtwFe>weO3DV1|HMA|9|{Ab(id=XsjL|!
z|3m4%p!MWVRkPHet7aB7P1=G$c)+*7+)}UsgH8wV;Y6fc5yyhzu+61hl6QeV<1I|yg4Iuv$
zgQW>xgX1-us~zrV|JO3qqHbP&liGFJ&J)km9u!rFskQ;+e^IfMlf$>Q-Rji&+1%HE
zqdl;0>pFE``@L%K>OFJDL7Pxey`oR>T+z>rv>oJsL2;6otNYjNt2T~o)Kt&=+cVOm
zo?Q2YI&K*sk22{srVKk|C7Q0
zU6$>nRt&5N#PNI&{j}*PwR6><$^YW;A99BcI5Q14fc#Ge|LK*9~#P56$J=^(=#vgx^VFON0vJD{ri_ib}dlu%S
zb)frgTiQ4tSbWZB+g)h~l%Jeb8$kXSm;dKAo@3nS2jeh0HmWXdz9bua{5t{mU}jZ0
zz6DN9q75Mbi^u=nmhGbI2kSv!$&$vb)0bCb8dD&cy4JOV8kpG_g^3tQV>kHcN
zk2KbwZ7lk?^{c~{A7U+EJ{V>i-uwbyGNA#DNu|e{`IQ&0+`JoEDwGsX%^MJ|O
z;^;Ag+_%d2z#P$gB5VNpUmVr#GBd)Uwd-M6v^QZui+`xMKgK7^@e_45qI<5W`bxz}1j(@I;nl4Zm
z%5h%fx#|pQlOMP8FV33WJ*)Sa7?(Rz*5+;Aw%NGu$NK+kTj!JeDa25wy+i&dSa%qg
zKUVmCZR<7a>CUIr=e?h+l>;kP=hjX&I64@({svFc$G>W*Nqx}sfvVi}voZG(!IJ(Z
z6EBeP65Y;qJg3w?gO;kqn9bIdXKC#t6NsztQK_Kubx=@Ma-9=YOhwfnMN
zOVQ^c`JVv(A0R$+FbAh@aAjio?lui*PdvW%vD9!M+`YW{GWF($H&o+b!-PLmcbW2?
zZynvLu&x1qkYDb4Nx?T7{3Prp-&HAY`;h-dgSyN
zkAeSK2fws`X|d>7lynz%zgM)mz>9hp6{XBN(N5U|F{S$
zFl=10!}qcd(jq4d85j9)k^kq*ntRiIGqbV0LHujLR|n>`*~A$7t1fD~P%Z9T?D*`@
zPB-e`_zt+f^*XD0^(!~}9!m>(_mYoVl6siFSI!sp?e6r^4B4Zqr3-p7bwXCw>lY
zZM(%;7l?Ki)(bw@`K;K|SJjO{1OOy>N+cbV;WRfIY?l%6cdPySotKjy>Q2(3e{>WCuECB+yP
z+O;N}(lTh3HL+NSXBn@P;yX)hu1UZe!8r4mg1E_l3;f60o-LzWOrYqz+cmsie9atD
zR7~P~;FYeIjmrWX0-qakasYnOOalBP#+knq#7+KN;6K*%n)am+j}1HhaY?|;F5+Lb
zW^;`RwVZdq?fWKHeqkMA)PS){_)txPyo;Cz^4|jgYX@qh!f@ifw>G?)C@h{JYZguY
zlVFYl=0V4W?`NccG-_xOA4Vyivu9JDR;mgPLdl~b`g4kpJHp&iBJOKjsW46*J(kNx*mZ?3m^-nE3lZA7@f!Uch{j
z{|5ZWIzQ9Bvwx6vf(6uf=(OgyTy6AygKwj`GS4uMGMd;Xj{Q0NUXuR?{Kp(o(||dp
zad5*{oT$4^_X>Na^XXX1_=Bu#iW(kX`%o--vL*Kd#Y6rZ@E_xTCIR!#4_$t6;&J$G
z-?t{kR6ompV{zd5M}zs+7(0w3PbrI&{5RnLM?D`J@nWUSJx{~B@xQg-YgA5*Z^Ypr
z%Y^?ZQ_8p+M}Eowi2TRcG4{bR2`{dHAr75dkMrdElZ@5~Vvii`b!3}wCj7_#ezxD}{u57*{6&S>RnSCRDCZDm*l^@)3ZoK3#HA$#YVgwHm9YJ$_8
z?~?!IzfFvXi3@wgn}jOaJ0nbb#eNpw%O(N73T>Bx{3riyV=8ET@T+MO-r4ZBbv^{m
zdz9zk2g@X2o>Y`{{oWz}$$vk5#CgvId*IPS9S>UPL!9M3R^}+9&mwAoU&Prpds!{B
zi4NHR=hzN@|3~=#$Jk%XP)k%QIPYPo@b|Qzj&;5*f6{yD*c@`1n@H&M7}|vA^*w$pjff_9OlGh-JVG}s>pu6qR3;F
z>~muhuCY7^fcz)_qu|)|9gN$X1bj!wwI`@%%}3
zCz{Y-VLp5@_sfkc1MD?s60j#()U6
z5A22Y&s!}s`A`1a#(0qUE^ofni2oQnNTct`m%CmvDz|MPr{q8RAB3;ApSf1{f-?#A
zG0cUtUB+DTJ-zNJlVYn6dp=6Pkep&ys{x1fPOnv?Wx5db}X_^b#?>C{p`o{8pAml&!Z;I(C@0Q0&@#&Sc*yRG_x&L7Qdsiwkq+O@eJ-$K*fx?}yj8?mf`4
zz=Q_E|F5mqgK?EJJ6`PRZ4!Rk^pn+clmFy@Hbx8a_k$e|n9x9d-M7dp4+>Fcq;cn(
z+l|Ui{u}evHg4GeAEEz0Y5ib@;y>H}iQ})SJs|%h@ZYrmZ?X8(FBE5Oreo>@i2Z+w
zvmfMt1pX(j9<<4Ezql53n2rD0wtM{kH?}9_e+2$x&n}ZtnKIvh+9sIJ|M^nZ59zpU
z{F49VzYQFPjpMr3Yfb2{u-x>K&{uhGp
z*=d|wf3gt|dPjOwwfBcEzp4L^$Jai__J4%_CN2LMe%b#QK_BqlXA(xlcOdo;j6t8V
z#)wnho*9BHG3=gvo{HcE!v1UtKWE1>V@0Wqn2$GNMTd&Jo
zuBdX4`8~G(Beef_uKKew!5%<+g^VG@tXr$`+t~l(gu3JN=E-!9L1cqq@ZyS;j^_&g
z$o~lZ2XCu3R~aBise9Y)ehbHKOKj}_wXf_UlrNv;zj2#BuZ&$fApaxs|Kp7x8}a{@
zu9w5;sp!wnZMx8?yx2R;g*(r4@}K+?q9QSAWkGf23WIX5}xmTE>Ky?fAT*Gc+Z!IeQRbL&jG+bLiy53!u{Qr?P9#&
z@r|o*2vk<`pZre(=JVwNZTI#qYfP#{^-#xyfjE&bFLB?WBja}1vovZL8yi!n)Sncn
ztmHrWA2*(D#lNWctEiN4-m~ow!&bSn%-#T9RD-W
ziD_N6ab#mE)&YFF@lzxIuN+tzi2J~`sZ5PB8u4Y$|4}nUbVi5hzRsdu3ye3DG)>n5
zqg@mj&NsB*c}
zfqjCVG70lTtotGV$$vNgl74PF4|x6XdWH2wNiF9)-DW;NFwS|{@F0AqU-{AWna)eI{lYqMQs+KDQ^TVaP*x#95y_f3W)^Acg
z6?EQTlyY(XuW?&}{5Rx3#R!P|9P
z*O}1Y8Cy?UKOp-3)^1&ET&}Yl&WwV~K<}{rH?|q%zajroZ^5snX{a5jP1Je->~U;b
z_d9-0m&NDjl>8_EqqG}szjJckiAM9|U^~DyaL#t#qQrOPio+Gw>zan=*9V*PA0>}?
zhx{l1qhiPQdzj;58ZefKbw#%G7AC$umhGm{7BLMYVW(Xl4Zt_QsgG}MH-6gmW9(%h|H=Pi@jW|T%x~`+?$Yo#`o(;^
za~jWzoj>j}z^C!oeP0`oWuV~rmMMgPL-L>ecVoEN=UC5YIu@u62fhUmAL`_|%XOCY
z(Kin@>!gi;8wMNHuFH0gJ>TR%`5!ko!o-jHGF>vC&t|9}te3j*<)57
zrQYj)S7DBxt$?~8bNGU!Z~6@RPyU-?$oBhpuDQcXKY*K$;1uSoVs89jRvv4#cOd+D
zU)^$*wDlJmuU&BGQJ+_Dt~SbF7=4ic8_EZ50tQD13pUR0C1=+E#@HqQ3&4Ni7xRNZ?D?Q1`UK(cAkKCDUVP8KPX3es
z*_cT3-|!W3TidP1KDCO~kigu7FJ&LUgK7_qz0DLvkK{l39|R{!d*%pPU;p{W&y4pE
zE2JHOFAw|3&1##_Z|!r^-5<_td6sn-bAKux)Ic!k#v_w%tm2h1u5F#~d>izQ^cBn&V13c>*sy{RqbJrq9=qS3>8|Gl
zl|M=R|Bc9HNrGe()|Og*9_xLvuIIk?zd37tFuxY-biq{|Q3KvZKVFac8Tw(6kowzHXNlpz;CY5%=AUO)RxBlUa$^TJ0qguOkUhCD?`A>A{p#t?
zr_^g*uc~)tpB{`ae$?}kb1dv$sNUT0rg~xh^9pMb?r6JRT`qnEuwTKxHM31|!}k;L
z-DrU)iQ<382A~~48&DefqMb;#9uvoZ*npXp<-d{RM+^3i_)9kasGs8MCz1Tmv;+P-
zZ9wkt0NO>$#S#V*%YSVHq?~LA6t|9G9bLNePc;9XZ-J`vf0RSyO-@is~AWP|DA7v$_lXo2*)W5O*S-+Qd{hm+1spS85
z8&E+TFun1c58u4+kB`*yfBUyU#R|3q*bX2DB4Hra{Li!lc93xa+5mq$&w7yZ$%TQ`
z^MAY@P_cuo8>9^&cnu*Sv9268z7!1AZrMz&f@ABees`5pRx^vTRC*|Km2G{P)6t
zwgaXomP?tZah0v4_@8M9{9fh=u^m7g5Eo}kDc+Lff5ry9M&b&3~sIP+5+4Kr?Ls
zZ2&Pa1p_6|e^)zzHXuFq659}k(bcrzf5ry9(QMmj9V=f&WPxz`lTK+#fWp`Jb@?|0?=Fp9f_y?J!VTF$Wyr
zK^YJO!~iis3=jjv05L!e5Cg;jF+dCu1H=F^KnxHA!~iis3=jjv05L!e5Cg;jF+dCu
z1H=F^KnxHA!~iis3=jjv05L!e5Cg;jF+dCu1H=F^KnxHA!~iis3=jjv05L!e5Cg;j
zF+dCu1H=F^KnxHA!~iis3=jjv05L!e5Cg;jF+dCu1H=F^KnxHA!~iis3=jjv05L!e
z5Cg;jF+dCu1H=F^KnxHA!~iis3=jjv05L!e5Cg;jF+dCu1H=F^KnxHA!~iis3=jjv
z05L!e5Cg;jF+dCu1H=F^KnxHA!~iis3=jjv05L!e5Cg;jF+dCu1H=F^KnxHA!~iis
z3=jjv05L!e5Cg;jF+dCu1H=F^KnxHA!~iis3=jjv05L!e5Cg;jF+dCu1H=F^Kn#>J
z2Fe&H0ZM=ppaduZN`Mle1SkPYfD)htC;>`<5}*Vq0ZM=ppaduZN`Mle1SkPYfD)ht
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
+
+
+
+
+
+
+
+
+
+
+
+