示例#1
0
 public virtual void OnExit()
 {
     if (QLogger.CanLogInfo)
     {
         QLogger.LogInfo("OnExit called for " + this.GetType());
     }
 }
示例#2
0
 public virtual void OnPushedToFront()
 {
     if (QLogger.CanLogInfo)
     {
         QLogger.LogInfo("OnPushedToFront called for " + this.GetType());
     }
 }
    public void EquipWeapon(GameObject WeaponObject)
    {
        GameObject = WeaponObject;
        Animator   = GameObject.GetComponent <Animator>();
        Inputs     = GameObject.GetComponent <WeaponInputs>();
        Common     = new WeaponCommon(this);

        controller = new FSMController <WeaponController, eStates>(this);
        controller.RegisterState(eStates.Idle, new WeaponIdle());
        controller.RegisterState(eStates.Shoot, new WeaponShoot());
        controller.RegisterState(eStates.Reload, new WeaponReload());
        controller.RegisterState(eStates.Recoil, new WeaponRecoil());

        controller.AddMapping(eStates.Idle, eStates.Shoot, eStates.Reload);
        controller.AddMapping(eStates.Shoot, eStates.Recoil);
        controller.AddMapping(eStates.Reload, eStates.Idle, eStates.Shoot);
        controller.AddMapping(eStates.Recoil, eStates.Idle, eStates.Shoot, eStates.Reload);

        controller.SetLogToGUI(true, 2);

        controller.SetState(eStates.Idle);
        Common.Init();

        // sanity checks
        QLogger.Assert(Inputs.magCapacity > 0);
        QLogger.Assert(Inputs.reloadTime > 0 && Inputs.recoilTime > 0 && Inputs.accuracy > 0);
        // if ( Inputs.shotType == eShotType.BURST )
        //     QLogger.Assert ( Inputs.burstBulletCount > 1 );
        QLogger.Assert(Inputs.damage > 0 && Inputs.range > 0);
        QLogger.Assert(Inputs.muzzlePositionAndDirection != null);
    }
示例#4
0
    public override void Update()
    {
        if (Main.Instance.uIManager == null)
        {
            GameObject uiManagerGo = GameObject.Instantiate(ResourceManager.Instance.LoadAsset <UnityEngine.Object> ("UI/UiManager")) as GameObject;
            if (uiManagerGo == null)
            {
                QLogger.LogErrorAndThrowException("UiManager was not instantiated");
            }

            Main.Instance.uIManager = uiManagerGo.GetComponent <UIManager>();
            if (Main.Instance.uIManager == null)
            {
                QLogger.LogErrorAndThrowException("UiManager script was not instantiated");
            }

            if (QLogger.CanLogInfo)
            {
                QLogger.LogInfo("UI manager was instantiated");
            }

            ResourceManager.Instance.LoadLevel("Lobby", true,
                                               delegate()
            {
                Main.Instance.gameStateManager.SetGameState(GameStateManager.GameStates.Frontend, null);
            }, true
                                               );
        }
    }
示例#5
0
 public virtual void Reset()
 {
     if (QLogger.CanLogInfo)
     {
         QLogger.LogInfo("Reset called for " + this.GetType());
     }
 }
示例#6
0
        //void m_TransDispatcher_SyncCompleted(object sender, SyncItemEventArgs<TransactionItem> e)
        //{
        //    //TODO:

        //    //e.Item.SyncExpired();
        //}


        public void LoadTopicConfig()
        {
            var config = QueueServerConfig.GetConfig();

            var items = config.RemoteQueueSettings;

            foreach (QueueServerConfigItem item in items)
            {
                //var prop = new QProperties(item.QueueName, item.IsTrans, (CoverMode)item.CoverMode);
                if (item.IsTopic)
                {
                    var publisher = new TopicPublisher()
                    {
                        TopicId   = item.QueueName,
                        TopicName = item.QueueName
                    };

                    string[] strsubs = item.TargetPath.SplitTrim('|');
                    foreach (var s in strsubs)
                    {
                        publisher.AddSubscriber(TopicSubscriber.Create(s, item.QueueName));
                    }

                    var mq = AddQueue(item);
                    QLogger.InfoFormat("Queue Topic Added: {0}", item.Print());
                }
            }
        }
示例#7
0
        /// <summary>
        /// OnStop
        /// </summary>
        protected override void OnStop()
        {
            base.OnStop();

            AgentManager.StopController();
            QLogger.InfoFormat("TcpServerListener stoped :{0}", this.Settings.HostName);
        }
