private bool findRadialGravity(Position pos, float radius, ElementColor color) { foreach (Element elem in elementsTimeLine[timeStep]) { if (elem.type == ElementType.RadialGravity) { float dist = LevelHelper.getDistance(pos, elem.getPosition()); if (dist < radius) { RadialGravity rg = (RadialGravity)elem; if (rg.containsColor(color)) { return(true); } else { // add color to existing RadialGravity elementsTimeLine[timeStep].Remove(rg); List <ElementColor> colors = new List <ElementColor>(); colors.Add(rg.colors[0]); colors.Add(color); RadialGravity rgNew = new RadialGravity(rg.getPosition(), rg.strength, rg.strengthRadius, colors, rg.id); elementsTimeLine[timeStep].Add(rgNew); return(true); } } } } return(false); }
private void AddGravity(Position pos1, Position pos2, ElementColor color) { Position center = LevelHelper.getCenter(pos1, pos2); float radius = LevelHelper.getDistance(pos1, pos2) * factorRadiusGravity; Position posRG = Randoms.getPositionInCircle(center, radius); float dist1 = LevelHelper.getDistance(pos1, posRG); float dist2 = LevelHelper.getDistance(pos2, posRG); float dist = Math.Max(dist1, dist2); float strength = GravityForce.getForce(dist); float strengthRadius = GravityForce.getForceRadius(strength); RadialGravity rg = new RadialGravity(posRG, strength, strengthRadius, new List <ElementColor>() { color }); elementsTimeLine[timeStep].Add(rg); }
protected Position getFreePosition(float radiusElem, Position centerCircle = null, float radiusCircle = 0) { bool bContinue = true; int cnt = 0; Position pos = null; while (bContinue) { if (centerCircle == null) { pos = Randoms.getPosition(radiusElem); } else { // ToDo: Position maybe out of screen pos = Randoms.getPositionInCircle(centerCircle, radiusCircle); } cnt++; bContinue = false; foreach (Element elem in elementsTimeLine[timeStep]) { Position elemPos = elem.getPosition(); float distance = LevelHelper.getDistance(pos, elemPos); if (distance <= elem.radius + radiusElem) { bContinue = true; } } if (cnt >= maxTriesGetFreePosition) { throw new Exception("getFreePosition: Max tries reached"); } } return(pos); }