示例#1
0
    private void Start()
    {
        playerPortal.SetActive(true);

        MessageBroadcaster.Instance.BroadcastAnnouncement("Level " + (SceneManager.GetActiveScene().buildIndex - 2));

        // Add the portal to the cameraFollow
        CinemachineTargetGroup groupComp           = cameraFollowGroup.GetComponent <CinemachineTargetGroup>();
        List <CinemachineTargetGroup.Target> group = new List <CinemachineTargetGroup.Target>(groupComp.m_Targets);

        CinemachineTargetGroup.Target newTarget = new CinemachineTargetGroup.Target();
        newTarget.target = playerPortal.transform;
        newTarget.weight = 1.0f;
        group.Add(newTarget);
    }
    /// <summary>
    /// 组物体对象集合
    /// </summary>
    /// <param name="groups"></param>
    public void SetTargetGroup(List <GameObject> groups)
    {
        List <CinemachineTargetGroup.Target> targets = new List <CinemachineTargetGroup.Target>();

        foreach (GameObject o in groups)
        {
            CinemachineTargetGroup.Target t = new CinemachineTargetGroup.Target();
            t.target = o.transform;
            t.weight = 1;
            t.radius = 1;
            targets.Add(t);
        }

        cinemachineTargetGroup.m_Targets = targets.ToArray();
    }
    private void UpdateTargets()
    {
        CinemachineTargetGroup.Target[] targets = new CinemachineTargetGroup.Target[players.Count];

        var indexer = 0;

        for (indexer = 0; indexer < players.Count; indexer++)
        {
            targets[indexer] = new CinemachineTargetGroup.Target()
            {
                radius = 3f, target = players[indexer].transform, weight = 1
            };
        }

        CinemachineTargetGroup.m_Targets = targets;
    }
