예제 #1
0
    public void Init(MainMenuController mainMenuController, Photon.Realtime.Player player, BasePool pool)
    {
        this.mainMenuController = mainMenuController;
        lC          = SettingsController.instance.languageController;
        this.player = player;
        this.pool   = pool;
        SubscribeEvents();
        kickButton.SetActive(!player.IsLocal && PhotonNetwork.LocalPlayer.IsMasterClient);
        readyButton.GetComponent <Toggle>().interactable = player.IsLocal;

        int sameNamePlayers = PhotonNetwork.CurrentRoom.Players.Where(p => p.Value.NickName.Equals(PhotonNetwork.LocalPlayer.NickName)).Count();

        playerNickname.text = sameNamePlayers > 1 ? player.NickName + (sameNamePlayers - 1) : player.NickName;

        if (player.CustomProperties.ContainsKey("Room_PlayerReady"))
        {
            readyText.text = (bool)player.CustomProperties["Room_PlayerReady"] ? lC.GetWord("READY") : lC.GetWord("NOT_READY");
            readyButton.GetComponent <Toggle>().isOn = (bool)player.CustomProperties["Room_PlayerReady"];
        }
        else
        {
            readyButton.GetComponent <Toggle>().isOn = false;
            readyText.text = lC.GetWord("NOT_READY");
        }

        if (player.IsLocal)
        {
            readyButton.GetComponent <Toggle>().isOn = false;
            PlayerReady(false);
        }
    }
예제 #2
0
    //public static BulletManager Instance;

    //void Awake()
    //{
    //    Instance = this;
    //}

    /// <summary>
    /// 发射子弹
    /// </summary>
    /// <param name="bulletModel"></param>
    /// <param name="pool"></param>
    public void DoShoot(BulletModel bulletModel, BasePool pool)
    {
        int num = bulletModel.Count / 2;

        for (int i = 0; i < bulletModel.Count; i++)
        {
            GameObject go         = pool.Get(bulletModel.InitPosition, bulletModel.LifeTime); //从对象池中获取 // 初始位置即enemy当前位置
            BulletMove bulletMove = go.GetComponent <BulletMove>();
            var        render     = go.GetComponent <MeshRenderer>();
            if (render != null)
            {
                go.GetComponent <MeshRenderer>().material?.SetColor("_EmissionColor", bulletModel.Color);
            }
            bulletMove.BulletSpeed = bulletModel.Speed;
            bulletMove.DelayTime   = bulletModel.DelayTime;

            if (bulletModel.Count % 2 == 1)
            {
                go.transform.rotation = bulletModel.Direction * Quaternion.Euler(0, 0, -(bulletModel.Angle * num)); // 绕Z轴旋转 , 要带负号
                go.transform.position = go.transform.position + go.transform.right * num * bulletModel.Distance;
                num--;
            }
            else
            {
                go.transform.rotation = bulletModel.Direction * Quaternion.Euler(0, 0, -(bulletModel.Angle / 2 + bulletModel.Angle * (num - 1)));  // 绕Z轴旋转
                go.transform.position = go.transform.position + go.transform.right * ((num - 1) * bulletModel.Distance + bulletModel.Distance / 2);
                num--;
            }
            go.transform.position = go.transform.position + go.transform.forward * bulletModel.ShiftInitPos;
        }
    }
예제 #3
0
파일: PoolMe.cs 프로젝트: pedroam14/umu
    void TestPool(BasePool pool)
    {
        List <PoolMe> activeObjects = new List <PoolMe>(objCount);

        Stopwatch watch = new Stopwatch();

        watch.Start();

        // Perform a repeating test of getting pooled objects and putting them back
        for (int i = 0; i < testCount; ++i)
        {
            // Get and "use" all items in the pool
            for (int j = 0; j < objCount; ++j)
            {
                activeObjects.Add(pool.GetPooledObject());
            }

            // Put all items back in the pool
            for (int j = objCount - 1; j >= 0; --j)
            {
                pool.ReturnPooledObject(activeObjects[j]);
                activeObjects.RemoveAt(j);
            }
        }

        watch.Stop();
        UnityEngine.Debug.Log(string.Format("Completed {0} in {1} ms", pool.GetType().Name, watch.Elapsed.Milliseconds));
    }
