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 }
// 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; } }