Ejemplo n.º 1
0
    private void DrawNotebookEntries(EntitiesManager entitiesManager, ref SavedDataServices.PlayerData playerData)
    {
        if (playerData.notebookEntries == null)
        {
            playerData.notebookEntries = new List <ushort>();
        }

        var data            = playerData;
        var sommeilEntities = entitiesManager.SommeilEntities;

        DrawUtility.DrawListFolder("Notes Carnet", ref m_unfoldNotebookEntries, () =>
        {
            var canAddItem  = false;
            byte sommeilIdx = 0;
            for (; sommeilIdx < sommeilEntities.Length; sommeilIdx++)
            {
                if (data.notebookEntries.GetNotebookEntryIndex(sommeilIdx) != -1 ||
                    entitiesManager.GetNotesCarnetBySommeil(sommeilEntities[sommeilIdx]).Length == 0)
                {
                    continue;
                }
                canAddItem = true;
                break;
            }

            DrawUtility.BeginGUILayoutIndent();
            DrawUtility.DrawVertical(() =>
            {
                for (byte i = 0; i < data.notebookEntries.Count; i++)
                {
                    DrawUtility.DrawHorizontal(() =>
                    {
                        GUILayout.BeginVertical(GUILayout.Height(50));
                        GUILayout.FlexibleSpace();
                        if (DrawRemoveButton())
                        {
                            data.notebookEntries.RemoveAt(i);
                            return;
                        }

                        GUILayout.FlexibleSpace();
                        GUILayout.EndVertical();

                        DrawUtility.DrawVertical(() =>
                        {
                            var(sommeilIndex, typeNote) = SavedDataServices.GetNotebookEntryValues(data.notebookEntries[i]);
                            EditorGUI.indentLevel--;
                            var labelWidth = EditorGUIUtility.labelWidth;
                            var fieldWith  = EditorGUIUtility.fieldWidth;
                            EditorGUIUtility.labelWidth = 100;
                            EditorGUIUtility.fieldWidth = 25;
                            DrawUtility.DrawHorizontal(() =>
                            {
                                DrawUtility.DrawVertical(() =>
                                {
                                    GUI.enabled  = canAddItem;
                                    sommeilIndex = (byte)EditorGUILayout.IntSlider("Index Sommeil", sommeilIndex, 0,
                                                                                   sommeilEntities.Length - 1);
                                    EditorGUILayout.LabelField("Sommeil", sommeilEntities[sommeilIndex].nom, EditorStyles.boldLabel);
                                    GUI.enabled = true;
                                });
                            });

                            var notes       = entitiesManager.GetNotesCarnetBySommeil(sommeilEntities[sommeilIndex]);
                            var noteIndexes = 0;

                            var everything = true;

                            for (byte j = 0; j < notes.Length; j++)
                            {
                                if ((typeNote & (byte)notes[j].typeNote) != 0)
                                {
                                    noteIndexes |= j.ToBitMask();
                                }
                                else
                                {
                                    everything = false;
                                }
                            }

                            if (notes.Length > 0)
                            {
                                var noteNames =
                                    notes.Select(x => $@"{x.objet}            ________            {x.typeNote.PrettyName()}").ToArray();

                                DrawUtility.DrawHorizontal(() =>
                                {
                                    EditorGUIUtility.fieldWidth = fieldWith;
                                    noteIndexes = (byte)EditorGUILayout.MaskField("Notes", everything ? -1 : noteIndexes, noteNames);

                                    typeNote = 0;
                                    for (byte j = 0; j < notes.Length; j++)
                                    {
                                        if ((noteIndexes & j.ToBitMask()) != 0)
                                        {
                                            typeNote |= (byte)notes[j].typeNote;
                                        }
                                    }

                                    GUI.enabled = false;
                                    EditorGUILayout.LabelField("Notebook Entry", data.notebookEntries[i].ToString());
                                    GUI.enabled = true;
                                    EditorGUIUtility.labelWidth = labelWidth;
                                });
                                EditorGUI.indentLevel++;
                            }

                            var entryIndex = data.notebookEntries.GetNotebookEntryIndex(sommeilIndex);

                            if (entryIndex != -1 && entryIndex != i)
                            {
                                sommeilIndex = SavedDataServices.GetSommeilIndex(data.notebookEntries[i]);
                            }

                            data.notebookEntries[i] = SavedDataServices.ToNotebookEntry(sommeilIndex, typeNote);
                        });
                    }, GUI.skin.box);
                }

                GUI.enabled = canAddItem;
                if (DrawAddButton())
                {
                    data.notebookEntries.Add(SavedDataServices.ToNotebookEntry(sommeilIdx, 0));
                }
                GUI.enabled = true;
            });
            DrawUtility.EndGUILayoutIndent();
        });
        playerData = data;
    }