diff --git a/modules/users/SCsub b/modules/users/SCsub index 73bcde075..da8627d6f 100644 --- a/modules/users/SCsub +++ b/modules/users/SCsub @@ -8,7 +8,10 @@ sources = [ "register_types.cpp", "users/user.cpp", + "managers/user_manager.cpp", + "managers/user_manager_static.cpp", + "singleton/user_db.cpp", ] diff --git a/modules/users/config.py b/modules/users/config.py index 6756ecd9e..7d8afd238 100644 --- a/modules/users/config.py +++ b/modules/users/config.py @@ -12,6 +12,7 @@ def get_doc_classes(): return [ "User", "UserManager", + "UserManagerStatic", "UserDB", ] diff --git a/modules/users/managers/user_manager.h b/modules/users/managers/user_manager.h index 34ad86cd7..b5a615040 100644 --- a/modules/users/managers/user_manager.h +++ b/modules/users/managers/user_manager.h @@ -33,7 +33,7 @@ public: virtual bool _is_username_taken(const String &user_name); virtual bool _is_email_taken(const String &email); - Vector> get_all(); + virtual Vector> get_all(); UserManager(); ~UserManager(); diff --git a/modules/users/managers/user_manager_static.cpp b/modules/users/managers/user_manager_static.cpp new file mode 100644 index 000000000..e6a9e5cc6 --- /dev/null +++ b/modules/users/managers/user_manager_static.cpp @@ -0,0 +1,87 @@ +#include "user_manager_static.h" + +#include "../users/user.h" + +Ref UserManagerStatic::_get_user(const int id) { + ERR_FAIL_INDEX_V(id, _users.size(), Ref()); + + return _users[id]; +} +Ref UserManagerStatic::_get_user_name(const String &user_name) { + for (int i = 0; i < _users.size(); ++i) { + Ref u = _users[i]; + + if (u.is_valid()) { + if (u->get_name_user_input() == user_name) { + return u; + } + } + } + + return Ref(); +} +void UserManagerStatic::_save_user(Ref user) { + //With this class Users are serialized via editor properties, ignore +} +Ref UserManagerStatic::_create_user() { + //With this class Users are managed via the editor editor + return Ref(); +} +bool UserManagerStatic::_is_username_taken(const String &user_name) { + for (int i = 0; i < _users.size(); ++i) { + Ref u = _users[i]; + + if (u.is_valid()) { + if (u->get_name_user_input() == user_name) { + return true; + } + } + } + + return false; +} +bool UserManagerStatic::_is_email_taken(const String &email) { + for (int i = 0; i < _users.size(); ++i) { + Ref u = _users[i]; + + if (u.is_valid()) { + if (u->get_email_user_input() == email) { + return true; + } + } + } + + return false; +} + +Vector> UserManagerStatic::get_all() { + return _users; +} + +Vector UserManagerStatic::get_users() { + Vector r; + for (int i = 0; i < _users.size(); i++) { + r.push_back(_users[i].get_ref_ptr()); + } + return r; +} +void UserManagerStatic::set_users(const Vector &users) { + _users.clear(); + for (int i = 0; i < users.size(); i++) { + Ref u = Ref(users.get(i)); + + _users.push_back(u); + } +} + +UserManagerStatic::UserManagerStatic() { +} + +UserManagerStatic::~UserManagerStatic() { +} + +void UserManagerStatic::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_users"), &UserManagerStatic::get_users); + ClassDB::bind_method(D_METHOD("set_users", "users"), &UserManagerStatic::set_users); + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "users", PROPERTY_HINT_NONE, "17/17:User", PROPERTY_USAGE_DEFAULT, "User"), "set_users", "get_users"); +} diff --git a/modules/users/managers/user_manager_static.h b/modules/users/managers/user_manager_static.h new file mode 100644 index 000000000..fd691488c --- /dev/null +++ b/modules/users/managers/user_manager_static.h @@ -0,0 +1,40 @@ +#ifndef USER_MANAGER_STATIC_H +#define USER_MANAGER_STATIC_H + +#include "core/os/rw_lock.h" +#include "core/reference.h" +#include "core/ustring.h" +#include "core/vector.h" + +#include "user_manager.h" + +class User; + +class UserManagerStatic : public UserManager { + GDCLASS(UserManagerStatic, UserManager); + +public: + Ref _get_user(const int id); + Ref _get_user_name(const String &user); + void _save_user(Ref user); + + Ref _create_user(); + + bool _is_username_taken(const String &user_name); + bool _is_email_taken(const String &email); + + Vector> get_all(); + + Vector get_users(); + void set_users(const Vector &users); + + UserManagerStatic(); + ~UserManagerStatic(); + +protected: + static void _bind_methods(); + + Vector> _users; +}; + +#endif diff --git a/modules/users/register_types.cpp b/modules/users/register_types.cpp index a8da166a5..25f11227f 100644 --- a/modules/users/register_types.cpp +++ b/modules/users/register_types.cpp @@ -27,13 +27,18 @@ SOFTWARE. #include "users/user.h" #include "managers/user_manager.h" +#include "managers/user_manager_static.h" + #include "singleton/user_db.h" UserDB *_user_db = nullptr; void register_users_types() { ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); _user_db = memnew(UserDB);