コード例 #1
0
ファイル: Game.cs プロジェクト: pcxpcx110/go-service-examples
        private void OnStart()
        {
            ExcelManager.InitLoader(name =>
            {
                Stream stream = null;
                var refSet    = ResourcesManager.GetUnmanagedRefSet("configuration");
                {
                    var asset = ResourcesManager.LoadAsset <TextAsset>(name, refSet);
                    stream    = new System.IO.MemoryStream(asset.bytes);
                }
                refSet.Release();

                return(stream);
            });
            ExcelManager.LoadAll();

            this.world = GBox.Make <IWorld>();

            this.observer      = this.world.AddSystem <MessageSystem>();
            this.windowManager = this.world.AddSystem <WindowSystem>();
            this.world.AddSystem <RenderSystem>();
            this.world.AddSystem <CameraSystem>();
            var room = this.world.AddSystem <RoomSystem>();

            this.world.AddSystem <AudioSystem>();

            this.game = this.world.CreateEntity();
            var ctx = this.game.AddTrait <Context>();

            ctx.World = this.world;
            ctx.Room  = room;
            var machine = this.game.AddControl <StateMachine>();

            machine.ChangeState(new LoginState());
        }
コード例 #2
0
    static void RayAABBCalculate(GBox _box, GRay _ray, out Vector3 _tmin, out Vector3 _tmax)
    {
        Vector3 invRayDir = Vector3.one.Divide(_ray.direction);
        Vector3 t0        = (_box.Min - _ray.origin).Multiply(invRayDir);
        Vector3 t1        = (_box.Max - _ray.origin).Multiply(invRayDir);

        _tmin = Vector3.Min(t0, t1);
        _tmax = Vector3.Max(t0, t1);
    }
コード例 #3
0
    public static Vector2 RayAABBDistance(GBox _box, GRay _ray)
    {
        RayAABBCalculate(_box, _ray, out Vector3 tmin, out Vector3 tmax);
        float dstA         = Mathf.Max(Mathf.Max(tmin.x, tmin.y), tmin.z);
        float dstB         = Mathf.Min(tmax.x, Mathf.Min(tmax.y, tmax.z));
        float dstToBox     = Mathf.Max(0, dstA);
        float dstInsideBox = Mathf.Max(0, dstB - dstToBox);

        return(new Vector2(dstToBox, dstInsideBox));
    }
コード例 #4
0
        public override void OnInit(IEntityContainer container)
        {
            var channelManager = GBox.Make <IChannelManager>();

            channelManager.Extend("kongfu", (nsp) =>
            {
                var socket = GBox.Make <ISocketManager>().Create(nsp);
                return(new Channel(socket, new Fragment()));
            });
        }
コード例 #5
0
        public override void OnInit(IEntityContainer container)
        {
            var factory = new PrefabFactory();

            this.pool = GBox.Make <IRecycleManager>().Create(factory, factory);

            var m = container.NewMatcher();

            m.HasTrait <Renderer>().ExceptTag(Renderer.Loaded);
            this.filter = container.GetFilter(this, TupleType.Job, m);
        }
コード例 #6
0
        public void Connect(string net, string ip, int port)
        {
            //Disconnect();
            if (network != null)
            {
                StopHeart();

                network.OnPacket    -= OnPacket;
                network.OnConnected -= Connected;
                network.OnClosed    -= Closed;
                network.OnError     -= Error;

                network.Disconnect();

                network = null;

                //recvMsgList = null;
                //tmpMsgList = null;
                bConnected = false;
                entityDict.Clear();
            }

            try
            {
                if (net == "tcp")
                {
                    network = GBox.Make <INetworkManager>().Create("cratos", "cratos.tcp://" + ip + ":" + port);
                }
                else if (net == "kcp")
                {
                    network = GBox.Make <INetworkManager>().Create("cratos", "cratos.kcp://" + ip + ":" + port + "?datashards=3&parityshards=2");
                }
                network.OnConnected += Connected;
                network.OnClosed    += Closed;
                network.OnError     += Error;

                tmpMsgList  = new List <object>();
                recvMsgList = new List <object>();
                eventList   = new List <EventData>();

                network.OnPacket += OnPacket;
                network.SetPlugins(packer);
                network.Connect();
            }
            catch (Exception e)
            {
                if (WhenError != null)
                {
                    WhenError.Invoke(e);
                }
            }
        }
