Ejemplo n.º 1
0
        private void Move(moveType type)
        {
            Vector3D v = new Vector3D(0, 0, 0);

            switch (type)
            {
            case moveType.xp:
                v = new Vector3D(step, 0, 0);
                break;

            case moveType.xn:
                v = new Vector3D(-1 * step, 0, 0);
                break;

            case moveType.yp:
                v = new Vector3D(0, step, 0);
                break;

            case moveType.yn:
                v = new Vector3D(0, -1 * step, 0);
                break;

            default:
                break;
            }
            for (int i = 0; i < m_PointList.Count; i++)
            {
                //m_PointList[i] =m_PointList[i]+ v;
                m_PointList[i] += v;
            }
            eyeshot.Entities.Clear();
            CheckInterference();
            //eyeshot.Entities.Add(new PointCloud(m_PointList, 5), m_LayerList[m_PointCloudLayer], Color.Red);
            ShowPoints(m_PointList, Color.Red, true);
        }
        private int evaluate(moveType player, int[] gameMatrix)
        {
            moveType opp    = (moveType)(-1 * (int)player);
            int      sScore = 0; //state score

            for (int i = 0; i < 56; i++)
            {
                if (gameMatrix[i] == (int)player * 4)
                {
                    sScore += (int)1e6;
                }
                else if (gameMatrix[i] == (int)opp * 4)
                {
                    sScore -= (int)1e6;
                }
                else if (gameMatrix[i] == (int)player * 3)
                {
                    sScore += (int)1e3;
                }
                else if (gameMatrix[i] == (int)opp * 3)
                {
                    sScore -= (int)1e3;
                }
                else if (gameMatrix[i] == (int)player * 2)
                {
                    sScore += 10;
                }
                else if (gameMatrix[i] == (int)opp * 2)
                {
                    sScore -= 10;
                }
            }

            return(sScore);
        }
Ejemplo n.º 3
0
        private int findBestMove(moveType player)
        {
            int bestCell = -1;
            int bestVal  = (int)-1e9;

            for (int cell = 0; cell < 32; cell++)
            {
                if (visited[cell] == moveType.EMPTY)
                {
                    visited[cell] = player;
                    for (int i = 0; i < 56; i++)
                    {
                        nextState[i] = gameMatrix[i] + (int)player * a[cell][i];
                    }
                    int moveVal = minimax(visited, nextState, player, 0, false, (int)-1e9, (int)1e9);
                    //undo the move
                    visited[cell] = moveType.EMPTY;
                    for (int i = 0; i < 56; i++)
                    {
                        nextState[i] = gameMatrix[i];
                    }
                    if (moveVal > bestVal)
                    {
                        bestVal  = moveVal;
                        bestCell = cell;
                    }
                }
            }
            return(bestCell);
        }
Ejemplo n.º 4
0
        public int computerMove(moveType type, levelType level)
        {
            int cnt = 0;

            for (int i = 0; i < 32; i++)
            {
                if (visited[i] != moveType.EMPTY)
                {
                    cnt++;
                }
            }
            int move = -1;

            if (level == levelType.EASY)
            {
                move = randomMove();
            }
            else if (level == levelType.HARD && cnt >= 20)
            {
                move = findBestMove(type);
            }
            else
            {
                move = mediumMove(type);
            }

            visited[move] = type;
            for (int i = 0; i < 56; i++)
            {
                gameMatrix[i] += (int)type * a[move][i];
            }

            return(move);
        }
Ejemplo n.º 5
0
 public Move(string name, moveType moveType, int damage, int accuracy)
 {
     this.name     = name;
     this.moveType = moveType;
     this.damage   = damage;
     this.accuracy = accuracy;
 }
Ejemplo n.º 6
0
 public Move(int start, int end, int cube, moveType type)
 {
     _startPosition = start;
     _destination   = end;
     _type          = type;
     _cubeUsed      = cube;
 }
Ejemplo n.º 7
0
    public AttackEffect theEffect;     //the effect itself

    public void copy(BattleMove other) //a copy constructor
    {
        this.theType    = other.theType;
        this.moveName   = other.moveName;
        this.movePower  = other.movePower;
        this.moveMpCost = other.moveMpCost;
        this.moveSpCost = other.moveSpCost;
        this.theEffect  = other.theEffect;
    }
