示例#1
0
    protected RHSGenerateResources GetEmptyGenerateResourcesStatement()
    {
        GameObject           go = Instantiate(RHManager.GenerateResourcesPrefab);
        RHSGenerateResources st = go.GetComponent <RHSGenerateResources>();

        Destroy(go);
        return(st);
    }
示例#2
0
    public virtual RHStatement GenerateStandardResponse(RHSpeaker originalSpeaker, RHListener originalListener)
    {
        float length = GetResponseLengthFromAuthority(originalListener.GetAuthority(originalSpeaker, true));

        if (length == 0)
        {
            return(null);
        }
        RHResource r;

        RHSGenerateResources response = GetEmptyGenerateResourcesStatement();

        response.Time = length;
        Dictionary <float, RHResource> roller = new Dictionary <float, RHResource>();

        int   intensity        = Mathf.RoundToInt(Mathf.Max(1, originalListener.GetEmotionalIntensity() / 30f));
        float favorNonNegative = originalListener.GetFavor(originalSpeaker) + 100;
        float positiveScore    = Mathf.RoundToInt(Mathf.Max(0, favorNonNegative));

        if (favorNonNegative > 120)
        {
            positiveScore += (favorNonNegative - 100) * 5f;
        }
        float negativeScore = Mathf.RoundToInt(Mathf.Max(0, 200 - favorNonNegative));

        if (favorNonNegative < 80)
        {
            negativeScore -= (favorNonNegative - 100) * 5f;
        }
        float neutralScore = 100f - Mathf.Abs(favorNonNegative - 100f);

        if (Mathf.Abs(favorNonNegative - 100f) < 20)
        {
            neutralScore *= 2f;
        }

        float trustNonNegative = originalListener.GetTrust(originalSpeaker);
        float ideaScore        = (Mathf.Max(0f, trustNonNegative) - (originalListener.GetAuthority(originalSpeaker) * 0.5f)) * 0.5f;
        float opinionScore     = (Mathf.Max(0f, trustNonNegative) - (originalListener.GetAuthority(originalSpeaker) * 0.5f)) * 0.4f;
        float questionScore    = (Mathf.Max(0f, trustNonNegative) - (originalListener.GetAuthority(originalSpeaker) * 0.5f)) * 0.25f;

        roller = RegisterChance(roller, new RHResource(RHResourceType.POSITIVE, intensity), positiveScore);
        roller = RegisterChance(roller, new RHResource(RHResourceType.NEGATIVE, intensity), negativeScore);
        roller = RegisterChance(roller, new RHResource(RHResourceType.NONE, intensity), neutralScore);
        roller = RegisterChance(roller, new RHResource(RHResourceType.PERSONAL, intensity), ideaScore);
        //roller = RegisterChance(roller, new RHResource(RHResourceType.PERSONAL, intensity), opinionScore);
        roller = RegisterChance(roller, new RHResource(RHResourceType.QUESTION, intensity), questionScore);

        r = RollResource(roller);
        if (r != null)
        {
            response.addResource(r);
            response.distributeResources();
        }
        return(response);
    }
示例#3
0
    public override RHStatement GenerateStandardResponse(RHSpeaker originalSpeaker, RHListener originalListener)
    {
        if (!IsGenerateResponse(originalListener.GetTrust(originalSpeaker, true)))
        {
            return(base.GenerateStandardResponse(originalSpeaker, originalListener));
        }
        int intensity = Mathf.RoundToInt(Mathf.Max(1, originalListener.GetEmotionalIntensity() / 30f));
        RHSGenerateResources response = GetEmptyGenerateResourcesStatement();

        response.addResource(new RHResource(m_mainResource, intensity));
        return(response);
    }