示例#1
0
 public TechTree(TechTree baseTree)
 {
     root = new List <TechBranch>();
     root.AddRange(baseTree.root);
     unlockedBranches = new List <int>();
     SetInitialUnlockedBranches();
 }
示例#2
0
 void INotifyCreated.Created(Actor self)
 {
     health   = self.TraitOrDefault <IHealth>();
     layer    = self.World.WorldActor.TraitOrDefault <BuildableTerrainLayer>();
     bi       = self.World.WorldActor.Trait <BuildingInfluence>();
     techTree = self.Owner.PlayerActor.TraitOrDefault <TechTree>();
 }
示例#3
0
        public override void Initialize()
        {
            var highDensityAutomation = TechTree.CreateTech(TECH_HIGHDENSITYAUTOMATION);

            TechTree.AddRequirement(highDensityAutomation, TechTree.GetTech("ParallelAutomation"));
            TechTree.AddRequirement(highDensityAutomation, TechTree.GetTech("DupeTrafficControl"));
        }
示例#4
0
    // Update is called once per frame
    void Update()
    {
        if (Game.GetSelected() != null && !Game.GetSelected().Used())
        {
            canvas.enabled = true;
        }
        else
        {
            canvas.enabled = false;
        }

        if (TechTree.researchCompleted)
        {
            foreach (Transform child in content.transform)
            {
                GameObject.Destroy(child.gameObject);
            }

            foreach (Tower t in TechTree.GetAvailable())
            {
                GameObject           button = Instantiate(buttonPrefab);
                PurchaseButtonScript pbs    = button.GetComponent <PurchaseButtonScript>();
                pbs.tower = t;

                button.transform.SetParent(content.transform);
            }

            TechTree.researchCompleted = false;
        }
    }
    public static TechTree LoadTechTree()
    {
        TextAsset textAsset = (TextAsset)Resources.Load("TechTree");

        XmlSerializer serializer = new XmlSerializer(typeof(TechTree));
        TechTree      test       = serializer.Deserialize(new StringReader(textAsset.text)) as TechTree;

        return(test);

        /*XmlSerializer serializer = new XmlSerializer(typeof(TechTree));
         * FileStream stream = new FileStream(Application.persistentDataPath + "/techtree.xml", FileMode.Create);
         *
         * TechTree test = new TechTree();
         *
         * TechBranch root = new TechBranch();
         * root.id = 0;
         * root.name = "test0";
         * root.costTechPoints = 20;
         *
         * TechBranch tb = new TechBranch();
         * tb.id = 1;
         * tb.name = "child";
         * tb.costTechPoints = 40;
         *
         * root.children.Add(tb);
         *
         * test.tree.Add(root);
         * test.tree.Add(tb);
         *
         * serializer.Serialize(stream, test);
         * stream.Close();*/
    }
示例#6
0
        protected override void Apply(AttributeLoader loader, object wrapperObj)
        {
            if (!(wrapperObj is FactionAttributesWrapper w))
            {
                throw new System.InvalidCastException();
            }

            loader.ApplyPPatch(FactionName, () => w.FactionName);
            loader.ApplyPPatch(ID, () => w.ID);
            loader.ApplyPPatch(VOName, () => w.VOName);
            loader.ApplyPPatch(VOAssetBundle, () => w.VOAssetBundle);
            loader.ApplyPPatch(MusicTrigger, () => w.MusicTrigger);
            loader.ApplyPPatch(ScaleWithDynamicDifficulty, () => w.ScaleWithDynamicDifficulty);

            if (TechTree != null)
            {
                using (loader.logger.BeginScope($"TechTree:"))
                {
                    var w2 = new TechTreeAttributesWrapper(w.TechTree);
                    TechTree.Apply(loader, w2, null);
                    w.TechTree = w2;
                }
            }

            if (GlobalBuffs != null)
            {
                var l = w.GlobalBuffs?.Select(x => new UnitTypeBuffWrapper(x)).ToList() ?? new List <UnitTypeBuffWrapper>();
                loader.ApplyLPatch(GlobalBuffs, l, () => new UnitTypeBuffWrapper(), nameof(UnitTypeBuff));
                w.GlobalBuffs = l.Where(x => x != null).ToArray();
            }
        }
