コード例 #1
0
ファイル: EarModule3.cs プロジェクト: abarabone/a
    public float threshold;             // 聞こえる音の閾値。人間の通常状態(立ち)を 1.0f とする。loudness は、種別を超えた対象の興味度を加味した値とする。



    public override int scan(TargetFinder3 finder, _Action3[] others, float[] sqrDists)
    {
        var sqrLimitDist = distance * distance;


        var ires = -1;

        var resLoudness = 0.0f;


        for (var i = 0; i < others.Length; i++)
        {
            if (sqrDists[i] <= sqrLimitDist)
            {
                if (capture(finder, others[i]) && others[i].output.loudness > resLoudness)                   // 音は全候補で最大のものを返す。
                {
                    ires = i;

                    resLoudness = others[i].output.loudness;
                }
            }
            else
            {
                // これ以上遠いものは打ち切ってOK

                break;
            }
        }

        return(ires);
    }
コード例 #2
0
ファイル: Sencor3Holder.cs プロジェクト: abarabone/a
    public TargetFinder3.TargetInfoUnit capture(TargetFinder3 finder, _Action3 other, float sqrDist)
    {
        foreach (var s in sensors)
        {
            if (sqrDist <= s.distance * s.distance && s.capture(finder, other))
            {
                Destroy(Instantiate(s.hint, finder.tfSensor.position, finder.rb.rotation), 1.0f);                    //
                return(new TargetFinder3.TargetInfoUnit(other, s.errRadius));
            }
        }


        return(new TargetFinder3.TargetInfoUnit());
    }
コード例 #3
0
ファイル: EyeAroundModule3.cs プロジェクト: abarabone/a
    public override bool capture(TargetFinder3 finder, _Action3 target)
    {
        var visible = false;


        var senspos = finder.tfSensor.position;

        var targpos = target.tfObservedCenter.position;


        visible = !Physics.Linecast(senspos, targpos, UserLayer.sensorEyeOcculusion);


        return(visible);
    }
コード例 #4
0
ファイル: Sencor3Holder.cs プロジェクト: abarabone/a
    public TargetFinder3.TargetInfoUnit scan(TargetFinder3 finder, _Action3[] others, float[] sqrDists)
    {
        foreach (var s in sensors)
        {
            var i = s.scan(finder, others, sqrDists);

            if (i != -1)
            {
                Destroy(Instantiate(s.hint, finder.tfSensor.position, finder.rb.rotation), 1.0f);                    //
                return(new TargetFinder3.TargetInfoUnit(others[i], s.errRadius));
            }
        }


        return(new TargetFinder3.TargetInfoUnit());
    }
コード例 #5
0
    public override bool capture(TargetFinder3 finder, _Action3 target)
    {
        var visible = false;


        var senspos = finder.tfSensor.position;

        var targpos = target.tfObservedCenter.position;


        var forward = finder.tfSensor.forward;

        var dir = (targpos - senspos).normalized;


        if (Vector3.Dot(forward, dir) >= cosDirectivity)
        {
            visible = !Physics.Linecast(senspos, targpos, UserLayer.sensorEyeOcculusion);
        }


        return(visible);
    }
コード例 #6
0
ファイル: EyeAroundModule3.cs プロジェクト: abarabone/a
    public override int scan(TargetFinder3 finder, _Action3[] others, float[] sqrDists)
    {
        var sqrLimitDist = distance * distance;


        for (var i = 0; i < others.Length; i++)
        {
            if (sqrDists[i] <= sqrLimitDist)
            {
                if (capture(finder, others[i]))
                {
                    return(i);
                }
            }
            else
            {
                // これ以上遠いものは打ち切ってOK

                break;
            }
        }

        return(-1);
    }
コード例 #7
0
ファイル: EyeAroundModule3.cs プロジェクト: abarabone/a
 public override bool concentrate(TargetFinder3 finder)
 {
     return(false);
 }
コード例 #8
0
ファイル: EarModule3.cs プロジェクト: abarabone/a
 public override bool capture(TargetFinder3 finder, _Action3 target)
 {
     return(target.output.loudness >= threshold);       // * finder.sensitiveRateR;
 }
コード例 #9
0
 public virtual bool concentrate(TargetFinder3 finder)
 {
     return(false);
 }
コード例 #10
0
 public virtual bool capture(TargetFinder3 finder, _Action3 target)
 {
     return(false);
 }
コード例 #11
0
 public virtual int scan(TargetFinder3 finder, _Action3[] others, float[] sqrDists)
 {
     return(-1);
 }