Ejemplo n.º 1
0
        // ## Neighbor Remove ##
        // This method is a handler for the NeighborRemove event. It is triggered
        // when two cubes that were neighbored are separated.
        //
        // The side arguments for this event are the sides that the cubes
        // _were_ neighbored on before they were separated. If you check the
        // current state of their neighbors on those sides, they should of course
        // be NONE.
        public void OnNeighborRemove(Cube cube1, Cube.Side side1, Cube cube2, Cube.Side side2)
        {
            CubeWrapper wrapper  = (CubeWrapper)cube1.userData;
            CubeWrapper wrapper2 = (CubeWrapper)cube2.userData;

            if (wrapper != null)
            {
                wrapper.mNeedTilt = false;
                //wrapper.mNeedFlip = false;
                Log.Debug("In OnNeighborRemove");
            }

            if (wrapper2 != null)
            {
                wrapper2.mNeedTilt = false;
                //wrapper.mNeedFlip = false;
                Log.Debug("In OnNeighborRemove");
            }

            //if (wrapper.eColiColor == "blue")
            //{
            //    _client.SendPhoto("Blue");
            //}
            //else if (wrapper.eColiColor == "red")
            //{
            //    _client.SendPhoto("Red");
            //}
            //else if (wrapper.eColiColor == "yellow")
            //{
            //    _client.SendPhoto("Yellow");
            //}
        }
Ejemplo n.º 2
0
        // ## Neighbor Add ##
        // This method is a handler for the NeighborAdd event. It is triggered when
        // two cubes are placed side by side.
        //
        // Cube1 and cube2 are the two cubes that are involved in this neighboring.
        // The two cube arguments can be in any order; if your logic depends on
        // cubes being in specific positions or roles, you need to add logic to
        // this handler to sort the two cubes out.
        //
        // Side1 and side2 are the sides that the cubes neighbored on.
        private void OnNeighborAdd(Cube cube1, Cube.Side side1, Cube cube2, Cube.Side side2)
        {
            Log.Debug("Neighbor add: {0}.{1} <-> {2}.{3}", cube1.UniqueId, side1, cube2.UniqueId, side2);

            CubeWrapper wrapper = (CubeWrapper)cube1.userData;

            if (wrapper != null)
            {
                // Here we set our wrapper's rotation value so that the image gets
                // drawn with its top side pointing towards the neighbor cube.
                //
                // Cube.Side is an enumeration (TOP, LEFT, BOTTOM, RIGHT, NONE). The
                // values of the enumeration can be cast to integers by counting
                // counterclockwise:
                //
                // * TOP = 0
                // * LEFT = 1
                // * BOTTOM = 2
                // * RIGHT = 3
                // * NONE = 4
                //wrapper.mRotation = (int)side1;
                wrapper.mNeedDraw = true;
            }

            wrapper = (CubeWrapper)cube2.userData;
            if (wrapper != null)
            {
                //wrapper.mRotation = (int)side2;
                wrapper.mNeedDraw = true;
            }


            //TODO: Siegüberprüfung:
            Cube[] row = CubeHelper.FindRow(CubeSet);
            if (row.Length == totalCubes)
            {
                Log.Debug("6 connected");
                //found = true;
                //int lastId = -1;
                //foreach (Cube cube in row) {
                //					CubeWrapper wrapper = (CubeWrapper)cube.userData;
                //					if (wrapper.mIndex < lastId)
                //						found = false;
                //					lastId = wrapper.mIndex;
                //				}
            }
        }
