Beispiel #1
0
    /// <summary>
    /// Causa dano a um personagem.
    /// </summary>
    /// <param name="state">O estado do personagem alvo.</param>
    /// <param name="ownState">O estado do provedor deste ataque.</param>
    /// <param name="damage">O dano a ser causado.</param>
    /// <param name="effect">O efeito de status causado.</param>
    public static void TakeDamage(CharacterState state, CharacterState ownState, int damage, CharacterStatus effect = CharacterStatus.NONE)
    {
        //Dano dobrado quando vulnerável.
        if (state.Status == CharacterStatus.VUNERABLE)
        {
            damage = (int)(CharacterStatusValues.VULNERABLE_DAMAGE_FACTOR * damage);
        }

        //Dano reduzido quando com buff de defesa.
        if (state.Buff == CharacterBuff.DEFENSE)
        {
            damage = (int)(damage * CharacterBuffValues.DEFENSE_FACTOR);
        }

        state.Health -= damage;

        if (effect != CharacterStatus.NONE)
        {
            state.Status = effect;
        }

        if (ownState != null && ownState.Buff == CharacterBuff.LIFE_DRAIN)
        {
            //Cura uma porcentagem do dano causado.
            CombatLogic.Heal(ownState, (int)(CharacterBuffValues.LIFE_DRAIN_FACTOR * damage));
        }
    }
        public static bool IsTargetOfAbilityValid(LivingEntity caster, LivingEntity target, Ability abilityUsed)
        {
            if (caster == target &&
                (abilityUsed.ValidTargets == Ability.TargettingOptions.Self ||
                 abilityUsed.ValidTargets == Ability.TargettingOptions.AlliesAndSelf)
                )
            {
                return(true);
            }

            else if (caster != target &&
                     CombatLogic.IsTargetFriendly(caster, target) &&
                     (abilityUsed.ValidTargets == Ability.TargettingOptions.Allies ||
                      abilityUsed.ValidTargets == Ability.TargettingOptions.AlliesAndSelf))
            {
                return(true);
            }

            else if (CombatLogic.IsTargetHostile(caster, target) &&
                     abilityUsed.ValidTargets == Ability.TargettingOptions.Enemies)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public static void PerformShoot(LivingEntity caster, LivingEntity target, Ability abilityUsed)
        {
            // Calculate the damage
            int damageValue = CombatLogic.CalculateDamageValue(caster, target, abilityUsed.PrimaryValue);

            // Create damage event
            CombatLogic.HandleDamage(target, damageValue);
        }
Beispiel #4
0
    private IEnumerator ContinuosDamage(int damage)
    {
        var delay      = new WaitForSeconds(CharacterStatusValues.DAMAGE_PERIOD);
        int iterations = (int)(CharacterStatusValues.STATUS_DURATION / CharacterStatusValues.DAMAGE_PERIOD);

        for (int i = 0; i < iterations; i++)
        {
            yield return(delay);

            CombatLogic.TakeDamage(state, null, damage);
        }

        continuosDamage = null;
    }
Beispiel #5
0
    protected override IEnumerator ActivateInner()
    {
        int x, y;

        Move.DirectionToAdventurerAdjacent(input.Value, out x, out y);
        if (Level.currentLevel.WithinBounds(x, y))
        {
            Tile toTheRight = Level.currentLevel.GetTile(x, y);
            if (toTheRight.MonsterHere != null)
            {
                CombatLogic.ProcessAttack(Adventurer.instance, toTheRight.MonsterHere);
            }
        }
        yield break;
    }
Beispiel #6
0
 private void FixedUpdate()
 {
     for (int i = 0; i < count; i++)
     {
         var cds = Physics.OverlapSphere(projectiles[i].position, projectiles[i].info.size);
         foreach (var cd in cds)
         {
             if (cd.CompareTag(projectiles[i].target))
             {
                 var state = cd.GetComponent <CharacterState>();
                 CombatLogic.TakeDamage(state, projectiles[i].own, projectiles[i].info.damage, projectiles[i].info.effect);
                 Delete(i);
                 i--;
                 break;
             }
         }
     }
 }
Beispiel #7
0
        public override void End()
        {
            SparxHub.Instance.PushManager.OnScheduleLocalNotification -= ScheduleLocalNotification;
            SparxHub.Instance.ChatManager.OnConnected -= RegisterChatChannels;

            DestroyFlowControlObject();

            HudLoadManager.DestroyAllHud();
            SceneLoadManager.DestroyAllLevel();
            PlayerManagerForFilter.Dispose();
            NpcManager.Dispose();
            MainLandLogic.Dispose();
            CombatLogic.Dispose();
            InputBlockerManager.Instance.ForceUnlockAll();
            LoadingSpinner.Destroy();
            FusionAudio.StopMusic();
            FusionAudio.StopAmbience();
            ChatController.instance.Clean();
        }
Beispiel #8
0
    private void OnTriggerEnter(Collider other)
    {
        if (!ValidateCollect(item.itemType))
        {
            return;
        }

        if (other.CompareTag("Player"))
        {
            if (item.itemType == ItemType.BUFF)
            {
                playerState.Buff = item.buff;
            }
            else//Heal
            {
                CombatLogic.Heal(playerState, item.healAmount);
            }

            Destroy(gameObject);
        }
    }
Beispiel #9
0
        protected override void Awake()
        {
            base.Awake();

            this.LogErrorIfComponentIsNull(CombatLogic);

            Inventory.AddItem(Instantiate(weapon));
            Equipment.EquipWeapon(Inventory.GetItemListAsReadOnly(x => x is Item_Weapon)[0] as Item_Weapon);

            var status = Resources.Load <Unit_Status_Information>("DummyStatus");

            Status.Initialize(Instantiate(status));
            Resources.UnloadAsset(status);

            if (brain != null)
            {
                var brain = Instantiate(this.brain);
                brain.Initialize(this);
                CombatLogic.InstallBrain(brain);
            }
        }
Beispiel #10
0
 public virtual void apply_status_attack(PlayerUnit self, Enemy[] targets, CombatLogic cLog, bool all_ooa)
 {
 }
Beispiel #11
0
    //TODO: a function that highlights the tiles a move would pass over. will be called when a move is passed over.
    // e.g. the player expected a move to be usable and mouses over to see where the move bumps or whatever.

    //tilegrid[4, 3].GetComponent<SpriteRenderer>().color = new Color(35f / 255f, 222f / 255f, 0f / 255f);
    //^this highlights a tile. use for testing.

    public virtual void apply_status_heal(PlayerUnit self, PlayerUnit[] targets, CombatLogic cLog)
    {
    }
Beispiel #12
0
        public static void Main(string[] args)
        {
            // Get initial game state
            GameInfo.ProcessTurn(new Game());
            GameInfo.IsDebug = GameInfo.IsLocal && args.Count() > 0 && args[0] == "debug";

            if (GameInfo.IsDebug)
            {
                Stopwatch s = new Stopwatch();
                s.Start();
                while (!Debugger.IsAttached && s.ElapsedMilliseconds < 60000)
                {
                    ;                                                         // max 30 seconds to attach, prevents memory leaks;
                }
                s.Stop();
            }

            // Do Genetic Algorithm Specimen implementation
            Specimen specimen;

            if (GameInfo.IsDebug || (GameInfo.IsLocal && args.Count() > 0 && args[0] == "test"))
            {
                specimen = new FakeSpecimen();
                HParams  = specimen.GetHyperParameters();
                Log.LogMessage("testing...");
            }
            else
            {
                specimen = GeneticSpecimen.RandomSpecimen();
                HParams  = specimen.GetHyperParameters();
            }

            // Handle Logic
            Logic.Logic CombatLogic       = new CombatLogic();
            Logic.Logic EarlyCollectLogic = new EarlyCollectLogic();
            Logic.Logic DropoffLogic      = new DropoffLogic();
            Logic.Logic EndOfGameLogic    = new EndOfGameLogic();
            Logic.Logic LateCollectLogic  = new LateCollectLogic();
            SiteSelection.Initialize();

            string BotName = GameInfo.BOT_NAME + specimen.Name();

            GameInfo.Game.Ready(BotName);

            Log.LogMessage("Successfully created bot! My Player ID is " + GameInfo.Game.myId);
            Stopwatch combatWatch    = new Stopwatch();
            Stopwatch dropoffWatch   = new Stopwatch();
            Stopwatch proximityWatch = new Stopwatch();
            Stopwatch collectWatch   = new Stopwatch();

            for (; ;)
            {
                // Basic processing for the turn start
                GameInfo.Game.UpdateFrame();
                GameInfo.ProcessTurn(GameInfo.Game);
                Fleet.UpdateFleet(GameInfo.MyShips);
                EnemyFleet.UpdateFleet();
                Log.LogMessage("value mapping...");
                ValueMapping.ProcessTurn();
                SiteSelection.ProcessTurn();

                // logic turn processing
                EarlyCollectLogic.ProcessTurn();
                DropoffLogic.ProcessTurn();
                EndOfGameLogic.ProcessTurn();
                CombatLogic.ProcessTurn();

                // Score the ships first
                Safety.InitializeNewTurn();

                // Specimen spawn logic for GeneticTuner
                if (GameInfo.TurnsRemaining == 0)
                {
                    var players = GameInfo.Opponents;
                    players.Add(GameInfo.Me);
                    players = players.OrderByDescending(x => x.halite).ToList();
                    int numChildren = players.Count - ((players.Count / 2) + players.IndexOf(GameInfo.Me));
                    if (numChildren > 0)
                    {
                        specimen.SpawnChildren(numChildren);
                    }
                    else
                    {
                        specimen.Kill();
                    }
                    if (GameInfo.MyId == 1 && GameInfo.IsLocal)
                    {
                        string content = $"\n{BotName},{GameInfo.Me.halite}";
                        foreach (var o in GameInfo.Opponents)
                        {
                            content += $",{o.id.id},{o.halite}";
                        }
                        using (StreamWriter sw = File.AppendText("ResultsHistory.txt")) {
                            sw.Write(content);
                        }
                    }
                    Log.LogMessage("total time in combat  logic = " + (combatWatch.ElapsedMilliseconds));
                    Log.LogMessage("total time in dropoff logic = " + (dropoffWatch.ElapsedMilliseconds));
                    Log.LogMessage("total time in proximity logic = " + (proximityWatch.ElapsedMilliseconds));
                }

                bool doFirst = GameInfo.MyShipyardCell.Neighbors.Where(n => n.IsOccupiedByMe).Any(n => n.ship.CellHalite > 10);
                if (doFirst && ShouldSpawnShip())
                {
                    Fleet.SpawnShip();
                }

                // Combat Logic!!!
                Log.LogMessage($"*** Combat  Logic ***");
                combatWatch.Start();
                CombatLogic.CommandShips();
                combatWatch.Stop();

                // End game, return all ships to nearest dropoff
                Log.LogMessage($"*** EndGame Logic ***");
                EndOfGameLogic.CommandShips();

                // Move ships to dropoffs
                Log.LogMessage($"*** Dropoff Logic ***");
                dropoffWatch.Start();
                DropoffLogic.CommandShips();
                dropoffWatch.Stop();

                // collect halite (move or stay) using Logic interface
                Log.LogMessage($"*** Collect Logic ***");
                collectWatch.Reset();
                collectWatch.Start();
                if (GameInfo.Map.AverageHalitePerCell > HParams[Parameters.HALITE_TO_SWITCH_COLLECT] || GameInfo.Map.PercentHaliteCollected < .5)
                {
                    EarlyCollectLogic.CommandShips();
                }
                LateCollectLogic.CommandShips();
                collectWatch.Stop();
                Log.LogMessage("collect time was " + collectWatch.ElapsedMilliseconds);

                if (!doFirst && ShouldSpawnShip())
                {
                    Fleet.SpawnShip();
                }

                // spawn ships
                GameInfo.Game.EndTurn(Fleet.GenerateCommandQueue());
            }
        }
Beispiel #13
0
 private void Awake()
 {
     Instance = this;
 }
    // Coroutine CRRef;

    void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }
        bgTween.AssignBackgroundsForRegion(region);
        bgTween.changeBackground(level);
        for (int i = 0; i < allCharacters.Count; i++)
        {
            if (i != CharectorStats.SetCurrentHero(CharectorStats.GetCurrentHero())[0])
            {
                allCharacters[i].SetActive(false);
            }
            else
            {
                SelectedHero = allCharacters[i];
            }
        }
        SelectedEnemy     = allEnemies[0];
        characterAnimator = characterHolder.GetComponentInChildren <Animator>();

        heroParticles = SelectedHero.transform.Find("HeroAttackParticles").gameObject;
        characterAnimator.SetBool("inCombat", true);
        bubbles = GetComponentsInChildren <Image>();
        foreach (Image bubble in bubbles)
        {
            bubble.gameObject.SetActive(false);
        }

        int[] heroStats = CharectorStats.SetCurrentHero(CharectorStats.GetCurrentHero());
        SetXPText();
        pDmg             = heroStats[4];
        pHealth          = heroStats[5];
        pCrit            = heroStats[6];
        pAgi             = heroStats[7];
        pDef             = heroStats[8];
        lengthMultiplier = 0;

        stagedGold   = 0;
        stagedShard1 = 0;
        stagedShard2 = 0;

        //event subs
        CombatWordManager.onMaxLengthFound += generateBubble;
        CombatWordManager.onCorrectWord    += spelledWord;
        CombatWordManager.onIncorrectWord  += wrongWord;
        CharectorStats.leveledUp           += onLeveledUp;
        onDamageEnemy += enemyTakeDamage;
        //onDamageEnemy += enemyGotHitAnim;
        onDamagePlayer += playerTakeDamage;
        onDamagePlayer += enemyAttackAnim;
        onEnemyKilled  += nextWord;
        onEnemyKilled  += stageLoot;
        //onEnemyKilled += enemyIsDeadAnim;
        onLevelComplete += levelFinished;
        onLevelComplete += heroCelebrateAnim;
        onPlayerKilled  += gameOverSequence;
        onPlayerKilled  += removeBubble;
        onLevelComplete += enableContinueButton;
        onPlayerKilled  += disableContinueButton;
        InitializePlayer();
        InitializeEnemy();
        displayNewEnemyPrefab();
        InitializeTimer();

        isGameplay = true;
        //StartCoroutine("enemyWalk");
        CombatWordManager.StartLevel();
        wordsLeft = CombatWordManager.Words.Count;
    }
Beispiel #15
0
 public virtual void apply_status_heal(Enemy self, Enemy[] targets, CombatLogic cLog)
 {
 }