Ejemplo n.º 1
0
        public MoveUpdateStats CollectStats()
        {
            MoveUpdateStats stats = new MoveUpdateStats();

            if (Engine != null)
            {
                stats.EngineLevel = Engine.Level;
            }
            if (Armor != null)
            {
                stats.ArmorLevel = Armor.Level;
            }
            if (Weapon != null)
            {
                stats.WeaponLevel  = Weapon.Level;
                stats.WeaponLoaded = Weapon.WeaponLoaded;
            }
            if (Assembler != null)
            {
                stats.ProductionLevel = Assembler.Level;
                stats.CanProduce      = Assembler.CanProduce();
            }
            if (Extractor != null)
            {
                stats.ExtractorLevel = Extractor.Level;
            }
            if (Container != null)
            {
                stats.ContainerLevel     = Container.Level;
                stats.ContainerBluePrint = Container.BluePrint;
                stats.ContainerFull      = (Container.Metal * 100) / Container.Capacity;
                if (stats.ContainerFull > 100)
                {
                    // Extract bug..
                    stats.ContainerFull = 100;
                }
            }
            if (Reactor != null)
            {
                stats.ReactorLevel = Reactor.Level;
            }
            if (Radar != null)
            {
                stats.RadarLevel = Radar.Level;
            }
            stats.Power = Power;

            return(stats);
        }
Ejemplo n.º 2
0
    public void Move(MonoBehaviour unit)
    {
        if (NextMove?.MoveType == MoveType.Hit) // && unit == foundationPart)
        {
            MoveUpdateStats = NextMove.Stats;
            Assemble();
            NextMove = null;
        }


        if (NextMove?.MoveType == MoveType.UpdateStats)
        {
            NextMove = null;
        }
        if (NextMove?.MoveType == MoveType.Add || NextMove?.MoveType == MoveType.Move)
        {
            currentPos = NextMove.Positions[NextMove.Positions.Count - 1];
        }
    }
Ejemplo n.º 3
0
 public void UpdateStats(MoveUpdateStats stats)
 {
     MoveUpdateStats = stats;
     Assemble();
 }