Ejemplo n.º 3
0
        /*
         * // ## Neighbor Add ##
         * // This method is a handler for the NeighborAdd event. It is triggered when
         * // two cubes are placed side by side.
         * //
         * // Cube1 and cube2 are the two cubes that are involved in this neighboring.
         * // The two cube arguments can be in any order; if your logic depends on
         * // cubes being in specific positions or roles, you need to add logic to
         * // this handler to sort the two cubes out.
         * //
         * // Side1 and side2 are the sides that the cubes neighbored on.
         * private void OnNeighborAdd (Cube cube1, Cube.Side side1, Cube cube2, Cube.Side side2)
         * {
         *      CubeWrapper wrapper1 = (CubeWrapper)cube1.userData;
         *      CubeWrapper wrapper2 = (CubeWrapper)cube2.userData;
         *      Log.Debug ("Neighbor add: {0}.{1} <-> {2}.{3}", wrapper1.mNumber, side1, wrapper2.mNumber, side2);
         *
         *      if (wrapper2.mNumber < wrapper1.mNumber) {
         *              CubeWrapper wrapper3 = cube1.userData;
         *              wrapper2 = wrapper1;
         *              wrapper1 = wrapper3;
         *      }
         *
         *
         *
         *      //s'arranger pour savoir quel cube est le premier, celui qui a le plus petit nombre, devient wrapper1
         *      if (cube1 == SOURCE) {
         *              switch (cube2){
         *              case FILTER:
         *                      break;
         *              }
         *
         *
         *      }
         *
         *
         *      if (wrapper1.mNumber == 1) {
         *              if (wrapper2.mNumber == 2) {
         *
         *              }
         *      }
         *
         *      if (wrapper1.mNumber== 2) {
         *              if (wrapper2.mNumber == 3) {
         *                      cube2.Image("all",0,0,0,ALL_LFO,Cube.SCREEN_WIDTH,Cube.SCREEN_HEIGHT,0,0);
         *              }
         *      }
         *
         *      cube1.Paint();
         *      cube2.Paint();
         *      /*
         * CubeWrapper wrapper = (CubeWrapper)cube1.userData;
         * if (wrapper != null) {
         * // Here we set our wrapper's rotation value so that the image gets
         * // drawn with its top side pointing towards the neighbor cube.
         * //
         * // Cube.Side is an enumeration (TOP, LEFT, BOTTOM, RIGHT, NONE). The
         * // values of the enumeration can be cast to integers by counting
         * // counterclockwise:
         * //
         * // * TOP = 0
         * // * LEFT = 1
         * // * BOTTOM = 2
         * // * RIGHT = 3
         * // * NONE = 4
         * wrapper.mRotation = (int)side1;
         * wrapper.mNeedDraw = true;
         * }
         *
         * wrapper = (CubeWrapper)cube2.userData;
         * if (wrapper != null) {
         * wrapper.mRotation = (int)side2;
         * wrapper.mNeedDraw = true;
         *
         * }
         *
         * // ## Neighbor Remove ##
         * // This method is a handler for the NeighborRemove event. It is triggered
         * // when two cubes that were neighbored are separated.
         * //
         * // The side arguments for this event are the sides that the cubes
         * // _were_ neighbored on before they were separated. If you check the
         * // current state of their neighbors on those sides, they should of course
         * // be NONE.
         * private void OnNeighborRemove (Cube cube1, Cube.Side side1, Cube cube2, Cube.Side side2)
         * {
         * CubeWrapper wrapper1 = (CubeWrapper)cube1.userData;
         *      CubeWrapper wrapper2 = (CubeWrapper)cube2.userData;
         *
         *      if (wrapper2.mNumber < wrapper1.mNumber) {
         *              CubeWrapper wrapper3 = cube1.userData;
         *              wrapper2 = wrapper1;
         *              wrapper1 = wrapper3;
         *      }
         *      Log.Debug ("Neighbor remove: {0}.{1} <-> {2}.{3}", wrapper1.mNumber, side1, wrapper2.mNumber, side2);
         *
         *      if (cube1 == SOURCE) {
         *              switch (cube2){
         *              case FILTER:
         *                      break;
         *              }
         *
         *
         *      }
         *
         *
         *      if (wrapper1.mNumber == 1) {
         *              if (wrapper2.mNumber == 2) {
         *                      cube2.Image("all",0,0,0,ALL_FILTERBASIC,Cube.SCREEN_WIDTH,Cube.SCREEN_HEIGHT,0,0);
         *                      cube1.Image("all",0,0,0,ALL_SOURCE,Cube.SCREEN_WIDTH,Cube.SCREEN_HEIGHT,0,0);
         *                      //message OSC, son de base
         *              }
         *      }
         *
         *      if (wrapper1.mNumber == 2) {
         *              if (wrapper2.mNumber == 3) {
         *                      cube2.Image("all",0,0,0,ALL_LFOBASIC,Cube.SCREEN_WIDTH,Cube.SCREEN_HEIGHT,0,0);
         *                      // message OSC, son filtré simplement
         *                      //savoir si on sait faire un "ctrl+z" sur KYMA, alors on reprend juste le son précédent
         *                      //si pas -> switch
         *              }
         *      }
         *
         *      cube1.Paint();
         *      cube2.Paint();
         *
         * /*  CubeWrapper wrapper = (CubeWrapper)cube1.userData;
         * if (wrapper != null) {
         * wrapper.mScale = 1;
         * wrapper.mRotation = 0;
         * wrapper.mNeedDraw = true;
         * }
         *
         * wrapper = (CubeWrapper)cube2.userData;
         * if (wrapper != null) {
         * wrapper.mScale = 1;
         * wrapper.mRotation = 0;
         * wrapper.mNeedDraw = true;
         * }
         * }
         */
        private void OnNeighborAdd(Cube cube1, Cube.Side side1, Cube cube2, Cube.Side side2)
        {
            CubeWrapper wrapper1 = (CubeWrapper)cube1.userData;
            CubeWrapper wrapper2 = (CubeWrapper)cube2.userData;

            if (wrapper2.mNumber < wrapper1.mNumber)
            {
                CubeWrapper wrapper3 = (CubeWrapper)cube2.userData;
                wrapper2 = wrapper1;
                wrapper1 = wrapper3;

                Cube cuby;
                cuby  = cube2;
                cube2 = cube1;
                cube1 = cuby;
            }

            Cube[] connected = CubeHelper.FindConnected(cube1);

            foreach (Cube cuby in connected)
            {
                Log.Debug("connected {0}", connected);
            }

            if (connected.Length > 1)
            {
                foreach (Cube cubelook in connected)
                {
                    CubeWrapper wrapper4 = (CubeWrapper)cubelook.userData;

                    if (wrapper4.mNumber == 1)
                    {
                        wrapper2.mIsconnected = true;
                        wrapper2.mHaschanged  = true;
                        mNeedCheck            = true;
                        Log.Debug("on a bien changé le connected");
                    }
                }
            }
            mNeedCheck = true;
        }
