public void SetState(TileGroupState tileGroupState) { containerObject.position = tileGroupState.globalPosition; isExplored = tileGroupState.isExplored; foreach (Tile tile in tileList) { SingleTileState sts = (from t in tileGroupState.tileStates where t.tileGUID == tile.hexTile.GUID select t).FirstOr(null); if (sts != null) { tile.SetState(sts); } } GenerateGroupCenter(); }
public TileState GetState() { List <TileGroupState> tgStates = new List <TileGroupState>(); List <Guid> dynamicChapters = new List <Guid>(); foreach (TileGroup tg in tileGroupList) { TileGroupState tgState = new TileGroupState(); tgState.globalPosition = tg.containerObject.position; tgState.isExplored = tg.isExplored; tgState.guid = tg.GUID; if (tg.GetChapter().isDynamic) { dynamicChapters.Add(tg.GUID); } List <SingleTileState> singleTileState = new List <SingleTileState>(); foreach (Tile t in tg.tileList) { SingleTileState state = new SingleTileState() { isActive = t.gameObject.activeInHierarchy, tileGUID = t.hexTile.GUID, tokenTriggerList = t.tokenTriggerList, isExplored = t.isExplored, globalPosition = t.transform.position, globalParentPosition = t.transform.parent.position, globalParentYRotation = t.transform.parent.rotation.eulerAngles.y, tokenStates = t.tokenStates }; singleTileState.Add(state); } tgState.tileStates = singleTileState; tgStates.Add(tgState); } return(new TileState() { activatedDynamicChapters = dynamicChapters, tileGroupStates = tgStates }); }
public void SetState(SingleTileState singleTileState) { isExplored = singleTileState.isExplored; if (isExplored) { if (singleTileState.isActive) { exploreToken.gameObject.SetActive(false); } DOTween.To(() => 0, x => { sepiaValue = x; meshRenderer.material.SetFloat("_sepiaValue", sepiaValue); }, 0, 2f); } else { if (singleTileState.isActive) { RevealExplorationToken(); } else { exploreToken.gameObject.SetActive(false); exploreToken.position = exploreToken.position.Y(2f); } DOTween.To(() => 1, x => { sepiaValue = x; meshRenderer.material.SetFloat("_sepiaValue", sepiaValue); }, 1, 2f); } ///RESTORE TILE STATE transform.parent.position = singleTileState.globalParentPosition; transform.parent.rotation = Quaternion.Euler(0, singleTileState.globalParentYRotation, 0); transform.position = singleTileState.globalPosition; tokenTriggerList = singleTileState.tokenTriggerList; tokenStates = singleTileState.tokenStates; gameObject.SetActive(singleTileState.isActive); ///RESTORE TOKENS //clear tokenstates list and remove all tokens on tile tokenStates = singleTileState.tokenStates; //get all token on this tile Transform[] tf = GetChildren("Token(Clone)"); var remove = tf.Select(x => x.gameObject); foreach (var rmd in remove) { Destroy(rmd.gameObject); } //recreate tokens foreach (TokenState ts in singleTileState.tokenStates) { CreateToken(ts); } //remove any tokens that are created from replaced event //only important for quick loading //var replacedMDs = tf.Where( x => x.GetComponent<MetaData>().isCreatedFromReplaced ); //foreach ( var rmd in replacedMDs ) // Destroy( rmd.gameObject ); //restore token states /*for ( int i = 0; i < tf.Length; i++ ) * { * //token on tile * MetaData md = tf[i].GetComponent<MetaData>(); * //find matching token state to token on tile * TokenState token = ( from mjson in singleTileState.tokenStates * where mjson.metaData.GUID == md.GUID || mjson.metaData.interactionName == md.interactionName * select mjson ).FirstOr( null ); * if ( token != null ) * { * md.gameObject.SetActive( token.isActive ); * md.transform.localScale = Vector3.one; * md.transform.localPosition = token.localPosition; * md.triggerName = token.metaData.triggerName; * md.interactionName = token.metaData.interactionName; * md.triggeredByName = token.metaData.triggeredByName; * md.tokenType = token.metaData.tokenType; * md.offset = token.metaData.offset; * md.isRandom = token.metaData.isRandom; * md.tileID = token.metaData.tileID; * md.hasBeenReplaced = token.metaData.hasBeenReplaced; * //md.isActive = token.metaData.isActive; * } * }*/ }