예제 #4
0
            /// <summary>
            /// allocate correct pool type and add it to types
            /// </summary>
            internal static AbstractStoragePool newPool(string name, AbstractStoragePool superPool, List <AbstractStoragePool> types)
            {
                try {
                    switch (name)
                    {
                    case "properties":
                        return(superPool = new P0(types.Count));


                    case "system":
                        return(superPool = new P1(types.Count, (P0)superPool));

                    default:
                        if (null == superPool)
                        {
                            return(superPool = new BasePool <SkillObject>(types.Count, name, AbstractStoragePool.noKnownFields, AbstractStoragePool.NoAutoFields));
                        }
                        else
                        {
                            return(superPool = superPool.makeSubPool(types.Count, name));
                        }
                    }
                } finally {
                    types.Add(superPool);
                }
            }
예제 #5
0
    public void PreInit(MainMenuController mainMenuController)
    {
        this.mainMenuController = mainMenuController;

        basePool = new BasePool(content, template, Keys.Menu.MAX_PLAYERS_COUNT);
        basePool.Init();
    }
예제 #6
0
 public void Init(RoomInfo roomInfo, PlayPanel playPanel, BasePool pool, MainMenuController mainMenuController)
 {
     this.mainMenuController = mainMenuController;
     this.roomInfo           = roomInfo;
     this.pool      = pool;
     this.playPanel = playPanel;
     Refresh();
 }
예제 #7
0
 public void PreInit(UIPanels UIPanels)
 {
     this.UIPanels  = UIPanels;
     playerListings = new List <IngamePlayerListing>();
     basePool       = new BasePool(content, template, Keys.Menu.MAX_PLAYERS_COUNT);
     basePool.Init();
     gc = GameplayController.instance;
 }
예제 #8
0
 public void PreInit(UIPanels UIPanels)
 {
     this.UIPanels    = UIPanels;
     buildingListings = new List <BuildingListing>();
     buildingsPool    = new BasePool(buildingsInfoHolder, buildingListing, Keys.Board.PLACE_COUNT / 2);
     buildingsPool.Init();
     lC = SettingsController.instance.languageController;
 }
예제 #9
0
 public virtual void PoolAdquire(SpawnPosition spawnerTransform, string objType, BasePool pool)
 {
     _inPool            = false;
     ownerPool          = pool;
     shootType          = objType;
     transform.position = spawnerTransform.spawnPoint;
     transform.rotation = spawnerTransform.rotation;
 }
예제 #10
0
 /// <summary>
 /// 释放一个池子(手动销毁池子)
 /// 释放一个池子 只会销毁池子缓存的gameobject 并释放引用ab次数
 /// ab的释放 每段时间检查refCount<零释放 todo
 /// </summary>
 /// <param name="resName"></param>
 public void disposePool(string resName)
 {
     if (pools.ContainsKey(resName))
     {
         BasePool bp = pools[resName];
         pools.Remove(resName);
         bp.onDispose();
     }
 }
예제 #11
0
 //从对象池取出
 public void getObj(string url, Action <GameObject> callBack, E_PoolType pType)
 {
     if (!pools.ContainsKey(url))
     {
         BasePool bp = new BasePool(url, pType);
         pools.Add(url, bp);
     }
     pools[url].getObj(callBack);
 }
예제 #12
0
    public void Init(RightPanel controller, BasePool pool, Field field, bool received = false)
    {
        listingsPool = pool;
        rightPanel = controller;
        tradeField = field;
        removeButton.gameObject.SetActive(!received);

        nameText.text = tradeField.GetFieldName();
    }
예제 #13
0
 /// <summary>
 /// 创建池
 /// </summary>
 /// <param name="resName"></param>
 /// <param name="mode"></param>
 /// <param name="pType"></param>
 /// <param name="time"></param>
 private void createPool(string resName, E_PoolMode mode = E_PoolMode.Time, E_PoolType pType = E_PoolType.None, float time = 60)
 {
     if (!pools.ContainsKey(resName))
     {
         string   resPath = Path.Combine(Define.abPre, resName).ToLower();
         BasePool p       = PoolFactory.create(resName, resPath, mode, pType, time);
         pools.Add(resName, p);
     }
 }
예제 #14
0
 void Start()
 {
     bulletPrefab = Resources.Load <GameObject>("Prefabs/Bullet");
     bulletPool   = GameObjectPoolManager.Instance.CreatGameObjectPool <BasePool>("Prefabs/Bullet", bulletPrefab);
     //m_bullet1_pool.prefab = m_BulletPrefab;
     CC = GetComponent <CharacterController>();
     //animator = GetComponent<Animator>();
     Speed   = fastSpeed;
     isShoot = false;
 }
