2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

184 lines
5.3 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
using Entitas;
using Game;
using Articy.Touhou;
using CleverCrow.Fluid.BTs.Trees;
using FluidDynamics;
namespace Game
{
public abstract partial class Util
{
public static Dictionary<Type, int> CompKeymap;
public static int GetCompnentIndex<T>()
{
if (CompKeymap == null)
{
CompKeymap = new Dictionary<Type, int>();
var compTypes = GameComponentsLookup.componentTypes;
for (int i = 0; i < compTypes.Length; i++)
{
CompKeymap[compTypes[i]] = i;
}
}
return CompKeymap[typeof(T)];
}
}
}
public partial class GameEntity
{
static GameEntity()
{
}
public void AddComponent<T>() where T : IComponent
{
var index = Util.GetCompnentIndex<T>();
var component = (T)CreateComponent(index, typeof(T));
AddComponent(index, component);
}
public void AddID(string cfgId, EntityCreateHandler callback)
{
var newId = UtilID.GetID(EIdType.Entity);
AddID(newId, new CommonData());
iD.Data.IsCreate = true;
iD.Data.IsDestroy = false;
iD.Data.CfgId = cfgId;
iD.Data.CreateCallback = callback;
}
public void AddMonsterView(string[] prefabNames)
{
var cfg = Util.GetMonsterConfigData(CfgId());
var monsterCfg = cfg.GetFeatureEntityParamMonster();
AddView(prefabNames[(int)monsterCfg.MonsterSize]);
}
public void AddView(string prefabPath)
{
AddComponent<ViewComponent>();
var entityPoolItem = EntityPoolManager.Instance.CreateEntity(prefabPath);
var go = entityPoolItem.GameObject;
view.EntityPoolItem = entityPoolItem;
view.GameObject = go;
view.GameObjectLogic = go.transform.Find("logic").gameObject;
view.TransformLogic = view.GameObjectLogic.transform;
view.TransformView = go.transform.Find("view");
view.TransformViewRot = go.transform.Find("view/viewRot");
view.TransformViewOffset = go.transform.Find("view/viewRot/viewOffset");
view.TransformViewMain = go.transform.Find("view/viewRot/viewOffset/animator");
view.TransformViewOther = go.transform.Find("view/other");
view.SpriteRenderer = view.TransformViewMain.GetComponent<SpriteRenderer>();
view.SpriteRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;
view.SpriteRenderer.receiveShadows = true;
view.Material = view.SpriteRenderer.material;
view.Collider = go.GetComponent<Collider>();
view.LocalPositionOrder = Vector3.forward * GameRandom.Random(0, 0.01f);
view.TransformViewRot.localRotation = GameConst.CommonRot;
}
public void AddMove()
{
AddComponent<MoveComponent>();
var go = view.GameObject;
move.Transform = go.transform;
move.TransformViewMain = view.TransformViewMain;
move.Rigidbody = go.GetComponent<Rigidbody>();
move.MoveParam = new MoveParam();
}
public void AddAnimation()
{
AddComponent<AnimationComponent>();
var go = view.GameObject;
animation.Animator = go.GetComponentInChildren<Animator>();
animation.AnimatorOverrideController =
new AnimatorOverrideController(animation.Animator.runtimeAnimatorController);
animation.Animator.runtimeAnimatorController = animation.AnimatorOverrideController;
animation.ResetMsg = true;
}
public void AddTimeline()
{
AddComponent<TimelineComponent>();
timeline.Timeline = new TimelineObject();
}
public void AddSkill()
{
AddComponent<SkillComponent>();
}
public void AddCombo()
{
AddComponent<ComboComponent>();
//test 必须先加武器再加技能
Util.SetWeaponListAll(this);
Util.AddSkillAll(this);
}
public void AddHp()
{
AddComponent<HpComponent>();
hp.IsDamaged.Value = false;
}
public void AddPause()
{
AddComponent<PauseComponent>();
}
public void AddInteract(EInteractType interactType)
{
AddComponent<InteractComponent>();
interact.InteractType = interactType;
}
public void AddBullet()
{
AddComponent<BulletComponent>();
}
public void AddAI()
{
AddComponent<AIComponent>();
aI.ThinkCdMax = 1; //保底思考频率1秒
aI.HungryMax.Value = 1; //保底最大饥饿值1
}
public void AddBuff()
{
AddComponent<BuffComponent>();
}
public void AddMasterSoul()
{
AddComponent<MasterSoulComponent>();
masterSoul.Emitter = view.TransformViewMain.GetComponentInChildren<Fluid_Dynamics_Game_Emitter>();
}
public void AddPoint()
{
AddComponent<PointComponent>();
}
public void AddBag()
{
AddComponent<BagComponent>();
}
public void AddProperty()
{
AddComponent<PropertyComponent>();
Util.ClearProperty(this);
}
}