Beispiel #1
0
 private static void CollideTile(int[] coords1, int[] coords2, Map map)
 {
     if (map.tile(coords1).BaseMass == map.tile(coords2).BaseMass)
     {
         CollideTilePressure(coords1, coords2, map);
         return;
     }
     CollideTileElastic(coords1, coords2, map);
 }
 private static void UpdateGravity(int[] coords1, int[] coords2, Map map)
 {
     int[] displacement = Helper.GetDisplacement(coords1, coords2);
     double gravity = GetGravity(Helper.GetDistance(displacement), map.tile(coords2).mass);
     Fraction[] vectorComplexe = Helper.GetVectorComplexe(displacement);
     vectorComplexe[0].Value *= gravity;
     vectorComplexe[1].Value *= gravity;
     map.tile(coords1).velocity[0] += vectorComplexe[0].Value;
     map.tile(coords1).velocity[1] += vectorComplexe[1].Value;
 }
Beispiel #3
0
        private static void UpdateGravity(int[] coords1, int[] coords2, Map map)
        {
            int[]  displacement = Helper.GetDisplacement(coords1, coords2);
            double gravity      = GetGravity(Helper.GetDistance(displacement), map.tile(coords2).mass);

            Fraction[] vectorComplexe = Helper.GetVectorComplexe(displacement);
            vectorComplexe[0].Value       *= gravity;
            vectorComplexe[1].Value       *= gravity;
            map.tile(coords1).velocity[0] += vectorComplexe[0].Value;
            map.tile(coords1).velocity[1] += vectorComplexe[1].Value;
        }
Beispiel #4
0
 private static void UpdatePlayer(int[] coords, short[] flashVector, Map map)
 {
     if (Helper.SafeCoords(coords, flashVector, map.Height, map.Width))
     {
         if (map.tile(coords, flashVector).mass == 0)
         {
             map.tile(coords, flashVector).SetTile(map.tile(coords));
             map.tile(coords).SetTile(new Tile());
         }
     }
 }
Beispiel #5
0
        private static bool[,] GetBoolMapOfCluster(int[] coords, Map map)
        {
            int[] velocity = map.tile(coords).VelocityRoundedActual();
            int[] flashVelocity;
            bool  stillFinding = true;

            bool[,] boolMap = new bool[map.Height, map.Height];
            boolMap[coords[0], coords[1]] = true;
            while (stillFinding)
            {
                stillFinding = false;
                for (int i = 0; i < map.Height; i++)
                {
                    for (int j = 0; j < map.Width; j++)
                    {
                        if (map.map[i, j].mass != 0)
                        {
                            flashVelocity = map.map[i, j].VelocityRoundedActual();
                            if (!boolMap[i, j] && flashVelocity[0] == velocity[0] && flashVelocity[1] == velocity[1])
                            {
                                if (IsAdjacent(boolMap, new int[2] {
                                    i, j
                                }, map.Height, map.Width))
                                {
                                    boolMap[i, j] = true;
                                    stillFinding  = true;
                                }
                            }
                        }
                    }
                }
            }
            return(boolMap);
        }
Beispiel #6
0
        private static void MoveTile(int[] coords, int[] velocityMatrixRoundedActual, Map map)
        {
            int[] velocity = velocityMatrixRoundedActual;
            int   distance = Helper.GetDistance(velocity);

            int[]   flashCoords = coords;
            short[] flashVector;
            for (int i = 0; i < distance; i++)
            {
                flashVector  = Helper.GetFlashVector(velocity);
                velocity[0] -= flashVector[0];
                velocity[1] -= flashVector[1];
                if (Helper.SafeCoords(new int[2] {
                    flashCoords[0] + flashVector[0], flashCoords[1] + flashVector[1]
                }, map.Height, map.Width))
                {
                    if (map.IsObject(flashCoords, flashVector))
                    {
                        CollideTile(flashCoords, new int[2] {
                            flashCoords[0] + flashVector[0], flashCoords[1] + flashVector[1]
                        }, map);
                    }
                    else
                    {
                        map.tile(flashCoords, flashVector).SetTile(map.tile(flashCoords));
                        map.tile(flashCoords).SetTile(new Tile());
                    }
                }
                else
                {
                    map.tile(flashCoords).SetTile(new Tile());
                    return;
                }
                flashCoords[0] -= flashVector[0];
                flashCoords[1] -= flashVector[1];
                if (!Helper.SafeCoords(new int[2] {
                    flashCoords[0], flashCoords[1]
                }, map.Height, map.Width))
                {
                    return;
                }
            }
        }
Beispiel #7
0
        private static void UpdatePlayer(int[] coords, double[] playerAcceleration, Map map)
        {
            map.tile(coords).velocity[0] += playerAcceleration[0];
            map.tile(coords).velocity[1] += playerAcceleration[1];
            int[] velocity = Helper.GetRoundedVelocity(playerAcceleration);
            playerAcceleration = new double[2];
            int distance = Helper.GetDistance(velocity);

            short[] flashVector;
            int[]   flashCoords = coords;
            for (int i = 0; i < distance; i++)
            {
                flashVector = Helper.GetFlashVector(velocity);
                UpdatePlayer(flashCoords, flashVector, map);
                velocity[0]          -= flashVector[0];
                velocity[1]          -= flashVector[1];
                flashCoords[0]       += flashVector[0];
                flashCoords[1]       += flashVector[1];
                playerAcceleration[0] = 0;
                playerAcceleration[1] = 0;
            }
        }