示例#4
0
    IEnumerator StartGame()
    {
        yield return(new WaitForSeconds(1));

        readyText.text = "Starting game in 2.. ";
        yield return(new WaitForSeconds(1));

        readyText.text = "Starting game in 1.. ";
        yield return(new WaitForSeconds(1));

        foreach (GameObject go in MenuObjects)
        {
            go.SetActive(false);
        }
        foreach (GameObject go in GameObjects)
        {
            go.SetActive(true);
        }
        int i = 0;

        foreach (PoubelleIdentifier pb in poubelles)
        {
            pb.gameObject.transform.position = playerSpawnPos[pb.ID - 1].position;
            CinemachineTargetGroup.Target ctgt = new CinemachineTargetGroup.Target();
            ctgt.target      = pb.gameObject.transform;
            ctgt.radius      = 1;
            ctgt.weight      = 1;
            ctg.m_Targets[i] = ctgt;
            i++;
        }
        while (i < 4)
        {
            CinemachineTargetGroup.Target ctgt = new CinemachineTargetGroup.Target();
            ctgt.radius      = 0;
            ctgt.weight      = 0;
            ctg.m_Targets[i] = ctgt;
            i++;
        }

        spUI.DisplayUiForXPlayers(playersNumber);


        hasGameStarted = true;
        // DESACTIVER TOUT LE RESTE
        // TODO: EMpecher les poubelles de bouger si game a pas commencé
    }
    private void OnPlayerDied(PlayerDiedEvent e)
    {
        int totalTargets = _group.m_Targets.Length;
        int addedPlayers = 0;

        CinemachineTargetGroup.Target[] newTargets = new CinemachineTargetGroup.Target[totalTargets - 1];

        for (int i = 0; i < totalTargets; i++)
        {
            if (_group.m_Targets[i].target != e.Player.transform)
            {
                newTargets[addedPlayers] = _group.m_Targets[i];
                addedPlayers++;
            }
        }

        _group.m_Targets = newTargets;
    }
    /// <summary>
    /// 设置目标
    /// </summary>
    /// <param name="targets">目标列表</param>
    public void SetTargets(params Transform[] targets)
    {
        if (targets.Length <= 0)
        {
            return;
        }
        cmTargets = new CinemachineTargetGroup.Target[targets.Length];
        for (int i = 0; i < targets.Length; i++)
        {
            cmTargets[i] = new CinemachineTargetGroup.Target()
            {
                target = targets[i], weight = 1f, radius = 1f
            }
        }
        ;
        targetGroup.m_Targets = cmTargets;
    }
}
示例#7
0
        public override bool StartUp(Vector3Int position, ITilemap tilemap, GameObject go)
        {
            if (!Application.isPlaying || go == null)
            {
                return(base.StartUp(position, tilemap, go));
            }
            var townController = go.GetComponent <TownController>();

            go.name = "Town(" + position + ")";
            //GridDataContainer.Instance.RoadTilesData.Remove(position); //we try to remove existing road tile from new town position
            if (!GridDataContainer.Instance.Towns.ContainsKey(position))
            {
                townController.Position             = position;
                townController.Level                = 1;
                townController.SatisfactionBar      = SatisfactionFabric.Instance.CreateSatisfaction(go.transform);
                townController.SatisfactionBar.name = "Satisfaction at " + townController.name;
                GridDataContainer.Instance?.Towns.Add(position, townController);
            }
            else //нужно копировать все поля из старого в новый контроллер, можно исопльзовать рефлексию но пока что так. https://answers.unity.com/questions/458207/copy-a-component-at-runtime.html
            {
                var oldController = GridDataContainer.Instance.Towns[position];
                townController.Level           = oldController.Level;
                townController.Position        = oldController.Position;
                townController.SatisfactionBar = oldController.SatisfactionBar;
                townController.SatisfactionBar.AssociatedObject = townController.transform;
                GridDataContainer.Instance.Towns[position]      = townController;
                RefreshTile(position, tilemap);
            }

            townController.SatisfactionBar.MaxSatisfaction = townController.SatisfactionBar.StartSatisfactionAmount * townController.Level;
            townController.SatisfactionBar.Satisfaction    = townController.SatisfactionBar.MaxSatisfaction;

            var target = new CinemachineTargetGroup.Target
            {
                weight = 1,
                radius = 1,
                target = townController.transform
            };

            GameObject.Find("TargetGroup")?.GetComponent <CinemachineTargetGroup>().m_Targets.Add(target);

            return(base.StartUp(position, tilemap, go));
        }
示例#8
0
    public void FrameDraw()
    {
        int targetsDraw = drawindex + drawperframe;

        for ( ; drawindex < targetsDraw && drawindex < dataPositions.Length; drawindex++)
        {
            dataPositions[drawindex] = new Vector3(xvalues[drawindex], yvalues[drawindex], zvalues[drawindex]);



            dataobjects.Add(Instantiate(dataPoint, dataPositions[drawindex], dataPoint.transform.rotation, Parent.transform));

            targets[drawindex] = new CinemachineTargetGroup.Target()
            {
                target = dataobjects[drawindex].transform, weight = 1f, radius = 1f
            };

            if (colnames[4].Length == 0)
            {
                dataobjects[drawindex].GetComponent <Renderer>().material.color = Color.red;
            }
            else
            {
                dataobjects[drawindex].GetComponent <Renderer>().material.color = new Color(1 - colorvalues[drawindex] / maxColor, 1 - colorvalues[drawindex] / maxColor, 1 - colorvalues[drawindex] / maxColor);
            }

            if (colnames[3].Length != 0)
            {
                float scale = sizevalues[drawindex] / maxSize * sizeMaxScale;
                dataobjects[drawindex].transform.localScale = new Vector3(scale, scale, scale);
            }
        }

        if (drawindex >= dataPositions.Length)
        {
            AutoAdjustAxies();

            uc.sliderInit         = true;
            drawStart             = false;
            TargetGroup.m_Targets = targets;
        }
    }
