コード例 #1
0
    public void Alloc(GameObject prefab, Transform parent, int count)
    {
        if (ObjectsPool.ContainsKey(prefab))
        {
            int index = 0;
            while (ObjectsPool[prefab].Count > index)
            {
                if (ObjectsPool[prefab][index] == null)
                {
                    ObjectsPool[prefab].RemoveAt(index);
                }
                else
                {
                    index++;
                }
            }
        }
        else
        {
            ObjectsPool.Add(prefab, new List <GameObject>());
        }

        while (ObjectsPool[prefab].Count < count)
        {
            Recycle(prefab, PrefabFactory.Instantiate(prefab, parent), parent);
        }

        while (ObjectsPool[prefab].Count > count)
        {
            Destroy(ObjectsPool[prefab][0]);
            ObjectsPool[prefab].RemoveAt(0);
        }
    }
コード例 #2
0
        public override void Setup(IEventSystem eventSystem, IPoolManager poolManager, GroupFactory groupFactory)
        {
            base.Setup(eventSystem, poolManager, groupFactory);

            var group = GroupFactory.Create(new Type[] { typeof(SpawnerComponent) });

            group.OnAdd().Subscribe(entity =>
            {
                var spawner  = entity.GetComponent <SpawnerComponent>();
                var delay    = TimeSpan.FromSeconds(0f);
                var interval = TimeSpan.FromSeconds(spawner.SpawnTime);
                Observable.Timer(delay, interval).Subscribe(_ =>
                {
//			        if(playerHealth.currentHealth <= 0f)
//			        {
//			            return;
//			        }

//					Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);

                    var instance = PrefabFactory.Instantiate(spawner.Prefab, spawner.transform);
                    // instance.transform.SetParent(spawner.transform, false);
                    instance.transform.position = spawner.transform.position;
                    instance.transform.rotation = spawner.transform.rotation;
                }).AddTo(spawner);
            }).AddTo(this);
        }
コード例 #3
0
    private IEnumerator Start()
    {
        yield return(null);

        for (int i = 0; i < ShopView.GetElementCount(); i++)
        {
            var go = PrefabFactory.Instantiate(ShopElementPrefab, ShopView.Content);
            ShopView.Elements.Add(go.GetComponent <ShopElement>());
        }
    }
コード例 #4
0
    private GameObject CreateUser(bool isLocalPlayer, bool isRoomOwner, int userId, string userName, int totalCount, int winCount)
    {
        return(PrefabFactory.Instantiate(UserPrefab, null, false, go =>
        {
            var userComponent = go.GetComponent <UserComponent>();

            userComponent.IsLocalPlayer = isLocalPlayer;
            userComponent.IsRoomOwner.Value = isRoomOwner;
            userComponent.UserId = userId;
            userComponent.UserName.Value = userName;
            userComponent.TotalCount.Value = totalCount;
            userComponent.WinCount.Value = winCount;
        }));
    }
コード例 #5
0
        private void CreateShadowPrefabs()
        {
            var platformShadow = GameObjectFactory
                                 .New()
                                 .With(new Sprite()
            {
                Texture = TextureUtil.CreateTexture(64, 64, Color.Black),
                Tint    = Color.Lerp(Color.White, Color.Transparent, 0.2f)
            })
                                 .Create();

            platformShadow.Visible = false;
            PrefabFactory.Instantiate(platformShadow);
            blockInfo.AddInfo("platform", platformShadow, true);
        }
コード例 #6
0
        public override void Start()
        {
            map = new MapInfo();

            base.Start();

            PrefabInitializer.AddRunnerGamePrefabs(PrefabFactory);

            cursor = GameObjectFactory.New().With(new MouseComponent()).Create();
            PrefabFactory.Instantiate(cursor);

            camera = CameraBuilder.CreateCamera(cursor.Transform);
            PrefabFactory.Instantiate(camera);

            var scene = GameObjectFactory.New().Create();

            PrefabFactory.Instantiate(scene);

            map.Scene = new PrefabInfo()
            {
                PrefabName = "empty", Children = new List <PrefabInfo>()
            };

            //Instantiate the action manager so we can undo/redo
            actionManager = new ActionManager(map, scene, PrefabFactory);

            //Create placer
            placer         = new Placer();
            placer.Manager = actionManager;
            var placerObj = GameObjectFactory.New()
                            .With(placer)
                            .Create();

            PrefabFactory.Instantiate(placerObj);

            CreateShadowPrefabs();
            SetPlacing("platform");
        }