コード例 #7
0
 public virtual void Bootstrap()
 {
     GBox.On <IServiceProvider>(GBoxEvents.OnRegisterProvider, OnRegisterProvider);
     GBox.On(GBoxEvents.OnBootstrap, OnBootstrap);
     GBox.On(GBoxEvents.OnBootstraped, OnBootstraped);
     GBox.On(GBoxEvents.OnInit, OnInit);
     GBox.On <IServiceProvider>(GBoxEvents.OnProviderInit, OnProviderInit);
     GBox.On <IServiceProvider>(GBoxEvents.OnProviderInited, OnProviderInited);
     GBox.On(GBoxEvents.OnInited, OnInited);
     GBox.On(GBoxEvents.OnStartCompleted, OnStartCompleted);
     GBox.On(GBoxEvents.OnTerminate, OnTerminate);
     GBox.On(GBoxEvents.OnTerminated, OnTerminated);
 }
コード例 #8
0
        /// <summary>
        /// 注册服务提供者
        /// </summary>
        /// <param name="providers">服务提供者</param>
        private static void RegisterProviders(IEnumerable <IServiceProvider> providers)
        {
            foreach (var provider in providers)
            {
                if (provider == null)
                {
                    continue;
                }

                if (!GBox.IsRegisted(provider))
                {
                    GBox.Register(provider);
                }
            }
        }
コード例 #9
0
        /// <summary>
        /// 注册服务
        /// </summary>
        public override void Init()
        {
            var channelExtend = GBox.Make <IChannelManager>();

            channelExtend.Extend("cratos", (nsp) =>
            {
                var socketFactory = GBox.Make <ISocketManager>();
                var socket        = socketFactory.Create(nsp);
                return(new Channel.Channel(socket, new GaiaFragment()));
            });

            MMStreamPool.Init();

            //GBox.Singleton<Room>().Alias<IRoom>();
        }
コード例 #10
0
        /// <summary>
        /// 加载Unity组件的服务提供者
        /// </summary>
        private void LoadUnityComponentProvider()
        {
            if (!LoadFromComponents)
            {
                return;
            }

            var root = GBox.Make <Component>();

            if (root == null)
            {
                return;
            }

            RegisterProviders(root.GetComponentsInChildren <IServiceProvider>());
        }
コード例 #11
0
ファイル: Main.cs プロジェクト: pcxpcx110/go-service-examples
        /// <summary>
        /// 项目入口
        /// </summary>
        protected override void OnStartCompleted()
        {
            // Game entry, Your code starts writing here
            // called this function after, use GBox.Make function to get service
            // ex: var service = GBox.Make<IYourService>();

            Debug.Log("OnStartCompleted");

            Debug.Log("Hello GameBox, Debug Level: " + GBox.Make <DebugLevels>());
            GBox.Watch <DebugLevels>(newLevel =>
            {
                Debug.Log("Change debug level: " + newLevel);
            });

            // 游戏初始化
            Kongfu.Game.Start();
        }
コード例 #12
0
        public void Enter(string ip, int port)
        {
            if (null != this.network)
            {
                this.network.Disconnect();
                this.network = null;
            }

            var nsp = "kongfu.tcp://" + ip + ":" + port;

            this.network              = GBox.Make <INetworkManager>().Create("kongfu.game", nsp);
            this.network.OnConnected += OnConnected;
            this.network.OnClosed    += OnClosed;
            this.network.OnError     += OnError;
            this.network.OnPacket    += OnReceive;
            this.network.SetPlugins(this);
            this.network.Connect();
        }
コード例 #13
0
        public void Bootstrap()
        {
            if (assemblies.Count <= 0)
            {
                return;
            }

            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                int sort;
                if (!assemblies.TryGetValue(assembly.GetName().Name, out sort))
                {
                    continue;
                }

                var localAssembly = assembly;
                GBox.OnFindType((finder) => localAssembly.GetType(finder), sort);
            }
        }
コード例 #14
0
 public static bool RayAABBIntersect(GBox _box, GRay _ray)
 {
     RayAABBCalculate(_box, _ray, out Vector3 tmin, out Vector3 tmax);
     return(tmin.Max() <= tmax.Min());
 }