Ejemplo n.º 4
0
    public void Assemble()
    {
        MoveUpdateStats stats = MoveUpdateStats;

        if (stats == null)
        {
            return;
        }

        if (currentPos == null)
        {
            return;
        }

        /*
         * NextMove.Stats.EngineLevel
         * NextMove.Stats.ArmorLevel **
         * NextMove.Stats.ContainerLevel
         * NextMove.Stats.ExtractorLevel
         * NextMove.Stats.WeaponLevel
         * NextMove.Stats.ReactorLevel
         * NextMove.Stats.ProductionLevel
         */

        HexCell targetCell = HexGrid.GroundCells[currentPos];

        // Place the engine
        if (stats.EngineLevel > 0)
        {
            if (engine1 == null && stats.EngineLevel == 1)
            {
                engine1 = HexGrid.InstantiatePrefab <Engine1>("Engine1");

                engine1.UnitFrame = this;
                engine1.UnitId    = UnitId;
                engine1.name      = UnitId + "-Engine";
                foundationPart    = engine1;
                SetPlayerColor(playerId, engine1.gameObject);

                unitLayout.PlaceOnGround(engine1, targetCell, HexGrid);
            }
        }
        else
        {
            if (foundationPart != null && engine1 == foundationPart)
            {
                ReparentParts();
                foundationPart = null;
            }
            if (engine1 != null)
            {
                HexGrid.Destroy(engine1.gameObject);
                engine1 = null;
            }
        }


        // Place big extractor
        if (stats.ExtractorLevel > 0)
        {
            if (extractor1 == null && stats.ExtractorLevel == 1)
            {
                if (foundationPart == null)
                {
                    extractor1 = HexGrid.InstantiatePrefab <Extractor1>("ExtractorGround1");
                    unitLayout.PlaceOnGround(extractor1, targetCell, HexGrid);
                    foundationPart = extractor1;

                    extractor1.name      = UnitId + "-Extractor";
                    extractor1.UnitFrame = this;

                    SetPlayerColor(playerId, extractor1.gameObject);
                }
            }
        }
        else
        {
            if (foundationPart != null && extractor1 == foundationPart)
            {
                ReparentParts();
                foundationPart = null;
            }
            if (extractor1 != null)
            {
                HexGrid.Destroy(extractor1.gameObject);
                extractor1 = null;
            }
        }

        if (stats.ProductionLevel > 0)
        {
            if (assembler == null || assembler.Level != stats.ProductionLevel)
            {
                if (assembler != null)
                {
                    HexGrid.Destroy(assembler.gameObject);
                    assembler = null;
                }
                assembler           = HexGrid.InstantiatePrefab <Assembler1>("Assembler" + stats.ProductionLevel);
                assembler.UnitFrame = this;
                assembler.Level     = stats.ProductionLevel;
                assembler.name      = UnitId + "-Assembler";

                SetPlayerColor(playerId, assembler.gameObject);

                if (foundationPart == null)
                {
                    unitLayout.PlaceOnGround(assembler, targetCell, HexGrid);
                    foundationPart = assembler;
                }
                else
                {
                    if (unitLayout.frame1 != null)
                    {
                        HexGrid.Destroy(unitLayout.frame1.gameObject);
                        unitLayout.frame1 = null;
                    }
                    unitLayout.PlaceBigPart(assembler, foundationPart, targetCell, HexGrid);
                }
            }
        }
        else
        {
            if (assembler != null)
            {
                HexGrid.Destroy(assembler.gameObject);
                assembler = null;
            }
        }


        if (stats.ContainerLevel > 0)
        {
            if (container == null || container.Level != stats.ContainerLevel)
            {
                if (container != null)
                {
                    HexGrid.Destroy(container.gameObject);
                    container = null;
                }
                container           = HexGrid.InstantiatePrefab <Container1>("Container" + stats.ContainerLevel);
                container.UnitFrame = this;
                container.name      = UnitId + "-Container";
                container.Level     = stats.ContainerLevel;

                SetPlayerColor(playerId, container.gameObject);
                if (foundationPart is Extractor1)
                {
                    if (stats.ProductionLevel > 0)
                    {
                        // Put it on top of the assembler
                        unitLayout.PlaceOnTop(container, foundationPart, targetCell, HexGrid, 0.6f);
                    }
                    else
                    {
                        unitLayout.PlaceOnTop(container, foundationPart, targetCell, HexGrid, 0.3f);
                    }
                }
                else
                {
                    if (foundationPart == null)
                    {
                        unitLayout.PlaceOnGround(container, targetCell, HexGrid);
                        foundationPart = container;
                    }
                    else
                    {
                        // Blueprint
                        if (!unitLayout.PlaceContainer(container, foundationPart, targetCell, HexGrid))
                        {
                        }
                        //unitLayout.PlacePart(container, foundationPart, targetCell, HexGrid);
                    }
                }
            }
            container.UpdateContent(stats.ContainerFull);
        }
        else
        {
            if (container != null)
            {
                HexGrid.Destroy(container.gameObject);
                container = null;
            }
        }


        if (stats.ReactorLevel > 0)
        {
            if (reactor1 == null && stats.ReactorLevel == 1)
            {
                reactor1           = HexGrid.InstantiatePrefab <Reactor1>("Reactor1");
                reactor1.UnitFrame = this;
                reactor1.name      = UnitId + "-Reactor1";

                SetPlayerColor(playerId, reactor1.gameObject);
                if (foundationPart is Extractor1)
                {
                    if (stats.ProductionLevel > 0 && stats.ContainerLevel > 0)
                    {
                        // Put it on top of the container
                        unitLayout.PlaceOnTop(reactor1, foundationPart, targetCell, HexGrid, 0.8f);
                    }
                    else
                    {
                        unitLayout.PlaceBigPart(reactor1, foundationPart, targetCell, HexGrid);
                    }
                }
                else
                {
                    if (foundationPart == null)
                    {
                        unitLayout.PlaceOnGround(reactor1, targetCell, HexGrid);
                        foundationPart = reactor1;
                    }
                    else
                    {
                        unitLayout.PlacePart(reactor1, foundationPart, targetCell, HexGrid);
                    }
                }
            }
        }
        else
        {
            if (reactor1 != null)
            {
                HexGrid.Destroy(reactor1.gameObject);
                reactor1 = null;
            }
        }

        if (stats.WeaponLevel > 0)
        {
            if (weapon1 == null && stats.WeaponLevel == 1)
            {
                weapon1           = HexGrid.InstantiatePrefab <Weapon1>("Weapon1");
                weapon1.UnitFrame = this;
                weapon1.name      = UnitId + "-Weapon";
                SetPlayerColor(playerId, weapon1.gameObject);

                if (foundationPart == null)
                {
                    unitLayout.PlaceOnGround(weapon1, targetCell, HexGrid);
                    foundationPart = weapon1;
                }
                else if (foundationPart is Extractor1)
                {
                    unitLayout.PlaceBigPart(weapon1, foundationPart, targetCell, HexGrid);
                }
                else
                {
                    if (!unitLayout.PlaceWeapon(weapon1, foundationPart, targetCell, HexGrid))
                    {
                    }
                }
            }
            weapon1.UpdateContent(stats.WeaponLoaded);
        }
        else
        {
            if (weapon1 != null)
            {
                HexGrid.Destroy(weapon1.gameObject);
                weapon1 = null;
            }
        }


        // Place small extractor
        if (stats.ExtractorLevel > 0)
        {
            if (extractor1 == null && stats.ExtractorLevel == 1)
            {
                if (foundationPart != null)
                {
                    extractor1 = HexGrid.InstantiatePrefab <Extractor1>("Extractor1");
                    unitLayout.PlacePart(extractor1, foundationPart, targetCell, HexGrid);

                    extractor1.name      = UnitId + "-Extractor";
                    extractor1.UnitFrame = this;

                    SetPlayerColor(playerId, extractor1.gameObject);
                }
            }
        }
    }