示例#7
0
    // Use this for initialization
    void Start()
    {
        Tiles tiles = new Tiles(tilePrefab);

        Tile center = tiles.GetTile(Tiles.SIZE / 2, Tiles.SIZE / 2);

        GameObject tower = Instantiate(towerPrefab, new Vector3(Tiles.SIZE / 2 * 15, 0f, Tiles.SIZE / 2 * 15), towerPrefab.transform.rotation);

        Tower baseTower = new Tower(0, "Base", 100, 100, 0);

        TowerInstance towerInstance = new TowerInstance(baseTower, center, tower);

        TowerScript script = tower.GetComponent <TowerScript>();

        script.tower = towerInstance;
        script.tile  = center;

        center.SetUsed(true);
        center.Hold(towerInstance);

        TechTree.AddTower(false, new AttackTower(10, "Basic Tower", 10, 0, 35, 5, 10));
        TechTree.AddTower(false, new ResourceTower(10, "Small Tree", 10, 10, 200, 1));
        TechTree.AddTower(false, new UpgradeTower(25, "Upgrade Tower", 35, 0, 25));

        TechTree.AddTower(true, new AttackTower(25, "Better Tower", 15, 0, 75, 10, 15));
    }
示例#8
0
    private IEnumerator InvasionCoroutine()
    {
        bool victory = false;
        bool defeat  = false;

        while (!victory && !defeat)
        {
            victory = BacteriasManager.singleton.livingBacteriasCount == 0;
            defeat  = PlayerCore.singleton.dead;
            yield return(null);
        }

        if (victory && defeat)
        {
            Debug.Log("Draw !");
        }
        else if (victory)
        {
            Debug.Log("Victory !");
        }
        else
        {
            Debug.Log("Defeat !");
        }

        if (victory)
        {
            PlayerCore.singleton.RegenerateAfterWave();
            m_playerResources *= 1 + m_cellularDivisionFactor * TechTree.TechRank(TechID.Adapt_CellDivision);
        }

        SetGamePhase(GamePhase.Preparation);
    }
示例#9
0
    void Start()
    {
        Instance = this;
        Nodes = new List<TechNode>();

        ModifyingTree = true;
    }
示例#10
0
        protected override void Created(Actor self)
        {
            // Special case handling is required for the Player actor.
            // Created is called before Player.PlayerActor is assigned,
            // so we must query other player traits from self, knowing that
            // it refers to the same actor as self.Owner.PlayerActor
            var playerActor = self.Info.Name == "player" ? self : self.Owner.PlayerActor;

            techTree = playerActor.Trait <TechTree>();

            var validFactions = self.TraitOrDefault <ValidFactions>();

            // if ValidFactions trait is present and the current faction is not listed in it, switch the faction to a valid one if a player of that faction exists in the game
            if (
                validFactions != null &&
                Info.Factions.Any() &&
                !validFactions.Info.Factions.Contains(faction))
            {
                var players = self.World.Players.Where(p => !p.NonCombatant && p.Playable);

                foreach (var p in players)
                {
                    if (validFactions.Info.Factions.Contains(p.Faction.InternalName))
                    {
                        faction = p.Faction.InternalName;
                        break;
                    }
                }
            }

            Update();

            base.Created(self);
        }
示例#11
0
 public TechTreeWrapper(TechTree other)
 {
     Tiers          = other.Tiers?.ToArray();
     Upgrades       = other.Upgrades?.ToArray();
     TechTreeName   = other.TechTreeName;
     IconSpriteName = other.IconSpriteName;
 }
示例#12
0
    void Start()
    {
        Instance = this;
        Nodes    = new List <TechNode>();

        ModifyingTree = true;
    }
示例#13
0
 public GameDefinition(int complexity, int seed, TechTree techTree, Battlefield battlefield, Objective[] objectives)
 {
     Complexity  = complexity;
     Seed        = seed;
     TechTree    = techTree;
     Battlefield = battlefield;
     Objectives  = objectives;
 }
示例#14
0
        public Research(StrategyGame game)
        {
            InitializeComponent();

            _game = game;
            _tree = game.TechTree[0];
            RefreshItems();
        }
示例#15
0
    void Start()
    {
        tree = aihandler.player.techTree;

        aibuilding = aihandler.aibuilding;
        airesource = aihandler.airesource;
        InvokeRepeating("Recalculate", 7 + Random.value * 3, 10);
    }
示例#16
0
		void INotifyCreated.Created(Actor self)
		{
			developerMode = self.Owner.PlayerActor.Trait<DeveloperMode>();
			techTree = self.Owner.PlayerActor.Trait<TechTree>();

			productionTraits = self.TraitsImplementing<BuilderUnit>().ToArray();
			CacheProducibles(self.Owner.PlayerActor);
		}
