예제 #1
0
    public override void CollectObservations(VectorSensor sensor)
    {
        obsDisplayText = "";
        LogVectorObs("position", planet.transform.rotation * this.transform.localPosition, new Vector3(-0.5f, 0, -0.5f), new Vector3(0.5f, 0.6f, 0.5f), sensor);
        LogVectorObs("Planet angular velocity", planet.angularVelocity, new Vector3(-3, -3, -3), new Vector3(3, 3, 3), sensor);
        LogVectorObs("Self Tangential Velocity", planet.GetPointVelocity(this.transform.position), new Vector3(-3, -3, -3), new Vector3(3, 3, 3), sensor);
        LogVectorObs("lightning target position", new Vector3(0, 0, 0), new Vector3(-0.5f, 0, -0.5f), new Vector3(0.5f, 0.6f, 0.5f), sensor);
        LogVectorObs("Can Consume", canConsume, sensor);
        LogVectorObs("Consuming", consuming, sensor);
        LogVectorObs("Grounded", false, sensor);
        LogVectorObs("Sitting", false, sensor);
        LogVectorObs("Can Push", false, sensor);
        LogVectorObs("Pushing", false, sensor);
        if (canConsume)
        {
            LogVectorObs("Consume Timer", 1, sensor);
        }
        else
        {
            LogVectorObs("Consume Timer", (Time.fixedTime - consumeTime) / 10, sensor);
        }

        int agentnum = 0;

        pushTarget = null;

        foreach (var agent in agents)
        {
            if (Vector3.Distance(agent.transform.position, this.transform.position) < 2f)
            {
                pushTarget = agent.GetComponent <Conscientious>();
            }
            LogVectorObs("position", planet.transform.rotation * agent.transform.localPosition, new Vector3(-0.5f, 0, -0.5f), new Vector3(0.5f, 0.6f, 0.5f), sensor);
            LogVectorObs("Other Agent's Tangential Velocity", planet.GetPointVelocity(agent.transform.position), new Vector3(-3, -3, -3), new Vector3(3, 3, 3), sensor);
            agentnum++;
        }
        for (int i = agentnum; i < 5; i++)
        {
            LogVectorObs("position", new Vector3(0, 0, 0), new Vector3(-0.5f, 0, -0.5f), new Vector3(0.5f, 0.6f, 0.5f), sensor);
            LogVectorObs("Other Agent's Tangential Velocity", new Vector3(0, 0, 0), new Vector3(-3, -3, -3), new Vector3(3, 3, 3), sensor);
        }

        int weightNum = 0;

        foreach (var weight in weights)
        {
            LogVectorObs("Weight position", planet.transform.rotation * weight.transform.localPosition, new Vector3(-0.5f, 0, -0.5f), new Vector3(0.5f, 0.6f, 0.5f), sensor);
            LogVectorObs("Weight Tangential Velocity", planet.GetPointVelocity(weight.transform.position), new Vector3(-3, -3, -3), new Vector3(3, 3, 3), sensor);
            foreach (var consumePoint in weight.consumePoints)
            {
                //LogVectorObs("Consume Point position", planet.transform.rotation * consumePoint.transform.localPosition, new Vector3(-0.5f, 0, -0.5f), new Vector3(0.5f, 0.6f, 0.5f), sensor);
                LogVectorObs("Can Consume at Point", consumePoint.CanConsume, sensor);
            }
            weightNum++;
        }
        for (int i = weightNum; i < 5; i++)
        {
            LogVectorObs("Weight position", new Vector3(0, 0, 0), new Vector3(-0.5f, 0, -0.5f), new Vector3(0.5f, 0.6f, 0.5f), sensor);
            LogVectorObs("Weight Tangential Velocity", new Vector3(0, 0, 0), new Vector3(-3, -3, -3), new Vector3(3, 3, 3), sensor);
            for (int j = 0; j < 3; i++)
            {
                //LogVectorObs("Consume Point position", new Vector3(0, 0, 0), new Vector3(-0.5f, 0, -0.5f), new Vector3(0.5f, 0.6f, 0.5f), sensor);
                LogVectorObs("Can Consume at Point", true, sensor);
            }
        }

        if (priorConsumePoint)
        {
            LogVectorObs("Prior Consume Point position", planet.transform.rotation * priorConsumePoint.transform.localPosition, new Vector3(-0.5f, 0, -0.5f), new Vector3(0.5f, 0.6f, 0.5f), sensor);
        }
        else
        {
            LogVectorObs("Consume Point position", new Vector3(0, 0, 0), new Vector3(-0.5f, 0, -0.5f), new Vector3(0.5f, 0.6f, 0.5f), sensor);
        }

        obsSize = sensor.GetObservationShape().Length;
    }