# Step 5 - Timeline

Here is the timeline.json template that is to be used for filling the scene requirement specifications.

```json
{
	
     "animate_trigSync":{
                        "tsyncid":"",
						"tsOntrigger":"true", 
						"SyncObjList":[ ], 
						"tSyncNote":""
		    },
      "animate_nontrigSync":{
						"ntsyncid":"",
                        "ntsOntrigger":"false", "ntSyncObjList":[ ], "ntSyncNote":""
		    },
      "animate_trigAsync":{
						"tasyncid":"",
                        "taOntrigger":"true", "tAsyncObjList":[ ], "tAsyncNote":""
		    },
      "animate_nontrigAsync":{
						"ntasyncid":"",
                        "ntaOntrigger":"false", "ntAsyncObjList":[ ], "ntAsyncNote":""
		    },

	    
	   "routine": [     {  "routeid":"",    "starttime":"",   "endtime":"",  "order":[] }]
			
	   
	  
}
```

Here is the timelinevalidator.json with details about each specification along with its usage.

```json
{
   "tsyncid":{
     "root": "animate_trigSync",
      "req":"mandatory",
      "typeof":"number",
      "repeat":"notallow",
      "%comment%":"Unique Identifier for animating scene synchronously based on a trigger"
   },
  "tsOntrigger":{
     "root": "animate_trigSync",
      "req":"optional",
      "typeof":"boolean",
     "repeat":"notallow",
      "%comment%":"True or false flag if this is a triggered animation based an action"
   },
   "SyncObjList":{
     "root": "animate_trigSync",
      "req":"optional",
      "typeof":"object",
      "repeat":"notallow",
      "%comment%":"List of objects are animated in a timeline that are triggered Synchronously"
   },
  "tSyncNote":{
     "root": "animate_trigSync",
      "req":"optional",
      "typeof":"string",
     "repeat":"notallow",
      "%comment%":"place holder for additional notes for Sync object"
   },
  
    "ntsyncid":{
     "root": "animate_nontrigSync",
      "req":"mandatory",
      "typeof":"number",
       "repeat":"notallow",
      "%comment%":"Unique Identifier for animating scene synchronously based on a non trigger"
   },
  "ntsOntrigger":{
     "root": "animate_nontrigSync",
      "req":"optional",
      "typeof":"boolean",
     "repeat":"notallow",
      "%comment%":"True or false flag if this is a non triggered animation based an action"
   },
   "ntSyncObjList":{
     "root": "animate_nontrigSync",
      "req":"optional",
      "typeof":"object",
      "repeat":"notallow",
      "%comment%":"List of objects are animated in a timeline that are non triggered ASynchronously"
   },
  "ntSyncNote":{
     "root": "animate_nontrigSync",
      "req":"optional",
      "typeof":"string",
     "repeat":"notallow",
      "%comment%":"place holder for additional notes for Sync object"
   },
  
  
 
     "tasyncid":{
     "root": "animate_trigAsync",
      "req":"mandatory",
      "typeof":"number",
        "repeat":"notallow",
      "%comment%":"Unique Identifier for animating scene asynchronously based on a trigger"
   },
  "taOntrigger":{
     "root": "animate_trigAsync",
      "req":"optional",
      "typeof":"boolean",
     "repeat":"notallow",
      "%comment%":"True or false flag if this is a triggered animation based an action"
   },
   "tAsyncObjList":{
     "root": "animate_trigAsync",
      "req":"optional",
      "typeof":"object",
      "repeat":"notallow",
      "%comment%":"List of objects are animated in a timeline that are triggered ASynchronously"
   },
  "tAsyncNote":{
     "root": "animate_trigAsync",
      "req":"optional",
      "typeof":"string",
     "repeat":"notallow",
      "%comment%":"place holder for additional notes for ASync object"
   },
  
    "ntasyncid":{
     "root": "animate_nontrigAsync",
      "req":"mandatory",
      "typeof":"number",
       "repeat":"notallow",
      "%comment%":"Unique Identifier for animating scene asynchronously based on a non trigger"
   },
  "ntaOntrigger":{
     "root": "animate_nontrigAsync",
      "req":"optional",
      "typeof":"boolean",
     "repeat":"notallow",
      "%comment%":"True or false flag if this is a non triggered animation based an action"
   },
   "ntAsyncObjList":{
     "root": "animate_nontrigAsync",
      "req":"optional",
      "typeof":"object",
      "repeat":"notallow",
      "%comment%":"List of objects are animated in a timeline that are non triggered ASynchronously"
   },
  "ntAsyncNote":{
     "root": "animate_nontrigAsync",
      "req":"optional",
      "typeof":"string",
     "repeat":"notallow",
      "%comment%":"place holder for additional notes for ASync object"
   },
   
   "routine":{
      "repeat":"notallow",
      "req":"mandatory",
     "typeof":"object",
       "%comment%":"To mention a repeated routine of timeline actions"
   },
   
  
  "routeid":{
    "root": "routine",
    "req":"mandatory",
    "typeof":"number",
     "repeat":"allow",
     "%comment%":"Unique identifier of a routine"
    
  },
   "starttime":{
    "root": "routine",
    "req":"optional",
    "typeof":"string",
      "repeat":"allow",
     "%comment%":"Start Timestamps of routine"
    
  },
   "endtime":{
    "root": "routine",
    "req":"optional",
    "typeof":"string",
      "repeat":"allow",
     "%comment%":"End Timestamps of routine"
    
  },
    "order":{
    "root": "routine",
    "req":"optional",
    "typeof":"object",
       "repeat":"allow",
     "%comment%":"Order of items in a routine, mention the routine ids in a sequence to understand the order of events."
    
  }
  
  
}


```

Here is a sample timeline.json file for a Bowling Alley VR Scene.

```json
{
	
    "animate_trigSync":{
                       "tsyncid":21,
                       "tsOntrigger":true, 
                       "SyncObjList":[  ], 
                       "tSyncNote":"this statement is blank"
           },
     "animate_nontrigSync":{
                       "ntsyncid":22,
                       "ntsOntrigger":false, "ntSyncObjList":[ ], "ntSyncNote":"this statement is blank"
           },
     "animate_trigAsync":{
                       "tasyncid":23,
                       "taOntrigger":true, "tAsyncObjList":["_pinsetter1","_pinsetter2","_pinsetter3",
               "_pinsetter4","_pinsetter5","_pinsetter6",
               "_pinsetter7","_pinsetter8","_pinsetter9",
               "_pinsetter10" ], "tAsyncNote":"All these change their state unpon trigger by ball"
           },
     "animate_nontrigAsync":{
                       "ntasyncid":24,
                       "ntaOntrigger":false, "ntAsyncObjList":[ "_scoreboard", "_floor" ], "ntAsyncNote":""
           },

       
      "routine": [{ "routeid":11,   "starttime":"00:30:00",   "endtime":"00:55:00",  "order":[21,23,22,24] },
              { "routeid":12,   "starttime":"00:40:00",   "endtime":"00:45:00",  "order":[21,23] },
              { "routeid":13,   "starttime":"00:10:00",   "endtime":"00:50:00",  "order":[22,24] }
              ]
              
      
     
}
```
