예제 #1
0
    /// <summary>
    /// Geht in Intervallen die Ziellisten durch und attackiert pro Durchlauf ein
    /// Ziel. Ausserdem wird darauf geachtet, dass zuerst die NPCs angegriffen werden.
    /// </summary>
    ///
    void Attack()
    {
        // Greife NPC an
        // temp -> wegen doppelter Zugriff auf List mit Remove bei null
        // während eines Angriffs kann das Ziel jemand anderes toeten
        NPCDamageReciever[] tempNpcTargets = new NPCDamageReciever[npcTargets.Count];
        npcTargets.CopyTo(tempNpcTargets);

        // Gehe alle Ziele durch bis ein Treffer
        foreach (NPCDamageReciever t in tempNpcTargets)
        {
            if (t)
            {
                target = t.transform;
                t.TakeDamage(damage, name, t.netId.Value);

                return;
            }
            else
            {
                npcTargets.Remove(t);
            }
        }

        // kein NPC vorhanden bzw. getroffen weil null wegen gestorben
        // Greife Spieler an
        PlayerDamageReciever[] tempPlayerTargets = new PlayerDamageReciever[pdrTargets.Count];
        pdrTargets.CopyTo(tempPlayerTargets);

        foreach (PlayerDamageReciever t in tempPlayerTargets)
        {
            if (t && Vector3.Distance(transform.position, t.transform.position) < 5)
            {
                target = t.transform;
                t.TakeDamage(damage, name, t.netId.Value);

                return;
            }
            else
            {
                pdrTargets.Remove(t);
            }
        }

        // Ersatz für OnTriggerExit, wenn innerhalb des Radius alle
        // Listen leer werden.
        Reset();
    }
예제 #2
0
    /// <summary>
    /// Initialisiert die lokale Instanz.
    /// </summary>
    public override void OnStartLocalPlayer()
    {
        // Gebe Daten an Duplikate weiter
        CmdSyncPlayerData(data);

        NetworkManager.singleton.client.connection.RegisterHandler(9999, OnGlobalMatchEvent);

        // Setze Teamzugehoerigkeit lokaler Instanz
        GameObject.Find("NetworkManager").GetComponent <Manager>().myTeam = data.team;
        transform.tag = "" + data.team;

        // Erstelle Symbol in der Miniaturkarte
        GetComponentInParent <DynamicMiniMapSymbol> ().CreateLokalPlayerSymbol();

        // Aktiviere Charaktersteuerung
        SetUpPlayerController();

        // Aktiviere aufladbare Faehigkeit (GUI)
        GetComponentInParent <PlayerSkillsGUI> ().enabled = true;

        // GUI Elemente linke obere Ecke
        sliderExp           = GameObject.Find("slider_exp").GetComponent <Slider> ();
        sliderExp.maxValue  = 10;
        sliderExp.value     = sliderExp.minValue;
        sliderLife          = GameObject.Find("slider_life").GetComponent <Slider> ();
        sliderLife.maxValue = 300;
        sliderLife.value    = sliderLife.maxValue;

        txtExp       = GameObject.Find("txt_exp").GetComponent <Text> ();
        txtLife      = GameObject.Find("txt_life").GetComponent <Text> ();
        txtExp.text  = "Erfahrung: " + sliderExp.value + "/" + sliderExp.maxValue + " | Level: ";
        txtLife.text = "Leben: " + sliderLife.value + "/" + sliderLife.maxValue;

        txtArmor  = GameObject.Find("txt_armor").GetComponent <Text> ();
        txtDamage = GameObject.Find("txt_damage").GetComponent <Text> ();

        // Initialisiere Komponente die die Schadenspunkte verarbeitet
        pdr = GetComponentInParent <PlayerDamageReciever> ();

        // Aktiviere aufladbare Faehigkeit
        enemy = (transform.tag.Equals("0")) ? "1" : "0";
        GetComponentInParent <PlayerSkills> ().Init(damage, enemy);
    }
