Exemple #1
0
 static int StopMove(IntPtr L)
 {
     try
     {
         ToLua.CheckArgsCount(L, 1);
         ToyBehavior obj = (ToyBehavior)ToLua.CheckObject(L, 1, typeof(ToyBehavior));
         obj.StopMove();
         return(0);
     }
     catch (Exception e)
     {
         return(LuaDLL.toluaL_exception(L, e));
     }
 }
Exemple #2
0
    public void Handle(Connection con, int action, byte[] data)
    {
        MemoryStream ms = new MemoryStream(data);

        switch ((MESSAGE_OPCODE)action)
        {
        case MESSAGE_OPCODE.SERVER_MESSAGE_OPCODE_CREATE_ENTITY:     // aoi create entity
        {
            SC_CREATE_ENTITY message = Serializer.Deserialize <SC_CREATE_ENTITY>(ms);
            int             sceneid  = (int)message.SceneID;
            int             count    = message.EntitiesCreate.Count;
            string[]        uid      = new string[count];
            Vector3[]       pos      = new Vector3[count];
            LuaByteBuffer[] info     = new LuaByteBuffer[count];

            //Util.Log("Game", "aoi add count:" + message.EntitiesCreate.Count + " bytes:" + ms.Length);
            for (int i = 0; i < message.EntitiesCreate.Count; i++)
            {
                SC_CREATE_ENTITY.Entity entity = message.EntitiesCreate[i];
                uid[i]  = System.Text.Encoding.ASCII.GetString(entity.EntityID);
                info[i] = new LuaByteBuffer(entity.EntityInfo);
                pos[i]  = new Vector3(entity.EntityPos.DestX, entity.EntityPos.DestY, entity.EntityPos.DestZ);
            }
            Util.CallMethod("AOIManager", "OnAOIAdd", uid, pos, info, sceneid);
            break;
        }

        case MESSAGE_OPCODE.SERVER_MESSAGE_OPCODE_DESTROY_ENTITY:     // soi destroy eneity
        {
            SC_DESTROY_ENTITY message = Serializer.Deserialize <SC_DESTROY_ENTITY>(ms);
            int      sceneid          = (int)message.SceneID;
            string[] uid = new string[message.EntitiesDestroy.Count];
            //Util.Log("Game", "aoi del count:" + message.EntitiesDestroy.Count + " bytes:" + ms.Length);
            for (int i = 0; i < message.EntitiesDestroy.Count; i++)
            {
                uid[i] = System.Text.Encoding.ASCII.GetString(message.EntitiesDestroy[i]);
            }
            Util.CallMethod("AOIManager", "OnAOIDel", uid, sceneid);
        }
        break;

        case MESSAGE_OPCODE.SERVER_MESSAGE_OPCODE_MOVE:             // entity move
        {
            SC_MOVE_SYNC message = Serializer.Deserialize <SC_MOVE_SYNC>(ms);
            string       uid     = Encoding.ASCII.GetString(message.SyncPostion.entityid);
            if (LoadSceneManager.Instance().Isloading())
            {
                Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_MOVE when scene is loading! sceneid={0} uid={1}", message.SceneID, uid));
                break;
            }
            EntityBehavior entity = EntityBehaviorMgr.Instance().GetEntityBehavior(uid);
            if (entity == null)
            {
                Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_MOVE not found entity! sceneid={0} uid={1}", message.SceneID, uid));
                break;
            }
            if (entity is PuppetBehavior)
            {
                PuppetBehavior puppet = entity as PuppetBehavior;
                if (puppet == null)
                {
                    Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_MOVE entity is not puppet! sceneid={0} uid={1}", message.SceneID, uid));
                    break;
                }
                if (puppet.IsSyncPosition)
                {
                    //Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_MOVE entity IsSyncPosition = true! sceneid={0} uid={1}", message.SceneID, uid));
                    break;
                }
                int delaytime = (int)(con.ServerTimestamp - (long)message.servertime);
                if (delaytime <= 0)
                {
                    delaytime = 0;
                }
                int sceneid = (int)message.SceneID;

                Vector3 pos      = new Vector3(message.SyncPostion.DestX, message.SyncPostion.DestY, message.SyncPostion.DestZ);
                float   speed    = message.SyncPostion.Speed;
                float   rotation = message.SyncPostion.Orientation;
                puppet.UpdateMoveto(pos, speed, rotation, delaytime);
            }
            else if (entity is ToyBehavior)
            {
                ToyBehavior puppet = entity as ToyBehavior;
                if (puppet == null)
                {
                    Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_MOVE entity is not toy! sceneid={0} uid={1}", message.SceneID, uid));
                    break;
                }
                Vector3 pos = new Vector3(message.SyncPostion.DestX, message.SyncPostion.DestY, message.SyncPostion.DestZ);
                puppet.Moveto(pos);
                //Debug.Log(string.Format("moveto speed:{0}, dest:{1}, rotation:{2}, uid:{3}", message.SyncPostion.Speed, pos.ToString(), message.SyncPostion.Orientation, uid));
            }

            //Util.CallMethod("AOIManager", "OnEntityMove", uid, pos, speed, rotation, delaytime);
            break;
        }

        case MESSAGE_OPCODE.SERVER_MESSAGE_OPCODE_STOP_MOVE:            // entity stop move
        {
            SC_STOP_MOVE_SYNC message = Serializer.Deserialize <SC_STOP_MOVE_SYNC>(ms);
            if (LoadSceneManager.Instance().Isloading())
            {
                Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_STOP_MOVE when scene is loading! sceneid={0}", message.SceneID));
                break;
            }
            int delaytime = (int)(con.ServerTimestamp - (long)message.servertime);
            if (delaytime <= 0)
            {
                //Util.Log("Game", "SERVER_MESSAGE_OPCODE_STOP_MOVE delaytime <= 0 delaytime=" + delaytime);
                delaytime = 0;
                //break;
            }
            int     count = message.SyncPostion.Count;
            string  uid;
            Vector3 pos;
            float   rotation;
            float   speed;
            for (int i = 0; i < message.SyncPostion.Count; i++)
            {
                Position p = message.SyncPostion[i];
                uid      = Encoding.ASCII.GetString(p.entityid);
                pos      = new Vector3(p.DestX, p.DestY, p.DestZ);
                rotation = p.Orientation;
                speed    = p.Speed;

                EntityBehavior entity = EntityBehaviorMgr.Instance().GetEntityBehavior(uid);
                if (entity == null)
                {
                    Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_STOP_MOVE not found entity! sceneid={0} uid={1}", message.SceneID, uid));
                    break;
                }
                if (entity is PuppetBehavior)
                {
                    PuppetBehavior puppet = entity as PuppetBehavior;
                    if (puppet == null)
                    {
                        Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_STOP_MOVE entity is not puppet! sceneid={0} uid={1}", message.SceneID, uid));
                        break;
                    }
                    if (puppet.IsSyncPosition)
                    {
                        //Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_MOVE entity IsSyncPosition = true! sceneid={0} uid={1}", message.SceneID, uid));
                        break;
                    }
                    puppet.StopAt(pos, rotation);
                }
                else if (entity is ToyBehavior)
                {
                    ToyBehavior puppet = entity as ToyBehavior;
                    if (puppet == null)
                    {
                        Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_STOP_MOVE entity is not toy! sceneid={0} uid={1}", message.SceneID, uid));
                        break;
                    }
                    puppet.StopMove();
                    //Debug.Log(string.Format("stopmove dest:{0}, rotation:{1}, uid:{2}", pos.ToString(), p.Orientation, uid));
                }
            }
            //Util.CallMethod("AOIManager", "OnEntityStopMove", uid, pos, rotation, speed, delaytime);
            break;
        }

        case MESSAGE_OPCODE.SERVER_MESSAGE_FORCE_POSITION:               // entity set position
        {
            SC_FORCE_MOVE message = Serializer.Deserialize <SC_FORCE_MOVE>(ms);
            string        uid     = Encoding.ASCII.GetString(message.entityid);
            Vector3       pos     = new Vector3(message.DestX, message.DestY, message.DestZ);
            //Util.CallMethod("AOIManager", "OnEntitySetPosition", uid, pos);
            if (LoadSceneManager.Instance().Isloading())
            {
                Util.Log("Game", string.Format("SERVER_MESSAGE_FORCE_POSITION when scene is loading! sceneid={0} uid={1}", message.SceneID, uid));
                break;
            }
            EntityBehavior entity = EntityBehaviorMgr.Instance().GetEntityBehavior(uid);
            if (entity == null)
            {
                Util.Log("Game", string.Format("SERVER_MESSAGE_FORCE_POSITION not found entity! sceneid={0} uid={1}", message.SceneID, uid));
                break;
            }
            if (entity is PuppetBehavior)
            {
                PuppetBehavior puppet = entity as PuppetBehavior;
                if (puppet == null)
                {
                    Util.Log("Game", string.Format("SERVER_MESSAGE_FORCE_POSITION entity is not puppet! sceneid={0} uid={1}", message.SceneID, uid));
                    break;
                }
                if (puppet.IsSyncPosition)
                {
                    //Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_MOVE entity IsSyncPosition = true! sceneid={0} uid={1}", message.SceneID, uid));
                    break;
                }
                puppet.SetPosition(pos);
            }
            else if (entity is ToyBehavior)
            {
                ToyBehavior puppet = entity as ToyBehavior;
                if (puppet == null)
                {
                    Util.Log("Game", string.Format("SERVER_MESSAGE_FORCE_POSITION entity is not toy! sceneid={0} uid={1}", message.SceneID, uid));
                    break;
                }
                puppet.SetPosition(pos);
            }

            break;
        }

        case MESSAGE_OPCODE.SERVER_MESSAGE_OPCODE_TURN_DIRECTION:       // entity set rotation
        {
            SC_TURN_DIRECTION message = Serializer.Deserialize <SC_TURN_DIRECTION>(ms);
            string            uid     = Encoding.ASCII.GetString(message.entityid);
            Vector3           pos     = new Vector3(message.DestX, message.DestY, message.DestZ);
            //Util.CallMethod("AOIManager", "OnEntitySetRotation", uid, pos, message.Direction);
            if (LoadSceneManager.Instance().Isloading())
            {
                Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_TURN_DIRECTION when scene is loading! sceneid={0} uid={1}", message.SceneID, uid));
                break;
            }
            EntityBehavior entity = EntityBehaviorMgr.Instance().GetEntityBehavior(uid);
            if (entity == null)
            {
                Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_TURN_DIRECTION not found entity! sceneid={0} uid={1}", message.SceneID, uid));
                break;
            }
            if (entity is PuppetBehavior)
            {
                PuppetBehavior puppet = entity as PuppetBehavior;
                if (puppet == null)
                {
                    Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_TURN_DIRECTION entity is not puppet! sceneid={0} uid={1}", message.SceneID, uid));
                    break;
                }
                if (puppet.IsSyncPosition)
                {
                    //Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_MOVE entity IsSyncPosition = true! sceneid={0} uid={1}", message.SceneID, uid));
                    break;
                }
                puppet.SetRotation(Quaternion.Euler(0, message.Direction, 0));
            }
            else if (entity is ToyBehavior)
            {
                ToyBehavior puppet = entity as ToyBehavior;
                if (puppet == null)
                {
                    Util.Log("Game", string.Format("SERVER_MESSAGE_OPCODE_TURN_DIRECTION entity is not toy! sceneid={0} uid={1}", message.SceneID, uid));
                    break;
                }
                puppet.SetRotation(Quaternion.Euler(0, message.Direction, 0));
            }

            break;
        }
        }
    }