Ejemplo n.º 8
0
        public string Attack(Wrestler wrestler, Wrestler opponent, moveType moveType)
        {
            Random rnd = new Random();

            switch (moveType)
            {
            case moveType.Punch:
                this.damage   = rnd.Next(5, 11);
                this.accuracy = rnd.Next(1, 11);
                if (this.accuracy > 3)
                {
                    return(wrestler.name + " punches " + opponent.name + " for " + this.damage);
                }
                return(wrestler.name + " misses the punch!");

            case moveType.Kick:
                this.damage   = rnd.Next(10, 26);
                this.accuracy = rnd.Next(1, 11);
                if (this.accuracy > 5)
                {
                    return(wrestler.name + " kicks " + opponent.name + " for " + this.damage);
                }
                return(wrestler.name + " misses the kick!");

            case moveType.Grapple:
                this.damage   = rnd.Next(20, 31);
                this.accuracy = rnd.Next(1, 11);
                if (this.accuracy > 6)
                {
                    return(wrestler.name + " gets " + opponent.name + " to the ground and deals " + this.damage);
                }
                return(wrestler.name + " misses the grapple!");

            case moveType.Toss:
                this.damage   = rnd.Next(25, 41);
                this.accuracy = rnd.Next(1, 11);
                if (this.accuracy > 8)
                {
                    return(wrestler.name + " tosses " + opponent.name + " around and deals " + this.damage);
                }
                return(wrestler.name + " misses the toss!");

            case moveType.Submission:
                this.damage   = 100;
                this.accuracy = rnd.Next(1, 11);
                if (this.accuracy == 10)
                {
                    return(opponent.name + " taps out!");
                }
                break;

            default:
                break;
            }
            return("Move not found!");
        }
Ejemplo n.º 9
0
 public bool humanMove(moveType type, int cell)
 {
     if (visited[cell] != moveType.EMPTY)
     {
         return(false);
     }
     visited[cell] = type;
     for (int i = 0; i < 56; i++)
     {
         gameMatrix[i] += (int)type * a[cell][i];
     }
     return(true);
 }
Ejemplo n.º 10
0
 public Sprite MoveIcon(moveType moveType)
 {
     if (moveType == moveType.dealDamage)
     {
         return(Services.cardList.AttackIntentIcon);
     }
     else if (moveType == moveType.GainArmor)
     {
         return(Services.cardList.ArmorIntentIcon);
     }
     else if (moveType == moveType.Special)
     {
         return(Services.cardList.SpecialIntentIcon);
     }
     return(null);
 }
Ejemplo n.º 11
0
    public void AddUndoStep(GameObject card, moveType move, int ups)
    {
        if (game_started)
        {
            if (undo_list.Count >= maxUndoSteps)
            {
                undo_list.RemoveAt(0);
            }

            UndoInfo undoInfo = new UndoInfo();
            undoInfo.card = card;
            undoInfo.move = move;
            undoInfo.undo_previous_score = ups;
            undo_list.Add(undoInfo);
        }
    }
Ejemplo n.º 12
0
        private int evaluate(moveType player, int[] gameMatrix)
        {
            moveType opp = (moveType)(-1 * (int)player);

            for (int i = 0; i < 56; i++)
            {
                if (gameMatrix[i] == 4 * (int)player)
                {
                    return(100);
                }
                else if (gameMatrix[i] == 4 * (int)opp)
                {
                    return(-100);
                }
            }
            return(0);
        }
Ejemplo n.º 13
0
 public void setMoveType(int x, int y, moveType mt)
 {
     moveTiles [x, y] = mt;
 }
Ejemplo n.º 14
0
        private int minimax(moveType[] visited, int[] gameMatrix, moveType player, int depth, bool isMax, int alpha, int beta)
        {
            bool finished = true;

            for (int i = 0; i < 32; i++)
            {
                if (visited[i] == moveType.EMPTY)
                {
                    finished = false;
                    break;
                }
            }
            if (finished)
            {
                int score = evaluate(player, gameMatrix);
                if (score == 100)
                {
                    score -= depth;
                }
                else if (score == -100)
                {
                    score += depth;
                }
                return(score);
            }
            moveType opp = (moveType)(-1 * (int)player);

            int best = (int)-1e9;

            if (!isMax)
            {
                best = (int)1e9;
            }
            for (int cell = 0; cell < 32; cell++)
            {
                if (visited[cell] == moveType.EMPTY)
                {
                    bool exit = false;
                    visited[cell] = player;
                    if (!isMax)
                    {
                        visited[cell] = opp;
                    }
                    for (int i = 0; i < 56; i++)
                    {
                        if (isMax)
                        {
                            gameMatrix[i] += (int)player * a[cell][i];
                        }
                        else
                        {
                            gameMatrix[i] += (int)opp * a[cell][i];
                        }
                    }
                    if (isMax)
                    {
                        int value = minimax(visited, gameMatrix, player, depth + 1, false, alpha, beta);
                        best  = Math.Max(best, value);
                        alpha = Math.Max(alpha, best);
                        if (beta <= alpha)
                        {
                            exit = true;
                        }
                    }
                    else
                    {
                        int value = minimax(visited, gameMatrix, player, depth + 1, true, alpha, beta);
                        best = Math.Min(best, value);
                        beta = Math.Min(beta, best);
                        if (beta <= alpha)
                        {
                            exit = true;
                        }
                    }
                    //undo the move
                    for (int i = 0; i < 56; i++)
                    {
                        if (isMax)
                        {
                            gameMatrix[i] -= (int)player * a[cell][i];
                        }
                        else
                        {
                            gameMatrix[i] -= (int)opp * a[cell][i];
                        }
                    }
                    visited[cell] = moveType.EMPTY;
                    if (exit)
                    {
                        break;
                    }
                }
            }
            return(best);
        }
