private void AddWeapon(EWeaponId pWeapon) { switch (brainiacs.ItemManager.GetWeaponCathegory(pWeapon)) { case EWeaponCathegory.None: return; case EWeaponCathegory.HeroBasic: EHero hero = brainiacs.HeroManager.GetHeroOfWeapon(pWeapon); AddHeroBasicWeapon(hero); return; case EWeaponCathegory.HeroSpecial: hero = brainiacs.HeroManager.GetHeroOfWeapon(pWeapon); AddHeroSpecialWeapon(hero); return; case EWeaponCathegory.MapBasic: AddMapWeapon(pWeapon); return; case EWeaponCathegory.MapSpecial: AddMapWeaponSpecial(pWeapon); return; } Debug.LogError("Couldnt add weapon " + pWeapon); }
public override void Evaluate() { //pick weapon EWeaponId pickedWeapon = PickWeapon(); if (brain.IsTmp && pickedWeapon == EWeaponId.Special_Tesla) { Debug.LogError("Tesla clone cant clone itself"); return; } //swap to it if (pickedWeapon != player.WeaponController.ActiveWeapon.Id) { player.WeaponController.SetActiveWeapon(pickedWeapon); isUseWeaponRequested = false; lastTimeSwapWeapon = Time.time; } //target a player targetedPlayer = GetPlayerToTarget(pickedWeapon); //set move target Tuple <Vector2, Vector2> usePositions = GetUseWeaponPosition(pickedWeapon); SetMoveTarget(usePositions); }
/// <summary> /// Called on owner and image side /// </summary> public void SetSpawn(Vector2 pProjectileDirection, EWeaponId pId, EDirection pPlayerDirection) { SetActive(true); //has to be called before animator.SetFloat //projectile type is based on weapon //their condition in animator must match the weapon id const string ANIM_KEY_WEAPON = "weapon"; animator.SetFloat(ANIM_KEY_WEAPON, (int)pId); config = brainiacs.ItemManager.GetProjectileConfig(pId); boxCollider2D.size = config.Visual.GetCollider().size; boxCollider2D.offset = config.Visual.GetCollider().offset; boxCollider2D.enabled = false; Direction = pProjectileDirection; transform.Rotate(Utils.GetRotation(pPlayerDirection, 180)); isInited = true; game.ProjectileManager.RegisterProjectile(this); Photon.Send(EPhotonMsg.Projectile_Spawn, pProjectileDirection, pId, pPlayerDirection); }
private float GetWeaponMaxUseDistance(EWeaponId pWeapon) { if (brainiacs.ItemManager.GetWeaponCathegory(pWeapon) == EWeaponCathegory.HeroBasic) { return(10); } switch (pWeapon) { //hero special case EWeaponId.Special_DaVinci: return(2); case EWeaponId.Special_Nobel: case EWeaponId.Mine: return(15); //special case EWeaponId.Flamethrower: return(3); //projectile case EWeaponId.MP40: return(8); } return(10); }
/// <summary> /// Returns position from which the picked weapon will be used. /// For projectile weapons => distant position vertical/horizontal to targeted player /// Mine => power up or some interesting place /// ... /// </summary> private Tuple <Vector2, Vector2> GetUseWeaponPosition(EWeaponId pPickedWeapon) { switch (pPickedWeapon) { //can be used from anywhere case EWeaponId.Special_Einstein: return(playerPositions); } if (targetedPlayer == null) { return(playerPositions); } if (Vector2.Distance(playerPosition, targetedPlayer.Position) > INVALID_TARGET_DISTANCE) { Debug.Log("Target is too far - either teleporting or dead"); return(playerPositions); } //todo: maybe dont recalculate when targetedPlayer.Position doesnt change but //that is expected to happen quite fast Tuple <Vector2, Vector2> shootPositions = GetShootPositionTo(targetedPlayer.Position, pPickedWeapon); //= new Tuple<Vector2, Vector2>(Vector2.zero, Vector2.zero); Utils.DebugDrawCross(shootPositions.Item1, Color.red); Utils.DebugDrawCross(shootPositions.Item2, Color.blue); //Debug.Log($"shootPositions = {shootPositions.Item1} | {shootPositions.Item1}"); return(shootPositions); }
public void ShowWeapon(EWeaponId pWeapon) { currentWeaponConfig = brainiacs.ItemManager.GetWeaponConfig(pWeapon); weaponUp.sprite = currentWeaponConfig.VisualInfo.PlayerSpriteUp; weaponRight.sprite = currentWeaponConfig.VisualInfo.PlayerSpriteRight; weaponDown.sprite = currentWeaponConfig.VisualInfo.playerSpriteDown; weaponLeft.sprite = currentWeaponConfig.VisualInfo.PlayerSpriteLeft; }
public void AddProjectile(EWeaponId pWeapon, ProjectileConfig pConfig) { if (allProjectiles.ContainsKey(pWeapon)) { return; } allProjectiles.Add(pWeapon, pConfig); }
private LayerMask GetDontHitLayer(EWeaponId pWeapon) { LayerMask dontHitLayer = game.Layers.MapObject; if (pWeapon == EWeaponId.Special_Curie) { dontHitLayer = dontHitLayer | game.Layers.Unwalkable; } return(dontHitLayer); }
public void SetActiveWeapon(EWeaponId pWeapon) { if (!HasWeapon(pWeapon)) { Debug.LogError("Player doesnt have a weapon " + pWeapon); return; } int weaponIndex = GetWeaponIndex(pWeapon); SetActiveWeapon(weaponIndex); }
public PlayerWeapon(Player pOwner, EWeaponId pId, InHandWeaponInfo pInHandInfo, InHandWeaponVisualInfo pInHandVisualInfo) { Id = pId; Owner = pOwner; AmmoLeft = pInHandInfo.Ammo; MagazinesLeft = pInHandInfo.Magazines; Info = pInHandInfo; VisualInfo = pInHandVisualInfo; RealoadTimeLeft = pInHandInfo.Cooldown; //has to be (re)set for UI reloading }
public MapWeaponConfig GetMapWeaponConfig(EWeaponId pId) { MapWeaponConfig config = MapWeapons.Find(a => a.Id == pId); if (config == null) //not error { Debug.LogError($"Config for weapon {pId} not found"); } return(config); }
public WeaponConfig GetWeaponConfig(EWeaponId pWeapon) { WeaponConfig weapon; allWeapons.TryGetValue(pWeapon, out weapon); if (weapon == null) { Debug.LogError("Missing config for weapon: " + pWeapon); } return(weapon); }
public ProjectileConfig GetProjectileConfig(EWeaponId pWeapon) { ProjectileConfig projectile; allProjectiles.TryGetValue(pWeapon, out projectile); if (projectile == null) { Debug.LogError("Missing config for projectile: " + pWeapon); } return(projectile); }
public void SetActiveWeapon(EWeaponId pId, float pCadency) { if(activeWeapon == pId) return; activeWeapon = pId; activeWeaponCadency = pCadency; //weapon sprite InHandWeaponVisualInfo info = brainiacs.ItemManager.GetWeaponConfig(pId).VisualInfo; weapon.sprite = info.InfoSprite; player.Photon.Send(EPhotonMsg.Player_UI_PlayerInfo_SetActiveWeapon, pId, pCadency); }
/// <summary> /// Calculate the best position from which I can shoot to the target using the weapon /// First = position closest to the player /// Second = position closer to the target /// </summary> private Tuple <Vector2, Vector2> GetShootPositionTo(Vector2 pShootTarget, EWeaponId pWeapon) { float maxDist = GetWeaponMaxUseDistance(pWeapon); float idealDist = GetWeaponIdealUseDistance(pWeapon); //ideal distance shouldnt be bigger. (probably not configured) if (idealDist > maxDist) { idealDist = maxDist; } Tuple <Vector2, Vector2> posHorizontal = GetShootPositions(pShootTarget, maxDist, idealDist, true, GetDontHitLayer(pWeapon)); Tuple <Vector2, Vector2> posVertical = GetShootPositions(pShootTarget, maxDist, idealDist, false, GetDontHitLayer(pWeapon)); //TESTING - Select the closest shoot position //- simple distance compare - select the closest const bool useSimpleDistCompare = true; if (useSimpleDistCompare) { if (Vector2.Distance(playerPosition, posHorizontal.Item1) < Vector2.Distance(playerPosition, posVertical.Item1)) { return(posHorizontal); } else { return(posVertical); } } //- calculate path and compare their lengths //-- seems very costly, player lags MovePath pathHorizontal = pathFinder.GetPath(playerPosition, posHorizontal.Item1); //, AiMovement.PATH_STEP); MovePath pathVertical = pathFinder.GetPath(playerPosition, posVertical.Item1); //, AiMovement.PATH_STEP); if (pathHorizontal.GetLength() < pathVertical.GetLength()) { return(posHorizontal); } else { return(posVertical); } }
private Player GetPlayerToTarget(EWeaponId pPickeWeapon) { if (DebugData.TestNonAggressiveAi) { return(null); } Player closestPlayer = game.PlayerManager.GetClosestPlayerTo(player); return(closestPlayer); //return closestPlayer.Stats.IsShielded ? closestPlayer : null; //Debug.Log("No player to shoot"); return(null); }
private int GetWeaponIndex(EWeaponId pWeapon) { if (!HasWeapon(pWeapon)) { Debug.LogError("Player doesnt have a weapon " + pWeapon); return(-1); } for (int i = 0; i < weapons.Count; i++) { if (weapons[i].Id == pWeapon) { return(i); } } Debug.LogError("Weapon not found " + pWeapon); return(-1); }
protected override void HandleMsg2(EPhotonMsg pReceivedMsg, object[] pParams, ByteBuffer bb) { switch (pReceivedMsg) { case EPhotonMsg.Projectile_Spawn: Vector2 projectileDirection = (Vector2)pParams[0]; EWeaponId weapon = (EWeaponId)pParams[1]; EDirection playerDirection = (EDirection)pParams[2]; projectile.SetSpawn(projectileDirection, weapon, playerDirection); break; default: Debug.LogError(this.gameObject.name + " message not handled " + pReceivedMsg); break; } }
public AudioClip GetWeaponUseClip(EWeaponId pKey) { if (!isInited) { Init(); } AudioClip clip; weaponUseClips.TryGetValue(pKey, out clip); if (clip == null) { Debug.LogError($"Sound {pKey} not found"); } return(clip); }
internal void AddMapWeaponSpecial(EWeaponId pWeapon) { //Debug.Log("AddMapWeaponSpecial " + pWeapon); if (pWeapon == EWeaponId.None) { Debug.LogError($"Added weapon was null"); return; } MapSpecialWeaponConfig config = brainiacs.ItemManager.GetMapSpecialWeaponConfig(pWeapon); if (config == null) { Debug.LogError("Config is null " + pWeapon); return; } game.PlayerStatusManager.ShowMapItem(player.Stats.MapItemUiPosition.position, config.MapItemInfo); PlayerWeaponSpecial weaponSpecial = null; switch (pWeapon) { case EWeaponId.Flamethrower: weaponSpecial = new SpecialFlamethrower(player, config); break; case EWeaponId.Mine: weaponSpecial = new PlayerWeaponSpecial(player, config); break; } if (weaponSpecial == null) { Debug.LogError("AddMapWeaponSpecial not defined for " + pWeapon); weaponSpecial = new PlayerWeaponSpecial(player, config); } weapon.AddWeapon(weaponSpecial); }
/// <summary> /// Calculates priority of each weapon (0 = cant use, 10 = max prio) /// </summary> internal List <Tuple <EWeaponId, int> > GetWeaponsPriority() { List <Tuple <EWeaponId, int> > weaponsPriority = new List <Tuple <EWeaponId, int> >(); foreach (var weapon in player.WeaponController.weapons) { EWeaponId weaponId = weapon.Id; int priority = 0; if (weapon.CanUse()) { //todo: implement special cases for individual weapons switch (brainiacs.ItemManager.GetWeaponCathegory(weaponId)) { case EWeaponCathegory.HeroBasic: priority = 3; break; case EWeaponCathegory.HeroSpecial: //todo: da vinci => based on target distance + if is under fire priority = 10; break; case EWeaponCathegory.MapBasic: priority = 5; break; case EWeaponCathegory.MapSpecial: priority = 7; break; } } //prevent Tesla clone from cloning itself if (weaponId == EWeaponId.Special_Tesla && brain.IsTmp) { continue; } weaponsPriority.Add(new Tuple <EWeaponId, int>(weaponId, priority)); } return(weaponsPriority); }
private float GetWeaponIdealUseDistance(EWeaponId pWeapon) { if (brainiacs.ItemManager.GetWeaponCathegory(pWeapon) == EWeaponCathegory.HeroBasic) { return(5); } switch (pWeapon) { case EWeaponId.Special_DaVinci: return(0); case EWeaponId.MP40: return(4); case EWeaponId.Flamethrower: return(2); } return(666); }
//TODO: create system to check weapon cathegory internal void AddMapWeapon(EWeaponId pWeapon) { if (pWeapon == EWeaponId.None) { Debug.LogError($"Added weapon was null"); return; } MapWeaponConfig config = brainiacs.ItemManager.GetMapWeaponConfig(pWeapon); if (config == null) { return; } game.PlayerStatusManager.ShowMapItem(player.Stats.MapItemUiPosition.position, config.MapItemInfo); PlayerWeaponProjectile weaponProjectile = new PlayerWeaponProjectile(player, config); weapon.AddWeapon(weaponProjectile); }
internal EHero GetHeroOfWeapon(EWeaponId pWeapon) { switch (pWeapon) { case EWeaponId.Special_Curie: return(EHero.Currie); case EWeaponId.Special_DaVinci: return(EHero.DaVinci); case EWeaponId.Special_Einstein: return(EHero.Einstein); case EWeaponId.Special_Nobel: return(EHero.Nobel); case EWeaponId.Special_Tesla: return(EHero.Tesla); case EWeaponId.Basic_Curie: return(EHero.Currie); case EWeaponId.Basic_DaVinci: return(EHero.DaVinci); case EWeaponId.Basic_Einstein: return(EHero.Einstein); case EWeaponId.Basic_Nobel: return(EHero.Nobel); case EWeaponId.Basic_Tesla: return(EHero.Tesla); } Debug.LogError(pWeapon + " has no hero assigned"); return(EHero.None); }
/// <summary> /// Not sure if neccessary /// </summary> public EWeaponCathegory GetWeaponCathegory(EWeaponId pWeapon) { if (pWeapon.ToString().Contains("Basic_")) { return(EWeaponCathegory.HeroBasic); } if (pWeapon.ToString().Contains("Special_")) { return(EWeaponCathegory.HeroSpecial); } if (GetMapWeaponConfig(pWeapon) != null) { return(EWeaponCathegory.MapBasic); } if (GetMapSpecialWeaponConfig(pWeapon) != null) { return(EWeaponCathegory.MapSpecial); } Debug.LogError("No cathegory for weapon " + pWeapon); return(EWeaponCathegory.None); }
public MapSpecialWeaponConfig GetMapSpecialWeaponConfig(EWeaponId pId) { return(MapWeaponsSpecial.Find(a => a.Id == pId)); }
public static void PlayWeaponUseSound(EWeaponId pWeapon, AudioSource pSource, bool pIsLoop = false) { AudioClip clip = audioManager.GetWeaponUseClip(pWeapon); TryPlay(pSource, clip, false, pIsLoop); }
internal void PlayWeaponUseSound(EWeaponId pId) { SoundController.PlayWeaponUseSound(pId, player.AudioSource, false); player.Photon.Send(EPhotonMsg.Player_PlayWeaponUseSound, (int)pId); }
private bool HasWeapon(EWeaponId pWeapon) { return(GetWeapon(pWeapon) != null); }
internal PlayerWeapon GetWeapon(EWeaponId pWeaponId) { return(weapons.Find(a => a.Id == pWeaponId)); }