//*******************************************************
// ShoreSide Configuration File

ServerHost = localhost
ServerPort = $(MOOS_PORT)
Community  = shoreside

#include plugs.moos <origin_warp>
  
//--------------------------------------------------------
Processconfig = ANTLER
{
  MSBetweenLaunches = 100

  Run = MOOSDB           @ NewConsole = false
  Run = pRealm           @ NewConsole = false
  Run = uTimerScript     @ NewConsole = false
  Run = pMarineViewer    @ NewConsole = false
  Run = pLogger          @ NewConsole = false
  Run = uXMS             @ NewConsole = false
  Run = uProcessWatch    @ NewConsole = false

  Run = pShare           @ NewConsole = false
  Run = pHostInfo        @ NewConsole = false
  Run = uFldShoreBroker  @ NewConsole = false
  Run = uFldNodeComms    @ NewConsole = false
  Run = uFldObstacleSim  @ NewConsole = false
  Run = uFldCollObDetect @ NewConsole = false

  Run = uFldCollisionDetect @ NewConsole = false
}

#include plugs.moos <pShare>

//--------------------------------------------------
// pRealm Configuration Block

ProcessConfig = pRealm
{
  AppTick       = 1
  CommsTick     = 1

	hist_var = VIEW_POLYGON
	hist_var = GIVEN_OBSTACLE
}

//---------------------------------------------------------
// uFldCollObDetect Config Block

ProcessConfig = uFldCollObDetect
{
  AppTick    = 2
  CommsTick  = 2

  collision_dist = 1
  near_miss_dist = 5
  encounter_dist = 14

  encounter_flag = OB_TOTAL_ENCOUNTERS=$ENC_CNT
  encounter_flag = OB_TOTAL_NEAR_MISSES=$MISS_CNT
  encounter_flag = OB_TOTAL_COLLISIONS=$COLL_CNT
  encounter_flag = OB_ENCOUNTER = $DIST
  near_miss_flag = OB_NEAR_MISS = $DIST
  collision_flag = OB_COLLISION = $DIST
  near_miss_flag = OB_NEAR_MISS_FULL = vname=$VNAME,ob=$ID,dist=$DIST
  collision_flag = OB_COLLISION_FULL = vname=$VNAME,ob=$ID,dist=$DIST
}

//--------------------------------------------------
// uFldCollisionDetect

ProcessConfig = uFldCollisionDetect
{
  AppTick       = 4
  CommsTick     = 4

  encounter_range = 30
  collision_range = 8
  near_miss_range = 12

  // condition = COLLISION_DETECT=true
  condition = DEPLOY_ALL=true

	report_all_encounters = true

  // collision_flag = COLLISION_$UP_V1_$UP_V2 = $CPA
  collision_flag = COLLISION = $CPA
  near_miss_flag = NEAR_MISS = $CPA
  encounter_flag = ENCOUNTER = $CPA
  //encounter_flag = DENSITY = $[cal@60]

  near_miss_flag = NEAR_MISS_$UP_V1 = $CPA
  near_miss_flag = NEAR_MISS_$UP_V2 = $CPA
  collision_flag = COLLISION_$UP_V1 = $CPA
  collision_flag = COLLISION_$UP_V2 = $CPA

  encounter_flag = EVAL_LOITER_REQ_$UP_V1 = id=$IDX, cpa=$CPA, v2=$V2
  encounter_flag = EVAL_LOITER_REQ_$UP_V2 = id=$IDX, cpa=$CPA, v2=$V1

	encounter_rings = false
  pulse_render   = true
  pulse_range    = 20
  pulse_duration = 30
}


//--------------------------------------------------
// uFldObstacleSim Configuration Block