Ejemplo n.º 15
0
        private int mediumMove(moveType type)
        {
            List <int> optimalPlays = new List <int>();
            int        mx           = (int)-1e9; //maximum score

            for (int move = 0; move < 32; move++)
            {
                if (visited[move] != moveType.EMPTY)
                {
                    continue;
                }
                for (int i = 0; i < 56; i++)
                {
                    nextState[i] = gameMatrix[i] + (int)type * a[move][i];
                }
                int      sScore  = 0; //state score
                moveType oppType = (type == moveType.X) ? moveType.O : moveType.X;
                for (int i = 0; i < 56; i++)
                {
                    if (nextState[i] == (int)type * 4)
                    {
                        sScore += (int)1e7;
                    }
                    else if (nextState[i] == (int)oppType * 3)
                    {
                        sScore += (int)-1e5;
                    }
                    else if (nextState[i] == (int)type * 3)
                    {
                        sScore += (int)1e3;
                    }
                    else if (nextState[i] == (int)type * 2)
                    {
                        sScore += 1;
                    }
                    else if (nextState[i] == (int)oppType * 2)
                    {
                        sScore += -1;
                    }
                }

                moveType spiralTrap = checkSpiralTrap();
                if (spiralTrap == type)
                {
                    sScore += 10;
                }
                else if (spiralTrap == oppType)
                {
                    sScore += (int)-1e3;
                }
                moveType othertrapopponent = checkOtherTraps(move, gameMatrix);
                moveType othertrap         = checkOtherTraps(move, nextState);
                if (othertrap == type)
                {
                    sScore += 10;
                }
                else if (othertrapopponent == oppType)
                {
                    sScore += (int)3.6e3;
                }
                if (sScore > mx)
                {
                    mx = sScore;
                    optimalPlays.Clear();
                    optimalPlays.Add(move);
                }
                else if (sScore == mx)
                {
                    optimalPlays.Add(move);
                }
            }
            int randIdx = new Random().Next(optimalPlays.Count());
            int play    = optimalPlays[randIdx];

            return(play);
        }
