/// <summary> /// Import a .frt file. /// </summary> /// <param name="ctx"></param> public override void OnImportAsset(AssetImportContext ctx) { InitializeDictionaries(); FoxLib.Tpp.RouteSet.RouteSet routeSet = null; using (var reader = new BinaryReader(new FileStream(ctx.assetPath, FileMode.Open), FoxLib.Tpp.RouteSet.getEncoding())) { Action <int> skipBytes = numberOfBytes => SkipBytes(reader, numberOfBytes); var readFunctions = new FoxLib.Tpp.RouteSet.ReadFunctions(reader.ReadSingle, reader.ReadUInt16, reader.ReadUInt32, reader.ReadInt32, reader.ReadBytes, skipBytes); routeSet = FoxLib.Tpp.RouteSet.Read(readFunctions); } var getRouteName = routeNameHashManager.MakeUnhashFunc(); var getEventTypeName = eventTypeHashManager.MakeUnhashFunc(); var eventIdGenerator = new EventIdGenerator(); EventFactory.GenerateEventNameDelegate generateEventName = eventType => GenerateEventName(eventType, eventIdGenerator); var buildNodeEvent = EventFactory.CreateNodeEventFactory(getEventTypeName, generateEventName); var buildEdgeEvent = EventFactory.CreateEdgeEventFactory(getEventTypeName, generateEventName); var buildNode = NodeFactory.CreateFactory(buildNodeEvent, buildEdgeEvent); var buildRoute = RouteFactory.CreateFactory(buildNode, getRouteName, GenerateNodeName); var buildRouteSet = RouteSetFactory.CreateFactory(buildRoute); var routeSetGameObject = buildRouteSet.Invoke(routeSet, Path.GetFileNameWithoutExtension(ctx.assetPath)); routeSetGameObject.IsReadOnly = true; ctx.AddObjectToAsset(routeSetGameObject.name, routeSetGameObject.gameObject); ctx.SetMainObject(routeSetGameObject.gameObject); }
/// <summary> /// Create a RouteSet. /// </summary> /// <param name="data">Parameters of the RouteSet to construct.</param> /// <param name="createRoute">Function to create a Route.</param> /// <returns>The constructed RouteSet.</returns> private static FoxLib.Tpp.RouteSet.RouteSet Create(RouteSet data, CreateRouteDelegate createRoute) { var routes = from route in data.Routes select createRoute(route); var routeset = new FoxLib.Tpp.RouteSet.RouteSet(routes.ToArray()); return(routeset); }
/// <summary> /// Create a RouteSet. /// </summary> /// <param name="data">Parameters of the RouteSet to create.</param> /// <param name="name">Name of the RouteSet to create.</param> /// <param name="createRoute">Function to create a Route.</param> /// <returns>The constructed RouteSet.</returns> private static RouteSet Create(FoxLib.Tpp.RouteSet.RouteSet data, string name, CreateRouteDelegate createRoute) { var gameObject = new GameObject(name); var routeSetComponent = gameObject.AddComponent <RouteSet>(); routeSetComponent.Routes = (from route in data.Routes select createRoute(route, routeSetComponent)) .ToList(); foreach (var routeGameObject in routeSetComponent.Routes) { routeGameObject.transform.SetParent(gameObject.transform); } return(routeSetComponent); }