示例#9
0
        public override void AssignCameraPosition(JSONNode json)
        {
            orient = json["orient"].AsFloat;
            if (json["agentOrient"] != null)
            {
                agentOrient = json["agentOrient"].AsFloat;
            }

            var ctg  = target_go.AddComponent <CinemachineTargetGroup>();
            var ctgt = new CinemachineTargetGroup.Target();

            ctgt.target = starting_location.transform;
            ctgt.weight = 1f;
            var ctgt2 = new CinemachineTargetGroup.Target();

            ctgt2.target  = OtherTarget.transform;
            ctgt2.weight  = 1f;
            ctg.m_Targets = new CinemachineTargetGroup.Target[] { ctgt, ctgt2 };

            // this line worked:
            //var directionTowardsSecondTarget = OtherTarget.transform.position - target_go.transform.position;
            //target_go.transform.position = target_go.transform.position + new Vector3(directionTowardsSecondTarget.x, 0f, directionTowardsSecondTarget.z)  / 2;

            float camDist = CinematographyAttributes.CalcCameraDistance(target_go, frame_type);

            //cva.m_LookAt = ctg.transform;

            Debug.Log("camera Distance: " + camDist.ToString());
            Debug.Log("goalDirection: " + (orient).ToString());

            cbod.FocusDistance = camDist;
            var goalDirection = DegToVector3(orient + agentOrient);

            host_go.transform.position = target_go.transform.position + goalDirection * camDist;
            host_go.transform.rotation.SetLookRotation(starting_location.transform.position);

            if (Physics.Raycast(target_go.transform.position, -goalDirection, camDist - 2))
            {
                cva.m_Lens.NearClipPlane = FindNearPlane(target_go.transform.position, goalDirection, camDist);
            }
        }
示例#10
0
    // Add a controller to the list of initialized controls
    //TODO: Some of this may be reduntant to happen in every scene.
    private void AddPlayer(int playerID)
    {
        GameObject    pFab     = Instantiate(playerPrefab);
        PlayerControl pControl = pFab.GetComponent <PlayerControl>();

        pControl.player           = ReInput.players.GetPlayer(playerID);
        pControl.player.isPlaying = true;
        //playerObject.GetComponent<Player> ().myDisplay = playerDisplays [info.playerNumber];

        // Add the player to the group of objects to be tracked by the camera
        // while keeping the other targets
        CinemachineTargetGroup groupComp           = cameraFollowGroup.GetComponent <CinemachineTargetGroup>();
        List <CinemachineTargetGroup.Target> group = new List <CinemachineTargetGroup.Target>(groupComp.m_Targets);

        CinemachineTargetGroup.Target newTarget = new CinemachineTargetGroup.Target();
        newTarget.target = pFab.transform;
        newTarget.weight = 1.0f;
        group.Add(newTarget);

        groupComp.m_Targets = group.ToArray();
    }