Ejemplo n.º 16
0
        //In: type of unit to be created, owner of created unit
        //Out: unit of specified details
        public Unit(unitType type, Player p)
        {
            hp    = 100;
            owner = p;
            t     = type;
            moved = true;
            acted = true;

            //switch to set stats based on given type
            switch (type)
            {
            //infantry
            case unitType.trooper:
                cost            = 100;
                movementSpeed   = 2;
                armor           = 0.3;
                armorT          = armorType.infantry;
                moveT           = moveType.foot;
                primaryAttack   = new Attack(Attack.Name.rifle);        //assault rifle
                secondaryAttack = new Attack(Attack.Name.flameThrower); //flame thrower
                break;

            case unitType.demolitionSquad:
                cost            = 200;
                movementSpeed   = 1;
                armor           = 0.35;
                armorT          = armorType.infantry;
                moveT           = moveType.foot;
                primaryAttack   = new Attack(Attack.Name.mortar);   //mortar
                secondaryAttack = new Attack(Attack.Name.bazooka);  //bazooka
                break;

            case unitType.samTrooper:
                cost            = 200;
                movementSpeed   = 1;
                armor           = 0.3;
                armorT          = armorType.infantry;
                moveT           = moveType.foot;
                primaryAttack   = new Attack(Attack.Name.samLauncher); //sam launcher
                secondaryAttack = new Attack(Attack.Name.rifle);       //rifle
                break;

            //Vehicles
            case unitType.halftrack:
                cost            = 400;
                movementSpeed   = 9;
                armor           = 0.4;
                armorT          = armorType.armor;
                moveT           = moveType.tread;
                primaryAttack   = new Attack(Attack.Name.hmg);     //Heavy Machine Gun
                secondaryAttack = new Attack(Attack.Name.hitNRun); //Hit and Run - no counter attack
                break;

            case unitType.flameTank:
                cost            = 500;
                movementSpeed   = 7;
                armor           = 0.45;
                armorT          = armorType.armor;
                moveT           = moveType.tread;
                primaryAttack   = new Attack(Attack.Name.flameThrower);   //flame launcher
                secondaryAttack = new Attack(Attack.Name.lightCannon);    //light cannon
                break;

            case unitType.heavyTank:
                cost            = 700;
                movementSpeed   = 6;
                armor           = 0.5;
                armorT          = armorType.armor;
                moveT           = moveType.tread;
                primaryAttack   = new Attack(Attack.Name.heavyCannon); //heavy cannon
                secondaryAttack = new Attack(Attack.Name.lmg);         //lmg
                break;

            case unitType.flakCannon:
                cost            = 600;
                movementSpeed   = 7;
                armor           = 0.4;
                armorT          = armorType.armor;
                moveT           = moveType.tread;
                primaryAttack   = new Attack(Attack.Name.flakCannon); //flak cannon
                secondaryAttack = new Attack(Attack.Name.lmg);        //lmg
                break;

            case unitType.artillery:
                cost            = 700;
                movementSpeed   = 6;
                armor           = 0.4;
                armorT          = armorType.armor;
                moveT           = moveType.tread;
                primaryAttack   = new Attack(Attack.Name.bombardment); //bombardment - AoE
                secondaryAttack = new Attack(Attack.Name.lmg);         //lmg
                break;

            //aircraft
            case unitType.helicopter:
                cost            = 700;
                movementSpeed   = 8;
                armor           = 0.4;
                armorT          = armorType.air;
                moveT           = moveType.air;
                primaryAttack   = new Attack(Attack.Name.RocketPods);  //Rocket Pods
                secondaryAttack = new Attack(Attack.Name.Minigun);     //minigun
                break;

            //demons
            case unitType.imp:
                cost            = 100;
                movementSpeed   = 7;
                armor           = 0.3;
                armorT          = armorType.demon;
                moveT           = moveType.foot;
                primaryAttack   = new Attack(Attack.Name.fireball);  //fireball
                secondaryAttack = new Attack(Attack.Name.claws);     //claws
                break;

            case unitType.harpy:
                cost            = 100;
                movementSpeed   = 7;
                armor           = 0.3;
                armorT          = armorType.air;
                moveT           = moveType.air;
                primaryAttack   = new Attack(Attack.Name.claws);   //claws
                secondaryAttack = new Attack(Attack.Name.skyDive); //sky dive - no counter attack
                break;

            case unitType.behemoth:
                cost            = 100;
                movementSpeed   = 6;
                armor           = 0.6;
                armorT          = armorType.demon;
                moveT           = moveType.foot;
                primaryAttack   = new Attack(Attack.Name.demonBlade);   //Demonic Blade
                secondaryAttack = new Attack(Attack.Name.darkPulse);    //Dark Pulse - AoE centered on unit
                break;

            case unitType.hellCannon:
                cost            = 100;
                movementSpeed   = 5;
                armor           = 0.4;
                armorT          = armorType.demon;
                moveT           = moveType.foot;
                primaryAttack   = new Attack(Attack.Name.siegeCannon);   //siege cannon - AoE
                secondaryAttack = new Attack(Attack.Name.exhaustVent);   //exhaust vent
                break;
            }

            movementPoints = movementSpeed;
        }
