Exemplo n.º 1
0
    /// <summary>
    /// 向该用户广播该房间的人物模型准备数据
    /// </summary>
    public void GetRoommateNetData(int uniqueID, AsyncUserToken userToken)
    {
        byte[] message = null;
        foreach (var item in ActorList)
        {
            MessageXieYi xieyi = null;
            if (item.Value == null)
            {
                Log4Debug("检查,房间不该为空");
                continue;
            }
            //准备数据发送完毕,打开UI
            message = SerializeHelper.Serialize <GameModelData>(new GameModelData()
            {
                userIndex = item.Value.UniqueID,
                pos       = (NetVector3)GameTypeManager.BackStandPos(RoomInfo.RoomType, item.Value.UniqueID),
                rotate    = new NetVector3(0, GameTypeManager.BackLookAt(RoomInfo.RoomType, item.Value.UniqueID), 0),
                animation = 0
            });//此处是初始数据
            xieyi = new MessageXieYi((byte)MessageConvention.updateModelInfo, 0, message);
            AsyncIOCPServer.instance.SendSave(userToken, xieyi.ToBytes());
        }
        //准备数据发送完毕,打开UI
        message = new byte[] { 1 };//此处的数组应该是初始数据
        MessageXieYi xieyiFinish = new MessageXieYi((byte)MessageConvention.getPreGameData, 0, message);

        AsyncIOCPServer.instance.SendSave(userToken, xieyiFinish.ToBytes());
    }
Exemplo n.º 2
0
    void Awake()
    {
        GTM = this;
        GameManager.GM.PlayerDied += PlayerLostMatch;
        EnemyWasKilled            += AddEnemyDeath;

        ShowMatchUI();
    }
Exemplo n.º 3
0
 void Awake()
 {
     if (manager == null)
     {
         manager = this;
     }
     else if (manager != this)
     {
         Destroy(gameObject);
     }
 }
Exemplo n.º 4
0
 void Awake()
 {
     if (gtm == null)
     {
         gtm = this;
     }
     else
     {
         Destroy(this.gameObject);
     }
     DontDestroyOnLoad(this.gameObject);
 }
Exemplo n.º 5
0
    public void SetOriginal()
    {
        Debug.Log("播放死亡动画,设置到初始位置.");
        GameModelData info = new GameModelData()
        {
            userIndex = myIndex,
            pos       = (NetVector3)GameTypeManager.BackStandPos(DataController.instance.MyRoomInfo.RoomType, myIndex),
            rotate    = new NetVector3(0, GameTypeManager.BackLookAt(DataController.instance.MyRoomInfo.RoomType, myIndex), 0),
            animation = 0
        };

        SetPosition(SerializeHelper.BackVector(info.pos));
        SetRotate(SerializeHelper.BackVector(info.rotate));
        SetAnimation(info.animation);
    }
