Esempio n. 1
0
    //network execute only
    void SpawnHero()
    {
        myHero = (GameObject)Instantiate(STORAGE_HeroPrefabs.s.heroes [heroType], Spawns[DataHandler.s.playerSlots[playerid]].position, Spawns[DataHandler.s.playerSlots[playerid]].rotation);
        myHero.GetComponent <HeroObjectRelay> ().id = playerid;
        GetComponent <HeroController> ().movePos    = myHero.transform.position;
        myHero.name = myHero.name + " - " + playerid.ToString();
        NetworkServer.Spawn(myHero);
        RpcSetLocalHero(myHero, myHero.transform.position);

        myHealth = myHero.GetComponent <Health> ();
        myHealth.myRespawnManager = this;
        if (DataHandler.s.playerSlots [playerid] < 3)
        {
            myHealth.mySide = Health.Side.blue;
        }
        else if (DataHandler.s.playerSlots [playerid] < 6)
        {
            myHealth.mySide = Health.Side.red;
        }
        else
        {
            myHealth.mySide = Health.Side.green;
        }

        mySide = myHealth.mySide;
    }
Esempio n. 2
0
    void RpcSetLocalHero(GameObject _myHero, Vector3 pos)
    {
        GetComponent <HeroController> ().movePos = pos;

        myHero = _myHero;

        myHealth = _myHero.GetComponent <Health> ();
        if (DataHandler.s.playerSlots [playerid] < 3)
        {
            myHealth.mySide = Health.Side.blue;
        }
        else if (DataHandler.s.playerSlots [playerid] < 6)
        {
            myHealth.mySide = Health.Side.red;
        }
        else
        {
            myHealth.mySide = Health.Side.green;
        }

        mySide = myHealth.mySide;


        if (isLocalPlayer)
        {
            myHero.GetComponent <Health> ().isLocalPlayerHealth = true;
        }

        print("Local Player Setup Complete! ->" + playerid.ToString());
    }
Esempio n. 3
0
    public static int SideToInt(Health.Side mySide)
    {
        switch (mySide)
        {
        case Health.Side.blue:
            return(0);

            break;

        case Health.Side.red:
            return(1);

            break;

        case Health.Side.green:
            return(2);

            break;

        case Health.Side.neutral:
            return(3);

            break;

        default:
            return(-1);
        }
    }
Esempio n. 4
0
    float LevelDifCalculator(Health.Side dead, Health.Side reward)
    {
        float xpLess  = Mathf.Min(xp [SideToInt(dead)], xp [SideToInt(reward)]);
        float xpMore  = Mathf.Max(xp [SideToInt(dead)], xp [SideToInt(reward)]);
        int   lvlLess = Mathf.Min(level [SideToInt(dead)], level [SideToInt(reward)]);
        int   lvlMore = Mathf.Max(level [SideToInt(dead)], level [SideToInt(reward)]);

        float isNegative = 1;

        if (xp [SideToInt(reward)] > xp [SideToInt(dead)])
        {
            isNegative = -1;
        }

        float levelDif = lvlMore - lvlLess;

        //print (levelDif);
        //print (xpMore.ToString() + " - " + ReqLevelCalculator (lvlMore-1).ToString() + " / " + ReqLevelCalculator (lvlMore).ToString() + " - " + ReqLevelCalculator (lvlMore-1).ToString());
        levelDif += (xpMore - ReqLevelCalculator(lvlMore - 1)) / (ReqLevelCalculator(lvlMore) - ReqLevelCalculator(lvlMore - 1));
        //print (levelDif);

        return(levelDif);
    }
Esempio n. 5
0
    // Update is called once per frame
    void Update()
    {
        if (PlayerSpawner.LocalPlayerSpawner.myHealth == null)
        {
            return;
        }


        if (isLocalPlayer && !PlayerSpawner.LocalPlayerSpawner.myHealth.isDead)
        {
            bool[] isKeyPressed = new bool[4];
            if (Input.GetKeyDown(KeyCode.Q))
            {
                isKeyPressed [0] = true;
            }
            if (Input.GetKeyDown(KeyCode.W))
            {
                isKeyPressed [1] = true;
            }
            if (Input.GetKeyDown(KeyCode.E))
            {
                isKeyPressed [2] = true;
            }
            if (Input.GetKeyDown(KeyCode.R))
            {
                isKeyPressed [3] = true;
            }


            if (isKeyPressed[0] || isKeyPressed[1] || isKeyPressed[2] || isKeyPressed[3])
            {
                RaycastHit FloorHit;
                Ray        ray       = Camera.main.ScreenPointToRay(Input.mousePosition);
                int        floorMask = (1 << 8);
                if (Physics.Raycast(ray, out FloorHit, 100.0f, floorMask))
                {
                    float distance = Vector3.Distance(myHero.transform.position.Floorize(), FloorHit.point.Floorize());

                    for (int i = 0; i < 4; i++)
                    {
                        if (isKeyPressed[i] && curCooldown [i] <= 0 && distance <= skillSettings [i].range && mana > skillSettings [i].manaCost)
                        {
                            Health myTarget = null;
                            if (skillSettings [i].skillType == SkillSettings.Types.Targeted)
                            {
                                RaycastHit heroHit;
                                int        heroMask = (1 << 9);
                                if (Physics.Raycast(ray, out heroHit, 100.0f, heroMask))
                                {
                                    myTarget = heroHit.transform.root.gameObject.GetComponent <Health> ();
                                    if (myTarget == null)
                                    {
                                        continue;
                                    }

                                    Health.Side mySide    = PlayerSpawner.LocalPlayerSpawner.myHealth.mySide;
                                    Health.Side enemySide = myTarget.mySide;

                                    switch (skillSettings [i].skillTarget)
                                    {
                                    case SkillSettings.Target.Both:
                                        //do nothing as we can target both the enemy and the friend
                                        break;

                                    case SkillSettings.Target.Enemy:
                                        if (mySide == enemySide)
                                        {
                                            continue;
                                        }
                                        break;

                                    case SkillSettings.Target.Ally:
                                        if (mySide != enemySide)
                                        {
                                            continue;
                                        }
                                        break;
                                    }
                                }
                                else
                                {
                                    continue;
                                }
                            }
                            GameObject target = null;
                            if (myTarget != null)
                            {
                                target = myTarget.gameObject;
                            }
                            curCooldown [i] = skillSettings [i].cooldown;
                            ExecuteSkill(ButtonFromNum(i), FloorHit.point, target);
                        }
                    }
                }
            }



            for (int i = 0; i < skillSettings.Length; i++)
            {
                if (skillSettings [i] != null)
                {
                    if (!isCooldownEnabled)
                    {
                        curCooldown [i] = 0;
                        mana            = maxMana;
                    }

                    curCooldown [i] -= Time.deltaTime;
                    curCooldown [i]  = Mathf.Clamp(curCooldown [i], 0, skillSettings [i].cooldown);
                    SkillCooldownDisplay.disps [i].curCooldown = curCooldown [i];
                }
            }

            mana += manaRegen * Time.deltaTime;
            mana  = Mathf.Clamp(mana, 0, maxMana);
        }
    }