Ejemplo n.º 17
0
        private void waitForMessages()
        {
            while (peerOn)
            {
                if (DateTime.Now > nextPingTime)
                {
                    for (int i = 0; i < availablePeers.Count; i++) //foreach (peerType p in availablePeers)
                    {
                        peerType           p    = availablePeers[i];
                        NetOutgoingMessage ping = peer.CreateMessage();
                        ping.Write((short)SentDataType.ping);
                        peer.SendUnconnectedMessage(ping, p.address);
                    }
                    lastPingTime = DateTime.Now;
                    nextPingTime = lastPingTime.AddSeconds(1);
                }

                for (int i = 0; i < availablePeers.Count; i++) //foreach (peerType p in availablePeers)
                {
                    peerType p = availablePeers[i];
                    if (p.lastPing < DateTime.Now.AddSeconds(-2))
                    {
                        availablePeers.Remove(p);
                        PlayerRemoved(p, EventArgs.Empty);
                    }
                }

                NetIncomingMessage msg;
                while ((msg = peer.ReadMessage()) != null)
                {
                    switch (msg.MessageType)
                    {
                    case NetIncomingMessageType.VerboseDebugMessage:
                    case NetIncomingMessageType.DebugMessage:
                    case NetIncomingMessageType.WarningMessage:
                    case NetIncomingMessageType.ErrorMessage:
                        Console.WriteLine(msg.ReadString());
                        break;

                    case NetIncomingMessageType.StatusChanged:
                        // In case status changed
                        // It can be one of these
                        // NetConnectionStatus.Connected;
                        // NetConnectionStatus.Connecting;
                        // NetConnectionStatus.Disconnected;
                        // NetConnectionStatus.Disconnecting;
                        // NetConnectionStatus.None;

                        // NOTE: Disconnecting and Disconnected are not instant unless client is shutdown with disconnect()
                        Console.WriteLine(msg.SenderConnection.ToString() + " status changed. " + (NetConnectionStatus)msg.SenderConnection.Status);

                        if (msg.SenderConnection.Status == NetConnectionStatus.Connected)
                        {
                            if (Connected != null)
                            {
                                foreach (peerType p in availablePeers)
                                {
                                    if (p.address.Equals(peer.Connections[0].RemoteEndPoint))
                                    {
                                        clientName = p.name;
                                    }
                                }
                                Connected(msg, EventArgs.Empty);
                            }
                        }

                        if (msg.SenderConnection.Status == NetConnectionStatus.Disconnected)
                        {
                            if (Disconnected != null)
                            {
                                Disconnected(msg, EventArgs.Empty);
                            }
                        }
                        break;

                    case NetIncomingMessageType.ConnectionApproval:
                        msg.SenderConnection.Approve();
                        iAmPlayer1 = false;
                        break;

                    case NetIncomingMessageType.DiscoveryRequest:
                        #region old stuff
                        //NetOutgoingMessage resp = peer.CreateMessage();
                        //resp.Write(peerName);
                        //resp.Write(GAME_NAME);
                        //peer.SendDiscoveryResponse(resp, msg.SenderEndPoint);

                        //System.Net.IPAddress myAddress;
                        //System.Net.IPAddress myAddressMask;
                        //myAddress = NetUtility.GetMyAddress(out myAddressMask);

                        //bool same = msg.SenderEndPoint.Address.Equals(myAddress);
                        //if (!same)
                        //{
                        //    bool discoverSender = true;
                        //    foreach (peerType p in availablePeers)
                        //    {
                        //        if (p.address.Equals(msg.SenderEndPoint.Address))
                        //        {
                        //            discoverSender = false;
                        //            break;
                        //        }
                        //    }
                        //    if (discoverSender)
                        //    {
                        //        peer.DiscoverKnownPeer(msg.SenderEndPoint);
                        //    }
                        //}
                        #endregion
                        Console.WriteLine("Type = DiscoveryRequest; Sender = " + msg.SenderEndPoint.ToString());

                        getPeerId(msg.SenderEndPoint);

                        if (!listContainsIPEndPoint(msg.SenderEndPoint) && msg.SenderEndPoint != myIPEndPoint)
                        {
                            peer.DiscoverKnownPeer(msg.SenderEndPoint);
                        }

                        break;

                    case NetIncomingMessageType.DiscoveryResponse:
                        Console.WriteLine("Type = DiscoveryResponse; Sender = " + msg.SenderEndPoint);

                        string foundPeerName = msg.ReadString();
                        string foundGameName = msg.ReadString();
                        Console.WriteLine(foundPeerName);
                        Console.WriteLine(foundGameName);
                        addPeerToList(foundPeerName, foundGameName, msg.SenderEndPoint);
                        Console.WriteLine("Available Peers:");
                        foreach (peerType p in availablePeers)
                        {
                            Console.WriteLine(p.name);
                        }
                        // Raise event causing lobby list to be updated.
                        if (Discovered != null)
                        {
                            Discovered(msg, EventArgs.Empty);
                        }
                        break;

                    case NetIncomingMessageType.Data:
                        #region Data
                        //Console.ForegroundColor = ConsoleColor.Cyan;
                        //Console.WriteLine(msg.ReadString());
                        //Console.ResetColor();

                        short type = msg.ReadInt16();

                        //Console.WriteLine("Type = Data; Subtype = " + type + " Sender = " + msg.SenderEndPoint);

                        if (type == (short)SentDataType.move)
                        {
                            Console.WriteLine("Type = move; Sender = " + msg.SenderEndPoint);

                            moveType move = new moveType();
                            move.quad        = msg.ReadInt16();
                            move.position    = msg.ReadInt16();
                            move.isClockwise = msg.ReadBoolean();
                            if (MoveReceived != null)
                            {
                                MoveReceived(move, EventArgs.Empty);
                            }
                        }
                        else if (type == (short)SentDataType.globalChat)
                        {
                            string message = msg.ReadString();
                        }
                        else if (type == (short)SentDataType.privateChat)
                        {
                            string message = msg.ReadString();
                        }
                        else if (type == (short)SentDataType.idRequest)
                        {
                            Console.WriteLine("Type = idRequest; Sender = " + msg.SenderEndPoint);

                            sendId(msg.SenderEndPoint);
                        }
                        else if (type == (short)SentDataType.idResponse)
                        {
                            Console.WriteLine("Type = idResponse; Sender = " + msg.SenderEndPoint);

                            otherId = msg.ReadInt32();

                            // Discovery Response
                            if (otherId != myId)
                            {
                                NetOutgoingMessage resp = peer.CreateMessage();
                                resp.Write(peerName);
                                resp.Write(GAME_NAME);
                                peer.SendDiscoveryResponse(resp, msg.SenderEndPoint);
                            }
                            else
                            {
                                myIPEndPoint = msg.SenderEndPoint;
                            }
                        }
                        break;
                        #endregion

                    case NetIncomingMessageType.UnconnectedData:
                        #region Unconnected Data
                        type = msg.ReadInt16();

                        if (type == (short)SentDataType.move)
                        {
                            Console.WriteLine("Type = move; Sender = " + msg.SenderEndPoint);

                            short quadrant    = msg.ReadInt16();
                            short position    = msg.ReadInt16();
                            bool  isClockwise = msg.ReadBoolean();
                        }
                        else if (type == (short)SentDataType.globalChat)
                        {
                            string message = msg.ReadString();
                        }
                        else if (type == (short)SentDataType.privateChat)
                        {
                            string message = msg.ReadString();
                        }
                        else if (type == (short)SentDataType.idRequest)
                        {
                            Console.WriteLine("Type = idRequest; Sender = " + msg.SenderEndPoint);

                            sendId(msg.SenderEndPoint);
                        }
                        else if (type == (short)SentDataType.idResponse)
                        {
                            Console.WriteLine("Type = idResponse; Sender = " + msg.SenderEndPoint);

                            otherId = msg.ReadInt32();

                            // Discovery Response
                            if (otherId != myId)
                            {
                                NetOutgoingMessage resp = peer.CreateMessage();
                                resp.Write(peerName);
                                resp.Write(GAME_NAME);
                                peer.SendDiscoveryResponse(resp, msg.SenderEndPoint);
                            }
                            else
                            {
                                myIPEndPoint = msg.SenderEndPoint;
                            }
                        }
                        else if (type == (short)SentDataType.connectRequest)
                        {
                            // Raise event causing user to get connection request
                            if (ConnectionRequest != null)
                            {
                                pendingConnectRequester = msg.SenderEndPoint;
                                ConnectionRequest(msg.ReadString(), EventArgs.Empty);
                            }
                        }
                        else if (type == (short)SentDataType.ping)
                        {
                            if (peer.Connections.Count == 0)
                            {
                                NetOutgoingMessage resp = peer.CreateMessage();
                                resp.Write((short)SentDataType.pingResponse);
                                peer.SendUnconnectedMessage(resp, msg.SenderEndPoint);
                            }
                        }
                        else if (type == (short)SentDataType.pingResponse)
                        {
                            foreach (peerType p in availablePeers)
                            {
                                if (p.address == msg.SenderEndPoint)
                                {
                                    p.lastPing = DateTime.Now;
                                }
                            }
                        }
                        break;
                        #endregion

                    default:
                        Console.WriteLine("Unhandled type: " + msg.MessageType);
                        break;
                    }
                    peer.Recycle(msg);
                }
            }
        }