Exemplo n.º 6
0
        static void Main(string[] args)
        {
            StudioManager studioManager = new StudioManager(new EfStudioDal());
            GameManager   gameManager   = new GameManager(new EfGameDal());

            foreach (var x in studioManager.GetAll().Data)
            {
                Console.WriteLine(x.StudioName);
            }

            Console.WriteLine("------");
            foreach (var x in gameManager.GetAll().Data)
            {
                Console.WriteLine(x.GameName);
            }

            GameTypeManager gameTypeManager = new GameTypeManager(new EfGameTypeDal());

            Console.WriteLine("------");
            foreach (var x in gameTypeManager.GetAll().Data)
            {
                Console.WriteLine(x.TypeName + "---" + x.TypeId);
            }

            Console.WriteLine("----------");

            //var result = gameTypeManager.Add(new GameType { TypeName = "Reflect" });
            //Console.WriteLine(result.Message);

            //foreach (var x in gameTypeManager.GetAll().Data)
            //{
            //    Console.WriteLine(x.TypeName);
            //}

            //Console.WriteLine(gameTypeManager.GetAll().Message);
        }
    //
    // Start
    //
    void Start()
    {
        clientScript 	= GetComponent<HookHeadClientBehaviour>();
        clientLinks		= clientScript.links;
        attachments		= new List<GameObject>();

        // Try to find the game manager script. If we can't find one, null will flag that there are no game rules
        // to follow.
        gameTypeScript 		= GameObject.FindGameObjectWithTag( gameControllerTag ).GetComponent<GameTypeManager>();
    }
    //
    // Start
    //
    void Start()
    {
        agent      			= GetComponent<NavMeshAgent>();
        hookScript			= hookHead.GetComponent<HookHeadServerBehaviour>();
        clientScript		= GetComponent<PlayerClientBehaviour>();

        // Try to find the game manager script. If we can't find one, null will flag that there are no game rules
        // to follow.
        gameTypeScript 		= GameObject.FindGameObjectWithTag( gameControllerTag ).GetComponent<GameTypeManager>();
    }
 //
 // StartTeamDeathMatch
 //
 public void StartTeamDeathMatch( int neededKills, string teamOne, string teamTwo, int timeSeconds, int maxConnections, int maxPlayers, string roomName, bool isServerPlayer )
 {
     manager = gameObject.AddComponent<TeamDeathMatch>();
     ( ( TeamDeathMatch )manager ).Initialise( neededKills, teamOne, teamTwo, timeSeconds, maxConnections, maxPlayers, roomName, isServerPlayer );
 }
 //
 // JoinTeamDeathMatch
 //
 public void JoinTeamDeathMatch()
 {
     gameObject.AddComponent<TeamDeathMatch>();
     manager = null;
 }
Exemplo n.º 11
0
    // 會員加入房間
    public bool Join(AsyncUserToken userToken, out int UniqueID)
    {
        UniqueID = -1;
        lock (ActorList)
        {
            foreach (KeyValuePair <int, RoomActor> item in ActorList)
            {
                if (item.Value.Register == null)
                {
                    UniqueID            = item.Key;
                    item.Value.Register = userToken.userInfo.Register;//先占位,放开lock,允许其他人加入。
                    break;
                }
            }
        }
        if (UniqueID != -1)
        {
            Log4Debug("账号->" + userToken.userInfo.Register.userID + " 用户名->" + userToken.userInfo.Register.name + " 加入房间->" + RoomInfo.RoomID + " 站位为->" + UniqueID);
            //
            TeamType myTeam = TeamType.Both;
            switch (RoomInfo.RoomType)
            {
            case GameModel.组队模式:
                if (UniqueID % 2 == 0)    //红蓝两队
                {
                    myTeam = TeamType.Blue;
                }
                else
                {
                    myTeam = TeamType.Red;
                }
                break;

            case GameModel.Boss模式:
                myTeam = TeamType.Blue;
                break;
            }
            //

            RoomActor actor = new RoomActor(RoomInfo.RoomID, UniqueID, userToken.userInfo.Register, myTeam);
            actor.MyModelInfo.pos       = (NetVector3)GameTypeManager.BackStandPos(RoomInfo.RoomType, UniqueID);
            actor.MyModelInfo.rotate    = new NetVector3(0, GameTypeManager.BackLookAt(RoomInfo.RoomType, UniqueID), 0);
            actor.MyModelInfo.animation = 0;

            userToken.userInfo = actor;
            lock (UserTokenInfo)
            {
                UserTokenInfo[UniqueID] = userToken;
            }
            lock (ActorList)
            {
                ActorList[UniqueID] = actor;
            }
            BoardcastActorInfo(UniqueID);
            //广播房间信息
            byte[]       message = SerializeHelper.Serialize <RoomInfo>(RoomInfo);
            MessageXieYi xieyi   = new MessageXieYi((byte)MessageConvention.getRoomInfo, 0, message);
            AsyncIOCPServer.instance.SendSave(userToken, xieyi.ToBytes());
            return(true);
        }
        else
        {
            return(false);
        }
    }
