Exemplo n.º 1
0
    public RingManager(float distance, List <SegmentCollisionBehaviour> segmentCollisionBehaviours, List <SegmentTickBehaviour> segmentTickBehaviours, List <SegmentTriggerBehaviour> segmentTriggerBehaviours, Sprite sprite)
    {
        if (segmentPrefab == null)
        {
            segmentPrefab = Resources.Load("Segment") as GameObject;
        }
        segmentControlers = new List <SegmentController> ();

        int max = (int)Mathf.Floor(distance * Mathf.PI * 1.25f);          // number of segments

        segments = new List <GameObject> (max);

        float min  = -Mathf.PI;                                 //First segment position
        float step = (2 * Mathf.PI / (float)max);               //Distance between segments

        //SegmentTickBehaviourMove stbm = new SegmentTickBehaviourMove (tickMove); //Segments with this tick behaviour will move
        //SegmentTriggerBehaviourDestroy stbd = new SegmentTriggerBehaviourDestroy (); //Segments with this tick behaviour will be destroyed upon getting shot

        SegmentsParent      = new GameObject();
        SegmentsParent.name = "SegmentsParent" + max;
        SegmentsParent.transform.position = Vector3.zero;
        SegmentsParent.transform.rotation = Quaternion.identity;
        SegmentsParent.transform.SetParent(GameManager.GMInstance.root.transform);

        for (int i = 0; i < max; i++)
        {
            GameObject        currentSegment        = MonoBehaviour.Instantiate(segmentPrefab) as GameObject;
            SegmentController currentSegmentManager = currentSegment.GetComponentInChildren <SegmentController> ();
            segmentControlers.Add(currentSegmentManager);
            segments.Add(currentSegment);

            currentSegmentManager.SetPosition(new Vector2((min + step * i + 0.0001f), distance));

            currentSegmentManager.mesh.transform.Find("barrier").GetComponent <SpriteRenderer> ().sprite = sprite;


            for (int j = 0; j < segmentCollisionBehaviours.Count; j++)
            {
                currentSegmentManager.addBehaviour(segmentCollisionBehaviours [j]);
            }
            for (int j = 0; j < segmentTriggerBehaviours.Count; j++)
            {
                currentSegmentManager.addBehaviour(segmentTriggerBehaviours[j]);
            }
            for (int j = 0; j < segmentTickBehaviours.Count; j++)
            {
                currentSegmentManager.addBehaviour(segmentTickBehaviours[j]);
            }

            currentSegment.transform.SetParent(SegmentsParent.transform);
        }
    }
Exemplo n.º 2
0
    public RingManagerMulti(float distance, float tickMove)
    {
        if (segmentPrefab == null)
        {
            segmentPrefab = Resources.Load("SegmentMulti") as GameObject;
        }
        segmentControlers = new List <SegmentController> ();

        int max = (int)Mathf.Floor(distance * Mathf.PI * 1.25f);

        segments = new List <GameObject> (max);

        float min  = -Mathf.PI;
        float step = (2 * Mathf.PI / (float)max);
        //Debug.Log ("# segments in ring " + max);

        SegmentTickBehaviourMove       stbm = new SegmentTickBehaviourMove(tickMove);
        SegmentTriggerBehaviourDestroy stbd = new SegmentTriggerBehaviourDestroy();

        GameObject SegmentsParent = new GameObject();

        SegmentsParent.name = "SegmentsParent" + max;
        SegmentsParent.transform.position = Vector3.zero;
        SegmentsParent.transform.rotation = Quaternion.identity;
        for (int i = 0; i < max; i++)
        {
            GameObject currentSegment = MonoBehaviour.Instantiate(segmentPrefab /*, new Vector3(min + step * i, distance, 0), new Quaternion()*/) as GameObject;
            NetworkServer.Spawn(currentSegment);
            SegmentController currentSegmentManager = currentSegment.GetComponentInChildren <SegmentController> ();
            segmentControlers.Add(currentSegmentManager);
            currentSegmentManager.SetPosition(new Vector2((min + step * i + 0.0001f), distance));
            currentSegmentManager.addBehaviour(stbm);
            currentSegmentManager.addBehaviour(stbd);
            //currentSegmentManager.SetPosition (new Vector2 ((min + step * i), distance));
            segments.Add(currentSegment);
            currentSegment.transform.SetParent(SegmentsParent.transform);
        }
    }