ProcessConfig = uFldObstacleSim
{
  AppTick       = 1
  CommsTick     = 1

  obstacle_file = obstacles.txt

	draw_region = true
	region_edge_color = gray50

	poly_fill_color = invisible   // default is white
	poly_vert_color = green       // default is gray50
	poly_edge_color = white       // default is gray50
	poly_vert_size  = 2           // default is 1
	poly_edge_size  = 2           // default is 1
	

	min_duration = 400
  max_duration = 500
	refresh_interval = 200

	post_points = $(POINTS)
	point_size  = 4
	
	reuse_ids = false
	
#ifdef DRESET true
	reset_interval = 250
	reset_range    = 10
#endif
	
}

//--------------------------------------------------
// uMAC Configuration Block

ProcessConfig = uMAC
{
  AppTick       = 1
  CommsTick     = 1
}

//--------------------------------------------------
// uFldShoreBroker Configuration Block

ProcessConfig = uFldShoreBroker
{
  AppTick       = 1
  CommsTick     = 1

  // Note: [QBRIDGE = FOO]  is shorthand for                    
  //       [BRIDGE = src=FOO_$V,  alias=FOO] and                
  //       [BRIDGE = src=FOO_ALL, alias=FOO]

  qbridge  = DEPLOY, RETURN, STATION_KEEP, NODE_REPORT, NODE_MESSAGE
  qbridge  = MOOS_MANUAL_OVERRIDE, APPCAST_REQ, AVOID, UP_LOITER
  qbridge  = RETURN_UPDATES
  qbridge  = TRACKED_FEATURE

  bridge   = src=GIVEN_OBSTACLE
  bridge   = src=UP_LOITER_$N, alias=UP_LOITER
  bridge   = src=DRIFT_VECTOR_ADD, alias=DRIFT_VECTOR_ADD
  bridge   = src=HELM_MAP_CLEAR, alias=HELM_MAP_CLEAR
}

//--------------------------------------------------
// uFldNodeComms Configuration Block

ProcessConfig = uFldNodeComms
{
  AppTick   = 2
  CommsTick = 2

  comms_range      = 500
  critical_range   = 25
  min_msg_interval = 15
  max_msg_length   = 1000
  groups           = true

  view_node_rpt_pulses = false
}

//--------------------------------------------------
// pHostInfo configuration block from plugin

ProcessConfig = pHostInfo
{
  AppTick    = 1
  CommsTick  = 1
}

//--------------------------------------------------
// uXMS Configuration Block

ProcessConfig = uXMS
{
  AppTick       = 1
  CommsTick     = 1

  var = APPCAST_REQ_ALL, DEPLOY_ALL, RETURN_ALL, STATION_KEEP_ALL
  var = STATION_KEEP_HENRY, STATION_KEEP_GILDA
  var = RETURN_UPDATES_HENRY, RETURN_UPDATES_GILDA
}

//--------------------------------------------------
// pLogger Configuration Block

ProcessConfig = pLogger
{
  AppTick       = 10
  CommsTick     = 10
  
  File          = XLOG_SHORESIDE
  PATH          = ./
  SyncLog       = true @ 0.2
  AsyncLog      = true
  FileTimeStamp = true

  LogAuxSrc     = true

  // Log it all!!!!!
  WildCardLogging = true 

  WildCardOmitPattern = *_STATUS
  WildCardOmitPattern = DB_VARSUMMARY
  WildCardOmitPattern = DB_RWSUMMARY
}