示例#8
0
    // Use this for initialization
    void Start()
    {
        QLogger.SetLoggingLevel(QLogger.Level.Info);

        gameStateManager = new GameStateManager();
        gameStateManager.SetGameState(GameStateManager.GameStates.Loading, null);
    }
示例#9
0
        public IQueueItem AddQueue(QProperties prop, out MQueue mq)
        {
            if (MQ.ContainsKey(prop.QueueName))
            {
                //if (prop.ReloadOnStart)
                //{
                //    MQueue q = new MQueue(prop);
                //    MQ[prop.QueueName] = q;
                //    mq = q;
                //}
                //else
                //{
                //    mq = MQ[prop.QueueName];
                //}
                mq = MQ[prop.QueueName];
                return(QueueItem.Ack(MessageState.AllreadyExists, QueueCmd.AddQueue, "AllreadyExists, Name: " + prop.QueueName, null));
            }
            //if (prop.IsDbQueue)
            //{
            //    AddDbQueue(prop.QueueName, prop.IsTrans);
            //}
            MQueue queue = new MQueue(prop);

            //LoadQueue(queue, prop);
            MQ[prop.QueueName] = queue;
            mq = queue;
            QLogger.InfoFormat("AddQueue : {0}", prop.Print());
            //return  MessageState.Ok;

            return(QueueItem.Ack(MessageState.Ok, QueueCmd.AddQueue));
        }
示例#10
0
    private void handleGetCharactersEvent(bool result, Dictionary <string, CharacterData> data)
    {
        _characterSelectionManager.GetCharactersEvent -= handleGetCharactersEvent;

        if (!result)
        {
            return;
        }
        try
        {
            _characters = data;
            _characterSlots.Clear();

            foreach (var character in _characters)
            {
                var instance = Instantiate(_characterSlotPFB);
                instance.gameObject.name = character.Key;
                instance.transform.SetParent(_container, false);
                instance.SlotClickEvent += handleSlotClickEvent;
                instance.Initialize(character.Value);

                _characterSlots.Add(character.Key, instance);
            }
        }
        catch (Exception ex)
        {
            QLogger.LogException(ex);
        }
    }
示例#11
0
        /// <summary>Creates Message Queuing queue by specified properties.</summary>
        /// <param name="prop">The queue properties. </param>
        /// <returns>A <see cref="T:Nistec.Messaging.MQueue"></see> that represents the new queue.</returns>
        public MQueue AddQueue(IQProperties prop)
        {
            //prop.IsValid(lockKey);

            if (MQ.ContainsKey(prop.QueueName))
            {
                //if (prop.ReloadOnStart)
                //{
                //    MQueue q = new MQueue(prop);
                //    MQ[prop.QueueName] = q;
                //    return q;
                //}
                return((MQueue)MQ[prop.QueueName]);
            }
            //if (prop.IsDbQueue)
            //{
            //    AddDbQueue(prop.QueueName, prop.IsTrans);
            //}

            MQueue queue = new MQueue(prop);

            //LoadQueue(queue,prop);
            MQ[prop.QueueName] = queue;

            QLogger.InfoFormat("AddQueue : {0}", prop.QueueName);

            return(queue);
        }
示例#12
0
        public TransStream GetQueueReport(IQueueMessage message)
        {
            MQueue queue = Get(message.Host);

            if (queue == null)
            {
                var ack = new QueueItem()//MessageState.QueueNotFound, "QueueNotFound: " + message.Host, null, message.Host);
                {
                    MessageState = MessageState.QueueNotFound,
                    Label        = "QueueNotFound: " + message.Host,
                    Host         = message.Host
                };
                QLogger.InfoFormat("QueueController GetQueueReport QueueNotFound : {0}", message.Host);
                return(ack.ToTransStream());
            }
            var    report = queue.GetReport();
            string result = null;

            if (report != null)
            {
                result = Nistec.Serialization.JsonSerializer.Serialize(report);
            }
            var item = new QueueItem()//MessageState.Ok, result, null, message.Host);
            {
                MessageState = MessageState.Ok,
                Label        = result,
                Host         = message.Host
            };

            item.SetBody(report);
            QLogger.InfoFormat("QueueController GetQueueReport : {0}", result);

            return(item.ToTransStream());
        }
示例#13
0
        /// <summary>
        /// OnStop
        /// </summary>
        protected override void OnStop()
        {
            base.OnStop();
            QLogger.InfoFormat("PipeServerManager stoped :{0}", PipeName);

            //AgentManager.Queue.Stop();
        }