示例#11
0
        private void UpdateLockOn(bool lockOnEnabled)
        {
            if (!lockOnEnabled)
            {
                ToggleLockOnCamera(false);
                lockOnStopEvent.Raise();
                cycleTargetRight       = null;
                cycleTargetLeft        = null;
                currentCycleRightAngle = Mathf.Infinity;
                currentCycleLeftAngle  = Mathf.NegativeInfinity;
                lockedOn.Value         = false;
                return;
            }

            //Don't LockOn if no current target
            if (currentTarget == null)
            {
                ToggleLockOnCamera(false);
                lockOnStopEvent.Raise();
                lockedOn.Value = false;
                return;
            }

            ToggleLockOnCamera(true);
            lockOnStartEvent.Raise();
            lockedOn.Value = true;

            //Update target groups transforms
            CinemachineTargetGroup.Target playerTarget = new CinemachineTargetGroup.Target();
            playerTarget.weight = 1f;
            playerTarget.radius = 0f;
            playerTarget.target = lockOnCamTarget;

            CinemachineTargetGroup.Target enemyTarget = new CinemachineTargetGroup.Target();
            enemyTarget.weight = 1f;
            enemyTarget.radius = 0f;
            enemyTarget.target = currentTarget.transform;

            targetGroup.m_Targets = new[] { playerTarget, enemyTarget };
        }
    // Use this for initialization
    void Start()
    {
        List <CinemachineTargetGroup.Target> targets = new List <CinemachineTargetGroup.Target>();

        foreach (ItemInTree treeObject in objectsToPutInTree)
        {
            for (int i = 0; i < treeObject.numberOfItems; i++)
            {
                ObjectFallFromTree newObject = Instantiate(treeObject.objectPrefab, transform).GetComponent <ObjectFallFromTree>();
                //Change position to match tree...
                Vector2 position = new Vector2(newObject.transform.position.x, newObject.transform.position.y + offsetYArea);
                newObject.transform.position  = position;
                newObject.transform.position += Random.insideUnitSphere * sizeOfObjectArea;
                listOfObjects.Add(newObject);
                CinemachineTargetGroup.Target targetObject = new CinemachineTargetGroup.Target();
                targetObject.target = newObject.transform;
                targetObject.radius = 2f;
                targetObject.weight = 1;
                targets.Add(targetObject);
            }
        }
        targetGroup.m_Targets = targets.ToArray();
    }
示例#13
0
    private void Update()
    {
        for (int i = 1; i < group.m_Targets.Length; i++)
        {
            CinemachineTargetGroup.Target t = group.m_Targets[i];

            float dist = Mathf.Abs(Vector3.SqrMagnitude(t.target.position - main.position));
            if (!tracked.Contains(t.target) && dist <= distThreshold)
            {
                tracked.Add(t.target);
                int i2 = i;
                DOTween.To(() => GetKik(i2), x => SetKik(i2, x), 1f, 3.5f).SetEase(Ease.InOutQuad);
            }
            else if (tracked.Contains(t.target))
            {
                if (dist >= distThreshold)
                {
                    tracked.Remove(t.target);
                    int i2 = i;
                    DOTween.To(() => GetKik(i2), x => SetKik(i2, x), 0f, 3.5f).SetEase(Ease.InOutQuad);
                }
            }
        }
    }