Ejemplo n.º 4
0
        // ## Neighbor Remove ##
        // This method is a handler for the NeighborRemove event. It is triggered
        // when two cubes that were neighbored are separated.
        //
        // The side arguments for this event are the sides that the cubes
        // _were_ neighbored on before they were separated. If you check the
        // current state of their neighbors on those sides, they should of course
        // be NONE.
        private void OnNeighborRemove(Cube cube1, Cube.Side side1, Cube cube2, Cube.Side side2)
        {
            Log.Debug("Neighbor remove: {0}.{1} <-> {2}.{3}", cube1.UniqueId, side1, cube2.UniqueId, side2);

            CubeWrapper wrapper = (CubeWrapper)cube1.userData;

            if (wrapper != null)
            {
                wrapper.mScale = 1;
                //wrapper.mRotation = 0;
                wrapper.mNeedDraw = true;
            }

            wrapper = (CubeWrapper)cube2.userData;
            if (wrapper != null)
            {
                wrapper.mScale = 1;
                //wrapper.mRotation = 0;
                wrapper.mNeedDraw = true;
            }
        }
Ejemplo n.º 5
0
        // ## Neighbor Add ##
        // This method is a handler for the NeighborAdd event. It is triggered when
        // two cubes are placed side by side.
        //
        // Cube1 and cube2 are the two cubes that are involved in this neighboring.
        // The two cube arguments can be in any order; if your logic depends on
        // cubes being in specific positions or roles, you need to add logic to
        // this handler to sort the two cubes out.
        //
        // Side1 and side2 are the sides that the cubes neighbored on.

        // If two cubes are neighboring each other, raise the mNeedTilt flag (see the OnTilt method).

        private void OnNeighborAdd(Cube cube1, Cube.Side side1, Cube cube2, Cube.Side side2)
        {
            Log.Debug("In neighbor method");
            CubeWrapper wrapper  = (CubeWrapper)cube1.userData;
            CubeWrapper wrapper2 = (CubeWrapper)cube2.userData;

            //If neither CubeWrappers are null...
            if (wrapper != null && wrapper2 != null)
            {
                string wId  = wrapper.mCube.UniqueId;
                string w2Id = wrapper2.mCube.UniqueId;

                #region If colored and plasmid cubes become neighbors

                if (wrapper.mCubeType == 0 && wrapper2.mCubeType == 1)
                {
                    Log.Debug("wrapper is 0 and wrapper2 is 1");
                    //reorients cubes - if cube1 is the color cube and cube2 is the plasmid cube
                    if (cube1.Neighbors.SideOf(cube2) != Cube.Side.BOTTOM &&
                        cube2.Neighbors.SideOf(cube1) != Cube.Side.TOP)
                    {
                        Cube.Side sidePlasmid = cube1.Neighbors.SideOf(cube2); //defines side neighboring cube is on
                        Cube.Side sideColor   = cube2.Neighbors.SideOf(cube1); //defines side of neighbor original cube is adjacent to

                        #region reorients plasmid cube
                        if (sideColor == Cube.Side.BOTTOM)
                        {
                            if (cube2.Orientation == Cube.Side.BOTTOM)
                            {
                                cube2.Orientation = Cube.Side.TOP;
                            }
                            else if (cube2.Orientation == Cube.Side.TOP)
                            {
                                cube2.Orientation = Cube.Side.BOTTOM;
                            }
                            else if (cube2.Orientation == Cube.Side.RIGHT)
                            {
                                cube2.Orientation = Cube.Side.LEFT;
                            }
                            else if (cube2.Orientation == Cube.Side.LEFT)
                            {
                                cube2.Orientation = Cube.Side.RIGHT;
                            }
                        }

                        if (sideColor == Cube.Side.RIGHT)
                        {
                            if (cube2.Orientation == Cube.Side.BOTTOM)
                            {
                                cube2.Orientation = Cube.Side.LEFT;
                            }
                            else if (cube2.Orientation == Cube.Side.TOP)
                            {
                                cube2.Orientation = Cube.Side.RIGHT;
                            }
                            else if (cube2.Orientation == Cube.Side.RIGHT)
                            {
                                cube2.Orientation = Cube.Side.BOTTOM;
                            }
                            else if (cube2.Orientation == Cube.Side.LEFT)
                            {
                                cube2.Orientation = Cube.Side.TOP;
                            }
                        }

                        if (sideColor == Cube.Side.LEFT)
                        {
                            if (cube2.Orientation == Cube.Side.BOTTOM)
                            {
                                cube2.Orientation = Cube.Side.RIGHT;
                            }
                            else if (cube2.Orientation == Cube.Side.TOP)
                            {
                                cube2.Orientation = Cube.Side.LEFT;
                            }
                            else if (cube2.Orientation == Cube.Side.RIGHT)
                            {
                                cube2.Orientation = Cube.Side.TOP;
                            }
                            else if (cube2.Orientation == Cube.Side.LEFT)
                            {
                                cube2.Orientation = Cube.Side.BOTTOM;
                            }
                        }
                        #endregion

                        #region reorients color cube
                        if (sidePlasmid == Cube.Side.LEFT)
                        {
                            if (cube1.Orientation == Cube.Side.BOTTOM)
                            {
                                cube1.Orientation = Cube.Side.LEFT;
                            }
                            else if (cube1.Orientation == Cube.Side.TOP)
                            {
                                cube1.Orientation = Cube.Side.RIGHT;
                            }
                            else if (cube1.Orientation == Cube.Side.RIGHT)
                            {
                                cube1.Orientation = Cube.Side.BOTTOM;
                            }
                            else if (cube1.Orientation == Cube.Side.LEFT)
                            {
                                cube1.Orientation = Cube.Side.TOP;
                            }
                        }
                        if (sidePlasmid == Cube.Side.RIGHT)
                        {
                            if (cube1.Orientation == Cube.Side.BOTTOM)
                            {
                                cube1.Orientation = Cube.Side.RIGHT;
                            }
                            else if (cube1.Orientation == Cube.Side.TOP)
                            {
                                cube1.Orientation = Cube.Side.LEFT;
                            }
                            else if (cube1.Orientation == Cube.Side.LEFT)
                            {
                                cube1.Orientation = Cube.Side.BOTTOM;
                            }
                            else if (cube1.Orientation == Cube.Side.RIGHT)
                            {
                                cube1.Orientation = Cube.Side.TOP;
                            }
                        }
                        if (sidePlasmid == Cube.Side.TOP)
                        {
                            if (cube1.Orientation == Cube.Side.BOTTOM)
                            {
                                cube1.Orientation = Cube.Side.TOP;
                            }
                            else if (cube1.Orientation == Cube.Side.TOP)
                            {
                                cube1.Orientation = Cube.Side.BOTTOM;
                            }
                            else if (cube1.Orientation == Cube.Side.LEFT)
                            {
                                cube1.Orientation = Cube.Side.RIGHT;
                            }
                            else if (cube1.Orientation == Cube.Side.RIGHT)
                            {
                                cube1.Orientation = Cube.Side.LEFT;
                            }
                        }
                        #endregion
                        //redraws both cubes
                        wrapper.DrawColoredCube();
                        wrapper2.DrawPlasmidCube();
                    }

                    //Log.Debug("1 Neighbors: Colored and Plasmid");
                    if (wrapper.mCube.Neighbors.Bottom == cube2)
                    {
                        Log.Debug("1 Neighbors: Colored and Plasmid");
                        //wrapper.cCubeStringId = wId;
                        wrapper2.cCubeStringId = wId;
                        wrapper.pCubeStringId  = w2Id;
                        //wrapper2.pCubeStringId = w2Id;
                    }
                }//end if wrapper has colored cube and wrapper2 has plasmid cube

                if (wrapper.mCubeType == 1 && wrapper2.mCubeType == 0)
                {
                    Log.Debug("wrapper2 is 0 and wrapper is 1");
                    //reorients cube - if cube2 is the color cube and cube1 is the plasmid cube
                    if (cube2.Neighbors.SideOf(cube1) != Cube.Side.BOTTOM &&
                        cube1.Neighbors.SideOf(cube2) != Cube.Side.TOP)
                    {
                        Cube.Side sidePlasmid = cube2.Neighbors.SideOf(cube1); //defines side neighboring cube is on
                        Cube.Side sideColor   = cube1.Neighbors.SideOf(cube2); //defines side of neighbor original cube is adjacent to

                        #region reorients plasmid cube
                        if (sideColor == Cube.Side.BOTTOM)
                        {
                            if (cube1.Orientation == Cube.Side.BOTTOM)
                            {
                                cube1.Orientation = Cube.Side.TOP;
                            }
                            else if (cube1.Orientation == Cube.Side.TOP)
                            {
                                cube1.Orientation = Cube.Side.BOTTOM;
                            }
                            else if (cube1.Orientation == Cube.Side.RIGHT)
                            {
                                cube1.Orientation = Cube.Side.LEFT;
                            }
                            else if (cube1.Orientation == Cube.Side.LEFT)
                            {
                                cube1.Orientation = Cube.Side.RIGHT;
                            }
                        }

                        if (sideColor == Cube.Side.RIGHT)
                        {
                            if (cube1.Orientation == Cube.Side.BOTTOM)
                            {
                                cube1.Orientation = Cube.Side.LEFT;
                            }
                            else if (cube1.Orientation == Cube.Side.TOP)
                            {
                                cube1.Orientation = Cube.Side.RIGHT;
                            }
                            else if (cube1.Orientation == Cube.Side.RIGHT)
                            {
                                cube1.Orientation = Cube.Side.BOTTOM;
                            }
                            else if (cube1.Orientation == Cube.Side.LEFT)
                            {
                                cube1.Orientation = Cube.Side.TOP;
                            }
                        }

                        if (sideColor == Cube.Side.LEFT)
                        {
                            if (cube1.Orientation == Cube.Side.BOTTOM)
                            {
                                cube1.Orientation = Cube.Side.RIGHT;
                            }
                            else if (cube1.Orientation == Cube.Side.TOP)
                            {
                                cube1.Orientation = Cube.Side.LEFT;
                            }
                            else if (cube1.Orientation == Cube.Side.RIGHT)
                            {
                                cube1.Orientation = Cube.Side.TOP;
                            }
                            else if (cube1.Orientation == Cube.Side.LEFT)
                            {
                                cube1.Orientation = Cube.Side.BOTTOM;
                            }
                        }
                        #endregion

                        #region reorients color cube
                        if (sidePlasmid == Cube.Side.LEFT)
                        {
                            if (cube2.Orientation == Cube.Side.BOTTOM)
                            {
                                cube2.Orientation = Cube.Side.LEFT;
                            }
                            else if (cube2.Orientation == Cube.Side.TOP)
                            {
                                cube2.Orientation = Cube.Side.RIGHT;
                            }
                            else if (cube2.Orientation == Cube.Side.RIGHT)
                            {
                                cube2.Orientation = Cube.Side.BOTTOM;
                            }
                            else if (cube2.Orientation == Cube.Side.LEFT)
                            {
                                cube2.Orientation = Cube.Side.TOP;
                            }
                        }
                        if (sidePlasmid == Cube.Side.RIGHT)
                        {
                            if (cube2.Orientation == Cube.Side.BOTTOM)
                            {
                                cube2.Orientation = Cube.Side.RIGHT;
                            }
                            else if (cube2.Orientation == Cube.Side.TOP)
                            {
                                cube2.Orientation = Cube.Side.LEFT;
                            }
                            else if (cube2.Orientation == Cube.Side.LEFT)
                            {
                                cube2.Orientation = Cube.Side.BOTTOM;
                            }
                            else if (cube2.Orientation == Cube.Side.RIGHT)
                            {
                                cube2.Orientation = Cube.Side.TOP;
                            }
                        }
                        if (sidePlasmid == Cube.Side.TOP)
                        {
                            if (cube2.Orientation == Cube.Side.BOTTOM)
                            {
                                cube2.Orientation = Cube.Side.TOP;
                            }
                            else if (cube2.Orientation == Cube.Side.TOP)
                            {
                                cube2.Orientation = Cube.Side.BOTTOM;
                            }
                            else if (cube2.Orientation == Cube.Side.LEFT)
                            {
                                cube2.Orientation = Cube.Side.RIGHT;
                            }
                            else if (cube2.Orientation == Cube.Side.RIGHT)
                            {
                                cube2.Orientation = Cube.Side.LEFT;
                            }
                        }
                        #endregion

                        //redraws both cubes
                        wrapper2.DrawColoredCube();
                        wrapper.DrawPlasmidCube();
                    }

                    //Log.Debug("2 Neighbors: Colored and Plasmid");
                    if (wrapper2.mCube.Neighbors.Bottom == cube1)
                    {
                        Log.Debug("2 Neighbors: Colored and Plasmid");
                        //wrapper.pCubeStringId = wId;
                        wrapper2.pCubeStringId = wId;
                        wrapper.cCubeStringId  = w2Id;
                        //wrapper2.cCubeStringId = w2Id;
                    }
                }//end if wrapper has plasmid cube and wrapper2 has colored cube
                #endregion

                #region If plasmid and E. Coli cubes become neighbors
                if (wrapper.mCubeType == 1 && wrapper2.mCubeType == 2)
                {
                    cube1.Orientation = Cube.Side.TOP;
                    wrapper.DrawPlasmidCube();

                    Log.Debug("1 Neighbors: Plasmid and E. Coli");
                    //if (wrapper.mCube.Neighbors.Right == cube2 ||
                    //    wrapper.mCube.Neighbors.Left == cube2)
                    //{
                    wrapper2.pCubeStringId = wId;
                    wrapper.eCubeStringId  = w2Id;
                    wrapper.mNeedFlip      = true;
                    //}
                }

                if (wrapper.mCubeType == 2 && wrapper2.mCubeType == 1)
                {
                    cube2.Orientation = Cube.Side.TOP;
                    wrapper2.DrawPlasmidCube();
                    Log.Debug("2 Neighbors: Plasmid and E. Coli");

                    //if (wrapper2.mCube.Neighbors.Right == cube1 ||
                    //    wrapper2.mCube.Neighbors.Left == cube1)
                    //{
                    wrapper2.eCubeStringId = wId;
                    wrapper.pCubeStringId  = w2Id;
                    wrapper2.mNeedFlip     = true;

                    //}
                }

                #endregion

                #region Tilting animation
                //Each if statement does the same thing just from a different cube's perspective--
                //If the bottom neighbor of the cube is cube2 and if cube is a colored cube and
                //the neighboring cube is a bottom cube

                if (cube1.Neighbors.Bottom == cube2 &&
                    (wrapper.mCubeType == 0 && wrapper2.mCubeType == 1))
                {
                    Log.Debug("mNeedTilt is true");
                    wrapper.mNeedTilt = true;
                }

                if (cube2.Neighbors.Bottom == cube1 &&
                    (wrapper.mCubeType == 1 && wrapper2.mCubeType == 0))
                {
                    Log.Debug("mNeedTilt is true");
                    wrapper2.mNeedTilt = true;
                }
                #endregion

                #region Left-Right Plasmid/Ecoli Interaction
                //Each if statement checks for whether the neighboring cubes are Plasmid and E. Coli cubes
                //and they are to the left or right of each other

                //if ((cube1.Neighbors.Left == cube2
                //    && (wrapper.mCubeType == 1 && wrapper2.mCubeType == 2)) ||
                //    ((cube1.Neighbors.Right == cube2)
                //    && (wrapper.mCubeType == 1 && wrapper2.mCubeType == 2)))
                //{
                //    Log.Debug("mNeedFlip is true");
                //    wrapper.mNeedFlip = true;
                //}

                //if ((cube2.Neighbors.Left == cube1 &&
                //    (wrapper.mCubeType == 2 && wrapper2.mCubeType == 1)) ||
                //    (cube2.Neighbors.Right == cube1 &&
                //    (wrapper.mCubeType == 2 && wrapper2.mCubeType == 1)))
                //{
                //    Log.Debug("mNeedFlip is true");
                //    wrapper2.mNeedFlip = true;
                //}
                #endregion

                #region If two E. Coli cubes become top-bottom neighbors
                if (wrapper.mCubeType == 2 && wrapper2.mCubeType == 2)
                {
                    resetCubeWrappers(cube1, cube2);
                    Log.Debug("two white Ecoli!");
                    if (wrapper.mCube.Neighbors.Bottom == cube2) //If cube1 is on top
                    {
                        Log.Debug("white top, white bottom");
                        wrapper.bCubeWrapper = wrapper2;
                        wrapper.bCube        = cube2;
                        //wrapper.mCube.Orientation = Cube.Side.BOTTOM;
                        wrapper.mCube.Image(mEcoliTravelNames[0], 0, 0, 0, 0, 128, 128, 1, 2);
                        wrapper.mEcoliTravel = true;
                    }

                    if (wrapper2.mCube.Neighbors.Bottom == cube1) //If cube2 is on top
                    {
                        Log.Debug("white bottom, white top");
                        wrapper2.bCubeWrapper = wrapper;
                        wrapper2.bCube        = cube1;
                        //wrapper2.mCube.Orientation = Cube.Side.BOTTOM;
                        wrapper2.mCube.Image(mEcoliTravelNames[0], 0, 0, 0, 0, 128, 128, 1, 2);
                        wrapper2.mEcoliTravel = true;
                    }
                }

                #endregion

                #region If two Ecoli cubes Left-Right Neighbors
                if (wrapper.mCubeType == 2 && wrapper2.mCubeType == 2)
                {
                    resetCubeWrappers(cube1, cube2);
                    //Log.Debug("two white Ecoli!");
                    if (wrapper.mCube.Neighbors.Right == cube2 ||
                        wrapper2.mCube.Neighbors.Left == cube1)
                    {
                        //Log.Debug("white left, white right");
                        wrapper.rCubeWrapper = wrapper2;
                        wrapper.rCube        = cube2;
                        //wrapper2.lCubeWrapper = wrapper;
                        //wrapper2.lCube = cube1;
                        //wrapper.mCube.Orientation = Cube.Side.BOTTOM;
                        wrapper.mCube.Image(mEcoliTravelNames[0], 0, 0, 0, 0, 128, 128, 1, 1);
                        wrapper2.mCube.Image(mEcoliTravelNames[0], 0, 0, 0, 0, 128, 128, 1, 3);
                        wrapper.mEcoliTravel = true;
                        return;
                    }

                    if (wrapper2.mCube.Neighbors.Right == cube1 ||
                        wrapper.mCube.Neighbors.Left == cube2)
                    {
                        //Log.Debug("white right, white left");
                        wrapper2.rCubeWrapper = wrapper;
                        wrapper2.rCube        = cube1;
                        //wrapper.lCubeWrapper = wrapper2;
                        //wrapper.lCube = cube2;
                        //wrapper.mCube.Orientation = Cube.Side.BOTTOM;
                        wrapper2.mCube.Image(mEcoliTravelNames[0], 0, 0, 0, 0, 128, 128, 1, 1);
                        wrapper.mCube.Image(mEcoliTravelNames[0], 0, 0, 0, 0, 128, 128, 1, 3);
                        wrapper2.mEcoliTravel = true;
                        return;
                    }
                }

                #endregion
            }
        }
