//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; }
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()); }
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); } }
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); }
// 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); } }
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); } }
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); } } } }