using ItemAPI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using UnityEngine;
namespace DogOnALeash
{
public class Module : ETGModule
{
public override void Start()
{
ItemBuilder.Init();
ETGMod.AIActor.OnPostStart += this.OnPostStart;
}
public static void Log(string text, string color = "#FFFFFF")
{
ETGModConsole.Log($"{text}");
}
private void OnPostStart(AIActor actor)
{
if (!string.IsNullOrEmpty(actor.EnemyGuid))
{
if (actor.EnemyGuid == "c07ef60ae32b404f99e294a6f9acba75")
{
LeashController leash = actor.gameObject.GetOrAddComponent();
leash.tugsDog = true;
}
else if (actor.EnemyGuid == "ededff1deaf3430eaf8321d0c6b2bd80")
{
LeashController leash = actor.gameObject.GetOrAddComponent();
}
}
}
public override void Exit() { }
public override void Init() { }
}
public class LeashController : MonoBehaviour
{
public LeashController()
{
}
public void Start()
{
dog = base.GetComponent();
if (dog && dog.GetComponent())
{
CompanionController controller = dog.GetComponent();
owner = ReflectGetField(typeof(CompanionController), "m_owner", controller);
}
if (owner)
{
this.m_cable = dog.gameObject.AddComponent();
this.m_cable.Attach1Offset = this.owner.CenterPosition - this.owner.transform.position.XY();
this.m_cable.Attach2Offset = dog.CenterPosition - dog.transform.position.XY();
this.m_cable.Initialize(this.owner.transform, dog.transform);
m_cable.GetComponent().SetColors(new List() { Color.green });
}
}
public void FixedUpdate()
{
if (tugsDog && Vector2.Distance(owner.specRigidbody.UnitCenter, dog.specRigidbody.UnitCenter) > 5)
{
dog.knockbackDoer.ApplyKnockback(owner.specRigidbody.UnitCenter - dog.specRigidbody.UnitCenter, 10);
}
}
public static T ReflectGetField(Type classType, string fieldName, object o = null)
{
FieldInfo field = classType.GetField(fieldName, BindingFlags.Public | BindingFlags.NonPublic | ((o != null) ? BindingFlags.Instance : BindingFlags.Static));
return (T)field.GetValue(o);
}
public bool tugsDog;
private ArbitraryCableDrawer m_cable;
private AIActor dog;
private PlayerController owner;
}
}