示例#14
0
 public virtual void OnPusedBack()
 {
     if (QLogger.CanLogInfo)
     {
         QLogger.LogInfo("OnPushedBack called for " + this.GetType());
     }
 }
示例#15
0
 public void AddMapping(T state1, T state2)
 {
     if (GetKeyValueMap(state1, state2) != null)
     {
         QLogger.LogErrorAndThrowException("We already have a mapping between " + state1.ToString() + state2.ToString());
     }
     stateMapping.Add(new MyKeyValuePair <T, T>(state1, state2));
 }
示例#16
0
        public QueueSettings()
        {
            //XmlTable table = NetConfig.GetCustomConfig("QueueSettings");

            var section = QueueServerConfig.GetConfig();
            var table   = section.QueueSettings;

            if (table == null)
            {
                throw new ArgumentException("Can not load XmlTable config");
            }
            RootPath   = table.Get <string>("RootPath", DefaultRootPath);
            QueuesPath = Path.Combine(RootPath, QueuesFolder);

            MaxSize            = table.Get <long>("MaxSize", QueueDefaults.DefaultQueueMaxSize);
            DefaultExpiration  = table.Get <int>("DefaultExpiration", 30);
            SyncInterval       = table.Get <int>("SyncInterval", 60);
            InitialCapacity    = table.Get <int>("InitialCapacity", QueueDefaults.InitialCapacity);
            EnableLog          = table.Get <bool>("EnableLog", false);
            ReceiveBufferSize  = table.Get <int>("ReceiveBufferSize", 8192);
            SendBufferSize     = table.Get <int>("SendBufferSize", 8192);
            QueueConfigFile    = table.Get("QueueConfigFile");
            EnableFileWatcher  = table.Get <bool>("EnableFileWatcher", false);
            TaskerTimeout      = table.Get <int>("TaskerTimeout", 60);
            EnableAsyncTask    = table.Get <bool>("EnableAsyncTask", true);
            EnableMailerQueue  = table.Get <bool>("EnableMailerQueue", false);
            EnableQueueManager = table.Get <bool>("EnableQueueManager", false);

            //EnableQueueController = table.Get<bool>("EnableQueueController", false);
            //EnableTopicController = table.Get<bool>("EnableTopicController", false);

            EnableJournalQueue = table.Get <bool>("EnableJournalQueue", false);

            EnableDebugLog = table.Get <bool>("EnableDebugLog", false);
            //LogMonitorCapacityLines = table.Get<int>("LogMonitorCapacityLines", 1000);

            EnablePipeConsumer = table.Get <bool>("EnablePipeConsumer", false);
            EnableTcpConsumer  = table.Get <bool>("EnableTcpConsumer", false);
            EnableHttpConsumer = table.Get <bool>("EnableHttpConsumer", false);

            EnablePipeProducer = table.Get <bool>("EnablePipeProducer", false);
            EnableTcpProducer  = table.Get <bool>("EnableTcpProducer", false);
            EnableHttpProducer = table.Get <bool>("EnableHttpProducer", false);

            EnableFolderListener     = table.Get <bool>("EnableFolderListener", false);
            EnableDbListener         = table.Get <bool>("EnableDbListener", false);
            EnableSizeHandler        = table.Get <bool>("EnableSizeHandler", false);
            EnablePerformanceCounter = table.Get <bool>("EnablePerformanceCounter", false);

            QueueDefaults.DefaultExpiration = DefaultExpiration;
            QueueDefaults.EnableLog         = EnableLog;

            QLogger.SetLogger(EnableLog, EnableDebugLog);
        }
示例#17
0
            public void RegisterState(T key, FSMState state)
            {
                if (!typeof(T).IsEnum)
                {
                    QLogger.LogErrorAndThrowException("TEnum must be an enum.");
                }

                if (statesDictionary.ContainsKey(key))
                {
                    QLogger.LogErrorAndThrowException("Already contains key " + key.ToString());
                }

                statesDictionary.Add(key, state);
            }
示例#18
0
    public void FireBullet(float accuracy)
    {
        QLogger.Assert(bulletsRemainingInMag > 0);

        GameObject bullet = GameObject.Instantiate(inputs.bulletReference);

        bullet.transform.position = inputs.muzzlePositionAndDirection.position;
        bullet.transform.forward  = inputs.muzzlePositionAndDirection.forward;
        Bullet bulletScript = bullet.GetComponent <Bullet>();

        QLogger.Assert(bulletScript != null);
        bulletScript.Init(inputs.muzzlePositionAndDirection.forward, inputs.damage, inputs.range);

        bulletsRemainingInMag--;
    }