示例#17
0
    protected override void OnDealDamage(Unit unit, float damagesDealt)
    {
        base.OnDealDamage(unit, damagesDealt);

        if (TechTree.TechRank(TechID.Evol_Defense) > 0)
        {
            RecoverHealth(damagesDealt * TechTree.TechRank(TechID.Evol_Defense) * m_techLeechFactor);
        }
    }
示例#18
0
        public static void Translate(Vote vote, string raw)
        {
            Dictionary <TechTeam, ResearchFrame> parsedVote = new Dictionary <TechTeam, ResearchFrame>();

            /* Assumes Federation will be first Entity listed, and the tech tree used by the Federation the first tech tree listed.
             * Otherwise the Entity needs to be passed in or defined in a static member somewhere, and the Entity needs to store the
             * tech tree it is using. */

            TechTree usedTree = Master.MasterTreeList[0];
            Entity   votedOn  = Master.MasterEntityList[0];

            using (var sr = new System.IO.StringReader(raw))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    if (line.Contains(":"))
                    {
                        string[] split = line.Split(':');
                        int      start = split[0].LastIndexOf(']') + 1;
                        string   team  = split[0].Substring(start, split[0].Length - start);
                        string   newProject;
                        if (split[1].Contains("->"))
                        {
                            string[] projects = split[1].Split(new[] { "->" }, StringSplitOptions.None);
                            newProject = projects[1];
                        }
                        else
                        {
                            newProject = split[1];
                        }
                        team.Trim();
                        newProject.Trim();
                        TechTeam      techTeam = votedOn.Teams.Find(tt => tt.IdTag == team);
                        ResearchFrame frame    = usedTree.Find(newProject);
                        if (techTeam != null && frame != null)
                        {
                            parsedVote.Add(techTeam, frame);
                        }
                    }
                    else if (line.Contains("[BOOST]"))
                    {
                        int      start = line.LastIndexOf(']') + 1;
                        string[] teams = line.Substring(start, line.Length - start).Split(',');
                        foreach (String team in teams)
                        {
                            team.Trim();
                            TechTeam techTeam = votedOn.Teams.Find(tt => tt.IdTag == team);
                            if (techTeam != null)
                            {
                                techTeam.AssignedBoosts += 1;
                            }
                        }
                    }
                }
            }
        }
示例#19
0
    public static TechTree FindTechTree()
    {
        if (!_techTree)
        {
            _techTree = GameObject.Find("TechTree").GetComponent <TechTree>();
        }

        return(_techTree);
    }
        public void OnOwnerChanged(Actor self, Player oldOwner, Player newOwner)
        {
            techTree = newOwner.PlayerActor.Trait <TechTree>();

            if (Info.ResetOnOwnerChange)
            {
                faction = newOwner.Faction.InternalName;
                Reset(self);
            }
        }
示例#21
0
 public static void Cleanup(ProgressFrame frame, TechTree researcher)
 {
     // If all Lines are complete, we can mark the frame itself as complete.
     if (frame.Lines.All(x => x.Progress >= x.Line.RequiredResearch))
     {
         frame.IsComplete   = true;
         frame.IsActive     = false;
         frame.IsAccessible = false;
     }
 }
示例#22
0
        //==============================================================================
        // applyEffects
        //==============================================================================
        public void applyEffects(TechTree techTree)
        {
            long count = mTechEffects.Count;

            for (int i = 0; i < count; i++)
            {
                TechEffect techEffect = mTechEffects[i];
                techEffect.apply(techTree);
            }
        }
示例#23
0
    private void Awake()
    {
        m_previousNode = transform.parent.GetComponent <TechNode>();
        m_root         = GetComponentInParent <TechTree>();
        m_material     = GetComponent <Renderer>().material;

        if (m_previousNode == null)
        {
            InitDepth();
        }
    }