Ejemplo n.º 6
0
        private void OnNeighborRemove(Cube cube1, Cube.Side side1, Cube cube2, Cube.Side side2)
        {
            bool sourceishere  = false;
            bool sourceishere2 = false;

            //the "remove part" is a little bit more tricky because we have to check which part stays with the source

            /*
             *      CubeWrapper wrapper1 = (CubeWrapper)cube1.userData;
             *      CubeWrapper wrapper2 = (CubeWrapper)cube2.userData;
             *
             *      if (wrapper2.mNumber < wrapper1.mNumber)
             *      {
             *              CubeWrapper wrapper3 = (CubeWrapper)cube2.userData;
             *              wrapper2 = wrapper1;
             *              wrapper1 = wrapper3;
             *
             *              Cube cuby = Cube;
             *              cuby = cube2;
             *              cube2 = cube1;
             *              cube1 = cuby;
             *      }
             */
            Cube[] connected  = CubeHelper.FindConnected(cube1);
            Cube[] connected2 = CubeHelper.FindConnected(cube2);

            foreach (Cube cubelook4 in connected)
            {
                CubeWrapper wrapper4 = (CubeWrapper)cubelook4.userData;

                if (wrapper4.mNumber == 1)
                {                 //we check if the source is in this part, and if it is the case, everycube in the group is connected
                    sourceishere = true;
                }
            }

            foreach (Cube cubelook2 in connected2)
            {
                CubeWrapper wrapper4 = (CubeWrapper)cubelook2.userData;

                if (wrapper4.mNumber == 1)
                {                 //we check if the source is in this part, and if it is the case, everycube in the group is connected
                    sourceishere2 = true;
                }
            }


            if (sourceishere)
            {
                foreach (Cube cubelook3 in connected)
                {
                    CubeWrapper wrapper5 = (CubeWrapper)cubelook3.userData;
                    wrapper5.mIsconnected = true;                    //if it is not the case, they are not connected
                    wrapper5.mHaschanged  = true;
                }
                foreach (Cube cubelook3 in connected2)
                {
                    CubeWrapper wrapper5 = (CubeWrapper)cubelook3.userData;
                    wrapper5.mIsconnected = false;                    //if it is not the case, they are not connected
                    wrapper5.mHaschanged  = true;
                }
            }

            if (sourceishere2)
            {
                foreach (Cube cubelook3 in connected2)
                {
                    CubeWrapper wrapper5 = (CubeWrapper)cubelook3.userData;
                    wrapper5.mIsconnected = true;                    //if it is not the case, they are not connected
                    wrapper5.mHaschanged  = true;
                }
                foreach (Cube cubelook3 in connected)
                {
                    CubeWrapper wrapper5 = (CubeWrapper)cubelook3.userData;
                    wrapper5.mIsconnected = false;                    //if it is not the case, they are not connected
                    wrapper5.mHaschanged  = true;
                }
            }

            /*foreach (Cube cubelook2 in connected2)
             * {
             *      CubeWrapper wrapper4 = (CubeWrapper)cubelook2.userData;
             *
             *      if (wrapper4.mNumber == 1)
             *      { //we check if the source is in this part, and if it is the case, everycube in the group is connected
             *              foreach (Cube cubelook3 in connected2)
             *              {
             *                      CubeWrapper wrapper5 = (CubeWrapper)cubelook3.userData;
             *                      wrapper5.mIsconnected = true;
             *                      sourceishere = true;
             *              }
             *      }
             * }*/
            mNeedCheck = true;
        }