public static ABLevel LoadXmlLevel(string xmlString) { ABLevel level = new ABLevel(); level.gameObjects = new List<ABGameObject>(); using (XmlReader reader = XmlReader.Create(new StringReader(xmlString))) { reader.ReadToFollowing("BirdsAmount"); level.birdsAmount = Convert.ToInt32(reader.ReadElementContentAsString()); reader.ReadToFollowing("GameObjects"); while (reader.ReadToFollowing("GameObject")) { ABGameObject abObj = new ABGameObject(); reader.MoveToAttribute("label"); abObj.Label = Convert.ToInt32(reader.Value); Vector2 position = new Vector2(); reader.MoveToAttribute("x"); position.x = (float)Convert.ToDouble(reader.Value); reader.MoveToAttribute("y"); position.y = (float)Convert.ToDouble(reader.Value); abObj.Position = position; level.gameObjects.Add(abObj); } } return level; }
public bool Equals(ABGameObject otherGen) { if (ReferenceEquals(null, otherGen)) return false; if (ReferenceEquals(this, otherGen)) return true; return (Label == otherGen.Label && Position == otherGen.Position); }
public static ABLevel GameObjectsToABLevel(GameObject []gameObjs) { ABLevel level = new ABLevel(); for(int i = 0; i < gameObjs.Length; i++) { if(gameObjs[i].tag == "Bird") { level.birdsAmount++; } else { ABGameObject abGameObj = new ABGameObject(); abGameObj.Position = gameObjs[i].transform.position; abGameObj.Label = GameWorld.Instance.GetTemplateIndex(gameObjs[i]); level.gameObjects.Add(abGameObj); } } return level; }
public static void Explode(Vector2 position, float explosionArea, float explosionPower, float explosionDamage, GameObject explosive) { Collider2D[] colliders = Physics2D.OverlapCircleAll(position, explosionArea); foreach (Collider2D coll in colliders) { if (coll.attachedRigidbody && coll.gameObject != explosive && coll.GetComponent <ABBird>() == null) { float distance = Vector2.Distance((Vector2)coll.transform.position, position); Vector2 direction = ((Vector2)coll.transform.position - position).normalized; ABGameObject abGameObj = coll.gameObject.GetComponent <ABGameObject> (); if (abGameObj) { coll.gameObject.GetComponent <ABGameObject> ().DealDamage(explosionDamage / distance); } coll.attachedRigidbody.AddForce(direction * (explosionPower / (distance * 2f)), ForceMode2D.Impulse); } } }
protected void ConvertShiftGBtoABGB(ref ShiftABLevel randomLevel) { float offsetX, offsetY; float slingPos = GameWorld.Instance._slingshotTransform.position.x; offsetX = slingPos + randomLevel.LevelPlayableWidth/2f - randomLevel.GetLevelBounds().size.x/2.25f; for(int i = 0; i < randomLevel.GetStacksAmount(); i++) { if(i > 0) { if(randomLevel.GetStack(i - 1).Count > 0) { ShiftABGameObject wid = randomLevel.GetWidestObjInStack(i - 1); offsetX = wid.Position.x + wid.GetBounds().size.x/2f; } else offsetX += randomLevel.WidthOfEmptyStack/2f; } if(randomLevel.GetStack(i).Count > 0) { offsetX += randomLevel.GetWidestObjInStack(i).GetBounds().size.x/2f; for (LinkedListNode<ShiftABGameObject> obj = randomLevel.GetStack(i).First; obj != randomLevel.GetStack(i).Last.Next; obj = obj.Next) { // Define object position if(obj.Previous != null) offsetY = obj.Previous.Value.Position.y + obj.Previous.Value.GetBounds().size.y/2f - obj.Value.UnderObjectsHeight; else offsetY = GameWorld.Instance._groundTransform.GetComponent<Collider2D>().bounds.center.y + GameWorld.Instance._groundTransform.GetComponent<Collider2D>().bounds.size.y/2f; offsetY += obj.Value.GetBounds().size.y/2f; obj.Value.Position = new Vector2(offsetX, offsetY); if(!obj.Value.IsDouble) { ABGameObject baseGameObject = new ABGameObject(); baseGameObject.Label = obj.Value.Label; baseGameObject.Position = obj.Value.Position; randomLevel.gameObjects.Add(baseGameObject); } else { ABGameObject baseGameObjectA = new ABGameObject(); baseGameObjectA.Label = obj.Value.Label; Vector2 leftObjPos = obj.Value.Position; leftObjPos.x -= obj.Value.GetBounds().size.x/4f; baseGameObjectA.Position = leftObjPos; randomLevel.gameObjects.Add(baseGameObjectA); ABGameObject baseGameObjectB = new ABGameObject(); baseGameObjectB.Label = obj.Value.Label; Vector2 rightObjPos = obj.Value.Position; rightObjPos.x += obj.Value.GetBounds().size.x/4f; baseGameObjectB.Position = rightObjPos; randomLevel.gameObjects.Add(baseGameObjectB); } } } else offsetX += randomLevel.WidthOfEmptyStack/2f; } }