Beispiel #1
0
    private void CreateEnemyListView()
    {
        FindAllEnemy(out MonsterData[] enemies);

        ListView enemyList = rootVisualElement.Query <ListView>("enemy-list").First();

        enemyList.makeItem = () => new Label();
        enemyList.bindItem = (element, i) => (element as Label).text = enemies[i].name;

        enemyList.itemsSource   = enemies;
        enemyList.itemHeight    = 16;
        enemyList.selectionType = SelectionType.Single;

        enemyList.onSelectionChanged += (enumerable) =>
        {
            foreach (Object item in enumerable)
            {
                Box enemyInfoBox = rootVisualElement.Query <Box>("enemy-info").First();
                enemyInfoBox.Clear();

                MonsterData enemy = item as MonsterData;

                SerializedObject   serializedEnemy = new SerializedObject(enemy);
                SerializedProperty enemyProperty   = serializedEnemy.GetIterator();
                enemyProperty.Next(true);

                while (enemyProperty.NextVisible(false))
                {
                    PropertyField prop = new PropertyField(enemyProperty);
                    prop.SetEnabled(enemyProperty.name != "n_Script");
                    prop.Bind(serializedEnemy);
                    enemyInfoBox.Add(prop);

                    if (enemyProperty.name == "monsterStats" && enemyProperty.objectReferenceValue != null)
                    {
                        Stats stats = enemyProperty.objectReferenceValue as Stats;

                        SerializedObject   serializedStats = new SerializedObject(stats);
                        SerializedProperty statsProperty   = serializedStats.GetIterator();
                        statsProperty.Next(true);
                        while (statsProperty.NextVisible(false))
                        {
                            PropertyField propStats = new PropertyField(statsProperty);
                            propStats.SetEnabled(statsProperty.name != "n_Script");
                            propStats.Bind(serializedStats);
                            enemyInfoBox.Add(propStats);
                        }
                    }

                    if (enemyProperty.name == "enemyImage")
                    {
                        prop.RegisterCallback <ChangeEvent <Object> >((changeEvent) => LoadEnemyImage(enemy.Sprite().texture));
                    }
                }

                LoadEnemyImage(enemy.Sprite().texture);
            }
        };

        enemyList.Refresh();
    }