Ejemplo n.º 18
0
 Direction.Next => cursor?.TryGotoNext(moveType, conditions) ?? false ? cursor : null,
Ejemplo n.º 19
0
 Direction.Prev => cursor?.TryGotoPrev(moveType, conditions) ?? false ? cursor : null,
        void Update()
        {
            _x = 0;
            _z = 0;
            if (Input.GetKey(KeyCode.W))
            {
                _z += 1;
            }
            if (Input.GetKey(KeyCode.S))
            {
                _z -= 1;
            }
            if (Input.GetKey(KeyCode.A))
            {
                _x -= 1;
            }
            if (Input.GetKey(KeyCode.D))
            {
                _x += 1;
            }
            //_x = Input.GetAxis("Horizontal");
            //_z = Input.GetAxis("Vertical");

            if (Input.GetKeyDown(KeyCode.LeftControl))
            {
                if (_moveState == moveType.Sneaking)
                {
                    _moveState = moveType.Walking;
                    _speed     = _walkSpeed;
                    _onWalk.Invoke();
                }
                else
                {
                    _moveState = moveType.Sneaking;
                    _speed     = _sneakSpeed;
                    _OnSneak.Invoke();
                }
            }

            if (Input.GetKeyDown(KeyCode.LeftShift))
            {
                if (_moveState == moveType.Running)
                {
                    _moveState = moveType.Walking;
                    _speed     = _walkSpeed;
                    _onWalk.Invoke();
                }
                else
                {
                    _moveState = moveType.Running;
                    _speed     = _runSpeed;
                    _onRun.Invoke();
                }
            }

            _move = transform.right * _x + transform.forward * _z;

            _controller.Move(_move * _speed * Time.deltaTime);


            if (_controller.velocity != Vector3.zero)
            {
                if (_prevVelocity == Vector3.zero)
                {
                    //Debug.Log("Starting move");
                    _onMoveStart.Invoke();
                }
                else
                {
                    //Debug.Log("Moving");
                    _onMove.Invoke();
                }
            }
            else
            {
                if (_prevVelocity != Vector3.zero)
                {
                    //Debug.Log("Ending Move");
                    _onMoveEnd.Invoke();
                }
            }

            _prevVelocity = _controller.velocity;
        }
