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); } }
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); }
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>()); } }
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; })); }
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); }
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"); }
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); } }
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); }
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); }
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); }
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); }