示例#24
0
 private void UpdateBuffs()
 {
     m_staminaBuff      = TechTree.TechRank(TechID.Fight_Stamina) * m_staminaBuffFactor;
     m_strengthBuff     = TechTree.TechRank(TechID.Fight_Strength) * m_strengthBuffFactor;
     m_speedBuff        = TechTree.TechRank(TechID.Fight_Speed) * m_speedBuffFactor;
     m_regenerationBuff = TechTree.TechRank(TechID.Fight_Regeneration) * m_regenerationBuffFactor;
     m_armorBuff        = TechTree.TechRank(TechID.Fight_Armor) * m_armorBuffFactor;
     m_cooperationBuff  = TechTree.TechRank(TechID.Fight_Cooperation) * m_cooperationBuffFactor;
     m_leechBuff        = TechTree.TechRank(TechID.Fight_Leech) * m_leechBuffFactor;
     m_berserkBuff      = TechTree.TechRank(TechID.Fight_Berserk) * m_berserkBuffFactor;
     m_immortalBuff     = TechTree.TechRank(TechID.Fight_Immortals) * m_immortalBuffFactor;
 }
示例#25
0
        public override void Initialize()
        {
            // create techs
            var techChemSynth = TechTree.CreateTech(Techs.CHEMICAL_SYNTHESIS);

            TechTree.AddRequirement(techChemSynth, TechTree.GetTech("Plastics"));


            // var techCarpentry1 = TechTree.CreateTech(TECH_CARPENTRY1);
            // TechTree.AddRequirement(techCarpentry1, TechTree.GetTech("BasicRefinement"));
            // TechTree.AddRequirement(techCarpentry1, TechTree.GetTech("Agriculture"));
        }
示例#26
0
        protected override void Created(Actor self)
        {
            // Special case handling is required for the Player actor.
            // Created is called before Player.PlayerActor is assigned,
            // so we must query other player traits from self, knowing that
            // it refers to the same actor as self.Owner.PlayerActor
            var playerActor = self.Info.Name == "player" ? self : self.Owner.PlayerActor;

            techTree = playerActor.Trait <TechTree>();

            base.Created(self);
        }
示例#27
0
        public TreeBuildingView(TechTree techTree, BuildingType buildingType)
            : base(buildingType)
        {
            Builds = techTree.Units
                     .Where(kvp => buildingType.Builds.Contains(kvp.Key))
                     .Select(kvp => new TreeUnitView(kvp.Value))
                     .ToArray();

            Researches = techTree.Research
                         .Where(kvp => kvp.Value.PerformedAt == buildingType)
                         .Select(kvp => new ResearchView(kvp.Value))
                         .ToArray();
        }
        public TechNodeViewModel AddNode(Point pos)
        {
            var node = new TechNode(GenerateNodeName())
            {
                Pos = pos
            };
            var nodeViewModel = new TechNodeViewModel {
                TechNode = node
            };

            TechTree.Add(nodeViewModel);
            return(nodeViewModel);
        }
示例#29
0
 protected virtual void Start()
 {
     buildSpaceRend = buildSpace.GetComponent <Renderer> ();
     SelectionUnits = new List <Unit> ();
     AddStartResourceLimits();
     AddStartResources();
     if (isServer && !human && !mother)
     {
         techTree        = (TechTree)Instantiate(ResourceManager.GetTechTree(clan), transform.position, transform.rotation);
         techTree.player = this;
         InitSpawning();
     }
 }
示例#30
0
    protected override void OnDie(Unit killer)
    {
        base.OnDie(killer);

        float bonusFactor = 1;

        if (TechTree.TechMaxed(TechID.Evol_NoWaste) && (killer == PlayerCore.singleton))
        {
            bonusFactor = 2;
        }

        GameManager.singleton.AddDeadBacteriaResourcesValue(resourcesValue * bonusFactor);
    }
示例#31
0
        public Research(TechTree tree, int[] unlockedTechIds, int currency)
        {
            InitializeComponent();
            FormBorderStyle  = FormBorderStyle.FixedDialog;
            MaximizeBox      = false;
            OkButton.Visible = CancelSetButton.Visible = CurrencyPoints.Visible = CurrencyTitle.Visible = true;

            _game               = null;
            _tree               = tree;
            Currency            = currency;
            CurrencyPoints.Text = $"{Currency}";
            RefreshItems();
        }
示例#32
0
 void Awake()
 {
     _techTree = this;
 }
示例#33
0
 public CanPowerDown(ActorInitializer init)
 {
     PowerManager = init.self.Owner.PlayerActor.Trait<PowerManager>();
     TechTree = init.self.Owner.PlayerActor.Trait<TechTree>();
     normalPower = init.self.Info.Traits.Get<BuildingInfo>().Power;
 }
示例#34
0
 public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner)
 {
     PowerManager = newOwner.PlayerActor.Trait<PowerManager>();
     TechTree = newOwner.PlayerActor.Trait<TechTree>();
 }