private void ResizeSprite(IUserObject aUserObject) { GameObject gameObject = aUserObject.GetGameObject(); RectTransform rectTransform = gameObject.GetComponent <RectTransform> (); IShape shape = aUserObject.GetShape(); float newWidth = 1f; float newHeight = 1f; if (typeof(IRectangle).IsAssignableFrom(aUserObject.GetShape().GetType())) { newWidth = ((IRectangle)shape).GetWidth(); newHeight = ((IRectangle)shape).GetHeight(); } else if (typeof(ICircle).IsAssignableFrom(aUserObject.GetShape().GetType())) { newWidth = 2 * ((ICircle)shape).GetRadius(); newHeight = newWidth; } SpriteRenderer spriteRenderer = gameObject.GetComponent <SpriteRenderer> (); Vector3 localScale = rectTransform.localScale; localScale.x = newWidth / spriteRenderer.sprite.bounds.size.x; localScale.y = newHeight / spriteRenderer.sprite.bounds.size.y; rectTransform.localScale = localScale; }
public void Visit(IQuadTree aQuadTree) { IUserObject insertedUserObject = this.insertedPoint.GetUserObject(); IShape insertedShape = insertedUserObject.GetShape(); IRectangle targetBoundary = CalculateTargetBoundary(insertedShape); if (null != aQuadTree.GetRootPoints()) { List <IPoint <IUserObject> > pointsToBeDeleted = new List <IPoint <IUserObject> > (); foreach (IPoint <IUserObject> currentPoint in aQuadTree.GetRootPoints()) { Visit(currentPoint); if (currentPoint.GetUserObject().GetHealth() < 1) { pointsToBeDeleted.Add(currentPoint); this.userObjectSpawner.PushBackDeadObject(currentPoint.GetUserObject()); } if (insertedUserObject.GetHealth() < 1) { this.userObjectSpawner.PushBackDeadObject(insertedUserObject); break; } } aQuadTree.RemovePointsFromRoot(pointsToBeDeleted); } }
public void Visit(IQuadTree aQuadTree) { if (null != this.insertedPoint) { IUserObject insertedUserObject = this.insertedPoint.GetUserObject(); IShape insertedShape = insertedUserObject.GetShape(); IRectangle targetBoundary = calculateTargetBoundary(insertedShape); ICollection <IPoint <IUserObject> > points = aQuadTree.GetPoints(targetBoundary, false); foreach (IPoint <IUserObject> currentPoint in points) { visit(currentPoint); if (currentPoint.GetUserObject().GetHealth() < 1) { aQuadTree.RemovePointFromRoot(currentPoint); this.userObjectSpawner.PushBackDeadObject(currentPoint.GetUserObject()); } if (insertedUserObject.GetHealth() < 1) { aQuadTree.RemovePointFromRoot(this.insertedPoint); this.userObjectSpawner.PushBackDeadObject(insertedUserObject); break; } } } }
// Update is called once per frame void Update() { IUserObject userObject = userObjectSpawner.Spawn(); IPoint <IUserObject> point = new Point <IUserObject>(userObject.GetShape().GetCenterX(), userObject.GetShape().GetCenterY(), userObject); quadTree.Insert(point, insertQuadTreeVisitor); }
private void visit(IPoint <IUserObject> aPoint) { IUserObject currentUserObject = aPoint.GetUserObject(); IShape currentShape = currentUserObject.GetShape(); IUserObject insertedUserObject = this.insertedPoint.GetUserObject(); IShape insertedShape = insertedUserObject.GetShape(); bool collision = checkCollision(currentShape, insertedShape); if (collision) { insertedUserObject.TakeDamage(this.damagePoint); currentUserObject.TakeDamage(this.damagePoint); } }
private IEnumerator Spawn() { while (suitableForSpawn) { try { IUserObject userObject = userObjectSpawner.Spawn(); IPoint <IUserObject> point = new Point <IUserObject> (userObject.GetShape().GetCenterX(), userObject.GetShape().GetCenterY(), userObject); insertQuadTreeVisitor.SetInsertedPoint(point); quadTree.Insert(point, insertQuadTreeVisitor); } catch (OverLimitSpawnException exception) { suitableForSpawn = false; Debug.Log(exception); EditorUtility.DisplayDialog("Info", exception.Message, "OK"); } yield return(waitForObjectCreation); } }
private void Visit(IPoint <IUserObject> aPoint) { IUserObject currentUserObject = aPoint.GetUserObject(); IShape currentShape = currentUserObject.GetShape(); IUserObject insertedUserObject = this.insertedPoint.GetUserObject(); IShape insertedShape = insertedUserObject.GetShape(); bool collision = CheckCollision(currentShape, insertedShape); if (collision) { insertedUserObject.TakeDamage(this.damagePoint); currentUserObject.TakeDamage(this.damagePoint); ParticleSystem particleSystem = currentUserObject.GetGameObject().GetComponent <ParticleSystem> (); particleSystem.Play(); ChangeTransparencyAccordingToHealth(insertedUserObject); ChangeTransparencyAccordingToHealth(currentUserObject); } }