Beispiel #8
0
        private static void CollideTileElastic(int[] coords1, int[] coords2, Map map)
        {
            //baseValues
            double[] velocity1  = map.tile(coords1).velocity;
            double[] force2     = Helper.GetForce(map.tile(coords2));
            double[] forceTotal = Helper.GetForce(map.tile(coords1));
            forceTotal[0] += force2[0];
            forceTotal[1] += force2[1];
            int mass2 = map.tile(coords2).mass;

            CollideTileElastic(map.tile(coords1), map.tile(coords2), velocity1, forceTotal, mass2);
        }
 private static bool[,] GetBoolMapOfCluster(int[] coords,Map map)
 {
     int[] velocity = map.tile(coords).VelocityRoundedActual();
     int[] flashVelocity;
     bool stillFinding = true;
     bool[,] boolMap = new bool[map.Height, map.Height];
     boolMap[coords[0], coords[1]] = true;
     while(stillFinding)
     {
         stillFinding = false;
         for (int i = 0; i < map.Height; i++)
         {
             for (int j = 0; j < map.Width; j++)
             {
                 if (map.map[i, j].mass != 0)
                 {
                     flashVelocity = map.map[i, j].VelocityRoundedActual();
                     if (!boolMap[i, j] && flashVelocity[0] == velocity[0] && flashVelocity[1] == velocity[1])
                     {
                         if (IsAdjacent(boolMap, new int[2] { i, j },map.Height,map.Width))
                         {
                             boolMap[i, j] = true;
                             stillFinding = true;
                         }
                     }
                 }
             }
         }
     }
     return boolMap;
 }
Beispiel #10
0
 private static void MoveTile(int[] coords,int[] velocityMatrixRoundedActual,Map map)
 {
     int[] velocity = velocityMatrixRoundedActual;
     int distance = Helper.GetDistance(velocity);
     int[] flashCoords = coords;
     short[] flashVector;
     for(int i = 0;i < distance;i++)
     {
         flashVector = Helper.GetFlashVector(velocity);
         velocity[0] -= flashVector[0];
         velocity[1] -= flashVector[1];
         if(Helper.SafeCoords(new int[2] { flashCoords[0] + flashVector[0], flashCoords[1] + flashVector[1] }, map.Height, map.Width))
         {
             if (map.IsObject(flashCoords, flashVector))
             {
                 CollideTile(flashCoords, new int[2] { flashCoords[0] + flashVector[0], flashCoords[1] + flashVector[1] }, map);
             }
             else
             {
                 map.tile(flashCoords, flashVector).SetTile(map.tile(flashCoords));
                 map.tile(flashCoords).SetTile(new Tile());
             }
         }
         else
         {
             map.tile(flashCoords).SetTile(new Tile());
             return;
         }
         flashCoords[0] -= flashVector[0];
         flashCoords[1] -= flashVector[1];
         if(!Helper.SafeCoords(new int[2] { flashCoords[0], flashCoords[1] }, map.Height, map.Width))
         {
             return;
         }
     }
 }
Beispiel #11
0
 /// <summary>
 /// needs work
 /// </summary>
 /// <param name="coords1"></param>
 /// <param name="coords2"></param>
 private static void CollideTilePressure(int[] coords1,int[] coords2,Map map)
 {
     double[] forceRelative = Helper.GetForce(map.tile(coords1), map.tile(coords2));
     int transferAmount = Convert.ToInt32(Math.Round(Helper.AddValues(forceRelative)));
     if(map.tile(coords1).mass <= transferAmount)
     {
         map.tile(coords2).pressure += map.tile(coords1).pressure;
         map.tile(coords2).velocity[0] += map.tile(coords1).velocity[0];
         map.tile(coords2).velocity[1] += map.tile(coords1).velocity[1];
         map.tile(coords1).SetTile(new Tile());
         return;
     }
     else
     {
         map.tile(coords2).pressure += transferAmount;
         map.tile(coords1).pressure -= transferAmount;
         CollideTileElastic(coords1, coords2,map);
         return;
     }
 }
Beispiel #12
0
 private static void CollideTileElastic(int[] coords1,int[] coords2,Map map)
 {
     //baseValues
     double[] velocity1 = map.tile(coords1).velocity;
     double[] force2 = Helper.GetForce(map.tile(coords2));
     double[] forceTotal = Helper.GetForce(map.tile(coords1));
     forceTotal[0] += force2[0];
     forceTotal[1] += force2[1];
     int mass2 = map.tile(coords2).mass;
     CollideTileElastic(map.tile(coords1),map.tile(coords2), velocity1, forceTotal, mass2);
 }
Beispiel #13
0
 private static void CollideTile(int[] coords1,int[] coords2,Map map)
 {
     if(map.tile(coords1).BaseMass == map.tile(coords2).BaseMass)
     {
         CollideTilePressure(coords1, coords2,map);
         return;
     }
     CollideTileElastic(coords1, coords2,map);
 }
Beispiel #14
0
        /// <summary>
        /// needs work
        /// </summary>
        /// <param name="coords1"></param>
        /// <param name="coords2"></param>
        private static void CollideTilePressure(int[] coords1, int[] coords2, Map map)
        {
            double[] forceRelative  = Helper.GetForce(map.tile(coords1), map.tile(coords2));
            int      transferAmount = Convert.ToInt32(Math.Round(Helper.AddValues(forceRelative)));

            if (map.tile(coords1).mass <= transferAmount)
            {
                map.tile(coords2).pressure    += map.tile(coords1).pressure;
                map.tile(coords2).velocity[0] += map.tile(coords1).velocity[0];
                map.tile(coords2).velocity[1] += map.tile(coords1).velocity[1];
                map.tile(coords1).SetTile(new Tile());
                return;
            }
            else
            {
                map.tile(coords2).pressure += transferAmount;
                map.tile(coords1).pressure -= transferAmount;
                CollideTileElastic(coords1, coords2, map);
                return;
            }
        }