Exemplo n.º 1
0
    public Player(int id, string name, int populationLimit, bool isHuman = true)
    {
        this.id               = id;
        this.name             = name;
        this.isHuman          = isHuman;
        this.script           = new Script(this);
        this.action           = new PlayerActions(this);
        this.scriptAttributes = new ScriptAttributes();

        this.propertiesDestroied = new List <Property>();

        this.population      = 0;
        this.populationLimit = populationLimit;

        this.baseMaterials = new Dictionary <int, int>();
        this.units         = new Dictionary <int, Unit>();
        this.buildings     = new Dictionary <int, Building> ();

        this.orders            = new List <Order>();
        this.standbyOrders     = new List <Order>();
        this.enemyAttackOrders = new List <AttackOrder>();

        this.fog = new Fog(this.id);

        this.wantBuild = null;
    }
Exemplo n.º 2
0
        public bool Start(IScript script)
        {
            if (Script.HasFinished)
            {
                IScriptAttributes s = ScriptAttributes.Clone(script.Attributes);
                Script            = Managers.AdvancedScriptManager.CreateInstance <IScript>(script.GetType(), s.CtorParams);
                Script.Attributes = s;
            }
            bool b = Script.CanBeStarted();

            if (b)
            {
                Script.Start();
            }
            return(b);
        }
Exemplo n.º 3
0
        //FULL CTOR
        public void AddScript(
            Type typeImplIScript, object[] ctorParams, string id, EInitModels initModel,
            List <string> nextScripts, List <List <string> > scriptsToFinishPrior,
            double timerMin, double timerMax)
        {
            IScriptAttributes s = new ScriptAttributes(id);

            s.InitModel                = initModel;
            s.TimerIntervalMin         = timerMin;
            s.TimerIntervalMax         = timerMax;
            s.NextScripts              = nextScripts;
            s.ScriptsToFinishPriorThis = scriptsToFinishPrior;
            s.CtorParams               = ctorParams;

            AddScript(typeImplIScript, s);
        }
Exemplo n.º 4
0
        private void Process_UnsuccessfullyFinishedScripts()
        {
            SSL ufs = GetUnsuccessfullyFinishedScripts(_running);

            //gets only those with Sequential starter and change it to TimerBased
            ufs = GetScriptsWithSequentialStarter(ufs);

            if (ufs.Count < 1)
            {
                return;
            }

            for (int i = 0; i < ufs.Count; i++)
            {
                ufs[i].Stop();

                Game.LogTrivial("Script finished unsuccessfully: " + ufs[i].Id);

                IScript s = ufs[i].Script;
                //if StartCtrl == Delay -> re-assign the old one!
                IScript newScript = CreateInstance <IScript>(s.GetType(), s.Attributes.CtorParams);
                var     newAttrib = ScriptAttributes.Clone(s.Attributes);
                newAttrib.InitModel = EInitModels.TimerBased;
                newAttrib.ScriptsToFinishPriorThis = new List <List <string> >();
                newScript.Attributes = newAttrib;

                _queue.Add(newScript);
            }

            Logger.LogDebug(
                nameof(AdvancedScriptManager),
                nameof(Process_UnsuccessfullyFinishedScripts),
                "pre removing: running; " + _running.Count);

            RemoveScripts(ufs, _running);

            Logger.LogDebug(
                nameof(AdvancedScriptManager),
                nameof(Process_UnsuccessfullyFinishedScripts),
                "removed: running; " + _running.Count);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Emit the Script attribute with includes,includers,relativePath and timeStamp info.
        /// </summary>
        /// <param name="emitAttributes">Specifies single infos to emit.</param>
		internal void SetScriptAttribute(ScriptAttributes emitAttributes)
		{
            // module to resolve type tokens from:
            ModuleBuilder real_builder = this.AssemblyBuilder.RealModuleBuilder;

            // [Script(timeStamp, relativePath)]
            if ((emitAttributes & ScriptAttributes.Script) != 0)
            {
                // construct the [Script] attribute:
                CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.Script, new object[] { sourceTimestampUtc.Ticks, CompilationUnit.RelativeSourcePath });
                ScriptTypeBuilder.SetCustomAttribute(cab);
            }

            // [ScriptIncluders(int[])]
            if ((emitAttributes & ScriptAttributes.ScriptIncluders) != 0 && CompilationUnit.Includers.Count > 0)
            {
                // determine includers type token, remove duplicities:
                int[] includers = ArrayUtils.Unique(Array.ConvertAll(CompilationUnit.Includers.ToArray(), x => real_builder.GetTypeToken(x.Includer.ScriptBuilder.ScriptType).Token)).ToArray();
            
                // construct the [ScriptIncluders] attribute:
                CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.ScriptIncluders, new object[] { includers });
                ScriptTypeBuilder.SetCustomAttribute(cab);
            }

            // [ScriptIncludees(int[],byte[])]
            if ((emitAttributes & ScriptAttributes.ScriptIncludees) != 0 && CompilationUnit.Inclusions.Count > 0)
            {
                // determine inclusions type token, group by the token to remove duplicities:
                var inclusionsGroup = ArrayUtils.Group(CompilationUnit.Inclusions.ToArray(), x => real_builder.GetTypeToken(x.Includee.ScriptClassType).Token);
                // determine if single includees are at least once included unconditionally:
                int[] inclusions = new int[inclusionsGroup.Count];
                bool[] inclusionsConditionalFlag = new bool[inclusions.Length];

                int i = 0;
                foreach(var includee in inclusionsGroup)
                {
                    // find any unconditional inclusion to mark this unified inclusion as unconditional
                    inclusionsConditionalFlag[i] = ArrayUtils.LogicalAnd(includee.Value, x => x.IsConditional);
                    //
                    inclusions[i] = includee.Key;
                    ++i;
                }

                // construct the [ScriptIncluders] attribute:
                CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.ScriptIncludees, new object[] { inclusions, ScriptIncludeesAttribute.ConvertBoolsToBits(inclusionsConditionalFlag) });
                ScriptTypeBuilder.SetCustomAttribute(cab);
            }

            // [ScriptDeclares(int[])]
            if ((emitAttributes & ScriptAttributes.ScriptDeclares) != 0)
            {
                List<int> declaredTypesToken = new List<int>();

                foreach (PhpType type in CompilationUnit.GetDeclaredTypes())
                {
                    if (type.IsComplete && type.RealType != null)
                    {
                        declaredTypesToken.Add(real_builder.GetTypeToken(type.RealType).Token);
                    }
                }

                if (declaredTypesToken.Count > 0)
                {
                    // construct the [ScriptDeclares] attribute:
                    CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.ScriptDeclares, new object[] { declaredTypesToken.ToArray() });
                    ScriptTypeBuilder.SetCustomAttribute(cab);
                }
            }
		}
