Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
    /// <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);
    }
Ejemplo n.º 4
0
    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);
    }
Ejemplo n.º 5
0
    /// <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);
    }
Ejemplo n.º 6
0
 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;
 }
Ejemplo n.º 7
0
 public void AddProjectile(EWeaponId pWeapon, ProjectileConfig pConfig)
 {
     if (allProjectiles.ContainsKey(pWeapon))
     {
         return;
     }
     allProjectiles.Add(pWeapon, pConfig);
 }
Ejemplo n.º 8
0
    private LayerMask GetDontHitLayer(EWeaponId pWeapon)
    {
        LayerMask dontHitLayer = game.Layers.MapObject;

        if (pWeapon == EWeaponId.Special_Curie)
        {
            dontHitLayer = dontHitLayer | game.Layers.Unwalkable;
        }
        return(dontHitLayer);
    }
Ejemplo n.º 9
0
    public void SetActiveWeapon(EWeaponId pWeapon)
    {
        if (!HasWeapon(pWeapon))
        {
            Debug.LogError("Player doesnt have a weapon " + pWeapon);
            return;
        }
        int weaponIndex = GetWeaponIndex(pWeapon);

        SetActiveWeapon(weaponIndex);
    }
Ejemplo n.º 10
0
    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
    }
Ejemplo n.º 11
0
    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);
    }
Ejemplo n.º 12
0
    public WeaponConfig GetWeaponConfig(EWeaponId pWeapon)
    {
        WeaponConfig weapon;

        allWeapons.TryGetValue(pWeapon, out weapon);
        if (weapon == null)
        {
            Debug.LogError("Missing config for weapon: " + pWeapon);
        }

        return(weapon);
    }
Ejemplo n.º 13
0
    public ProjectileConfig GetProjectileConfig(EWeaponId pWeapon)
    {
        ProjectileConfig projectile;

        allProjectiles.TryGetValue(pWeapon, out projectile);
        if (projectile == null)
        {
            Debug.LogError("Missing config for projectile: " + pWeapon);
        }

        return(projectile);
    }
Ejemplo n.º 14
0
    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);
    }
Ejemplo n.º 15
0
    /// <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);
        }
    }
Ejemplo n.º 16
0
    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);
    }
Ejemplo n.º 17
0
 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);
 }
Ejemplo n.º 18
0
    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;
        }
    }
Ejemplo n.º 19
0
    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);
    }
Ejemplo n.º 20
0
    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);
    }
Ejemplo n.º 21
0
    /// <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);
    }
Ejemplo n.º 22
0
    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);
    }
Ejemplo n.º 23
0
    //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);
    }
Ejemplo n.º 24
0
    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);
    }
Ejemplo n.º 25
0
    /// <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);
    }
Ejemplo n.º 26
0
 public MapSpecialWeaponConfig GetMapSpecialWeaponConfig(EWeaponId pId)
 {
     return(MapWeaponsSpecial.Find(a => a.Id == pId));
 }
Ejemplo n.º 27
0
    public static void PlayWeaponUseSound(EWeaponId pWeapon, AudioSource pSource, bool pIsLoop = false)
    {
        AudioClip clip = audioManager.GetWeaponUseClip(pWeapon);

        TryPlay(pSource, clip, false, pIsLoop);
    }
Ejemplo n.º 28
0
 internal void PlayWeaponUseSound(EWeaponId pId)
 {
     SoundController.PlayWeaponUseSound(pId, player.AudioSource, false);
     player.Photon.Send(EPhotonMsg.Player_PlayWeaponUseSound, (int)pId);
 }
Ejemplo n.º 29
0
 private bool HasWeapon(EWeaponId pWeapon)
 {
     return(GetWeapon(pWeapon) != null);
 }
Ejemplo n.º 30
0
 internal PlayerWeapon GetWeapon(EWeaponId pWeaponId)
 {
     return(weapons.Find(a => a.Id == pWeaponId));
 }