コード例 #7
0
 private void HandleLog(string logString, string stackTrace, LogType type)
 {
     if (Setting.ShowOnUGUI.Value && View != null && View.OutputPanel != null)
     {
         var message = logString + Environment.NewLine + stackTrace;
         var go      = PrefabFactory.Instantiate(LogPrefab, View.OutputPanel);
         var entity  = (go.GetComponent <EntityBehaviour>() ?? go.AddComponent <EntityBehaviour>()).Entity;
         var view    = entity.GetComponent <ViewComponent>();
         var log     = entity.GetComponent <DebugLog>();
         log.LogType       = type;
         log.Message.Value = message.ToString();
         log.Count.Value   = 1;
         View.Logs.Add(entity);
         view.Transforms[0].OnDisableAsObservable().Where(_ => View.SelectedLog.Value == log).Subscribe(_ =>
         {
             View.SelectedLog.Value = null;
         }).AddTo(this.Disposer).AddTo(View.Disposer);
         Observable.EveryEndOfFrame().FirstOrDefault().Subscribe(_ =>
         {
             View.OutputScrollbar.value = 0;
         }).AddTo(this.Disposer).AddTo(View.Disposer);
     }
 }
コード例 #8
0
    private GameObject Instantiate(int userId, int tickId, int instanceId, GameObject prefab, Vector3 position, Quaternion rotation, Transform parent, bool worldPositionStays)
    {
        foreach (var entity in UserComponents.Entities)
        {
            var userComponent = entity.GetComponent <UserComponent>();
            var viewComponent = entity.GetComponent <ViewComponent>();

            if (userId == userComponent.UserId)
            {
                var pos = worldPositionStays ? prefab.transform.position : position;
                var rot = worldPositionStays ? prefab.transform.rotation : rotation;

                return(PrefabFactory.Instantiate(prefab, pos, rot, parent ?? viewComponent.Transforms[0], go =>
                {
                    var networkIdentityComponent = go.GetComponent <NetworkIdentityComponent>() ?? go.AddComponent <NetworkIdentityComponent>();

                    networkIdentityComponent.Identity = new NetworkId(userId, instanceId);
                    networkIdentityComponent.IsLocalPlayer = userComponent.IsLocalPlayer;
                    networkIdentityComponent.TickIdWhenCreated = tickId;
                }));
            }
        }
        return(null);
    }
