protected RHSGenerateResources GetEmptyGenerateResourcesStatement() { GameObject go = Instantiate(RHManager.GenerateResourcesPrefab); RHSGenerateResources st = go.GetComponent <RHSGenerateResources>(); Destroy(go); return(st); }
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); }
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); }