Ejemplo n.º 21
0
        private void waitForMessages()
        {
            while (peerOn)
            {
                if (DateTime.Now > nextPingTime)
                {
                    for (int i = 0; i < availablePeers.Count; i++) //foreach (peerType p in availablePeers)
                    {
                        peerType p = availablePeers[i];
                        NetOutgoingMessage ping = peer.CreateMessage();
                        ping.Write((short)SentDataType.ping);
                        peer.SendUnconnectedMessage(ping, p.address);
                    }
                    lastPingTime = DateTime.Now;
                    nextPingTime = lastPingTime.AddSeconds(1);
                }

                for (int i = 0; i < availablePeers.Count; i++) //foreach (peerType p in availablePeers)
                {
                    peerType p = availablePeers[i];
                    if (p.lastPing < DateTime.Now.AddSeconds(-2))
                    {
                        availablePeers.Remove(p);
                        PlayerRemoved(p, EventArgs.Empty);
                    }
                }

                NetIncomingMessage msg;
                while ((msg = peer.ReadMessage()) != null)
                {
                    switch (msg.MessageType)
                    {
                        case NetIncomingMessageType.VerboseDebugMessage:
                        case NetIncomingMessageType.DebugMessage:
                        case NetIncomingMessageType.WarningMessage:
                        case NetIncomingMessageType.ErrorMessage:
                            Console.WriteLine(msg.ReadString());
                            break;

                        case NetIncomingMessageType.StatusChanged:
                            // In case status changed
                            // It can be one of these
                            // NetConnectionStatus.Connected;
                            // NetConnectionStatus.Connecting;
                            // NetConnectionStatus.Disconnected;
                            // NetConnectionStatus.Disconnecting;
                            // NetConnectionStatus.None;

                            // NOTE: Disconnecting and Disconnected are not instant unless client is shutdown with disconnect()
                            Console.WriteLine(msg.SenderConnection.ToString() + " status changed. " + (NetConnectionStatus)msg.SenderConnection.Status);

                            if(msg.SenderConnection.Status == NetConnectionStatus.Connected)
                            {
                                if (Connected != null)
                                {
                                    foreach (peerType p in availablePeers)
                                    {
                                        if (p.address.Equals(peer.Connections[0].RemoteEndPoint))
                                        {
                                            clientName = p.name;
                                        }
                                    }
                                    Connected(msg, EventArgs.Empty);
                                }
                            }

                            if (msg.SenderConnection.Status == NetConnectionStatus.Disconnected)
                            {
                                if (Disconnected != null)
                                {
                                    Disconnected(msg, EventArgs.Empty);
                                }
                            }
                            break;

                        case NetIncomingMessageType.ConnectionApproval:
                            msg.SenderConnection.Approve();
                            iAmPlayer1 = false;
                            break;

                        case NetIncomingMessageType.DiscoveryRequest:
                            #region old stuff
                            //NetOutgoingMessage resp = peer.CreateMessage();
                            //resp.Write(peerName);
                            //resp.Write(GAME_NAME);
                            //peer.SendDiscoveryResponse(resp, msg.SenderEndPoint);

                            //System.Net.IPAddress myAddress;
                            //System.Net.IPAddress myAddressMask;
                            //myAddress = NetUtility.GetMyAddress(out myAddressMask);

                            //bool same = msg.SenderEndPoint.Address.Equals(myAddress);
                            //if (!same)
                            //{
                            //    bool discoverSender = true;
                            //    foreach (peerType p in availablePeers)
                            //    {
                            //        if (p.address.Equals(msg.SenderEndPoint.Address))
                            //        {
                            //            discoverSender = false;
                            //            break;
                            //        }
                            //    }
                            //    if (discoverSender)
                            //    {
                            //        peer.DiscoverKnownPeer(msg.SenderEndPoint);
                            //    }
                            //}
                            #endregion
                            Console.WriteLine("Type = DiscoveryRequest; Sender = " + msg.SenderEndPoint.ToString());

                            getPeerId(msg.SenderEndPoint);

                            if (!listContainsIPEndPoint(msg.SenderEndPoint) && msg.SenderEndPoint != myIPEndPoint)
                            {
                                peer.DiscoverKnownPeer(msg.SenderEndPoint);
                            }

                            break;

                        case NetIncomingMessageType.DiscoveryResponse:
                            Console.WriteLine("Type = DiscoveryResponse; Sender = " + msg.SenderEndPoint);

                            string foundPeerName = msg.ReadString();
                            string foundGameName = msg.ReadString();
                            Console.WriteLine(foundPeerName);
                            Console.WriteLine(foundGameName);
                            addPeerToList(foundPeerName, foundGameName, msg.SenderEndPoint);
                            Console.WriteLine("Available Peers:");
                            foreach (peerType p in availablePeers)
                            {
                                Console.WriteLine(p.name);
                            }
                            // Raise event causing lobby list to be updated.
                            if (Discovered != null)
                            {
                                Discovered(msg, EventArgs.Empty);
                            }
                            break;

                        case NetIncomingMessageType.Data:
                            #region Data
                            //Console.ForegroundColor = ConsoleColor.Cyan;
                            //Console.WriteLine(msg.ReadString());
                            //Console.ResetColor();

                            short type = msg.ReadInt16();

                            //Console.WriteLine("Type = Data; Subtype = " + type + " Sender = " + msg.SenderEndPoint);

                            if (type == (short)SentDataType.move)
                            {
                                Console.WriteLine("Type = move; Sender = " + msg.SenderEndPoint);

                                moveType move = new moveType();
                                move.quad = msg.ReadInt16();
                                move.position = msg.ReadInt16();
                                move.isClockwise = msg.ReadBoolean();
                                if (MoveReceived != null)
                                {
                                    MoveReceived(move, EventArgs.Empty);
                                }
                            }
                            else if (type == (short)SentDataType.globalChat)
                            {
                                string message = msg.ReadString();
                            }
                            else if (type == (short)SentDataType.privateChat)
                            {
                                string message = msg.ReadString();
                            }
                            else if (type == (short)SentDataType.idRequest)
                            {
                                Console.WriteLine("Type = idRequest; Sender = " + msg.SenderEndPoint);

                                sendId(msg.SenderEndPoint);
                            }
                            else if (type == (short)SentDataType.idResponse)
                            {
                                Console.WriteLine("Type = idResponse; Sender = " + msg.SenderEndPoint);

                                otherId = msg.ReadInt32();

                                // Discovery Response
                                if (otherId != myId)
                                {
                                    NetOutgoingMessage resp = peer.CreateMessage();
                                    resp.Write(peerName);
                                    resp.Write(GAME_NAME);
                                    peer.SendDiscoveryResponse(resp, msg.SenderEndPoint);
                                }
                                else
                                {
                                    myIPEndPoint = msg.SenderEndPoint;
                                }
                            }
                            break;
                            #endregion

                        case NetIncomingMessageType.UnconnectedData:
                            #region Unconnected Data
                            type = msg.ReadInt16();

                            if (type == (short)SentDataType.move)
                            {
                                Console.WriteLine("Type = move; Sender = " + msg.SenderEndPoint);

                                short quadrant = msg.ReadInt16();
                                short position = msg.ReadInt16();
                                bool isClockwise = msg.ReadBoolean();
                            }
                            else if (type == (short)SentDataType.globalChat)
                            {
                                string message = msg.ReadString();
                            }
                            else if (type == (short)SentDataType.privateChat)
                            {
                                string message = msg.ReadString();
                            }
                            else if (type == (short)SentDataType.idRequest)
                            {
                                Console.WriteLine("Type = idRequest; Sender = " + msg.SenderEndPoint);

                                sendId(msg.SenderEndPoint);
                            }
                            else if (type == (short)SentDataType.idResponse)
                            {
                                Console.WriteLine("Type = idResponse; Sender = " + msg.SenderEndPoint);

                                otherId = msg.ReadInt32();

                                // Discovery Response
                                if (otherId != myId)
                                {
                                    NetOutgoingMessage resp = peer.CreateMessage();
                                    resp.Write(peerName);
                                    resp.Write(GAME_NAME);
                                    peer.SendDiscoveryResponse(resp, msg.SenderEndPoint);
                                }
                                else
                                {
                                    myIPEndPoint = msg.SenderEndPoint;
                                }
                            }
                            else if (type == (short)SentDataType.connectRequest)
                            {
                                // Raise event causing user to get connection request
                                if (ConnectionRequest != null)
                                {
                                    pendingConnectRequester = msg.SenderEndPoint;
                                    ConnectionRequest(msg.ReadString(), EventArgs.Empty);
                                }
                            }
                            else if (type == (short)SentDataType.ping)
                            {
                                if (peer.Connections.Count == 0)
                                {
                                    NetOutgoingMessage resp = peer.CreateMessage();
                                    resp.Write((short)SentDataType.pingResponse);
                                    peer.SendUnconnectedMessage(resp, msg.SenderEndPoint);
                                }
                            }
                            else if (type == (short)SentDataType.pingResponse)
                            {
                                foreach(peerType p in availablePeers)
                                {
                                    if (p.address == msg.SenderEndPoint)
                                    {
                                        p.lastPing = DateTime.Now;
                                    }
                                }
                            }
                            break;
                            #endregion

                        default:
                            Console.WriteLine("Unhandled type: " + msg.MessageType);
                            break;
                    }
                    peer.Recycle(msg);
                }
            }
        }