コード例 #9
0
    public override void OnEnable()
    {
        base.OnEnable();

        LobbyComponents.OnAdd().Subscribe(entity1 =>
        {
            var lobbyComponent = entity1.GetComponent <LobbyComponent>();

            lobbyComponent.CreateRoomButton.OnPointerClickAsObservable().Subscribe(_ =>
            {
                NetworkSystem.Publish(RequestCode.CreateRoom, EmptyStr);
            }).AddTo(this.Disposer).AddTo(lobbyComponent.Disposer);

            lobbyComponent.RefreshButton.OnPointerClickAsObservable().Subscribe(_ =>
            {
                NetworkSystem.Publish(RequestCode.ListRooms, EmptyStr);
            }).AddTo(this.Disposer).AddTo(lobbyComponent.Disposer);

            UserComponents.OnAdd().Subscribe(entity2 =>
            {
                var userComponent = entity2.GetComponent <UserComponent>();

                if (userComponent.IsLocalPlayer)
                {
                    userComponent.UserName.DistinctUntilChanged().Where(_ => lobbyComponent.UsernameText).Subscribe(name =>
                    {
                        lobbyComponent.UsernameText.text = name;
                    }).AddTo(this.Disposer).AddTo(lobbyComponent.Disposer).AddTo(userComponent.Disposer);

                    userComponent.TotalCount.DistinctUntilChanged().Where(_ => lobbyComponent.TotalCountText).Subscribe(count =>
                    {
                        lobbyComponent.TotalCountText.text = TotalCount1Str + count;
                    }).AddTo(this.Disposer).AddTo(lobbyComponent.Disposer).AddTo(userComponent.Disposer);

                    userComponent.WinCount.DistinctUntilChanged().Where(_ => lobbyComponent.WinCountText).Subscribe(count =>
                    {
                        lobbyComponent.WinCountText.text = WinCount1Str + count;
                    }).AddTo(this.Disposer).AddTo(lobbyComponent.Disposer).AddTo(userComponent.Disposer);
                }

                NetworkSystem.Receive(RequestCode.QuitRoom).Subscribe(data =>
                {
                    if (userComponent.UserId == int.Parse(data.StringValue) && (userComponent.IsLocalPlayer || userComponent.IsRoomOwner.Value))
                    {
                        var evt    = new TriggerEnterEvent();
                        evt.Source = LobbyId;
                        EventSystem.Send(evt);
                    }
                }).AddTo(this.Disposer).AddTo(lobbyComponent.Disposer).AddTo(userComponent.Disposer);
            }).AddTo(this.Disposer).AddTo(lobbyComponent.Disposer);

            NetworkSystem.Receive(RequestCode.CreateRoom).Subscribe(data =>
            {
                string[] strs         = data.StringValue.Split(Separator);
                ReturnCode returnCode = (ReturnCode)int.Parse(strs[0]);
                if (returnCode == ReturnCode.Success)
                {
                    int userId      = int.Parse(strs[1]);
                    string username = strs[2];
                    int totalCount  = int.Parse(strs[3]);
                    int winCount    = int.Parse(strs[4]);
                    EventSystem.Send(new SpawnUserEvent(userId, username, totalCount, winCount, true, true));
                    var evt    = new TriggerEnterEvent();
                    evt.Source = RoomId;
                    EventSystem.Send(evt);
                }
            }).AddTo(this.Disposer).AddTo(lobbyComponent.Disposer);

            NetworkSystem.Receive(RequestCode.ListRooms).Subscribe(data =>
            {
                foreach (var entity3 in RoomItemComponents.Entities)
                {
                    var viewComponent = entity3.GetComponent <ViewComponent>();
                    Destroy(viewComponent.Transforms[0].gameObject);
                }

                if (!string.IsNullOrEmpty(data.StringValue))
                {
                    string[] str1s = data.StringValue.Split(VerticalBar);
                    foreach (var str1 in str1s)
                    {
                        string[] str2s = str1.Split(Separator);
                        PrefabFactory.Instantiate(roomItemPrefab, lobbyComponent.RoomItemRoot, false, go =>
                        {
                            var roomItemComponent = go.GetComponent <RoomItemComponent>();

                            roomItemComponent.UserId              = int.Parse(str2s[0]);
                            roomItemComponent.UsernameText.text   = str2s[1];
                            roomItemComponent.TotalCountText.text = TotalCount2Str + str2s[2];
                            roomItemComponent.WinCountText.text   = WinCount2Str + str2s[3];
                        });
                    }
                }
            }).AddTo(this.Disposer).AddTo(lobbyComponent.Disposer);

            NetworkSystem.Receive(RequestCode.JoinRoom).Subscribe(data =>
            {
                string[] str1s        = data.StringValue.Split(VerticalBar);
                ReturnCode returnCode = (ReturnCode)int.Parse(str1s[0]);
                if (returnCode == ReturnCode.Success)
                {
                    for (int i = 1; i < str1s.Length; i++)
                    {
                        string[] str2s   = str1s[i].Split(Separator);
                        int userId       = int.Parse(str2s[0]);
                        string username  = str2s[1];
                        int totalCount   = int.Parse(str2s[2]);
                        int winCount     = int.Parse(str2s[3]);
                        bool isRoomOwner = bool.Parse(str2s[4]);
                        EventSystem.Send(new SpawnUserEvent(userId, username, totalCount, winCount, false, isRoomOwner));
                    }
                    var evt    = new TriggerEnterEvent();
                    evt.Source = RoomId;
                    EventSystem.Send(evt);
                }
                else
                {
                    EventSystem.Send(new MessageEvent(JoinFailFeedback, LogType.Warning));
                }
            }).AddTo(this.Disposer).AddTo(lobbyComponent.Disposer);
        }).AddTo(this.Disposer);

        RoomItemComponents.OnAdd().Subscribe(entity =>
        {
            var roomItemComponent = entity.GetComponent <RoomItemComponent>();

            roomItemComponent.JoinButton.OnPointerClickAsObservable().Subscribe(_ =>
            {
                NetworkSystem.Publish(RequestCode.JoinRoom, roomItemComponent.UserId.ToString());
            }).AddTo(this.Disposer).AddTo(roomItemComponent.Disposer);
        }).AddTo(this.Disposer);
    }
