Example #1
0
        public void Enter(List <object> GenData = null)
        {
            //GameManager.I.ChangeGameState (new GameStates.ModularGameState()); // change to modular state
            System             = GenData.Find <ModularBuildingSystem> (true);       // create link to Modular building system
            ScopedObject       = GenData.Find <ModularPlacableObject>(true);        // link to scoped piece
            OnPlacedCallback   = GenData.Find <Delegates.GenericDataCallbak>(true); // set on place callback
            OnCanceledCallback = GenData.Find <System.Action <object[]> >(true);    // set on cancle callback
            CanPlaceCallback   = GenData.Find <System.Func <ModularPlacableObject, bool> >(true);

            // init extra data
            LocalVisualGrid = (LocalGridSystem)GenData.Find <LocalGridSystem>();            // set cached local visual grid

            if ((object)GenData.FindObject <PlaceObjectCache> () != null)
            {
                Cache = GenData.Find <PlaceObjectCache> ();                // set cache
            }
            else
            {
                InitDefaultValues();
            }

            Indicator = (Indicator != null)?Indicator:GameManager.I.Utils.NewLineIndicator(Vector3.zero, Vector3.zero); // set indicator if is null

            Init();                                                                                                     // initialize

            // init detail
            ScopedObject.SetCollidersActive(false, true);
            DetailSettings.OnValuesChanged = OnValueChanged;
            UpdateTransform();
        }
        public void PlaceNewModularPiece(ModularPieceData Piece, Vector3 Scale, System.Func <ModularPlacableObject, bool> CanPlace, Vector3 RotationOffset = default(Vector3), Vector3 InitRotation = default(Vector3), Vector3 InitPosition = default(Vector3), object[] ExtraData = default(object[]), bool Interrupt = false)
        {
            ModularPlacableObject NewPlacableObject = (ModularPlacableObject)InitStoreItem(Piece, Scale, RotationOffset, InitRotation, InitPosition);

            PlaceModularPlacable(NewPlacableObject, (object[] data) => {
                // on object is placed
                ModularPiece PlacedPiece  = (ModularPiece)data.Find <ModularPiece>();                                                                  // get modular piece
                LocalGridSystem LocalGrid = (LocalGridSystem)data.Find <LocalGridSystem>();                                                            // get last local grid
                PlacePlacableObject.PlaceObjectCache Cache = (PlacePlacableObject.PlaceObjectCache)data.Find <PlacePlacableObject.PlaceObjectCache>(); // get last state cache
                PlacedPiece.InitializeEditable();                                                                                                      // initialize editable modular piece
                PlacedPiece.OnPlaced();                                                                                                                // call on placed callback

                // Economy
                int Price = GameManager.I.Economy.EvaluateModularPiece(Piece);
                GameManager.I.Economy.RemoveMoney(Price);
                GameManager.I.Economy.SpawnMoneyIndicator(PlacedPiece.transform.position, Price);

                // add piece to set
                GameManager.I.Modular.ScopedSet.AddModularPiece(PlacedPiece);

                // place new modular piece with last rotation
                PlaceNewModularPiece(Piece, Scale, CanPlace, PlacedPiece.RotationOffset.eulerAngles, PlacedPiece.NoneOffsettedRotation.eulerAngles, PlacedPiece.transform.position, new object[] { LocalGrid, Cache });
            }, CanPlace, (Data) => {
                // on canceled
                GameManager.I.Modular.ScopedSet.DeregisterPlacingObject(); // de register object
                ModularPlacableObject PlacableObject = (ModularPlacableObject)Data.Find <ModularPlacableObject>();
                PlacableObject.Destroy();                                  // destroy on cancle

                Statemachine.changeState(new ModularSpectate(), this);
            }, SnapTypes.Default, ExtraData, Interrupt);                              // place new created store modular piece
            GameManager.I.Modular.ScopedSet.RegisterPlacingObject(NewPlacableObject); // register new placable object to be placed inside building
        }
Example #3
0
 // visual grid
 private void InitVisualGrid()
 {
     if (LocalVisualGrid == null)                                                                                                                                                 // only init if not already set
     {
         LocalVisualGrid             = GameObject.Instantiate(GameManager.I.Modular.LocalGridPrefab, Vector3.zero, Quaternion.identity).GetComponent <LocalGridSystem> ().Hide(); // initialize local grid and hide afterwards
         LocalVisualGrid.GridSpacing = ScopedObject.Scale;
     }
 }