示例#19
0
        public void LoadQueueConfig()
        {
            var config = QueueServerConfig.GetConfig();

            var items = config.RemoteQueueSettings;

            foreach (QueueServerConfigItem item in items)
            {
                //var prop = new QProperties(item.QueueName, item.IsTrans, (CoverMode)item.CoverMode);
                if (item.IsTopic == false)
                {
                    var mq = AddQueue(item);
                    QLogger.InfoFormat("Queue Added: {0}", item.Print());
                }
            }
        }
示例#20
0
        public PriorityPersistQueue(IQProperties qp)
            : base(qp.QueueName)
        {
            int numProcs         = Environment.ProcessorCount;
            int concurrencyLevel = numProcs * 2;
            int initialCapacity  = 101;

            QueueList = new ConcurrentDictionary <Ptr, IQueueItem>(concurrencyLevel, initialCapacity);

            CommitMode = (CommitMode)(int)qp.CommitMode;
            CoverMode  = qp.Mode;

            if (CoverMode == CoverMode.Persistent)
            {
                DbLiteSettings settings = new DbLiteSettings()
                {
                    Name       = qp.QueueName,
                    CommitMode = (CommitMode)(int)qp.CommitMode,
                    DbPath     = AgentManager.Settings.QueuesPath
                };
                //settings.SetFast();
                m_db = new PersistentBinary <IQueueItem>(settings);
                //m_db = new PersistentDictionary(settings);
                m_db.BeginLoading   += M_db_BeginLoading;
                m_db.LoadCompleted  += M_db_LoadCompleted;
                m_db.ErrorOcurred   += M_db_ErrorOcurred;
                m_db.ClearCompleted += M_db_ClearCompleted;
                //m_db.ItemChanged += M_db_ItemChanged;

                m_db.ItemLoaded = (item) =>
                {
                    this.ReEnqueue(item);
                };

                if (qp.ReloadOnStart)
                {
                    QLogger.InfoFormat("PriorityPersistQueue will load items to : {0}", qp.QueueName);
                }
                else
                {
                    QLogger.InfoFormat("PriorityPersistQueue will clear all items from : {0}", qp.QueueName);
                }

                m_db.ReloadOrClearPersist(qp.ReloadOnStart);
            }
        }
示例#21
0
    public void Update()
    {
        //@todo find a better place for cheats
        // @todo hard coded controls
        if (Input.GetKeyDown(KeyCode.C))
        {
            QLogger.ShowOrHideGUI();
        }

        if (gameStateManager != null)
        {
            gameStateManager.Update();
        }
        if (uIManager != null)
        {
            uIManager.DoUpdate();
        }
    }
        private void Send_Immediate(EventDetails evnt)
        {
            SuscribeListenerCallback actionListener;

            listeners.TryGetValue(evnt.category, out actionListener);

            if (actionListener != null)
            {
                actionListener(evnt.action, evnt.sender, evnt.context);
                return;
            }

            if (QLogger.CanLogInfo)
            {
                QLogger.LogInfo(string.Format("GlobalEventsManager.Send found unhandled Event. [ Category: {0}   Action: {1}  Sender: {2}  Context: {3} ]",
                                              evnt.category, evnt.action, (evnt.sender == null ? "null" : evnt.sender.ToString()), (evnt.context == null ? "null" : evnt.context.ToString())));
            }
        }
示例#23
0
            public void QueueState(T newState, System.Object context)
            {
                if (currentState.HasValue && currentState.Value.Equals(newState))
                {
                    if (QLogger.CanLogWarning)
                    {
                        QLogger.LogWarning(" Setting same state again " + newState.ToString());
                    }
                    return;
                }

                if (QLogger.CanLogInfo)
                {
                    QLogger.LogInfo(string.Format("FSM:Queued \"{0}\" state ", newState));
                }
                nextState           = newState;
                contextForNextState = context;
            }
示例#24
0
        /// <summary>Deletes a queue on a Message Queuing server.</summary>
        /// <param name="queueName">The location of the queue to be deleted. </param>
        public IQueueItem RemoveQueue(string queueName)
        {
            if (queueName == null)
            {
                throw new ArgumentNullException("queueName");
            }
            if (queueName.Length == 0)
            {
                throw new ArgumentException("InvalidParameter", "queueName");
            }
            //RemoveDbQueue(queueName);

            MQueue queue;
            bool   removed = MQ.TryRemove(queueName, out queue);

            QLogger.InfoFormat("RemoveQueue : {0}, {1}", queueName, removed);

            return(QueueItem.Ack(removed?MessageState.Ok: MessageState.OperationFailed, QueueCmd.RemoveQueue, removed? "Queue was removed" : "Queue was not removed", null));
        }