コード例 #10
0
    public override void OnEnable()
    {
        base.OnEnable();

        MessageComponents.OnAdd().Subscribe(entity =>
        {
            var messageComponent = entity.GetComponent <MessageComponent>();
            var viewComponent    = entity.GetComponent <ViewComponent>();

            for (int i = 0; i < messageComponent.MaxCount; i++)
            {
                var go = PrefabFactory.Instantiate(messageComponent.MessageLine, viewComponent.Transforms[0]);
                go.SetActive(false);
            }

            EventSystem.OnEvent <MessageEvent>(true).Subscribe(evt =>
            {
                var messageLineEntity    = MessageLineComponents.Entities.OrderBy(e => e.GetComponent <MessageLineComponent>().Time.Value).FirstOrDefault();
                var messageLineComponent = messageLineEntity.GetComponent <MessageLineComponent>();
                var text = messageLineEntity.GetComponent <TextMeshProUGUI>();

                messageLineEntity.GetComponent <ViewComponent>().Transforms[0].SetAsLastSibling();
                messageLineComponent.Time.Value = evt.Duration;
                if (evt.Type == LogType.Warning)
                {
                    text.text = "<color=#FFB900>" + evt.Message + "</color>";
                }
                else if (evt.Type == LogType.Error)
                {
                    text.text = "<color=#EA0043>" + evt.Message + "</color>";
                }
                else
                {
                    text.text = evt.Message;
                }
            }).AddTo(this.Disposer).AddTo(messageComponent.Disposer);
        }).AddTo(this.Disposer);

        MessageLineComponents.OnAdd().Subscribe(entity =>
        {
            var messageLineComponent = entity.GetComponent <MessageLineComponent>();
            var text          = entity.GetComponent <TextMeshProUGUI>();
            var viewComponent = entity.GetComponent <ViewComponent>();

            messageLineComponent.Time.DistinctUntilChanged().Where(t => !viewComponent.Transforms[0].gameObject.activeSelf && t > 0).Subscribe(t =>
            {
                text.alpha = 1;
                viewComponent.Transforms[0].gameObject.SetActive(true);

                Observable.EveryUpdate().TakeWhile(_ => viewComponent.Transforms[0].gameObject.activeSelf && messageLineComponent.Time.Value > 0).Subscribe(_ =>
                {
                    messageLineComponent.Time.Value -= Time.deltaTime;
                    text.alpha = Mathf.Clamp01(messageLineComponent.Time.Value);
                    if (messageLineComponent.Time.Value <= 0)
                    {
                        viewComponent.Transforms[0].gameObject.SetActive(false);
                    }
                }).AddTo(this.Disposer).AddTo(messageLineComponent.Disposer);
            }).AddTo(this.Disposer).AddTo(messageLineComponent.Disposer);
        }).AddTo(this.Disposer);
    }
コード例 #11
0
    private void Create(int userId, int tickId, Vector3 position, Quaternion rotation, Transform parent, bool worldPositionStays)
    {
        var go = userId >= 0 ? (worldPositionStays ? NetworkPrefabFactory.Instantiate(userId, tickId, prefab, parent, worldPositionStays) : NetworkPrefabFactory.Instantiate(userId, tickId, prefab, position, rotation, parent)) : (worldPositionStays ? PrefabFactory.Instantiate(prefab, parent, worldPositionStays) : PrefabFactory.Instantiate(prefab, position, rotation, parent));
        var eb = go.GetComponent <EntityBehaviour>() ?? go.AddComponent <EntityBehaviour>();

        Despawn(eb.Entity, true);
    }