Trick tweaks

This commit is contained in:
hz
2026-01-31 21:09:59 -06:00
parent 0f2a376b40
commit ec35defeb7
3 changed files with 46 additions and 6 deletions
+1 -1
View File
@@ -233,7 +233,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3937090937419967315}
m_Enabled: 1
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b88e05c37f07ccf48bcc436a9d7def5d, type: 3}
m_Name:
+1
View File
@@ -192,6 +192,7 @@ MonoBehaviour:
avoidPlayerWeight: 0.25
avoidTrickWeight: 0.2
wanderWeight: 0.4
maxTricks: 50
jumpImpulse: 6
jumpCooldown: 1
jumpChancePerSecond: 0.5
+44 -5
View File
@@ -1,10 +1,17 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using Random = UnityEngine.Random;
[RequireComponent(typeof(Rigidbody2D))]
[RequireComponent(typeof(Collider2D))]
public class TrickController : MonoBehaviour
{
private static readonly List<TrickController> ActiveTricks = new List<TrickController>();
private static PlayerPlatformerController[] cachedPlayers = Array.Empty<PlayerPlatformerController>();
private static float nextPlayerCacheTime;
[SerializeField] private string treatTag = "Interactable";
[SerializeField] private float moveSpeed = 3.5f;
[SerializeField] private float targetRefreshInterval = 0.4f;
@@ -18,6 +25,7 @@ public class TrickController : MonoBehaviour
[SerializeField] private float avoidPlayerWeight = 0.25f;
[SerializeField] private float avoidTrickWeight = 0.2f;
[SerializeField] private float wanderWeight = 0.4f;
[SerializeField] private int maxTricks = 50;
[SerializeField] private float jumpImpulse = 6f;
[SerializeField] private float jumpCooldown = 1f;
[SerializeField] private float jumpChancePerSecond = 0.5f;
@@ -44,6 +52,19 @@ public class TrickController : MonoBehaviour
body.interpolation = RigidbodyInterpolation2D.Interpolate;
}
private void OnEnable()
{
if (!ActiveTricks.Contains(this))
{
ActiveTricks.Add(this);
}
}
private void OnDisable()
{
ActiveTricks.Remove(this);
}
private void Update()
{
@@ -88,6 +109,14 @@ public class TrickController : MonoBehaviour
return;
}
if (!IsGrounded())
{
var airborne = body.linearVelocity;
airborne.x = 0f;
body.linearVelocity = airborne;
return;
}
Vector2 desiredVelocity;
var stopForTreat = false;
var avoidPlayerDirection = GetAvoidPlayerDirection();
@@ -203,6 +232,11 @@ public class TrickController : MonoBehaviour
private void SpawnTrick(Vector3 position)
{
if (maxTricks > 0 && ActiveTricks.Count >= maxTricks)
{
return;
}
if (trickPrefab != null)
{
Instantiate(trickPrefab, position, Quaternion.identity);
@@ -214,7 +248,13 @@ public class TrickController : MonoBehaviour
private float GetAvoidPlayerDirection()
{
var players = FindObjectsByType<PlayerPlatformerController>(FindObjectsSortMode.None);
if (Time.time >= nextPlayerCacheTime)
{
cachedPlayers = FindObjectsByType<PlayerPlatformerController>(FindObjectsSortMode.None);
nextPlayerCacheTime = Time.time + 0.5f;
}
var players = cachedPlayers;
if (players == null || players.Length == 0)
{
return 0f;
@@ -249,8 +289,7 @@ public class TrickController : MonoBehaviour
private float GetAvoidTrickDirection()
{
var tricks = FindObjectsByType<TrickController>(FindObjectsSortMode.None);
if (tricks == null || tricks.Length <= 1)
if (ActiveTricks.Count <= 1)
{
return 0f;
}
@@ -258,9 +297,9 @@ public class TrickController : MonoBehaviour
Transform closest = null;
var closestDist = float.MaxValue;
var origin = transform.position;
for (var i = 0; i < tricks.Length; i++)
for (var i = 0; i < ActiveTricks.Count; i++)
{
var candidate = tricks[i];
var candidate = ActiveTricks[i];
if (candidate == null || candidate == this || !candidate.gameObject.activeInHierarchy)
{
continue;