コード例 #1
0
        public override void processMessage(RawMessage message)
        {
            ResourceLoader.loadResources();

            Engine.Game.players     = new LinkedList <Player>();
            Engine.Game.statPlayers = new List <Player> ();
            Engine.Game.clearOldGameData();

            foreach (RawMessage msg in message.getRawMessageArray("users"))
            {
                int uid = msg.getInt("uid");

                Board board = (Board)Activator.CreateInstance(TypeIdGenerator.getBoardType(msg.getInt("btid")));
                //TODO exception handle et yukaridaki bi sinifin icinde. Eger hata gelmisse adamin clienti ya bozulmus
                // ya oynanmis ya da eskimis demektir. ona gore bi hata mesaji bastir.
                board.scienceType = (ScienceType)Enum.Parse(typeof(ScienceType), msg.getUTF8String("st"));
                board.instanceId  = msg.getInt("biid");

                if (uid == UserMe.self.id)
                {
                    PlayerMe.self      = new Player(msg.getInt("hps"), board);
                    PlayerMe.cash      = msg.getInt("cash");
                    PlayerMe.income    = msg.getInt("inc");
                    PlayerMe.self.user = UserMe.self;
                    UserMe.self.player = PlayerMe.self;

                    setAvailableMinionsOfPlayer();
                    setAvailableTowersOfPlayer();

                    Engine.Game.players.AddLast(PlayerMe.self);
                    Engine.Game.statPlayers.Add(PlayerMe.self);
                    board.player = PlayerMe.self;
                }
                else
                {
                    User u = new User(msg.getUTF8String("un"), uid, new Player(msg.getInt("hps"), board));
                    u.player.user = u;
                    board.player  = u.player;
                    Engine.Game.players.AddLast(u.player);
                    Engine.Game.statPlayers.Add(u.player);
                }
            }

            float dist = Engine.Game.calculateBoardDistanceToCenter(Engine.Game.players.Count);

            for (int i = 0; i < Engine.Game.players.Count; i++)
            {
                Vector3 rotation = new Vector3(0, i * 360.0f / Engine.Game.players.Count, 0);
                Engine.Game.players.ElementAt(i).board.rotation = rotation;

                Engine.Game.players.ElementAt(i).board.position  = new Vector3(Mathf.Cos(-1 * rotation.y * (Mathf.PI / 180.0f)) * dist, 0, Mathf.Sin(-1 * rotation.y * (Mathf.PI / 180.0f)) * dist);
                Engine.Game.players.ElementAt(i).board.nextBoard = Engine.Game.players.ElementAt((i + 1) % Engine.Game.players.Count).board;
                Engine.Game.players.ElementAt(i).board.prevBoard = Engine.Game.players.ElementAt((i + Engine.Game.players.Count - 1) % Engine.Game.players.Count).board;
            }

            Engine.Game.setState(Engine.Game.GameState.LOADING);
        }
コード例 #2
0
ファイル: Player.cs プロジェクト: btasdoven/ScienceWars
        public bool[] availableMinions; //yapabilecegi minion listesi - userin icindeki availableMinions arrayinin root olan elemanlarini alacak, upgrade edildikce bu liste degisecek.
        // alinan root minionlardan sadece player'in science type'ina uygun olanlari true olacak. Diger minionlar unlocked bile olsalar, science type uygun degilse bu listede false olacaklar.
        //Upgrade edileni true yap, upgrade olani da false yap ki yapilabilecek minionlar listesinden parent olan cikmis olsun.

        public Player(User user, Game game)
        {
            readyInQueue  = false;
            loadedTheGame = false;

            this.user    = user;
            this.game    = game;
            this.board   = (Board)Activator.CreateInstance(TypeIdGenerator.getBoardType(user.selectedBoardTypeId));
            board.player = this;

            cash         = 20000;
            income       = 1200;
            healthPoints = 10; // 5000000;

            playerState = PlayerState.ALIVE;

            initializeAvailableMinions();
        }