Exemplo n.º 6
0
        /// <summary>
        /// Emit the Script attribute with includes,includers,relativePath and timeStamp info.
        /// </summary>
        /// <param name="emitAttributes">Specifies single infos to emit.</param>
        internal void SetScriptAttribute(ScriptAttributes emitAttributes)
        {
            // module to resolve type tokens from:
            ModuleBuilder real_builder = this.AssemblyBuilder.RealModuleBuilder;

            // [Script(timeStamp, relativePath)]
            if ((emitAttributes & ScriptAttributes.Script) != 0)
            {
                // construct the [Script] attribute:
                CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.Script, new object[] { sourceTimestamp.Ticks, CompilationUnit.RelativeSourcePath });
                ScriptTypeBuilder.SetCustomAttribute(cab);
            }

            // [ScriptIncluders(int[])]
            if ((emitAttributes & ScriptAttributes.ScriptIncluders) != 0 && CompilationUnit.Includers.Count > 0)
            {
                // determine includers type token, remove duplicities:
                int[] includers = ArrayUtils.Unique(Array.ConvertAll(CompilationUnit.Includers.ToArray(), x => real_builder.GetTypeToken(x.Includer.ScriptBuilder.ScriptType).Token)).ToArray();

                // construct the [ScriptIncluders] attribute:
                CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.ScriptIncluders, new object[] { includers });
                ScriptTypeBuilder.SetCustomAttribute(cab);
            }

            // [ScriptIncludees(int[],byte[])]
            if ((emitAttributes & ScriptAttributes.ScriptIncludees) != 0 && CompilationUnit.Inclusions.Count > 0)
            {
                // determine inclusions type token, group by the token to remove duplicities:
                var inclusionsGroup = ArrayUtils.Group(CompilationUnit.Inclusions.ToArray(), x => real_builder.GetTypeToken(x.Includee.ScriptClassType).Token);
                // determine if single includees are at least once included unconditionally:
                int[]  inclusions = new int[inclusionsGroup.Count];
                bool[] inclusionsConditionalFlag = new bool[inclusions.Length];

                int i = 0;
                foreach (var includee in inclusionsGroup)
                {
                    // find any unconditional inclusion to mark this unified inclusion as unconditional
                    inclusionsConditionalFlag[i] = ArrayUtils.LogicalAnd(includee.Value, x => x.IsConditional);
                    //
                    inclusions[i] = includee.Key;
                    ++i;
                }

                // construct the [ScriptIncluders] attribute:
                CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.ScriptIncludees, new object[] { inclusions, ScriptIncludeesAttribute.ConvertBoolsToBits(inclusionsConditionalFlag) });
                ScriptTypeBuilder.SetCustomAttribute(cab);
            }

            // [ScriptDeclares(int[])]
            if ((emitAttributes & ScriptAttributes.ScriptDeclares) != 0)
            {
                List <int> declaredTypesToken = new List <int>();

                foreach (PhpType type in CompilationUnit.GetDeclaredTypes())
                {
                    if (type.IsComplete && type.RealType != null)
                    {
                        declaredTypesToken.Add(real_builder.GetTypeToken(type.RealType).Token);
                    }
                }

                if (declaredTypesToken.Count > 0)
                {
                    // construct the [ScriptDeclares] attribute:
                    CustomAttributeBuilder cab = new CustomAttributeBuilder(Constructors.ScriptDeclares, new object[] { declaredTypesToken.ToArray() });
                    ScriptTypeBuilder.SetCustomAttribute(cab);
                }
            }
        }
Exemplo n.º 7
0
 public void AddParamWinner(ScriptAttributes script)
 {
     this.paramWinner = script;
 }
Exemplo n.º 8
0
    //Divide jogadas através dos jogadores com maior ponto não visitado e segundo maior ponto não visitado
    public IEnumerator DivideJogadas(int rounds)
    {
        Debug.Log("DivideJogadas()");

        int round, i;

        int[] visitados;
        bool  sair;

        List <ScriptAttributes>            scriptsP1, scriptsP2;
        Dictionary <ScriptAttributes, int> jogadores;

        for (round = 0; round < rounds; round++)
        {
            sair = false;

            //cria array para controlar os jogadores que ja jogaram nessa rodada
            visitados = new int[AG.populacao.Length];

            //inicializa array
            visitados = reiniciaVisitados(visitados);

            scriptsP1 = new List <ScriptAttributes>();
            scriptsP2 = new List <ScriptAttributes>();

            jogadores = new Dictionary <ScriptAttributes, int>();

            float maior1, maior2;
            int   posMaior1, posMaior2;

            do
            {
                maior1    = -1f;
                maior2    = -1f;
                posMaior1 = -1;
                posMaior2 = -1;

                //busca jogador com maior pontuacao não visitado e guarda posição
                for (i = 0; i < AG.populacao.Length; i++)
                {
                    if (maior1 < AG.populacao[i].getPontuacao() && visitados[i] == 0)
                    {
                        maior1    = AG.populacao[i].getPontuacao();
                        posMaior1 = i;
                    }
                }

                visitados[posMaior1] = 1;

                //busca segundo jogador com maior pontuacao não visitado e que ainda não batalhou contra o jogador 1 e guarda posicao
                for (i = 0; i < AG.populacao.Length; i++)
                {
                    if ((AG.populacao[i].getPontuacao() > maior2) && visitados[i] == 0 && (!AG.populacao[posMaior1].getOponentes().Contains(i)))
                    {
                        maior2    = AG.populacao[i].getPontuacao();
                        posMaior2 = i;
                    }
                }


                if (posMaior2 == -1)
                {
                    for (i = 0; i < AG.populacao.Length; i++)
                    {
                        if ((AG.populacao[i].getPontuacao() > maior2) && visitados[i] == 0)
                        {
                            maior2    = AG.populacao[i].getPontuacao();
                            posMaior2 = i;
                        }
                    }
                }


                visitados[posMaior2] = 1;


                //Define jogadores como oponentes um do outro
                AG.populacao[posMaior1].getOponentes().Add(posMaior2);
                AG.populacao[posMaior2].getOponentes().Add(posMaior1);


                // !---------------------------------------------!
                // Adiciona os jogadores nas listas
                ScriptAttributes scriptAttributesp1 = new ScriptAttributes();
                scriptAttributesp1.AddAttribute("EARLYMEAT", AG.populacao[posMaior1].getCromossomos()[0]);      // % de comida inicio de jogo
                scriptAttributesp1.AddAttribute("EARLYGOLD", AG.populacao[posMaior1].getCromossomos()[1]);      // % de ouro inicio de jogo
                scriptAttributesp1.AddAttribute("WORKERS", AG.populacao[posMaior1].getCromossomos()[2]);        // Qtd. de trabalhadores
                scriptAttributesp1.AddAttribute("MATERIALPERMIN", AG.populacao[posMaior1].getCromossomos()[3]); // Qtd. de recurso/min para mudar estado para meio de jogo
                scriptAttributesp1.AddAttribute("MIDMEAT", AG.populacao[posMaior1].getCromossomos()[4]);        // % de comida meio de jogo
                scriptAttributesp1.AddAttribute("MIDGOLD", AG.populacao[posMaior1].getCromossomos()[5]);        // % de ouro meio de jogo
                scriptAttributesp1.AddAttribute("INFANTRY", AG.populacao[posMaior1].getCromossomos()[6]);       // % de infantaria
                scriptAttributesp1.AddAttribute("ARCHER", AG.populacao[posMaior1].getCromossomos()[7]);         // % de arqueiro
                scriptAttributesp1.AddAttribute("CAVALRY", AG.populacao[posMaior1].getCromossomos()[8]);        // % de cavalaria
                scriptAttributesp1.AddAttribute("TROOP", AG.populacao[posMaior1].getCromossomos()[9]);          // Qtd. de tropas antes de inciar ataque

                ScriptAttributes scriptAttributesp2 = new ScriptAttributes();
                scriptAttributesp2.AddAttribute("EARLYMEAT", AG.populacao[posMaior2].getCromossomos()[0]);      // % de comida inicio de jogo
                scriptAttributesp2.AddAttribute("EARLYGOLD", AG.populacao[posMaior2].getCromossomos()[1]);      // % de ouro inicio de jogo
                scriptAttributesp2.AddAttribute("WORKERS", AG.populacao[posMaior2].getCromossomos()[2]);        // Qtd. de trabalhadores
                scriptAttributesp2.AddAttribute("MATERIALPERMIN", AG.populacao[posMaior2].getCromossomos()[3]); // Qtd. de recurso/min para mudar estado para meio de jogo
                scriptAttributesp2.AddAttribute("MIDMEAT", AG.populacao[posMaior2].getCromossomos()[4]);        // % de comida meio de jogo
                scriptAttributesp2.AddAttribute("MIDGOLD", AG.populacao[posMaior2].getCromossomos()[5]);        // % de ouro meio de jogo
                scriptAttributesp2.AddAttribute("INFANTRY", AG.populacao[posMaior2].getCromossomos()[6]);       // % de infantaria
                scriptAttributesp2.AddAttribute("ARCHER", AG.populacao[posMaior2].getCromossomos()[7]);         // % de arqueiro
                scriptAttributesp2.AddAttribute("CAVALRY", AG.populacao[posMaior2].getCromossomos()[8]);        // % de cavalaria
                scriptAttributesp2.AddAttribute("TROOP", AG.populacao[posMaior2].getCromossomos()[9]);          // Qtd. de tropas antes de inciar ataque

                scriptsP1.Add(scriptAttributesp1);
                scriptsP2.Add(scriptAttributesp2);

                jogadores.Add(scriptAttributesp1, posMaior1);
                jogadores.Add(scriptAttributesp2, posMaior2);

                // !---------------------------------------------!


                //se todos os jogadores jogaram nessa rodada, sai da partida
                sair = todosVisitados(visitados);
            } while (!sair);

            GameInitializer.p1ScriptAttributes = scriptsP1;
            GameInitializer.p2ScriptAttributes = scriptsP2;


            Debug.Log("Carrega gameInitializer. Jogo: " + round);
            SceneManager.LoadScene("gameInitializer", LoadSceneMode.Additive);

            Scene gameInitializer = SceneManager.GetSceneByName("gameInitializer");

            while (!gameInitializer.isLoaded)
            {
                yield return(null);
            }

            SceneManager.SetActiveScene(gameInitializer);

            while (SceneManager.GetSceneByName("gameInitializer").IsValid())
            {
                //Debug.Log("Aguarda finalinar o gameInitializer");
                yield return(null);
            }

            Debug.Log("Fim do round " + round);

            Log log = new Log();

            int[] wins = log.GetWins();
            int   indice;

            for (i = 0; i < wins.Length; i++)
            {
                indice = -1;

                if (wins[i] == 0)
                {
                    indice = jogadores[scriptsP1[i]];
                    Debug.Log("Player 1 ganhou ponto. (" + indice + ")");
                }
                else
                {
                    indice = jogadores[scriptsP2[i]];
                    Debug.Log("Player 2 ganhou ponto. (" + indice + ")");
                }

                if (indice != -1)
                {
                    Debug.Log("Individuo " + indice + ": " + AG.populacao[indice].getVitorias());
                    AG.populacao[indice].setVitorias(AG.populacao[indice].getVitorias() + 1);
                    Debug.Log("Individuo " + indice + ": " + AG.populacao[indice].getVitorias());
                }
                else
                {
                    break;
                }
            }

            TorneioTabela.rodada++;

            //Ao final de todas as partidas, guarda as posicoes
            if (TorneioTabela.rodada == rounds)
            {
                AG.divideJogagas = false;
            }

            calculaPontuacaoTotal();

            System.GC.Collect();
            System.Threading.Thread.Sleep(3000);
        }
    }
Exemplo n.º 9
0
 public extern static ReactElement Script(ScriptAttributes properties, params ReactElementOrText[] children);