示例#25
0
        internal IQueueItem ExecGet(QueueMessage request)
        {
            try
            {
                MQueue Q = Get(request.Host);
                if (Q == null)
                {
                    throw new MessageException(MessageState.InvalidMessageHost, "message.Host is invalid " + request.Host);
                }
                switch (request.Command)
                {
                case QueueCmd.Dequeue:
                    return(Q.Dequeue());

                case QueueCmd.DequeuePriority:
                    return(Q.Dequeue(request.Priority));

                case QueueCmd.Peek:
                    return(Q.Peek());

                case QueueCmd.PeekPriority:
                    return(Q.Peek(request.Priority));
                }
            }
            catch (MessageException mex)
            {
                QLogger.ErrorFormat("ExecGet MessageException: " + mex.Message);
            }
            catch (ArgumentException ase)
            {
                QLogger.ErrorFormat("ExecGet ArgumentException: " + ase.Message);
            }
            catch (SerializationException se)
            {
                QLogger.ErrorFormat("ExecGet SerializationException: " + se.Message);
            }
            catch (Exception ex)
            {
                QLogger.ErrorFormat("ExecGet Exception: " + ex.Message);
            }
            return(null);
        }
示例#26
0
            void SetNextState()
            {
                if (currentState.HasValue)
                {
                    if (GetKeyValueMap(currentState.Value, nextState.Value) == null)
                    {
                        QLogger.LogErrorAndThrowException("There is no mapping between " + currentState.Value.ToString() + " and " + nextState.Value.ToString());
                        nextState = null;
                        return;
                    }
                }
                //set current to peviousState
                previousState = currentState;
                //exit previousState
                if (previousState.HasValue)
                {
                    if (QLogger.CanLogInfo)
                    {
                        QLogger.LogInfo(string.Format("FSM:On Exit called for \"{0}\" state ", previousState.Value));
                    }
                    statesDictionary[previousState.Value].OnExit();
                }

                //set currentState to Next
                currentState = nextState;
                //enter current state
                if (currentState.HasValue)
                {
                    if (QLogger.CanLogInfo)
                    {
                        QLogger.LogInfo(string.Format("FSM:On Enter called for \"{0}\" state ", currentState.Value));
                    }
                    statesDictionary[currentState.Value].OnEnter();

                    statesDictionary[currentState.Value].OnContext(contextForNextState /* this can be null if there is no context */);
                }

                //set nextState to Null
                nextState           = null;
                contextForNextState = null;
            }
示例#27
0
    public override void OnContext(System.Object context)
    {
        base.OnContext(context);

        collisionProcessor = new CollisionProcessor();

        GameObject voxelCharacter = GameObject.Instantiate(ResourceManager.Instance.LoadAsset <UnityEngine.Object> ("Characters/VoxelGirl/MainCharacter")) as GameObject;

        if (voxelCharacter == null)
        {
            QLogger.LogErrorAndThrowException("VoxelGirl is not instantiated");
        }

        // Main.Instance.uIManager = uiManagerGo.GetComponent<UIManager>();
        // if ( Main.Instance.uIManager == null ) QLogger.LogErrorAndThrowException ( "UiManager script was not instantiated");

        player = new iPlayer();
        CharacterController controller = new CharacterController();

        controller.Init(voxelCharacter, player);
        WeaponController weaponController = new WeaponController();

        player.Init(controller, weaponController);

        CollisionListener playerCollisionListener = voxelCharacter.GetComponentInChildren <CollisionListener>();

        Core.QLogger.Assert(playerCollisionListener != null);
        playerCollisionListener.Init(collisionProcessor.ProcessCollision, player);


        cameraScript = GameObject.Find("ThirdPersonCamera").GetComponent <ThirdPersonCamera>();
        cameraScript.SetCharacterToFollow(voxelCharacter.transform);


        player.EquipWeapon(eInventoryItem.Pistol);

        Core.Updater.Instance.FixedUpdater += FixedUpdate;
        Core.Updater.Instance.LateUpdater  += LateUpdate;
    }