예제 #15
0
파일: BasePool.cs 프로젝트: nolimet/Liaka
    void Awake()
    {
        if (instance == null)
            instance = this;
        else
            Destroy(this);

        ActivePool = new List<BaseObject>();
        InActivePool = new List<BaseObject>();
    }
예제 #16
0
    /// <summary>
    /// awake位置应当在屏幕外
    /// </summary>
    void Awake()
    {
        Curve       = new AnimationCurve();
        bulletModel = new BulletModel()
        {
            Count = 6, Speed = 10, Angle = 60
        };
        GameObject bullet = Resources.Load <GameObject>("Prefabs/Bullet");

        bulletPool = GameObjectPoolManager.Instance.CreatGameObjectPool <BasePool>("Prefabs/Bullet", bullet);
    }
예제 #17
0
 public override void PoolAdquire(SpawnPosition spawnerTransform, string objType, BasePool pool)
 {
     base.PoolAdquire(spawnerTransform, objType, pool);
     if (trails.Length > 0)
     {
         foreach (TrailRenderer t in trails)
         {
             t.enabled = true;
         }
     }
 }
예제 #18
0
    public void Init(string name, BasePool pool, MainMenuController mainMenuController)
    {
        save         = new GameSave();
        saveFileName = name;
        FileManager.LoadGame(ref save, name);
        LanguageController lang       = SettingsController.instance.languageController;
        string             infoString = lang.GetWord("SAVE_LISTING_ROUND") + save.dice.round + " | " + save.date.ToString();

        nameText.text           = name;
        infoText.text           = infoString;
        this.pool               = pool;
        this.mainMenuController = mainMenuController;
    }
예제 #19
0
    /// <summary>
    ///
    /// </summary>
    public void Init()
    {
        GameObject enemy = Resources.Load <GameObject>("Prefabs/Enemy");

        pool = GameObjectPoolManager.Instance.CreatGameObjectPool <BasePool>("Prefabs/Enemy", enemy);

        enemy = pool.Get(new Vector3(10, 20, 0), 0); //
        pool.Remove(enemy);
        //YaoJing1 yaoJing = enemy.GetComponent<YaoJing1>();
        //yaoJing.MoveEndPoint = new Vector3(-10, -10, 0);
        //yaoJing.MoveSpeed = 0.5f;
        //yaoJing.FireCD = 0.5f;
    }
예제 #20
0
    public void PreInit(UIPanels controller)
    {
        myListings    = new List <TradeListing>();
        theirListings = new List <TradeListing>();

        myPool    = new BasePool(myContent, template, Keys.Menu.MAX_PLAYERS_COUNT);
        theirPool = new BasePool(theirContent, template, Keys.Menu.MAX_PLAYERS_COUNT);

        myPool.Init();
        theirPool.Init();

        uIPanels = controller;
        gC       = GameplayController.instance;
        lC       = SettingsController.instance.languageController;
    }
예제 #21
0
    public override void InitBox()
    {
        base.InitBox();
        buttonPool = new BasePool(buttons, null, Keys.Popups.QUESTIONBOX_BUTTONS_AMOUNT);
        List <GameObject> poolObjects = new List <GameObject>(); //Lista obiektów podpiętych na starcie do obiektu buttons

        foreach (Button b in buttons.GetComponentsInChildren <Button>())
        {
            if (b.gameObject != buttons)
            {
                poolObjects.Add(b.gameObject);
            }
        }

        buttonPool.Init(poolObjects);
    }
예제 #22
0
    public override void InitBox()
    {
        base.InitBox();
        buttonPool = new BasePool(buttons, null, GameplayController.instance.session.playerCount);
        List <GameObject> poolObjects = new List <GameObject>();

        foreach (Toggle b in buttons.GetComponentsInChildren <Toggle>())
        {
            if (b.gameObject != buttons)
            {
                buttonList.Add(b.gameObject);
                poolObjects.Add(b.gameObject);
            }
        }

        buttonPool.Init(poolObjects);
    }