Exemplo n.º 12
0
    public void ChangeRoomState(RoomActorState state)
    {
        byte[]          message         = new byte[] { };
        RoomActorUpdate roomActorUpdate = new RoomActorUpdate();

        Log4Debug("房间更改状态为:" + CurState + "->" + state);
        CurState = state;
        switch (CurState)
        {
        case RoomActorState.NoReady:
            foreach (var item in ActorList)
            {
                if (item.Value == null)
                {
                    continue;
                }
                //初始化房间玩家部分信息
                item.Value.InitActor();
                //广播房间用户准备状态为未准备
                roomActorUpdate = new RoomActorUpdate()
                {
                    userIndex = item.Key,
                    update    = (int)item.Value.CurState + ""
                };
                UpdateState(roomActorUpdate);
            }
            break;

        case RoomActorState.Ready:
            Log4Debug("玩家都准备了。");
            //设置所有玩家默认值
            foreach (var item in ActorList)
            {
                if (item.Value == null)
                {
                    continue;
                }
                item.Value.MyModelInfo.pos    = (NetVector3)GameTypeManager.BackStandPos(RoomInfo.RoomType, item.Key);
                item.Value.MyModelInfo.rotate = new NetVector3(0, GameTypeManager.BackLookAt(RoomInfo.RoomType, item.Key), 0);
                roomActorUpdate = new RoomActorUpdate()
                {
                    userIndex = item.Key,
                    update    = (int)RoomActorState.PrepareModel + ""
                };
                UpdateState(roomActorUpdate);    //广播,修改玩家状态用来准备本机数据
            }
            //方块初始化
            BoxList = new ConcurrentDictionary <int, BoxInfo>();

            //倒计时进入游戏
            ChangeRoomState(RoomActorState.WaitForStart);
            break;

        case RoomActorState.WaitForStart:
            //
            Log4Debug("开始倒计时");
            //时间初始化
            PassedCountDownTime = 0;
            CountDownTimer      = new Timer(new TimerCallback(GameCountDowning), null, 0, 1 * 1000);

            break;

        case RoomActorState.Gaming:
            Log4Debug("开始游戏:" + FrameIndex);

            foreach (var item in ActorList)
            {
                if (item.Value == null)
                {
                    continue;
                }
                if (item.Value.CurState == RoomActorState.WaitForStart)
                {
                    roomActorUpdate = new RoomActorUpdate()
                    {
                        userIndex = item.Key,
                        update    = (int)RoomActorState.Gaming + ""
                    };
                    UpdateState(roomActorUpdate);    //广播,修改玩家状态用来准备本机数据
                }
                else
                {
                    Log4Debug("用户:" + item.Value.Register.name + "在倒计时期间内未准备好模型。");
                }
            }

            //保存帧同步
            FrameIndex = 0;
            FrameCount = (int)(RoomInfo.GameTime / RoomInfo.frameTime);
            FrameGroup = new ConcurrentDictionary <int, FrameInfo>();
            //FrameGroup = new Dictionary<int, FrameInfo>();
            //for (int i = 0; i < FrameCount; i++)
            //{
            //    FrameGroup.Add(i, new FrameInfo() { frameIndex = i, frameData = new List<byte[]>() });
            //}
            //线程池调用时间间隔逻辑
            ThFrameCount = new Thread(GameFrameReconding);
            ThFrameCount.IsBackground = true;
            ThFrameCount.Start();
            //ThreadPool.QueueUserWorkItem(new WaitCallback(GameFrameReconding), null);
            //
            string starttime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
            byte[] start     = SerializeHelper.ConvertToByte(starttime);
            BoardcastMessage(MessageConvention.startGaming, start);
            //发送游戏时间
            PassedGameTime = 0;
            break;

        case RoomActorState.GameEnd:
            Log4Debug("退出计数");
            TeamType winTeam = GetWinnerTeam();
            Log4Debug("游戏结束" + winTeam + "胜利");
            message = SerializeHelper.ConvertToByte((int)winTeam + "");
            BoardcastMessage(MessageConvention.endGaming, message);
            //
            InitRoom();
            break;
        }
    }