示例#28
0
        internal MessageState ExecSet(QueueMessage request)
        {
            try
            {
                if (request == null)
                {
                    throw new ArgumentNullException("QueueManager.ExecSet message");
                }
                if (request.Host == null)// || message.Host.Count == 0)
                {
                    throw new ArgumentNullException("QueueManager.ExecSet message.Host is invalid");
                }

                MQueue Q = Get(request.Host);
                if (Q == null)
                {
                    throw new MessageException(MessageState.InvalidMessageHost, "message.Host is invalid " + request.Host);
                }

                Q.Enqueue(request.GetQueueItem());

                //TODO: DISTREBUTING TO HOSTS LIST


                //foreach (var host in request.Host)
                //{
                //    if (host.IsLocal)
                //    {
                //        MQueue Q = Get(host.HostName);
                //        if (Q == null)
                //        {
                //            throw new MessageException(MessageState.InvalidMessageHost, "message.Host is invalid " + message.Host);
                //        }
                //            Q.Enqueue(item);
                //    }
                //    else
                //    {
                //        //TODO:not supported
                //        throw new Exception("Host not IsLocal not supported!");
                //    }
                //}
            }
            catch (MessageException mex)
            {
                QLogger.ErrorFormat("ExecSet MessageException: " + mex.Message);
                return(MessageState.MessageError);
            }
            catch (ArgumentException ase)
            {
                QLogger.ErrorFormat("ExecSet ArgumentException: " + ase.Message);
                return(MessageState.ArgumentsError);
            }
            catch (SerializationException se)
            {
                QLogger.ErrorFormat("ExecSet SerializationException: " + se.Message);
                return(MessageState.SerializeError);
            }
            catch (Exception ex)
            {
                QLogger.ErrorFormat("ExecSet Exception: " + ex.Message);
                return(MessageState.UnExpectedError);
            }
            return(MessageState.Ok);
        }
示例#29
0
 /// <summary>
 /// OnStart
 /// </summary>
 protected override void OnStart()
 {
     base.OnStart();
     QLogger.InfoFormat("HttpServerListener started :{0}", this.Settings.HostName);
 }
示例#30
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            int oldIndentLevel = EditorGUI.indentLevel;

            label = EditorGUI.BeginProperty(position, label, property);
            Rect contentPosition = EditorGUI.PrefixLabel(position, label);

            if (position.height > 16f)
            {
                position.height        = 16f;
                EditorGUI.indentLevel += 1;
                contentPosition        = EditorGUI.IndentedRect(position);
                contentPosition.y     += 18f;
            }
            contentPosition.width *= 0.75f;
            EditorGUI.indentLevel  = 0;

            SerializedProperty serObj = property.FindPropertyRelative("obj");

            UnityEngine.Object obj = serObj.objectReferenceValue;

            EditorGUI.PropertyField(contentPosition, serObj, GUIContent.none);
            contentPosition.x          += contentPosition.width;
            contentPosition.width      /= 3f;
            EditorGUIUtility.labelWidth = 14f;

            SerializedProperty pathObj = property.FindPropertyRelative("path");
            //Debug.Log("Path:" + pathObj.stringValue);

            SerializedProperty boolObj  = property.FindPropertyRelative("overridePath");
            bool overridePathGeneration = boolObj.boolValue;
            bool enableModifications    = true;

            if (obj != null && !overridePathGeneration && enableModifications)
            {
                pathObj.stringValue = AssetDatabase.GetAssetPath(obj);
                if (!pathObj.stringValue.StartsWith("Assets/Content/"))
                {
                    serObj.objectReferenceValue = null;
                    QLogger.LogError("Only assets from /Assets/Content/ should be added");
                }

                pathObj.stringValue = pathObj.stringValue.Substring("Assets/Content/".Length);                          // removes Assets/Content/
                pathObj.stringValue = pathObj.stringValue.Substring(0, pathObj.stringValue.IndexOf('.'));               // removes file extentions
                EditorGUILayout.LabelField(pathObj.stringValue);
            }

            if (overridePathGeneration)
            {
                pathObj.stringValue = EditorGUILayout.TextField(pathObj.stringValue);
            }
            else if (obj == null)
            {
                {
                    pathObj.stringValue = "";
                    EditorGUILayout.LabelField("");
                }
            }


            overridePathGeneration = EditorGUILayout.Toggle("Override", overridePathGeneration);
            boolObj.boolValue      = overridePathGeneration;

            EditorGUI.EndProperty();
            EditorGUI.indentLevel = oldIndentLevel;
        }