示例#14
0
    public void LoadPlayers()
    {
        Debug.Log("Trying to load players");

        // Instaniate characters based on their character name
        if (!GlobalControl.instance)
        {
            return;
        }

        for (int i = 0; i < GlobalControl.instance.savedPlayerData.Length; i++)
        {
            if (GlobalControl.instance.savedPlayerData[i] != null && !string.IsNullOrEmpty(GlobalControl.instance.savedPlayerData[i].characterName))
            {
                // Run through the list of character names and instaniate the prefab that matches
                // Doing this since we only have 4 characters. Otherwise we could do something more generic
                Debug.Log("Iteration " + i);
                GameObject playerObject = null;
                Debug.Log("Instanciating " + GlobalControl.instance.savedPlayerData[i].characterName + " prefab from PlayerManager");
                switch (GlobalControl.instance.savedPlayerData[i].characterName)
                {
                case "Anix":
                    playerObject = Instantiate(anixPrefab);
                    break;

                case "Dennis":
                    playerObject = Instantiate(dennisPrefab);
                    break;

                case "Revdioc":
                    playerObject = Instantiate(revdiocPrefab);
                    break;

                case "Zerandi":
                    playerObject = Instantiate(zerandiPrefab);
                    break;
                }

                // Return with an error if the player name doesn't match any of the cases above
                if (!playerObject)
                {
                    Debug.LogError("Player object name could not find a prefab to spawn!");
                    return;
                }

                GameObject portrait = Instantiate(portraitPrefab, playerPortraitGroup.transform);

                // Assign the character portrait image and name
                portrait.transform.Find("Portrait").GetComponent <Image>().sprite = playerObject.GetComponent <Player>().characterPortraitImage;
                portrait.transform.Find("Name").GetComponent <Image>().sprite     = playerObject.GetComponent <Player>().characterNameImage;

                //Assign the playerNumber and the text display object to the player for its use.
                playerObject.GetComponent <Player>().playerNumber = GlobalControl.instance.savedPlayerData[i].playerNumber;
                playerObject.GetComponent <Player>().setDisplay(portrait);
                playerObject.GetComponent <PlayerControl>().player = ReInput.players.GetPlayer(GlobalControl.instance.savedPlayerData[i].controllerID);

                // Spawn the players in a row based on their player number
                int playerNum = playerObject.GetComponent <Player>().playerNumber;
                playerObject.transform.position = new Vector2(playerPortal.transform.position.x + playerNum - 2, playerPortal.transform.position.y - 2);

                // We want to be able to keep track of the players that are spawned during this run so that we can do things like check if they are dead.
                activePlayers.Add(playerObject);

                // Add the player to the group of objects to be tracked by the camera
                // while keeping the other targets
                CinemachineTargetGroup groupComp               = cameraFollowGroup.GetComponent <CinemachineTargetGroup>();
                List <CinemachineTargetGroup.Target> group     = new List <CinemachineTargetGroup.Target>(groupComp.m_Targets);
                CinemachineTargetGroup.Target        newTarget = new CinemachineTargetGroup.Target();
                newTarget.target = playerObject.transform;
                newTarget.weight = 1.0f;
                group.Add(newTarget);

                // Remove the portal if it is there.
                foreach (CinemachineTargetGroup.Target target in group)
                {
                    if (target.target == playerPortal.transform)
                    {
                        group.Remove(target);
                    }
                }

                // Reassign the group as an array
                groupComp.m_Targets = group.ToArray();

                if (playerPortal)
                {
                    playerPortal.GetComponent <Animator>().SetTrigger("Close");
                }
            }
        }
    }
示例#15
0
 public void SetTarget(MonoBehaviour target)
 {
     this.target.target       = target.transform;
     this.target.weight       = targetWeight;
     TargetGroup.m_Targets[1] = this.target;
 }
