using System.Collections.Generic; using UnityEngine; namespace CreatureControl { [System.Serializable] public class Antenna { private Transform _scape; public Transform scape { get => this._scape; set { this._scape = value; this._scapeLength = 0; } } private Transform _funiculus; public Transform funiculus { get => this._funiculus; set { this._funiculus = value; this._scapeLength = 0; this._funiculusLength = 0; } } private Transform _end; private float _scapeLength = 0; public float scapeLength { get { if (_scapeLength <= 0 && this.scape != null && this._funiculus != null) _scapeLength = Vector3.Distance(this._scape.position, this._funiculus.position); return _scapeLength; } } private float _funiculusLength = 0; public float funuculusLength { get { if (_funiculusLength <= 0 && this._funiculus != null && this._end != null) _funiculusLength = Vector3.Distance(this._funiculus.position, this._end.position); return _funiculusLength; } } public Side side; public bool isLeft => side == Side.Left; public bool isRight => side == Side.Right; // Movement it seems: // head-scape joint: mainly 2 degrees of freedom: pitch and yaw. Limited roll is possible // scape-funiculus joint: mainly 1 degree of freedom: pitch. Limited yaw is possible } }