예제 #3
0
    /// <summary>
    /// Prueft, ob das neue Objekt im Angriffsradius angreifbar ist. Falls ja,
    /// dann wird es in die Zielliste eingetragen und ein Angriff wird gestartet.
    /// </summary>
    /// <param name="target">Collider eines moeglichen Ziels.</param>
    ///
    void OnTriggerEnter(Collider target)
    {
        if (target.tag.Equals("" + team) || (!target.tag.Equals("0") && !target.tag.Equals("1")))
        {
            return;
        }

        if (npcStats = target.GetComponent <NPCDamageReciever> ())
        {
            npcTargets.Add(npcStats);
        }

        else if (pdr = target.GetComponent <PlayerDamageReciever> ())
        {
            pdrTargets.Add(pdr);
        }

        if (!IsInvoking("Attack"))
        {
            InvokeRepeating("Attack", 0, interval);
        }
    }
예제 #4
0
    // ......................................................................... Ein Ziel in Reichweite?

    /// <summary>
    /// Prueft, ob das neue Objekt im Angriffsradius angreifbar ist. Falls ja,
    /// dann wird es in die Zielliste eingetragen und ein Angriff wird gestartet.
    /// </summary>
    /// <param name="target">Collider eines moeglichen Ziels.</param>
    ///
    void OnTriggerEnter(Collider target)
    {
        if (target.tag.Equals("" + team) || (!target.tag.Equals("0") && !target.tag.Equals("1")))
        {
            return;
        }

        if (npcStats = target.GetComponent <NPCDamageReciever> ())
        {
            npcTargets.Add(npcStats);
        }

        else if (playerStats = target.GetComponent <PlayerDamageReciever> ())
        {
            playerTargets.Add(playerStats);
        }

        if (!IsInvoking("Attack") && !IsInvoking("Follow"))
        {
            float tempTime = Time.fixedTime - ttt;
            InvokeRepeating("Attack", (tempTime > 2) ? 0 : 2 - tempTime, interval);
        }
    }
예제 #5
0
    // ......................................................................................... Angriff


    /// <summary>
    /// Geht in Intervallen die Ziellisten durch und attackiert pro Durchlauf ein
    /// Ziel. Ausserdem wird darauf geachtet, dass zuerst die NPCs angegriffen werden.
    /// </summary>
    ///
    void Attack()
    {
        ttt = Time.fixedTime;
        // Greife NPC an
        // temp -> wegen doppelter Zugriff auf List mit Remove bei null
        // während eines Angriffs kann das Ziel jemand anderes toeten
        NPCDamageReciever[] tempNpcTargets = new NPCDamageReciever[npcTargets.Count];
        npcTargets.CopyTo(tempNpcTargets);

        // Gehe alle Ziele durch bis ein Treffer
        foreach (NPCDamageReciever t in tempNpcTargets)
        {
            if (t)
            {
                if (Vector3.Distance(t.transform.position, transform.position) <= range * 2)
                {
                    t.TakeDamage(damage, attacker, t.netId.Value);
                }
                else
                {
                    secondTarget = t.transform;
                    InvokeRepeating("Follow", 0, Time.deltaTime);
                    CancelInvoke("Attack");
                    Reset();
                }

                return;
            }
            else
            {
                npcTargets.Remove(t);
            }
        }


        // kein NPC vorhanden bzw. getroffen weil null wegen gestorben
        // Greife Spieler an
        PlayerDamageReciever[] tempPlayerTargets = new PlayerDamageReciever[playerTargets.Count];
        playerTargets.CopyTo(tempPlayerTargets);

        foreach (PlayerDamageReciever t in tempPlayerTargets)
        {
            if (t)
            {
                if (Vector3.Distance(t.transform.position, transform.position) <= range * 2)
                {
                    t.TakeDamage(damage, attacker, t.netId.Value);
                }
                else
                {
                    secondTarget = t.transform;
                    InvokeRepeating("Follow", 0, Time.deltaTime);
                    CancelInvoke("Attack");
                    Reset();
                }

                return;
            }
            else
            {
                playerTargets.Remove(t);
            }
        }

        // Ersatz für OnTriggerExit, wenn innerhalb des Radius alle
        // Listen leer werden.
        Reset();
    }