void useConsumable(ItemConstructor item, int slot, bool itemUsed) { if (itemUsed) { inventory[slot] = new ItemConstructor(); } }
void removeItem(int id) { for (int i = 0; i < inventory.Count; i++) { if (inventory[i].id == id) { inventory[i] = new ItemConstructor(); break; } } }
public override object AddNew() { ThrowIfDeferred(); if (ItemConstructor == null) { throw new InvalidOperationException("The underlying collection does not support adding new items"); } if (SourceCollection.IsFixedSize) { throw new InvalidOperationException("The source collection is of fixed size"); } // If there's an existing AddNew or Edit, we commit it. Commit the edit first because // we're not allowed CommitNew if we're in the middle of an edit. if (IsEditingItem) { CommitEdit(); } if (IsAddingNew) { CommitNew(); } var newObject = ItemConstructor.Invoke(null); // FIXME: I need to check the ordering on the events when the source is INCC CurrentAddItem = newObject; IsAddingNew = true; if (Grouping) { RootGroup.AddItem(newObject, false, SourceCollection); HandleRootGroupCollectionChanged(RootGroup, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, newObject, RootGroup.IndexOfSubtree(newObject))); } AddToSourceCollection(newObject); MoveCurrentTo(newObject); if (newObject is IEditableObject) { ((IEditableObject)newObject).BeginEdit(); } UpdateCanAddNewAndRemove(); return(newObject); }
private void AddNew(Vector2 mousePos, AIInspectorState state) { if (_dictionary == null) { var dict = (IDictionary)Activator.CreateInstance(typeof(Dictionary <,>).MakeGenericType(_keyType, _valueType)); _setter(dict); } if (_itemCreator == null) { _itemCreator = new ItemConstructor(_dictionary, _keyType, _valueType); } var itemWrapper = _itemCreator.Conctruct(); _editorItems.Add(ReflectMaster.Reflect(itemWrapper)); // We do not want the button click itself to count as a change.. same as above. GUI.changed = false; }
/// <summary> /// IAnalyzeItemインスタンス作成 /// </summary> /// <param name="node">対象Node</param> /// <param name="semanticModel">対象ソースのsemanticModel</param> /// <param name="container">イベントコンテナ</param> /// <param name="parent">親IAnalyzeItemインスタンス(デフォルトはnull)</param> /// <returns>IAnalyzeItemインスタンス</returns> public static IAnalyzeItem Create(SyntaxNode node, SemanticModel semanticModel, EventContainer container, IAnalyzeItem parent = null) { IAnalyzeItem result = null; // nodeの種類によって取得メソッドを実行 switch (node) { // クラス定義 case ClassDeclarationSyntax targetNode: result = new ItemClass(targetNode, semanticModel, parent, container); break; // インターフェース case InterfaceDeclarationSyntax targetNode: result = new ItemInterface(targetNode, semanticModel, parent, container); break; // クラス要素定義 case PropertyDeclarationSyntax targetNode: result = new ItemProperty(targetNode, semanticModel, parent, container); break; case FieldDeclarationSyntax targetNode: result = new ItemField(targetNode, semanticModel, parent, container); break; case MethodDeclarationSyntax targetNode: result = new ItemMethod(targetNode, semanticModel, parent, container); break; case ConstructorDeclarationSyntax targetNode: result = new ItemConstructor(targetNode, semanticModel, parent, container); break; case EnumDeclarationSyntax targetNode: result = new ItemEnum(targetNode, semanticModel, parent, container); break; // ラムダ式 case ArrowExpressionClauseSyntax targetNode: if (parent is ItemProperty) { result = new ItemAccessor(targetNode, semanticModel, parent, container); } else { var op = semanticModel.GetOperation(targetNode).Children.First(); switch (op) { case Microsoft.CodeAnalysis.Operations.IReturnOperation operation: result = new ItemReturn(op.Syntax, semanticModel, parent, container); break; case Microsoft.CodeAnalysis.Operations.IExpressionStatementOperation operation: result = new ItemStatementExpression(op.Syntax, semanticModel, parent, container); break; } } break; // ローカル定義 case LocalFunctionStatementSyntax targetNode: result = new ItemLocalFunction(targetNode, semanticModel, parent, container); break; case LocalDeclarationStatementSyntax targetNode: result = new ItemStatementLocalDeclaration(targetNode, semanticModel, parent, container); break; case ExpressionStatementSyntax targetNode: result = new ItemStatementExpression(targetNode, semanticModel, parent, container); break; case AccessorDeclarationSyntax targetNode: result = new ItemAccessor(targetNode, semanticModel, parent, container); break; // 分岐処理 case IfStatementSyntax targetNode: result = new ItemIf(targetNode, semanticModel, parent, container); break; case ElseClauseSyntax targetNode: result = new ItemElseClause(targetNode, semanticModel, parent, container); break; case SwitchStatementSyntax targetNode: result = new ItemSwitch(targetNode, semanticModel, parent, container); break; case SwitchSectionSyntax targetNode: result = new ItemSwitchCase(targetNode, semanticModel, parent, container); break; // ループ処理 case WhileStatementSyntax targetNode: result = new ItemWhile(targetNode, semanticModel, parent, container); break; case DoStatementSyntax targetNode: result = new ItemDo(targetNode, semanticModel, parent, container); break; case ForEachStatementSyntax targetNode: result = new ItemForEach(targetNode, semanticModel, parent, container); break; case ForStatementSyntax targetNode: result = new ItemFor(targetNode, semanticModel, parent, container); break; // その他 case ReturnStatementSyntax targetNode: result = new ItemReturn(targetNode, semanticModel, parent, container); break; case BreakStatementSyntax targetNode: result = new ItemBreak(targetNode, semanticModel, parent, container); break; case ContinueStatementSyntax targetNode: result = new ItemContinue(targetNode, semanticModel, parent, container); break; } return(result); }
public DictionaryField(MemberData data, object owner) { _owner = owner; _label = new GUIContent(data.name, data.description); this.memberName = data.member.Name; var prop = data.member as PropertyInfo; if (prop != null) { GetKeyValueTypes(prop.PropertyType); _dictionary = (IDictionary)prop.GetValue(owner, null); if (_dictionary == null) { _setter = (dict) => { _dictionary = dict; prop.SetValue(owner, dict, null); if (_itemCreator != null) { _itemCreator.SetParent(_dictionary); } }; } } else { var field = data.member as FieldInfo; if (field != null) { GetKeyValueTypes(field.FieldType); _dictionary = (IDictionary)field.GetValue(owner); if (_dictionary == null) { _setter = (dict) => { _dictionary = dict; field.SetValue(owner, dict); if (_itemCreator != null) { _itemCreator.SetParent(_dictionary); } }; } } else { throw new ArgumentException("Invalid reflected member type, only fields and properties are supported."); } } if (_dictionary != null) { var count = _dictionary.Count; _editorItems = new List <EditorItem>(count); _itemCreator = new ItemConstructor(_dictionary, _keyType, _valueType); foreach (var key in _dictionary.Keys) { var item = _itemCreator.Conctruct(key, _dictionary[key]); _editorItems.Add(ReflectMaster.Reflect(item)); } } else { _editorItems = new List <EditorItem>(); } }