//--------------------------------------------------------
ProcessConfig = pMarineViewer
{
  AppTick    = 4
  CommsTick  = 4

  tiff_file            = forrest19.tif
  set_pan_x            = -90
  set_pan_y            = -280
  zoom                 = 1.1
  vehicles_shape_scale = 1.5
  vehicles_name_mode   = names

  circle_viewable_all = false
  
	polygon_viewable_labels = false

  appcast_viewable = true
  appcast_color_scheme = indigo

  scope = PSHARE_INPUT_SUMMARY
  scope = NODE_BROKER_PING
  scope = DEPLOY_ALL

  nodes_font_size = xlarge
	procs_font_size = xlarge
	appcast_font_size = large
	
  action = STATION_KEEP_ALL = false
  action = STATION_KEEP_ALL = true

  left_context[return_point] = RETURN_$[UP_VNAME_CLOSEST] = true
  left_context[return_point] = RETURN_UPDATES_$[UP_VNAME_CLOSEST] = points=$[XPOS],$[YPOS]
  left_context[station]      = STATION_KEEP_$[UP_VNAME_CLOSEST] = true

  cmd = label=DEPLOY, var=DEPLOY,  sval=true,  receivers=all:$(VNAMES)
  cmd = label=DEPLOY, var=MOOS_MANUAL_OVERRIDE,  sval=false,  receivers=all:$(VNAMES)
  cmd = label=DEPLOY, var=AVOID,  sval=true,  receivers=all:$(VNAMES)
  cmd = label=DEPLOY, var=RETURN,  sval=false,  receivers=all:$(VNAMES)
  cmd = label=DEPLOY, var=STATION_KEEP,  sval=false,  receivers=all:$(VNAMES)

  cmd = label=RETURN, var=RETURN, sval=true, receivers=all:$(VNAMES)
  cmd = label=RETURN, var=STATION_KEEP, sval=false, receivers=all:$(VNAMES)

  cmd = label=PERMUTE, var=UTS_FORWARD,  dval=0,  receivers=shore

  cmd = label=STATION, var=STATION_KEEP,  sval=true,  receivers=all:$(VNAMES), color=pink

  cmd = label=LOITER-FAST, var=UP_LOITER,  sval=speed=2.8,  receivers=all:$(VNAMES)
  cmd = label=LOITER-SLOW, var=UP_LOITER,  sval=speed=1.4,  receivers=all:$(VNAMES)

  cmd = label=LOITER-CLOCKWISE-TRUE,  var=UP_LOITER, sval=clockwise=true,  receivers=all:$(VNAMES)
  cmd = label=LOITER-CLOCKWISE-FALSE, var=UP_LOITER, sval=clockwise=false, receivers=all:$(VNAMES)
  cmd = label=LOITER-CLOCKWISE-BEST, var=UP_LOITER,  sval=clockwise=false, receivers=all:$(VNAMES)
	
  button_one   = DEPLOY  # DEPLOY_ALL=true 
  button_one   = MOOS_MANUAL_OVERRIDE_ALL=false 
  button_one   = AVOID_ALL=true
  button_one   = RETURN_ALL=false # STATION_KEEP_ALL=false

  button_two   = RETURN  # RETURN_ALL=true
  button_two   = RETURN  # STATION_KEEP_ALL=false
  button_three = PERMUTE   # UTS_FORWARD=0
  button_four  = STATION   # STATION_KEEP_ALL=true

	button_five  = PTS++ # UFOS_POINT_SIZE = bigger
	button_six   = PTS-- # UFOS_POINT_SIZE = smaller
	//button_four  = DRESET   # UFOS_RESET=now

}

//--------------------------------------------------------
// uTimerScript Configuration Block

ProcessConfig = uTimerScript
{
  AppTick   = 4
  CommsTick = 4
  
  paused     = false
  reset_max  = unlimited
  reset_time = end

  randvar = varname=X1, min=-45,  max=5,   key=at_reset
  randvar = varname=Y1, min=-135, max=-35, key=at_reset

  randvar = varname=X2, min=150,  max=180, key=at_reset
  randvar = varname=Y2, min=-125, max=-35, key=at_reset

	event = var=UP_LOITER_2, val="center_assign=$[X1],$[Y1]", time=180 
  event = var=UP_LOITER_1, val="center_assign=$[X2],$[Y2]", time=180

  event = var=UP_LOITER_1, val="center_assign=$[X1],$[Y1]", time=360
  event = var=UP_LOITER_2, val="center_assign=$[X2],$[Y2]", time=360

}


//--------------------------------------------------------
// uProcessWatch Configuration Block

ProcessConfig = uProcessWatch
{
  AppTick   = 1
  CommsTick = 1

  allow_retractions = true
  
  watch_all = true      // default is true

  nowatch = uXMS*
  nowatch = uPokeDB*

  summary_wait = 12
}