public override void PreInit() { Weapon = GetComponent <IWeapon>(); AddTag("Weapon"); Damage = Stats.AddStat(DamageInfo, BaseDamage); ProjectileAmount = Stats.AddStat(ProjectileAmountInfo, BaseProjectileAmount); Spread = Stats.AddStat(SpreadInfo, BaseSpread); Speed = Stats.AddStat(SpeedInfo, BaseSpeed); Firerate = Stats.AddStat(FirerateInfo, BaseFirerate); OnFire = Events.AddEvent(OnFireInfo); OnProjectile = Events.AddEvent(OnProjectileInfo); OnProjectileDepleted = Events.AddEvent(OnProjectileDepletedInfo); OnProjectileHit = Events.AddEvent(OnProjectileHitInfo); OnProjectileKill = Events.AddEvent(OnProjectileKillInfo); Weapon.OnFire += Weapon_OnFire; Weapon.OnProjectile += Weapon_OnProjectile; Weapon.OnProjectileDepleted += Weapon_OnProjectileDepleted; Weapon.OnProjectileHit += Weapon_OnProjectileHit; Weapon.OnProjectileKill += Weapon_OnProjectileKill; Damage.OnChanged += UpdateStats; ProjectileAmount.OnChanged += UpdateStats; Spread.OnChanged += UpdateStats; Speed.OnChanged += UpdateStats; Firerate.OnChanged += UpdateStats; }
public override void PreInit() { AddTag("Base"); _onTargetAcquired = Events.AddEvent(OnTargetAcquiredInfo); Range = Stats.AddStat(RangeInfo, BaseRange); }
static Tuple<EventBuilder, FieldBuilder> GenerateEvent(System.Reflection.Emit.TypeBuilder typeBuilder, IEventCaller @event) { var eventName = @event.Name; var eventHandlerType = @event.EventHandlerType; var eventHandlerTypes = new[] { eventHandlerType }; var eventBackingField = typeBuilder.DefineField("m_" + eventName, eventHandlerType, FieldAttributes.Private); var voidType = typeof(void); //Combine event var add = typeBuilder.DefineMethod("add_" + eventName, VirtPublicProperty | MethodAttributes.Final | MethodAttributes.NewSlot, voidType, eventHandlerTypes); var generator = add.GetILGenerator(); generator.Emit(OpCodes.Ldarg_0); generator.Emit(OpCodes.Ldarg_0); generator.Emit(OpCodes.Ldfld, eventBackingField); generator.Emit(OpCodes.Ldarg_1); generator.Emit(OpCodes.Call, _delegateCombine.Value); generator.Emit(OpCodes.Castclass, eventHandlerType); generator.Emit(OpCodes.Stfld, eventBackingField); generator.Emit(OpCodes.Ret); //Remove event var remove = typeBuilder.DefineMethod("remove_" + eventName, VirtPublicProperty | MethodAttributes.Final | MethodAttributes.NewSlot, voidType, eventHandlerTypes); generator = remove.GetILGenerator(); generator.Emit(OpCodes.Ldarg_0); generator.Emit(OpCodes.Ldarg_0); generator.Emit(OpCodes.Ldfld, eventBackingField); generator.Emit(OpCodes.Ldarg_1); generator.Emit(OpCodes.Call, _delegateRemove.Value); generator.Emit(OpCodes.Castclass, eventHandlerType); generator.Emit(OpCodes.Stfld, eventBackingField); generator.Emit(OpCodes.Ret); //event var eventBuilder = typeBuilder.DefineEvent(eventName, EventAttributes.None, eventHandlerType); eventBuilder.SetAddOnMethod(add); eventBuilder.SetRemoveOnMethod(remove); return Tuple.Create(eventBuilder, eventBackingField); }
public override void Init() { OnTargetAcquired = Events.AddEvent(OnTargetAcquiredInfo); _mousePointer = new GameObject("MousePointer").transform; }