GObject CreateObject(PackageItem item, System.Type userClass) { Stats.LatestObjectCreation = 0; Stats.LatestGraphicsCreation = 0; GetItemAsset(item); GObject g = null; if (item.type == PackageItemType.Component) { if (userClass != null) g = (GComponent)userClass.Assembly.CreateInstance(userClass.FullName); else g = UIObjectFactory.NewObject(item); } else g = UIObjectFactory.NewObject(item); if (g == null) return null; _constructing++; g.packageItem = item; g.ConstructFromResource(); _constructing--; return g; }
public MyDragDropManager() { _agent = (GComponent)UIObjectFactory.NewObject("component"); _agent.gameObjectName = "MyDragDropAgent"; _agent.SetHome(GRoot.inst); _agent.touchable = false;//important _agent.draggable = true; //_agent.SetSize(100, 100); _agent.sortingOrder = int.MaxValue; _agent.onDragEnd.Add(__dragEnd); loader_a = (GLoader)UIObjectFactory.NewObject("loader"); loader_a.SetPivot(0.5f, 0.5f, true); loader_a.align = AlignType.Center; loader_a.verticalAlign = VertAlignType.Middle; loader_b = (GLoader)UIObjectFactory.NewObject("loader"); loader_b.SetPivot(0.5f, 0.5f, true); loader_b.align = AlignType.Center; loader_b.verticalAlign = VertAlignType.Middle; _agent.AddChild(loader_a); _agent.AddChild(loader_b); }
internal GObject CreateObject(PackageItem item, Type userClass) { GObject g; if (item.type == PackageItemType.Component) { if (userClass != null) { g = (GComponent)userClass.Assembly.CreateInstance(userClass.FullName); } else { g = UIObjectFactory.NewObject(item); } } else { g = UIObjectFactory.NewObject(item); } if (g == null) { return(null); } _constructing++; g.ConstructFromResource(item); _constructing--; return(g); }
public DragDropManager() { _agent = (GLoader)UIObjectFactory.NewObject("loader"); _agent.touchable = false; //important _agent.draggable = true; _agent.SetSize(100, 100); _agent.align = AlignType.Center; _agent.verticalAlign = VertAlignType.Middle; _agent.sortingOrder = int.MaxValue; _agent.onDragEnd.Add(__dragEnd); }
public DragDropManager() { _agent = (GLoader)UIObjectFactory.NewObject(ObjectType.Loader); _agent.gameObjectName = "DragDropAgent"; _agent.SetHome(GRoot.inst); _agent.touchable = false;//important _agent.draggable = true; _agent.SetSize(100, 100); _agent.SetPivot(0.5f, 0.5f, true); _agent.align = AlignType.Center; _agent.verticalAlign = VertAlignType.Middle; _agent.sortingOrder = int.MaxValue; _agent.onDragEnd.Add(__dragEnd); }
private GObject ConstructChild(XML xml) { string pkgId = xml.GetAttribute("pkg"); UIPackage thisPkg = _packageItem.owner; UIPackage pkg; if (pkgId != null && pkgId != thisPkg.id) { pkg = UIPackage.GetById(pkgId); if (pkg == null) { return(null); } } else { pkg = thisPkg; } string src = xml.GetAttribute("src"); if (src != null) { PackageItem pi = pkg.GetItem(src); if (pi == null) { return(null); } GObject g = pkg.CreateObject(pi, null); return(g); } else { GObject g; if (xml.name == "text" && xml.GetAttributeBool("input", false)) { g = new GTextInput(); } else { g = UIObjectFactory.NewObject(xml.name); } return(g); } }
internal GObject CreateObject(PackageItem item, System.Type userClass) { GObject g = null; if (item.type == PackageItemType.Component) { if (userClass != null) g = (GComponent)userClass.Assembly.CreateInstance(userClass.FullName); else g = UIObjectFactory.NewObject(item); } else g = UIObjectFactory.NewObject(item); if (g == null) return null; _constructing++; g.ConstructFromResource(item); _constructing--; return g; }
GObject CreateObject(PackageItem item, System.Type userClass) { Stats.LatestObjectCreation = 0; Stats.LatestGraphicsCreation = 0; GetItemAsset(item); GObject g = null; if (item.type == PackageItemType.Component) { if (userClass != null) { g = (GComponent)Activator.CreateInstance(userClass); } else { g = UIObjectFactory.NewObject(item); } } else { g = UIObjectFactory.NewObject(item); } if (g == null) { return(null); } _constructing++; g.packageItem = item; g.ConstructFromResource(); _constructing--; return(g); }
internal void ConstructFromResource(List <GObject> objectPool, int poolIndex) { XML xml = packageItem.componentData; string str; string[] arr; underConstruct = true; arr = xml.GetAttributeArray("size"); sourceWidth = int.Parse(arr[0]); sourceHeight = int.Parse(arr[1]); initWidth = sourceWidth; initHeight = sourceHeight; SetSize(sourceWidth, sourceHeight); arr = xml.GetAttributeArray("pivot"); if (arr != null) { float f1 = float.Parse(arr[0]); float f2 = float.Parse(arr[1]); this.SetPivot(f1, f2, xml.GetAttributeBool("anchor")); } this.opaque = xml.GetAttributeBool("opaque", true); arr = xml.GetAttributeArray("hitTest"); if (arr != null) { PixelHitTestData hitTestData = packageItem.owner.GetPixelHitTestData(arr[0]); if (hitTestData != null) { this.rootContainer.hitArea = new PixelHitTest(hitTestData, int.Parse(arr[1]), int.Parse(arr[2])); } } OverflowType overflow; str = xml.GetAttribute("overflow"); if (str != null) { overflow = FieldTypes.ParseOverflowType(str); } else { overflow = OverflowType.Visible; } str = xml.GetAttribute("margin"); if (str != null) { _margin.Parse(str); } if (overflow == OverflowType.Scroll) { ScrollType scroll; str = xml.GetAttribute("scroll"); if (str != null) { scroll = FieldTypes.ParseScrollType(str); } else { scroll = ScrollType.Vertical; } ScrollBarDisplayType scrollBarDisplay; str = xml.GetAttribute("scrollBar"); if (str != null) { scrollBarDisplay = FieldTypes.ParseScrollBarDisplayType(str); } else { scrollBarDisplay = ScrollBarDisplayType.Default; } int scrollBarFlags = xml.GetAttributeInt("scrollBarFlags"); Margin scrollBarMargin = new Margin(); str = xml.GetAttribute("scrollBarMargin"); if (str != null) { scrollBarMargin.Parse(str); } string vtScrollBarRes = null; string hzScrollBarRes = null; arr = xml.GetAttributeArray("scrollBarRes"); if (arr != null) { vtScrollBarRes = arr[0]; hzScrollBarRes = arr[1]; } SetupScroll(scrollBarMargin, scroll, scrollBarDisplay, scrollBarFlags, vtScrollBarRes, hzScrollBarRes); } else { SetupOverflow(overflow); } arr = xml.GetAttributeArray("clipSoftness"); if (arr != null) { this.clipSoftness = new Vector2(int.Parse(arr[0]), int.Parse(arr[1])); } _buildingDisplayList = true; XMLList.Enumerator et = xml.GetEnumerator("controller"); Controller controller; while (et.MoveNext()) { controller = new Controller(); _controllers.Add(controller); controller.parent = this; controller.Setup(et.Current); } GObject child; DisplayListItem[] displayList = packageItem.displayList; int childCount = displayList.Length; for (int i = 0; i < childCount; i++) { DisplayListItem di = displayList[i]; if (objectPool != null) { child = objectPool[poolIndex + i]; } else { if (di.packageItem != null) { di.packageItem.Load(); child = UIObjectFactory.NewObject(di.packageItem); child.packageItem = di.packageItem; child.ConstructFromResource(); } else { child = UIObjectFactory.NewObject(di.type); } } child.underConstruct = true; child.Setup_BeforeAdd(di.desc); child.parent = this; _children.Add(child); } this.relations.Setup(xml); for (int i = 0; i < childCount; i++) { _children[i].relations.Setup(displayList[i].desc); } for (int i = 0; i < childCount; i++) { child = _children[i]; child.Setup_AfterAdd(displayList[i].desc); child.underConstruct = false; } str = xml.GetAttribute("mask"); if (str != null) { this.mask = GetChildById(str).displayObject; } et = xml.GetEnumerator("transition"); while (et.MoveNext()) { Transition trans = new Transition(this); trans.Setup(et.Current); _transitions.Add(trans); } if (_transitions.Count > 0) { this.onAddedToStage.Add(__addedToStage); this.onRemovedFromStage.Add(__removedFromStage); } ApplyAllControllers(); _buildingDisplayList = false; underConstruct = false; BuildNativeDisplayList(); SetBoundsChangedFlag(); ConstructFromXML(xml); }
internal void ConstructFromResource(List <GObject> objectPool, int poolIndex) { if (!packageItem.translated) { packageItem.translated = true; TranslationHelper.TranslateComponent(packageItem); } ByteBuffer buffer = packageItem.rawData; buffer.Seek(0, 0); underConstruct = true; sourceWidth = buffer.ReadInt(); sourceHeight = buffer.ReadInt(); initWidth = sourceWidth; initHeight = sourceHeight; SetSize(sourceWidth, sourceHeight); if (buffer.ReadBool()) { minWidth = buffer.ReadInt(); maxWidth = buffer.ReadInt(); minHeight = buffer.ReadInt(); maxHeight = buffer.ReadInt(); } if (buffer.ReadBool()) { float f1 = buffer.ReadFloat(); float f2 = buffer.ReadFloat(); SetPivot(f1, f2, buffer.ReadBool()); } if (buffer.ReadBool()) { _margin.top = buffer.ReadInt(); _margin.bottom = buffer.ReadInt(); _margin.left = buffer.ReadInt(); _margin.right = buffer.ReadInt(); } OverflowType overflow = (OverflowType)buffer.ReadByte(); if (overflow == OverflowType.Scroll) { int savedPos = buffer.position; buffer.Seek(0, 7); SetupScroll(buffer); buffer.position = savedPos; } else { SetupOverflow(overflow); } if (buffer.ReadBool()) //clipSoftness { buffer.Skip(8); } _buildingDisplayList = true; buffer.Seek(0, 1); int controllerCount = buffer.ReadShort(); for (int i = 0; i < controllerCount; i++) { int nextPos = buffer.ReadShort(); nextPos += buffer.position; Controller controller = new Controller(); _controllers.Add(controller); controller.parent = this; controller.Setup(buffer); buffer.position = nextPos; } buffer.Seek(0, 2); GObject child; int childCount = buffer.ReadShort(); for (int i = 0; i < childCount; i++) { int dataLen = buffer.ReadShort(); int curPos = buffer.position; if (objectPool != null) { child = objectPool[poolIndex + i]; } else { buffer.Seek(curPos, 0); ObjectType type = (ObjectType)buffer.ReadByte(); string src = buffer.ReadS(); string pkgId = buffer.ReadS(); PackageItem pi = null; if (src != null) { UIPackage pkg; if (pkgId != null) { pkg = UIPackage.GetById(pkgId); } else { pkg = packageItem.owner; } pi = pkg != null?pkg.GetItem(src) : null; } if (pi != null) { child = UIObjectFactory.NewObject(pi); child.packageItem = pi; child.ConstructFromResource(); } else { child = UIObjectFactory.NewObject(type); } } child.underConstruct = true; child.Setup_BeforeAdd(buffer, curPos); child.InternalSetParent(this); _children.Add(child); buffer.position = curPos + dataLen; } buffer.Seek(0, 3); this.relations.Setup(buffer, true); buffer.Seek(0, 2); buffer.Skip(2); for (int i = 0; i < childCount; i++) { int nextPos = buffer.ReadShort(); nextPos += buffer.position; buffer.Seek(buffer.position, 3); _children[i].relations.Setup(buffer, false); buffer.position = nextPos; } buffer.Seek(0, 2); buffer.Skip(2); for (int i = 0; i < childCount; i++) { int nextPos = buffer.ReadShort(); nextPos += buffer.position; child = _children[i]; child.Setup_AfterAdd(buffer, buffer.position); child.underConstruct = false; buffer.position = nextPos; } buffer.Seek(0, 4); buffer.Skip(2); //customData this.opaque = buffer.ReadBool(); int maskId = buffer.ReadShort(); if (maskId != -1) { this.mask = GetChildAt(maskId).displayObject; buffer.ReadBool(); //reversedMask } string hitTestId = buffer.ReadS(); if (hitTestId != null) { PackageItem pi = packageItem.owner.GetItem(hitTestId); if (pi != null && pi.pixelHitTestData != null) { int i1 = buffer.ReadInt(); int i2 = buffer.ReadInt(); this.rootContainer.hitArea = new PixelHitTest(pi.pixelHitTestData, i1, i2, sourceWidth, sourceHeight); } } buffer.Seek(0, 5); int transitionCount = buffer.ReadShort(); for (int i = 0; i < transitionCount; i++) { int nextPos = buffer.ReadShort(); nextPos += buffer.position; Transition trans = new Transition(this); trans.Setup(buffer); _transitions.Add(trans); buffer.position = nextPos; } if (_transitions.Count > 0) { this.onAddedToStage.Add(__addedToStage); this.onRemovedFromStage.Add(__removedFromStage); } ApplyAllControllers(); _buildingDisplayList = false; underConstruct = false; BuildNativeDisplayList(); SetBoundsChangedFlag(); if (packageItem.objectType != ObjectType.Component) { ConstructExtension(buffer); } OnConstruct(); }
static IEnumerator _CreateObject(PackageItem item, UIPackage.CreateObjectCallback callback) { Stats.LatestObjectCreation = 0; Stats.LatestGraphicsCreation = 0; float frameTime = UIConfig.frameTimeForAsyncUIConstruction; List <DisplayListItem> itemList = new List <DisplayListItem>(); DisplayListItem di = new DisplayListItem(item, ObjectType.Component); di.childCount = CollectComponentChildren(item, itemList); itemList.Add(di); int cnt = itemList.Count; List <GObject> objectPool = new List <GObject>(cnt); GObject obj; float t = Time.realtimeSinceStartup; bool alreadyNextFrame = false; for (int i = 0; i < cnt; i++) { di = itemList[i]; if (di.packageItem != null) { obj = UIObjectFactory.NewObject(di.packageItem); obj.packageItem = di.packageItem; objectPool.Add(obj); UIPackage._constructing++; if (di.packageItem.type == PackageItemType.Component) { int poolStart = objectPool.Count - di.childCount - 1; ((GComponent)obj).ConstructFromResource(objectPool, poolStart); objectPool.RemoveRange(poolStart, di.childCount); } else { obj.ConstructFromResource(); } UIPackage._constructing--; } else { obj = UIObjectFactory.NewObject(di.type); objectPool.Add(obj); if (di.type == ObjectType.List && di.listItemCount > 0) { int poolStart = objectPool.Count - di.listItemCount - 1; for (int k = 0; k < di.listItemCount; k++) //把他们都放到pool里,这样GList在创建时就不需要创建对象了 { ((GList)obj).itemPool.ReturnObject(objectPool[k + poolStart]); } objectPool.RemoveRange(poolStart, di.listItemCount); } } if ((i % 5 == 0) && Time.realtimeSinceStartup - t >= frameTime) { yield return(null); t = Time.realtimeSinceStartup; alreadyNextFrame = true; } } if (!alreadyNextFrame) //强制至至少下一帧才调用callback,避免调用者逻辑出错 { yield return(null); } callback(objectPool[0]); }
IEnumerator _CreateObjectAsync(PackageItem item, CreateObjectCallback callback) { Stats.LatestObjectCreation = 0; Stats.LatestGraphicsCreation = 0; float frameTime = UIConfig.frameTimeForAsyncUIConstruction; List<DisplayListItem> itemList = new List<DisplayListItem>(); CollectComponentChildren(item, itemList); itemList.Add(new DisplayListItem(item, null)); int cnt = itemList.Count; List<GObject> objectPool = new List<GObject>(cnt); GObject obj; DisplayListItem di; float t = Time.realtimeSinceStartup; for (int i = 0; i < cnt; i++) { di = itemList[i]; if (di.packageItem != null) { obj = UIObjectFactory.NewObject(di.packageItem); obj.packageItem = di.packageItem; objectPool.Add(obj); _constructing++; if (di.packageItem.type == PackageItemType.Component) { int poolStart = objectPool.Count - di.packageItem.displayList.Length - 1; ((GComponent)obj).ConstructFromResource(objectPool, poolStart); objectPool.RemoveRange(poolStart, di.packageItem.displayList.Length); } else { GetItemAsset(di.packageItem); obj.ConstructFromResource(); } _constructing--; } else { obj = UIObjectFactory.NewObject(di.type); objectPool.Add(obj); if (di.type == "list" && di.listItemCount > 0) { int poolStart = objectPool.Count - di.listItemCount - 1; for (int k = 0; k < di.listItemCount; k++) //把他们都放到pool里,这样GList在创建时就不需要创建对象了 ((GList)obj).itemPool.ReturnObject(objectPool[k + poolStart]); objectPool.RemoveRange(poolStart, di.listItemCount); } } if ((i % 5 == 0) && Time.realtimeSinceStartup - t >= frameTime) { yield return null; t = Time.realtimeSinceStartup; } } callback(objectPool[0]); }