示例#16
0
        private void SetupTargetList()
        {
            float vSpace          = 2;
            var   floatFieldWidth = EditorGUIUtility.singleLineHeight * 3f;
            var   hBigSpace       = EditorGUIUtility.singleLineHeight * 2 / 3;

            mTargetList = new ReorderableList(
                serializedObject, FindProperty(x => x.m_Targets),
                true, true, true, true);

            // Needed for accessing field names as strings
            var def = new CinemachineTargetGroup.Target();

            mTargetList.drawHeaderCallback = rect =>
            {
                rect.width -= EditorGUIUtility.singleLineHeight + 2 * (floatFieldWidth + hBigSpace);
                var pos = rect.position;
                pos.x        += EditorGUIUtility.singleLineHeight;
                rect.position = pos;
                EditorGUI.LabelField(rect, "Target");

                pos.x        += rect.width + hBigSpace;
                rect.width    = floatFieldWidth;
                rect.position = pos;
                EditorGUI.LabelField(rect, "Weight");

                pos.x        += rect.width + hBigSpace;
                rect.position = pos;
                EditorGUI.LabelField(rect, "Radius");
            };

            mTargetList.drawElementCallback
                = (rect, index, isActive, isFocused) =>
                {
                var elemProp = mTargetList.serializedProperty.GetArrayElementAtIndex(index);

                rect.y     += vSpace;
                rect.height = EditorGUIUtility.singleLineHeight;
                var pos = rect.position;
                //rect.width -= hSpace + 2 * EditorGUIUtility.singleLineHeight;
                rect.width -= 2 * (floatFieldWidth + hBigSpace);
                EditorGUI.PropertyField(rect, elemProp.FindPropertyRelative(() => def.target), GUIContent.none);

                var oldWidth = EditorGUIUtility.labelWidth;
                EditorGUIUtility.labelWidth = EditorGUIUtility.singleLineHeight;
                pos.x        += rect.width;
                rect.width    = floatFieldWidth + hBigSpace;
                rect.position = pos;
                EditorGUI.PropertyField(rect, elemProp.FindPropertyRelative(() => def.weight), new GUIContent(" "));
                pos.x        += rect.width;
                rect.position = pos;
                EditorGUI.PropertyField(rect, elemProp.FindPropertyRelative(() => def.radius), new GUIContent(" "));
                EditorGUIUtility.labelWidth = oldWidth;
                };

            mTargetList.onAddCallback = l =>
            {
                var index = l.serializedProperty.arraySize;
                ++l.serializedProperty.arraySize;
                var elemProp = mTargetList.serializedProperty.GetArrayElementAtIndex(index);
                elemProp.FindPropertyRelative(() => def.weight).floatValue = 1;
            };
        }
    void OnTriggerEnter2D(Collider2D collision)
    {
        if (isGameOver)
        {
            return;
        }

        GameObject collided = collision.transform.root.gameObject;

        if (collided.tag == "Player")
        {
            isGameOver = true;

            Debug.Log("Un joueur a gagné !");
            waterLevel.setSpeed(0);


            // Focus the camera on the winner and the helicopter
            CinemachineTargetGroup targetGroupComponent = FindObjectOfType <CinemachineTargetGroup>();

            CinemachineTargetGroup.Target newTargetWinner = new CinemachineTargetGroup.Target();
            newTargetWinner.target = collided.transform;
            newTargetWinner.radius = 10;
            newTargetWinner.weight = 1;

            CinemachineTargetGroup.Target newTargetHelicopter = new CinemachineTargetGroup.Target();
            newTargetHelicopter.target = helicopter;
            newTargetHelicopter.radius = 15;
            newTargetHelicopter.weight = 1.1f;


            List <CinemachineTargetGroup.Target> targetList = new List <CinemachineTargetGroup.Target>();
            targetList.Add(newTargetWinner);
            targetList.Add(newTargetHelicopter);


            targetGroupComponent.m_Targets = targetList.ToArray();

            // Disable player control
            collided.GetComponentInParent <PlayerController2>().SetPlayerState(PlayerController2.PlayerState.DontMove);

            // Disable collisions with the object being attached
            BoxCollider2D collider = collided.GetComponentInParent <BoxCollider2D>();
            if (collider != null)
            {
                collider.enabled = false;
            }

            // Don't allow physics to affect the object
            Rigidbody2D rigidBody = collided.GetComponentInParent <Rigidbody2D>();
            if (rigidBody != null)
            {
                rigidBody.isKinematic = true;
            }


            List <Vector3> waypoints = new List <Vector3>();

            foreach (Transform waypoint in helicopterWayPoints)
            {
                waypoints.Add(waypoint.position);
            }
            waypoints.Add(pickUpPoint.position);



            DOTween.Sequence()

            // Move helicopter to the landing spot
            .Append(helicopter.DOPath(waypoints.ToArray(), 4, PathType.CatmullRom).SetEase(Ease.OutQuad))
            .AppendInterval(0.25f)
            // Attach winner to helicopter
            .AppendCallback(() =>
            {
                collided.transform.SetParent(helicopterPlayerPoint.transform);
                collided.transform.localPosition = Vector3.zero;

                collided.GetComponentInParent <PlayerController2>().SetPlayerState(PlayerController2.PlayerState.Hooked);
            })
            // Helicopter landing off
            .Append(helicopter.transform.DOMove(pickUpPoint.position + new Vector3(0, 15), 2).SetEase(Ease.InQuad))

            // When finished show end game menu
            .AppendCallback(() =>
            {
                Debug.Log("complete animation");
                GameManager.Instance.GameOver(collider.GetComponent <PlayerController2>().gamePlayerId);
            });
        }
    }