示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }