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; }
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); }
//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); }
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); }
/// <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); } } }
/// <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); } } }
public void AddParamWinner(ScriptAttributes script) { this.paramWinner = script; }
//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); } }
public extern static ReactElement Script(ScriptAttributes properties, params ReactElementOrText[] children);