예제 #23
0
    public GameObject GetRes(string url, Transform parent, Vector3 pos, Vector3 scale, object param, CallBackGameObject callback)
    {
        BasePool pool;

        if (dicArray.Contains(url))
        {
            pool = dicArray[url] as BasePool;
        }
        else
        {
            pool = new BasePool(url);
            dicArray.Add(url, pool);
        }
        GameObject preObject = pool.GetRes(parent, pos, scale, param, callback);

        return(preObject);
    }
예제 #24
0
	public void OnInspectorGUI()
	{
		EditorGUILayout.LabelField ("Select a pooling system");
		storePoolTypes();

		selectedType = EditorGUILayout.Popup(selectedType, poolStringTypes);

		//Check to see if a new pooling system was selected from the list
		if (GUI.changed) {
			if (!selectedType.Equals(typeStash)) {
				typeStash = selectedType;
				ScriptableObject.DestroyImmediate (pool);
			}
		}
			
		if (pool == null) {
			pool = (BasePool)ScriptableObject.CreateInstance(poolTypes[selectedType]);
		}
		pool.OnInspectorGUI ();
	}
예제 #25
0
 public void PutRes(string url, GameObject goObj)
 {
     if (string.IsNullOrEmpty(url) == false)
     {
         BasePool pool;
         if (dicArray.Contains(url))
         {
             pool = dicArray[url] as BasePool;
         }
         else
         {
             pool = new BasePool(url);
             dicArray.Add(url, pool);
         }
         pool.PutRes(goObj);
     }
     else
     {
         GameObject.Destroy(goObj);
     }
 }
예제 #26
0
    //释放时间池子
    public void disposeUseTime()
    {
        List <string> keys = new List <string>();
        var           ier  = pools.GetEnumerator();

        while (ier.MoveNext())
        {
            if (!ier.Current.Value.IsAlive)
            {
                keys.Add(ier.Current.Key);
            }
        }
        for (int i = 0; i < keys.Count; i++)
        {
            if (pools.ContainsKey(keys[i]))
            {
                BasePool bp = pools[keys[i]];
                pools.Remove(keys[i]);
                bp.onDispose();
            }
        }
    }
예제 #27
0
            /// <summary>
            /// allocate correct pool type and add it to types
            /// </summary>
            internal static AbstractStoragePool newPool(string name, AbstractStoragePool superPool, List <AbstractStoragePool> types)
            {
                try {
                    switch (name)
                    {
                    case "a":
                        return(superPool = new P0(types.Count));


                    case "b":
                        return(superPool = new P1(types.Count, (P0)superPool));


                    case "c":
                        return(superPool = new P2(types.Count, (P1)superPool));


                    case "d":
                        return(superPool = new P3(types.Count, (P1)superPool));


                    case "noserializeddata":
                        return(superPool = new P4(types.Count));

                    default:
                        if (null == superPool)
                        {
                            return(superPool = new BasePool <SkillObject>(types.Count, name, AbstractStoragePool.noKnownFields, AbstractStoragePool.NoAutoFields));
                        }
                        else
                        {
                            return(superPool = superPool.makeSubPool(types.Count, name));
                        }
                    }
                } finally {
                    types.Add(superPool);
                }
            }
예제 #28
0
    public static BasePool create(string resName, string resPath, E_PoolMode mode, E_PoolType pType, float time)
    {
        BasePool p = null;

        switch (pType)
        {
        case E_PoolType.UICache:
            p = new UICachePool(resName, resPath, mode, pType, time);
            break;

        case E_PoolType.Atlas:
            p = new AtlasPool(resName, resPath, mode, pType, time);
            break;

        case E_PoolType.Model:
            p = new ModelPool(resName, resPath, mode, pType, time);
            break;

        default:
            p = new BasePool(resName, resPath, mode, pType, time);
            break;
        }
        return(p);
    }
예제 #29
0
 /// <summary>
 /// Set pool
 /// </summary>
 public void SetPool(BasePool <T> pool)
 {
     Pool = pool;
 }
예제 #30
0
 /// <summary>
 /// Constructor
 /// </summary>
 public PoolStats(BasePool <T> pool)
 {
     Pool        = pool;
     BucketStats = new Dictionary <int, Tuple <int, int> >();
 }
예제 #31
0
 /// <summary>
 /// Ignore tracking.
 /// </summary>
 public override void SetBasePool <T>(BasePool <T> basePool)
 {
 }
예제 #32
0
파일: BasePool.cs 프로젝트: nolimet/Liaka
 void Update()
 {
     if (instance == null)
         instance = this;
 }