Esempio n. 6
0
    IEnumerator SetUpSide()
    {
        yield return(null);

        while (PlayerSpawner.LocalPlayerSpawner == null)
        {
            yield return(null);
        }
        while (PlayerSpawner.LocalPlayerSpawner.myHealth == null)
        {
            yield return(null);
        }

        switch (visualId)
        {
        case 0:
            mySide = PlayerSpawner.LocalPlayerSpawner.mySide;
            break;

        case 1:
            if (PlayerSpawner.LocalPlayerSpawner.mySide == Health.Side.blue)
            {
                mySide = Health.Side.red;
            }
            else
            {
                mySide = Health.Side.blue;
            }
            break;

        case 2:
            if (PlayerSpawner.LocalPlayerSpawner.mySide == Health.Side.blue)
            {
                mySide = Health.Side.green;
            }
            else if (PlayerSpawner.LocalPlayerSpawner.mySide == Health.Side.red)
            {
                mySide = Health.Side.green;
            }
            else
            {
                mySide = Health.Side.red;
            }
            break;

        default:
            Debug.LogError("XPandHeroVisualsDisplay VisualId not set");
            break;
        }

        SetColor();


        HeroTopBarDisplay[] myDisps = GetComponentsInChildren <HeroTopBarDisplay> ();

        for (int i = 0; i < 3; i++)
        {
            myDisps [i].myPlayerId = (XPMaster.SideToInt(mySide) * 3) + (2 - i);
            myDisps [i].SetUp();
            //print (myDisps [i].gameObject.name);
        }
    }
Esempio n. 7
0
    public void AddXp(Health.Side deadSide, Health.Side[] killerSides, Health.Type deadType)
    {
        if (!isServer)
        {
            Debug.Log("Only Server Side Xp adding allowed!");
        }

        float xpReward = 0;

        switch (deadType)
        {
        case Health.Type.hero:
            xpReward = baseHero + level [SideToInt(deadSide)] * heroAdd;
            break;

        case Health.Type.jungle:
            xpReward = jungle;
            break;

        case Health.Type.minion:
            xpReward = baseMinion + Mathf.Pow(level [SideToInt(deadSide)], minionMult);
            break;

        case Health.Type.fort:
            xpReward = fort;
            break;

        case Health.Type.keep:
            xpReward = keep;
            break;

        case Health.Type.towerFort:
            xpReward = towerFort;
            break;

        case Health.Type.towerKeep:
            xpReward = towerKeep;
            break;
        }

        foreach (Health.Side rewardSide in killerSides)
        {
            if (rewardSide != null)
            {
                if (rewardSide != Health.Side.neutral)
                {
                    float mult = 1;
                    if (deadType == Health.Type.hero)
                    {
                        mult = HeroLevelDifferenceToMultiplier(LevelDifCalculator(deadSide, rewardSide));
                    }

                    xp [SideToInt(rewardSide)] += xpReward * mult;
                    print("Xp Added: " + rewardSide.ToString() + " - " + xpReward * mult);

                    if (xp [SideToInt(rewardSide)] > reqXp [SideToInt(rewardSide)])
                    {
                        level [SideToInt(rewardSide)] += 1;
                        reqXp [SideToInt(rewardSide)]  = ReqLevelCalculator(level [SideToInt(rewardSide)]);

                        LevelUpFunctions.Invoke(level [SideToInt(rewardSide)], rewardSide);
                    }

                    float myXp      = xp [SideToInt(rewardSide)];
                    float myReqUp   = ReqLevelCalculator(level [SideToInt(rewardSide)]);
                    float myReqDown = ReqLevelCalculator(level [SideToInt(rewardSide)] - 1);
                    xp_percent [SideToInt(rewardSide)] = (myXp - myReqDown) / (myReqUp - myReqDown);
                    XpUpFunctions.Invoke(xp_percent[SideToInt(rewardSide)], rewardSide);
                }
            }
        }
    }